yep, more dotfiles

server: add miniflux rss server

wiro.world 127d231f bc7a2747

verified
Changed files
+52 -1
nixos
profiles
secrets
+42 -1
nixos/profiles/server.nix
···
vaultwarden-port = 3011;
vaultwarden-hostname = "vault.wiro.world";
+
miniflux-port = 3012;
+
miniflux-hostname = "news.wiro.world";
+
prometheus-port = 9001;
prometheus-node-exporter-port = 9002;
headscale-metrics-port = 9003;
···
virtualHosts.${vaultwarden-hostname}.extraConfig = ''
reverse_proxy http://localhost:${toString vaultwarden-port}
+
'';
+
+
virtualHosts.${miniflux-hostname}.extraConfig = ''
+
reverse_proxy http://localhost:${toString miniflux-port}
'';
};
···
];
};
-
identity_providers.oidc = {
enforce_pkce = "always";
clients = [
···
redirect_uris = [ "https://login.tailscale.com/a/oauth_response" ];
}
+
{
+
client_name = "Miniflux";
+
client_id = "miniflux";
+
client_secret = "$pbkdf2-sha256$310000$uPqbWfCOBXDY6nV1vsx3uA$HOWG2hL.c/bs9Dwaee3b9DxjH7KFO.SaZMbasXV9Vdw";
+
+
redirect_uris = [ "https://${miniflux-hostname}/oauth2/oidc/callback" ];
+
}
];
};
···
# SMTP_PASSWORD = ...; # Via secret env
SMTP_FROM = "bitwarden@wiro.world";
SMTP_FROM_NAME = "Bitwarden wiro.world";
+
};
+
};
+
+
users.users.miniflux = { isSystemUser = true; group = "miniflux"; };
+
users.groups.miniflux = { };
+
age.secrets.miniflux-oidc-secret = { file = ../../secrets/miniflux-oidc-secret.age; owner = "miniflux"; };
+
services.miniflux = {
+
enable = true;
+
+
createDatabaseLocally = true;
+
adminCredentialsFile = config.age.secrets.miniflux-oidc-secret.path;
+
config = {
+
BASE_URL = "https://${miniflux-hostname}/";
+
LISTEN_ADDR = "127.0.0.1:${toString miniflux-port}";
+
+
# TODO: scrape metrics endpoint with prometheus
+
+
OAUTH2_PROVIDER = "oidc";
+
OAUTH2_OIDC_PROVIDER_NAME = "wiro.world SSO";
+
OAUTH2_CLIENT_ID = "miniflux";
+
OAUTH2_CLIENT_SECRET_FILE = config.age.secrets.miniflux-oidc-secret.path;
+
OAUTH2_REDIRECT_URL = "https://${miniflux-hostname}/oauth2/oidc/callback";
+
OAUTH2_OIDC_DISCOVERY_ENDPOINT = "https://auth.wiro.world";
+
OAUTH2_USER_CREATION = 1;
+
DISABLE_LOCAL_AUTH = 1;
+
+
# NetNewsWire is a very good iOS oss client that integrates well
+
# https://b.j4.lc/2025/05/05/setting-up-netnewswire-with-miniflux/
};
};
};
+9
secrets/miniflux-oidc-secret.age
···
+
age-encryption.org/v1
+
-> ssh-ed25519 sMF1bg E4UVPOuq5ZUSxGvIvr0Tod9PQRqDdqHu2Byv4fKi2io
+
FcdCyfLmRCmK5rmoLQ/m1KOJe9Etu9N/GHCM5lWCIPE
+
-> ssh-ed25519 SmMcWg wrKv3V6uSLnWQqIp65Rgi0qv7lQtyOXaxnahMo+s3EU
+
mXsJ1CbS3pzstf3xaWWF150+aXxW2kY2J5kAZWqtl+A
+
-> ssh-ed25519 Q8rMFA 91npFfTkw9Ur6aZp/pLzLUOIwwPJ9OA1peaZyTlROBU
+
12sib8HLjvgN06X6H0/AN4wMewQ8xup813DauZKQ+QY
+
--- /AGwAMAsPvvuRH6PPNrizBCsJedclYzdj6Kq4V3mx0o
+
zN��0�=�YP������rլ�!U�n;���n���/��}mCo�F��������ž!z���r������)u��o�3�>��>Z�f�񡤙1Ň ����
+1
secrets/secrets.nix
···
"tuwunel-registration-tokens.age".publicKeys = deploy;
# Defines `SMTP_PASSWORD`
"vaultwarden-env.age".publicKeys = deploy;
+
"miniflux-oidc-secret.age".publicKeys = deploy;
# Not used in config but useful
"pgp-ca5e.age".publicKeys = users;