My Nix Configuration

[hosts.marvin] remove unused files

+3 -5
hosts/marvin/default.nix
···
./hardware.nix
# Running Services
+
# keep-sorted start
./services/anubis.nix
-
# ./services/authentik.nix
./services/avahi.nix
./services/bots.nix
./services/deemix.nix
···
./services/git.nix
./services/golink.nix
./services/grafana.nix
-
# ./services/iceshrimp.nix
./services/jellyfin.nix
./services/matrix.nix
./services/miniflux.nix
-
./services/nginx.nix
./services/nextcloud
+
./services/nginx.nix
./services/pinchflat.nix
-
./services/pingvin-share.nix
./services/planka.nix
./services/pocket-id.nix
./services/podman.nix
./services/postgres.nix
./services/prometheus.nix
-
# ./services/redlib.nix
./services/scrutiny.nix
./services/syncthing.nix
./services/tailscale.nix
./services/tangled.nix
./services/vaultwarden.nix
./services/zfs.nix
+
# keep-sorted end
];
nix.settings.max-jobs = 12;
networking = {
-92
hosts/marvin/services/authentik.nix
···
-
{
-
config,
-
self,
-
...
-
}:
-
let
-
d = self.lib.data.services.authentik;
-
in
-
{
-
virtualisation.oci-containers.containers =
-
let
-
authentikVersion = "2025.4";
-
base = {
-
environmentFiles = [ config.age.secrets.authentik-env.path ];
-
extraOptions = [ "--network=authentik" ];
-
};
-
authentikBase = base // {
-
image = "ghcr.io/goauthentik/server:${authentikVersion}";
-
environment = {
-
AUTHENTIK_REDIS__HOST = "authentik-redict";
-
-
# Postgres Settings
-
AUTHENTIK_POSTGRESQL__HOST = "authentik-db";
-
AUTHENTIK_POSTGRESQL__PORT = "5432";
-
AUTHENTIK_POSTGRESQL__USER = "authentik";
-
AUTHENTIK_POSTGRESQL__NAME = "authentik";
-
AUTHENTIK_POSTGRESQL__PASSWORD = "\${PG_PASS}";
-
-
# Disable error reporting
-
AUTHENTIK_ERROR_REPORTING__ENABLED = "false";
-
-
# Avatars are an attribute based on an uploaded file
-
AUTHENTIK_AVATARS = "attributes.user.avatar";
-
-
# Email Settings
-
AUTHENTIK_EMAIL__HOST = "mail.pyrox.dev";
-
AUTHENTIK_EMAIL__USERNAME = "auth@pyrox.dev";
-
AUTHENTIK_EMAIL__PORT = "465";
-
AUTHENTIK_EMAIL__USE_TLS = "true";
-
AUTHENTIK_EMAIL__FROM = "PyroServ Auth <auth@pyrox.dev>";
-
};
-
};
-
authentikVols = [
-
"/var/lib/authentik/media:/media"
-
"/var/lib/authentik/templates:/templates"
-
];
-
in
-
{
-
authentik-db = base // {
-
image = "postgres:17-alpine";
-
volumes = [ "/var/lib/authentik/db:/var/lib/postgresql/data" ];
-
environment = {
-
POSTGRES_PASSWORD = "\${PG_PASS}";
-
POSTGRES_USER = "authentik";
-
POSTGRES_DB = "authentik";
-
};
-
};
-
authentik-redict = {
-
image = "registry.redict.io/redict:alpine";
-
extraOptions = [ "--network=authentik" ];
-
};
-
authentik-server = authentikBase // {
-
cmd = [ "server" ];
-
ports = [
-
"${toString d.port}:9000"
-
"6943:9443"
-
"9301:9300"
-
];
-
volumes = authentikVols ++ [ "/var/lib/authentik/custom.css:/web/dist/custom.css" ];
-
};
-
authentik-worker = authentikBase // {
-
cmd = [ "worker" ];
-
volumes = authentikVols ++ [ "/var/lib/authentik/certs:/certs" ];
-
};
-
authentik-ldap = base // {
-
image = "ghcr.io/goauthentik/ldap:${authentikVersion}";
-
ports = [
-
"389:3389"
-
"636:6636"
-
];
-
environment = {
-
AUTHENTIK_HOST = "https://${d.extUrl}";
-
AUTHENTIK_INSECURE = "false";
-
};
-
};
-
};
-
age.secrets.authentik-env = {
-
file = ./secrets/authentik-env.age;
-
owner = "thehedgehog";
-
group = "misc";
-
};
-
}
-5
hosts/marvin/services/bookstack.nix
···
-
{
-
services.bookstack = {
-
enable = true;
-
};
-
}
-97
hosts/marvin/services/iceshrimp.nix
···
-
{
-
config,
-
inputs,
-
pkgs,
-
lib,
-
self,
-
...
-
}:
-
let
-
-
d = self.lib.data.services.iceshrimp;
-
-
package = inputs.iceshrimp.packages.x86_64-linux.iceshrimp-pre.overrideAttrs rec {
-
version = "2023.12.8-pyrox1";
-
src = pkgs.fetchgit {
-
url = "https://iceshrimp.dev/pyrox/iceshrimp";
-
hash = "sha256-hxZ3rVVAiAMFAYhZ2o+WhlMuhjbt5EyHKOl1VyyL5RA=";
-
rev = "v${version}";
-
fetchLFS = true;
-
deepClone = false;
-
};
-
patches = [ ];
-
};
-
in
-
{
-
services.iceshrimp = {
-
inherit package;
-
enable = false;
-
secretConfig = config.age.secrets.iceshrimp-secret-config.path;
-
dbPasswordFile = config.age.secrets.iceshrimp-db-password.path;
-
createDb = true;
-
configureNginx.enable = false;
-
settings = {
-
inherit (d) port;
-
url = "https://${d.extUrl}";
-
accountDomain = "pyrox.dev";
-
redis.port = 6997;
-
maxNoteLength = 16384;
-
maxCaptionLength = 8192;
-
clusterLimit = 4;
-
deliverJobConcurrency = 192;
-
inboxJobConcurrency = 32;
-
deliverJobPerSec = 256;
-
inboxJobPerSec = 32;
-
outgoingAddressFamily = "dual";
-
# See the withdrawal patches for obliterate info
-
enableObliterate = true;
-
obliterateJobPerSec = 16;
-
obliterateJobMaxAttempts = 3;
-
mediaCleanup = {
-
cron = true;
-
maxAgeDays = 30;
-
cleanAvatars = true;
-
cleanHeaders = true;
-
};
-
htmlCache = {
-
ttl = "6h";
-
prewarm = true;
-
dbFallback = true;
-
};
-
wordMuteCache.ttl = "24h";
-
isManagedHosting = true;
-
email = {
-
managed = true;
-
address = "social@pyrox.dev";
-
host = "mail.pyrox.dev";
-
port = 465;
-
user = "social@pyrox.dev";
-
useImplicitSslTls = true;
-
};
-
objectStorage = {
-
managed = true;
-
baseUrl = "https://pool.jortage.com/socialpyroxdev";
-
bucket = "socialpyroxdev";
-
prefix = "mkmedia";
-
endpoint = "pool-api.jortage.com";
-
region = "jort";
-
useSsl = true;
-
connnectOverProxy = false;
-
setPublicReadOnUpload = false;
-
s3ForcePathStyle = true;
-
};
-
};
-
};
-
age.secrets = lib.mkIf config.services.iceshrimp.enable {
-
iceshrimp-secret-config = {
-
inherit (config.services.iceshrimp) group;
-
file = ./secrets/iceshrimp-secret-config.age;
-
owner = config.services.iceshrimp.user;
-
};
-
iceshrimp-db-password = {
-
file = ./secrets/iceshrimp-db-password.age;
-
owner = "postgres";
-
group = "postgres";
-
};
-
};
-
}
-11
hosts/marvin/services/minio.nix
···
-
{ config, ... }:
-
{
-
services.minio = {
-
enable = true;
-
region = "us-east-1";
-
browser = true;
-
listenAddress = ":6990";
-
consoleAddress = ":6991";
-
rootCredentialsFile = config.age.secrets.minio-root.path;
-
};
-
}
-130
hosts/marvin/services/pingvin-share.nix
···
-
{
-
config,
-
pkgs,
-
self',
-
self,
-
...
-
}:
-
let
-
d = self.lib.data.services.pingvin-share;
-
cfg = config.services.pingvin-share;
-
configFormat = pkgs.formats.yaml { };
-
configFile = configFormat.generate "config.yaml" {
-
general = {
-
appName = "dishNet Share";
-
appUrl = "https://share.pyrox.dev";
-
secureCookies = "true";
-
showHomePage = "false";
-
};
-
share = {
-
allowRegistration = "false";
-
allowUnauthenticatedShares = "false";
-
maxSize = "10000000000";
-
};
-
email.enableShareEmailRecipients = "true";
-
smtp = {
-
enabled = "true";
-
host = "mail.pyrox.dev";
-
port = "465";
-
email = "share@pyrox.dev";
-
username = "share@pyrox.dev";
-
password = "SMTP_PASSWORD";
-
};
-
ldap.enabled = "false";
-
legal.enabled = "false";
-
s3.enabled = "false";
-
oauth = {
-
ignoreTotp = "true";
-
oidc-enabled = "true";
-
oidc-clientSecret = "CLIENT_SECRET";
-
oidc-clientId = "d83006a6-9b08-47eb-af56-418065db09b5";
-
oidc-discoveryUri = "https://auth.pyrox.dev/.well-known/openid-configuration";
-
oidc-signOut = "false";
-
oidc-scope = "openid email profile groups";
-
oidc-rolePath = "groups";
-
oidc-roleAdminAccess = "admins";
-
};
-
initUser.enabled = false;
-
};
-
in
-
{
-
virtualisation.oci-containers.containers = {
-
pingvin-share-server = {
-
image = "ghcr.io/stonith404/pingvin-share:latest";
-
ports = [
-
"${toString d.port}:3000"
-
"${toString d.be-port}:8080"
-
];
-
volumes = [
-
"/var/lib/pingvin-share/data:/opt/app/backend/data"
-
"/var/lib/pingvin-share/data/images:/opt/app/frontend/public/img"
-
"/var/lib/pingvin-share/config.yaml:/opt/app/config.yaml"
-
];
-
environment = {
-
API_URL = "https://share.pyrox.dev";
-
PUID = "962";
-
PGID = "959";
-
};
-
};
-
};
-
users.users.pingvin = {
-
uid = 962;
-
inherit (cfg) group;
-
isSystemUser = true;
-
};
-
users.groups.pingvin = {
-
gid = 959;
-
};
-
-
services = {
-
pingvin-share = {
-
enable = false;
-
backend.port = d.be-port;
-
frontend.port = d.port;
-
hostname = "share.pyrox.dev";
-
https = true;
-
};
-
anubis.instances = {
-
pingvin-share-be = {
-
settings = {
-
BIND = ":${toString d.be-anubis}";
-
POLICY_FNAME = "${self'.packages.anubis-files}/policies/pingvin-share.yaml";
-
TARGET = "http://localhost:${toString d.be-port}";
-
};
-
};
-
pingvin-share-fe = {
-
settings = {
-
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${self'.packages.anubis-files}/policies/pingvin-share.yaml";
-
TARGET = "http://localhost:${toString d.port}";
-
};
-
};
-
};
-
};
-
systemd.services.init-pingvin-config = {
-
enable = true;
-
description = "Pingvin Share configuration setup";
-
wantedBy = [ "multi-user.target" ];
-
before = [
-
"docker-pingvin-share-server.service"
-
];
-
path = [ pkgs.gnused ];
-
script = ''
-
rm ${cfg.dataDir}/config.yaml
-
cp ${configFile} ${cfg.dataDir}/config.yaml
-
sed -i "s/SMTP_PASSWORD/\"$SMTP_PASSWORD\"/" ${cfg.dataDir}/config.yaml
-
sed -i "s/CLIENT_SECRET/\"$CLIENT_SECRET\"/" ${cfg.dataDir}/config.yaml
-
'';
-
serviceConfig = {
-
EnvironmentFile = config.age.secrets.pingvin-secrets.path;
-
User = cfg.user;
-
Group = cfg.group;
-
ReadWritePaths = [ "${cfg.dataDir}" ];
-
};
-
};
-
age.secrets.pingvin-secrets = {
-
file = ./secrets/pingvin-secrets.age;
-
owner = cfg.user;
-
inherit (cfg) group;
-
};
-
}
-5
hosts/marvin/services/prosody.nix
···
-
{
-
services.prosody = {
-
enable = true;
-
};
-
}
-12
hosts/marvin/services/redlib.nix
···
-
{ pkgs, self, ... }:
-
let
-
d = self.lib.data.services.redlib;
-
in
-
{
-
services.libreddit = {
-
inherit (d) port;
-
enable = true;
-
package = pkgs.redlib;
-
openFirewall = false;
-
};
-
}
-23
hosts/marvin/services/webmentiond.nix
···
-
{ config, self, ... }:
-
let
-
d = self.lib.data.services.webmentiond;
-
p = toString d.port;
-
in
-
{
-
virtualisation.oci-containers.containers.webmentiond = {
-
image = "zerok/webmentiond:latest";
-
volumes = [ "/var/lib/webmentiond:/data" ];
-
environmentFiles = [ config.age.secrets.webmentiond-env.path ];
-
ports = [ "${p}:${p}" ];
-
cmd = [
-
"--addr 0.0.0.0:${p}"
-
"--public-url https://${d.extUrl}"
-
"--auth-admin-emails pyrox@pyrox.dev"
-
];
-
};
-
config.age.secrets = {
-
webmentiond-env.path = ./secrets/webmentiond-env.age;
-
owner = "thehedgehog";
-
group = "misc";
-
};
-
}