diff options
| author | Mike Vink <59492084+ivi-vink@users.noreply.github.com> | 2025-01-16 22:22:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-16 22:22:34 +0100 |
| commit | 8e7bd91f353caacc0bc4105f573eb3e17f09e03a (patch) | |
| tree | c5059edcbebd9644290cad7c653c49a36d593021 /tests | |
| parent | 6bd39d420578aacf7c0bab7de3e7027b952115ae (diff) | |
| parent | bd921223ba7cdac346477d7ea5204d6f4736fcc6 (diff) | |
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/autossh.nix | 16 | ||||
| -rw-r--r-- | tests/environment-path.nix | 34 | ||||
| -rw-r--r-- | tests/fixtures/system-defaults-write/activate-user.txt | 250 | ||||
| -rw-r--r-- | tests/fonts.nix | 15 | ||||
| -rw-r--r-- | tests/networking-hostname.nix | 6 | ||||
| -rw-r--r-- | tests/networking-networkservices.nix | 10 | ||||
| -rw-r--r-- | tests/networking-wakeonlan.nix | 10 | ||||
| -rw-r--r-- | tests/power-restart.nix | 12 | ||||
| -rw-r--r-- | tests/power-sleep.nix | 16 | ||||
| -rw-r--r-- | tests/programs-ssh.nix | 8 | ||||
| -rw-r--r-- | tests/programs-zsh.nix | 4 | ||||
| -rw-r--r-- | tests/services-activate-system-changed-label-prefix.nix | 3 | ||||
| -rw-r--r-- | tests/services-activate-system.nix | 4 | ||||
| -rw-r--r-- | tests/services-aerospace.nix | 92 | ||||
| -rw-r--r-- | tests/services-buildkite-agent.nix | 4 | ||||
| -rw-r--r-- | tests/services-jankyborders.nix | 28 | ||||
| -rw-r--r-- | tests/services-lorri.nix | 25 | ||||
| -rw-r--r-- | tests/services-netdata.nix | 19 | ||||
| -rw-r--r-- | tests/services-nextdns.nix | 3 | ||||
| -rw-r--r-- | tests/services-nix-gc.nix | 4 | ||||
| -rw-r--r-- | tests/services-nix-optimise.nix | 4 | ||||
| -rw-r--r-- | tests/system-defaults-write.nix | 79 | ||||
| -rw-r--r-- | tests/system-keyboard-mapping.nix | 3 | ||||
| -rw-r--r-- | tests/users-groups.nix | 87 |
24 files changed, 631 insertions, 105 deletions
diff --git a/tests/autossh.nix b/tests/autossh.nix index d1aacd0..5279bf9 100644 --- a/tests/autossh.nix +++ b/tests/autossh.nix @@ -1,17 +1,19 @@ { config, pkgs, ... }: { - services.autossh.sessions = [ { - name = "foo"; - user = "jfelice"; - extraArguments = "-i /some/key -T -N bar.eraserhead.net"; - } ]; + services.autossh.sessions = [ + { + name = "foo"; + user = "jfelice"; + extraArguments = "-i /some/key -T -N bar.eraserhead.net"; + } + ]; test = '' plist=${config.out}/Library/LaunchDaemons/org.nixos.autossh-foo.plist test -f $plist - grep '<string>exec /nix/store/.*/bin/autossh ' $plist - grep '<string>exec.*-i /some/key ' $plist + grep '<string>/bin/wait4path /nix/store && exec /nix/store/.*/bin/autossh ' $plist + grep '<string>/bin/wait4path /nix/store && exec.*-i /some/key ' $plist tr -d '\n\t ' <$plist |grep '<key>KeepAlive</key><true */>' ''; } diff --git a/tests/environment-path.nix b/tests/environment-path.nix index 7d2f46d..0bb9a05 100644 --- a/tests/environment-path.nix +++ b/tests/environment-path.nix @@ -3,11 +3,37 @@ with lib; { + environment.systemPath = mkMerge [ + (mkBefore [ "beforePath" ]) + [ "myPath" ] + (mkAfter [ "afterPath" ]) + ]; + + environment.profiles = mkMerge [ + (mkBefore [ "beforeProfile" ]) + [ "myProfile" ] + (mkAfter [ "afterProfile" ]) + ]; + test = '' - echo checking /run/current-system/sw/bin in environment >&2 - grep 'export PATH=.*:/run/current-system/sw/bin' ${config.system.build.setEnvironment} + echo 'checking PATH' >&2 + env_path=$(bash -c 'source ${config.system.build.setEnvironment}; echo $PATH') - echo checking /bin and /sbin in environment >&2 - grep 'export PATH=.*:/usr/bin:/usr/sbin:/bin:/sbin' ${config.system.build.setEnvironment} + test "$env_path" = "${builtins.concatStringsSep ":" [ + "beforePath" + "myPath" + "beforeProfile/bin" + "/homeless-shelter/.nix-profile/bin" + "myProfile/bin" + "/run/current-system/sw/bin" + "/nix/var/nix/profiles/default/bin" + "afterProfile/bin" + "/usr/local/bin" + "/usr/bin" + "/usr/sbin" + "/bin" + "/sbin" + "afterPath" + ]}" ''; } diff --git a/tests/fixtures/system-defaults-write/activate-user.txt b/tests/fixtures/system-defaults-write/activate-user.txt index 1021ab3..3656a47 100644 --- a/tests/fixtures/system-defaults-write/activate-user.txt +++ b/tests/fixtures/system-defaults-write/activate-user.txt @@ -48,6 +48,11 @@ defaults write -g 'AppleShowScrollBars' $'<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <string>Always</string> </plist>' +defaults write -g 'AppleSpacesSwitchOnActivate' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' defaults write -g 'AppleWindowTabbingMode' $'<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> @@ -73,6 +78,11 @@ defaults write -g 'NSAutomaticDashSubstitutionEnabled' $'<?xml version="1.0" enc <plist version="1.0"> <false/> </plist>' +defaults write -g 'NSAutomaticInlinePredictionEnabled' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' defaults write -g 'NSAutomaticPeriodSubstitutionEnabled' $'<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> @@ -195,6 +205,11 @@ defaults write .GlobalPreferences 'com.apple.sound.beep.sound' $'<?xml version=" <string>/System/Library/Sounds/Funk.aiff</string> </plist>' +defaults write com.apple.menuextra.clock 'FlashDateSeparators' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' defaults write com.apple.menuextra.clock 'Show24Hour' $'<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> @@ -220,6 +235,11 @@ defaults write com.apple.dock 'autohide-delay' $'<?xml version="1.0" encoding="U <plist version="1.0"> <real>0.240000</real> </plist>' +defaults write com.apple.dock 'expose-group-apps' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' defaults write com.apple.dock 'orientation' $'<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> @@ -255,14 +275,162 @@ defaults write com.apple.dock 'persistent-apps' $'<?xml version="1.0" encoding=" </dict> </array> </plist>' +defaults write com.apple.dock 'persistent-others' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<array> + <dict> + <key>tile-data</key> + <dict> + <key>file-data</key> + <dict> + <key>_CFURLString</key> + <string>file://~/Documents</string> + <key>_CFURLStringType</key> + <integer>15</integer> + </dict> + </dict> + <key>tile-type</key> + <string>directory-tile</string> + </dict> + <dict> + <key>tile-data</key> + <dict> + <key>file-data</key> + <dict> + <key>_CFURLString</key> + <string>file://~/Downloads/file.txt</string> + <key>_CFURLStringType</key> + <integer>15</integer> + </dict> + </dict> + <key>tile-type</key> + <string>file-tile</string> + </dict> +</array> +</plist>' +defaults write com.apple.dock 'scroll-to-open' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'AppleShowAllExtensions' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder 'AppleShowAllFiles' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder 'CreateDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'FXDefaultSearchScope' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<string>SCcf</string> +</plist>' +defaults write com.apple.finder 'FXEnableExtensionChangeWarning' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'FXPreferredViewStyle' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<string>Flwv</string> +</plist>' +defaults write com.apple.finder 'FXRemoveOldTrashItems' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'NewWindowTarget' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<string>PfLo</string> +</plist>' +defaults write com.apple.finder 'NewWindowTargetPath' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<string>file:///Library/Apple</string> +</plist>' +defaults write com.apple.finder 'QuitMenuItem' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder 'ShowExternalHardDrivesOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'ShowHardDrivesOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'ShowMountedServersOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'ShowPathbar' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder 'ShowRemovableMediaOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.finder 'ShowStatusBar' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder '_FXShowPosixPathInTitle' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder '_FXSortFoldersFirst' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.finder '_FXSortFoldersFirstOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.HIToolbox 'AppleFnUsageType' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>2</integer> +</plist>' - +defaults write com.apple.screencapture 'include-date' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' defaults write com.apple.screencapture 'location' $'<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <string>/tmp</string> </plist>' +defaults write com.apple.screencapture 'target' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<string>file</string> +</plist>' defaults write com.apple.screensaver 'askForPassword' $'<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> @@ -336,3 +504,83 @@ defaults write com.apple.Safari 'com.apple.Safari.ContentPageGroupIdentifier.Web <plist version="1.0"> <true/> </plist>' +defaults write com.apple.WindowManager 'AppWindowGroupingBehavior' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.WindowManager 'AutoHide' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.WindowManager 'EnableStandardClickToShowDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.WindowManager 'EnableTiledWindowMargins' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.WindowManager 'GloballyEnabled' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.WindowManager 'HideDesktop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.WindowManager 'StageManagerHideWidgets' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write com.apple.WindowManager 'StandardHideDesktopIcons' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<false/> +</plist>' +defaults write com.apple.WindowManager 'StandardHideWidgets' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'AirDrop' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>18</integer> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'BatteryShowPercentage' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<true/> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'Bluetooth' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>18</integer> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'Display' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>24</integer> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'FocusModes' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>24</integer> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'NowPlaying' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>18</integer> +</plist>' +defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'Sound' $'<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<integer>24</integer> +</plist>' diff --git a/tests/fonts.nix b/tests/fonts.nix index acd1b13..d60979c 100644 --- a/tests/fonts.nix +++ b/tests/fonts.nix @@ -2,22 +2,19 @@ let font = pkgs.runCommand "font-0.0.0" {} '' - mkdir -p $out/share/fonts - touch $out/share/fonts/Font.ttf + mkdir -p $out + touch $out/Font.ttf ''; in { - fonts.fontDir.enable = true; - fonts.fonts = [ font ]; + fonts.packages = [ font ]; test = '' - echo "checking fonts in /Library/Fonts" >&2 - test -e ${config.out}/Library/Fonts/Font.ttf + echo "checking fonts in /Library/Fonts/Nix Fonts" >&2 + test -e "${config.out}/Library/Fonts/Nix Fonts"/*/Font.ttf echo "checking activation of fonts in /activate" >&2 - grep "fontrestore default -n 2>&1" ${config.out}/activate - grep 'ln -fn ".*" /Library/Fonts' ${config.out}/activate || grep 'rsync -az --inplace ".*" /Library/Fonts' ${config.out}/activate - grep 'rm "/Library/Fonts/.*"' ${config.out}/activate + grep '/Library/Fonts/Nix Fonts' ${config.out}/activate ''; } diff --git a/tests/networking-hostname.nix b/tests/networking-hostname.nix index 3793958..9e8c6fd 100644 --- a/tests/networking-hostname.nix +++ b/tests/networking-hostname.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ lib, config, pkgs, ... }: { networking.hostName = "EVE"; @@ -7,8 +7,8 @@ test = '' echo checking hostname in /activate >&2 grep "scutil --set ComputerName 'EVE’s MacBook Pro'" ${config.out}/activate - grep "scutil --set LocalHostName 'EVE'" ${config.out}/activate - grep "scutil --set HostName 'EVE'" ${config.out}/activate + grep "scutil --set LocalHostName ${lib.escapeShellArg "EVE"}" ${config.out}/activate + grep "scutil --set HostName ${lib.escapeShellArg "EVE"}" ${config.out}/activate echo checking defaults write in ${config.out}/activate-user >&2 ''; } diff --git a/tests/networking-networkservices.nix b/tests/networking-networkservices.nix index 4621317..a657342 100644 --- a/tests/networking-networkservices.nix +++ b/tests/networking-networkservices.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, lib, ... }: { networking.knownNetworkServices = [ "Wi-Fi" "Thunderbolt Ethernet" ]; @@ -6,10 +6,10 @@ test = '' echo checking dns settings in /activate >&2 - grep "networksetup -setdnsservers 'Wi-Fi' '8.8.8.8' '8.8.4.4'" ${config.out}/activate - grep "networksetup -setdnsservers 'Thunderbolt Ethernet' '8.8.8.8' '8.8.4.4'" ${config.out}/activate + grep "networksetup -setdnsservers ${lib.escapeShellArgs [ "Wi-Fi" "8.8.8.8" "8.8.4.4" ]}" ${config.out}/activate + grep "networksetup -setdnsservers ${lib.escapeShellArgs [ "Thunderbolt Ethernet" "8.8.8.8" "8.8.4.4" ]}" ${config.out}/activate echo checking empty searchdomain settings in /activate >&2 - grep "networksetup -setsearchdomains 'Wi-Fi' 'empty'" ${config.out}/activate - grep "networksetup -setsearchdomains 'Thunderbolt Ethernet' 'empty'" ${config.out}/activate + grep "networksetup -setsearchdomains ${lib.escapeShellArgs [ "Wi-Fi" "empty" ]}" ${config.out}/activate + grep "networksetup -setsearchdomains ${lib.escapeShellArgs [ "Thunderbolt Ethernet" "empty" ]}" ${config.out}/activate ''; } diff --git a/tests/networking-wakeonlan.nix b/tests/networking-wakeonlan.nix new file mode 100644 index 0000000..745c39c --- /dev/null +++ b/tests/networking-wakeonlan.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + networking.wakeOnLan.enable = true; + + test = '' + echo checking wake on network access settings in /activate >&2 + grep "systemsetup -setWakeOnNetworkAccess 'on'" ${config.out}/activate + ''; +} diff --git a/tests/power-restart.nix b/tests/power-restart.nix new file mode 100644 index 0000000..ade9851 --- /dev/null +++ b/tests/power-restart.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + power.restartAfterPowerFailure = true; + power.restartAfterFreeze = true; + + test = '' + echo checking restart power settings in /activate >&2 + grep "systemsetup -setRestartPowerFailure 'on'" ${config.out}/activate + grep "systemsetup -setRestartFreeze 'on'" ${config.out}/activate + ''; +} diff --git a/tests/power-sleep.nix b/tests/power-sleep.nix new file mode 100644 index 0000000..5d779a6 --- /dev/null +++ b/tests/power-sleep.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + power.sleep.computer = "never"; + power.sleep.display = 15; + power.sleep.harddisk = 5; + power.sleep.allowSleepByPowerButton = false; + + test = '' + echo checking power sleep settings in /activate >&2 + grep "systemsetup -setComputerSleep 'never'" ${config.out}/activate + grep "systemsetup -setDisplaySleep '15'" ${config.out}/activate + grep "systemsetup -setHardDiskSleep '5'" ${config.out}/activate + grep "systemsetup -setAllowPowerButtonToSleepComputer 'off'" ${config.out}/activate + ''; +} diff --git a/tests/programs-ssh.nix b/tests/programs-ssh.nix index ad4f7ab..427f71b 100644 --- a/tests/programs-ssh.nix +++ b/tests/programs-ssh.nix @@ -12,9 +12,9 @@ echo >&2 "checking for github.com in /etc/ssh/ssh_known_hosts" grep 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' ${config.out}/etc/ssh/ssh_known_hosts - echo >&2 "checking for authorized keys for foo in /etc/ssh/authorized_keys.d/foo" - grep 'ssh-ed25519 AAAA...' ${config.out}/etc/ssh/authorized_keys.d/foo - echo >&2 "checking for authorized keys' path in /etc/ssh/sshd_config.d/101-authorized-keys.conf" - grep 'AuthorizedKeysFile %h/.ssh/authorized_keys /etc/ssh/authorized_keys.d/%u' ${config.out}/etc/ssh/sshd_config.d/101-authorized-keys.conf + echo >&2 "checking for authorized keys for foo in /etc/ssh/nix_authorized_keys.d/foo" + grep 'ssh-ed25519 AAAA...' ${config.out}/etc/ssh/nix_authorized_keys.d/foo + echo >&2 "checking for authorized keys command in /etc/ssh/sshd_config.d/101-authorized-keys.conf" + grep 'AuthorizedKeysCommand /bin/cat /etc/ssh/nix_authorized_keys.d/%u' ${config.out}/etc/ssh/sshd_config.d/101-authorized-keys.conf ''; } diff --git a/tests/programs-zsh.nix b/tests/programs-zsh.nix index dd5f6e9..18680a5 100644 --- a/tests/programs-zsh.nix +++ b/tests/programs-zsh.nix @@ -22,8 +22,6 @@ echo >&2 "checking setEnvironment in /etc/zshenv" fgrep '. ${config.system.build.setEnvironment}' ${config.out}/etc/zshenv - echo >&2 "checking nix-shell return /etc/zshenv" - grep 'if test -n "$IN_NIX_SHELL"; then return; fi' ${config.out}/etc/zshenv echo >&2 "checking zshenv.d in /etc/zshenv" grep 'source /etc/zshenv.d/\*.conf' ${config.out}/etc/zshenv @@ -36,7 +34,7 @@ echo >&2 "checking compinit in /etc/zshrc" grep 'autoload -U compinit && compinit' ${config.out}/etc/zshrc echo >&2 "checking bashcompinit in /etc/zshrc" - grep -vq 'bashcompinit' ${config.out}/etc/zshrc + (! grep 'bashcompinit' ${config.out}/etc/zshrc) echo >&2 "checking zprofile.d in /etc/zprofile" grep 'source /etc/zprofile.d/\*.conf' ${config.out}/etc/zprofile diff --git a/tests/services-activate-system-changed-label-prefix.nix b/tests/services-activate-system-changed-label-prefix.nix index 5ac9969..2c2f603 100644 --- a/tests/services-activate-system-changed-label-prefix.nix +++ b/tests/services-activate-system-changed-label-prefix.nix @@ -1,7 +1,6 @@ { config, pkgs, ... }: { - services.activate-system.enable = true; launchd.labelPrefix = "org.nix-darwin"; test = '' @@ -9,7 +8,7 @@ grep "org.nix-darwin.activate-system" ${config.out}/Library/LaunchDaemons/org.nix-darwin.activate-system.plist echo checking activation of /run/current-system >&2 - script=$(cat ${config.out}/Library/LaunchDaemons/org.nix-darwin.activate-system.plist | awk -F'[< ]' '$3 ~ "^/nix/store/.*" {print $3}') + script=$(cat ${config.out}/Library/LaunchDaemons/org.nix-darwin.activate-system.plist | awk -F'[< ]' '$6 ~ "^/nix/store/.*" {print $6}') grep "ln -sfn .* /run/current-system" "$script" ''; } diff --git a/tests/services-activate-system.nix b/tests/services-activate-system.nix index 02eaf3c..702bb26 100644 --- a/tests/services-activate-system.nix +++ b/tests/services-activate-system.nix @@ -1,14 +1,12 @@ { config, pkgs, ... }: { - services.activate-system.enable = true; - test = '' echo checking activation service in /Library/LaunchDaemons >&2 grep "org.nixos.activate-system" ${config.out}/Library/LaunchDaemons/org.nixos.activate-system.plist echo checking activation of /run/current-system >&2 - script=$(cat ${config.out}/Library/LaunchDaemons/org.nixos.activate-system.plist | awk -F'[< ]' '$3 ~ "^/nix/store/.*" {print $3}') + script=$(cat ${config.out}/Library/LaunchDaemons/org.nixos.activate-system.plist | awk -F'[< ]' '$6 ~ "^/nix/store/.*" {print $6}') grep "ln -sfn .* /run/current-system" "$script" ''; } diff --git a/tests/services-aerospace.nix b/tests/services-aerospace.nix new file mode 100644 index 0000000..088c92d --- /dev/null +++ b/tests/services-aerospace.nix @@ -0,0 +1,92 @@ +{ config, pkgs, ... }: + +let + aerospace = pkgs.runCommand "aerospace-0.0.0" { } "mkdir $out"; +in + +{ + services.aerospace.enable = true; + services.aerospace.package = aerospace; + services.aerospace.settings = { + after-startup-command = [ "layout tiles" ]; + gaps = { + outer.left = 8; + outer.bottom = 8; + outer.top = 8; + outer.right = 8; + }; + mode.main.binding = { + alt-h = "focus left"; + alt-j = "focus down"; + alt-k = "focus up"; + alt-l = "focus right"; + }; + on-window-detected = [ + { + "if" = { + app-id = "Another.Cool.App"; + during-aerospace-startup = false; + }; + check-further-callbacks = false; + run = "move-node-to-workspace m"; + } + { + "if".app-name-regex-substring = "finder|calendar"; + run = "layout floating"; + } + { + "if".workspace = "1"; + run = "layout h_accordion"; + } + ]; + workspace-to-monitor-force-assignment = { + "1" = 1; + "2" = "main"; + "3" = "secondary"; + "4" = "built-in"; + "5" = "^built-in retina display$"; + "6" = [ "secondary" "dell" ]; + }; + }; + + test = '' + echo >&2 "checking aerospace service in ~/Library/LaunchAgents" + grep "org.nixos.aerospace" ${config.out}/user/Library/LaunchAgents/org.nixos.aerospace.plist + grep "${aerospace}/Applications/AeroSpace.app/Contents/MacOS/AeroSpace" ${config.out}/user/Library/LaunchAgents/org.nixos.aerospace.plist + + conf=`sed -En 's/^[[:space:]]*<string>.*--config-path (.*)<\/string>$/\1/p' \ + ${config.out}/user/Library/LaunchAgents/org.nixos.aerospace.plist` + + echo >&2 "checking config in $conf" + grep 'after-startup-command = \["layout tiles"\]' $conf + + grep 'bottom = 8' $conf + grep 'left = 8' $conf + grep 'right = 8' $conf + grep 'top = 8' $conf + + grep 'alt-h = "focus left"' $conf + grep 'alt-j = "focus down"' $conf + grep 'alt-k = "focus up"' $conf + grep 'alt-l = "focus right"' $conf + + grep 'check-further-callbacks = false' $conf + grep 'run = "move-node-to-workspace m"' $conf + grep 'app-id = "Another.Cool.App"' $conf + grep 'during-aerospace-startup = false' $conf + + grep 'run = "layout floating"' $conf + grep 'app-name-regex-substring = "finder|calendar"' $conf + (! grep 'window-title-regex-substring' $conf) + + grep 'workspace = "1"' $conf + grep 'run = "layout h_accordion"' $conf + + grep '1 = 1' $conf + grep '2 = "main"' $conf + grep '3 = "secondary"' $conf + grep '4 = "built-in"' $conf + grep '5 = "^built-in retina display$"' $conf + grep '6 = \["secondary", "dell"\]' $conf + ''; +} diff --git a/tests/services-buildkite-agent.nix b/tests/services-buildkite-agent.nix index 557aad2..1d8d824 100644 --- a/tests/services-buildkite-agent.nix +++ b/tests/services-buildkite-agent.nix @@ -1,7 +1,7 @@ { config, pkgs, ... }: let - buildkite-agent = pkgs.runCommand "buildkite-agent-0.0.0" {} "mkdir $out"; + buildkite-agent = pkgs.runCommand "buildkite-agent-0.0.0" { } "mkdir $out"; tokenPath = pkgs.writeText "buildkite_token" "TEST_TOKEN"; in @@ -20,7 +20,7 @@ in grep "org.nixos.buildkite-agent-test" ${config.out}/Library/LaunchDaemons/org.nixos.buildkite-agent-test.plist echo "checking creation of buildkite-agent service config" >&2 - script=$(cat ${config.out}/Library/LaunchDaemons/org.nixos.buildkite-agent-test.plist | awk -F'[< ]' '$3 ~ "^/nix/store/.*" {print $3}') + script=$(cat ${config.out}/Library/LaunchDaemons/org.nixos.buildkite-agent-test.plist | awk -F'[< ]' '$6 ~ "^/nix/store/.*" {print $6}') grep "yolo=1" "$script" grep "${tokenPath}" "$script" diff --git a/tests/services-jankyborders.nix b/tests/services-jankyborders.nix new file mode 100644 index 0000000..5bde078 --- /dev/null +++ b/tests/services-jankyborders.nix @@ -0,0 +1,28 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + jankyborders = pkgs.runCommand "borders-0.0.0" {} "mkdir $out"; +in + +{ + services.jankyborders.enable = true; + services.jankyborders.package = jankyborders; + services.jankyborders.width = 5.0; + services.jankyborders.hidpi = true; + services.jankyborders.active_color = "0xFFFFFFFF"; + services.jankyborders.order = "below"; + + test = '' + echo >&2 "checking jankyborders service in ~/Library/LaunchAgents" + grep "org.nixos.jankyborders" ${config.out}/user/Library/LaunchAgents/org.nixos.jankyborders.plist + grep "${jankyborders}/bin/borders" ${config.out}/user/Library/LaunchAgents/org.nixos.jankyborders.plist + + echo >&2 "checking jankyborders config arguments" + grep "width=5.000000" ${config.out}/user/Library/LaunchAgents/org.nixos.jankyborders.plist + grep "hidpi=on" ${config.out}/user/Library/LaunchAgents/org.nixos.jankyborders.plist + grep "active_color=0xFFFFFFFF" ${config.out}/user/Library/LaunchAgents/org.nixos.jankyborders.plist + grep "order=below" ${config.out}/user/Library/LaunchAgents/org.nixos.jankyborders.plist + ''; +} diff --git a/tests/services-lorri.nix b/tests/services-lorri.nix index 52dcc91..7d30152 100644 --- a/tests/services-lorri.nix +++ b/tests/services-lorri.nix @@ -1,14 +1,29 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: let plistPath = "${config.out}/user/Library/LaunchAgents/org.nixos.lorri.plist"; - expectedPath = "${lib.makeBinPath [config.nix.package pkgs.git pkgs.gnutar pkgs.gzip]}"; - expectedNixPath = "${"nixpkgs="+ toString pkgs.path}"; + expectedPath = "${lib.makeBinPath [ + config.nix.package + pkgs.git + pkgs.gnutar + pkgs.gzip + ]}"; + expectedNixPath = "${"nixpkgs=" + toString pkgs.path}"; in { services.lorri.enable = true; test = '' - PATH=${lib.makeBinPath [ pkgs.xcbuild pkgs.jq ]}:$PATH + PATH=${ + lib.makeBinPath [ + pkgs.xcbuild + pkgs.jq + ] + }:$PATH plutil -lint ${plistPath} plutil -convert json -o service.json ${plistPath} @@ -21,7 +36,7 @@ in <service.json jq -e ".ProgramArguments|length == 3" <service.json jq -e ".ProgramArguments[0] == \"/bin/sh\"" <service.json jq -e ".ProgramArguments[1] == \"-c\"" - <service.json jq -e ".ProgramArguments[2] == \"exec ${pkgs.lorri}/bin/lorri daemon\"" + <service.json jq -e ".ProgramArguments[2] == \"/bin/wait4path /nix/store && exec ${pkgs.lorri}/bin/lorri daemon\"" <service.json jq -e ".RunAtLoad == true" ''; } diff --git a/tests/services-netdata.nix b/tests/services-netdata.nix new file mode 100644 index 0000000..6759677 --- /dev/null +++ b/tests/services-netdata.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + netdata = pkgs.runCommand "netdata-0.0.0" {} "mkdir $out"; +in +{ + services.netdata = { + enable = true; + package = netdata; + }; + + test = '' + echo >&2 "checking netdata service in launchd daemons" + grep "netdata" ${config.out}/Library/LaunchDaemons/netdata.plist + grep "${netdata}/bin/netdata" ${config.out}/Library/LaunchDaemons/netdata.plist + ''; +} diff --git a/tests/services-nextdns.nix b/tests/services-nextdns.nix index 4d6224f..02ce1a5 100644 --- a/tests/services-nextdns.nix +++ b/tests/services-nextdns.nix @@ -12,6 +12,7 @@ in { echo >&2 "checking nextdns service in ~/Library/LaunchDaemons" grep "org.nixos.nextdns" ${config.out}/Library/LaunchDaemons/org.nixos.nextdns.plist grep "/bin/nextdns" ${config.out}/Library/LaunchDaemons/org.nixos.nextdns.plist - grep "'-config' '10.0.3.0/24=abcdef'" ${config.out}/Library/LaunchDaemons/org.nixos.nextdns.plist + grep -- "-config" ${config.out}/Library/LaunchDaemons/org.nixos.nextdns.plist + grep "10.0.3.0/24=abcdef" ${config.out}/Library/LaunchDaemons/org.nixos.nextdns.plist ''; } diff --git a/tests/services-nix-gc.nix b/tests/services-nix-gc.nix index 4ef26b5..6d7cdef 100644 --- a/tests/services-nix-gc.nix +++ b/tests/services-nix-gc.nix @@ -1,7 +1,7 @@ { config, pkgs, ... }: let - nix = pkgs.runCommand "nix-2.2" {} "mkdir -p $out"; + nix = pkgs.runCommand "nix-2.2" { } "mkdir -p $out"; in { @@ -13,7 +13,7 @@ in test = '' echo checking nix-gc service in /Library/LaunchDaemons >&2 grep "<string>org.nixos.nix-gc</string>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-gc.plist - grep "<string>exec ${nix}/bin/nix-collect-garbage --delete-older-than 30d</string>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-gc.plist + grep "<string>/bin/wait4path /nix/store && exec ${nix}/bin/nix-collect-garbage --delete-older-than 30d</string>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-gc.plist grep "<key>UserName</key>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-gc.plist grep "<string>nixuser</string>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-gc.plist diff --git a/tests/services-nix-optimise.nix b/tests/services-nix-optimise.nix index b0ecf18..4108eb0 100644 --- a/tests/services-nix-optimise.nix +++ b/tests/services-nix-optimise.nix @@ -1,7 +1,7 @@ { config, pkgs, ... }: let - nix = pkgs.runCommand "nix-2.2" {} "mkdir -p $out"; + nix = pkgs.runCommand "nix-2.2" { } "mkdir -p $out"; in { @@ -13,7 +13,7 @@ in echo checking nix-optimise service in /Library/LaunchDaemons >&2 grep "<string>org.nixos.nix-optimise</string>" \ ${config.out}/Library/LaunchDaemons/org.nixos.nix-optimise.plist - grep "<string>/bin/wait4path ${nix} && exec ${nix}/bin/nix-store --optimise</string>" \ + grep "<string>/bin/wait4path /nix/store && exec ${nix}/bin/nix-store --optimise</string>" \ ${config.out}/Library/LaunchDaemons/org.nixos.nix-optimise.plist grep "<key>UserName</key>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-optimise.plist grep "<string>nixuser</string>" ${config.out}/Library/LaunchDaemons/org.nixos.nix-optimise.plist diff --git a/tests/system-defaults-write.nix b/tests/system-defaults-write.nix index 9840298..1a29aa2 100644 --- a/tests/system-defaults-write.nix +++ b/tests/system-defaults-write.nix @@ -11,7 +11,9 @@ system.defaults.NSGlobalDomain.AppleShowAllExtensions = true; system.defaults.NSGlobalDomain.AppleShowScrollBars = "Always"; system.defaults.NSGlobalDomain.AppleScrollerPagingBehavior = true; + system.defaults.NSGlobalDomain.AppleSpacesSwitchOnActivate = false; system.defaults.NSGlobalDomain.NSAutomaticCapitalizationEnabled = false; + system.defaults.NSGlobalDomain.NSAutomaticInlinePredictionEnabled = false; system.defaults.NSGlobalDomain.NSAutomaticDashSubstitutionEnabled = false; system.defaults.NSGlobalDomain.NSAutomaticPeriodSubstitutionEnabled = false; system.defaults.NSGlobalDomain.NSAutomaticQuoteSubstitutionEnabled = false; @@ -40,14 +42,40 @@ system.defaults.NSGlobalDomain."com.apple.springing.delay" = 0.0; system.defaults.NSGlobalDomain."com.apple.swipescrolldirection" = true; system.defaults.".GlobalPreferences"."com.apple.sound.beep.sound" = "/System/Library/Sounds/Funk.aiff"; + system.defaults.menuExtraClock.FlashDateSeparators = false; system.defaults.menuExtraClock.Show24Hour = false; system.defaults.menuExtraClock.ShowDayOfWeek = true; system.defaults.menuExtraClock.ShowDate = 2; + system.defaults.dock.expose-group-apps = true; system.defaults.dock.appswitcher-all-displays = false; system.defaults.dock.autohide-delay = 0.24; system.defaults.dock.orientation = "left"; system.defaults.dock.persistent-apps = ["MyApp.app" "Cool.app"]; + system.defaults.dock.persistent-others = ["~/Documents" "~/Downloads/file.txt"]; + system.defaults.dock.scroll-to-open = false; + system.defaults.finder.AppleShowAllFiles = true; + system.defaults.finder.ShowStatusBar = true; + system.defaults.finder.ShowPathbar = true; + system.defaults.finder.FXDefaultSearchScope = "SCcf"; + system.defaults.finder.FXPreferredViewStyle = "Flwv"; + system.defaults.finder.FXRemoveOldTrashItems = false; + 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; + system.defaults.finder._FXSortFoldersFirstOnDesktop = false; + system.defaults.finder.FXEnableExtensionChangeWarning = false; + system.defaults.finder.ShowExternalHardDrivesOnDesktop = false; + system.defaults.finder.ShowHardDrivesOnDesktop = false; + system.defaults.finder.ShowMountedServersOnDesktop = false; + system.defaults.finder.ShowRemovableMediaOnDesktop = false; + system.defaults.hitoolbox.AppleFnUsageType = "Show Emoji & Symbols"; system.defaults.screencapture.location = "/tmp"; + system.defaults.screencapture.target = "file"; + system.defaults.screencapture.include-date = true; system.defaults.screensaver.askForPassword = true; system.defaults.screensaver.askForPasswordDelay = 5; system.defaults.smb.NetBIOSName = "IMAC-000000"; @@ -62,25 +90,42 @@ 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.EnableTiledWindowMargins = true; + system.defaults.WindowManager.StandardHideWidgets = true; + system.defaults.WindowManager.StageManagerHideWidgets = true; system.defaults.CustomUserPreferences = { - "NSGlobalDomain" = { "TISRomanSwitchState" = 1; }; - "com.apple.Safari" = { - "com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled" = - true; - }; + "NSGlobalDomain" = { "TISRomanSwitchState" = 1; }; + "com.apple.Safari" = { + "com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled" = + true; }; - test = lib.strings.concatMapStringsSep "\n" (x: '' - echo >&2 "checking defaults write in /${x}" - ${pkgs.python3}/bin/python3 <<EOL -import sys -from pathlib import Path -fixture = '${./fixtures/system-defaults-write}/${x}.txt' -out = '${config.out}/${x}' -if Path(fixture).read_text() not in Path(out).read_text(): - print("Did not find content from %s in %s" % (fixture, out), file=sys.stderr) - sys.exit(1) -EOL - '') [ + }; + system.defaults.controlcenter.BatteryShowPercentage = true; + system.defaults.controlcenter.Sound = false; + system.defaults.controlcenter.Bluetooth = true; + system.defaults.controlcenter.AirDrop = true; + system.defaults.controlcenter.Display = false; + system.defaults.controlcenter.FocusModes = false; + system.defaults.controlcenter.NowPlaying = true; + test = lib.strings.concatMapStringsSep "\n" + (x: '' + echo >&2 "checking defaults write in /${x}" + ${pkgs.python3}/bin/python3 <<EOL + import sys + from pathlib import Path + fixture = '${./fixtures/system-defaults-write}/${x}.txt' + out = '${config.out}/${x}' + if Path(fixture).read_text() not in Path(out).read_text(): + print("Did not find content from %s in %s" % (fixture, out), file=sys.stderr) + sys.exit(1) + EOL + '') [ "activate" "activate-user" ]; diff --git a/tests/system-keyboard-mapping.nix b/tests/system-keyboard-mapping.nix index b75efbd..654ca0c 100644 --- a/tests/system-keyboard-mapping.nix +++ b/tests/system-keyboard-mapping.nix @@ -6,6 +6,7 @@ system.keyboard.remapCapsLockToEscape = true; system.keyboard.nonUS.remapTilde = true; system.keyboard.swapLeftCommandAndLeftAlt = true; + system.keyboard.swapLeftCtrlAndFn = true; test = '' echo checking keyboard mappings in /activate >&2 @@ -17,5 +18,7 @@ grep "\"HIDKeyboardModifierMappingDst\":30064771296" ${config.out}/activate grep "\"HIDKeyboardModifierMappingDst\":30064771298" ${config.out}/activate grep "\"HIDKeyboardModifierMappingDst\":30064771299" ${config.out}/activate + grep "\"HIDKeyboardModifierMappingDst\":30064771296" ${config.out}/activate + grep "\"HIDKeyboardModifierMappingDst\":1095216660483" ${config.out}/activate ''; } diff --git a/tests/users-groups.nix b/tests/users-groups.nix index cefb1ad..8126105 100644 --- a/tests/users-groups.nix +++ b/tests/users-groups.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ lib, config, pkgs, ... }: { users.knownGroups = [ "foo" "created.group" "deleted.group" ]; @@ -19,45 +19,62 @@ users.users.foo.shell = pkgs.bashInteractive; users.users."created.user".uid = 42001; + users.users."created.user".description = null; + users.users."created.user".home = null; + users.users."created.user".shell = null; + users.users."unknown.user".uid = 42002; test = '' - echo "checking group creation in /activate" >&2 - grep "dscl . -create '/Groups/foo' PrimaryGroupID 42000" ${config.out}/activate - grep "dscl . -create '/Groups/foo' RealName 'Foo group'" ${config.out}/activate - grep "dscl . -create '/Groups/created.group' PrimaryGroupID 42001" ${config.out}/activate - grep -qv "dscl . -delete '/Groups/created.group'" ${config.out}/activate + set -v + + # checking group creation in /activate + grep "dscl . -create ${lib.escapeShellArg "/Groups/foo"} PrimaryGroupID 42000" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Groups/foo"} RealName ${lib.escapeShellArg "Foo group"}" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Groups/created.group"} PrimaryGroupID 42001" ${config.out}/activate + (! grep "dscl . -delete ${lib.escapeShellArg "/Groups/created.group"}" ${config.out}/activate) - echo "checking group deletion in /activate" >&2 - grep "dscl . -delete '/Groups/deleted.group'" ${config.out}/activate - grep -qv "dscl . -create '/Groups/deleted.group'" ${config.out}/activate + # checking group deletion in /activate + grep "dscl . -delete ${lib.escapeShellArg "/Groups/deleted.group"}" ${config.out}/activate + (! grep "dscl . -create ${lib.escapeShellArg "/Groups/deleted.group"}" ${config.out}/activate) echo "checking group membership in /activate" >&2 - grep "dscl . -create '/Groups/foo' GroupMembership 'admin' 'foo'" ${config.out}/activate - grep "dscl . -create '/Groups/created.group' GroupMembership" ${config.out}/activate - - echo "checking unknown group in /activate" >&2 - grep -qv "dscl . -create '/Groups/unknown.group'" ${config.out}/activate - grep -qv "dscl . -delete '/Groups/unknown.group'" ${config.out}/activate - - echo "checking user creation in /activate" >&2 - grep "dscl . -create '/Users/foo' UniqueID 42000" ${config.out}/activate - grep "dscl . -create '/Users/foo' PrimaryGroupID 42000" ${config.out}/activate - grep "dscl . -create '/Users/foo' IsHidden 0" ${config.out}/activate - grep "dscl . -create '/Users/foo' RealName 'Foo user'" ${config.out}/activate - grep "dscl . -create '/Users/foo' NFSHomeDirectory '/Users/foo'" ${config.out}/activate - grep "dscl . -create '/Users/foo' UserShell '/run/current-system/sw/bin/bash'" ${config.out}/activate - grep "dscl . -create '/Users/created.user' UniqueID 42001" ${config.out}/activate - grep "dscl . -create '/Users/created.user' UserShell '/sbin/nologin'" ${config.out}/activate - grep "createhomedir -cu 'foo'" ${config.out}/activate - grep -qv "dscl . -delete '/Groups/created.user'" ${config.out}/activate - - echo "checking user deletion in /activate" >&2 - grep "dscl . -delete '/Users/deleted.user'" ${config.out}/activate - grep -qv "dscl . -create '/Users/deleted.user'" ${config.out}/activate - - echo "checking unknown user in /activate" >&2 - grep -qv "dscl . -create '/Users/unknown.user'" ${config.out}/activate - grep -qv "dscl . -delete '/Users/unknown.user'" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Groups/foo"} GroupMembership ${lib.escapeShellArgs [ "admin" "foo" ]}" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Groups/created.group"} GroupMembership" ${config.out}/activate + + # checking unknown group in /activate + # checking groups not in knownGroups don't appear in /activate + (! grep "dscl . -create ${lib.escapeShellArg "/Groups/unknown.group"}" ${config.out}/activate) + (! grep "dscl . -delete ${lib.escapeShellArg "/Groups/unknown.group"}" ${config.out}/activate) + + # checking user creation in /activate + grep "sysadminctl -addUser ${lib.escapeShellArgs [ "foo" "-UID" 42000 "-GID" 42000 "-fullName" "Foo user" "-home" "/Users/foo" "-shell" "/run/current-system/sw/bin/bash" ]}" ${config.out}/activate + grep "createhomedir -cu ${lib.escapeShellArg "foo"}" ${config.out}/activate + grep "sysadminctl -addUser ${lib.escapeShellArgs [ "created.user" "-UID" 42001 ]} .* ${lib.escapeShellArgs [ "-shell" "/usr/bin/false" ] }" ${config.out}/activate + grep "sysadminctl -addUser ${lib.escapeShellArg "created.user"} .* ${lib.escapeShellArgs [ "-home" "/var/empty" ]}" ${config.out}/activate + (! grep "dscl . -delete ${lib.escapeShellArg "/Users/created.user"}" ${config.out}/activate) + (! grep "dscl . -delete ${lib.escapeShellArg "/Groups/created.user"}" ${config.out}/activate) + + # checking user properties always get updated in /activate + grep "dscl . -create ${lib.escapeShellArg "/Users/foo"} PrimaryGroupID 42000" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Users/foo"} RealName ${lib.escapeShellArg "Foo user"}" ${config.out}/activate + grep "createhomedir -cu ${lib.escapeShellArg "foo"}" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Users/foo"} UserShell ${lib.escapeShellArg "/run/current-system/sw/bin/bash"}" ${config.out}/activate + grep "dscl . -create ${lib.escapeShellArg "/Users/foo"} IsHidden 0" ${config.out}/activate + + # checking user properties that are null don't get updated in /activate + (! grep "dscl . -create ${lib.escapeShellArg "/Users/created.user"} RealName" ${config.out}/activate) + (! grep "dscl . -create ${lib.escapeShellArg "/Users/created.user"} UserShell" ${config.out}/activate) + + # checking user deletion in /activate + grep "dscl . -delete ${lib.escapeShellArg "/Users/deleted.user"}" ${config.out}/activate + (! grep "sysadminctl -addUser ${lib.escapeShellArg "deleted.user"}" ${config.out}/activate) + + # checking that users not specified in knownUsers doesn't get changed in /activate + (! grep "sysadminctl -addUser ${lib.escapeShellArg "unknown.user"}" ${config.out}/activate) + (! grep "dscl . -delete ${lib.escapeShellArg "/Users/unknown.user"}" ${config.out}/activate) + (! grep "dscl . -create ${lib.escapeShellArg "/Users/unknown.user"}" ${config.out}/activate) + + set +v ''; } |
