98 lines
3.0 KiB
Nix
98 lines
3.0 KiB
Nix
{ config, lib, libS, ... }:
|
|
|
|
let
|
|
cfg = config.services.vaultwarden;
|
|
usingPostgres = cfg.dbBackend == "postgresql";
|
|
in
|
|
{
|
|
options = {
|
|
services.vaultwarden = {
|
|
configureNginx = libS.mkOpinionatedOption "configure nginx for the configured domain";
|
|
|
|
domain = lib.mkOption {
|
|
type = with lib.types; nullOr str;
|
|
default = null;
|
|
description = lib.mdDoc ''
|
|
The domain under which vaultwarden will be reachable.
|
|
'';
|
|
};
|
|
|
|
recommendedDefaults = libS.mkOpinionatedOption "set recommended default settings";
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
assertions = [ {
|
|
assertion = cfg.configureNginx -> cfg.domain != null;
|
|
message = ''
|
|
Setting services.vaultwarden.configureNginx to true requires configuring services.vaultwarden.domain!
|
|
'';
|
|
} ];
|
|
|
|
nixpkgs.overlays = lib.mkIf cfg.recommendedDefaults [
|
|
(final: prev: {
|
|
vaultwarden = prev.vaultwarden.overrideAttrs ({ patches ? [], ... }: {
|
|
patches = patches ++ [
|
|
# add eu region push support
|
|
(final.fetchpatch {
|
|
url = "https://github.com/dani-garcia/vaultwarden/pull/3752.diff";
|
|
hash = "sha256-QWbuUotNss1TkIIW6c54Y7U7u2yLg2xHopEngtNawcc=";
|
|
})
|
|
];
|
|
});
|
|
})
|
|
];
|
|
|
|
services = {
|
|
nginx = lib.mkIf cfg.configureNginx {
|
|
upstreams.vaultwarden.servers."127.0.0.1:${toString config.services.vaultwarden.config.ROCKET_PORT}" = { };
|
|
virtualHosts.${cfg.domain}.locations = {
|
|
"/".proxyPass = "http://vaultwarden";
|
|
"/notifications/hub" = {
|
|
proxyPass = "http://vaultwarden";
|
|
proxyWebsockets = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
postgresql = lib.mkIf usingPostgres {
|
|
enable = true;
|
|
ensureDatabases = [ "vaultwarden" ];
|
|
ensureUsers = [{
|
|
name = "vaultwarden";
|
|
ensureDBOwnership = true;
|
|
}];
|
|
};
|
|
|
|
vaultwarden.config = lib.mkMerge [
|
|
{
|
|
DATABASE_URL = lib.mkIf usingPostgres "postgresql:///vaultwarden?host=/run/postgresql";
|
|
DOMAIN = lib.mkIf (cfg.domain != null) "https://${cfg.domain}";
|
|
}
|
|
(lib.mkIf cfg.recommendedDefaults {
|
|
DATA_FOLDER = "/var/lib/vaultwarden"; # changes data directory
|
|
# TODO: change with 1.31.0 update
|
|
# ENABLE_WEBSOCKET = true;
|
|
LOG_LEVEL = "warn";
|
|
PASSWORD_ITERATIONS = 600000;
|
|
ROCKET_ADDRESS = "127.0.0.1";
|
|
ROCKET_PORT = lib.mkDefault 8222;
|
|
SIGNUPS_VERIFY = true;
|
|
TRASH_AUTO_DELETE_DAYS = 30;
|
|
WEBSOCKET_ADDRESS = "127.0.0.1";
|
|
WEBSOCKET_ENABLED = true;
|
|
WEBSOCKET_PORT = lib.mkDefault 8223;
|
|
})
|
|
];
|
|
};
|
|
|
|
systemd.services.vaultwarden = {
|
|
after = lib.mkIf usingPostgres [ "postgresql.service" ];
|
|
requires = lib.mkIf usingPostgres [ "postgresql.service" ];
|
|
serviceConfig = lib.mkIf cfg.recommendedDefaults {
|
|
StateDirectory = lib.mkForce "vaultwarden"; # modules defaults to bitwarden_rs
|
|
};
|
|
};
|
|
};
|
|
}
|