{-# LANGUAGE BlockArguments #-} import Control.Monad (forM_, join) import Data.Function ((&)) import System.Environment import System.Process import XMonad import XMonad.Actions.SpawnOn import XMonad.Config import XMonad.Hooks.EwmhDesktops (ewmh, fullscreenEventHook) import XMonad.Hooks.ManageDocks import XMonad.Layout.NoBorders import XMonad.Layout.Spacing import XMonad.Layout.ThreeColumns import XMonad.Operations import XMonad.Util.EZConfig main = xmonad $ ewmh $ docks $ def { modMask = mod4Mask, terminal = myTerminal, workspaces = myWorkspaces, borderWidth = 5, focusedBorderColor = "#{{base05-hex}}", normalBorderColor = "#{{base05-hex}}", startupHook = startup, layoutHook = avoidStruts myLayoutHook, manageHook = manageDocks <+> manageSpawn <+> manageHook def, handleEventHook = fullscreenEventHook <+> docksEventHook <+> handleEventHook def } `additionalKeysP` keymap where myWorkspaces = ["1:dev", "2:browser", "3:chat", "4:terminal", "5:reading", "6:music", "7:gaming"] myTerminal = "xmonad" myBrowser = "firefox" keymap = [ ("M-p", spawn "rofi -show drun"), ("M-g", spawn myBrowser), ("M-d", spawn "Discord"), ("M-v", spawn "wezterm start vimclip"), ("M-s", spawn "spectacle -rcb"), ("M-S-s", spawn "spectacle -mcb"), ("M-C-s", spawn "spectacle -ucb"), ("M-f", sendMessage ToggleStruts), ("M-c", kill) ] uniformBorder = join $ join $ join Border border = uniformBorder 0 spacingHook = spacingRaw False border False border True tall = Tall 1 (3 / 100) (1 / 2) layouts = tall ||| Full myLayoutHook = spacingHook layouts startupApps = [] -- [ (0, "wezterm"), -- (1, "firefox"), -- (2, "Discord") -- ] startup :: X () startup = do forM_ startupApps \(index, app) -> do spawnOn (myWorkspaces !! index) app