diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 4637308a..e27ec974 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -1333,6 +1333,13 @@ in
A new module is available: 'wayland.windowManager.sway'
'';
}
+ {
+ time = "2020-03-04T18:55:03+00:00";
+ condition = hostPlatform.isLinux;
+ message = ''
+ A new module is available: 'programs.abook'
+ '';
+ }
];
};
}
diff --git a/modules/modules.nix b/modules/modules.nix
index 8e7ed372..9d741016 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -37,6 +37,7 @@ let
(loadModule ./misc/xdg-mime-apps.nix { condition = hostPlatform.isLinux; })
(loadModule ./misc/xdg-user-dirs.nix { condition = hostPlatform.isLinux; })
(loadModule ./misc/xdg.nix { })
+ (loadModule ./programs/abook.nix { condition = hostPlatform.isLinux; })
(loadModule ./programs/afew.nix { })
(loadModule ./programs/alacritty.nix { })
(loadModule ./programs/alot.nix { })
diff --git a/modules/programs/abook.nix b/modules/programs/abook.nix
new file mode 100644
index 00000000..4ddc080a
--- /dev/null
+++ b/modules/programs/abook.nix
@@ -0,0 +1,40 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.abook;
+
+in {
+ options.programs.abook = {
+ enable = mkEnableOption "Abook";
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ example = ''
+ field pager = Pager
+ view CONTACT = name, email
+ set autosave=true
+ '';
+ description = ''
+ Extra lines added to $HOME/.config/abook/abookrc.
+ Available configuration options are described in the abook repository:
+ .
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = [ pkgs.abook ];
+ xdg.configFile."abook/abookrc" = mkIf (cfg.extraConfig != "") {
+ text = ''
+ # Generated by Home Manager.
+ # See http://abook.sourceforge.net/
+
+ ${cfg.extraConfig}
+ '';
+ };
+ };
+}
diff --git a/tests/default.nix b/tests/default.nix
index ce12e0a7..1d338101 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -43,6 +43,7 @@ import nmt {
./modules/programs/zsh
./modules/xresources
] ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
+ ./modules/programs/abook
./modules/misc/pam
./modules/misc/xdg
./modules/misc/xsession
diff --git a/tests/modules/programs/abook/default.nix b/tests/modules/programs/abook/default.nix
new file mode 100644
index 00000000..12ad238e
--- /dev/null
+++ b/tests/modules/programs/abook/default.nix
@@ -0,0 +1,4 @@
+{
+ abook-no-settings = ./no-settings.nix;
+ abook-with-settings = ./with-settings.nix;
+}
diff --git a/tests/modules/programs/abook/no-settings.nix b/tests/modules/programs/abook/no-settings.nix
new file mode 100644
index 00000000..a8e5de78
--- /dev/null
+++ b/tests/modules/programs/abook/no-settings.nix
@@ -0,0 +1,13 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.abook.enable = true;
+
+ nmt.script = ''
+ assertPathNotExists home-files/.config/abook/abookrc
+ '';
+ };
+}
diff --git a/tests/modules/programs/abook/with-settings.cfg b/tests/modules/programs/abook/with-settings.cfg
new file mode 100644
index 00000000..d73445f4
--- /dev/null
+++ b/tests/modules/programs/abook/with-settings.cfg
@@ -0,0 +1,21 @@
+# Generated by Home Manager.
+# See http://abook.sourceforge.net/
+
+# Defining a new custom field
+# -----------------------------
+
+field pager = Pager
+field address_lines = Address, list
+field birthday = Birthday, date
+
+# Defining a view/tab
+# ---------------------
+
+view CONTACT = name, email
+view ADDRESS = address_lines, city, state, zip, country
+view PHONE = phone, workphone, pager, mobile, fax
+view OTHER = url, birthday
+
+# Automatically save database on exit
+set autosave=true
+
diff --git a/tests/modules/programs/abook/with-settings.nix b/tests/modules/programs/abook/with-settings.nix
new file mode 100644
index 00000000..22703a17
--- /dev/null
+++ b/tests/modules/programs/abook/with-settings.nix
@@ -0,0 +1,36 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.abook = {
+ enable = true;
+
+ extraConfig = ''
+ # Defining a new custom field
+ # -----------------------------
+
+ field pager = Pager
+ field address_lines = Address, list
+ field birthday = Birthday, date
+
+ # Defining a view/tab
+ # ---------------------
+
+ view CONTACT = name, email
+ view ADDRESS = address_lines, city, state, zip, country
+ view PHONE = phone, workphone, pager, mobile, fax
+ view OTHER = url, birthday
+
+ # Automatically save database on exit
+ set autosave=true
+ '';
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.config/abook/abookrc
+ assertFileContent home-files/.config/abook/abookrc ${./with-settings.cfg}
+ '';
+ };
+}