all repos — xmonad-config @ 56f0af375898219bef475d218f553a9bf26646fe

personal xmonad config

xmonad.hs (view raw)

  1import qualified Data.Map as M
  2import System.Exit
  3
  4import XMonad
  5import qualified XMonad.StackSet as W
  6
  7import XMonad.Actions.GridSelect
  8import XMonad.Actions.WithAll
  9
 10import XMonad.Hooks.DynamicLog
 11import XMonad.Hooks.EwmhDesktops
 12import XMonad.Hooks.StatusBar
 13import XMonad.Hooks.StatusBar.PP
 14
 15import XMonad.Util.ClickableWorkspaces
 16import XMonad.Util.EZConfig
 17import XMonad.Util.NamedScratchpad
 18
 19import XMonad.Layout.BoringWindows hiding (Replace)
 20import XMonad.Layout.Renamed
 21import XMonad.Layout.Spacing
 22import XMonad.Layout.ThreeColumns
 23import XMonad.Layout.ToggleLayouts
 24
 25import LaNinpreConfig
 26
 27myKeys :: [(String, X ())]
 28myKeys = [ ("M-<Return>", spawn myTerminal)
 29         , ("M-w",        spawn myBrowser)
 30         , ("M-p",        spawn "dmenu_run")
 31         , ("<Print>",    spawn "scrot_cmd -f")
 32         , ("C-<Print>",  spawn "scrot_cmd -a")
 33         , ("M1-<Print>", spawn "scrot_cmd -w")
 34
 35         , ("M-s t",      namedScratchpadAction myScratchPads "terminal")
 36         , ("M-s c",      namedScratchpadAction myScratchPads "calculator")
 37         , ("M-s m",      namedScratchpadAction myScratchPads "mocp")
 38         , ("M-s v",      namedScratchpadAction myScratchPads "mpvfloat")
 39
 40         , ("M-g t",      goToSelected myGsConfig)
 41         , ("M-g b",      bringSelected myGsConfig)
 42         , ("M-g g",      mySpawnSelected myGsConfig myAppGrid)
 43
 44         , ("M-S-c",      kill)
 45         , ("M-<Space>",  sendMessage NextLayout)
 46         , ("M-f",        sendMessage ToggleLayout)
 47         , ("M-h",        sendMessage Shrink)
 48         , ("M-l",        sendMessage Expand)
 49         , ("M-j",        focusDown)
 50         , ("M-k",        focusUp)
 51         , ("M-S-j",      swapDown)
 52         , ("M-S-k",      swapUp)
 53         , ("M-m",        focusMaster)
 54         , ("M-S-m",      windows W.swapMaster)
 55         , ("M-t",        withFocused $ windows . W.sink)
 56         , ("M-S-t",      sinkAll)
 57         , ("M-<Tab>",    toggleWindowSpacingEnabled >> toggleScreenSpacingEnabled)
 58
 59         , ("M-S-q",      io (exitWith ExitSuccess))
 60         , ("M-S-r",      spawn "xmonad --recompile && xmonad --restart")
 61         ]
 62         ++
 63         [("M-" ++ m ++ show k, windows $ f i)
 64             | (i, k) <- zip (myWorkspaces) [1..9]
 65             , (f, m) <- [(W.greedyView, ""), (W.shift, "S-")]
 66         ]
 67
 68myColorizer :: a -> Bool -> X (String, String)
 69myColorizer _ active = if active then return (col_bg_alt def, col_fg_alt def)
 70                                 else return (col_bg     def, col_fg     def)
 71
 72myGsConfig :: GSConfig a
 73myGsConfig = (buildDefaultGSConfig myColorizer)
 74           { gs_font = head myFonts
 75           , gs_bordercolor = col_bg_alt def
 76           }
 77
 78mySpawnSelected :: GSConfig String -> [(String, String)] -> X ()
 79mySpawnSelected conf lst = gridselect conf lst >>= flip whenJust spawn
 80
 81myXmobarPP :: PP
 82myXmobarPP = def
 83           { ppSep             = xmobarColor (col_bg_alt def) "" " | "
 84           , ppCurrent         = xmobarColor (col_fg_alt def) "" . sitelen
 85           , ppHidden          = xmobarColor (col_fg     def) "" . sitelen
 86           , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . sitelen
 87           } where
 88               sitelen = xmobarFont 3
 89
 90mySB :: StatusBarConfig
 91mySB = statusBarProp "xmobar"
 92     $ clickablePP $ filterOutWsPP [scratchpadWorkspaceTag] myXmobarPP
 93
 94myLayout = boringWindows
 95         $ toggleLayouts full
 96         $ tiled ||| threeCol
 97         where
 98            tiled    = renamed [Replace "lawa"]
 99                     $ spacingWithEdge space $ Tall nmaster delta ratio
100            threeCol = renamed [Replace "supa"]
101                     $ spacingWithEdge space $ ThreeColMid nmaster delta ratio
102            full     = renamed [Replace "suli"] $ Full
103            nmaster  = 1
104            ratio    = 1/2
105            delta    = 3/100
106            space    = 4
107
108myConfig = def
109         { terminal           = myTerminal
110         , modMask            = myModMask
111         , layoutHook         = myLayout
112         , manageHook         = myManageHook <+> namedScratchpadManageHook myScratchPads
113         , workspaces         = myWorkspaces
114         , borderWidth        = myBorderWidth
115         , keys               = const M.empty -- discard default keybindings
116         , normalBorderColor  = col_bg def
117         , focusedBorderColor = col_bg_alt def
118         } `additionalKeysP` myKeys
119
120main :: IO ()
121main = xmonad
122     . ewmhFullscreen
123     . ewmh
124     . withEasySB mySB defToggleStrutsKey
125     $ myConfig