summaryrefslogtreecommitdiff
path: root/xmonad.hs
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2019-03-22 12:18:52 -0700
committerBen Sima <ben@bsima.me>2019-03-22 12:19:16 -0700
commit02916834d1d6a829ef1f72567f487465e841b0af (patch)
tree02f7016d024b7ce7f12943353b1ed26189eb3b12 /xmonad.hs
parent9ece05be716c92b451ff84952f389f1ca8d30abd (diff)
Re-enable xmonad
Diffstat (limited to 'xmonad.hs')
-rw-r--r--xmonad.hs65
1 files changed, 51 insertions, 14 deletions
diff --git a/xmonad.hs b/xmonad.hs
index 4113186..55f6a69 100644
--- a/xmonad.hs
+++ b/xmonad.hs
@@ -1,35 +1,72 @@
+{-
+
+Docs:
+
+- EZConfig: https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Util-EZConfig.html#g:3
+- Media keys: https://hackage.haskell.org/package/X11-1.9/docs/Graphics-X11-ExtraTypes-XF86.html
+- Audio control: https://xmonadhaskell.wordpress.com/2018/10/24/xmonad-audio-control/
+
+- XMonad API: https://hackage.haskell.org/package/xmonad
+- Contrib API: https://hackage.haskell.org/package/xmonad-contrib
+
+-}
+
+
import XMonad
import XMonad.Config
import XMonad.Hooks.EwmhDesktops (ewmh)
import XMonad.Hooks.ManageDocks
import XMonad.Layout.Spiral
import XMonad.Util.CustomKeys (customKeys)
+import XMonad.Actions.CopyWindow
+import XMonad.Util.EZConfig (additionalKeys)
+import Graphics.X11.ExtraTypes.XF86
delKeys conf@(XConfig {modMask = modMask}) = [(modMask, xK_p)]
insKeys :: XConfig l -> [((KeyMask, KeySym), X ())]
insKeys conf@(XConfig {modMask = modMask}) =
- [ ((0, xK_F5), spawn "xbacklight -dec 1")
- , ((0, xK_F6), spawn "xbacklight -inc 1")
- , ((modMask, xK_o), spawn "dmenu_run")
+ [ -- run dmenu with M-o
+ ((modMask, xK_o), spawn "dmenu_run")
+ -- passmenu doesn't work :(
, ((modMask, xK_p), spawn "${SHELL:-\"/bin/sh\"} -c passmenu &")
, ((modMask, xK_y), spawn "passmenu &")
+ -- sticky windows
+ , ((modMask, xK_a ), windows copyToAll) -- @@ Make focused window always visible
+ , ((modMask .|. shiftMask, xK_a ), killAllOtherCopies) -- @@ Toggle window state back
+ -- media/ function keys
+ -- backlight
+ , ((0, xK_F5), spawn "xbacklight -dec 5")
+ , ((0, xK_F6), spawn "xbacklight -inc 5")
+ , ((0, xF86XK_KbdBrightnessDown), spawn "xbacklight -dec 5")
+ , ((0, xF86XK_KbdBrightnessUp), spawn "xbacklight -inc 5")
+ -- volume controls
+ , ((0, xK_F1), amixer "2%+")
+ , ((0, xK_F2), amixer "2%-")
+ , ((0, xK_F3), amixer "toggle")
+
+ , ((0, xF86XK_AudioLowerVolume), amixer "2%+")
+ , ((0, xF86XK_AudioRaiseVolume), amixer "2%-")
+ , ((0, xF86XK_AudioMute), amixer "toggle")
]
+amixer :: String -> X ()
+amixer cmd = spawn $ "amixer -q sset Master " <> cmd
+
myLayout = spiral (6 / 7)
myWorkspaces = ["1:mail", "2:org", "3:web"] ++ map show [4 .. 9] ++ ["0"]
-myConf =
- def
- { modMask = mod4Mask -- ^ super instead of alt
- , normalBorderColor = "#eee8d4" -- ^ solarized base3
- , focusedBorderColor = "#2aa198" -- ^ solarized cyan
- , manageHook = manageDocks <+> manageHook defaultConfig
- , layoutHook = avoidStruts $ myLayout ||| layoutHook defaultConfig
- , terminal = "/home/ben/.nix-profile/bin/xterm"
- , keys = customKeys delKeys insKeys
- , workspaces = myWorkspaces
- }
+myConf = additionalKeys c (insKeys c)
+ where c = def
+ { modMask = mod4Mask -- ^ super instead of alt
+ , normalBorderColor = "#eee8d4" -- ^ solarized base3
+ , focusedBorderColor = "#2aa198" -- ^ solarized cyan
+ , manageHook = manageDocks <+> manageHook def
+ , layoutHook = avoidStruts $ myLayout ||| layoutHook def
+ , terminal = "/home/ben/.nix-profile/bin/xterm"
+ , workspaces = myWorkspaces
+ --, keys = customKeys delKeys insKeys
+ }
main = xmonad $ ewmh $ docks $ myConf