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.ManageDocks import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar.PP import XMonad.Util.ClickableWorkspaces import XMonad.Util.EZConfig import XMonad.Util.NamedScratchpad import XMonad.Layout.BoringWindows hiding (Replace) import XMonad.Layout.NoBorders import XMonad.Layout.Renamed import XMonad.Layout.ResizableTile import XMonad.Layout.ResizableThreeColumns import XMonad.Layout.Simplest import XMonad.Layout.Spacing import XMonad.Layout.SubLayouts import XMonad.Layout.Tabbed import XMonad.Layout.ToggleLayouts import XMonad.Layout.WindowNavigation import LaNinpreConfig myKeys :: [(String, X ())] myKeys = [ ("M-", spawn myTerminal) , ("M-w", spawn myBrowser) , ("M-p", spawn "dmenu_run") , ("M-", spawn "slock") , ("", 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-f", sendMessage ToggleLayout >> sendMessage ToggleStruts) , ("M-h", sendMessage Shrink) , ("M-l", sendMessage Expand) , ("M-C-j", sendMessage MirrorShrink) , ("M-C-k", sendMessage MirrorExpand) , ("M-M1-h", sendMessage $ pullGroup L) , ("M-M1-j", sendMessage $ pullGroup D) , ("M-M1-k", sendMessage $ pullGroup U) , ("M-M1-l", sendMessage $ pullGroup R) , ("M-M1-u", withFocused $ sendMessage . UnMerge) , ("M-M1-m", withFocused $ sendMessage . UnMergeAll) , ("M-M1-,", onGroup W.focusDown') , ("M-M1-.", onGroup W.focusUp') , ("M-j", focusDown) , ("M-k", focusUp) , ("M-S-j", swapDown) , ("M-S-k", swapUp) , ("M-m", focusMaster) , ("M-S-m", windows W.swapMaster) , ("M-t", withFocused $ windows . W.sink) , ("M-S-t", sinkAll) , ("M-", toggleWindowSpacingEnabled >> toggleScreenSpacingEnabled) , ("M-S-q", io exitSuccess) , ("M-S-r", spawn "xmonad --recompile && xmonad --restart") , ("", spawn $ myMocp ++ " -G") , ("", spawn $ myMocp ++ " -v +5") , ("", spawn $ myMocp ++ " -v -5") , ("", spawn $ myMocp ++ " -v 0") , ("", spawn $ myMocp ++ " --previous") , ("", spawn $ myMocp ++ " --next") ] ++ [("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 , ppLayout = sitelen } where sitelen = xmobarFont 3 mySB :: StatusBarConfig mySB = statusBarProp "xmobar" $ clickablePP $ filterOutWsPP [scratchpadWorkspaceTag] myXmobarPP myTabTheme :: Theme myTabTheme = def { fontName = head myFonts , activeTextColor = col_fg_alt def , activeColor = col_bg_alt def , activeBorderWidth = 0 , inactiveTextColor = col_fg def , inactiveColor = col_bg def , inactiveBorderWidth = 0 , urgentTextColor = col_bg_alt def , urgentColor = col_fg_alt def , urgentBorderWidth = 0 } myLayout = windowNavigation $ boringWindows $ toggleLayouts full $ smartBorders $ tiled ||| threeCol where tiled = renamed [Replace "\xe624"] -- lawa $ addTabs shrinkText myTabTheme $ subLayout [] Simplest $ spacingWithEdge space $ ResizableTall nmaster delta ratio [] threeCol = renamed [Replace "\xe665"] -- supa $ addTabs shrinkText myTabTheme $ subLayout [] Simplest $ spacingWithEdge space $ ResizableThreeColMid nmaster delta ratio [] full = renamed [Replace "\xe663"] -- suli $ noBorders Full nmaster = 1 ratio = 1/2 delta = 3/100 space = 4 myConfig = def { terminal = myTerminal , modMask = myModMask , layoutHook = myLayout , manageHook = myManageHook , workspaces = myWorkspaces , borderWidth = myBorderWidth , keys = (`mkKeymap` myKeys) , normalBorderColor = col_bg_alt def , focusedBorderColor = col_fg_alt def , startupHook = return () >> checkKeymap myConfig myKeys } main :: IO () main = xmonad . ewmhFullscreen . ewmh . withEasySB mySB defToggleStrutsKey $ myConfig