{ stdenv, lib, nixosTests, fetchFromGitHub, nodejs, pnpm, makeWrapper, python3, bash, jemalloc, ffmpeg-headless, writeShellScript, xcbuild, ... }: stdenv.mkDerivation (finalAttrs: { pname = "misskey"; version = "2024.10.0"; src = fetchFromGitHub { owner = "misskey-dev"; repo = finalAttrs.pname; rev = finalAttrs.version; hash = "sha256-cQ8JQnnaS6aX2wZdnimTznHj20hJe0CJ4NESybCk9CU="; fetchSubmodules = true; }; nativeBuildInputs = [ nodejs pnpm.configHook makeWrapper python3 ] ++ lib.optionals stdenv.isDarwin [ xcbuild.xcrun ]; # https://nixos.org/manual/nixpkgs/unstable/#javascript-pnpm pnpmDeps = pnpm.fetchDeps { inherit (finalAttrs) pname version src; hash = "sha256-oH4raw+zIQKY+mydteKkY0LqW+13u1408ibm30j1Wss="; }; buildPhase = '' runHook preBuild # https://github.com/NixOS/nixpkgs/pull/296697/files#r1617546739 ( cd node_modules/.pnpm/node_modules/v-code-diff pnpm run postinstall ) # https://github.com/NixOS/nixpkgs/pull/296697/files#r1617595593 export npm_config_nodedir=${nodejs} ( cd node_modules/.pnpm/node_modules/re2 pnpm run rebuild ) ( cd node_modules/.pnpm/node_modules/sharp pnpm run install ) pnpm build runHook postBuild ''; installPhase = let checkEnvVarScript = writeShellScript "misskey-check-env-var" '' if [[ -z $MISSKEY_CONFIG_YML ]]; then echo "MISSKEY_CONFIG_YML must be set to the location of the Misskey config file." exit 1 fi ''; in '' runHook preInstall mkdir -p $out/data cp -r . $out/data # Set up symlink for use at runtime # TODO: Find a better solution for this (potentially patch Misskey to make this configurable?) # Line that would need to be patched: https://github.com/misskey-dev/misskey/blob/9849aab40283cbde2184e74d4795aec8ef8ccba3/packages/backend/src/core/InternalStorageService.ts#L18 # Otherwise, maybe somehow bindmount a writable directory into /data/files. ln -s /var/lib/misskey $out/data/files makeWrapper ${pnpm}/bin/pnpm $out/bin/misskey \ --run "${checkEnvVarScript} || exit" \ --chdir $out/data \ --add-flags run \ --set-default NODE_ENV production \ --prefix PATH : ${ lib.makeBinPath [ nodejs pnpm bash ] } \ --prefix LD_LIBRARY_PATH : ${ lib.makeLibraryPath [ jemalloc ffmpeg-headless stdenv.cc.cc.lib ] } runHook postInstall ''; passthru = { inherit (finalAttrs) pnpmDeps; tests.misskey = nixosTests.misskey; }; meta = { description = "🌎 An interplanetary microblogging platform 🚀"; homepage = "https://misskey-hub.net/"; license = lib.licenses.agpl3Only; maintainers = [ lib.maintainers.feathecutie ]; platforms = lib.platforms.unix; mainProgram = "misskey"; }; })