camasca/modules/reposilite.nix

64 lines
1.5 KiB
Nix

{
lib,
config,
pkgs,
...
}: let
cfg = config.services.reposilite;
in {
options.services.reposilite = {
enable = lib.mkEnableOption "reposilite";
package = lib.mkPackageOption pkgs "reposilite" {};
environmentFile = lib.mkOption {
description = lib.mdDoc ''
Environment file as defined in {manpage}`systemd.exec(5)`
'';
type = lib.types.nullOr lib.types.path;
default = null;
example = lib.literalExpression ''
"/run/agenix.d/1/reposilite"
'';
};
};
config = lib.mkIf cfg.enable {
users = {
users.reposilite = {
isSystemUser = true;
group = "reposilite";
};
groups.reposilite = {};
};
systemd.services."reposilite" = {
enable = true;
wantedBy = lib.mkDefault ["multi-user.target"];
after = lib.mkDefault ["network.target"];
script = ''
${lib.getExe cfg.package}
'';
serviceConfig = {
Type = "simple";
Restart = "always";
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
StateDirectory = "reposilite";
StateDirectoryMode = "0700";
WorkingDirectory = "/var/lib/reposilite";
User = "reposilite";
Group = "reposilite";
LimitNOFILE = "1048576";
PrivateTmp = true;
PrivateDevices = true;
ProtectHome = true;
ProtectSystem = "strict";
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
};
};
};
}