import qualified Data.Map as M import System.Exit import XMonad import qualified XMonad.StackSet as W import XMonad.Actions.GridSelect import XMonad.Actions.WithAll import XMonad.Hooks.DynamicLog import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar.PP import XMonad.Util.ClickableWorkspaces import XMonad.Util.EZConfig import XMonad.Util.NamedScratchpad import XMonad.Layout.Renamed import XMonad.Layout.Spacing import XMonad.Layout.ThreeColumns import LaNinpreConfig myKeys :: [(String, X ())] myKeys = [ ("M-", spawn myTerminal) , ("M-w", spawn myBrowser) , ("M-p", spawn "dmenu_run") , ("", spawn "scrot_cmd -f") , ("C-", spawn "scrot_cmd -a") , ("M1-", spawn "scrot_cmd -w") , ("M-s t", namedScratchpadAction myScratchPads "terminal") , ("M-s c", namedScratchpadAction myScratchPads "calculator") , ("M-s m", namedScratchpadAction myScratchPads "mocp") , ("M-s v", namedScratchpadAction myScratchPads "mpvfloat") , ("M-g t", goToSelected myGsConfig) , ("M-g b", bringSelected myGsConfig) , ("M-g g", mySpawnSelected myGsConfig myAppGrid) , ("M-S-c", kill) , ("M-", sendMessage NextLayout) , ("M-h", sendMessage Shrink) , ("M-l", sendMessage Expand) , ("M-j", windows W.focusDown) , ("M-k", windows W.focusUp) , ("M-S-j", windows W.swapDown) , ("M-S-k", windows W.swapUp) , ("M-m", windows W.focusMaster) , ("M-S-m", windows W.swapMaster) , ("M-t", withFocused $ windows . W.sink) , ("M-S-t", sinkAll) , ("M-", toggleWindowSpacingEnabled >> toggleScreenSpacingEnabled) , ("M-S-q", io (exitWith ExitSuccess)) , ("M-S-r", spawn "xmonad --recompile && xmonad --restart") ] ++ [("M-" ++ m ++ show k, windows $ f i) | (i, k) <- zip (myWorkspaces) [1..9] , (f, m) <- [(W.greedyView, ""), (W.shift, "S-")] ] myColorizer :: a -> Bool -> X (String, String) myColorizer _ active = if active then return (col_bg_alt def, col_fg_alt def) else return (col_bg def, col_fg def) myGsConfig :: GSConfig a myGsConfig = (buildDefaultGSConfig myColorizer) { gs_font = head myFonts , gs_bordercolor = col_bg_alt def } mySpawnSelected :: GSConfig String -> [(String, String)] -> X () mySpawnSelected conf lst = gridselect conf lst >>= flip whenJust spawn myXmobarPP :: PP myXmobarPP = def { ppSep = xmobarColor (col_bg_alt def) "" " | " , ppCurrent = xmobarColor (col_fg_alt def) "" . sitelen , ppHidden = xmobarColor (col_fg def) "" . sitelen , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . sitelen } where sitelen = xmobarFont 3 mySB :: StatusBarConfig mySB = statusBarProp "xmobar" $ clickablePP $ filterOutWsPP [scratchpadWorkspaceTag] myXmobarPP myLayout = tiled ||| threeCol ||| full where tiled = renamed [Replace "lawa"] $ spacingWithEdge space $ Tall nmaster delta ratio threeCol = renamed [Replace "supa"] $ spacingWithEdge space $ ThreeColMid nmaster delta ratio full = renamed [Replace "suli"] $ Full nmaster = 1 ratio = 1/2 delta = 3/100 space = 4 myConfig = def { terminal = myTerminal , modMask = myModMask , layoutHook = myLayout , manageHook = myManageHook <+> namedScratchpadManageHook myScratchPads , workspaces = myWorkspaces , borderWidth = myBorderWidth , keys = const M.empty -- discard default keybindings , normalBorderColor = col_bg def , focusedBorderColor = col_bg_alt def } `additionalKeysP` myKeys main :: IO () main = xmonad . ewmhFullscreen . ewmh . withEasySB mySB defToggleStrutsKey $ myConfig