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;
|
||||
|
||||
concatStringsSep' = sep: list:
|
||||
concatStringsSep sep (filter (str: str != "") list);
|
||||
concatStringsSep sep (filter (x: x != "") list);
|
||||
|
||||
mkKeyValue = generators.mkKeyValueDefault { } "=";
|
||||
genINI = generators.toINI { };
|
||||
|
@ -31,6 +31,15 @@ in {
|
|||
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 {
|
||||
type = types.either types.str types.path;
|
||||
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 {
|
||||
type = iniFormatType;
|
||||
default = { };
|
||||
|
@ -107,24 +107,21 @@ in {
|
|||
Type = "dbus";
|
||||
BusName = "org.freedesktop.Notifications";
|
||||
ExecStart = concatStringsSep' " " [
|
||||
"${cfg.package}/bin/fnott -c ${cfg.configFile}"
|
||||
"${cfg.package}/bin/fnott"
|
||||
"-c ${escapeShellArg cfg.configFile}"
|
||||
(escapeShellArgs cfg.extraFlags)
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
xdg.configFile."fnott/fnott.ini" = {
|
||||
# FIXME: Remove after next version release (https://codeberg.org/dnkl/fnott/pulls/24).
|
||||
xdg.configFile."fnott/fnott.ini" = mkIf (cfg.settings != { }) (mkMerge [
|
||||
{ text = genINI cfg.settings; }
|
||||
(mkIf (cfg.settings ? main) {
|
||||
text = mkForce (concatStringsSep' "\n" [
|
||||
''
|
||||
${concatStringsSep "\n"
|
||||
(mapAttrsToList mkKeyValue cfg.settings.main)}
|
||||
''
|
||||
text = concatStringsSep' "\n" [
|
||||
(optionalString (cfg.settings ? main) ''
|
||||
${concatStringsSep "\n" (mapAttrsToList mkKeyValue 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-global-properties = ./global-properties.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]
|
||||
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
|
||||
|
||||
[Unit]
|
||||
|
|
|
@ -8,8 +8,6 @@
|
|||
};
|
||||
|
||||
nmt.script = ''
|
||||
assertPathNotExists home-files/.config/fnott/fnott.ini
|
||||
|
||||
assertFileContent \
|
||||
home-files/.config/systemd/user/fnott.service \
|
||||
${./systemd-user-service-expected.service}
|
||||
|
|
Loading…
Reference in a new issue