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 | |
| 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')
| -rw-r--r-- | modules/default.nix | 27 | ||||
| -rw-r--r-- | modules/files.nix | 121 | ||||
| -rw-r--r-- | modules/main.nix | 48 |
3 files changed, 196 insertions, 0 deletions
diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..d32d8f6 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,27 @@ +{ lib, flake-parts-lib, ... }: +let + inherit (lib) mkOption mkEnableOption types; + inherit (flake-parts-lib) mkPerSystemOption; +in { + options.perSystem = mkPerSystemOption ({ pkgs, system, config, ... }: { + options.koreader = mkOption { + default = {}; + type = types.lazyAttrsOf <| types.submoduleWith { + shorthandOnlyDefinesConfig = true; + modules = [ + { + _module.args = { + inherit pkgs lib; + }; + } + ({ name, ... }: { + imports = [ ./main.nix ]; + options = { + enable = mkEnableOption name // { default = true; }; + }; + }) + ]; + }; + }; + }); +} 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; + }; + } + )) + ]; + }; +} diff --git a/modules/main.nix b/modules/main.nix new file mode 100644 index 0000000..b568efa --- /dev/null +++ b/modules/main.nix @@ -0,0 +1,48 @@ +{ + config, + pkgs, + lib, + ... +}: +with builtins // lib; +{ + imports = [ + ./files.nix + ]; + + options = { + koreader = { + flavor = mkOption { + type = + with types; + nullOr + <| enum [ + "kobo" + "pocketbook" + ]; + default = null; + }; + basePackage = mkOption { + type = types.package; + }; + koreaderPath = mkOption { + type = types.str; + }; + }; + }; + + config = mkMerge [ + (mkIf (config.koreader.flavor == "kobo") { + koreader = { + basePackage = mkOptionDefault pkgs.koreader-kobo; + koreaderPath = mkOptionDefault ".adds/koreader"; + }; + }) + (mkIf (config.koreader.flavor == "pocketbook") { + koreader = { + basePackage = mkOptionDefault pkgs.koreader-pocketbook; + koreaderPath = mkOptionDefault "applications/koreader"; + }; + }) + ]; +} |
