]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - virtual/modules/websites/tools/mastodon/mastodon.nix
Put some database variables to environment
[perso/Immae/Config/Nix.git] / virtual / modules / websites / tools / mastodon / mastodon.nix
index c2c180727fd12f23322ff1b13b436f7cecc9425b..770aa2cb5b584cf3157ae92a7116206a4a032c85 100644 (file)
@@ -1,4 +1,4 @@
-{ env, ruby_2_5, bundlerEnv, defaultGemConfig, fetchedGithub, stdenv, writeText, pkgs, cacert }:
+{ env, ruby_2_5, bundlerEnv, defaultGemConfig, fetchedGithub, stdenv, writeText, pkgs }:
 let
   varDir = "/var/lib/mastodon_immae";
   socketsDir = "/run/mastodon";
@@ -20,26 +20,58 @@ let
       };
     };
   };
+  yarnModules = let
+      info = fetchedGithub ./mastodon.json;
+    in
+      pkgs.yarn2nix.mkYarnModules {
+        name = "mastodon-yarn-modules";
+        packageJSON = "${info.src}/package.json";
+        yarnLock = "${info.src}/yarn.lock";
+        yarnNix = ./yarn-packages.nix;
+        pkgConfig = {
+          uws = {
+            postInstall = ''
+              node-gyp rebuild > build_log.txt 2>&1 || true
+              '';
+            buildInputs = with pkgs; [ nodePackages.node-gyp ];
+          };
+          node-zopfli = {
+            postInstall = ''
+              node-pre-gyp install --fallback-to-build
+              '';
+            buildInputs = with pkgs; [ nodePackages.node-pre-gyp ];
+          };
+          node-sass = {
+            buildInputs = with pkgs; [ binutils libsass python ];
+            postInstall = let
+              nodeHeaders = pkgs.fetchurl {
+                url = "https://nodejs.org/download/release/v${pkgs.nodejs.version}/node-v${pkgs.nodejs.version}-headers.tar.gz";
+                sha256 = "12zzsf8my43b8qnlacp871ih5vqafl2vlpqp51xp6h3gckn2frwy";
+              };
+            in
+              ''
+                export AR=${pkgs.binutils.bintools}/bin/ar
+                node scripts/build.js --tarball=${nodeHeaders}
+              '';
+          };
+        };
+      };
   mastodon = stdenv.mkDerivation (fetchedGithub ./mastodon.json // rec {
-    __noChroot = true;
-    buildPhase = ''
-      yarn install --pure-lockfile
-      patchShebangs node_modules
-    '';
     installPhase = ''
       cp -a . $out
+      cp -a ${yarnModules}/node_modules $out
     '';
-    propagatedBuildInputs = [ gems pkgs.yarn pkgs.python2 pkgs.nodejs ];
+    buildInputs = [ yarnModules gems ];
   });
   config = writeText "mastodon_environment" ''
-    REDIS_HOST=localhost
-    REDIS_PORT=6379
-    REDIS_DB=13
-    DB_HOST=/run/postgresql
-    DB_USER=mastodon
-    DB_NAME=mastodon
+    REDIS_HOST=${env.redis.host}
+    REDIS_PORT=${env.redis.port}
+    REDIS_DB=${env.redis.db}
+    DB_HOST=${env.postgresql.socket}
+    DB_USER=${env.postgresql.user}
+    DB_NAME=${env.postgresql.database}
     DB_PASS=${env.postgresql.password}
-    DB_PORT=5432
+    DB_PORT=${env.postgresql.port}
 
     LOCAL_DOMAIN=mastodon.immae.eu
     LOCAL_HTTPS=true
@@ -82,12 +114,12 @@ let
         set +a
         cp -a $mastodon $out
         cd $out
-        chmod u+rwX . node_modules public
+        chmod u+rwX . public
         RAILS_ENV=production ${gems}/bin/rails assets:precompile
         rm -rf tmp/cache
         ln -sf ../../../../../../../${varDir}/tmp/cache tmp
         '';
-      buildInputs = [ gems pkgs.nodejs pkgs.yarn ];
+      buildInputs = [ gems gems.ruby pkgs.nodejs pkgs.yarn ];
     };
 in
   {