diff options
| author | Chris Wells <chris@mathematicaster.org> | 2026-10-28 01:20:16 -0400 |
|---|---|---|
| committer | Chris Wells <chris@mathematicaster.org> | 2026-10-28 01:20:16 -0400 |
| commit | f9bdbf51aa61503d77e387095e7a4e1f34acdde3 (patch) | |
| tree | 22623c6b8e43ff003de6079d7f70cef3dc2f7c13 /modules/files.nix | |
| download | ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.tar ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.tar.gz ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.tar.bz2 ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.tar.lz ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.tar.xz ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.tar.zst ko-manager-f9bdbf51aa61503d77e387095e7a4e1f34acdde3.zip | |
First few files
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; + }; + } + )) + ]; + }; +} |
