From 3160c0384370f7a8dc340cf341c67066daf9c81e Mon Sep 17 00:00:00 2001 From: Nikita Uvarov Date: Mon, 9 Oct 2017 11:20:12 +0200 Subject: [PATCH] dunst: implement settings parameter --- modules/services/dunst.nix | 74 +++++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 17 deletions(-) diff --git a/modules/services/dunst.nix b/modules/services/dunst.nix index 659425b11..22a7d2163 100644 --- a/modules/services/dunst.nix +++ b/modules/services/dunst.nix @@ -2,6 +2,22 @@ with lib; +let + + cfg = config.services.dunst; + toDunstIni = generators.toINI { + mkKeyValue = key: value: + let + value' = + if isBool value then (if value then "yes" else "no") + else if isString value then "\"${value}\"" + else toString value; + in + "${key}=${value'}"; + }; + +in + { meta.maintainers = [ maintainers.rycee ]; @@ -10,29 +26,53 @@ with lib; enable = mkEnableOption "the dunst notification daemon"; settings = mkOption { - type = types.attrs; + type = types.attrsOf types.attrs; default = {}; description = "Configuration written to ~/.config/dunstrc"; + example = literalExample '' + { + global = { + geometry = "300x5-30+50"; + transparency = 10; + frame_color = "#eceff1"; + font = "Droid Sans 9"; + }; + + urgency_normal = { + background = "#37474f"; + foreground = "#eceff1"; + timeout = 10; + }; + }; + ''; }; }; }; - config = mkIf config.services.dunst.enable { - home.file.".local/share/dbus-1/services/org.knopwob.dunst.service".source = - "${pkgs.dunst}/share/dbus-1/services/org.knopwob.dunst.service"; + config = mkIf cfg.enable ( + mkMerge [ + { + home.file.".local/share/dbus-1/services/org.knopwob.dunst.service".source = + "${pkgs.dunst}/share/dbus-1/services/org.knopwob.dunst.service"; - systemd.user.services.dunst = { - Unit = { - Description = "Dunst notification daemon"; - After = [ "graphical-session-pre.target" ]; - PartOf = [ "graphical-session.target" ]; - }; + systemd.user.services.dunst = { + Unit = { + Description = "Dunst notification daemon"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; - Service = { - Type = "dbus"; - BusName = "org.freedesktop.Notifications"; - ExecStart = "${pkgs.dunst}/bin/dunst"; - }; - }; - }; + Service = { + Type = "dbus"; + BusName = "org.freedesktop.Notifications"; + ExecStart = "${pkgs.dunst}/bin/dunst"; + }; + }; + } + + (mkIf (cfg.settings != {}) { + home.file.".config/dunst/dunstrc".text = toDunstIni cfg.settings; + }) + ] + ); }