all repos — xmonad-config @ 5025c65f295bcfaadf67022f0396380013faf7d7

personal xmonad config

xmonad.hs (view raw)

  1import System.Exit
  2
  3import XMonad
  4import qualified XMonad.StackSet as W
  5
  6import XMonad.Actions.GridSelect
  7import XMonad.Actions.WithAll
  8
  9import XMonad.Hooks.DynamicLog
 10import XMonad.Hooks.EwmhDesktops
 11import XMonad.Hooks.ManageDocks
 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.NoBorders
 21import XMonad.Layout.Renamed
 22import XMonad.Layout.ResizableTile
 23import XMonad.Layout.ResizableThreeColumns
 24import XMonad.Layout.Simplest
 25import XMonad.Layout.Spacing
 26import XMonad.Layout.SubLayouts
 27import XMonad.Layout.Tabbed
 28import XMonad.Layout.ToggleLayouts
 29import XMonad.Layout.WindowNavigation
 30
 31import LaNinpreConfig
 32
 33myKeys :: [(String, X ())]
 34myKeys = [ ("M-<Return>", spawn myTerminal)
 35         , ("M-w",        spawn myBrowser)
 36         , ("M-p",        spawn "dmenu_run")
 37         , ("M-<Delete>", spawn "slock")
 38         , ("<Print>",    spawn "scrot_cmd -f")
 39         , ("C-<Print>",  spawn "scrot_cmd -a")
 40         , ("M1-<Print>", spawn "scrot_cmd -w")
 41
 42         , ("M-s t",      namedScratchpadAction myScratchPads "terminal")
 43         , ("M-s c",      namedScratchpadAction myScratchPads "calculator")
 44         , ("M-s m",      namedScratchpadAction myScratchPads "mocp")
 45         , ("M-s v",      namedScratchpadAction myScratchPads "mpvfloat")
 46
 47         , ("M-g t",      goToSelected myGsConfig)
 48         , ("M-g b",      bringSelected myGsConfig)
 49         , ("M-g g",      mySpawnSelected myGsConfig myAppGrid)
 50
 51         , ("M-S-c",      kill)
 52         , ("M-<Space>",  sendMessage NextLayout)
 53         , ("M-f",        sendMessage ToggleLayout >> sendMessage ToggleStruts)
 54         , ("M-h",        sendMessage Shrink)
 55         , ("M-l",        sendMessage Expand)
 56         , ("M-C-j",      sendMessage MirrorShrink)
 57         , ("M-C-k",      sendMessage MirrorExpand)
 58         , ("M-M1-h",     sendMessage $ pullGroup L)
 59         , ("M-M1-j",     sendMessage $ pullGroup D)
 60         , ("M-M1-k",     sendMessage $ pullGroup U)
 61         , ("M-M1-l",     sendMessage $ pullGroup R)
 62         , ("M-M1-u",     withFocused $ sendMessage . UnMerge)
 63         , ("M-M1-m",     withFocused $ sendMessage . UnMergeAll)
 64         , ("M-M1-,",     onGroup W.focusDown')
 65         , ("M-M1-.",     onGroup W.focusUp')
 66         , ("M-j",        focusDown)
 67         , ("M-k",        focusUp)
 68         , ("M-S-j",      swapDown)
 69         , ("M-S-k",      swapUp)
 70         , ("M-m",        focusMaster)
 71         , ("M-S-m",      windows W.swapMaster)
 72         , ("M-t",        withFocused $ windows . W.sink)
 73         , ("M-S-t",      sinkAll)
 74         , ("M-<Tab>",    toggleWindowSpacingEnabled >> toggleScreenSpacingEnabled)
 75
 76         , ("M-S-q",      io exitSuccess)
 77         , ("M-S-r",      spawn "xmonad --recompile && xmonad --restart")
 78
 79         , ("<XF86AudioPlay>",        spawn $ myMocp ++ " -G")
 80         , ("<XF86AudioRaiseVolume>", spawn $ myMocp ++ " -v +5")
 81         , ("<XF86AudioLowerVolume>", spawn $ myMocp ++ " -v -5")
 82         , ("<XF86AudioPrev>",        spawn $ myMocp ++ " --previous")
 83         , ("<XF86AudioNext>",        spawn $ myMocp ++ " --next")
 84         ]
 85         ++
 86         [("M-" ++ m ++ show k, windows $ f i)
 87             | (i, k) <- zip myWorkspaces [1..9]
 88             , (f, m) <- [(W.greedyView, ""), (W.shift, "S-")]
 89         ]
 90
 91myColorizer :: a -> Bool -> X (String, String)
 92myColorizer _ active = if active then return (col_bg_alt def, col_fg_alt def)
 93                                 else return (col_bg     def, col_fg     def)
 94
 95myGsConfig :: GSConfig a
 96myGsConfig = (buildDefaultGSConfig myColorizer)
 97           { gs_font = head myFonts
 98           , gs_bordercolor = col_bg_alt def
 99           }
100
101mySpawnSelected :: GSConfig String -> [(String, String)] -> X ()
102mySpawnSelected conf lst = gridselect conf lst >>= flip whenJust spawn
103
104myXmobarPP :: PP
105myXmobarPP = def
106           { ppSep             = xmobarColor (col_bg_alt def) "" " | "
107           , ppCurrent         = xmobarColor (col_fg_alt def) "" . sitelen
108           , ppHidden          = xmobarColor (col_fg     def) "" . sitelen
109           , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . sitelen
110           , ppLayout          = sitelen
111           } where
112               sitelen = xmobarFont 3
113
114mySB :: StatusBarConfig
115mySB = statusBarProp "xmobar"
116     $ clickablePP $ filterOutWsPP [scratchpadWorkspaceTag] myXmobarPP
117
118myTabTheme :: Theme
119myTabTheme = def
120           { fontName            = head myFonts
121           , activeTextColor     = col_fg_alt def
122           , activeColor         = col_bg_alt def
123           , activeBorderWidth   = 0
124           , inactiveTextColor   = col_fg def
125           , inactiveColor       = col_bg def
126           , inactiveBorderWidth = 0
127           , urgentTextColor     = col_bg_alt def
128           , urgentColor         = col_fg_alt def
129           , urgentBorderWidth   = 0
130           }
131
132myLayout = windowNavigation
133         $ boringWindows
134         $ toggleLayouts full
135         $ smartBorders
136         $ tiled ||| threeCol
137         where
138            tiled    = renamed [Replace "\xe624"] -- lawa
139                     $ addTabs shrinkText myTabTheme
140                     $ subLayout [] Simplest
141                     $ spacingWithEdge space $ ResizableTall nmaster delta ratio []
142            threeCol = renamed [Replace "\xe665"] -- supa
143                     $ addTabs shrinkText myTabTheme
144                     $ subLayout [] Simplest
145                     $ spacingWithEdge space $ ResizableThreeColMid nmaster delta ratio []
146            full     = renamed [Replace "\xe663"] -- suli
147                     $ noBorders Full
148            nmaster  = 1
149            ratio    = 1/2
150            delta    = 3/100
151            space    = 4
152
153myConfig = def
154         { terminal           = myTerminal
155         , modMask            = myModMask
156         , layoutHook         = myLayout
157         , manageHook         = myManageHook
158         , workspaces         = myWorkspaces
159         , borderWidth        = myBorderWidth
160         , keys               = (`mkKeymap` myKeys)
161         , normalBorderColor  = col_bg_alt def
162         , focusedBorderColor = col_fg_alt def
163         , startupHook = return () >> checkKeymap myConfig myKeys
164         }
165
166main :: IO ()
167main = xmonad
168     . ewmhFullscreen
169     . ewmh
170     . withEasySB mySB defToggleStrutsKey
171     $ myConfig