❄️ Dotfiles for our NixOS system configuration.
1{ config, ... }:
2
3{
4 age.secrets = {
5 minioCredentials = {
6 file = ../../secrets/minio.age;
7 mode = "600";
8 owner = "minio";
9 group = "minio";
10 };
11
12 outlineClientSecret = {
13 file = ../../secrets/outline/client-secret.age;
14 mode = "600";
15 owner = "outline";
16 group = "outline";
17 };
18 outlineMinioSecret = {
19 file = ../../secrets/outline/minio-password.age;
20 mode = "600";
21 owner = "outline";
22 group = "outline";
23 };
24 outlineSecretKey = {
25 file = ../../secrets/outline/secret-key.age;
26 mode = "600";
27 owner = "outline";
28 group = "outline";
29 };
30 outlineSMTPPassword = {
31 file = ../../secrets/outline/smtp-password.age;
32 mode = "600";
33 owner = "outline";
34 group = "outline";
35 };
36 outlineUtilsSecret = {
37 file = ../../secrets/outline/utils-secret.age;
38 mode = "600";
39 owner = "outline";
40 group = "outline";
41 };
42 };
43
44 services.outline = {
45 enable = true;
46 publicUrl = "https://wiki.sappho.systems";
47 port = 3300;
48 forceHttps = true;
49
50 secretKeyFile = config.age.secrets.outlineSecretKey.path;
51 utilsSecretFile = config.age.secrets.outlineUtilsSecret.path;
52
53 databaseUrl = "local";
54 redisUrl = "local";
55
56 maximumImportSize = 104857600;
57
58 storage = {
59 storageType = "s3";
60 accessKey = "minio";
61 secretKeyFile = config.age.secrets.outlineMinioSecret.path;
62 uploadBucketUrl = "https://minio.sappho.systems";
63 uploadBucketName = "outline";
64 region = "us-east-1";
65 uploadMaxSize = 104857600;
66 forcePathStyle = true;
67 acl = "private";
68 };
69
70 smtp = {
71 host = "smtp.purelymail.com";
72 port = 587;
73 username = "noreply@sapphic.moe";
74 replyEmail = "noreply@sapphic.moe";
75 passwordFile = config.age.secrets.outlineSMTPPassword.path;
76 fromEmail = "noreply@sapphic.moe";
77 secure = false;
78 };
79
80 oidcAuthentication = {
81 displayName = "Pocket ID";
82
83 clientId = "257b92c1-6b7f-41e9-a9c6-858a083295d8";
84 clientSecretFile = config.age.secrets.outlineClientSecret.path;
85
86 authUrl = "https://id.sappho.systems/authorize";
87 tokenUrl = "https://id.sappho.systems/api/oidc/token";
88 userinfoUrl = "https://id.sappho.systems/api/oidc/userinfo";
89
90 usernameClaim = "preferred_username";
91 scopes = [
92 "openid"
93 "profile"
94 "email"
95 "groups"
96 ];
97 };
98 };
99
100 services.minio = {
101 enable = true;
102 rootCredentialsFile = config.age.secrets.minioCredentials.path;
103 dataDir = [ "/var/lib/minio" ];
104 listenAddress = "0.0.0.0:9000";
105 consoleAddress = "0.0.0.0:9001";
106 };
107
108 services.caddy.virtualHosts."wiki.sappho.systems" = {
109 extraConfig = ''
110 import common
111 import tls_bunny
112 reverse_proxy http://localhost:3300
113 '';
114 };
115
116 services.caddy.virtualHosts."minio.sappho.systems" = {
117 extraConfig = ''
118 import common
119 import tls_bunny
120 reverse_proxy http://localhost:9000
121 '';
122 };
123}