From 5539bed0637070214598ac8da1f81198af33b213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9ana=20=E6=B1=9F?= Date: Sun, 7 Sep 2025 17:34:50 +0800 Subject: [PATCH] vanadium/xmonad: refactor manage gook --- .../vanadium/home/xmonad/xmonad.hs | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/nix/configurations/vanadium/home/xmonad/xmonad.hs b/nix/configurations/vanadium/home/xmonad/xmonad.hs index 043165f1..a6d9932f 100644 --- a/nix/configurations/vanadium/home/xmonad/xmonad.hs +++ b/nix/configurations/vanadium/home/xmonad/xmonad.hs @@ -24,6 +24,7 @@ import XMonad.Util.NamedScratchpad import XMonad.Util.SpawnOnce import Data.Map.Strict qualified as M +import Data.Monoid (Endo(Endo)) import Graphics.X11.ExtraTypes.XF86 import System.Posix @@ -49,12 +50,6 @@ main = , logHook = let - isOneOf :: Eq a => Query a -> [a] -> Query Bool - isOneOf q = fmap or . traverse (q =?) - - isFocused :: Query Bool - isFocused = fmap not isUnfocused - fadeHook = composeOne [ -- easier to paint over stuff @@ -107,9 +102,16 @@ main = let hasEvenWindows :: X Bool hasEvenWindows = g <$> get - where g = - even . length . W.integrate' - . W.stack . W.workspace . W.current . windowset + where g = even . length . W.integrate' + . W.stack . W.workspace . W.current . windowset + + -- When having a lot of windows this will converge into the middle of the stack + insertInMiddle :: Query (Endo WindowSet) + insertInMiddle = + ifM + (liftX hasEvenWindows) + (insertPosition Below Newer) -- New window is odd + (insertPosition Above Newer) -- New window is even in composeAll [ className ~? "NautilusPreviewer" --> customFloating centeredFloat @@ -121,15 +123,14 @@ main = <> composeOne - [ className =? "firefox" -?> insertPosition Above Newer - , className =? "sioyek" -?> insertPosition Below Older - , className =? "kitty" -?> insertPosition Below Newer - , className ~? "Nautilus" -?> insertPosition Below Older -- For some reason Older doesn't work - - , ifM - (liftX hasEvenWindows) - (Just <$> insertPosition Below Newer) -- New window is odd - (Just <$> insertPosition Above Newer) -- New window is even + [ className =? "firefox" -?> insertPosition Master Newer + , className =? "kitty" -?> insertPosition Below Newer + , className `isOneOf` + [ "sioyek" + , "Nautilus" + ] + -?> insertPosition End Older + , Just <$> insertInMiddle ] } @@ -270,6 +271,13 @@ xmobarConfig = statusBarProp "xmobar -x 0" (pure myPrettyPrinter) , ppSep = " | " } + +isOneOf :: Eq a => Query a -> [a] -> Query Bool +isOneOf q = fmap or . traverse (q =?) + +isFocused :: Query Bool +isFocused = fmap not isUnfocused + isFirefoxPIP :: Query Bool isFirefoxPIP = className =? "firefox"