about summary refs log tree commit diff
path: root/pkgs/servers/akkoma/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers/akkoma/default.nix')
-rw-r--r--pkgs/servers/akkoma/default.nix304
1 files changed, 172 insertions, 132 deletions
diff --git a/pkgs/servers/akkoma/default.nix b/pkgs/servers/akkoma/default.nix
index fca88e6a3cdba..d38049f325672 100644
--- a/pkgs/servers/akkoma/default.nix
+++ b/pkgs/servers/akkoma/default.nix
@@ -1,22 +1,24 @@
 { lib
 , beamPackages
-, fetchFromGitea, fetchFromGitHub, fetchFromGitLab
-, cmake, file
+, fetchFromGitea
+, fetchFromGitHub
+, fetchFromGitLab
+, cmake
+, file
 , writeText
 , nixosTests
 , ...
 }:
-
 beamPackages.mixRelease rec {
-  pname = "pleroma";
-  version = "3.10.4";
+  pname = "akkoma";
+  version = "3.12.2";
 
   src = fetchFromGitea {
     domain = "akkoma.dev";
     owner = "AkkomaGang";
     repo = "akkoma";
     rev = "v${version}";
-    hash = "sha256-MPUZFcIxZ21fe3edwi+/Kt8qpwNBCh40wheC3QMqw2M=";
+    hash = "sha256-eKvfuHTLmUU6Dom/GctPSbhrAAik1T/7bYY5j3YUkRo=";
   };
 
   postPatch = ''
@@ -33,140 +35,178 @@ beamPackages.mixRelease rec {
 
   mixNixDeps = import ./mix.nix {
     inherit beamPackages lib;
-    overrides = (final: prev: {
-      # mix2nix does not support git dependencies yet,
-      # so we need to add them manually
-      captcha = beamPackages.buildMix rec {
-        name = "captcha";
-        version = "0.1.0";
-
-        src = fetchFromGitLab {
-          domain = "git.pleroma.social";
-          group = "pleroma";
-          owner = "elixir-libraries";
-          repo = "elixir-captcha";
-          rev = "3bbfa8b5ea13accc1b1c40579a380d8e5cfd6ad2";
-          hash = "sha256-skZ0QwF46lUTfsgACMR0AR5ymY2F50BQy1AUBjWVdro=";
+    overrides = final: prev:
+      let
+        mimeTypePatchPhase = ''
+          mkdir -p config
+          cat >> config/config.exs <<EOF
+          Mix.Config.config :mime, :types, %{
+            "application/xml" => ["xml"],
+            "application/xrd+xml" => ["xrd+xml"],
+            "application/jrd+json" => ["jrd+json"],
+            "application/activity+json" => ["activity+json"],
+            "application/ld+json" => ["activity+json"],
+            "image/apng" => ["apng"]
+          }
+          Mix.Config.config :mime, :extensions, %{
+            "activity+json" => "text/plain",
+            "jrd+json" => "text/plain",
+            "xrd+xml" => "text/plain"
+          }
+          EOF
+        '';
+        # Akkoma adds some things to the `mime` package's configuration, which requires it to be recompiled.
+        # However, we can't just recompile things like we would on other systems.
+        # Therefore, we need to add it to mime's compile-time config too, and also in every package that depends on mime, directly or indirectly.
+        # We take the lazy way out and just add it to every dependency - it won't make a difference in packages that don't depend on `mime`.
+        addMimeTypes = _: p: p.override {
+          patchPhase = mimeTypePatchPhase;
         };
-
-        # the binary is not getting installed by default
-        postInstall = "mv priv/* $out/lib/erlang/lib/${name}-${version}/priv/";
-      };
-      concurrent_limiter = beamPackages.buildMix rec {
-        name = "concurrent_limiter";
-        version = "0.1.1";
-
-        src = fetchFromGitea {
-          domain = "akkoma.dev";
-          owner = "AkkomaGang";
-          repo = "concurrent-limiter";
-          rev = "a9e0b3d64574bdba761f429bb4fba0cf687b3338";
-          hash = "sha256-A7ucZnXks4K+JDVY5vV2cT5KfEOUOo/OHO4rga5mGys=";
+      in
+      (lib.attrsets.mapAttrs addMimeTypes prev) // {
+        # mix2nix does not support git dependencies yet,
+        # so we need to add them manually
+        captcha = beamPackages.buildMix rec {
+          name = "captcha";
+          version = "0.1.0";
+
+          src = fetchFromGitLab {
+            domain = "git.pleroma.social";
+            group = "pleroma";
+            owner = "elixir-libraries";
+            repo = "elixir-captcha";
+            rev = "90f6ce7672f70f56708792a98d98bd05176c9176";
+            hash = "sha256-s7EuAhmCsQA/4p2NJHJSWB/DZ5hA+7EelPsUOvKr2Po=";
+          };
+
+          # the binary is not getting installed by default
+          postInstall = "mv priv/* $out/lib/erlang/lib/${name}-${version}/priv/";
         };
-      };
-      elasticsearch = beamPackages.buildMix rec {
-        name = "elasticsearch";
-        version = "1.0.1";
-
-        src = fetchFromGitea {
-          domain = "akkoma.dev";
-          owner = "AkkomaGang";
-          repo = "elasticsearch-elixir";
-          rev = "6cd946f75f6ab9042521a009d1d32d29a90113ca";
-          hash = "sha256-CtmQHVl+VTpemne+nxbkYGcErrgCo+t3ZBPbkFSpyF0=";
+        concurrent_limiter = beamPackages.buildMix rec {
+          name = "concurrent_limiter";
+          version = "0.1.1";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "concurrent-limiter";
+            rev = "a9e0b3d64574bdba761f429bb4fba0cf687b3338";
+            hash = "sha256-A7ucZnXks4K+JDVY5vV2cT5KfEOUOo/OHO4rga5mGys=";
+          };
         };
-      };
-      linkify = beamPackages.buildMix rec {
-        name = "linkify";
-        version = "0.5.2";
-
-        src = fetchFromGitea {
-          domain = "akkoma.dev";
-          owner = "AkkomaGang";
-          repo = "linkify";
-          rev = "2567e2c1073fa371fd26fd66dfa5bc77b6919c16";
-          hash = "sha256-e3wzlbRuyw/UB5Tb7IozX/WR1T+sIBf9C/o5Thki9vg=";
+        elasticsearch = beamPackages.buildMix rec {
+          name = "elasticsearch";
+          version = "1.0.1";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "elasticsearch-elixir";
+            rev = "6cd946f75f6ab9042521a009d1d32d29a90113ca";
+            hash = "sha256-CtmQHVl+VTpemne+nxbkYGcErrgCo+t3ZBPbkFSpyF0=";
+          };
         };
-      };
-      mfm_parser = beamPackages.buildMix rec {
-        name = "mfm_parser";
-        version = "0.1.1";
-
-        src = fetchFromGitea {
-          domain = "akkoma.dev";
-          owner = "AkkomaGang";
-          repo = "mfm-parser";
-          rev = "912fba81152d4d572e457fd5427f9875b2bc3dbe";
-          hash = "sha256-n3WmERxKK8VM8jFIBAPS6GkbT7/zjqi3AjjWbjOdMzs=";
+        linkify = beamPackages.buildMix rec {
+          name = "linkify";
+          version = "0.5.2";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "linkify";
+            rev = "2567e2c1073fa371fd26fd66dfa5bc77b6919c16";
+            hash = "sha256-e3wzlbRuyw/UB5Tb7IozX/WR1T+sIBf9C/o5Thki9vg=";
+          };
         };
-
-        beamDeps = with final; [ phoenix_view temple ];
-      };
-      search_parser = beamPackages.buildMix rec {
-        name = "search_parser";
-        version = "0.1.0";
-
-        src = fetchFromGitHub {
-          owner = "FloatingGhost";
-          repo = "pleroma-contrib-search-parser";
-          rev = "08971a81e68686f9ac465cfb6661d51c5e4e1e7f";
-          hash = "sha256-sbo9Kcp2oT05o2GAF+IgziLPYmCkWgBfFMBCytmqg3Y=";
+        mfm_parser = beamPackages.buildMix rec {
+          name = "mfm_parser";
+          version = "0.1.1";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "mfm-parser";
+            rev = "b21ab7754024af096f2d14247574f55f0063295b";
+            hash = "sha256-couG5jrAo0Fbk/WABd4n3vhXpDUp+9drxExKc5NM9CI=";
+          };
+
+          beamDeps = with final; [ phoenix_view temple ];
+          patchPhase = mimeTypePatchPhase;
         };
-
-        beamDeps = with final; [ nimble_parsec ];
-      };
-      temple = beamPackages.buildMix rec {
-        name = "temple";
-        version = "0.9.0-rc.0";
-
-        src = fetchFromGitea {
-          domain = "akkoma.dev";
-          owner = "AkkomaGang";
-          repo = "temple";
-          rev = "066a699ade472d8fa42a9d730b29a61af9bc8b59";
-          hash = "sha256-qA0z8WTMjO2OixcZBARn/LbuV3s3LGtwZ9nSjj/tWBc=";
+        search_parser = beamPackages.buildMix rec {
+          name = "search_parser";
+          version = "0.1.0";
+
+          src = fetchFromGitHub {
+            owner = "FloatingGhost";
+            repo = "pleroma-contrib-search-parser";
+            rev = "08971a81e68686f9ac465cfb6661d51c5e4e1e7f";
+            hash = "sha256-sbo9Kcp2oT05o2GAF+IgziLPYmCkWgBfFMBCytmqg3Y=";
+          };
+
+          beamDeps = with final; [ nimble_parsec ];
+        };
+        temple = beamPackages.buildMix rec {
+          name = "temple";
+          version = "0.9.0-rc.0";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "temple";
+            rev = "066a699ade472d8fa42a9d730b29a61af9bc8b59";
+            hash = "sha256-qA0z8WTMjO2OixcZBARn/LbuV3s3LGtwZ9nSjj/tWBc=";
+          };
+
+          mixEnv = "dev";
+          beamDeps = with final; [ earmark_parser ex_doc makeup makeup_elixir makeup_erlang nimble_parsec ];
+          patchPhase = mimeTypePatchPhase;
         };
 
-        mixEnv = "dev";
-        beamDeps = with final; [ earmark_parser ex_doc makeup makeup_elixir makeup_erlang nimble_parsec ];
-      };
-
-
-      # Some additional build inputs and build fixes
-      fast_html = prev.fast_html.override {
-        nativeBuildInputs = [ cmake ];
-        dontUseCmakeConfigure = true;
-      };
-      http_signatures = prev.http_signatures.override {
-        patchPhase = ''
-          substituteInPlace mix.exs --replace ":logger" ":logger, :public_key"
-        '';
-      };
-      majic = prev.majic.override {
-        buildInputs = [ file ];
-      };
-      syslog = prev.syslog.override {
-        buildPlugins = with beamPackages; [ pc ];
-      };
-
-      mime = prev.mime.override {
-        patchPhase = let
-          cfgFile = writeText "config.exs" ''
-            use Mix.Config
-            config :mime, :types, %{
-              "application/activity+json" => ["activity+json"],
-              "application/jrd+json" => ["jrd+json"],
-              "application/ld+json" => ["activity+json"],
-              "application/xml" => ["xml"],
-              "application/xrd+xml" => ["xrd+xml"]
-            }
+        # Some additional build inputs and build fixes
+        fast_html = prev.fast_html.override {
+          nativeBuildInputs = [ cmake ];
+          dontUseCmakeConfigure = true;
+        };
+        http_signatures = beamPackages.buildMix rec {
+          name = "http_signatures";
+          version = "0.1.2";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "http_signatures";
+            rev = "6640ce7d24c783ac2ef56e27d00d12e8dc85f396";
+            hash = "sha256-Q/IoVbM/TBgGCmx8AxiBHF2hARb0FbPml8N1HjN3CsE=";
+          };
+
+          beamDeps = with final; [ credo ex_doc dialyxir temple ];
+          patchPhase = ''
+            substituteInPlace mix.exs --replace ":logger" ":logger, :public_key"
+            ${mimeTypePatchPhase}
           '';
-        in ''
-          mkdir config
-          cp ${cfgFile} config/config.exs
-        '';
+        };
+        majic = beamPackages.buildMix {
+          name = "majic";
+          version = "0.1.2";
+
+          src = fetchFromGitea {
+            domain = "akkoma.dev";
+            owner = "AkkomaGang";
+            repo = "majic";
+            rev = "80540b36939ec83f48e76c61e5000e0fd67706f0";
+            hash = "sha256-OMM9aDRvbqCOBIE+iPySU8ONRn1BqHDql22rRSmdW08=";
+          };
+
+          buildInputs = [ file ];
+          beamDeps = with final; [ nimble_pool mime plug credo dialyxir ex_doc elixir_make ];
+          patchPhase = mimeTypePatchPhase;
+        };
+
+        syslog = prev.syslog.override {
+          buildPlugins = with beamPackages; [ pc ];
+        };
       };
-    });
   };
 
   passthru = {
@@ -181,8 +221,8 @@ beamPackages.mixRelease rec {
   meta = with lib; {
     description = "ActivityPub microblogging server";
     homepage = "https://akkoma.social";
-    license = licenses.agpl3;
-    maintainers = with maintainers; [ mvs ];
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ mvs tcmal ];
     platforms = platforms.unix;
   };
 }