import XMonad import XMonad.Actions.UpdatePointer import XMonad.Actions.CycleWS import XMonad.Actions.DwmPromote import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageHelpers import XMonad.Hooks.StatusBar import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageDocks import XMonad.Hooks.WindowSwallowing import XMonad.Layout.ThreeColumns import XMonad.Layout.Spacing import XMonad.Layout.NoBorders import XMonad.Layout.Renamed import XMonad.Layout.Accordion import XMonad.Layout.Grid import XMonad.Util.Cursor import XMonad.Util.EZConfig import XMonad.Util.Loggers import XMonad.Util.Ungrab import System.Exit (exitSuccess) main :: IO () main = xmonad . ewmh . ewmhFullscreen . withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey $ myConfig myConfig = def { modMask = mod4Mask -- Rebind Mod to the Super key , layoutHook = lessBorders OnlyFloat $ avoidStruts $ myLayout -- layouts , manageHook = myManageHook -- float/swallow rules , startupHook = setDefaultCursor xC_left_ptr -- sets the cursor , handleEventHook = swallowEventHook (className =? "Alacritty") (return True) -- make alacritty swallowable , workspaces = myWorkspaces -- workspace names , logHook = updatePointer (0.5, 0.5) (0, 0) -- warp pointer to center of window on focus , borderWidth = 2 , normalBorderColor = "#3c3836" , focusedBorderColor = "#928374" } `additionalKeysP` [ -- executables ("M-S-", spawn "slock") , ("M-S-f", spawn "librewolf-bin") , ("M-S-k", spawn "keepassxc") , ("M-", spawn "volmute") , ("M-", spawn "voldown") , ("M-", spawn "volup") , ("M-", spawn "brightness-down") , ("M-", spawn "brightness-up") , ("M-", spawn "screenshot") , ("M-p", spawn "dmenu_run_history -fn 'JetBrains Mono NF:style=medium:size=11' -nb '#3c3836' -nf '#ebdbb2' -sb '#504945' -sf '#ebdbb2'") , ("M-S-", spawn "spawn-alacritty") -- XMonad calls , ("M-", toggleWS) , ("M-", dwmpromote) -- layout jumps , ("M-t", sendMessage $ JumpToLayout "Normal") -- rebound quit call , ("M-S-", io exitSuccess) ] `removeKeysP` [ -- default quit keybind, as moved to M-S- ("M-S-q") ] myWorkspaces :: [String] myWorkspaces = [ "!", "@", "#", "$", "%", "^", "&", "*", "(" ] myLayout = tiled ||| full ||| threeCol ||| accordion ||| grid where tiled = renamed [Replace "Normal"] $ spaced $ Tall nmaster delta ratio full = renamed [Replace "Full"] $ spaced $ Full threeCol = renamed [Replace "ThreeCol"] $ spaced $ ThreeColMid nmaster delta ratio accordion = renamed [Replace "Accrdin"] $ spaced $ Accordion grid = renamed [Replace "Grid"] $ spaced $ Grid 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 spaced = spacing 2 myManageHook :: ManageHook myManageHook = composeAll [ className =? "Gimp" --> doFloat , isDialog --> doFloat ] myXmobarPP :: PP myXmobarPP = def { ppSep = magenta " • " , ppTitleSanitize = xmobarStrip , ppCurrent = wrap "" "" . xmobarBorder "Top" "#8be9fd" 2 , ppUrgent = red . wrap (yellow "!") (yellow "!") , ppOrder = \[ws, l, _, wins] -> [ws, l, wins] , ppExtras = [logTitles formatFocused formatUnfocused] } where formatFocused = wrap (white "{") (white "}") . aqua . ppWindow . shorten 80 formatUnfocused = wrap (lowWhite "<") (lowWhite ">") . lowWhite . ppWindow . shorten 40 -- | 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) 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" "" aqua = xmobarColor "#8ec07c" ""