summary refs log tree commit diff
path: root/modules/config/swap.nix
blob: a3f241fc8c55cc111533cdb3c4ac3bbf091a4ddc (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
{ config, pkgs, ... }:

with pkgs.lib;

{

  ###### interface
  
  options = {

    swapDevices = mkOption {
      default = [];
      example = [
        { device = "/dev/hda7"; }
        { device = "/var/swapfile"; }
        { label = "bigswap"; }
      ];
      description = ''
        The swap devices and swap files.  These must have been
        initialised using <command>mkswap</command>.  Each element
        should be an attribute set specifying either the path of the
        swap device or file (<literal>device</literal>) or the label
        of the swap device (<literal>label</literal>, see
        <command>mkswap -L</command>).  Using a label is
        recommended.
      '';

      type = types.list types.optionSet;

      options = {config, options, ...}: {

        options = {
        
          device = mkOption {
            example = "/dev/sda3";
            type = types.string;
            description = "Path of the device.";
          };

          label = mkOption {
            example = "swap";
            type = types.string;
            description = ''
              Label of the device.  Can be used instead of <varname>device</varname>.
            '';
          };

          cipher = mkOption {
            default = false;
            example = true;
            type = types.bool;
            description = ''
              Encrypt the swap device to protect swapped data.  This option
              does not work with labels.
            '';
          };

        };

        config = {
          device =
            if options.label.isDefined then
              "/dev/disk/by-label/${config.label}"
            else
              mkNotdef;
        };
        
      };
      
    };

  };

}