summaryrefslogtreecommitdiffstats
path: root/lib/tests/modules/doRename-condition.nix
blob: 25df21179dabc2d792d105f8c13a27ea20d1aeb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
  Simulate a migration from a single-instance `services.foo` to a multi instance
  `services.foos.<name>` module, where `name = ""` serves as the legacy /
  compatibility instance.

  - No instances must exist, unless one is defined in the multi-instance module,
  or if the legacy enable option is set to true.
  - The legacy instance options must be renamed to the new instance, if it exists.

  The relevant scenarios are tested in separate files:
  - ./doRename-condition-enable.nix
  - ./doRename-condition-no-enable.nix
*/
{ config, lib, ... }:
let
  inherit (lib)
    mkOption
    mkEnableOption
    types
    doRename
    ;
in
{
  options = {
    services.foo.enable = mkEnableOption "foo";
    services.foos = mkOption {
      type = types.attrsOf (
        types.submodule {
          options = {
            bar = mkOption { type = types.str; };
          };
        }
      );
      default = { };
    };
    result = mkOption { };
  };
  imports = [
    (doRename {
      from = [
        "services"
        "foo"
        "bar"
      ];
      to = [
        "services"
        "foos"
        ""
        "bar"
      ];
      visible = true;
      warn = false;
      use = x: x;
      withPriority = true;
      condition = config.services.foo.enable;
    })
  ];
}