module Keybindings where import XMonad import qualified XMonad.StackSet as W import System.Exit import System.IO -- data import Data.Tree import qualified Data.Map as M -- actions import XMonad.Actions.CopyWindow import XMonad.Actions.CycleWS import XMonad.Actions.GridSelect import XMonad.Actions.SwapWorkspaces import qualified XMonad.Actions.TreeSelect as TS -- layout modifiers import XMonad.Layout.Spacing import XMonad.Layout.WindowNavigation as WN import XMonad.Layout.Maximize import XMonad.Layout.Fullscreen import XMonad.Layout.NoBorders -- Layouts import XMonad.Layout.BinarySpacePartition as BSP import XMonad.Layout.Grid import XMonad.Layout.Tabbed -- hooks import XMonad.Hooks.SetWMName import XMonad.Hooks.ManageDocks import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.DynamicLog -- DynamicLog replacement(s) -- import XMonad.Hooks.StatusBar -- import XMonad.Hooks.StatusBar.PP -- utilities import XMonad.Util.Run import XMonad.Util.SpawnOnce import XMonad.Util.EZConfig import XMonad.Util.Cursor import XMonad.Util.NamedScratchpad import Defaults import Scratchpads myMouseKeybindings :: [((ButtonMask, Button), Window -> X ())] myMouseKeybindings = [ ((myModMask, 4), \w -> prevWS) , ((myModMask, 5), \w -> nextWS) ] myKeybindings :: [((KeyMask, KeySym), X ())] myKeybindings = [ ((myModMask, xK_Return), spawn myTerminal) , ((myModMask .|. shiftMask, xK_q), kill1) -- 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 , ((myModMask .|. shiftMask, 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 , ((myModMask' .|. shiftMask, xK_h ), shiftToPrev >> prevWS) , ((myModMask' .|. shiftMask, xK_l ), shiftToNext >> nextWS) , ((myModMask .|. shiftMask, xK_semicolon ), shiftToPrev >> prevWS) , ((myModMask .|. shiftMask, xK_apostrophe), shiftToNext >> nextWS) -- focus previous/next monitor , ((myModMask, xK_bracketleft ), prevScreen) , ((myModMask, xK_bracketright), nextScreen) -- move window to previous/next monitor , ((myModMask .|. shiftMask, xK_bracketleft ), shiftPrevScreen >> prevScreen) , ((myModMask .|. shiftMask, xK_bracketright), shiftNextScreen >> nextScreen) -- swap different screens , ((myModMask .|. controlMask, xK_bracketleft ), swapPrevScreen) , ((myModMask .|. controlMask, xK_bracketright), swapNextScreen) -- toggle both bars , ((myModMask, xK_a), sendMessage ToggleStruts) -- 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 , ((myModMask .|. shiftMask, xK_l), sendMessage $ WN.Swap R) , ((myModMask .|. shiftMask, xK_h), sendMessage $ WN.Swap L) , ((myModMask .|. shiftMask, xK_k), sendMessage $ WN.Swap U) , ((myModMask .|. shiftMask, xK_j), sendMessage $ WN.Swap D) -- resize , ((myModMask .|. mod1Mask, xK_l), sendMessage $ ExpandTowards R) , ((myModMask .|. mod1Mask, xK_h), sendMessage $ ExpandTowards L) , ((myModMask .|. mod1Mask, xK_j), sendMessage $ ExpandTowards D) , ((myModMask .|. mod1Mask, xK_k), sendMessage $ ExpandTowards U) , ((myModMask .|. mod1Mask .|. shiftMask, xK_l), sendMessage $ ShrinkFrom R) , ((myModMask .|. mod1Mask .|. shiftMask, xK_h), sendMessage $ ShrinkFrom L) , ((myModMask .|. mod1Mask .|. shiftMask, xK_j), sendMessage $ ShrinkFrom D) , ((myModMask .|. mod1Mask .|. shiftMask, xK_k), sendMessage $ ShrinkFrom U) ] ++ [ -- for extra workspace(s) ((myModMask, key), windows $ W.greedyView ws) | (key,ws) <- myExtraWorkspaces ] ++ [ -- also for extra workspaces ((myModMask .|. shiftMask, key), windows $ W.shift ws) | (key,ws) <- myExtraWorkspaces ] ++ [ -- to swap workspace ((mod1Mask .|. shiftMask, k), windows $ swapWithCurrent i) | (i, k) <- zip myWorkspaces [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0] ] ++ [ -- copy ((m .|. myModMask, k), windows $ f i) | (i, k) <- zip myWorkspaces [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0] , (f, m) <- [(copy, shiftMask .|. myModMask')] ] ++ [ -- for not swapping tags while using multihead ((m .|. myModMask, k), windows $ f i) | (i, k) <- zip myWorkspaces [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)] ] myKeybindingsP :: [(String, X())] myKeybindingsP = [ -- fn keys ("", spawn backlightUp) , ("", spawn backlightDown) , ("", spawn volUp) , ("", spawn volDown) , ("", spawn volMute) , ("M-S-p", spawn "dmenu_run") -- scratchpads , ("M-m", namedScratchpadAction myScratchpads "BPYTOP") , ("M-S-m", namedScratchpadAction myScratchpads "calc") , ("M-n", namedScratchpadAction myScratchpads "pavucontrol") , ("M-S-n", namedScratchpadAction myScratchpads "arandr") , ("M-b", namedScratchpadAction myScratchpads "blueman") , ("M-S-r", namedScratchpadAction myScratchpads "wallpaper") ]