nixos/weechat: Allow switching between TUI and headless mode

weechat can run in TUI or headless mode. Introduce the option
`headless` for specifying that. Based on the setting, it configures
the appropriate binary in the `binary` option and it also configures the
systemd unit accordingly. `headless` is disabled by default.

This doesn't change the current behaviour.

Signed-off-by: Felix Singer <felixsinger@posteo.net>

Changed files
+16 -3
nixos
modules
services
+16 -3
nixos/modules/services/misc/weechat.nix
···
binary = lib.mkOption {
type = lib.types.path;
description = "Binary to execute.";
-
default = "${cfg.package}/bin/weechat";
defaultText = lib.literalExpression ''"''${cfg.package}/bin/weechat"'';
example = lib.literalExpression ''"''${cfg.package}/bin/weechat-headless"'';
};
};
config = lib.mkIf cfg.enable {
···
systemd.services.weechat = {
serviceConfig = {
User = "weechat";
Group = "weechat";
StateDirectory = lib.mkIf (cfg.root == "/var/lib/weechat") "weechat";
StateDirectoryMode = 750;
RemainAfterExit = "yes";
};
-
script = "exec ${config.security.wrapperDir}/screen -Dm -S ${cfg.sessionName} ${cfg.binary} --dir ${cfg.root}";
wantedBy = [ "multi-user.target" ];
wants = [ "network.target" ];
};
-
security.wrappers.screen = {
setuid = true;
owner = "root";
group = "root";
···
binary = lib.mkOption {
type = lib.types.path;
description = "Binary to execute.";
+
default =
+
if (!cfg.headless) then "${cfg.package}/bin/weechat" else "${cfg.package}/bin/weechat-headless";
defaultText = lib.literalExpression ''"''${cfg.package}/bin/weechat"'';
example = lib.literalExpression ''"''${cfg.package}/bin/weechat-headless"'';
};
+
+
headless = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = ''
+
Allows specifying if weechat should run in TUI or headless mode.
+
'';
+
};
};
config = lib.mkIf cfg.enable {
···
systemd.services.weechat = {
serviceConfig = {
+
Type = "simple";
User = "weechat";
Group = "weechat";
+
ExecStart = lib.mkIf (cfg.headless) "${cfg.binary} --dir ${cfg.root} --stdout";
StateDirectory = lib.mkIf (cfg.root == "/var/lib/weechat") "weechat";
StateDirectoryMode = 750;
RemainAfterExit = "yes";
};
+
script =
+
lib.mkIf (!cfg.headless)
+
"exec ${config.security.wrapperDir}/screen -Dm -S ${cfg.sessionName} ${cfg.binary} --dir ${cfg.root}";
wantedBy = [ "multi-user.target" ];
wants = [ "network.target" ];
};
+
security.wrappers.screen = lib.mkIf (!cfg.headless) {
setuid = true;
owner = "root";
group = "root";