From d27bccdff1530422db605810833e6d4e084dc629 Mon Sep 17 00:00:00 2001
From: Adam Washington <adam.washington@stfc.ac.uk>
Date: Thu, 13 Sep 2018 17:25:53 +0100
Subject: [PATCH] zathura: add module

Add the zathura document viewer as a program option with support for
managing the zathurarc configuration file.
---
 modules/misc/news.nix        |  7 +++++
 modules/modules.nix          |  1 +
 modules/programs/zathura.nix | 61 ++++++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)
 create mode 100644 modules/programs/zathura.nix

diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index f1d6de45b..b8d4f86b3 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -786,6 +786,13 @@ in
           A new module is available: 'programs.taskwarrior'.
         '';
       }
+
+      {
+        time = "2018-09-18T21:43:54+00:00";
+        message = ''
+          A new module is available: 'programs.zathura'.
+        '';
+      }
     ];
   };
 }
diff --git a/modules/modules.nix b/modules/modules.nix
index 3d9fe85c9..a7f05eed4 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -57,6 +57,7 @@ let
     ./programs/termite.nix
     ./programs/texlive.nix
     ./programs/vim.nix
+    ./programs/zathura.nix
     ./programs/zsh.nix
     ./services/blueman-applet.nix
     ./services/compton.nix
diff --git a/modules/programs/zathura.nix b/modules/programs/zathura.nix
new file mode 100644
index 000000000..b81d594e6
--- /dev/null
+++ b/modules/programs/zathura.nix
@@ -0,0 +1,61 @@
+{ config, lib, pkgs, ...}:
+
+with lib;
+
+let
+
+  cfg = config.programs.zathura;
+
+  formatLine = n: v:
+    let
+      formatValue = v:
+        if isBool v then (if v then "true" else "false")
+        else toString v;
+    in
+      "set ${n}\t\"${formatValue v}\"";
+
+in
+
+{
+  meta.maintainers = [ maintainers.rprospero ];
+
+  options.programs.zathura = {
+    enable = mkEnableOption ''
+      Zathura, a highly customizable and funtional document viewer
+      focused on keyboard interaction'';
+
+    options = mkOption {
+      default = {};
+      type = with types; attrsOf (either str (either bool int));
+      description = ''
+        Add <option>:set</option> command options to zathura and make
+        them permanent. See
+        <citerefentry>
+          <refentrytitle>zathurarc</refentrytitle>
+          <manvolnum>5</manvolnum>
+        </citerefentry>
+        for the full list of options.
+      '';
+      example = { default-bg = "#000000"; default-fg = "#FFFFFF"; };
+    };
+
+    extraConfig = mkOption {
+      type = types.lines;
+      default = "";
+      description = ''
+        Additional commands for zathura that will be added to the
+        <filename>zathurarc</filename> file.
+      '';
+    };
+  };
+
+  config = mkIf cfg.enable {
+    home.packages = [ pkgs.zathura ];
+
+    xdg.configFile."zathura/zathurarc".text =
+      concatStringsSep "\n" ([]
+        ++ optional (cfg.extraConfig != "") cfg.extraConfig
+        ++ mapAttrsToList formatLine cfg.options
+      ) + "\n";
+  };
+}