diff --git a/modules/system/defaults/finder.nix b/modules/system/defaults/finder.nix index 1da93c043..51fff74f6 100644 --- a/modules/system/defaults/finder.nix +++ b/modules/system/defaults/finder.nix @@ -1,7 +1,10 @@ { config, lib, ... }: -with lib; +let + inherit (lib) mkOption types; + cfg = config.system.defaults.finder; +in { options = { @@ -96,5 +99,54 @@ with lib; ''; }; + system.defaults.finder.NewWindowTarget = mkOption { + type = types.nullOr (types.enum [ + "Computer" + "OS volume" + "Home" + "Desktop" + "Documents" + "Recents" + "iCloud Drive" + "Other" + ]); + apply = key: if key == null then null else { + "Computer" = "PfCm"; + "OS volume" = "PfVo"; + "Home" = "PfHm"; + "Desktop" = "PfDe"; + "Documents" = "PfDo"; + "Recents" = "PfAF"; + "iCloud Drive" = "PfID"; + "Other" = "PfLo"; + }.${key}; + default = null; + description = '' + Change the default folder shown in Finder windows. "Other" corresponds to the value of + NewWindowTargetPath. The default is unset ("Recents"). + ''; + }; + + system.defaults.finder.NewWindowTargetPath = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + Sets the URI to open when NewWindowTarget is "Other". Spaces and similar characters must be + escaped. If the value is invalid, Finder will open your home directory. + Example: "file:///Users/foo/long%20cat%20pics". + The default is unset. + ''; + }; + }; + + config = { + assertions = [{ + assertion = cfg.NewWindowTargetPath != null -> cfg.NewWindowTarget == "PfLo"; + message = "`system.defaults.finder.NewWindowTarget` should be set to `Other` when `NewWindowTargetPath` is non-null."; + } + { + assertion = cfg.NewWindowTarget == "PfLo" -> cfg.NewWindowTargetPath != null; + message = "`system.defaults.finder.NewWindowTargetPath` should be non-null when `NewWindowTarget` is set to `Other`."; + }]; }; } diff --git a/tests/fixtures/system-defaults-write/activate-user.txt b/tests/fixtures/system-defaults-write/activate-user.txt index 34ff7283f..51b7574af 100644 --- a/tests/fixtures/system-defaults-write/activate-user.txt +++ b/tests/fixtures/system-defaults-write/activate-user.txt @@ -329,6 +329,16 @@ defaults write com.apple.finder 'FXPreferredViewStyle' $' Flwv ' +defaults write com.apple.finder 'NewWindowTarget' $' + + +PfLo +' +defaults write com.apple.finder 'NewWindowTargetPath' $' + + +file:///Library/Apple +' defaults write com.apple.finder 'QuitMenuItem' $' diff --git a/tests/system-defaults-write.nix b/tests/system-defaults-write.nix index d5e0d08be..ab26ef11b 100644 --- a/tests/system-defaults-write.nix +++ b/tests/system-defaults-write.nix @@ -57,6 +57,8 @@ system.defaults.finder.FXPreferredViewStyle = "Flwv"; system.defaults.finder.AppleShowAllExtensions = true; system.defaults.finder.CreateDesktop = false; + system.defaults.finder.NewWindowTarget = "Other"; + system.defaults.finder.NewWindowTargetPath = "file:///Library/Apple"; system.defaults.finder.QuitMenuItem = true; system.defaults.finder._FXShowPosixPathInTitle = true; system.defaults.finder._FXSortFoldersFirst = true;