diff --git a/dotfiles/config/hypr/hyprland.lua b/dotfiles/config/hypr/hyprland.lua index f80b58c6..d80a9c01 100644 --- a/dotfiles/config/hypr/hyprland.lua +++ b/dotfiles/config/hypr/hyprland.lua @@ -1199,8 +1199,9 @@ end local function remove_minimized_window(target) local remaining = {} + local target_address = target and target.address for _, window in ipairs(minimized_windows) do - if window and window ~= target then + if window and window.address ~= target_address then remaining[#remaining + 1] = window end end @@ -1218,16 +1219,24 @@ end local function hydrate_minimized_windows() local by_address = {} + local current_by_address = {} local hydrated = {} - for _, window in ipairs(minimized_windows) do - if window and window.address and not by_address[window.address] then - by_address[window.address] = true - hydrated[#hydrated + 1] = window + for _, window in ipairs(hl.get_windows()) do + if window and window.address then + current_by_address[window.address] = window end end - for _, window in ipairs(hl.get_windows()) do + for _, window in ipairs(minimized_windows) do + local current = window and window.address and current_by_address[window.address] + if current and is_minimized_window(current) and not by_address[current.address] then + by_address[current.address] = true + hydrated[#hydrated + 1] = current + end + end + + for _, window in pairs(current_by_address) do if window and window.address and is_minimized_window(window) and not by_address[window.address] then by_address[window.address] = true hydrated[#hydrated + 1] = window diff --git a/dotfiles/config/taffybar/TaffybarConfig/Widgets.hs b/dotfiles/config/taffybar/TaffybarConfig/Widgets.hs index bae55556..9654c155 100644 --- a/dotfiles/config/taffybar/TaffybarConfig/Widgets.hs +++ b/dotfiles/config/taffybar/TaffybarConfig/Widgets.hs @@ -26,7 +26,7 @@ import TaffybarConfig.WidgetUtil stackInPill, usageLogoWidget, ) -import TaffybarConfig.Workspaces (workspaceLabelSetter, workspaceWindowIconGetter) +import TaffybarConfig.Workspaces (workspaceLabelSetter, workspaceShowPredicate, workspaceWindowIconGetter) import System.Environment (lookupEnv) import System.Environment.XDG.BaseDir (getUserConfigFile) import System.Taffybar.Context @@ -34,7 +34,6 @@ import System.Taffybar.Context TaffyIO, ) import System.Taffybar.Information.Memory (MemoryInfo (..), parseMeminfo) -import qualified System.Taffybar.Information.Workspaces.Model as WorkspaceModel import System.Taffybar.Util (postGUIASync) import System.Taffybar.Widget import qualified System.Taffybar.Widget.ASUS as ASUS @@ -110,10 +109,7 @@ workspacesWidget = Workspaces.minIcons = 1, Workspaces.getWindowIconPixbuf = workspaceWindowIconGetter, Workspaces.labelSetter = workspaceLabelSetter, - Workspaces.showWorkspaceFn = - \workspace -> - Workspaces.hideEmpty workspace - && not (WorkspaceModel.workspaceIsSpecial workspace) + Workspaces.showWorkspaceFn = workspaceShowPredicate } clockWidget :: TaffyIO Gtk.Widget diff --git a/dotfiles/config/taffybar/TaffybarConfig/Workspaces.hs b/dotfiles/config/taffybar/TaffybarConfig/Workspaces.hs index b1760ddb..370df5a5 100644 --- a/dotfiles/config/taffybar/TaffybarConfig/Workspaces.hs +++ b/dotfiles/config/taffybar/TaffybarConfig/Workspaces.hs @@ -2,6 +2,7 @@ module TaffybarConfig.Workspaces ( workspaceLabelSetter, + workspaceShowPredicate, workspaceWindowIconGetter, ) where @@ -39,16 +40,31 @@ remapNSP :: String -> String remapNSP "NSP" = "S" remapNSP n = n +workspaceIsMinimizedBucket :: WorkspaceModel.WorkspaceInfo -> Bool +workspaceIsMinimizedBucket workspace = + let name = + T.toLower $ + WorkspaceModel.workspaceName $ + WorkspaceModel.workspaceIdentity workspace + in name == "minimized" || name == "special:minimized" + +workspaceShowPredicate :: WorkspaceModel.WorkspaceInfo -> Bool +workspaceShowPredicate workspace = + Workspaces.hideEmpty workspace + && (not (WorkspaceModel.workspaceIsSpecial workspace) || workspaceIsMinimizedBucket workspace) + workspaceLabelSetter :: WorkspaceModel.WorkspaceInfo -> TaffyIO String workspaceLabelSetter workspace = do backendType <- asks backend let identity = WorkspaceModel.workspaceIdentity workspace fallbackLabel = remapNSP $ T.unpack (WorkspaceModel.workspaceName identity) - case (backendType, WorkspaceModel.workspaceNumericId identity) of - (BackendX11, Just workspaceId) -> do - fullNames <- runX11Def [] x11FullWorkspaceNames - return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames) - _ -> return fallbackLabel + if workspaceIsMinimizedBucket workspace + then return "M" + else case (backendType, WorkspaceModel.workspaceNumericId identity) of + (BackendX11, Just workspaceId) -> do + fullNames <- runX11Def [] x11FullWorkspaceNames + return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames) + _ -> return fallbackLabel iconRemap :: [(Text, [Text])] iconRemap = diff --git a/dotfiles/config/taffybar/flake.lock b/dotfiles/config/taffybar/flake.lock index 124614a7..6062ef96 100644 --- a/dotfiles/config/taffybar/flake.lock +++ b/dotfiles/config/taffybar/flake.lock @@ -136,11 +136,11 @@ "xmonad-contrib": "xmonad-contrib" }, "locked": { - "lastModified": 1777963658, - "narHash": "sha256-ZmIB9XreL99khpPXCYB+LP24/ovMRSQ5DMtJj0ySO4Y=", + "lastModified": 1778147268, + "narHash": "sha256-q/1DIMXQEU4y95gAFacnrHwqxYbkpqwtpmVGTFmmTMo=", "owner": "taffybar", "repo": "taffybar", - "rev": "b078f1d47fbb71d03843d7c3d9320c128b6bc5a1", + "rev": "e52f00e8d6a0fe903dada5001778808d093eafb6", "type": "github" }, "original": { diff --git a/dotfiles/config/taffybar/taffybar b/dotfiles/config/taffybar/taffybar index 242682ac..e52f00e8 160000 --- a/dotfiles/config/taffybar/taffybar +++ b/dotfiles/config/taffybar/taffybar @@ -1 +1 @@ -Subproject commit 242682ac0b5b8d99b5ab6f4977ee1b656ae4337a +Subproject commit e52f00e8d6a0fe903dada5001778808d093eafb6