about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/mobilizon/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/mobilizon/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/mobilizon/default.nix129
1 files changed, 129 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/mobilizon/default.nix b/nixpkgs/pkgs/servers/mobilizon/default.nix
new file mode 100644
index 000000000000..e4a75a4c91ce
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mobilizon/default.nix
@@ -0,0 +1,129 @@
+{ lib
+, callPackage
+, writeShellScriptBin
+, beamPackages
+, mix2nix
+, fetchFromGitHub
+, git
+, cmake
+, nixosTests
+, mobilizon-frontend
+, ...
+}:
+
+let
+  inherit (beamPackages) mixRelease buildMix;
+  common = callPackage ./common.nix { };
+in
+mixRelease rec {
+  inherit (common) pname version src;
+
+  nativeBuildInputs = [ git cmake ];
+
+  mixNixDeps = import ./mix.nix {
+    inherit beamPackages lib;
+    overrides = (final: prev:
+      (lib.mapAttrs
+        (_: value: value.override {
+          appConfigPath = src + "/config";
+        })
+        prev) // {
+        fast_html = prev.fast_html.override {
+          nativeBuildInputs = [ cmake ];
+        };
+        ex_cldr = prev.ex_cldr.overrideAttrs (old: {
+          # We have to use the GitHub sources, as it otherwise tries to download
+          # the locales at build time.
+          src = fetchFromGitHub {
+            owner = "elixir-cldr";
+            repo = "cldr";
+            rev = "v${old.version}";
+            sha256 = assert old.version == "2.37.5";
+              "sha256-T5Qvuo+xPwpgBsqHNZYnTCA4loToeBn1LKTMsDcCdYs=";
+          };
+          postInstall = ''
+            cp $src/priv/cldr/locales/* $out/lib/erlang/lib/ex_cldr-${old.version}/priv/cldr/locales/
+          '';
+        });
+        # Upstream issue: https://github.com/bryanjos/geo_postgis/pull/87
+        geo_postgis = prev.geo_postgis.overrideAttrs (old: {
+          propagatedBuildInputs = old.propagatedBuildInputs ++ [ final.ecto ];
+        });
+
+        # The remainder are Git dependencies (and their deps) that are not supported by mix2nix currently.
+        web_push_encryption = buildMix rec {
+          name = "web_push_encryption";
+          version = "0.3.1";
+          src = fetchFromGitHub {
+            owner = "danhper";
+            repo = "elixir-web-push-encryption";
+            rev = "6e143dcde0a2854c4f0d72816b7ecab696432779";
+            sha256 = "sha256-Da+/28SPZuUQBi8fQj31zmMvhMrYUaQIW4U4E+mRtMg=";
+          };
+          beamDeps = with final; [ httpoison jose ];
+        };
+        icalendar = buildMix rec {
+          name = "icalendar";
+          version = "unstable-2022-04-10";
+          src = fetchFromGitHub {
+            owner = "tcitworld";
+            repo = name;
+            rev = "1033d922c82a7223db0ec138e2316557b70ff49f";
+            sha256 = "sha256-N3bJZznNazLewHS4c2B7LP1lgxd1wev+EWVlQ7rOwfU=";
+          };
+          beamDeps = with final; [ mix_test_watch ex_doc timex ];
+        };
+        rajska = buildMix rec {
+          name = "rajska";
+          version = "1.3.3";
+          src = fetchFromGitHub {
+            owner = "tcitworld";
+            repo = name;
+            rev = "0c036448e261e8be6a512581c592fadf48982d84";
+            sha256 = "sha256-4pfply1vTAIT2Xvm3kONmrCK05xKfXFvcb8EKoSCXBE=";
+          };
+          beamDeps = with final; [ ex_doc credo absinthe excoveralls hammer mock ];
+        };
+        exkismet = buildMix rec {
+          name = "exkismet";
+          version = "0.0.3";
+          src = fetchFromGitHub {
+            owner = "tcitworld";
+            repo = name;
+            rev = "8b5485fde00fafbde20f315bec387a77f7358334";
+            sha256 = "sha256-ttgCWoBKU7VTjZJBhZNtqVF4kN7psBr/qOeR65MbTqw=";
+          };
+          beamDeps = with final; [ httpoison ex_doc credo doctor dialyxir ];
+        };
+
+      });
+  };
+
+  # Install the compiled js part
+  preBuild =
+    ''
+      cp -a "${mobilizon-frontend}/static" ./priv
+      chmod 770 -R ./priv
+    '';
+
+  postBuild = ''
+    mix phx.digest --no-deps-check
+  '';
+
+  passthru = {
+    tests.smoke-test = nixosTests.mobilizon;
+    updateScript = writeShellScriptBin "update.sh" ''
+      set -eou pipefail
+
+      ${mix2nix}/bin/mix2nix '${src}/mix.lock' > pkgs/servers/mobilizon/mix.nix
+    '';
+    elixirPackage = beamPackages.elixir;
+  };
+
+  meta = with lib; {
+    description = "Mobilizon is an online tool to help manage your events, your profiles and your groups";
+    homepage = "https://joinmobilizon.org/";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ minijackson erictapen ];
+  };
+}