summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/backup
diff options
context:
space:
mode:
authornicoo <nicoo@mur.at>2023-10-22 19:38:22 +0000
committernicoo <nicoo@mur.at>2023-11-05 20:15:18 +0000
commit19af28537bb59c849a666fce27e15d1f33fb03ee (patch)
tree8c3186369426e82dfb192f984057543ec930d110 /nixos/modules/services/backup
parenta8e6f0a81a99c613512082be3588c62f0aa614c0 (diff)
nixos/btrbk: Support both Miller's sudo and sudo-rs
Diffstat (limited to 'nixos/modules/services/backup')
-rw-r--r--nixos/modules/services/backup/btrbk.nix35
1 files changed, 18 insertions, 17 deletions
diff --git a/nixos/modules/services/backup/btrbk.nix b/nixos/modules/services/backup/btrbk.nix
index 9b7f1566eb1e..1e90ef54d33f 100644
--- a/nixos/modules/services/backup/btrbk.nix
+++ b/nixos/modules/services/backup/btrbk.nix
@@ -47,8 +47,21 @@ let
then [ "${name} ${value}" ]
else concatLists (mapAttrsToList (genSection name) value);
+ sudoRule = {
+ users = [ "btrbk" ];
+ commands = [
+ { command = "${pkgs.btrfs-progs}/bin/btrfs"; options = [ "NOPASSWD" ]; }
+ { command = "${pkgs.coreutils}/bin/mkdir"; options = [ "NOPASSWD" ]; }
+ { command = "${pkgs.coreutils}/bin/readlink"; options = [ "NOPASSWD" ]; }
+ # for ssh, they are not the same than the one hard coded in ${pkgs.btrbk}
+ { command = "/run/current-system/sw/bin/btrfs"; options = [ "NOPASSWD" ]; }
+ { command = "/run/current-system/sw/bin/mkdir"; options = [ "NOPASSWD" ]; }
+ { command = "/run/current-system/sw/bin/readlink"; options = [ "NOPASSWD" ]; }
+ ];
+ };
+
sudo_doas =
- if config.security.sudo.enable then "sudo"
+ if config.security.sudo.enable || config.security.sudo-rs.enable then "sudo"
else if config.security.doas.enable then "doas"
else throw "The btrbk nixos module needs either sudo or doas enabled in the configuration";
@@ -157,22 +170,10 @@ in
};
config = mkIf (sshEnabled || serviceEnabled) {
environment.systemPackages = [ pkgs.btrbk ] ++ cfg.extraPackages;
- security.sudo = mkIf (sudo_doas == "sudo") {
- extraRules = [
- {
- users = [ "btrbk" ];
- commands = [
- { command = "${pkgs.btrfs-progs}/bin/btrfs"; options = [ "NOPASSWD" ]; }
- { command = "${pkgs.coreutils}/bin/mkdir"; options = [ "NOPASSWD" ]; }
- { command = "${pkgs.coreutils}/bin/readlink"; options = [ "NOPASSWD" ]; }
- # for ssh, they are not the same than the one hard coded in ${pkgs.btrbk}
- { command = "/run/current-system/sw/bin/btrfs"; options = [ "NOPASSWD" ]; }
- { command = "/run/current-system/sw/bin/mkdir"; options = [ "NOPASSWD" ]; }
- { command = "/run/current-system/sw/bin/readlink"; options = [ "NOPASSWD" ]; }
- ];
- }
- ];
- };
+
+ security.sudo.extraRules = mkIf (sudo_doas == "sudo") [ sudoRule ];
+ security.sudo-rs.extraRules = mkIf (sudo_doas == "sudo") [ sudoRule ];
+
security.doas = mkIf (sudo_doas == "doas") {
extraRules = let
doasCmdNoPass = cmd: { users = [ "btrbk" ]; cmd = cmd; noPass = true; };