blob: 1b1e312538431c6635456e32cb1b8694391ab882 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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;
};
};
});
}
|