import XMonad hiding ( (|||) )
import Data.Monoid
-- import Data.Ratio ((%))
import XMonad.Hooks.FadeInactive
import System.Exit
import Graphics.X11.Xlib.Extras
import Foreign.C.Types (CLong)
import XMonad.Actions.FloatSnap
import XMonad.Actions.FloatKeys
import XMonad.Util.Scratchpad
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Prompt.Window
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers -- Вспомогательные функции размещения
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks -- Управляет выделением места на экране
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.Place
--import XMonad.Layout.Fullscreen
import XMonad.Layout.NoBorders -- Окна без рамок
import XMonad.Layout.Tabbed
import XMonad.Layout.LayoutCombinators
--import XMonad.Layout.TwoPane --режим тайлинга два последних окна
import XMonad.Layout.IM -- Расположение для мессенджеров
import XMonad.Layout.Grid -- Расположение - сетка окон
import XMonad.Layout.PerWorkspace -- Разные расположения для столов
-- import XMonad.Layout.SubLayouts
-- import XMonad.Layout.WindowNavigation
-- import XMonad.Layout.BoringWindows
import XMonad.Layout.Reflect
import XMonad.Layout.Renamed
import Graphics.X11.ExtraTypes.XF86 -- Определения мультимедийных клавиш в X
import XMonad.Util.EZConfig -- (29) "M-C-x" style keybindings
import qualified XMonad.StackSet as W
import qualified Data.Map as M
прозрачность = fadeInactiveLogHook 0.7
фокус_следует_за_мышью :: Bool
фокус_следует_за_мышью = False
-- Whether clicking on a window to focus also passes the click to the window
myClickJustFocuses :: Bool
myClickJustFocuses = False
рабочие_столы = ["1","2","3","4","5","6","7","8","9"]
цвет_рамки_обычного_окна = "#191919"
цвет_рамки_окна_в_фокусе = "#00ff00"
мои_кнопки conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
((modm, xK_q ), kill), -- закрыть окно в фокусе
((modm, xK_space ), sendMessage NextLayout), -- смена режимов тайлинга
((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf), -- сбросить тайлинг этого рабочего стола в умолчание
((modm, xK_k ), windows W.focusDown), -- Переместить фокус в следующее окно
((modm, xK_j ), windows W.focusUp), -- Перенести фокус на предыдущее окно
((modm, xK_m ), windows W.focusMaster), -- Перенести фокус на главное окно
((modm, xK_Return ), windows W.swapMaster), -- Поменять сфокусированное окно и главное окно
((modm .|. shiftMask, xK_j ), windows W.swapDown), -- Поменять сфокусированное окно со следующим окном
((modm .|. shiftMask, xK_k ), windows W.swapUp), -- Поменять сфокусированное окно с предыдущим окном
((modm .|. shiftMask, xK_h ), sendMessage Shrink), -- уменьшить мастер-области
((modm .|. shiftMask, xK_l ), sendMessage Expand), -- Увеличить мастер-области
((modm .|. shiftMask, xK_t ), withFocused $ windows . W.sink), -- Вставить окно обратно в черепицу
((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)), -- Выход из xmonad
--смена тайлинга
((modm .|. controlMask, xK_z ), sendMessage $ JumpToLayout "[Z]"), --мастер область слева
((modm .|. controlMask, xK_m ), sendMessage $ JumpToLayout "[M]"), --мастер область сверху
((modm .|. controlMask, xK_f ), sendMessage $ JumpToLayout "[F]"), --полный экран
((modm .|. controlMask, xK_b ), sendMessage $ JumpToLayout "[B]"), --на всю рабочую область и панель переключения снизу
((modm .|. controlMask, xK_g ), sendMessage $ JumpToLayout "[G]") --горизонтальная черепица
]
++
-- mod-[1..9], Переключиться в рабочее пространство N
-- mod-shift-[1..9], Перемещение клиента в рабочее пространство N
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
мои_макеты = avoidStruts
$ onWorkspace "4" (withIM (0.22) (Role "buddy_list") g)
$ onWorkspace "8" (withIM (0.15) (Role "gimp-toolbox") $ reflectHoriz $ withIM (0.15) (Role "gimp-dock") f)
$ smartBorders
$ onWorkspace "1" (z ||| m ||| f ||| g ||| b)
(z ||| m ||| f ||| g ||| b)
where
z = renamed [Replace "[Z]"] (tiled)
m = renamed [Replace "[M]"] (Mirror tiled)
f = renamed [Replace "[F]"] (Full)
b = renamed [Replace "[B]"] (tabbedBottom shrinkText нижний_бар)
g = renamed [Replace "[G]"] (Grid)
tiled = Tall nmaster delta ratio -- Алгоритм разбивки
nmaster = 1 -- По умолчанию количество окон в мастер-панели
ratio = 55/100 -- По умолчанию часть экрана занимаемая основной панелью
delta = 1/100 -- Процент экрана для увеличения при изменении размеров панелей
поведение_программ = composeAll
[ className =? "mpv" --> doFloat,
className =? "Xmessage" --> doFloat,
className =? "XBomb" --> doFloat,
className =? "feh" --> doFloat,
appName =? "Download" --> doFloat,
appName =? "Browser" --> doFloat,
className =? "Pidgin" --> doShift "4",
className =? "Gimp" --> doShift "8",
className =? "Xfce4-notifyd" --> doIgnore,
isFullscreen --> doFullFloat,
isDialog --> doCenterFloat]
обработчик_событий = fullscreenEventHook <+> docksEventHook
автозагрузка = spawn "~/.autostart.sh"
нижний_бар = defaultTheme {
activeColor = "#FF0000",
inactiveColor = "#0000FF",
activeBorderColor = "#FFFFFF",
inactiveBorderColor = "#FFFFFF",
activeTextColor = "#FFFFFF",
inactiveTextColor = "#FFFFFF",
fontName = "-misc-fixed-*-*-*-*-14-*-*-*-*-*-*-*",
decoHeight = 16
}
бар_конфиг = "xmobar ~/.xmonad/xmobarrc"
бар_цвета = xmobarPP {
ppCurrent = xmobarColor "#00FF00" "" . wrap "[" "]",
ppUrgent = xmobarColor "#666666" "" . wrap "" "*",
ppTitle = xmobarColor "#18FBF6" "" . shorten 85,
ppSep = xmobarColor "#666666" "" " " }
бар_спрятать XConfig {XMonad.modMask = modMask} = (modMask, xK_b)
main = xmonad =<< statusBar бар_конфиг бар_цвета бар_спрятать моя_конфигурация
моя_конфигурация = ewmh $ withUrgencyHook NoUrgencyHook defaultConfig {
-- simple stuff
terminal = "xfce4-terminal", --terminal
focusFollowsMouse = фокус_следует_за_мышью,
clickJustFocuses = myClickJustFocuses,
borderWidth = 1, -- Ширина границы окна в пикселях.
modMask = mod4Mask, --кнопка модификатор
workspaces = рабочие_столы,
normalBorderColor = цвет_рамки_обычного_окна,
focusedBorderColor = цвет_рамки_окна_в_фокусе,
-- key bindings
keys = мои_кнопки,
-- mouseBindings = myMouseBindings,
-- hooks, layouts
layoutHook = мои_макеты,
manageHook = поведение_программ,
handleEventHook = обработчик_событий,
logHook = прозрачность,
startupHook = автозагрузка
}