nixos/systemd: merge unit options as lists when at least one value is a list
This commit is contained in:
parent
0d1c88c7ac
commit
7d0c812963
5 changed files with 51 additions and 8 deletions
|
@ -348,6 +348,11 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||||
|
|
||||||
- The `mpich` package expression now requires `withPm` to be a list, e.g. `"hydra:gforker"` becomes `[ "hydra" "gforker" ]`.
|
- The `mpich` package expression now requires `withPm` to be a list, e.g. `"hydra:gforker"` becomes `[ "hydra" "gforker" ]`.
|
||||||
|
|
||||||
|
- When merging systemd unit options (of type `unitOption`),
|
||||||
|
if at least one definition is a list, all those which aren't are now lifted into a list,
|
||||||
|
making it possible to accumulate definitions without resorting to `mkForce`,
|
||||||
|
hence to retain the definitions not anticipating that need.
|
||||||
|
|
||||||
- YouTrack is bumped to 2023.3. The update is not performed automatically, it requires manual interaction. See the YouTrack section in the manual for details.
|
- YouTrack is bumped to 2023.3. The update is not performed automatically, it requires manual interaction. See the YouTrack section in the manual for details.
|
||||||
|
|
||||||
- QtMultimedia has changed its default backend to `QT_MEDIA_BACKEND=ffmpeg` (previously `gstreamer` on Linux or `darwin` on MacOS).
|
- QtMultimedia has changed its default backend to `QT_MEDIA_BACKEND=ffmpeg` (previously `gstreamer` on Linux or `darwin` on MacOS).
|
||||||
|
|
|
@ -21,14 +21,8 @@ in rec {
|
||||||
let
|
let
|
||||||
defs' = filterOverrides defs;
|
defs' = filterOverrides defs;
|
||||||
in
|
in
|
||||||
if isList (head defs').value
|
if any (def: isList def.value) defs'
|
||||||
then concatMap (def:
|
then concatMap (def: toList def.value) defs'
|
||||||
if builtins.typeOf def.value == "list"
|
|
||||||
then def.value
|
|
||||||
else
|
|
||||||
throw "The definitions for systemd unit options should be either all lists, representing repeatable options, or all non-lists, but for the option ${showOption loc}, the definitions are a mix of list and non-list ${lib.options.showDefs defs'}"
|
|
||||||
) defs'
|
|
||||||
|
|
||||||
else mergeEqualOption loc defs';
|
else mergeEqualOption loc defs';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -174,4 +174,6 @@ with pkgs;
|
||||||
nixpkgs-check-by-name = callPackage ./nixpkgs-check-by-name { };
|
nixpkgs-check-by-name = callPackage ./nixpkgs-check-by-name { };
|
||||||
|
|
||||||
auto-patchelf-hook = callPackage ./auto-patchelf-hook { };
|
auto-patchelf-hook = callPackage ./auto-patchelf-hook { };
|
||||||
|
|
||||||
|
systemd = callPackage ./systemd { };
|
||||||
}
|
}
|
||||||
|
|
5
pkgs/test/systemd/default.nix
Normal file
5
pkgs/test/systemd/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ lib, callPackage }:
|
||||||
|
|
||||||
|
lib.recurseIntoAttrs {
|
||||||
|
nixos = callPackage ./nixos { };
|
||||||
|
}
|
37
pkgs/test/systemd/nixos/default.nix
Normal file
37
pkgs/test/systemd/nixos/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{ pkgs, lib, stdenv, ... }:
|
||||||
|
|
||||||
|
lib.runTests {
|
||||||
|
# Merging two non-list definitions must still result in an error
|
||||||
|
# about a conflicting definition.
|
||||||
|
test-unitOption-merging-non-lists-conflict =
|
||||||
|
let nixos = pkgs.nixos {
|
||||||
|
system.stateVersion = lib.trivial.release;
|
||||||
|
systemd.services.systemd-test-nixos = {
|
||||||
|
serviceConfig = lib.mkMerge [
|
||||||
|
{ StateDirectory = "foo"; }
|
||||||
|
{ StateDirectory = "bar"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
expr = (builtins.tryEval (nixos.config.systemd.services.systemd-test-nixos.serviceConfig.StateDirectory)).success;
|
||||||
|
expected = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Merging must lift non-list definitions to a list
|
||||||
|
# if at least one of them is a list.
|
||||||
|
test-unitOption-merging-list-non-list-append =
|
||||||
|
let nixos = pkgs.nixos {
|
||||||
|
system.stateVersion = lib.trivial.release;
|
||||||
|
systemd.services.systemd-test-nixos = {
|
||||||
|
serviceConfig = lib.mkMerge [
|
||||||
|
{ StateDirectory = "foo"; }
|
||||||
|
{ StateDirectory = ["bar"]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
expr = nixos.config.systemd.services.systemd-test-nixos.serviceConfig.StateDirectory;
|
||||||
|
expected = [ "foo" "bar" ];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue