aboutsummaryrefslogtreecommitdiff
path: root/src/Internal/Keys.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Internal/Keys.hs')
-rw-r--r--src/Internal/Keys.hs98
1 files changed, 55 insertions, 43 deletions
diff --git a/src/Internal/Keys.hs b/src/Internal/Keys.hs
index 49b85d1..467ed24 100644
--- a/src/Internal/Keys.hs
+++ b/src/Internal/Keys.hs
@@ -58,11 +58,17 @@ type KeyMap l = XConfig l -> Map (KeyMask, KeySym) (X ())
type ButtonsMap l = XConfig l -> Map (KeyMask, Button) (Window -> X ())
-decreaseVolume = spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%"
-increaseVolume = spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%"
-playPause = spawn "spotify-control play"
-mediaPrev = spawn "spotify-control prev"
-mediaNext = spawn "spotify-control next"
+spawnX :: String -> X ()
+spawnX = spawn
+
+noWindow :: b -> Window -> b
+noWindow = const
+
+decreaseVolume = spawnX "pactl set-sink-volume @DEFAULT_SINK@ -5%"
+increaseVolume = spawnX "pactl set-sink-volume @DEFAULT_SINK@ +5%"
+playPause = spawnX "spotify-control play"
+mediaPrev = spawnX "spotify-control prev"
+mediaNext = spawnX "spotify-control next"
button6 :: Button
@@ -95,12 +101,18 @@ button14 = 14
button15 :: Button
button15 = 15
+resolveSubmaps :: (XConfig l -> KeyBindings) -> KeyMap l
+resolveSubmaps bindings config = (fmap $ \binding ->
+ case binding of
+ Action x -> x
+ Submap _ -> logs "") (bindings config)
+
keymap :: KeyMap l
-keymap = runKeys $ do
+keymap = resolveSubmaps $ runKeys $ do
config <- getConfig
let defaultKey key = fromMaybe (return ()) $ Map.lookup key (keymap config)
- subkeys = submapDefaultWithKey defaultKey . flip runKeys config
+ subkeys keysM = submapDefaultWithKey defaultKey $ (resolveSubmaps (runKeys keysM)) config
bind xK_apostrophe $ do
justMod $ subkeys $ do
@@ -117,10 +129,10 @@ keymap = runKeys $ do
-- The only raw keybinding. Meant to get a terminal to unbrick XMonad if
-- something goes wrong with the keyboard layout and for first-time boots
-- where dmenu/alacritty may not be installed.
- rawMask mod4Mask $ spawn "xterm"
+ rawMask mod4Mask $ spawnX "xterm"
-- Moves xmobar to different monitors.
- justMod $ spawn "pkill -SIGUSR1 xmobar"
+ justMod $ spawnX "pkill -SIGUSR1 xmobar"
bind xK_F1 $ do
-- Experimental. Sends 'a' to all windows.
@@ -172,7 +184,7 @@ keymap = runKeys $ do
justMod $ sendMessage $ modifyWindowBorder (-5)
bind xK_b $ do
- justMod $ spawn "bluetooth-select.sh"
+ justMod $ spawnX "bluetooth-select.sh"
bind xK_c $ do
justMod runPassMenu
@@ -212,7 +224,7 @@ keymap = runKeys $ do
justMod $ windows W.focusUp
shiftMod $ windows W.swapUp
controlMod rotAllUp
- altMod $ spawn "xsecurelock"
+ altMod $ spawnX "xsecurelock"
bind xK_minus $ do
justMod $ sendMessage (IncMasterN (-1))
@@ -233,7 +245,7 @@ keymap = runKeys $ do
shiftMod $ withFocused $ sendMessage . expandWindowAlt
bind xK_q $ do
- shiftMod $ spawn "xmonad --recompile && xmonad --restart"
+ shiftMod $ spawnX "xmonad --recompile && xmonad --restart"
justMod $ subkeys $ do
@@ -253,16 +265,16 @@ keymap = runKeys $ do
shiftMod $ sendMessage DoRotate
bind xK_s $ do
- altMod $ spawn "sudo -A systemctl suspend && xsecurelock"
+ altMod $ spawnX "sudo -A systemctl suspend && xsecurelock"
bind xK_space $ do
justMod $ sendMessage NextLayout
shiftMod $ sendMessage NextLayout
bind xK_t $ do
- justMod $ spawn (terminal config)
+ justMod $ spawnX (terminal config)
shiftMod $ withFocused $ windows . W.sink
- altMod $ spawn (terminal config ++ " -t Floating\\ Term")
+ altMod $ spawnX (terminal config ++ " -t Floating\\ Term")
bind xK_v $
-- Allows repeated strokes of M-h and M-l to reduce and increase volume
@@ -299,7 +311,7 @@ keymap = runKeys $ do
bind xK_p $ do
(justMod -|- noMod) $ mapNextString $ \_ str ->
- spawn $ printf "gxmessage 'typed: \"%s\"\ncodes: \"%s\"\nunicode: á\n'"
+ spawnX $ printf "gxmessage 'typed: \"%s\"\ncodes: \"%s\"\nunicode: á\n'"
str
(show (map ord str))
@@ -307,30 +319,30 @@ keymap = runKeys $ do
(justMod -|- noMod) $ logs "Test Log"
bind xK_n $ do
- (justMod -|- noMod) $ spawn (terminal config ++ " -t Notes -e notes new")
+ (justMod -|- noMod) $ spawnX (terminal config ++ " -t Notes -e notes new")
bind xK_c $ do
shiftMod CopyWindow.killAllOtherCopies
bind xK_e $ do
- (justMod -|- noMod) $ spawn "emoji-select.sh"
- (shiftMod -|- rawMask shiftMask) $ spawn "emoticon-select.sh"
+ (justMod -|- noMod) $ spawnX "emoji-select.sh"
+ (shiftMod -|- rawMask shiftMask) $ spawnX "emoticon-select.sh"
bind xK_a $
- (justMod -|- noMod) $ spawn "set-sink.sh"
+ (justMod -|- noMod) $ spawnX "set-sink.sh"
bind xK_w $
- (justMod -|- noMod) $ spawn "networkmanager_dmenu"
+ (justMod -|- noMod) $ spawnX "networkmanager_dmenu"
bind xK_o $
- (justMod -|- noMod) $ spawn "library-view.sh"
+ (justMod -|- noMod) $ spawnX "library-view.sh"
bind xK_s $
(justMod -|- noMod) toggleSwallowEnabled
bind xK_v $ do
- (justMod -|- noMod) $ spawn "set-volume.sh"
- (shiftMod -|- rawMask shiftMask) $ spawn "set-volume.sh -a"
+ (justMod -|- noMod) $ spawnX "set-volume.sh"
+ (shiftMod -|- rawMask shiftMask) $ spawnX "set-volume.sh -a"
-- Double-tap Z to toggle zoom.
bind xK_z $ do
@@ -347,18 +359,18 @@ keymap = runKeys $ do
shiftMod $ sendMessage ToggleZoom
bind xF86XK_Calculator $ do
- noMod $ spawn $ terminal config ++ " -t Floating\\ Term -e /usr/bin/env python3"
+ noMod $ spawnX $ terminal config ++ " -t Floating\\ Term -e /usr/bin/env python3"
bind xF86XK_AudioLowerVolume $ do
- noMod $ spawn "pactl set-sink-volume @DEFAULT_SINK@ -1%"
+ noMod $ spawnX "pactl set-sink-volume @DEFAULT_SINK@ -1%"
justMod mediaPrev
bind xF86XK_AudioRaiseVolume $ do
- noMod $ spawn "pactl set-sink-volume @DEFAULT_SINK@ +1%"
+ noMod $ spawnX "pactl set-sink-volume @DEFAULT_SINK@ +1%"
justMod mediaNext
bind xF86XK_AudioMute $ do
- noMod $ spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle"
+ noMod $ spawnX "pactl set-sink-mute @DEFAULT_SINK@ toggle"
bind xF86XK_AudioPlay $ do
noMod playPause
@@ -373,13 +385,13 @@ keymap = runKeys $ do
noMod mediaPrev
bind xF86XK_MonBrightnessUp $ do
- noMod $ spawn "set-backlight.sh +0.05"
- justMod $ spawn "set-backlight.sh 1"
+ noMod $ spawnX "set-backlight.sh +0.05"
+ justMod $ spawnX "set-backlight.sh 1"
bind xF86XK_MonBrightnessDown $ do
- noMod $ spawn "set-backlight.sh -0.05"
- justMod $ spawn "set-backlight.sh 0.01"
- rawMask shiftMask $ spawn "set-backlight.sh 0"
+ noMod $ spawnX "set-backlight.sh -0.05"
+ justMod $ spawnX "set-backlight.sh 0.01"
+ rawMask shiftMask $ spawnX "set-backlight.sh 0"
mouseMap :: ButtonsMap l
mouseMap = runButtons $ do
@@ -412,31 +424,31 @@ mouseMap = runButtons $ do
justMod $ \w -> focus w >> mouseResizeWindow w >> windows W.shiftMaster
bind button6 $
- justMod $ const (relativeWorkspaceShift prev)
+ justMod $ noWindow (relativeWorkspaceShift prev)
bind button7 $
- justMod $ const (relativeWorkspaceShift next)
+ justMod $ noWindow (relativeWorkspaceShift next)
bind button8 $
- justMod $ const mediaPrev
+ justMod $ noWindow mediaPrev
bind button9 $
- justMod $ const mediaNext
+ justMod $ noWindow mediaNext
bind button14 $ do
noMod $ subMouse $ do
bind button3 $
- noMod $ const (gotoWorkspace 's')
+ noMod $ noWindow (gotoWorkspace 's')
bind button13 $ do
- noMod $ \_ -> click >> CopyWindow.kill1
+ noMod $ noWindow $ click >> CopyWindow.kill1
bind button14 $ do
- noMod $ \_ -> click >> sendMessage ToggleZoom
+ noMod $ noWindow $ click >> sendMessage ToggleZoom
bind button15 $ do
- noMod $ \_ -> spawn "pavucontrol"
+ noMod $ noWindow $ spawnX "pavucontrol"
let mediaButtons = [
(button4, increaseVolume),
@@ -462,7 +474,7 @@ mouseMap = runButtons $ do
noMod $ subMouse $ do
bind button15 $ do
- noMod $ const jumpToLast
+ noMod $ noWindow jumpToLast
let workspaceButtons = [
@@ -493,7 +505,7 @@ windowSpecificBindings config = do
w <- lift ask
- let configureIf b k = tell =<< lift (b --> return (runKeys k config))
+ let configureIf b k = tell =<< lift (b --> return (resolveSubmaps (runKeys k) config))
emitKey = flip sendKey w
configureIf (flip elem browsers <$> className) $ do