diff options
Diffstat (limited to 'modules/files.nix')
| -rw-r--r-- | modules/files.nix | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/modules/files.nix b/modules/files.nix new file mode 100644 index 0000000..dbd9c6b --- /dev/null +++ b/modules/files.nix @@ -0,0 +1,121 @@ +{ + config, + pkgs, + lib, + ... +}: +with builtins // lib; +{ + options = { + files = mkOption { + default = { }; + type = + types.lazyAttrsOf + <| types.submodule ( + { name, config, ... }: { + options = { + enable = mkEnableOption name // { + default = true; + }; + name = mkOption { + type = types.str; + default = name; + }; + destination = mkOption { + type = types.str; + default = name; + }; + source = mkOption { + type = types.path; + }; + text = mkOption { + type = types.lines; + default = null; + }; + }; + + config = mkIf (config.text != "") { + source = pkgs.writeTextFile { + inherit (config) name text; + }; + }; + } + ); + }; + + _files = mkOption { + type = types.path; + readOnly = true; + internal = true; + default = + pkgs.linkFarm "files" + <| flip mapAttrsToList config.files ( + _: { destination, source, ... }: { + name = destination; + path = source; + } + ); + }; + + dictionaries = mkOption { + default = { }; + type = with types; attrsOf path; + }; + + fonts = mkOption { + default = { }; + type = with types; attrsOf path; + }; + + plugins = mkOption { + default = { }; + type = with types; attrsOf path; + }; + + patches = mkOption { + default = { }; + type = with types; attrsOf path; + }; + }; + + config = { + files = mkMerge [ + (flip mapAttrs' config.dictionaries ( + name: source: { + name = "dict::${name}"; + value = { + destination = "data/dict/${name}"; + inherit source; + }; + } + )) + (flip mapAttrs' config.fonts ( + name: source: { + name = "font::${name}"; + value = { + destination = "fonts/${name}"; + inherit source; + }; + } + )) + (flip mapAttrs' config.plugins ( + name: source: { + name = "plugin::${name}"; + value = { + destination = "plugins/${name}.koplugin"; + inherit source; + }; + } + )) + (flip mapAttrs' config.patches ( + name: source: { + name = "patch::${name}"; + value = { + destination = "patches/${name}"; + inherit source; + }; + } + )) + ]; + }; +} |
