diff options
Diffstat (limited to '.config/XMonad/lib/QwertyKeybindings.hs')
-rw-r--r-- | .config/XMonad/lib/QwertyKeybindings.hs | 241 |
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) + ] |