aboutsummaryrefslogtreecommitdiff
path: root/xmonad/xmonad.hs
blob: bde627c2aecd97acd2661648028651d996bc2c5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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-<Escape>", spawn "slock")
  , ("M-<PrintScreen>", unGrab *> spawn "screenshot"        )
  , ("M-S-f", spawn "librewolf-bin"             )
  , ("M-S-k", spawn "keepassxc"             )
  , ("M-S-<Return>", spawn "spawn-alacritty")
  , ("M-p", spawn "dmenu_run_history"             )
  , ("M-<F1>", spawn "volmute") 
  , ("M-<F2>", spawn "voldown") 
  , ("M-<F3>", spawn "volup") 
  , ("M-<F7>", spawn "brightness-down") 
  , ("M-<F8>", spawn "brightness-up") 
  , ("M-<F11>", spawn "screenshot") 
  , ("M-<Tab>", toggleWS)
  , ("M-S-<Backspace>", 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" ""