import XMonad import System.Exit (exitSuccess) import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageHelpers import XMonad.Hooks.StatusBar import XMonad.Hooks.EwmhDesktops import XMonad.Util.Cursor import XMonad.Util.EZConfig import XMonad.Util.Loggers import XMonad.Util.Ungrab import XMonad.Layout.ThreeColumns import XMonad.Layout.Spacing import XMonad.Actions.CycleWS import XMonad.Layout.Renamed import XMonad.Layout.Spacing main :: IO () main = xmonad . ewmh . ewmhFullscreen . withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey $ myConfig myConfig = def { modMask = mod4Mask -- Rebind Mod to the Super key , layoutHook = myLayout , manageHook = myManageHook , startupHook = setDefaultCursor xC_left_ptr , workspaces = myWorkspaces , borderWidth = 2 , normalBorderColor = "#3c3836" , focusedBorderColor = "#928374" } `additionalKeysP` [ ("M-S-", spawn "slock") , ("M-", unGrab *> spawn "screenshot" ) , ("M-S-f", spawn "librewolf-bin" ) , ("M-S-k", spawn "keepassxc" ) , ("M-S-", spawn "spawn-alacritty") , ("M-p", spawn "dmenu_run_history" ) , ("M-", spawn "volmute") , ("M-", spawn "voldown") , ("M-", spawn "volup") , ("M-", spawn "brightness-down") , ("M-", spawn "brightness-up") , ("M-", spawn "screenshot") , ("M-", toggleWS) , ("M-S-", io exitSuccess) , ("M-S-q", spawn "true") ] myWorkspaces = [ "!", "@", "#", "$", "%", "^", "&", "*", "(" ] myLayout = tiled ||| full ||| threeCol where threeCol = renamed [Replace "ThreeCol"] $ spacing 2 $ ThreeColMid nmaster delta ratio tiled = renamed [Replace "Tall"] $ spacing 2 $ Tall nmaster delta ratio full = renamed [Replace "Full"] $ spacing 2 $ Full nmaster = 1 -- Default number of windows in the master pane ratio = 6/10 -- Default proportion of screen occupied by master pane delta = 2/100 -- Percent of screen to increment by when resizing panes myManageHook :: ManageHook myManageHook = composeAll [ className =? "Gimp" --> doFloat , isDialog --> doFloat ] myXmobarPP :: PP myXmobarPP = def { ppSep = magenta " • " , ppTitleSanitize = xmobarStrip , ppCurrent = wrap " " "" . xmobarBorder "Top" "#8be9fd" 2 , ppHidden = white . wrap " " "" , ppHiddenNoWindows = lowWhite . wrap " " "" , ppUrgent = red . wrap (yellow "!") (yellow "!") , ppOrder = \[ws, l, _, wins] -> [ws, l, wins] , ppExtras = [logTitles formatFocused formatUnfocused] } where formatFocused = wrap (white "[") (white "]") . green . ppWindow formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . lowWhite . ppWindow -- | Windows should have *some* title, which should not not exceed a -- sane length. ppWindow :: String -> String ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 80 blue, lowWhite, magenta, red, white, yellow :: String -> String magenta = xmobarColor "#d3869b" "" blue = xmobarColor "#83a598" "" white = xmobarColor "#ebdbb2" "" yellow = xmobarColor "#fabd2f" "" red = xmobarColor "#fb4934" "" green = xmobarColor "#b8bb26" "" lowWhite = xmobarColor "#a89984" ""