2023-09-16 15:34:27 +08:00
|
|
|
inputs:
|
|
|
|
{
|
2023-10-03 20:11:43 +08:00
|
|
|
options.nixos.services.vaultwarden = let inherit (inputs.lib) mkOption types; in
|
2023-09-16 15:34:27 +08:00
|
|
|
{
|
2023-10-03 20:11:43 +08:00
|
|
|
enable = mkOption { type = types.bool; default = false; };
|
|
|
|
autoStart = mkOption { type = types.bool; default = true; };
|
|
|
|
port = mkOption { type = types.ints.unsigned; default = 8000; };
|
|
|
|
websocketPort = mkOption { type = types.ints.unsigned; default = 3012; };
|
|
|
|
hostname = mkOption { type = types.str; default = "vaultwarden.chn.moe"; };
|
2023-09-16 15:34:27 +08:00
|
|
|
};
|
|
|
|
config =
|
|
|
|
let
|
2023-10-03 20:11:43 +08:00
|
|
|
inherit (inputs.config.nixos.services) vaultwarden;
|
2023-09-16 15:34:27 +08:00
|
|
|
inherit (builtins) listToAttrs;
|
2023-10-03 20:11:43 +08:00
|
|
|
inherit (inputs.lib) mkIf;
|
|
|
|
in mkIf vaultwarden.enable
|
|
|
|
{
|
|
|
|
services.vaultwarden =
|
|
|
|
{
|
|
|
|
enable = true;
|
|
|
|
dbBackend = "postgresql";
|
|
|
|
config =
|
2023-09-16 15:34:27 +08:00
|
|
|
{
|
2023-10-03 20:11:43 +08:00
|
|
|
DATA_FOLDER = "/var/lib/vaultwarden";
|
|
|
|
WEB_VAULT_ENABLED = true;
|
|
|
|
WEBSOCKET_ENABLED = true;
|
|
|
|
ROCKET_PORT = vaultwarden.port;
|
|
|
|
WEBSOCKET_PORT = toString vaultwarden.websocketPort;
|
|
|
|
SIGNUPS_VERIFY = true;
|
|
|
|
DOMAIN = "https://${vaultwarden.hostname}";
|
|
|
|
SMTP_HOST = "mail.chn.moe";
|
|
|
|
SMTP_FROM = "bot@chn.moe";
|
|
|
|
SMTP_FROM_NAME = "vaultwarden";
|
|
|
|
SMTP_SECURITY = "force_tls";
|
|
|
|
SMTP_USERNAME = "bot@chn.moe";
|
|
|
|
};
|
|
|
|
environmentFile = inputs.config.sops.templates."vaultwarden.env".path;
|
|
|
|
};
|
|
|
|
sops =
|
|
|
|
{
|
|
|
|
templates."vaultwarden.env" =
|
|
|
|
let
|
|
|
|
serviceConfig = inputs.config.systemd.services.vaultwarden.serviceConfig;
|
|
|
|
placeholder = inputs.config.sops.placeholder;
|
|
|
|
in
|
2023-09-16 15:34:27 +08:00
|
|
|
{
|
2023-10-03 20:11:43 +08:00
|
|
|
owner = serviceConfig.User;
|
|
|
|
group = serviceConfig.Group;
|
|
|
|
content =
|
|
|
|
''
|
|
|
|
DATABASE_URL=postgresql://vaultwarden:${placeholder."postgresql/vaultwarden"}@localhost/vaultwarden
|
|
|
|
ADMIN_TOKEN=${placeholder."vaultwarden/admin_token"}
|
|
|
|
SMTP_PASSWORD=${placeholder."mail/bot"}
|
|
|
|
'';
|
2023-09-16 15:34:27 +08:00
|
|
|
};
|
2023-10-03 20:11:43 +08:00
|
|
|
secrets = listToAttrs (map
|
|
|
|
(secret: { name = secret; value = {}; })
|
|
|
|
[ "vaultwarden/admin_token" "mail/bot" ]);
|
|
|
|
};
|
|
|
|
systemd.services.vaultwarden =
|
|
|
|
{
|
|
|
|
enable = vaultwarden.autoStart;
|
|
|
|
after = [ "postgresql.service" ];
|
|
|
|
};
|
|
|
|
nixos.services.postgresql = { enable = true; instances.vaultwarden = {}; };
|
|
|
|
};
|
2023-09-16 15:34:27 +08:00
|
|
|
}
|