fnott: refactor module
- Change generation behavior to always generate a configuration file and pass it explicitly to fnott, it enforces the module to be hermetic instead of offloading the configuration selection to heuristics. - Various style changes. - Fix issue where fnott would abort due to an invalid config file when both the configFile and settings options are unset. - Remove the empty-settings test as a configuration file is now already generated. Suggested-by: Robert Helgesson <robert@rycee.net>
This commit is contained in:
parent
275f39611d
commit
039f786e60
|
@ -6,7 +6,7 @@ let
|
||||||
cfg = config.services.fnott;
|
cfg = config.services.fnott;
|
||||||
|
|
||||||
concatStringsSep' = sep: list:
|
concatStringsSep' = sep: list:
|
||||||
concatStringsSep sep (filter (str: str != "") list);
|
concatStringsSep sep (filter (x: x != "") list);
|
||||||
|
|
||||||
mkKeyValue = generators.mkKeyValueDefault { } "=";
|
mkKeyValue = generators.mkKeyValueDefault { } "=";
|
||||||
genINI = generators.toINI { };
|
genINI = generators.toINI { };
|
||||||
|
@ -31,6 +31,15 @@ in {
|
||||||
description = "Package providing <command>fnott</command>.";
|
description = "Package providing <command>fnott</command>.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extraFlags = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [ ];
|
||||||
|
example = [ "-s" ];
|
||||||
|
description = ''
|
||||||
|
Extra arguments to use for executing fnott.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
configFile = mkOption {
|
configFile = mkOption {
|
||||||
type = types.either types.str types.path;
|
type = types.either types.str types.path;
|
||||||
default = "${config.xdg.configHome}/fnott/fnott.ini";
|
default = "${config.xdg.configHome}/fnott/fnott.ini";
|
||||||
|
@ -48,15 +57,6 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
extraFlags = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [ ];
|
|
||||||
example = [ "-s" ];
|
|
||||||
description = ''
|
|
||||||
Extra arguments to use for executing fnott.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = mkOption {
|
settings = mkOption {
|
||||||
type = iniFormatType;
|
type = iniFormatType;
|
||||||
default = { };
|
default = { };
|
||||||
|
@ -107,24 +107,21 @@ in {
|
||||||
Type = "dbus";
|
Type = "dbus";
|
||||||
BusName = "org.freedesktop.Notifications";
|
BusName = "org.freedesktop.Notifications";
|
||||||
ExecStart = concatStringsSep' " " [
|
ExecStart = concatStringsSep' " " [
|
||||||
"${cfg.package}/bin/fnott -c ${cfg.configFile}"
|
"${cfg.package}/bin/fnott"
|
||||||
|
"-c ${escapeShellArg cfg.configFile}"
|
||||||
(escapeShellArgs cfg.extraFlags)
|
(escapeShellArgs cfg.extraFlags)
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
xdg.configFile."fnott/fnott.ini" = {
|
||||||
# FIXME: Remove after next version release (https://codeberg.org/dnkl/fnott/pulls/24).
|
# FIXME: Remove after next version release (https://codeberg.org/dnkl/fnott/pulls/24).
|
||||||
xdg.configFile."fnott/fnott.ini" = mkIf (cfg.settings != { }) (mkMerge [
|
text = concatStringsSep' "\n" [
|
||||||
{ text = genINI cfg.settings; }
|
(optionalString (cfg.settings ? main) ''
|
||||||
(mkIf (cfg.settings ? main) {
|
${concatStringsSep "\n" (mapAttrsToList mkKeyValue cfg.settings.main)}
|
||||||
text = mkForce (concatStringsSep' "\n" [
|
'')
|
||||||
''
|
|
||||||
${concatStringsSep "\n"
|
|
||||||
(mapAttrsToList mkKeyValue cfg.settings.main)}
|
|
||||||
''
|
|
||||||
(genINI (removeAttrs cfg.settings [ "main" ]))
|
(genINI (removeAttrs cfg.settings [ "main" ]))
|
||||||
]);
|
];
|
||||||
})
|
};
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
{
|
{
|
||||||
fnott-empty-settings = ./empty-settings.nix;
|
|
||||||
fnott-example-settings = ./example-settings.nix;
|
fnott-example-settings = ./example-settings.nix;
|
||||||
fnott-global-properties = ./global-properties.nix;
|
fnott-global-properties = ./global-properties.nix;
|
||||||
fnott-systemd-user-service = ./systemd-user-service.nix;
|
fnott-systemd-user-service = ./systemd-user-service.nix;
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
config = {
|
|
||||||
services.fnott = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.writeScriptBin "dummy-fnott" "";
|
|
||||||
settings = { };
|
|
||||||
};
|
|
||||||
|
|
||||||
nmt.script = ''
|
|
||||||
assertPathNotExists home-files/.config/fnott
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
[Service]
|
[Service]
|
||||||
BusName=org.freedesktop.Notifications
|
BusName=org.freedesktop.Notifications
|
||||||
ExecStart=@fnott@/bin/fnott -c /home/hm-user/.config/fnott/fnott.ini
|
ExecStart=@fnott@/bin/fnott -c '/home/hm-user/.config/fnott/fnott.ini'
|
||||||
Type=dbus
|
Type=dbus
|
||||||
|
|
||||||
[Unit]
|
[Unit]
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
nmt.script = ''
|
nmt.script = ''
|
||||||
assertPathNotExists home-files/.config/fnott/fnott.ini
|
|
||||||
|
|
||||||
assertFileContent \
|
assertFileContent \
|
||||||
home-files/.config/systemd/user/fnott.service \
|
home-files/.config/systemd/user/fnott.service \
|
||||||
${./systemd-user-service-expected.service}
|
${./systemd-user-service-expected.service}
|
||||||
|
|
Loading…
Reference in a new issue