{ config, pkgs, lib, options, ... }: with builtins // lib; let cfg = config.kobo; ini = pkgs.formats.ini {}; in { options.kobo = { enable = mkEnableOption "main configurations"; path = mkOption { type = types.str; default = ".kobo/Kobo"; description = "Relative path to main Kobo config"; }; file = mkOption { type = options.file.type; default = {}; description = "Files relative to ${cfg.path}"; }; manifest = mkOption { type = options.manifest.type; default = {}; description = "Manifest relative to ${cfg.path}"; }; config = mkOption { type = ini.type; default = {}; description = "https://wiki.mobileread.com/wiki/Kobo_Configuration_Options"; }; # src = mkOption { # type = types.package; # description = "The base source files to use"; # default = with pkgs.kobo.src; # if config.plato.enable && config.koreader.enable then KOReader-Plato # else if config.plato.enable then Plato # else if config.koreader.enable then KOReader # else if config.kfmon.enable then KFMon # else error "At least one of plato, koreader or kfmon must be enabled in order to use a default package"; # }; }; config = { file = mapAttrs' (n: v: { name = "kobo-${n}"; value = v // { target = "${cfg.path}/${v.target}"; }; }) cfg.file; manifest = mapAttrs' (n: v: { name = "kobo-${n}"; value = v // { targets = map (x: "${cfg.path}/${x}") v.targets; }; }) cfg.manifest; kobo = { config = { FeatureSettings = { ExcludeSyncFolders = ''(\.(?!kobo|adobe).+|([^.][^/]*/)+\..+)''; }; ApplicationPreferences = { QuickTourShown = true; }; }; file = mkMerge [ (mkIf (cfg.config != {}) { "Kobo eReader.conf".text = generators.toINI {} cfg.config; }) ]; manifest = { "Kobo eReader.conf".mergeTool = local: remote: '' ${getBin pkgs.crudini}/bin/crudini --merge "${remote}" < "${local}" > "${remote}" ''; }; }; }