aboutsummaryrefslogtreecommitdiff
path: root/modules/kobo.nix
blob: 57f7a8830d4d2b33b493554ce5e2c888893934c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
{ config, pkgs, lib, options, ... }:
with builtins // lib;
let
  cfg = config.kobo;
  ini = pkgs.formats.ini {};
  importOption = p: (import p { inherit pkgs lib; } cfg.path).option;
in {
  options.kobo = {
    enable = mkEnableOption "main configurations";

    path = mkOption {
      type = types.str;
      default = ".kobo/Kobo";
      description = "Relative path to main Kobo config";
    };

    file = importOption ./lib/file.nix;
    manifest = importOption ./lib/manifest.nix;

    config = mkOption {
      type = ini.type;
      default = {};
      description = "https://wiki.mobileread.com/wiki/Kobo_Configuration_Options";
    };
  };

  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}"
        '';
      };
    };


  };
}