import XMonad import XMonad.Hooks.DynamicLog import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageHelpers import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar.PP import XMonad.Layout.Magnifier import XMonad.Layout.Renamed import XMonad.Layout.ThreeColumns import XMonad.Util.EZConfig import XMonad.Util.Loggers import XMonad.Util.SpawnOnce main :: IO () main = xmonad . ewmhFullscreen . ewmh . withEasySB (xmobar1 <> xmobar2) defToggleStrutsKey $ myConfig myConfig = def { modMask = mod4Mask , terminal = "kitty" , focusedBorderColor = "#000000" , normalBorderColor = "#ffffff" , layoutHook = myLayout , startupHook = myStartupHook , manageHook = myManageHook } `additionalKeysP` [ ("M-S-l" , spawn "xscreensaver-command -lock" ) , ("M-v" , spawn "vivaldi" ) , ("M-" , unGrab *> spawn "gnome-screenshot -i" ) ] myLayout = tiled ||| Mirror tiled ||| Full ||| threeCol where threeCol = renamed [Replace "ThreeCol"] $ magnifiercz' 1.3 $ ThreeColMid nmaster delta ratio tiled = Tall nmaster delta ratio nmaster = 1 ratio = 1/2 delta = 3/100 xmobar1 = statusBarProp "xmobar -x 0 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) xmobar2 = statusBarProp "xmobar -x 1 ~/.config/xmobar/xmobarrc" (pure myXmobarPP) myXmobarPP :: PP myXmobarPP = def { ppSep = darkgreen " • " , ppTitleSanitize = xmobarStrip , ppCurrent = wrap " " "" . xmobarBorder "Top" "#8be9fd" 2 , ppHidden = white . wrap " " "" , ppHiddenNoWindows = lowWhite . wrap " " "" , ppUrgent = red . wrap (yellow "!") (yellow "!") , ppOrder = \[ws, l, _, wins] -> [ws, l, wins] , ppExtras = [logTitles formatFocused formatUnfocused] } where formatFocused = wrap (white "[") (white "]") . darkgreen . ppWindow formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . white . ppWindow ppWindow :: String -> String ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30 blue, lowWhite, darkgreen, red, white, yellow :: String -> String darkgreen = xmobarColor "#013220" "" blue = xmobarColor "#bd93f9" "" white = xmobarColor "#f8f8f2" "" yellow = xmobarColor "#f1fa8c" "" red = xmobarColor "#ff5555" "" lowWhite = xmobarColor "#bbbbbb" "" myStartupHook :: X () myStartupHook = do spawnOnce "xsetroot -cursor_name left_ptr" spawnOnce "mons -e left" spawnOnce "xscreensaver -no-splash" spawnOnce "redshift" spawnOnce "dunst" spawnOnce "~/.fehbg" myManageHook :: ManageHook myManageHook = composeAll [ className =? "mpv" --> doFullFloat , isDialog --> doFloat ]