From 3dd14e466c78e1a5e90ffeff5cf37b40c3a82a53 Mon Sep 17 00:00:00 2001 From: Maxime Daffis Date: Thu, 11 Jul 2024 14:56:29 +0200 Subject: [PATCH] (feature) Add Stage Manager (com.apple.WindowManager) settings as system.defaults.windowmanager All credits go to @AlexOwl. Their [PR](https://github.com/LnL7/nix-darwin/pull/505) looked abandonned so I reported their changes and addressed the change requests. --- modules/module-list.nix | 1 + modules/system/defaults-write.nix | 3 + modules/system/defaults/WindowManager.nix | 76 +++++++++++++++++++ .../system-defaults-write/activate-user.txt | 40 ++++++++++ tests/system-defaults-write.nix | 8 ++ 5 files changed, 128 insertions(+) create mode 100644 modules/system/defaults/WindowManager.nix diff --git a/modules/module-list.nix b/modules/module-list.nix index d6116d969..0b62158a8 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -32,6 +32,7 @@ ./system/defaults/trackpad.nix ./system/defaults/universalaccess.nix ./system/defaults/ActivityMonitor.nix + ./system/defaults/WindowManager.nix ./system/etc.nix ./system/keyboard.nix ./system/launchd.nix diff --git a/modules/system/defaults-write.nix b/modules/system/defaults-write.nix index 18be40847..827a7d312 100644 --- a/modules/system/defaults-write.nix +++ b/modules/system/defaults-write.nix @@ -32,6 +32,7 @@ let trackpadBluetooth = defaultsToList "com.apple.driver.AppleBluetoothMultitouch.trackpad" cfg.trackpad; universalaccess = defaultsToList "com.apple.universalaccess" cfg.universalaccess; ActivityMonitor = defaultsToList "com.apple.ActivityMonitor" cfg.ActivityMonitor; + WindowManager = defaultsToList "com.apple.WindowManager" cfg.WindowManager; CustomUserPreferences = flatten (mapAttrsToList (name: value: defaultsToList name value) cfg.CustomUserPreferences); CustomSystemPreferences = flatten (mapAttrsToList (name: value: defaultsToList name value) cfg.CustomSystemPreferences); @@ -85,6 +86,7 @@ in universalaccess ActivityMonitor CustomUserPreferences + WindowManager ] '' # Set defaults @@ -107,6 +109,7 @@ in ${concatStringsSep "\n" universalaccess} ${concatStringsSep "\n" ActivityMonitor} ${concatStringsSep "\n" CustomUserPreferences} + ${concatStringsSep "\n" WindowManager} ${optionalString (length dock > 0) '' # Only restart Dock if current user is logged in diff --git a/modules/system/defaults/WindowManager.nix b/modules/system/defaults/WindowManager.nix new file mode 100644 index 000000000..38fbaa37a --- /dev/null +++ b/modules/system/defaults/WindowManager.nix @@ -0,0 +1,76 @@ +{ config, lib, ... }: + +with lib; +{ + options = { + system.defaults.WindowManager.GloballyEnabled = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Enable Stage Manager + Stage Manager arranges your recent windows into a single strip for reduced clutter and quick access. Default is false. + ''; + }; + + system.defaults.WindowManager.EnableStandardClickToShowDesktop = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Click wallpaper to reveal desktop + Clicking your wallpaper will move all windows out of the way to allow access to your desktop items and widgets. Default is true. + false means "Only in Stage Manager" + true means "Always" + ''; + }; + + system.defaults.WindowManager.AutoHide = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Auto hide stage strip showing recent apps. Default is false. + ''; + }; + + system.defaults.WindowManager.AppWindowGroupingBehavior = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Grouping strategy when showing windows from an application. + false means "One at a time" + true means "All at once" + ''; + }; + + system.defaults.WindowManager.StandardHideDesktopIcons = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Hide items on desktop. + ''; + }; + + system.defaults.WindowManager.HideDesktop = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Hide items in Stage Manager. + ''; + }; + + system.defaults.WindowManager.StandardHideWidgets = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Hide widgets on desktop. + ''; + }; + + system.defaults.WindowManager.StageManagerHideWidgets = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Hide widgets in Stage Manager. + ''; + }; + }; +} diff --git a/tests/fixtures/system-defaults-write/activate-user.txt b/tests/fixtures/system-defaults-write/activate-user.txt index d324a8d90..4824a11bb 100644 --- a/tests/fixtures/system-defaults-write/activate-user.txt +++ b/tests/fixtures/system-defaults-write/activate-user.txt @@ -375,3 +375,43 @@ defaults write com.apple.Safari 'com.apple.Safari.ContentPageGroupIdentifier.Web ' +defaults write com.apple.WindowManager 'AppWindowGroupingBehavior' $' + + + +' +defaults write com.apple.WindowManager 'AutoHide' $' + + + +' +defaults write com.apple.WindowManager 'EnableStandardClickToShowDesktop' $' + + + +' +defaults write com.apple.WindowManager 'GloballyEnabled' $' + + + +' +defaults write com.apple.WindowManager 'HideDesktop' $' + + + +' +defaults write com.apple.WindowManager 'StageManagerHideWidgets' $' + + + +' +defaults write com.apple.WindowManager 'StandardHideDesktopIcons' $' + + + +' +defaults write com.apple.WindowManager 'StandardHideWidgets' $' + + + +' diff --git a/tests/system-defaults-write.nix b/tests/system-defaults-write.nix index 6a95b5563..f91aabe86 100644 --- a/tests/system-defaults-write.nix +++ b/tests/system-defaults-write.nix @@ -64,6 +64,14 @@ system.defaults.ActivityMonitor.SortColumn = "CPUUsage"; system.defaults.ActivityMonitor.SortDirection = 0; system.defaults.ActivityMonitor.OpenMainWindow = true; + system.defaults.WindowManager.GloballyEnabled = false; + system.defaults.WindowManager.EnableStandardClickToShowDesktop = false; + system.defaults.WindowManager.AutoHide = false; + system.defaults.WindowManager.AppWindowGroupingBehavior = true; + system.defaults.WindowManager.StandardHideDesktopIcons = false; + system.defaults.WindowManager.HideDesktop = false; + system.defaults.WindowManager.StandardHideWidgets = true; + system.defaults.WindowManager.StageManagerHideWidgets = true; system.defaults.CustomUserPreferences = { "NSGlobalDomain" = { "TISRomanSwitchState" = 1; }; "com.apple.Safari" = {