summaryrefslogtreecommitdiff
path: root/openwrt/etc.nix
diff options
context:
space:
mode:
Diffstat (limited to 'openwrt/etc.nix')
-rw-r--r--openwrt/etc.nix41
1 files changed, 41 insertions, 0 deletions
diff --git a/openwrt/etc.nix b/openwrt/etc.nix
new file mode 100644
index 0000000..8231125
--- /dev/null
+++ b/openwrt/etc.nix
@@ -0,0 +1,41 @@
+{ config, lib, ... }:
+
+let
+ cfg = config.etc;
+in
+
+{
+ options.etc = lib.mkOption {
+ type = lib.types.attrsOf (lib.types.submodule ({ name, ... }: {
+ options = {
+ enable = lib.mkEnableOption "this `/etc` file" // {
+ default = true;
+ };
+
+ text = lib.mkOption {
+ type = lib.types.lines;
+ description = ''
+ Contents of the file.
+ '';
+ };
+ };
+ }));
+ default = {};
+ };
+
+ config = lib.mkIf (cfg != {}) {
+ deploySteps.etc = {
+ priority = 8000;
+ apply =
+ lib.concatStrings
+ (lib.mapAttrsToList
+ (name: file: lib.optionalString (file.enable) ''
+ ${lib.optionalString (dirOf name != ".") ''
+ mkdir -p ${lib.escapeShellArg (dirOf name)}
+ ''}
+ echo ${lib.escapeShellArg file.text} >${lib.escapeShellArg "/etc/${name}"}
+ '')
+ cfg);
+ };
+ };
+}