{ config, pkgs, lib, ... }: with builtins // lib; let cfg = config.koreader; in { options.koreader = { enable = mkEnableOption "KOReader"; package = mkPackageOption pkgs "kobo-koreader" {}; _allFiles = mkOption { type = types.package; readOnly = true; internal = true; default = (pkgs.callPackage ../lib/merge-files.nix {}) ([ cfg.package ] ++ attrValues cfg.file); }; path = mkOption { type = types.str; readOnly = true; internal = true; default = ".adds/koreader"; }; devicePath = mkOption { type = types.str; readOnly = true; internal = true; default = "/mnt/onboard/${cfg.path}"; }; file = mkOption { default = {}; type = types.attrsOf (types.submodule (pkgs.callPackage ../lib/file-type.nix {})); }; nickel = { enable = mkEnableOption "Add NickelMenu entry" // { default = true; }; }; }; config = { nickel.menu.item = mkIf (cfg.enable && cfg.nickel.enable) { koreader = singleton { location = "main"; label = "KOReader"; action = "cmd_spawn"; arg = [ "quiet" "exec ${cfg.devicePath}/koreader.sh"; ]; }; }; }; }