nixos/modules/server/fedi/akkoma/default.nix

116 lines
3.5 KiB
Nix
Raw Normal View History

2025-01-02 14:49:22 +04:00
{ config, lib, pkgs, ... }:
2025-01-02 12:27:19 +04:00
with lib;
2025-01-02 17:37:31 +04:00
let
cfg = config.void.server.fedi.akkoma;
inherit ((pkgs.formats.elixirConf { }).lib) mkRaw mkMap;
2025-01-02 12:27:19 +04:00
in {
options.void.server.fedi.akkoma = { enable = mkEnableOption false; };
# :(
config = mkIf cfg.enable {
2025-01-02 14:47:50 +04:00
security.acme.certs = {
2025-01-02 14:58:47 +04:00
"social.sako.lol" = {
credentialsFile = "/srv/secrets/porkbun";
dnsProvider = "porkbun";
webroot = null;
};
"media.social.sako.lol" = {
credentialsFile = "/srv/secrets/porkbun";
dnsProvider = "porkbun";
webroot = null;
};
2025-01-02 14:47:50 +04:00
};
2025-01-02 12:27:19 +04:00
services = {
akkoma = {
enable = true;
package = pkgs.akkoma;
2025-01-02 15:53:53 +04:00
extraPackages =
builtins.attrValues { inherit (pkgs) ffmpeg exiftool imagemagick; };
2025-01-02 14:47:50 +04:00
frontends = {
primary = {
package = pkgs.akkoma-frontends.akkoma-fe;
name = "akkoma-fe";
ref = "stable";
};
admin = {
package = pkgs.akkoma-frontends.admin-fe;
name = "admin-fe";
ref = "stable";
};
};
nginx = {
enableACME = true;
forceSSL = true;
2025-01-02 14:48:49 +04:00
# recommendedTlsSettings = true;
# recommendedOptimisation = true;
# recommendedGzipSettings = true;
2025-01-02 14:47:50 +04:00
};
config = {
":pleroma" = {
":instance" = {
name = "v0id";
description = "Good ass fediverse instance";
email = "sako@sako.lol";
registration_open = false;
invites_enabled = true;
account_activation_required = false;
cleanup_attachments = true;
allow_relay = true;
2025-01-02 17:20:28 +04:00
# AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
federating = true;
2025-01-02 14:47:50 +04:00
};
2025-01-02 15:34:20 +04:00
":media_proxy" = {
2025-01-02 16:12:34 +04:00
enabled = true;
proxy_opts = { redirect_on_failure = true; };
2025-01-02 16:43:51 +04:00
base_url = "https://media.social.sako.lol/proxy";
2025-01-02 15:34:20 +04:00
};
2025-01-02 14:47:50 +04:00
"Pleroma.Web.Endpoint" = { url.host = "social.sako.lol"; };
"Pleroma.Upload" = {
2025-01-02 16:02:33 +04:00
base_url = "https://media.social.sako.lol/media";
2025-01-02 14:47:50 +04:00
filters = map (pkgs.formats.elixirConf { }).lib.mkRaw [
2025-01-02 15:00:09 +04:00
"Pleroma.Upload.Filter.Exiftool.StripMetadata"
2025-01-02 14:47:50 +04:00
"Pleroma.Upload.Filter.Dedupe"
"Pleroma.Upload.Filter.AnonymizeFilename"
];
};
2025-01-02 17:35:33 +04:00
":mrf_simple" = let blocklist = import ./blocklist.nix;
in {
# media_nsfw = mkMap blocklist.media_nsfw;
2025-01-02 17:37:31 +04:00
reject = mkMap blocklist.reject;
2025-01-02 17:35:33 +04:00
# followers_only = mkMap blocklist.followers_only;
};
2025-01-02 14:47:50 +04:00
};
};
2025-01-02 12:27:19 +04:00
};
2025-01-02 16:12:34 +04:00
nginx.proxyCachePath."akkoma-media-cache" = {
enable = true;
levels = "1:2";
inactive = "720m";
maxSize = "10g";
useTempPath = false;
keysZoneName = "akkoma_media_cache";
keysZoneSize = "10m";
};
2025-01-02 15:53:53 +04:00
nginx.virtualHosts = {
"media.social.sako.lol" = {
forceSSL = true;
enableACME = true;
2025-01-02 16:12:34 +04:00
locations = {
"/media" = { proxyPass = "http://unix:/run/akkoma/socket"; };
2025-01-02 16:32:53 +04:00
"/proxy" = {
proxyPass = "http://unix:/run/akkoma/socket";
extraConfig = ''
proxy_cache akkoma_media_cache;
proxy_cache_lock on;
'';
};
2025-01-02 16:12:34 +04:00
};
2025-01-02 15:53:53 +04:00
};
};
2025-01-02 12:27:19 +04:00
};
};
}