From f840b1d49e0061f81f58c067374421681ef4091c Mon Sep 17 00:00:00 2001 From: jasmine Date: Thu, 8 May 2025 21:27:07 +0800 Subject: [PATCH] chore: refactor + keybinds --- src/xmonad.hs | 173 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 113 insertions(+), 60 deletions(-) diff --git a/src/xmonad.hs b/src/xmonad.hs index 3a12d70..a615d41 100644 --- a/src/xmonad.hs +++ b/src/xmonad.hs @@ -1,5 +1,6 @@ import XMonad import XMonad.Actions.CycleWS +import XMonad.Actions.Navigation2D import XMonad.Hooks.DynamicLog import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageDocks @@ -17,12 +18,16 @@ import XMonadConfig.GruvboxMaterial {- FOURMOLU_DISABLE -} --- | The main function +-- +-- The main function +-- + main :: IO () main = xmonad . docks . ewmhFullscreen . ewmh + . withNavigation2DConfig def . withSB myXmobar $ myConfig @@ -37,7 +42,11 @@ myConfig = def , manageHook = myManageHook } `additionalKeys` myKeybindings --- | Configuration + +-- +-- Configuration +-- + myTerminal = "wezterm" myModMask = mod4Mask myBorderWidth = 5 @@ -49,72 +58,108 @@ myScrot = "scrot -s '%Y%m%d_%H%M%S.png' -e 'mv $f ~/Pictures/scrots volumeDown = "pactl set-sink-volume @DEFAULT_SINK@ -10%" volumeUp = "pactl set-sink-volume @DEFAULT_SINK@ +10%" --- | Keybindings + +-- +-- Keybindings +-- + myKeybindings = - -- launching and killing programs - [ ((myModMask, xK_Return), spawn myTerminal) -- %! Launch terminal - , ((myModMask, xK_Tab ), spawn myLauncher) -- %! Launch rofi - , ((myModMask, xK_s ), spawn myScrot ) -- %! Take screenshot - , ((myModMask, xK_Escape), kill ) -- %! Close the focused window - , ((myModMask .|. controlMask, xK_Escape), io exitSuccess ) -- %! Quit xmonad + -- + -- Launching and killing programs + -- - -- multimedia - , ((noModMask, xF86XK_AudioPlay ), spawn "mpc toggle") -- %! Play/Pause music - , ((noModMask, xF86XK_AudioStop ), spawn "mpc stop" ) -- %! Stop music - , ((noModMask, xF86XK_AudioNext ), spawn "mpc next" ) -- %! Next track - , ((noModMask, xF86XK_AudioPrev ), spawn "mpc prev" ) -- %! Previous track - , ((noModMask, xF86XK_AudioLowerVolume), spawn volumeDown ) -- %! Volume down - , ((noModMask, xF86XK_AudioRaiseVolume), spawn volumeUp ) -- %! Volume up + [ ((myModMask, xK_Return), spawn myTerminal) + , ((myModMask, xK_Tab ), spawn myLauncher) + , ((myModMask, xK_s ), spawn myScrot ) + , ((myModMask, xK_Escape), kill ) + , ((myModMask .|. shiftMask, xK_q ), io exitSuccess ) - -- layouts - , ((myModMask, xK_t), sendMessage $ JumpToLayout "dynamic tiling" ) -- %! Jump to our tiled layout - , ((myModMask, xK_b), sendMessage $ JumpToLayout "binary space partition") -- %! Jump to our bsp layout - , ((myModMask, xK_m), sendMessage $ JumpToLayout "maximised" ) -- %! Jump to our maximized layout - , ((myModMask, xK_f), sendMessage $ JumpToLayout "fullscreen" ) -- %! Jump to our fullscreen layout - , ((myModMask .|. shiftMask, xK_t), withFocused $ windows . W.sink ) -- %! Push window back into tiling - -- window stack - , ((myModMask, xK_Down), windows W.focusDown) -- %! Move focus to the next window - , ((myModMask, xK_Up ), windows W.focusUp ) -- %! Move focus to the previous window - , ((myModMask .|. shiftMask, xK_Down), windows W.swapDown ) -- %! Swap the focused window with the next window - , ((myModMask .|. shiftMask, xK_Up ), windows W.swapUp ) -- %! Swap the focused window with the previous window + -- + -- Multimedia + -- - -- master slave - , ((myModMask, xK_space ), windows W.focusMaster ) -- %! Move focus to the master window - , ((myModMask .|. shiftMask, xK_space ), windows W.swapMaster ) -- %! Swap the focused window with the master window - , ((myModMask, xK_Page_Up ), sendMessage Shrink ) -- %! Shrink the master area - , ((myModMask, xK_Page_Down), sendMessage Expand ) -- %! Expand the master area - , ((myModMask .|. shiftMask, xK_Page_Up ), sendMessage (IncMasterN 1) ) -- %! Increase the number of windows in the master area - , ((myModMask .|. shiftMask, xK_Page_Down), sendMessage (IncMasterN (-1))) -- %! Decrease the number of windows in the master area + , ((noModMask, xF86XK_AudioPlay ), spawn "mpc toggle") + , ((noModMask, xF86XK_AudioStop ), spawn "mpc stop" ) + , ((noModMask, xF86XK_AudioNext ), spawn "mpc next" ) + , ((noModMask, xF86XK_AudioPrev ), spawn "mpc prev" ) + , ((noModMask, xF86XK_AudioLowerVolume), spawn volumeDown ) + , ((noModMask, xF86XK_AudioRaiseVolume), spawn volumeUp ) + + + -- + -- Navigation + -- + + -- directional navigation of windows + , ((myModMask, xK_Right), windowGo R False) + , ((myModMask, xK_Left ), windowGo L False) + , ((myModMask, xK_Up ), windowGo U False) + , ((myModMask, xK_Down ), windowGo D False) + + -- swap adjacent windows + , ((myModMask .|. shiftMask, xK_Right), windowSwap R False) + , ((myModMask .|. shiftMask, xK_Left ), windowSwap L False) + , ((myModMask .|. shiftMask, xK_Up ), windowSwap U False) + , ((myModMask .|. shiftMask, xK_Down ), windowSwap D False) -- workspaces - , ((myModMask, xK_Right), moveTo Next hiddenWS) -- %! Move focus to the next hidden workspace - , ((myModMask, xK_Left ), moveTo Prev hiddenWS) -- %! Move focus to the previous hidden workspace - , ((myModMask .|. shiftMask, xK_Right), shiftTo Next hiddenWS) -- %! Move focused window to the next hidden workspace - , ((myModMask .|. shiftMask, xK_Left ), shiftTo Prev hiddenWS) -- %! Move focused window to the previous hidden workspace + , ((myModMask, xK_Page_Up ), moveTo Prev hiddenWS) + , ((myModMask, xK_Page_Down), moveTo Next hiddenWS) - -- monitors - , ((myModMask, xK_End ), nextScreen ) -- %! Move focus to the next screen - , ((myModMask, xK_Home), prevScreen ) -- %! Move focus to the previous screen - , ((myModMask .|. shiftMask, xK_End ), shiftNextScreen) -- %! Move focused window to the next screen - , ((myModMask .|. shiftMask, xK_Home), shiftPrevScreen) -- %! Move focused window to the previous screen + -- layouts + , ((myModMask, xK_t), sendMessage $ JumpToLayout "dynamic tiling" ) + , ((myModMask, xK_b), sendMessage $ JumpToLayout "binary space partition") + , ((myModMask, xK_m), sendMessage $ JumpToLayout "maximised" ) + , ((myModMask, xK_f), sendMessage $ JumpToLayout "fullscreen" ) + , ((myModMask .|. shiftMask, xK_t), withFocused $ windows . W.sink ) - -- binary space partition - , ((myModMask .|. mod1Mask, xK_Right ), sendMessage $ ExpandTowardsBy R 0.01) -- %! Expand window towards the right - , ((myModMask .|. mod1Mask, xK_Left ), sendMessage $ ExpandTowardsBy L 0.01) -- %! Expand window towards the left - , ((myModMask .|. mod1Mask, xK_Down ), sendMessage $ ExpandTowardsBy D 0.01) -- %! Expand window downwards - , ((myModMask .|. mod1Mask, xK_Up ), sendMessage $ ExpandTowardsBy U 0.01) -- %! Expand window upwards - , ((myModMask .|. mod1Mask .|. controlMask, xK_Right ), sendMessage $ ShrinkFromBy R 0.01) -- %! Shrink window from the right - , ((myModMask .|. mod1Mask .|. controlMask, xK_Left ), sendMessage $ ShrinkFromBy L 0.01) -- %! Shrink window from the left - , ((myModMask .|. mod1Mask .|. controlMask, xK_Down ), sendMessage $ ShrinkFromBy D 0.01) -- %! Shrink window downwards - , ((myModMask .|. mod1Mask .|. controlMask, xK_Up ), sendMessage $ ShrinkFromBy U 0.01) -- %! Shrink window upwards - , ((myModMask .|. mod1Mask, xK_Page_Up ), sendMessage Rotate ) -- %! Rotate a split (horizontal/vertical) in the BSP - , ((myModMask .|. mod1Mask, xK_Page_Down), sendMessage Swap ) -- %! Swap the left child of a split with the right child of split - , ((myModMask .|. mod1Mask, xK_Home ), sendMessage $ SplitShift Prev ) -- %! Shift window by splitting previous neighbour - , ((myModMask .|. mod1Mask, xK_End ), sendMessage $ SplitShift Next ) -- %! Shift window by splitting next neighbour + + -- + -- DynamicTiling + -- + + -- move/swap focus of master + , ((myModMask, xK_BackSpace), windows W.focusMaster) + , ((myModMask .|. shiftMask, xK_BackSpace), windows W.swapMaster ) + + -- shrink/expand the master area + , ((myModMask, xK_Home), sendMessage Shrink) + , ((myModMask, xK_End ), sendMessage Expand) + + -- number of windows in the master area + , ((myModMask .|. shiftMask, xK_Home), sendMessage (IncMasterN 1) ) + , ((myModMask .|. shiftMask, xK_End ), sendMessage (IncMasterN (-1))) + + + -- + -- BinarySpacePartition + -- + + -- expand windows + , ((myModMask .|. mod1Mask, xK_Right), sendMessage $ ExpandTowardsBy R 0.01) + , ((myModMask .|. mod1Mask, xK_Left ), sendMessage $ ExpandTowardsBy L 0.01) + , ((myModMask .|. mod1Mask, xK_Down ), sendMessage $ ExpandTowardsBy D 0.01) + , ((myModMask .|. mod1Mask, xK_Up ), sendMessage $ ExpandTowardsBy U 0.01) + + -- shrink windows + , ((myModMask .|. mod1Mask .|. controlMask, xK_Right), sendMessage $ ShrinkFromBy R 0.01) + , ((myModMask .|. mod1Mask .|. controlMask, xK_Left ), sendMessage $ ShrinkFromBy L 0.01) + , ((myModMask .|. mod1Mask .|. controlMask, xK_Down ), sendMessage $ ShrinkFromBy D 0.01) + , ((myModMask .|. mod1Mask .|. controlMask, xK_Up ), sendMessage $ ShrinkFromBy U 0.01) + + -- layout manipulation + , ((myModMask .|. mod1Mask, xK_Return ), sendMessage Rotate ) + , ((myModMask .|. mod1Mask, xK_BackSpace), sendMessage Swap ) + , ((myModMask .|. mod1Mask, xK_Home ), sendMessage $ SplitShift Prev) + , ((myModMask .|. mod1Mask, xK_End ), sendMessage $ SplitShift Next) ] --- | Layouts + +-- +-- Layouts +-- + myLayouts = myTile ||| myBsp ||| myMax ||| myFull where -- our layouts @@ -129,7 +174,11 @@ myLayouts = myTile ||| myBsp ||| myMax ||| myFull ratio = 2/3 -- Default proportion of screen occupied by master pane delta = 3/100 -- Percent of screen to increment by when resizing panes --- | Statusbar + +-- +-- Statusbar +-- + myXmobar = statusBarPropTo "_XMONAD_LOG_1" "xmobar" (pure myXmobarPP) myXmobarPP :: PP @@ -144,10 +193,14 @@ myXmobarPP = def , ppOrder = \[ws, l, _] -> [ws, l] } --- | ManageHook + +-- +-- ManageHook +-- + myManageHook = composeAll [ className =? "Thunar" --> doFloat , className =? "Ristretto" --> doFloat , className =? "Tk" --> doFloat -- python gui development - , className =? "TkFDialog" --> doFloat + , className =? "TkFDialog" --> doFloat -- ^^ ]