36a53d9f26
This process was automated by [my fork of `nix-doc-munge`]. All conversions were automatically checked to produce the same DocBook result when converted back, modulo minor typographical/formatting differences on the acceptable-to-desirable spectrum. To reproduce this commit, run: $ NIX_PATH=nixpkgs=flake:nixpkgs/e7e69199f0372364a6106a1e735f68604f4c5a25 \ nix shell nixpkgs#coreutils \ -c find . -name '*.nix' \ -exec nix run -- github:emilazy/nix-doc-munge/98dadf1f77351c2ba5dcb709a2a171d655f15099 \ {} + $ ./format [my fork of `nix-doc-munge`]: https://github.com/emilazy/nix-doc-munge/tree/home-manager
108 lines
3.3 KiB
Nix
108 lines
3.3 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.targets.darwin;
|
|
|
|
mkActivationCmds = isLocal: settings:
|
|
let
|
|
toDefaultsFile = domain: attrs:
|
|
pkgs.writeText "${domain}.plist" (lib.generators.toPlist { } attrs);
|
|
|
|
cliFlags = lib.optionalString isLocal "-currentHost";
|
|
|
|
toActivationCmd = domain: attrs:
|
|
"$DRY_RUN_CMD /usr/bin/defaults ${cliFlags} import ${
|
|
escapeShellArg domain
|
|
} ${toDefaultsFile domain attrs}";
|
|
|
|
nonNullDefaults =
|
|
mapAttrs (domain: attrs: (filterAttrs (n: v: v != null) attrs))
|
|
settings;
|
|
|
|
writableDefaults =
|
|
filterAttrs (domain: attrs: attrs != { }) nonNullDefaults;
|
|
in mapAttrsToList toActivationCmd writableDefaults;
|
|
|
|
defaultsCmds = mkActivationCmds false cfg.defaults;
|
|
currentHostDefaultsCmds = mkActivationCmds true cfg.currentHostDefaults;
|
|
|
|
activationCmds = defaultsCmds ++ currentHostDefaultsCmds;
|
|
in {
|
|
meta.maintainers = [ maintainers.midchildan ];
|
|
|
|
options.targets.darwin.defaults = mkOption {
|
|
type = types.submodule ./opts-allhosts.nix;
|
|
default = { };
|
|
example = {
|
|
"com.apple.desktopservices" = {
|
|
DSDontWriteNetworkStores = true;
|
|
DSDontWriteUSBStores = true;
|
|
};
|
|
};
|
|
description = lib.mdDoc ''
|
|
Set macOS user defaults. Values set to `null` are
|
|
ignored.
|
|
|
|
::: {.warning}
|
|
Some settings might require a re-login to take effect.
|
|
:::
|
|
|
|
::: {.warning}
|
|
Some settings are only read from
|
|
{option}`targets.darwin.currentHostDefaults`.
|
|
:::
|
|
'';
|
|
};
|
|
|
|
options.targets.darwin.currentHostDefaults = mkOption {
|
|
type = types.submodule ./opts-currenthost.nix;
|
|
default = { };
|
|
example = {
|
|
"com.apple.controlcenter" = { BatteryShowPercentage = true; };
|
|
};
|
|
description = lib.mdDoc ''
|
|
Set macOS user defaults. Unlike {option}`targets.darwin.defaults`,
|
|
the preferences will only be applied to the currently logged-in host. This
|
|
distinction is important for networked accounts.
|
|
|
|
Values set to `null` are ignored.
|
|
|
|
::: {.warning}
|
|
Some settings might require a re-login to take effect.
|
|
:::
|
|
'';
|
|
};
|
|
|
|
config = mkIf (activationCmds != [ ]) {
|
|
assertions = [
|
|
(hm.assertions.assertPlatform "targets.darwin.defaults" pkgs
|
|
platforms.darwin)
|
|
];
|
|
|
|
warnings = let
|
|
batteryOptionName = ''
|
|
targets.darwin.currentHostDefaults."com.apple.controlcenter".BatteryShowPercentage'';
|
|
batteryPercentage =
|
|
attrByPath [ "com.apple.menuextra.battery" "ShowPercent" ] null
|
|
cfg.defaults;
|
|
webkitDevExtras = attrByPath [
|
|
"com.apple.Safari"
|
|
"com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled"
|
|
] null cfg.defaults;
|
|
in optional (batteryPercentage != null) ''
|
|
The option 'com.apple.menuextra.battery.ShowPercent' no longer works on
|
|
macOS 11 and later. Instead, use '${batteryOptionName}'.
|
|
'' ++ optional (webkitDevExtras != null) ''
|
|
The option 'com.apple.Safari.com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled'
|
|
is no longer present in recent versions of Safari.
|
|
'';
|
|
|
|
home.activation.setDarwinDefaults = hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
$VERBOSE_ECHO "Configuring macOS user defaults"
|
|
${concatStringsSep "\n" activationCmds}
|
|
'';
|
|
};
|
|
}
|