all repos — xmonad-config @ 49594eca44d2ef592af6640ab56027f5f612d729

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 XMonad.Config.LaNinpre
 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         , ("<XF86AudioMute>",        spawn $ myMocp ++ " -v 0")
 83         , ("<XF86AudioPrev>",        spawn $ myMocp ++ " --previous")
 84         , ("<XF86AudioNext>",        spawn $ myMocp ++ " --next")
 85         ]
 86         ++
 87         [("M-" ++ m ++ show k, windows $ f i)
 88             | (i, k) <- zip myWorkspaces [1..9]
 89             , (f, m) <- [(W.greedyView, ""), (W.shift, "S-")]
 90         ]
 91
 92myColorizer :: a -> Bool -> X (String, String)
 93myColorizer _ active = if active then return (col_bg_alt def, col_fg_alt def)
 94                                 else return (col_bg     def, col_fg     def)
 95
 96myGsConfig :: GSConfig a
 97myGsConfig = (buildDefaultGSConfig myColorizer)
 98           { gs_font = head myFonts
 99           , gs_bordercolor = col_bg_alt def
100           }
101
102mySpawnSelected :: GSConfig String -> [(String, String)] -> X ()
103mySpawnSelected conf lst = gridselect conf lst >>= flip whenJust spawn
104
105myXmobarPP :: PP
106myXmobarPP = def
107           { ppSep             = xmobarColor (col_bg_alt def) "" " | "
108           , ppCurrent         = xmobarColor (col_fg_alt def) "" . sitelen
109           , ppHidden          = xmobarColor (col_fg     def) "" . sitelen
110           , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . sitelen
111           , ppLayout          = sitelen
112           } where
113               sitelen = xmobarFont 3
114
115mySB :: StatusBarConfig
116mySB = statusBarProp "xmobar"
117     $ clickablePP $ filterOutWsPP [scratchpadWorkspaceTag] myXmobarPP
118
119myTabTheme :: Theme
120myTabTheme = def
121           { fontName            = head myFonts
122           , activeTextColor     = col_fg_alt def
123           , activeColor         = col_bg_alt def
124           , activeBorderWidth   = 0
125           , inactiveTextColor   = col_fg def
126           , inactiveColor       = col_bg def
127           , inactiveBorderWidth = 0
128           , urgentTextColor     = col_bg_alt def
129           , urgentColor         = col_fg_alt def
130           , urgentBorderWidth   = 0
131           }
132
133myLayout = windowNavigation
134         $ boringWindows
135         $ toggleLayouts full
136         $ smartBorders
137         $ tiled ||| threeCol
138         where
139            tiled    = renamed [Replace "\xe624"] -- lawa
140                     $ addTabs shrinkText myTabTheme
141                     $ subLayout [] Simplest
142                     $ spacingWithEdge space $ ResizableTall nmaster delta ratio []
143            threeCol = renamed [Replace "\xe665"] -- supa
144                     $ addTabs shrinkText myTabTheme
145                     $ subLayout [] Simplest
146                     $ spacingWithEdge space $ ResizableThreeColMid nmaster delta ratio []
147            full     = renamed [Replace "\xe663"] -- suli
148                     $ noBorders Full
149            nmaster  = 1
150            ratio    = 1/2
151            delta    = 3/100
152            space    = 4
153
154myConfig = def
155         { terminal           = myTerminal
156         , modMask            = myModMask
157         , layoutHook         = myLayout
158         , manageHook         = myManageHook
159         , workspaces         = myWorkspaces
160         , borderWidth        = myBorderWidth
161         , keys               = (`mkKeymap` myKeys)
162         , normalBorderColor  = col_bg_alt def
163         , focusedBorderColor = col_fg_alt def
164         , startupHook = return () >> checkKeymap myConfig myKeys
165         }
166
167main :: IO ()
168main = xmonad
169     . ewmhFullscreen
170     . ewmh
171     . withEasySB mySB defToggleStrutsKey
172     $ myConfig