summaryrefslogtreecommitdiff
path: root/pkgs/akkoma/default.nix
diff options
context:
space:
mode:
authorstuebinm2025-03-09 00:36:07 +0100
committerstuebinm2025-03-09 00:36:07 +0100
commit033f32a82be9ef833954760b961c02b77ec17fe7 (patch)
tree9d4a69cdade533b1607d7fca7ef2fc61e8b1fbeb /pkgs/akkoma/default.nix
parentef173df3b8d33f4c40af00a6d452de5a50b619d6 (diff)
pkgs/akkoma: bump to 3.15.1
it appears i am now bundling this, since nixpkgs is unreliable for this, and I will not interact with its handling of akkoma specifically (even as I also won't mor generally). Thanks to io who it seem to have accidentally nerdsniped into figuring out how to generate to the mix.nix file and update akkoma. Co-authored-by: io
Diffstat (limited to '')
-rw-r--r--pkgs/akkoma/default.nix211
1 files changed, 211 insertions, 0 deletions
diff --git a/pkgs/akkoma/default.nix b/pkgs/akkoma/default.nix
new file mode 100644
index 0000000..2e577f0
--- /dev/null
+++ b/pkgs/akkoma/default.nix
@@ -0,0 +1,211 @@
+{ lib
+, beamPackages
+, fetchgit
+, fetchFromGitea
+, fetchFromGitHub
+, fetchFromGitLab
+, cmake
+, file
+, nixosTests
+, ...
+}:
+beamPackages.mixRelease rec {
+ pname = "akkoma";
+ version = "3.15.1";
+
+ src = fetchgit {
+ url = "https://akkoma.dev/AkkomaGang/akkoma.git";
+ rev = "refs/tags/v3.15.1";
+ hash = "sha256-6qsqTguEVu9t6dW8c+VAE5Z7D3FbQ0S2ZfAN5qy7Xak=";
+ };
+
+ postPatch = ''
+ # Remove dependency on OS_Mon
+ sed -E -i 's/(^|\s):os_mon,//' \
+ mix.exs
+ '';
+
+ postBuild = ''
+ # Digest and compress static files
+ rm -f priv/static/READ_THIS_BEFORE_TOUCHING_FILES_HERE
+ mix phx.digest --no-compile
+ '';
+
+ mixNixDeps = import ./mix.nix {
+ inherit beamPackages lib;
+ 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"]
+ }
+ 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;
+ };
+ 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 = "6630c42aaaab124e697b4e513190c89d8b64e410";
+ hash = "sha256-KLsKBfCt6bUylSTTqRQi6ic0MyimanvIZRhU4Iv5Fmw=";
+ };
+
+ # 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=";
+ };
+ };
+ 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.2.0";
+
+ src = fetchgit {
+ url = "https://akkoma.dev/AkkomaGang/mfm-parser.git";
+ rev = "360a30267a847810a63ab48f606ba227b2ca05f0";
+ hash = "sha256-VJn9/i3peMhA+F/LyuPa3biZx0LXBPH+GbDsOWIxYE0=";
+ };
+
+ beamDeps = with final; [ phoenix_view temple ];
+ patchPhase = mimeTypePatchPhase;
+ };
+ 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;
+ };
+
+ # 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.3";
+
+ src = fetchFromGitea {
+ domain = "akkoma.dev";
+ owner = "AkkomaGang";
+ repo = "http_signatures";
+ rev = "d44c43d66758c6a73eaa4da9cffdbee0c5da44ae";
+ hash = "sha256-o5xF++AIJLVMFuQwldNyWpYJGWFHZZTfGy1V80TZzR8=";
+ };
+
+ beamDeps = with final; [ credo ex_doc dialyxir temple ];
+ patchPhase = ''
+ substituteInPlace mix.exs --replace ":logger" ":logger, :public_key"
+ ${mimeTypePatchPhase}
+ '';
+ };
+ majic = beamPackages.buildMix {
+ name = "majic";
+ version = "1.0.0";
+
+ 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 = {
+ tests = with nixosTests; { inherit akkoma akkoma-confined; };
+ inherit mixNixDeps;
+
+ # Used to make sure the service uses the same version of elixir as
+ # the package
+ elixirPackage = beamPackages.elixir;
+ };
+
+ meta = {
+ description = "ActivityPub microblogging server";
+ homepage = "https://akkoma.social";
+ license = lib.licenses.agpl3Only;
+ maintainers = with lib.maintainers; [ mvs ];
+ platforms = lib.platforms.unix;
+ };
+}