aboutsummaryrefslogtreecommitdiff
path: root/xmonad/xmonad.hs
blob: ff1400506b47a95717cd5e9a2eddd4fbf23911f1 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import XMonad
import XMonad.Actions.SpawnOn
import XMonad.Hooks.DynamicLog()
import XMonad.Hooks.ManageDocks
import XMonad.Util.EZConfig(additionalKeys)
import System.IO()
import XMonad.Layout.NoBorders
import XMonad.Hooks.SetWMName
import XMonad.Hooks.ManageHelpers
import XMonad.Util.Scratchpad
import qualified XMonad.StackSet as W

main :: IO ()
main =
    xmonad $ def
          -- Fullscreen handling:
          -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar
        { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> manageHook def <+> manageScratchPad
        , handleEventHook = handleEventHook def <+> docksEventHook
        -- , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts  $  layoutHook def
        , layoutHook = smartBorders $ avoidStruts  $  layoutHook def
        , modMask = mod4Mask -- User Super instead of Alt
        , terminal = myTerminal
        , startupHook = startup
        } `additionalKeys` myKeyBindings

myTerminal = "gnome-terminal"

manageScratchPad :: ManageHook
manageScratchPad = scratchpadManageHook (W.RationalRect l t w h)
  where
    h = 0.1     -- terminal height, 10%
    w = 1       -- terminal width, 100%
    t = 1 - h   -- distance from top edge, 90%
    l = 1 - w   -- distance from left edge, 0%

myKeyBindings :: [((ButtonMask, KeySym), X())]
myKeyBindings =
    [ -- XF86MonBrightnessUp
      ((0, 0x1008ff02),
       spawn "xbacklight +10")

      -- XF86MonBrightnessDown
    , ((0, 0x1008ff03),
       spawn "xbacklight -10")

      -- XF86AudioMute
    , ((0, 0x1008ff12),
       spawn "amixer -q sset Master toggle")

      -- XF86AudioLowerVolume
    , ((0, 0x1008ff11),
       spawn "amixer -q sset Master 5%- unmute")

      -- XF86AudioRaiseVolume
    , ((0, 0x1008ff13),
       spawn "amixer -q sset Master 5%+ unmute")

      -- XF86AudioPrev
    , ((0, 0x1008ff16),
       spawn "playerctl previous")

      -- XF86AudioPlay
    , ((0, 0x1008ff14),
       spawn "playerctl play-pause")

      -- XF86AudioNext
    , ((0, 0x1008ff17),
       spawn "playerctl next")

      -- yeganesh launcher
    , ((mod4Mask, xK_p),
      spawnHere "exe=$(yeganesh -x) && exec $exe")

      -- Lock screen
    , ((mod4Mask .|. controlMask, xK_l),
       spawn "dm-tool lock & systemctl suspend")

      -- print screen of clicked window
    , ((mod4Mask .|. controlMask, xK_Print),
       spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s")

      -- print whole screen
    , ((mod4Mask, xK_Print),
       spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png")

      -- xrandr single monitor setup
    , ((mod4Mask .|. controlMask, xK_1),
      spawn "~/annex/dev/code/dotfiles/scripts/single-monitor.sh")

      -- xrandr three monitor setup
    , ((mod4Mask .|. controlMask, xK_3),
      spawn "~/annex/dev/code/dotfiles/scripts/three-monitors.sh")

      -- restart network
    , ((mod4Mask, xK_x),
       spawn "gksudo -S systemctl restart network-manager")

      -- save selection (link) in buku
    , ((mod4Mask, xK_c),
       spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh")

      -- delete selection (link) from buku
    , ((mod4Mask, xK_d),
       spawn "$HOME/dev/libre/dotfiles/scripts/buku-delete.sh > ~/tmp/dbg-delete")

      -- archive selection (link) in buku
    , ((mod4Mask, xK_a),
       spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh > ~/tmp/dbg-archive")
    ]

startup :: X()
startup = do
  spawn "xbacklight =100"
  spawn "xmobar ~/.xmobarrc"
  spawn "killall trayer; trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1"
  spawn "nm-applet"
  spawn "~/annex/dev/code/dotfiles/scripts/once-only-nextcloud.sh"
  setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad