diff options
Diffstat (limited to 'services/wakapi.nix')
| -rw-r--r-- | services/wakapi.nix | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/services/wakapi.nix b/services/wakapi.nix new file mode 100644 index 0000000..1b1e312 --- /dev/null +++ b/services/wakapi.nix @@ -0,0 +1,110 @@ +{config, lib, pkgs, ...}: +let + cfg = config.wilkuu.services.wakapi; + hostname = config.networking.hostName; + service_user = config.systemd.services.wakapi.serviceConfig.User; +in +{ + options.wilkuu.services.wakapi = with lib; { + domain = mkOption { + type = types.str; + default = "wakapi.${hostname}.local"; + example = "wakapi.wilkuu.xyz"; + description = "Domain for http connections."; + }; + email = mkOption { + type = types.str; + default = "wakapi@${hostname}.local"; + example = "noreply@wilkuu.xyz"; + description = "Mailer address"; + }; + doACME = mkEnableOption "Enable ACME for wakapi here"; + enable = mkEnableOption "Enable the wakapi service"; + dataDir = mkOption { + type = types.path; + description = "Storage localtion for wakapi data"; + default = "/srv/data/wakapi"; + example = "/srv/data/wakapi"; + }; + }; + + config = lib.mkIf cfg.enable (let + sopsPath = ../secrets/${hostname}/wakapi.yaml; + secrets = ["password_salt"]; + toSops = (sname: "wakapi/${sname}"); + in { + networking.hosts = { + "127.0.0.1" = [cfg.domain]; + }; + + sops.secrets = + (lib.genAttrs (map toSops secrets) + (name: { + sopsFile = sopsPath; + mode = "0440"; + owner = service_user; + })); + + services.nginx.virtualHosts."${cfg.domain}" = { + enableACME = cfg.doACME; + addSSL = cfg.doACME; + locations."/" = { + proxyPass = "http://localhost:3111"; + recommendedProxySettings = true; + }; + }; + + wilkuu.services.mysql = let + in { + unix_users = [service_user]; + databases.wakapi = { + enable = true; + allowedUsers = [service_user]; + }; + }; + + services.wakapi = { + enable = true; + stateDir = cfg.dataDir; + passwordSaltFile = config.sops.secrets.wakapi/password_salt; + settings = { + server = { + port = 3111; + public_url = cfg.domain; + }; + app = { + leaderboard_enabled = false; + leaderboard_require_auth = true; + inactive_days = 7; # time of previous days within a user must have logged in to be considered active + # go time format strings to format human-readable dates + # for details, check https://pkg.go.dev/time#Time.Format + date_format= "Mon, 02 Jan 2006"; + datetime_format= "Mon, 02 Jan 2006 15:04"; + }; + db = { + socket= "/var/lib/mysql/mysql.sock"; + name = "wakapi"; + dialect = "mysql"; + charset = "utf8mb4"; + }; + security = { + insecure_cookies = false; + trust_reverse_proxy_ips= "127.0.0.1"; + }; + mail = { + # FIXME: Add email + enabled = false; + provider = "smtp"; + sender = "<Wakapi ${cfg.email}>"; + smtp = { + }; + }; + }; + database = { + dialect = "mysql"; + createLocally = false; + }; + + }; + }); +} |
