diff --git a/flake.lock b/flake.lock index d5d741e3..e4ed9466 100644 --- a/flake.lock +++ b/flake.lock @@ -686,11 +686,11 @@ ] }, "locked": { - "lastModified": 1692778062, - "narHash": "sha256-h7WFkl87bLMrfecF9h8FAAoW5fhBcybtYcRxtpeQqn4=", + "lastModified": 1692918416, + "narHash": "sha256-SPbFwuIJ5HIhoZxI6snQ3QGyrusqB8eqX/3aOtx+afA=", "owner": "CHN-beta", "repo": "pnpm2nix-nzbr", - "rev": "6e74fe72a245f1bae87fb3d20ea632c6465ec2ce", + "rev": "7472a7749fc9f1ef7b75b618d6645f84ead2764d", "type": "github" }, "original": { diff --git a/local/pkgs/default.nix b/local/pkgs/default.nix index 254c38e6..4e623387 100644 --- a/local/pkgs/default.nix +++ b/local/pkgs/default.nix @@ -7,4 +7,5 @@ oneapi = callPackage ./oneapi {}; send = callPackage ./send {}; rsshub = callPackage ./rsshub {}; + misskey = callPackage ./misskey {}; } diff --git a/local/pkgs/misskey/default.nix b/local/pkgs/misskey/default.nix new file mode 100644 index 00000000..9268e7e8 --- /dev/null +++ b/local/pkgs/misskey/default.nix @@ -0,0 +1,80 @@ +{ + lib, stdenv, mkPnpmPackage, fetchFromGitHub, nodejs_20, writeShellScript, buildFHSEnv, + bash, cypress, vips, pkg-config +}: +let + pname = "misskey"; + version = "13.14.2"; + src = fetchFromGitHub + { + owner = "CHN-beta"; + repo = "misskey"; + rev = "e02ecb3819f6f05352d43b64ae59fa1bd683e2e0"; + hash = "sha256-zsYM67LYUn+bI6kbdW9blftxw5TUxCdzlfaOOEgZz+Q="; + fetchSubmodules = true; + }; + originalPnpmPackage = mkPnpmPackage + { + inherit pname version src; + nodejs = nodejs_20; + copyPnpmStore = true; + }; + misskey-unwrapped = stdenv.mkDerivation + { + inherit version src; + pname = "${pname}-unwrapped"; + nativeBuildInputs = + [ bash nodejs_20 nodejs_20.pkgs.typescript nodejs_20.pkgs.pnpm nodejs_20.pkgs.gulp cypress vips pkg-config ]; + CYPRESS_RUN_BINARY = "${cypress}/bin/Cypress"; + NODE_ENV = "production"; + configurePhase = + '' + export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME + export npm_config_nodedir=${nodejs_20} + + runHook preConfigure + + store=$(pnpm store path) + mkdir -p $(dirname $store) + + cp -f ${originalPnpmPackage.passthru.patchedLockfileYaml} pnpm-lock.yaml + cp -RL ${originalPnpmPackage.passthru.pnpmStore} $store + chmod -R +w $store + pnpm install --frozen-lockfile --offline + + runHook postConfigure + ''; + buildPhase = + '' + runHook preBuild + pnpm run build + runHook postBuild + ''; + installPhase = + '' + runHook preInstall + mkdir -p $out + mv * .* $out + runHook postInstall + ''; + }; + startScript = writeShellScript "misskey" + '' + cd ${misskey-unwrapped} + export PATH=${lib.makeBinPath [ bash nodejs_20 nodejs_20.pkgs.pnpm nodejs_20.pkgs.gulp cypress ]}:$PATH + export CYPRESS_RUN_BINARY="${cypress}/bin/Cypress" + export NODE_ENV=production + pnpm run migrateandstart + ''; +in stdenv.mkDerivation rec +{ + inherit pname version; + phases = [ "installPhase" ]; + installPhase = + '' + runHook preInstall + mkdir -p $out/bin + cp ${startScript} $out/bin/misskey + runHook postInstall + ''; +}