summaryrefslogtreecommitdiff
path: root/modules/system/defaults/default.nix
blob: 0f9877d090ee27906af2c291a8d2c6a46692a529 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{ config, lib, ... }:

with lib;

let

  cfg = config.system.defaults;

  writeValue = value:
    if isBool value then "-bool ${if value then "YES" else "NO"}" else
    if isInt value then "-int ${toString value}" else
    if isString value then "-string '${value}'" else
    throw "invalid value type";

  writeDefault = domain: key: value:
    "defaults write ${domain} '${key}' ${writeValue value}";

  defaultsToList = domain: attrs: mapAttrsToList (writeDefault domain) (filterAttrs (n: v: v != null) attrs);

  global = defaultsToList "-g" cfg.global;
  dock = defaultsToList "com.apple.dock" cfg.dock;
  finder = defaultsToList "com.apple.finder" cfg.finder;
  trackpad = defaultsToList "com.apple.driver.AppleBluetoothMultitouch.trackpad" cfg.trackpad;
  LaunchServices = defaultsToList "com.apple.LaunchServices" cfg.LaunchServices;

in

{
  options = {
  };

  config = {

    system.activationScripts.defaults.text = ''
      # Set defaults
      echo "writing defaults..." >&2

      ${concatStringsSep "\n" global}
      ${concatStringsSep "\n" dock}
      ${concatStringsSep "\n" finder}
      ${concatStringsSep "\n" trackpad}
      ${concatStringsSep "\n" LaunchServices}
    '';

  };
}