aboutsummaryrefslogtreecommitdiff
path: root/.config/XMonad/lib/QwertyKeybindings.hs
diff options
context:
space:
mode:
Diffstat (limited to '.config/XMonad/lib/QwertyKeybindings.hs')
-rw-r--r--.config/XMonad/lib/QwertyKeybindings.hs241
1 files changed, 241 insertions, 0 deletions
diff --git a/.config/XMonad/lib/QwertyKeybindings.hs b/.config/XMonad/lib/QwertyKeybindings.hs
new file mode 100644
index 0000000..c02a63b
--- /dev/null
+++ b/.config/XMonad/lib/QwertyKeybindings.hs
@@ -0,0 +1,241 @@
+module QwertyKeybindings where
+
+import XMonad
+import qualified XMonad.StackSet as W
+
+-- actions
+import XMonad.Actions.CopyWindow
+import XMonad.Actions.WithAll
+import XMonad.Actions.CycleWS
+import XMonad.Actions.GridSelect
+import XMonad.Actions.SwapWorkspaces
+
+-- layout modifiers
+import XMonad.Layout.Spacing
+import XMonad.Layout.WindowNavigation as WN
+import XMonad.Layout.Maximize
+
+-- Layouts
+import XMonad.Layout.BinarySpacePartition as BSP
+
+-- hooks
+import XMonad.Hooks.ManageDocks
+
+import Util
+import Defaults
+import Scratchpads
+
+myWorkspaceKeys = [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0]
+myWorkspaces = wsKeys myWorkspaceKeys myWorkspaceNames
+
+myKeybindings :: [((KeyMask, KeySym), X ())]
+myKeybindings = [
+ ((myModMask, xK_Return), spawn myTerminal)
+ , ((myModShiftMask, xK_Return), spawn myLockscreen)
+ , ((myModMask .|. shiftMask, xK_q), kill1)
+ , ((myModShiftMask, xK_p), spawn myLauncher)
+
+ -- shutdown, restart, etc
+ , ((myModMask .|. myModMask', xK_Delete), spawn "shutdown -P now")
+ , ((myModShiftMask .|. myModMask', xK_Delete), spawn "shutdown -r now")
+
+ -- scratchpads
+ , ((myModMask, xK_u), myScratchpad "Term 0")
+ , ((myModMask, xK_i), myScratchpad "Term 1")
+ , ((myModMask, xK_o), myScratchpad "Term 2")
+ , ((myModMask, xK_p), myScratchpad "Term 3")
+
+ -- volume keys
+ , ((myModMask, xK_equal), spawn volUp)
+ , ((myModMask, xK_minus), spawn volDown)
+ , ((myModMask, xK_BackSpace), spawn volMute)
+
+ -- brightness keys
+ , ((myModMask .|. shiftMask, xK_equal), spawn backlightUp)
+ , ((myModMask .|. shiftMask, xK_minus), spawn backlightDown)
+
+ -- modify gaps on runtime
+ -- , ((myModMask, xK_F2), incWindowSpacing 1)
+ -- , ((myModMask, xK_F1), decWindowSpacing 1)
+ -- , ((myModMask .|. shiftMask, xK_F2), incScreenSpacing 1)
+ -- , ((myModMask .|. shiftMask, xK_F1), decScreenSpacing 1)
+
+ -- view prev/next workspaces
+ , ((myModShiftMask, xK_Tab ), prevWS)
+ , ((myModMask, xK_Tab ), nextWS)
+ , ((myModMask, xK_semicolon ), prevWS)
+ , ((myModMask, xK_apostrophe), nextWS)
+ , ((myModMask', xK_h ), prevWS)
+ , ((myModMask', xK_l ), nextWS)
+
+ -- move to prev/next workspaces
+ , ((myModShiftMask', xK_h ), shiftToPrev >> prevWS)
+ , ((myModShiftMask', xK_l ), shiftToNext >> nextWS)
+ , ((myModShiftMask', xK_semicolon ), shiftToPrev >> prevWS)
+ , ((myModShiftMask', xK_apostrophe), shiftToNext >> nextWS)
+
+ -- focus previous/next monitor
+ , ((myModMask, xK_bracketleft ), prevScreen)
+ , ((myModMask, xK_bracketright), nextScreen)
+
+ -- move window to previous/next monitor
+ , ((myModShiftMask, xK_bracketleft ), shiftPrevScreen >> prevScreen)
+ , ((myModShiftMask, xK_bracketright), shiftNextScreen >> nextScreen)
+
+ -- swap different screens
+ , ((myModMask .|. controlMask, xK_bracketleft ), swapPrevScreen >> prevScreen)
+ , ((myModMask .|. controlMask, xK_bracketright), swapNextScreen >> nextScreen)
+
+ -- toggle maximize
+ , ((myModMask, xK_f), withFocused (sendMessage . maximizeRestore))
+
+ -- unfloat windows
+ , ((myModMask .|. shiftMask, xK_f), withFocused $ windows . W.sink)
+
+ -- cycle through windows
+ , ((myModMask', xK_j), windows W.focusDown)
+ , ((myModMask', xK_k), windows W.focusUp)
+
+ -- 2D navigation
+ , ((myModMask, xK_l), sendMessage $ Go R)
+ , ((myModMask, xK_h), sendMessage $ Go L)
+ , ((myModMask, xK_k), sendMessage $ Go U)
+ , ((myModMask, xK_j), sendMessage $ Go D)
+ -- swap windows
+ , ((myModShiftMask, xK_l), sendMessage $ WN.Swap R)
+ , ((myModShiftMask, xK_h), sendMessage $ WN.Swap L)
+ , ((myModShiftMask, xK_k), sendMessage $ WN.Swap U)
+ , ((myModShiftMask, xK_j), sendMessage $ WN.Swap D)
+ -- resize
+ , ((myModMask .|. myModMask', xK_l), sendMessage $ ExpandTowards R)
+ , ((myModMask .|. myModMask', xK_h), sendMessage $ ExpandTowards L)
+ , ((myModMask .|. myModMask', xK_j), sendMessage $ ExpandTowards D)
+ , ((myModMask .|. myModMask', xK_k), sendMessage $ ExpandTowards U)
+ , ((myModMask .|. myModShiftMask', xK_l), sendMessage $ ShrinkFrom R)
+ , ((myModMask .|. myModShiftMask', xK_h), sendMessage $ ShrinkFrom L)
+ , ((myModMask .|. myModShiftMask', xK_j), sendMessage $ ShrinkFrom D)
+ , ((myModMask .|. myModShiftMask', xK_k), sendMessage $ ShrinkFrom U)
+ ] ++ [
+ -- workspace switching
+ ((myModMask, key), windows $ W.greedyView ws) | (key,ws) <- myWorkspaces
+ ] ++ [
+ -- moving window to workspace
+ ((myModShiftMask, key), windows $ W.shift ws) | (key,ws) <- myWorkspaces
+ ] ++ [
+ -- to swap workspace
+ ((myModShiftMask', key), windows $ swapWithCurrent ws) | (key, ws) <- myWorkspaces
+ ] ++ [
+ -- copy
+ ((m .|. myModMask, key), windows $ f ws) | (key, ws) <- myWorkspaces, (f, m) <- [(copy, myModShiftMask')]
+ ] ++ [
+ -- for not swapping tags while using multihead
+ ((m .|. myModMask, key), windows $ f ws) | (key, ws) <- myWorkspaces, (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
+ ] ++ [ -- directly focus monitors instead of cycling
+ ((m .|. myModMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
+ | (key, sc) <- zip [xK_e, xK_w] [0..]
+ , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
+ ]
+
+myKeybindingsP :: [(String, X())]
+myKeybindingsP = [
+ -- actions
+ -- TODO: add reboot, shutdown, logout, copy, cut, paste
+ ("M-a w", spawn wifiOff)
+ , ("M-a S-w", spawn wifiOn)
+ , ("M-a s", spawn customScreenshot)
+ , ("M-a S-s", spawn fullScreenshot)
+ , ("M-a m", spawn volMute)
+ , ("M-a p", spawn pausePlay)
+ , ("M-a d", myScratchpad "arandr")
+ , ("M-a r", spawn "screenrefresh")
+ , ("M-a S-r", spawn "screenrefresh -b")
+ -- media
+ , ("M-m w", myScratchpad "wallpaper")
+ , ("M-S-x", myScratchpad "wallpaper")
+ , ("M-m o", spawn "obs")
+ , ("M-S-o", spawn "obs")
+ , ("M-S-u", myScratchpad "musicplayer")
+ , ("M-m S-o", spawn "osu")
+ , ("M-m s", spawn "syncplay")
+ , ("M-m g", spawn "gimp")
+ , ("M-m k", spawn "kdenlive")
+ , ("M-g", spawn "gimp")
+ , ("M-s-g", spawn "kdenlive")
+ , ("M-m l", spawn "lutris")
+ , ("M-m v", spawn "vlc")
+ , ("M-m m", spawn "minecraft-launcher")
+ -- system apps/scratchpads
+ , ("M-b t", spawn myTorrentClient)
+ , ("M-b i", spawn myBrowser)
+ , ("M-S-i", spawn myBrowser)
+ , ("M-b d", myScratchpad "arandr")
+ , ("M-b c", myScratchpad "calc")
+ , ("M-b b", myScratchpad "blueman")
+ , ("M-S-b", myScratchpad "blueman")
+ , ("M-b p", myScratchpad "pavucontrol")
+ , ("M-x", myScratchpad "pavucontrol")
+ , ("M-b m", myScratchpad "BPYTOP")
+ , ("M-S-m", myScratchpad "BPYTOP")
+ , ("M-b n", myScratchpad "nmtui")
+ , ("M-S-n", myScratchpad "nmtui")
+ -- websites
+ , ("M-n y", spawn $ myBrowser ++ " https://youtube.com")
+ , ("M-n d", spawn $ myBrowser ++ " https://duckduckgo.com")
+ , ("M-n g", spawn $ myBrowser ++ " https://google.com")
+ , ("M-n S-g", spawn $ myBrowser ++ " https://github.com")
+ , ("M-n j", spawn $ myBrowser ++ " https://www.youtube.com/playlist?list=PL8lRJQHQWddu55nsz8CezmJJ-GRVISZ1E")
+ , ("M-n k", spawn $ myBrowser ++ " https://www.youtube.com/playlist?list=PL8lRJQHQWddvzCv02lClCfDfUo97wzX1A")
+ , ("M-n c", spawn $ myBrowser ++ " https://www.youtube.com/playlist?list=PL8lRJQHQWdduy2V0DQQ4Lm0P572XJFVB9")
+ , ("M-n v", spawn $ myBrowser ++ " https://vidhukant.xyz")
+ , ("M-n m", spawn $ myBrowser ++ " https://myanimelist.net/profile/0ZeroTsu")
+ -- other apps
+ , ("M-y e", spawn myTextEditor)
+ , ("M-d", spawn myTextEditor)
+ , ("M-S-d", spawn "firejail discord")
+ , ("M-y S-e", spawn myEmailClient)
+ , ("M-t", spawn myEmailClient)
+ , ("M-y t", spawn myTorrentClient)
+ , ("M-S-t", spawn myTorrentClient)
+ , ("M-y S-t", spawn "torbrowser-launcher")
+ , ("M-y i", spawn myBrowser)
+ , ("M-y S-i", spawn myPrivateBrowser)
+ , ("M-y f", spawn "firefox")
+ , ("M-y v", spawn "virt-manager")
+ , ("M-v", spawn "virt-manager")
+ , ("M-y b", spawn "brave")
+ , ("M-y p", spawn myFileManager)
+ , ("M-s", spawn myFileManager)
+ , ("M-z", spawn myPasswordManager)
+ , ("M-y S-p", spawn $ myTerminal' ++ " -e " ++ myFileManager')
+ , ("M-c", spawn myColorPicker)
+ -- XMonad
+ , ("M-q q", gridselectWindow myGridSelect >>= flip whenJust (\w -> killWindow w))
+ , ("M-q S-q", killAll)
+ , ("M-q r", sendMessage Rotate)
+ , ("M-q t", sendMessage ToggleStruts)
+ , ("M-q s", sendMessage BSP.Swap)
+ , ("M-q g", goToSelected myGridSelect)
+ , ("M-q c", windows copyToAll)
+ , ("M-q S-c", killAllOtherCopies)
+ , ("M-q b", bringSelected myGridSelect)
+ -- gaps
+ , ("M-q x d", decWindowSpacing 3)
+ , ("M-q x i", incWindowSpacing 3)
+ , ("M-q x S-d", decScreenSpacing 3)
+ , ("M-q x S-i", incScreenSpacing 3)
+ , ("M-q x b", setSmartSpacing False)
+ , ("M-q x S-b", setSmartSpacing True)
+ , ("M-q x n", setWindowSpacingEnabled False)
+ , ("M-q x S-n", setWindowSpacingEnabled True)
+ , ("M-q x m", setScreenSpacingEnabled False)
+ , ("M-q x S-m", setScreenSpacingEnabled True)
+ -- resize windows
+ , ("M-q h", sendMessage $ ExpandTowards L)
+ , ("M-q j", sendMessage $ ExpandTowards D)
+ , ("M-q k", sendMessage $ ExpandTowards U)
+ , ("M-q l", sendMessage $ ExpandTowards R)
+ , ("M-q S-h", sendMessage $ ShrinkFrom L)
+ , ("M-q S-j", sendMessage $ ShrinkFrom D)
+ , ("M-q S-k", sendMessage $ ShrinkFrom U)
+ , ("M-q S-l", sendMessage $ ShrinkFrom R)
+ ]