about summary refs log tree commit diff
path: root/nixpkgs/lib/tests/modules/doRename-condition.nix
blob: c08b3035be6f719d6d41b87b5d391120b4554402 (plain) (blame)
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
/*
  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;
    })
  ];
}