import System.Exit import XMonad import XMonad.Actions.CycleWS import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar.PP import XMonad.Layout.IndependentScreens import XMonad.Layout.Renamed import XMonad.Layout.Spacing import XMonad.Prompt import XMonad.Prompt.FuzzyMatch import XMonad.Prompt.Pass import qualified XMonad.StackSet as W import XMonad.Util.EZConfig import XMonad.Util.SpawnOnce primary = "#a1b56c" grey0 = "#181818" grey1 = "#585858" grey2 = "#b8b8b8" grey3 = "#f8f8f8" main :: IO () main = do nScreens <- countScreens xmonad . ewmhFullscreen . ewmh . withEasySB ( statusBarProp "xmobar" ( pure ( marshallPP (S 0) def { ppSep = "" , ppWsSep = "" , ppHiddenNoWindows = xmobarColor grey2 grey0 . pad , ppCurrent = xmobarColor grey3 primary . pad , ppHidden = xmobarBorder "Top" primary 2 . xmobarColor grey2 grey0 . pad , ppTitle = const "" , ppLayout = xmobarColor grey2 grey0 . pad } ) ) ) defToggleStrutsKey $ let promptConfig = def { position = Top , bgColor = grey0 , bgHLight = primary , promptBorderWidth = 0 , fgHLight = grey3 , height = 25 , font = "xft:Hermit:size=12" , searchPredicate = fuzzyMatch , sorter = fuzzySort , alwaysHighlight = True } in def { borderWidth = 2 , workspaces = [marshall s vw | vw <- (map show [1 .. 9]), s <- [0 .. nScreens]] , layoutHook = renamed [Replace "[]="] (spacingWithEdge 8 $ Tall 1 (5 / 100) (1 / 3)) ||| renamed [Replace "[M]"] Full , normalBorderColor = grey1 , focusedBorderColor = primary , keys = \c -> mkKeymap c $ [ ("M-", spawn "alacritty") , ("M-q", kill) , ("M-d", spawn $ "bemenu-run -p ' ' --cw 2") , ("M-r", spawn "xmonad --recompile && xmonad --restart") , ("M-w", spawn "slock") , ("M-S-e", io exitSuccess) , ("M-j", windows W.focusDown) , ("M-k", windows W.focusUp) , ("M-c", passPrompt promptConfig) , ("M-x", passOTPPrompt promptConfig) , ("M-i", sendMessage $ IncMasterN 1) , ("M-u", sendMessage $ IncMasterN $ -1) , ("M-h", sendMessage Shrink) , ("M-l", sendMessage Expand) , ("M-m", sendMessage $ JumpToLayout "[M]") , ("M-t", sendMessage $ JumpToLayout "[]=") , ( "M-" , gets (W.screen . W.current . windowset) >>= \currentScreen -> toggleWS' [ marshall s vw | vw <- (map show [1 .. 9]) , s <- [x | x <- [0 .. nScreens], x /= currentScreen] ] ) , ("M-S-", windows W.swapMaster) , ("M-S-", withFocused $ windows . W.sink) ] ++ concatMap ( \n -> [ ("M-" ++ n, windows $ onCurrentScreen W.greedyView n) , ("M-S-" ++ n, windows $ onCurrentScreen W.shift n) ] ) (map show [1 .. 9]) , startupHook = do spawnOnce "feh --bg-fill --no-fehbg --randomize /home/tom/src/nixos/wallpapers" spawnOnce "xautolock -locker slock -time 1" }