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