nixfiles/modules/nixos/rclone-serve.nix

73 lines
1.7 KiB
Nix
Raw Normal View History

{
config,
lib,
pkgs,
...
}:
with lib; let
2022-10-27 20:27:22 +01:00
cfg = config.services.rclone-serve;
makeNameSafe = name: builtins.replaceStrings ["/"] ["-"] name;
2022-10-27 20:27:22 +01:00
2022-11-03 06:44:02 +00:00
daemonService = serve_config:
mkMerge [
2022-11-03 06:44:02 +00:00
{
wantedBy = ["multi-user.target"];
2022-11-03 06:44:02 +00:00
after = ["network.target"];
wants = ["network.target"];
2022-11-03 06:44:02 +00:00
serviceConfig = {
Type = "simple";
Restart = "on-failure";
RestartSec = "5s";
User =
if serve_config.user != null
then "${serve_config.user}"
else "root";
2022-11-03 06:44:02 +00:00
ExecStart = "${pkgs.rclone}/bin/rclone serve ${serve_config.type} ${serve_config.remote} ${
concatStringsSep " " serve_config.extraArgs
}";
2022-11-03 06:44:02 +00:00
};
}
serve_config.serviceConfig
];
2022-10-27 20:27:22 +01:00
in {
options = {
services.rclone-serve = {
enable = mkOption {
type = types.bool;
default = false;
};
remotes = mkOption {
type = types.listOf (types.submodule {
options = {
remote = mkOption {type = types.str;};
type = mkOption {type = types.str;};
user = mkOption {type = types.str;};
serviceConfig = mkOption {type = types.attrs;};
2022-10-27 20:27:22 +01:00
extraArgs = mkOption {type = types.listOf types.str;};
2022-10-27 20:27:22 +01:00
};
});
default = [];
2022-10-27 20:27:22 +01:00
};
};
};
config = mkMerge [
(mkIf (cfg.enable && cfg.remotes != []) {
2022-10-27 20:27:22 +01:00
systemd.services = listToAttrs (map (remote: {
name = "rclone-serve-${makeNameSafe remote.type}-${
2022-11-03 06:44:02 +00:00
makeNameSafe remote.remote
2022-10-27 20:27:22 +01:00
}";
value = daemonService remote;
})
cfg.remotes);
2022-10-27 20:27:22 +01:00
})
];
}