1
0
Fork 0
mirror of https://github.com/LnL7/nix-darwin.git synced 2024-12-14 11:57:34 +00:00
nix-darwin/modules/system/defaults-write.nix

131 lines
5 KiB
Nix
Raw Normal View History

2016-12-14 12:05:23 +00:00
{ config, lib, ... }:
with lib;
let
cfg = config.system.defaults;
writeDefault = domain: key: value:
"defaults write ${domain} '${key}' $'${strings.escape [ "'" ] (generators.toPlist { } value)}'";
2016-12-14 12:05:23 +00:00
defaultsToList = domain: attrs: mapAttrsToList (writeDefault domain) (filterAttrs (n: v: v != null) attrs);
# defaults
2019-11-04 03:56:21 +00:00
alf = defaultsToList "/Library/Preferences/com.apple.alf" cfg.alf;
2019-11-04 04:35:56 +00:00
loginwindow = defaultsToList "/Library/Preferences/com.apple.loginwindow" cfg.loginwindow;
2018-01-04 23:15:11 +00:00
smb = defaultsToList "/Library/Preferences/SystemConfiguration/com.apple.smb.server" cfg.smb;
SoftwareUpdate = defaultsToList "/Library/Preferences/com.apple.SoftwareUpdate" cfg.SoftwareUpdate;
# userDefaults
controlcenter = defaultsToList "~/Library/Preferences/ByHost/com.apple.controlcenter" cfg.controlcenter;
GlobalPreferences = defaultsToList ".GlobalPreferences" cfg.".GlobalPreferences";
LaunchServices = defaultsToList "com.apple.LaunchServices" cfg.LaunchServices;
NSGlobalDomain = defaultsToList "-g" cfg.NSGlobalDomain;
menuExtraClock = defaultsToList "com.apple.menuextra.clock" cfg.menuExtraClock;
dock = defaultsToList "com.apple.dock" cfg.dock;
finder = defaultsToList "com.apple.finder" cfg.finder;
2024-10-28 06:37:08 +00:00
hitoolbox = defaultsToList "com.apple.HIToolbox" cfg.hitoolbox;
magicmouse = defaultsToList "com.apple.AppleMultitouchMouse" cfg.magicmouse;
magicmouseBluetooth = defaultsToList "com.apple.driver.AppleMultitouchMouse.mouse" cfg.magicmouse;
2018-02-27 17:24:45 +00:00
screencapture = defaultsToList "com.apple.screencapture" cfg.screencapture;
screensaver = defaultsToList "com.apple.screensaver" cfg.screensaver;
2019-11-04 04:06:54 +00:00
spaces = defaultsToList "com.apple.spaces" cfg.spaces;
trackpad = defaultsToList "com.apple.AppleMultitouchTrackpad" cfg.trackpad;
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);
2016-12-14 12:05:23 +00:00
2021-12-24 22:20:15 +00:00
mkIfAttrs = list: mkIf (any (attrs: attrs != { }) list);
2016-12-14 12:05:23 +00:00
in
{
config = {
2022-08-29 22:39:16 +00:00
# Type used for `system.defaults.<domain>.*` options that previously accepted float values as a
# string.
lib.defaults.types.floatWithDeprecationError = types.float // {
check = x:
if isString x && builtins.match "^[+-]?([0-9]*[.])?[0-9]+$" x != null
then throw "Using strings for `system.defaults.<domain>.*' options of type float is no longer permitted, use native float values instead."
else types.float.check x;
};
2021-12-24 22:20:15 +00:00
system.activationScripts.defaults.text = mkIfAttrs [
alf
loginwindow
smb
SoftwareUpdate
CustomSystemPreferences
2021-12-24 22:20:15 +00:00
]
''
# Set defaults
echo >&2 "system defaults..."
2019-11-04 03:56:21 +00:00
${concatStringsSep "\n" alf}
2019-11-04 04:35:56 +00:00
${concatStringsSep "\n" loginwindow}
${concatStringsSep "\n" smb}
2019-11-04 04:54:31 +00:00
${concatStringsSep "\n" SoftwareUpdate}
${concatStringsSep "\n" CustomSystemPreferences}
'';
system.activationScripts.userDefaults.text = mkIfAttrs
2021-12-24 22:20:15 +00:00
[
controlcenter
2021-12-24 22:20:15 +00:00
GlobalPreferences
LaunchServices
NSGlobalDomain
menuExtraClock
2021-12-24 22:20:15 +00:00
dock
finder
2024-10-28 06:37:08 +00:00
hitoolbox
magicmouse
magicmouseBluetooth
2021-12-24 22:20:15 +00:00
screencapture
screensaver
2021-12-24 22:20:15 +00:00
spaces
trackpad
trackpadBluetooth
universalaccess
ActivityMonitor
CustomUserPreferences
WindowManager
2021-12-24 22:20:15 +00:00
]
''
# Set defaults
echo >&2 "user defaults..."
${concatStringsSep "\n" NSGlobalDomain}
${concatStringsSep "\n" GlobalPreferences}
${concatStringsSep "\n" LaunchServices}
${concatStringsSep "\n" menuExtraClock}
${concatStringsSep "\n" dock}
${concatStringsSep "\n" finder}
2024-10-28 06:37:08 +00:00
${concatStringsSep "\n" hitoolbox}
${concatStringsSep "\n" magicmouse}
${concatStringsSep "\n" magicmouseBluetooth}
2018-02-27 17:24:45 +00:00
${concatStringsSep "\n" screencapture}
${concatStringsSep "\n" screensaver}
2019-11-04 04:06:54 +00:00
${concatStringsSep "\n" spaces}
${concatStringsSep "\n" trackpad}
${concatStringsSep "\n" trackpadBluetooth}
${concatStringsSep "\n" universalaccess}
${concatStringsSep "\n" ActivityMonitor}
${concatStringsSep "\n" CustomUserPreferences}
${concatStringsSep "\n" WindowManager}
${concatStringsSep "\n" controlcenter}
${optionalString (length dock > 0) ''
# Only restart Dock if current user is logged in
2024-10-09 10:57:33 +00:00
if pgrep -xu $UID Dock >/dev/null; then
echo >&2 "restarting Dock..."
killall Dock || true
fi
''}
'';
2016-12-14 12:05:23 +00:00
};
}