summaryrefslogtreecommitdiff
path: root/modules/system/defaults-write.nix
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2016-12-14 13:05:23 +0100
committerDaiderd Jordan <daiderd@gmail.com>2016-12-14 13:05:23 +0100
commita48cc8ac5f6cda041def73e9564325e5b0ed6633 (patch)
tree6fb9ff45adf8846440a4ea28bb45150025bd7a46 /modules/system/defaults-write.nix
parent6af52615ed8de2c4f9f4a30d97a22f7b3513c474 (diff)
move system.defaults to separate files
Diffstat (limited to 'modules/system/defaults-write.nix')
-rw-r--r--modules/system/defaults-write.nix48
1 files changed, 48 insertions, 0 deletions
diff --git a/modules/system/defaults-write.nix b/modules/system/defaults-write.nix
new file mode 100644
index 0000000..7ad97da
--- /dev/null
+++ b/modules/system/defaults-write.nix
@@ -0,0 +1,48 @@
+{ config, lib, ... }:
+
+with lib;
+
+let
+
+ cfg = config.system.defaults;
+
+ boolValue = x: if x then "YES" else "NO";
+
+ writeValue = value:
+ if isBool value then "-bool ${boolValue value}" 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);
+
+ NSGlobalDomain = defaultsToList "-g" cfg.NSGlobalDomain;
+ LaunchServices = defaultsToList "com.apple.LaunchServices" cfg.LaunchServices;
+ dock = defaultsToList "com.apple.dock" cfg.dock;
+ finder = defaultsToList "com.apple.finder" cfg.finder;
+ trackpad = defaultsToList "com.apple.driver.AppleBluetoothMultitouch.trackpad" cfg.trackpad;
+
+in
+
+{
+ options = {
+ };
+
+ config = {
+
+ system.activationScripts.defaults.text = ''
+ # Set defaults
+ echo "writing defaults..." >&2
+
+ ${concatStringsSep "\n" NSGlobalDomain}
+ ${concatStringsSep "\n" LaunchServices}
+ ${concatStringsSep "\n" dock}
+ ${concatStringsSep "\n" finder}
+ ${concatStringsSep "\n" trackpad}
+ '';
+
+ };
+}