import XMonad import qualified XMonad.StackSet as W 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 System.Exit (exitSuccess) dmenuFormatting :: String -> String dmenuFormatting command = command ++ " -fn 'JetBrains Mono NF:style=medium:size=11' -nb '#282828' -nf '#ebdbb2' -sb '#d3869b' -sf '#282828'" 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 = dynamicLogWithPP myXmobarPP { -- ppOutput = hPutStrLn description -- } >> historyHook , borderWidth = 2 , normalBorderColor = "#282828" , focusedBorderColor = "#fe8019" } `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 (dmenuFormatting "dmenu_run_history")) , ("M-S-", spawn "spawn-alacritty") , ("M-S-e", spawn "emac") -- XMonad calls , ("M-", toggleWS) , ("M-", dwmpromote) -- layout jumps , ("M-S-t", sendMessage $ JumpToLayout "Normal") , ("M-a", sendMessage $ JumpToLayout "Accrdin") -- 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"] $ Tall nmaster delta ratio full = renamed [Replace "Full"] $ Full threeCol = renamed [Replace "ThreeCol"] $ ThreeColMid nmaster delta ratio accordion = renamed [Replace "Accrdin"] $ Accordion grid = renamed [Replace "Grid"] $ 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 0 myManageHook :: ManageHook myManageHook = composeAll [ -- className =? "Gimp" --> doFloat isDialog --> doFloat ] myXmobarPP :: PP myXmobarPP = def { ppSep = magenta " • " , ppTitleSanitize = xmobarStrip , ppCurrent = wrap "" "" . xmobarBorder "Top" "#83a598" 2 , ppUrgent = red . wrap (yellow "!") (yellow "!") , ppOrder = \[ws, l, _, wins] -> [ws, l, wins] , ppExtras = [logTitles formatFocused formatUnfocused] } where formatFocused = wrap (blue "{ ") (blue " }") . 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" ""