-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmodule.nix
129 lines (111 loc) · 3.27 KB
/
module.nix
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
{ self }:
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.services.openhab;
environment = {
OPENHAB_HOME = "${cfg.package}";
OPENHAB_CONF = "/var/lib/openhab/conf";
OPENHAB_RUNTIME = "${cfg.package}/runtime";
OPENHAB_USERDATA = "/var/lib/openhab/userdata";
OPENHAB_LOGDIR = "/var/lib/openhab/logs";
OPENHAB_BACKUPS = "/var/lib/openhab/backups";
OPENHAB_VERSION = "${cfg.package.version}";
JAVA_HOME = "${cfg.javaPackage}";
};
cliPackage = pkgs.callPackage ./cli.nix {
inherit environment;
};
finalPackage =
if cfg.withAddons == null
then cfg.package
else cfg.package.override { inherit (cfg) withAddons; };
in
{
options = {
services.openhab = with types; {
enable = mkEnableOption "openHAB";
package = mkOption {
default = self.packages.${pkgs.stdenv.hostPlatform.system}.openhab;
defaultText = "self.packages.\${pkgs.stdenv.hostPlatform.system}.openhab";
description = "openHAB package to use.";
type = package;
};
javaPackage = mkOption {
default = pkgs.openjdk11;
defaultText = "pkgs.openjdk11";
description = "JAVA package to use.";
type = package;
};
withAddons = mkOption {
type = nullOr bool;
default = null;
description = ''
Configure the addon inclusion for the openhab package. When `null` (default) use the
package default, otherwise override the `withAddons` package argument.
'';
};
user = mkOption {
type = str;
default = "openhab";
description = ''
User the openhab daemon should execute under.
'';
};
group = mkOption {
type = str;
default = "openhab";
description = ''
Group the openhab daemon should execute under.
'';
};
};
};
config = mkIf cfg.enable {
environment.systemPackages = [
cliPackage
];
systemd.services.openhab = {
path = [
cfg.javaPackage
pkgs.gawk
pkgs.procps
];
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
ExecStartPre = [
"${finalPackage}/runtime/bin/copy-dist /var/lib/openhab"
"!${finalPackage}/runtime/bin/update"
];
ExecStart = [ "${finalPackage}/runtime/bin/karaf \${OPENHAB_STARTMODE}" ];
ExecStop = [ "${finalPackage}/runtime/bin/karaf stop" ];
Environment = mapAttrsToList (n: v: "${n}=${v}") environment ++ [
"OPENHAB_STARTMODE=daemon"
];
StateDirectory = "openhab";
SuccessExitStatus = "0 143";
RestartSec = 60;
StartLimitIntervalSec = 600;
StartLimitBurst = 3;
Restart = "on-failure";
TimeoutStopSec = 120;
LimitNOFILE = 102642;
};
};
users.users = optionalAttrs (cfg.user == "openhab") {
openhab = {
group = cfg.group;
home = "/var/lib/openhab";
isSystemUser = true;
description = "Daemon user for the openhab service";
};
};
users.groups = optionalAttrs (cfg.group == "openhab") {
openhab = { };
};
};
}