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
|
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")
]
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
|