summaryrefslogtreecommitdiff
path: root/nixos/modules/services.nix
blob: 3fa6835096fd62ea6d8500679ca290ced808aa40 (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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{ config, lib, pkgs, ... }:

with lib;

let

  upstreamServices = [
    "aggety"
    "binfmt"
    "bootmisc"
    "cgroups"
    "consolefont"
    "devfs"
    "dmesg"
    "fsck"
    "hostname"
    "hwclock"
    "keymaps"
    "killprocs"
    "local"
    "localmount"
    "loopback"
    "modules"
    "mount-ro"
    "mtab"
    "netmount"
    "net-online"
    "network"
    "numlock"
    "osclock"
    "procfs"
    "root"
    "runsvdir"
    "s6-svscan"
    "savecache"
    "save-keymaps"
    "save-termencoding"
    "staticroute"
    "swap"
    "swclock"
    "sysctl"
    "sysfs"
    "termencoding"
    "urandom"
  ];

in {

  options = {

    rc = {
      services = mkOption {
        default = {};
        type = types.attrsOf (types.submodule {
          enable = {
            type = types.bool;
            default = false;
            description = "Enable service spawning.";
          };
          runlevel = {
            type = types.enum [ "boot" "default" "nonetwork" "shutdown" "sysinit" ];
            default = "default";
            description = "Select runlevel the services should be activated in.";
          };
          description = {
            type = types.str;
            description = "Service description.";
          };
          command = {
            type = types.package;
            description = "Command to be started.";
          };
        });
        description = "Definition of system service.";
      };
    };

  };


  config = let

    rc_bool = enabled: if enabled then "YES" else "NO";

  in {

    environment.etc."init.d".source = pkgs.runCommand "rc-init.d" {
    } ''
      mkdir -p "$out"
      '';
  };

}