niksos/modules/services/anki-sync-server.nix

61 lines
1.8 KiB
Nix
Raw Normal View History

2023-11-25 17:12:09 +01:00
{
config,
lib,
pkgs,
...
2024-05-05 12:38:40 +02:00
}: let
2023-11-25 17:12:09 +01:00
cfg = config.services.anki-sync-server;
2024-05-05 12:38:40 +02:00
inherit (lib) getExe' mkEnableOption mkIf mkOption;
2024-05-05 12:38:40 +02:00
inherit (lib.types) bool package port str;
2023-11-25 17:12:09 +01:00
in {
options.services.anki-sync-server = {
enable = mkEnableOption (lib.mdDoc "anki-sync-server");
package = mkOption {
2024-05-05 12:38:40 +02:00
type = package;
2023-11-25 17:12:09 +01:00
default = pkgs.anki-bin;
description = lib.mdDoc "The package to use for the anki sync server.";
};
host = mkOption {
2024-05-05 12:38:40 +02:00
type = str;
2023-11-25 17:12:09 +01:00
default = "localhost";
description = lib.mdDoc "anki-sync-server host";
};
port = mkOption {
2024-05-05 12:38:40 +02:00
type = port;
2023-11-25 17:12:09 +01:00
default = 27701;
description = lib.mdDoc "anki-sync-server port";
};
openFirewall = mkOption {
default = false;
2024-05-05 12:38:40 +02:00
type = bool;
2023-11-25 17:12:09 +01:00
description = lib.mdDoc "Whether to open the firewall for the specified port.";
};
};
config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
systemd.services.anki-sync-server = {
description = "Selfhosted Anki sync server.";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
path = [ cfg.package ];
serviceConfig = {
Type = "simple";
DynamicUser = true;
StateDirectory = "anki-sync-server";
ExecStart = "${getExe' cfg.package "anki"} --syncserver";
2023-11-25 17:12:09 +01:00
Environment = ''SYNC_BASE="/var/lib/anki-sync-server" SYNC_HOST="${cfg.host}" SYNC_PORT="${cfg.port}"'';
EnvironmentFile = config.age.secrets.anki-user-credentials.path;
Restart = "always";
};
};
};
}