aboutsummaryrefslogtreecommitdiff
path: root/etc/xmonad/xmonad.hs
blob: 4f149522c43403d6158b7fe3f83247b4030a02e2 (plain) (blame)
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
import XMonad
import XMonad.Actions.SpawnOn(spawnHere)
import XMonad.Hooks.ManageDocks
import XMonad.Util.EZConfig(additionalKeysP)
import XMonad.Layout.NoBorders
import XMonad.Hooks.SetWMName
import XMonad.Hooks.ManageHelpers
import XMonad.Util.Run(spawnPipe)
import XMonad.Layout.ResizableTile
import XMonad.Layout.ResizableTile(MirrorResize(MirrorShrink, MirrorExpand))
import XMonad.StackSet

main :: IO ()
main = do
    xmproc <- spawnPipe "xmobar"
    xmproc <- spawnPipe "xss-lock i3lock"
    xmonad $ docks $ def
        -- Fullscreen handling:
        -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar
        { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def
        -- , handleEventHook = handleEventHook def <+> docksEventHook
        , layoutHook = myLayoutHook
        , modMask = mod4Mask -- User Super instead of Alt
        , terminal = myTerminal
        , startupHook = myStartup
        } `additionalKeysP` myKeyPBindings

myTerminal :: String
myTerminal = "st"

dbg :: String
dbg = "xmessage 'xmonad EuAndreh debug'"

myKeyPBindings :: [(String, X ())]
myKeyPBindings =
    [
      ("<F1>",      spawn "volume toggle")
    , ("<F2>",      spawn "volume down")
    , ("<F3>",      spawn "volume up")
    , ("M-S-s",     spawn "volume rotate")

    , ("<F4>",      spawn "player backward")
    , ("S-<F4>",    spawn "player previous")
    , ("<F5>",      spawn "player play-pause")
    , ("S-<F5>",    spawn "player rotate")
    , ("<F6>",      spawn "player forward")
    , ("S-<F6>",    spawn "player next")

    , ("<F7>",      spawn "brightnessctl -- set -10%")
    , ("<F8>",      spawn "brightnessctl -- set +10%")

    , ("M-c",       spawn "mate-calc")
    , ("M-u",       spawn "wms uuid")
    , ("M-t",       spawn "wms date")
    , ("M-m",       spawn "wms clear-notification")
    , ("M-p",       spawn "menu bin")
    , ("M-o",       spawn "menu emoji")
    , ("M-v",       spawn "menu clipboard")
    , ("M-i",       spawn "menu password")
    , ("C-M-i",     spawn "menu username")
    , ("C-M-S-i",   spawn "menu yubikey")

    , ("<Print>",   spawn "shot")
    , ("M-<Print>", spawn "shot -m")

      -- Stop floating
    , ("M-S-<Space>", withFocused $ windows . XMonad.StackSet.sink)

      -- Lock screen
    , ("C-M-l", spawn "loginctl lock-session")

      -- Toggle appearence of xmobar
      -- https://stackoverflow.com/a/27646652
    , ("M-f", sendMessage ToggleStruts)
    , ("M-ç", spawn dbg)

      -- Vertically resize, taken from:
      -- https://stackoverflow.com/questions/25857674/xmonad-vertical-resize-tile-window
    , ("M-a",  sendMessage MirrorExpand)
    , ("M-z",  sendMessage MirrorShrink)
    ]

myLayoutHook =
  smartBorders $ avoidStruts $ (tiled ||| Mirror tiled ||| Full)
  where
    tiled = ResizableTall nmaster delta ratio []
    nmaster = 1
    delta = 3/100
    ratio = 1/2

myStartup :: X ()
myStartup = do
  -- Taken from:
  -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad
  setWMName "LG3D"