1

Add polkit module

This commit is contained in:
2023-05-27 14:58:56 +02:00
parent 5a29dc4fd8
commit 2aa20b78c9
3 changed files with 65 additions and 1 deletions

View File

@ -8,7 +8,8 @@
...
}: {
imports = [
./systemd-networkd
./containers
./polkit
./systemd-networkd
];
}

View File

@ -0,0 +1,42 @@
{
config,
nixosConfig,
lib,
mylib,
pkgs,
...
}:
with lib;
with mylib.modules; let
cfg = config.modules.polkit;
in {
options.modules.polkit = import ./options.nix {inherit lib mylib;};
config = mkIf cfg.enable {
security.polkit.enable = true;
# TODO: Don't hardcode subject.user == "christoph"
security.polkit.extraConfig = let
# Stuff that is non-negotiable
always-predicates = [
# TODO: Those should be set by the VPN/networkd module
"wg0-de-115.service"
"wg0-lu-16.service"
];
mkServicePredicate = service: "action.lookup(\"unit\") == \"${service}\"";
predicates = lib.pipe (cfg.allowed-system-services ++ always-predicates) [
(builtins.map mkServicePredicate)
(builtins.concatStringsSep " ||\n")
];
in ''
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" && subject.user == "christoph" && (
${predicates}
)) {
return polkit.Result.YES;
}
});
'';
};
}

View File

@ -0,0 +1,21 @@
{
lib,
mylib,
...
}:
with lib;
with mylib.modules; {
enable = mkEnableOpt "Polkit";
allowed-system-services = mkOption {
type = types.listOf types.str;
description = "System Services that should be manageable by a User without Root Password";
example = ''
[
"jellyfin"
"stablediffusion"
]
'';
default = [];
};
}