diff options
Diffstat (limited to 'modules/lib')
| -rw-r--r-- | modules/lib/file-type.nix | 42 | ||||
| -rw-r--r-- | modules/lib/merge-files.nix | 10 |
2 files changed, 52 insertions, 0 deletions
diff --git a/modules/lib/file-type.nix b/modules/lib/file-type.nix new file mode 100644 index 0000000..c95c0d4 --- /dev/null +++ b/modules/lib/file-type.nix @@ -0,0 +1,42 @@ +{ writeTextFile, lib, ... }: +{ name, config, ... }: +with builtins // lib; +let + sanitize = p: + let + safeChars = [ "+" "." "_" "?" "=" ] ++ lowerChars ++ upperChars ++ stringToCharacters "0123456789"; + empties = l: genList (_: "") (length l); + unsafeInName = stringToCharacters (replaceStrings safeChars (empties safeChars) p; + in "kobo_" + replaceStrings unsafeInName (empties unsafeInName) p; +in { + options = { + enable = mkEnableOption name // { default = true; }; + name = mkOption { + type = types.str; + }; + target = mkOption { + type = types.str; + default = name; + apply = x: if isPrefix "/" x then x else "/${x}"; + }; + executable = mkOption { + type = with types; nullOr bool; + default = null; + }; + text = mkOption { + type = with types; nullOr lines; + default = null; + }; + source = mkOption { + type = types.path; + }; + }; + + config = { + source = mkIf (cfg.text != null) (mkDefault (writeTextFile { + inherit (config) text; + name = sanitieze name; + executable = config.executable == true; + })); + }; +} diff --git a/modules/lib/merge-files.nix b/modules/lib/merge-files.nix new file mode 100644 index 0000000..c024e0c --- /dev/null +++ b/modules/lib/merge-files.nix @@ -0,0 +1,10 @@ +{ runCommandLocal, rsync, lib, ... }: +files: +let + cpFile = s: '' + ${lib.getExe rsync} -aL "${s.source}/" "$out${s.target}" + ''; +in runCommandLocal "merged-files" {} '' + mkdir $out + ${lib.concatMapStringsSep "\n" cpFile files} +'' |
