Files
sp-config/sp-modules/mumble/module.nix

118 lines
2.7 KiB
Nix
Raw Normal View History

2025-06-18 19:53:44 +03:00
{
config,
lib,
pkgs,
...
}:
2024-12-18 15:40:15 +03:00
let
domain = config.selfprivacy.domain;
sp = config.selfprivacy;
cfg = sp.modules.mumble;
in
{
options.selfprivacy.modules.mumble = {
2025-06-18 19:53:44 +03:00
enable =
(lib.mkOption {
default = false;
type = lib.types.bool;
description = "Enable Mumble";
})
// {
meta = {
type = "enable";
};
2024-12-18 15:40:15 +03:00
};
2025-06-18 19:53:44 +03:00
subdomain =
(lib.mkOption {
default = "mumble";
type = lib.types.strMatching "[A-Za-z0-9][A-Za-z0-9\-]{0,61}[A-Za-z0-9]";
description = "Subdomain";
})
// {
meta = {
widget = "subdomain";
type = "string";
regex = "[A-Za-z0-9][A-Za-z0-9\-]{0,61}[A-Za-z0-9]";
weight = 0;
};
2024-12-18 15:40:15 +03:00
};
2025-06-18 19:53:44 +03:00
location =
(lib.mkOption {
type = lib.types.str;
description = "Location";
})
// {
meta = {
type = "location";
};
2024-12-18 15:40:15 +03:00
};
2025-06-18 19:53:44 +03:00
appName =
(lib.mkOption {
default = "SelfPrivacy Mumble Service";
type = lib.types.str;
description = "The name of your Mumble server";
})
// {
meta = {
type = "string";
weight = 1;
};
2024-12-18 15:40:15 +03:00
};
2025-06-18 19:53:44 +03:00
welcomeText =
(lib.mkOption {
default = "Welcome to my Mumble server!";
type = lib.types.str;
description = "Welcome message";
})
// {
meta = {
type = "string";
weight = 2;
};
2024-12-18 15:40:15 +03:00
};
};
config = lib.mkIf cfg.enable {
fileSystems = lib.mkIf sp.useBinds {
"/var/lib/murmur" = {
device = "/volumes/${cfg.location}/murmur";
options = [
"bind"
"x-systemd.required-by=murmur.service"
2024-12-26 11:04:43 +03:00
"x-systemd.required-by=murmur-ensure-folder-ownership.service"
2024-12-18 15:40:15 +03:00
"x-systemd.before=murmur.service"
2024-12-26 11:04:43 +03:00
"x-systemd.before=murmur-ensure-folder-ownership.service"
2024-12-18 15:40:15 +03:00
];
};
};
services.murmur = {
enable = true;
openFirewall = true;
registerHostname = "${cfg.subdomain}.${domain}";
hostName = "${cfg.subdomain}.${domain}";
registerName = cfg.appName;
};
systemd = {
services = {
2025-06-18 19:53:44 +03:00
murmur = {
serviceConfig.Slice = "mumble.slice";
};
2024-12-26 11:04:43 +03:00
murmur-ensure-folder-ownership = {
description = "Ensure murmur folder ownership";
before = [ "murmur.service" ];
requiredBy = [ "murmur.service" ];
serviceConfig.Type = "oneshot";
serviceConfig.Slice = "mumble.slice";
path = with pkgs; [ coreutils ];
script = ''
chown -R murmur:murmur /var/lib/murmur
'';
};
2024-12-18 15:40:15 +03:00
};
slices.mumble = {
description = "Mumble service slice";
};
};
};
}