diff --git a/nixos/doc/manual/release-notes/rl-2511.section.md b/nixos/doc/manual/release-notes/rl-2511.section.md index a6638de71f83..9a89676a9c07 100644 --- a/nixos/doc/manual/release-notes/rl-2511.section.md +++ b/nixos/doc/manual/release-notes/rl-2511.section.md @@ -46,6 +46,8 @@ - The `services.siproxd` module has been removed as `siproxd` is unmaintained and broken with libosip 5.x. +- `services.dwm-status.extraConfig` was replaced by [RFC0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md)-compliant [](#opt-services.dwm-status.settings), which is used to generate the config file. `services.dwm-status.order` is now moved to [](#opt-services.dwm-status.settings.order), as it's a part of the config file. + - `renovate` was updated to v40. See the [upstream release notes](https://github.com/renovatebot/renovate/releases/tag/40.0.0) for breaking changes. - The Postfix module has been updated and likely requires configuration changes: diff --git a/nixos/modules/services/misc/dwm-status.nix b/nixos/modules/services/misc/dwm-status.nix index f0df70051d48..b7031808287b 100644 --- a/nixos/modules/services/misc/dwm-status.nix +++ b/nixos/modules/services/misc/dwm-status.nix @@ -7,71 +7,80 @@ let cfg = config.services.dwm-status; - order = lib.concatMapStringsSep "," (feature: ''"${feature}"'') cfg.order; + format = pkgs.formats.toml { }; - configFile = pkgs.writeText "dwm-status.toml" '' - order = [${order}] - - ${cfg.extraConfig} - ''; + configFile = format.generate "dwm-status.toml" cfg.settings; in { - - ###### interface + imports = [ + (lib.mkRenamedOptionModule + [ "services" "dwm-status" "order" ] + [ "services" "dwm-status" "settings" "order" ] + ) + (lib.mkRemovedOptionModule [ + "services" + "dwm-status" + "extraConfig" + ] "Use services.dwm-status.settings instead.") + ]; options = { - services.dwm-status = { - enable = lib.mkEnableOption "dwm-status user service"; package = lib.mkPackageOption pkgs "dwm-status" { example = "dwm-status.override { enableAlsaUtils = false; }"; }; - order = lib.mkOption { - type = lib.types.listOf ( - lib.types.enum [ - "audio" - "backlight" + settings = lib.mkOption { + type = lib.types.submodule { + freeformType = format.type; + options.order = lib.mkOption { + type = lib.types.listOf ( + lib.types.enum [ + "audio" + "backlight" + "battery" + "cpu_load" + "network" + "time" + ] + ); + default = [ ]; + description = '' + List of enabled features in order. + ''; + }; + }; + default = { }; + example = { + order = [ "battery" "cpu_load" - "network" "time" - ] - ); + ]; + time = { + format = "%F %a %r"; + update_seconds = true; + }; + }; description = '' - List of enabled features in order. + Config options for dwm-status, see https://github.com/Gerschtli/dwm-status#configuration + for available options. ''; }; - - extraConfig = lib.mkOption { - type = lib.types.lines; - default = ""; - description = '' - Extra config in TOML format. - ''; - }; - }; - }; - ###### implementation - config = lib.mkIf cfg.enable { - - services.upower.enable = lib.mkIf (lib.elem "battery" cfg.order) true; + services.upower.enable = lib.mkIf (lib.elem "battery" cfg.settings.order) true; systemd.user.services.dwm-status = { description = "Highly performant and configurable DWM status service"; wantedBy = [ "graphical-session.target" ]; partOf = [ "graphical-session.target" ]; - serviceConfig.ExecStart = "${cfg.package}/bin/dwm-status ${configFile} --quiet"; }; - }; - }