From 849bdb056feb8e064396970f79c8962b20b0c07f Mon Sep 17 00:00:00 2001 From: Chris Wells Date: Tue, 3 Sep 2024 12:13:30 -0500 Subject: Re-doing a bunch of this --- modules/lib/file-type.nix | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 modules/lib/file-type.nix (limited to 'modules/lib/file-type.nix') 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; + })); + }; +} -- cgit v1.2.3