diff --git a/.sops.yaml b/.sops.yaml index 0a7fd5f..6078d69 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -46,3 +46,15 @@ creation_rules: - *emily age: - *girldick + - path_regex: secrets/hosts/seras.yaml + key_groups: + - pgp: + - *emily + age: + - *seras + - path_regex: secrets/services/akkoma.yaml + key_groups: + - pgp: + - *emily + age: + - *seras diff --git a/config/hosts/seras/configuration.nix b/config/hosts/seras/configuration.nix index b4e062b..34b2ee8 100644 --- a/config/hosts/seras/configuration.nix +++ b/config/hosts/seras/configuration.nix @@ -1,10 +1,11 @@ -{ ... }: { +{ ... }: { imports = [ ../../common ../../profiles/builder.nix ../../profiles/headless.nix ../../profiles/kartoffel.nix ../../profiles/lxc.nix + ../../services/akkoma ../../services/nginx.nix ../../services/hydra ../../services/update-nixfiles.nix diff --git a/config/services/akkoma/default.nix b/config/services/akkoma/default.nix new file mode 100644 index 0000000..2bec116 --- /dev/null +++ b/config/services/akkoma/default.nix @@ -0,0 +1,280 @@ +{ config, pkgs, ... }: { + sops.secrets."services/akkoma/mailerPassword" = { + sopsFile = ../../../secrets/services/akkoma.yaml; + }; + sops.secrets."services/akkoma/deepl" = { + sopsFile = ../../../secrets/services/akkoma.yaml; + }; + services.akkoma = { + enable = true; + extraStatic."emoji/blobs.gg" = pkgs.akkoma-emoji.blobs_gg; + + extraStatic."static/styles.json" = pkgs.writeText "styles.json" (builtins.toJSON { + pleroma-dark = "/static/themes/pleroma-dark.json"; + pleroma-light = "/static/themes/pleroma-light.json"; + pleroma-amoled = [ "Pleroma Dark AMOLED" "#000000" "#111111" "#b0b0b1" "#d8a070" "#aa0000" "#0fa00f" "#0095ff" "#d59500"]; + classic-dark = [ "Classic Dark" "#161c20" "#282e32" "#b9b9b9" "#baaa9c" "#d31014" "#0fa00f" "#0095ff" "#ffa500" ]; + bird = [ "Bird" "#f8fafd" "#e6ecf0" "#14171a" "#0084b8" "#e0245e" "#17bf63" "#1b95e0" "#fab81e"]; + ir-black = [ "Ir Black" "#000000" "#242422" "#b5b3aa" "#ff6c60" "#FF6C60" "#A8FF60" "#96CBFE" "#FFFFB6" ]; + monokai = [ "Monokai" "#272822" "#383830" "#f8f8f2" "#f92672" "#F92672" "#a6e22e" "#66d9ef" "#f4bf75" ]; + + redmond-xx = "/static/themes/redmond-xx.json"; + redmond-xx-se = "/static/themes/redmond-xx-se.json"; + redmond-xxi = "/static/themes/redmond-xxi.json"; + breezy-dark = "/static/themes/breezy-dark.json"; + breezy-light = "/static/themes/breezy-light.json"; + paper = "/static/themes/paper.json"; + thekanata = "/static/themes/thekanata.json"; + ihatebeingalive = "/static/themes/ihatebeingalive.json"; + elly-mod = "/static/themes/elly-mod.json"; + }); + + extraStatic."static/themes/elly-mod.json" = pkgs.writeText "elly-mod.json" (builtins.readFile ./elly-mod.json); + + extraStatic."static/terms-of-service.html" = pkgs.writeText "terms-of-service.html" '' +

Likes are now florps. The timeline goes sideways.

+ ''; + + extraStatic."images/akkoma-wp.png" = pkgs.fetchurl { + url = "https://kyouma.net/akkoma-wp.avif"; + hash = "sha256-p0slibhwLExsGUzCSZHIl6tNm28r4fB3iJsI6peRFRs="; + }; + + extraStatic."favicon.png" = let + rev = "697a8211b0f427a921e7935a35d14bb3e32d0a2c"; + in pkgs.stdenvNoCC.mkDerivation { + name = "favicon.png"; + + src = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/TilCreator/NixOwO/${rev}/NixOwO_plain.svg"; + hash = "sha256-tWhHMfJ3Od58N9H5yOKPMfM56hYWSOnr/TGCBi8bo9E="; + }; + + nativeBuildInputs = with pkgs; [ librsvg ]; + + dontUnpack = true; + installPhase = '' + rsvg-convert -o $out -w 96 -h 96 $src + ''; + }; + + frontends = { + primary = { + package = pkgs.akkoma-fe-domi; + name = "akkoma-fe"; + ref = "5f0339ce00"; + }; + admin = { + package = pkgs.akkoma-frontends.admin-fe; + name = "admin-fe"; + ref = "stable"; + }; + }; + }; + services.akkoma.config = let + inherit ((pkgs.formats.elixirConf { }).lib) mkRaw mkAtom mkMap; + in { + ":pleroma" = { + ":instance" = { + name = "florp.social"; + email = "contact@florp.social"; + notify_email = "akkoma@florp.social"; + description = "Likes are now florps. The timeline goes sideways."; + instance_thumbnail = "/instance/thumbnail.avif"; + limit = 69420; + description_limit = 69420; + remote_limit = 131072; + upload_limit = 160 * 1024 * 1024; + avatar_upload_limit = 16 * 1024 * 1024; + background_upload_limit = 32 * 1024 * 1024; + banner_upload_limit = 32 * 1024 * 1024; + registrations_open = true; + registration_reason_length = 2048; + account_approval_required = true; + account_activation_required = true; + federation = false; + federation_incoming_replies_max_depth = 1024; + max_pinned_statuses = 10; + safe_dm_mentions = true; + remote_post_retention_days = 365; + user_bio_length = 8192; + user_name_length = 64; + max_account_fields = 8; + cleanup_attachments = true; + local_bubble = [ + "solitary.social" + "donotsta.re" + "chaos.social" + ]; + }; + + "Pleroma.Captcha".method = mkRaw "Pleroma.Captcha.Kocaptcha"; + + "Pleroma.Web.Endpoint".url.host = "florp.social"; + + "Pleroma.Emails.Mailer" = { + enabled = true; + adapter = mkRaw "Swoosh.Adapters.SMTP"; + relay = "mail.kyouma.net"; + username = "akkoma@florp.social"; + password._secret = config.sops.secrets."services/akkoma/mailerPassword".path; + port = 465; + ssl = true; + auth = mkRaw ":always"; + }; + + ":database".rum_enabled = true; + + ":media_proxy" = { + enabled = true; + base_url = "https://cache.florp.social"; + proxy_opts.redirect_on_failure = true; + proxy_opts.max_body_length = 64 * 1024 * 1024; + }; + + ":media_preview_proxy" = { + enabled = false; + thumbnail_max_width = 1920; + thumbnail_max_height = 1080; + min_content_length = 128 * 1024; + }; + + "Pleroma.Upload".base_url = "https://media.florp.social"; + + "Pleroma.Upload".filters = map mkRaw [ + "Pleroma.Upload.Filter.Exiftool.ReadDescription" + "Pleroma.Upload.Filter.Exiftool.StripMetadata" + "Pleroma.Upload.Filter.Dedupe" + "Pleroma.Upload.Filter.AnonymizeFilename" + ]; + + ":mrf".policies = map mkRaw [ + "Pleroma.Web.ActivityPub.MRF.SimplePolicy" + "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy" + ]; + + ":mrf_simple" = { + reject = mkMap { + "bae.st" = "harassment"; + "brighteon.social" = "incompatible"; + "detroitriotcity.com" = "incompatible"; + "freeatlantis.com" = "incompatible"; + "freespeechextremist.com" = "incompatible"; + "gab.com" = "incompatible"; + "gleasonator.com" = "incompatible"; + "kitsunemimi.club" = "incompatible"; + "poa.st" = "incompatible"; + "seal.cafe" = "harassment"; + "social.quodverum.com" = "incompatible"; + "spinster.xyz" = "incompatible"; + "truthsocial.co.in" = "incompatible"; + "varishangout.net" = "incompatible"; + + "activitypub-troll.cf" = "security"; + "misskey-forkbomb.cf" = "security"; + "repl.co" = "security"; + }; + + followers_only = mkMap { + "bitcoinhackers.org" = "annoying"; + }; + }; + + ":mrf_object_age".threshold = 90 * 24 * 3600; + + ":frontend_configurations" = { + pleroma_fe = mkMap { + background = "/images/akkoma-wp.png"; + collapseMessageWithSubject = true; + hideSiteFavicon = true; + streaming = true; + webPushNotifications = true; + useStreamingApi = true; + scopeCopy = true; + showFeaturesPanel = false; + subjectLineBehavior = "masto"; + alwaysShowSubjectInput = true; + postContentType = "text/markdown"; + modalOnRepeat = true; + minimalScopesMode = true; + redirectRootNoLogin = "/about"; + translationLanguage = "EN"; + theme = "elly-mod"; + }; + }; + + ":restrict_unauthenticated" = { + timelines = mkMap { + local = false; + federated = true; + }; + }; + + ":translator" = { + enabled = true; + module = mkRaw "Pleroma.Akkoma.Translators.DeepL"; + }; + + ":deepl" = { + tier = mkAtom ":free"; + api_key._secret = config.sops.secrets."services/akkoma/deepl".path; + }; + }; + + ":web_push_encryption".":vapid_details" = { + subject = "mailto:contact@florp.social"; + }; + + ":joken".":default_signer"._secret = "/var/lib/secrets/akkoma/jwt-signer"; + }; + services.postgresql.extraPlugins = [ + pkgs.postgresql15Packages.rum + ]; + services.nginx = { + package = pkgs.tengine; + clientMaxBodySize = "256m"; + commonHttpConfig = '' + proxy_cache_path /var/cache/nginx/cache/akkoma-media-cache + levels= keys_zone=akkoma_media_cache:32m max_size=32g + inactive=1y use_temp_path=off; + + access_log off; + ''; + }; + kyouma.nginx.virtualHosts = { + "florp.social".locations."/".proxyPass = "http://unix:/run/akkoma/socket"; + + "media.florp.social" = { + useACMEHost = "florp.social"; + locations."/".proxyPass = "http://unix:/run/akkoma/socket"; + }; + + "cache.florp.social" = { + useACMEHost = "florp.social"; + locations."/" = { + proxyPass = "http://unix:/run/akkoma/socket"; + extraConfig = '' + proxy_cache akkoma_media_cache; + + # Cache objects in slices of 1 MiB + slice 1m; + proxy_cache_key $host$uri$is_args$args$slice_range; + proxy_set_header Range $slice_range; + + # Decouple proxy and upstream responses + proxy_buffering on; + proxy_cache_lock on; + proxy_ignore_client_abort on; + + # Default cache times for various responses + proxy_cache_valid 200 1y; + proxy_cache_valid 206 301 304 1h; + + # Allow serving of stale items + proxy_cache_use_stale error timeout invalid_header updating; + ''; + }; + }; + }; + security.acme.certs."florp.social".extraDomainNames = [ "cache.florp.social" "media.florp.social" ]; +} diff --git a/config/services/akkoma/elly-mod.json b/config/services/akkoma/elly-mod.json new file mode 100644 index 0000000..36be1d6 --- /dev/null +++ b/config/services/akkoma/elly-mod.json @@ -0,0 +1,529 @@ +{ + "_pleroma_theme_version": 2, + "name": "elly's theme (mod)", + "theme": { + "themeEngineVersion": 3, + "shadows": { + "panel": [ + { + "color": "#000000", + "x": "1", + "y": "2", + "blur": "6", + "spread": 0, + "alpha": 0.6 + } + ], + "topBar": [ + { + "x": 0, + "y": 0, + "blur": 4, + "spread": 0, + "color": "#000000", + "alpha": 0.6 + } + ], + "popup": [ + { + "x": 2, + "y": 2, + "blur": 3, + "spread": 0, + "color": "#000000", + "alpha": 0.5 + } + ], + "avatar": [ + { + "x": 0, + "y": 1, + "blur": 8, + "spread": 0, + "color": "#000000", + "alpha": 0.7 + } + ], + "avatarStatus": [], + "panelHeader": [ + { + "color": "#ffffff", + "x": 0, + "y": "40", + "blur": "40", + "spread": "-40", + "inset": true, + "alpha": "0.1" + } + ], + "button": [ + { + "color": "#ffffff", + "x": 0, + "y": "0", + "blur": "0", + "spread": "1", + "alpha": "0.15", + "inset": true + }, + { + "color": "#000000", + "x": "1", + "y": "1", + "blur": "1", + "spread": 0, + "alpha": "0.3", + "inset": false + } + ], + "buttonHover": [ + { + "color": "#318cbc", + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "alpha": 1, + "inset": true + }, + { + "color": "#000000", + "x": "1", + "y": "1", + "blur": "1", + "spread": 0, + "alpha": "0.3", + "inset": false + } + ], + "buttonPressed": [ + { + "color": "#bebebe", + "x": 0, + "y": 0, + "blur": "0", + "spread": "50", + "alpha": 0.5, + "inset": true + }, + { + "color": "#ffffff", + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "alpha": 0.2, + "inset": true + }, + { + "color": "#000000", + "x": "1", + "y": "1", + "blur": 0, + "spread": 0, + "alpha": "0.3", + "inset": false + } + ], + "input": [ + { + "color": "#FFFFFF", + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "alpha": "0.2", + "inset": true + } + ] + }, + "colors": { + "underlay": "#000000", + "bg": "#070e1b", + "fg": "#31363b", + "cRed": "#c42d38", + "cGreen": "#22b325", + "cOrange": "#d7d720", + "cBlue": "#ffffff", + "accent": "#3daee9", + "link": "#318cbc", + "text": "#bebebe", + "badgeNotification": "#024297", + "badgeNotificationText": "#ffffff", + "alertNeutral": "#bebebe", + "alertNeutralText": "#ffffff", + "alertPopupNeutral": "#bebebe", + "alertPopupNeutralText": "#000000", + "alertSuccess": "#22b325", + "alertSuccessText": "#ffffff", + "alertPopupSuccess": "#22b325", + "alertPopupSuccessText": "#000000", + "alertWarning": "#d7d720", + "alertWarningText": "#ffffff", + "alertPopupWarning": "#d7d720", + "alertPopupWarningText": "#000000", + "alertError": "#ff090f", + "alertErrorText": "#bebebe", + "alertPopupError": "#ff090f", + "alertPopupErrorText": "#ffffff", + "panel": "#0d1a31", + "panelText": "#bebebe", + "alertNeutralPanelText": "#ffffff", + "alertSuccessPanelText": "#ffffff", + "alertWarningPanelText": "#ffffff", + "alertErrorPanelText": "#bebebe", + "fgText": "#bebebe", + "topBar": "#0d1a31", + "topBarText": "#bebebe", + "input": "#18223d", + "inputTopbarText": "#bebebe", + "inputPanelText": "#bebebe", + "inputText": "#bebebe", + "btn": "#18223d", + "btnText": "#bebebe", + "btnTopBarText": "#bebebe", + "btnDisabled": "#0c121c", + "btnDisabledTopBarText": "#393d45", + "btnPanelText": "#bebebe", + "btnDisabledPanelText": "#393d45", + "btnDisabledText": "#393d45", + "btnToggled": "#1b1d1f", + "btnToggledTopBarText": "#bebebe", + "btnToggledPanelText": "#bebebe", + "btnToggledText": "#bebebe", + "btnPressed": "#1b1d1f", + "btnPressedTopBarText": "#bebebe", + "btnPressedTopBar": "#1b1d1f", + "btnPressedPanelText": "#bebebe", + "btnPressedPanel": "#1b1d1f", + "btnPressedText": "#bebebe", + "tabActiveText": "#bebebe", + "tabText": "#bebebe", + "tab": "#1b1d1f", + "fgLink": "#543fe7", + "topBarLink": "#bebebe", + "panelLink": "#38a5ed", + "panelFaint": "#bebebe", + "icon": "#63666d", + "poll": "#1d4f6e", + "pollText": "#bebebe", + "border": "#363c41", + "postCyantext": "#ffffff", + "postGreentext": "#22b325", + "postLink": "#3daee9", + "lightText": "#f2f2f2", + "popover": "#070e1b", + "selectedMenuPopover": "#0d1930", + "highlight": "#0d1930", + "highlightText": "#bebebe", + "selectedMenu": "#0d1930", + "selectedMenuText": "#bebebe", + "selectedMenuPopoverIcon": "#666c77", + "highlightLink": "#3daee9", + "selectedMenuLink": "#3daee9", + "selectedMenuPopoverLink": "#3daee9", + "selectedMenuPopoverText": "#bebebe", + "faintLink": "#3daee9", + "highlightFaintLink": "#3daee9", + "selectedMenuFaintLink": "#3daee9", + "selectedMenuPopoverFaintLink": "#3daee9", + "faint": "#bebebe", + "highlightFaintText": "#bebebe", + "selectedMenuFaintText": "#bebebe", + "selectedMenuPopoverFaintText": "#bebebe", + "highlightLightText": "#f2f2f2", + "selectedMenuLightText": "#f2f2f2", + "selectedMenuPopoverLightText": "#f2f2f2", + "selectedMenuIcon": "#666c77", + "selectedPost": "#0d1930", + "selectedPostText": "#bebebe", + "selectedPostIcon": "#666c77", + "selectedPostLink": "#3daee9", + "selectedPostFaintLink": "#3daee9", + "highlightPostLink": "#3daee9", + "selectedPostPostLink": "#3daee9", + "selectedPostLightText": "#f2f2f2", + "selectedPostFaintText": "#bebebe", + "popoverText": "#bebebe", + "popoverIcon": "#63666d", + "popoverLink": "#3daee9", + "postFaintLink": "#3daee9", + "popoverPostFaintLink": "#3daee9", + "popoverFaintLink": "#3daee9", + "popoverFaintText": "#bebebe", + "popoverPostLink": "#3daee9", + "popoverLightText": "#f2f2f2", + "highlightIcon": "#666c77", + "highlightPostFaintLink": "#3daee9", + "profileTint": "#070e1b", + "profileBg": "#03070f", + "wallpaper": "#050a13" + }, + "opacity": { + "underlay": 0.15, + "bg": 0.85, + "alert": 0.5, + "alertPopup": 0.95, + "panel": 0.75, + "input": 0.9, + "btn": 0.9, + "faint": 0.5, + "border": 0.55, + "popover": 1, + "profileTint": 0.5 + }, + "radii": { + "btn": "3", + "input": "4", + "checkbox": "1", + "panel": "3", + "avatar": "4", + "avatarAlt": "4", + "tooltip": 2, + "attachment": "3" + }, + "fonts": { + "interface": { + "family": "sans-serif" + }, + "input": { + "family": "inherit" + }, + "post": { + "family": "inherit" + }, + "postCode": { + "family": "monospace" + } + } + }, + "source": { + "themeEngineVersion": 3, + "fonts": {}, + "shadows": { + "panel": [ + { + "x": "1", + "y": "2", + "blur": "6", + "spread": 0, + "color": "#000000", + "alpha": 0.6 + } + ], + "button": [ + { + "x": 0, + "y": "0", + "blur": "0", + "spread": "1", + "color": "#ffffff", + "alpha": "0.15", + "inset": true + }, + { + "x": "1", + "y": "1", + "blur": "1", + "spread": 0, + "color": "#000000", + "alpha": "0.3", + "inset": false + } + ], + "panelHeader": [ + { + "x": 0, + "y": "40", + "blur": "40", + "spread": "-40", + "inset": true, + "color": "#ffffff", + "alpha": "0.1" + } + ], + "buttonHover": [ + { + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "color": "--link", + "alpha": 1, + "inset": true + }, + { + "x": "1", + "y": "1", + "blur": "1", + "spread": 0, + "color": "#000000", + "alpha": "0.3", + "inset": false + } + ], + "buttonPressed": [ + { + "x": 0, + "y": 0, + "blur": "0", + "spread": "50", + "color": "--faint", + "alpha": 0.5, + "inset": true + }, + { + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "color": "#ffffff", + "alpha": 0.2, + "inset": true + }, + { + "x": "1", + "y": "1", + "blur": 0, + "spread": 0, + "color": "#000000", + "alpha": "0.3", + "inset": false + } + ], + "input": [ + { + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "color": "#FFFFFF", + "alpha": "0.2", + "inset": true + } + ] + }, + "opacity": { + "bg": "0.85", + "border": "0.55", + "panel": "0.75", + "btn": "0.9", + "input": "0.9" + }, + "colors": { + "bg": "#070e1b", + "fg": "#31363b", + "text": "#bebebe", + "underlay": "#000000", + "link": "#318cbc", + "accent": "#3daee9", + "faint": "#bebebe", + "faintLink": "#3daee9", + "postFaintLink": "#3daee9", + "cBlue": "#ffffff", + "cRed": "#c42d38", + "cGreen": "#22b325", + "cOrange": "#d7d720", + "highlight": "#0d1930", + "highlightLightText": "#f2f2f2", + "highlightPostLink": "#3daee9", + "highlightFaintText": "#bebebe", + "highlightFaintLink": "#3daee9", + "highlightPostFaintLink": "#3daee9", + "highlightText": "#bebebe", + "highlightLink": "#3daee9", + "highlightIcon": "#666c77", + "popover": "#070e1b", + "popoverLightText": "#f2f2f2", + "popoverPostLink": "#3daee9", + "popoverFaintText": "#bebebe", + "popoverFaintLink": "#3daee9", + "popoverPostFaintLink": "#3daee9", + "popoverText": "#bebebe", + "popoverLink": "#3daee9", + "popoverIcon": "#63666d", + "selectedPost": "#0d1930", + "selectedPostFaintText": "#bebebe", + "selectedPostLightText": "#f2f2f2", + "selectedPostPostLink": "#3daee9", + "selectedPostFaintLink": "#3daee9", + "selectedPostText": "#bebebe", + "selectedPostLink": "#3daee9", + "selectedPostIcon": "#666c77", + "selectedMenu": "#0d1930", + "selectedMenuLightText": "#f2f2f2", + "selectedMenuFaintText": "#bebebe", + "selectedMenuFaintLink": "#3daee9", + "selectedMenuText": "#bebebe", + "selectedMenuLink": "#3daee9", + "selectedMenuIcon": "#666c77", + "selectedMenuPopover": "#0d1930", + "selectedMenuPopoverLightText": "#f2f2f2", + "selectedMenuPopoverFaintText": "#bebebe", + "selectedMenuPopoverFaintLink": "#3daee9", + "selectedMenuPopoverText": "#bebebe", + "selectedMenuPopoverLink": "#3daee9", + "selectedMenuPopoverIcon": "#666c77", + "lightText": "#f2f2f2", + "postLink": "#3daee9", + "border": "#363c41", + "poll": "#1d4f6e", + "pollText": "#bebebe", + "icon": "#63666d", + "fgText": "#bebebe", + "fgLink": "#543fe7", + "panel": "#0d1a31", + "panelText": "#bebebe", + "panelFaint": "#bebebe", + "panelLink": "#38a5ed", + "topBar": "#0d1a31", + "topBarText": "#bebebe", + "topBarLink": "#bebebe", + "tab": "#1b1d1f", + "tabText": "#bebebe", + "tabActiveText": "#bebebe", + "btn": "#18223d", + "btnText": "#bebebe", + "btnPanelText": "#bebebe", + "btnTopBarText": "#bebebe", + "btnPressed": "#1b1d1f", + "btnPressedText": "#bebebe", + "btnPressedPanel": "#1b1d1f", + "btnPressedPanelText": "#bebebe", + "btnPressedTopBar": "#1b1d1f", + "btnPressedTopBarText": "#bebebe", + "btnToggled": "#1b1d1f", + "btnToggledText": "#bebebe", + "btnToggledPanelText": "#bebebe", + "btnToggledTopBarText": "#bebebe", + "btnDisabled": "#0c121c", + "btnDisabledText": "#393d45", + "btnDisabledPanelText": "#393d45", + "btnDisabledTopBarText": "#393d45", + "input": "#18223d", + "inputText": "#bebebe", + "inputPanelText": "#bebebe", + "inputTopbarText": "#bebebe", + "alertError": "#ff090f", + "alertErrorText": "#bebebe", + "alertErrorPanelText": "#bebebe", + "alertWarning": "#d7d720", + "alertWarningText": "#ffffff", + "alertWarningPanelText": "#ffffff", + "alertNeutral": "#bebebe", + "alertNeutralText": "#ffffff", + "alertNeutralPanelText": "#ffffff", + "badgeNotification": "#024297", + "badgeNotificationText": "#ffffff" + }, + "radii": { + "btn": "3", + "input": "4", + "checkbox": "1", + "panel": "3", + "avatar": "4", + "avatarAlt": "4", + "attachment": "3" + } + } +} diff --git a/flake.lock b/flake.lock index 38e159b..1e7ad48 100644 --- a/flake.lock +++ b/flake.lock @@ -463,11 +463,11 @@ ] }, "locked": { - "lastModified": 1729104314, - "narHash": "sha256-pZRZsq5oCdJt3upZIU4aslS9XwFJ+/nVtALHIciX/BI=", + "lastModified": 1730302582, + "narHash": "sha256-W1MIJpADXQCgosJZT8qBYLRuZls2KSiKdpnTVdKBuvU=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "3c3e88f0f544d6bb54329832616af7eb971b6be6", + "rev": "af8a16fe5c264f5e9e18bcee2859b40a656876cf", "type": "github" }, "original": { @@ -559,26 +559,6 @@ "url": "https://git.lix.systems/lix-project/hydra" } }, - "iceshrimp": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1718289195, - "narHash": "sha256-xmkExjsTztXW4/AYb3d3Er6Wwg4r7AVwq7rv9E93+Ec=", - "ref": "refs/heads/dev", - "rev": "746c6319d3425ccfacc906535c67951e161996d9", - "revCount": 47, - "type": "git", - "url": "https://iceshrimp.dev/iceshrimp/packaging" - }, - "original": { - "type": "git", - "url": "https://iceshrimp.dev/iceshrimp/packaging" - } - }, "ixx": { "inputs": { "flake-utils": [ @@ -693,11 +673,11 @@ ] }, "locked": { - "lastModified": 1729982130, - "narHash": "sha256-HmLLQbX07rYD0RXPxbf3kJtUo66XvEIX9Y+N5QHQ9aY=", + "lastModified": 1730184279, + "narHash": "sha256-6OB+WWR6gnaWiqSS28aMJypKeK7Pjc2Wm6L0MtOrTuA=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "2eb472230a5400c81d9008014888b4bff23bcf44", + "rev": "b379bd4d872d159e5189053ce9a4adf86d56db4b", "type": "github" }, "original": { @@ -795,11 +775,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1730161780, - "narHash": "sha256-z5ILcmwMtiCoHTXS1KsQWqigO7HJO8sbyK7f7wn9F/E=", + "lastModified": 1730368399, + "narHash": "sha256-F8vJtG389i9fp3k2/UDYHMed3PLCJYfxCqwiVP7b9ig=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "07d15e8990d5d86a631641b4c429bc0a7400cfb8", + "rev": "da14839ac5f38ee6adbdb4e6db09b5eef6d6ccdc", "type": "github" }, "original": { @@ -926,11 +906,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1729880355, - "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", + "lastModified": 1730200266, + "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", + "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", "type": "github" }, "original": { @@ -957,11 +937,11 @@ "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1730214386, - "narHash": "sha256-FNXiFunXR2DnNrjmA0ofLznTTHcEDJjNWvCQtQExtL0=", + "lastModified": 1730368298, + "narHash": "sha256-5z4pDqRSSovXPPtN1BNEJOkGoCd/XSYuCWh8AsvoTio=", "owner": "nix-community", "repo": "nixvim", - "rev": "7d882356a486cf44b7fab842ac26885ecd985af3", + "rev": "42ea1626cb002fa759a6b1e2841bfc80a4e59615", "type": "github" }, "original": { @@ -980,11 +960,11 @@ ] }, "locked": { - "lastModified": 1730044642, - "narHash": "sha256-DbyV9l3hkrSWcN34S6d9M4kAFss0gEHGtjqqMdG9eAs=", + "lastModified": 1730337772, + "narHash": "sha256-uTxvqDohfG85+zldO5Tf1B+fuAF8ZhMouNwG5S6OAnA=", "owner": "NuschtOS", "repo": "search", - "rev": "e373332c1f8237fc1263901745b0fe747228c8ba", + "rev": "4e0a7a95a3df3333771abc4df6a656e7baf67106", "type": "github" }, "original": { @@ -1018,7 +998,6 @@ "flake-utils": "flake-utils", "home-manager": "home-manager", "hydra": "hydra", - "iceshrimp": "iceshrimp", "kyouma-www": "kyouma-www", "lix": "lix", "lix-module": "lix-module", @@ -1224,11 +1203,11 @@ ] }, "locked": { - "lastModified": 1730025913, - "narHash": "sha256-Y9NtFmP8ciLyRsopcCx1tyoaaStKeq+EndwtGCgww7I=", + "lastModified": 1730321837, + "narHash": "sha256-vK+a09qq19QNu2MlLcvN4qcRctJbqWkX7ahgPZ/+maI=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "bae131e525cc8718da22fbeb8d8c7c43c4ea502a", + "rev": "746901bb8dba96d154b66492a29f5db0693dbfcc", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 54cc1fa..266eb9d 100644 --- a/flake.nix +++ b/flake.nix @@ -29,10 +29,6 @@ url = "git+https://git.lix.systems/lix-project/hydra?ref=main&rev=799441dcf6d595efb0def686ca0815aef398627b"; inputs.lix.follows = "lix"; }; - iceshrimp = { - url = "git+https://iceshrimp.dev/iceshrimp/packaging"; - inputs.nixpkgs.follows = "nixpkgs"; - }; kyouma-www = { url = "git+https://woof.rip/emily/kyouma-net.git"; inputs.nixpkgs.follows = "nixpkgs"; diff --git a/pkgs/akkoma-fe-domi/default.nix b/pkgs/akkoma-fe-domi/default.nix new file mode 100644 index 0000000..83781a2 --- /dev/null +++ b/pkgs/akkoma-fe-domi/default.nix @@ -0,0 +1,40 @@ +{ + akkoma-frontends, + fetchFromGitea, + fetchYarnDeps +}: +akkoma-frontends.akkoma-fe.overrideAttrs (let + src = fetchFromGitea { + domain = "git.sakamoto.pl"; + owner = "domi"; + repo = "akkoma-fe"; + rev = "5f0339ce005ccb12365128089edb5fd77f60841b"; + hash = "sha256-AHmJyOFmQZXmNMMsp8ONm9Itns1H/idEKl8+sxn2RSA="; + }; + offlineCache = fetchYarnDeps { + yarnLock = "${src}/yarn.lock"; + hash = "sha256-7WB6nmxNckMdftKds2OgD2kClvCCT/I5vmthV0jrkSs="; + }; +in { + version = "unstable-2024-07-20"; + pname = "akkoma-fe-domi"; + inherit src offlineCache; + postPatch = '' + # Build scripts assume to be used within a Git repository checkout + sed -E -i '/^let commitHash =/,/;$/clet commitHash = "${builtins.substring 0 7 src.rev}";' \ + build/webpack.prod.conf.js + ''; + + configurePhase = '' + runHook preConfigure + + export HOME="$(mktemp -d)" + + yarn config --offline set yarn-offline-mirror ${offlineCache} + fixup-yarn-lock yarn.lock + + yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive + + runHook postConfigure + ''; +}) diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix index 644d380..571bfe8 100644 --- a/pkgs/overlay.nix +++ b/pkgs/overlay.nix @@ -5,4 +5,5 @@ final: prev: { build-worker-oci = final.callPackage ./build-worker-oci/default.nix {}; librespeed-rust = final.callPackage ./librespeed-rust/default.nix {}; librespeed-go = final.callPackage ./librespeed-go/default.nix {}; + akkoma-fe-domi = final.callPackage ./akkoma-fe-domi/default.nix {}; } diff --git a/secrets/services/akkoma.yaml b/secrets/services/akkoma.yaml new file mode 100644 index 0000000..fc7bb2f --- /dev/null +++ b/secrets/services/akkoma.yaml @@ -0,0 +1,35 @@ +services: + akkoma: + mailerPassword: ENC[AES256_GCM,data:kNep5V0HVr17bEIY2/AbwRUPqkfHKf9xnOnYi5sMJ+STWjVrQf+AzdueJTAf9Nym,iv:Usmu0uM5ev60Ui8h9zLUcDDJIHNSxAFtMq5LyLwmAsA=,tag:fNIhB8LGJwWO3zzQWgm68A==,type:str] + deepl: ENC[AES256_GCM,data:JVJkCm6UFUlownU/oRTmZ5o85mPv935Hj56JcXCt3PwNmx1kQbyj,iv:UzvGgVter1/9U8g/HQ2FfWNviD0KgWRLnW9fzgfGDag=,tag:q65bd26xFQ6Av71hy8u2fA==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ht2wetcyl9rzu45e02pqqwgmyfsfe6y6ygxyuxpfhnkdm62d3pqsg3uqvd + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZTi9Ha0tQRGE2L3BzclpW + NnduRVVRUnhkV1pEOXllZTA0bnN0NENESlM4Ck9jSTcxcjJIdThvUk9IM1FCOGNv + V1FNV2ZHbHlTaWNBL0VvSGxhSzlWSDgKLS0tIEFoWEozY0VSWVA0cVp5dkI4NHNH + RVQ3aDd0c1RDNWd2eGxiNURGRXVXS2sKTT4LpWSIb9hjrcdUWOhieUeUHop0pwoA + OfOv3y3dp7tYc5HRREN5jkVx29jb2lrml0ycu9ek58S8+bolfzN8yQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-10-31T16:57:58Z" + mac: ENC[AES256_GCM,data:VJpsLBdnle6bP6ALxLS2eTOEbiHJbNc5D+pvsoJulI9VODtBk0p1VvJv9ilToxh4oiwctMmCKSO4R9NyuZUqoqwwlYtW6tFDITBA2eg/iu/uQjcuuKLC+fFGdtnTpZcShUyMds3qi8Z8Iegk2sSMLk5QXCE2QhMUQ50VN4TXF2c=,iv:rOF34iqckOJMAVm+3RDSdlrJh4hgnyiTut3SM1e0w0E=,tag:cMjMkKkN8UFWGQqQfWBUnA==,type:str] + pgp: + - created_at: "2024-10-31T16:40:38Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hF4D1GtNSlou/HkSAQdAmS/QDuU40+HtiMoCa9byz80b6lGMd6cvqxYShifFxUgw + Bn34D6HB6z3nQxWanlOCkA2ud8GBUhEFlLjsQf29apfWuWxKpNv37Olou1/vGvNm + 0l4BIzFesU+aoIUi+Fp0GbJ1+ObzRvGZq1IULChsDgbbvDnHah7yvN5wKYwj6x7f + ZhPpm40+FLea1najiN6igUD6oUy8TSYnCgPODef4FeI0ZwFqF5MaucY8CNuWsugS + =1vZk + -----END PGP MESSAGE----- + fp: B04F01A7A98A13020C39B4A68AB7B773A214ACE5 + unencrypted_suffix: _unencrypted + version: 3.9.1