aboutsummaryrefslogtreecommitdiff
path: root/xmonad/xmonad.hs
blob: 74d4d63627da68f9054fa4026c1993abaa633881 (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
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) <+> (className =? "trayer" --> doIgnore) <+> manageHook def
        , 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"

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 "~/dev/libre/dotfiles/scripts/single-monitor.sh")

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

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

      -- toggle appearence of xmobar
      -- https://stackoverflow.com/a/27646652
    , ((mod4Mask .|. shiftMask, xK_f), sendMessage ToggleStruts)
    ]

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