nixpkgs/nixos/modules/services/misc/weechat.nix
Felix Singer 0def76f96c nixos/weechat: Use parameter instead of env variable for state dir
The environment variable hides the actual state directory of weechat in
systemctl. To make it more obvious, use the equivalent CLI parameter.

This doesn't change the current behaviour.

Signed-off-by: Felix Singer <felixsinger@posteo.net>
2025-02-05 02:49:20 +01:00

68 lines
1.5 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.weechat;
in
{
options.services.weechat = {
enable = lib.mkEnableOption "weechat";
root = lib.mkOption {
description = "Weechat state directory.";
type = lib.types.str;
default = "/var/lib/weechat";
};
sessionName = lib.mkOption {
description = "Name of the `screen` session for weechat.";
default = "weechat-screen";
type = lib.types.str;
};
binary = lib.mkOption {
type = lib.types.path;
description = "Binary to execute.";
default = "${pkgs.weechat}/bin/weechat";
defaultText = lib.literalExpression ''"''${pkgs.weechat}/bin/weechat"'';
example = lib.literalExpression ''"''${pkgs.weechat}/bin/weechat-headless"'';
};
};
config = lib.mkIf cfg.enable {
users = {
groups.weechat = { };
users.weechat = {
createHome = true;
group = "weechat";
home = cfg.root;
isSystemUser = true;
};
};
systemd.services.weechat = {
serviceConfig = {
User = "weechat";
Group = "weechat";
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";
source = "${pkgs.screen}/bin/screen";
};
};
meta.doc = ./weechat.md;
}