重写 mkPnpmPackage

This commit is contained in:
2024-05-18 15:21:20 +08:00
parent 46f109cce1
commit bd32f705bc
10 changed files with 141 additions and 179 deletions

55
flake.lock generated
View File

@@ -946,24 +946,6 @@
"type": "github"
}
},
"flake-utils_8": {
"inputs": {
"systems": "systems_8"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fluent-kde": {
"flake": false,
"locked": {
@@ -2107,27 +2089,6 @@
"type": "github"
}
},
"pnpm2nix-nzbr": {
"inputs": {
"flake-utils": "flake-utils_8",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1708175105,
"narHash": "sha256-in16QROQJUoZ1NFvBo2jwKJAhOes1w7kR+jQZr42glQ=",
"owner": "CHN-beta",
"repo": "pnpm2nix-nzbr",
"rev": "6b9e77486722b925f51077e891c41dd5c64fabdb",
"type": "github"
},
"original": {
"owner": "CHN-beta",
"repo": "pnpm2nix-nzbr",
"type": "github"
}
},
"purescript-overlay": {
"inputs": {
"nixpkgs": [
@@ -2255,7 +2216,6 @@
"nur-xddxdd": "nur-xddxdd",
"openxlsx": "openxlsx",
"plasma-manager": "plasma-manager",
"pnpm2nix-nzbr": "pnpm2nix-nzbr",
"qchem": "qchem",
"rsshub": "rsshub",
"rycee": "rycee",
@@ -2577,21 +2537,6 @@
"type": "github"
}
},
"systems_8": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tgbot-cpp": {
"flake": false,
"locked": {

View File

@@ -31,7 +31,6 @@
napalm = { url = "github:nix-community/napalm"; inputs.nixpkgs.follows = "nixpkgs"; };
nixpak = { url = "github:nixpak/nixpak"; inputs.nixpkgs.follows = "nixpkgs"; };
deploy-rs = { url = "github:serokell/deploy-rs"; inputs.nixpkgs.follows = "nixpkgs"; };
pnpm2nix-nzbr = { url = "github:CHN-beta/pnpm2nix-nzbr"; inputs.nixpkgs.follows = "nixpkgs"; };
plasma-manager =
{
url = "github:pjones/plasma-manager";

View File

@@ -2,8 +2,10 @@ inputs: rec
{
typora = inputs.pkgs.callPackage ./typora {};
vesta = inputs.pkgs.callPackage ./vesta {};
rsshub = inputs.pkgs.callPackage ./rsshub { src = inputs.topInputs.rsshub; nodejs = inputs.pkgs.nodejs_21; };
misskey = inputs.pkgs.callPackage ./misskey { nodejs = inputs.pkgs.nodejs_21; src = inputs.topInputs.misskey; };
rsshub = inputs.pkgs.callPackage ./rsshub.nix
{ inherit mkPnpmPackage; src = inputs.topInputs.rsshub; nodejs = inputs.pkgs.nodejs_21; };
misskey = inputs.pkgs.callPackage ./misskey.nix
{ inherit mkPnpmPackage; nodejs = inputs.pkgs.nodejs_21; src = inputs.topInputs.misskey; };
mk-meili-mgn = inputs.pkgs.callPackage ./mk-meili-mgn {};
vaspkit = inputs.pkgs.callPackage ./vaspkit { inherit (inputs.localLib) attrsToList; };
v-sim = inputs.pkgs.callPackage ./v-sim { src = inputs.topInputs.v-sim; };
@@ -71,6 +73,7 @@ inputs: rec
hpcstat = inputs.pkgs.callPackage ./hpcstat { inherit nameof sqlite-orm zpp-bits date openxlsx; };
openxlsx = inputs.pkgs.callPackage ./openxlsx { src = inputs.topInputs.openxlsx; };
sqlite-orm = inputs.pkgs.callPackage ./sqlite-orm { src = inputs.topInputs.sqlite-orm; };
mkPnpmPackage = inputs.pkgs.callPackage ./mkPnpmPackage.nix {};
fromYaml = content: builtins.fromJSON (builtins.readFile
(inputs.pkgs.runCommand "toJSON" {}

27
local/pkgs/misskey.nix Normal file
View File

@@ -0,0 +1,27 @@
{
lib, mkPnpmPackage, nodejs, writeShellScript,
bash, cypress, vips, src
}: (mkPnpmPackage.override { inherit nodejs; })
{
inherit src;
extraIntegritySha256."https://github.com/aiscript-dev/aiscript-languageserver/releases/download/0.1.5/aiscript-dev-aiscript-languageserver-0.1.5.tgz" = "1mhnwa8h48bc21f0zv8q93aphiqz9i70r7m4xsa4sd1mlncfgyl7";
extraNativeBuildInputs = [ bash nodejs.pkgs.typescript nodejs.pkgs.gulp ];
extraAttrs =
{
CYPRESS_INSTALL_BINARY = "0";
NODE_ENV = "production";
postInstall =
let startScript = writeShellScript "misskey"
''
export PATH=${lib.makeBinPath [ bash nodejs nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress ]}:$PATH
export CYPRESS_RUN_BINARY="${cypress}/bin/Cypress"
export NODE_ENV=production
pnpm run migrateandstart
'';
in
''
mkdir -p $out/bin
cp ${startScript} $out/bin/misskey
'';
};
}

View File

@@ -1,69 +0,0 @@
{
lib, stdenv, mkPnpmPackage, fetchurl, nodejs, writeShellScript, buildFHSEnv,
bash, cypress, vips, pkg-config, src, libtensorflow
}:
let
name = "misskey";
originalPnpmPackage = mkPnpmPackage
{
inherit name src nodejs;
copyPnpmStore = true;
extraIntegritySha256."https://github.com/aiscript-dev/aiscript-languageserver/releases/download/0.1.5/aiscript-dev-aiscript-languageserver-0.1.5.tgz" = "1mhnwa8h48bc21f0zv8q93aphiqz9i70r7m4xsa4sd1mlncfgyl7";
};
startScript = writeShellScript "misskey"
''
export PATH=${lib.makeBinPath [ bash nodejs nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress ]}:$PATH
export CYPRESS_RUN_BINARY="${cypress}/bin/Cypress"
export NODE_ENV=production
pnpm run migrateandstart
'';
in
stdenv.mkDerivation rec
{
inherit src name;
buildInputs =
[
bash nodejs nodejs.pkgs.typescript nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress vips pkg-config
];
nativeBuildInputs = buildInputs;
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}
pnpm config set reporter append-only
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
mkdir -p $out/bin
cp ${startScript} $out/bin/misskey
mkdir -p $out/files
runHook postInstall
'';
passthru =
{
inherit originalPnpmPackage startScript;
};
}

View File

@@ -0,0 +1,85 @@
{ lib, remarshal, fetchurl, runCommand, nodejs, stdenv, pkg-config, writeText }:
{
src,
lockFile ? "${src}/pnpm-lock.yaml",
packageFile ? "${src}/package.json",
pname ? (builtins.fromJSON (builtins.readFile packageFile)).name,
version ? (builtins.fromJSON (builtins.readFile packageFile)).version or null,
extraIntegritySha256 ? {},
registry ? "https://registry.npmjs.org",
extraNativeBuildInputs ? [],
buildScript ? "build",
extraAttrs ? {},
}:
let
originalLock = builtins.fromJSON
(builtins.readFile (runCommand "toJSON" { } "${remarshal}/bin/yaml2json ${lockFile} $out"));
patchedLock = originalLock
// {
packages = lib.mapAttrs
(name: value:
if (value.resolution ? integrity) == (value.resolution ? tarball)
then throw "could not determine source ${name}"
else if value.resolution ? integrity then
# name maybe /@vue/compiler-core@3.4.18 or @vue/compiler-core@3.4.18
# or /@storybook/core-server@8.0.0-beta.6(react-dom@18.2.0)(react@18.2.0)
let nameAtVersion = builtins.head (lib.splitString "(" name);
in let
version = lib.last (lib.splitString "@" nameAtVersion);
name = lib.last (lib.init (lib.splitString "@" nameAtVersion));
baseName = lib.last (lib.splitString "/" name);
url = "${registry}/${name}/-/${baseName}-${version}.tgz";
tarball = fetchurl { inherit url; sha512 = value.resolution.integrity; };
in value // { resolution.tarball = "file:${tarball}"; }
else # if value.resolution ? tarball then
if lib.hasPrefix "https://codeload.github.com" value.resolution.tarball then
let
match = lib.strings.match
"https://codeload.github.com/([^/]+)/([^/]+)/tar\\.gz/([a-f0-9]+)" value.resolution.tarball;
repo = fetchGit
{
url = "https://github.com/${builtins.elemAt match 0}/${builtins.elemAt match 1}";
rev = builtins.elemAt match 2;
shallow = true;
};
tarball = runCommand "${builtins.elemAt match 1}.tgz" {} "tar -czf $out -C ${repo} .";
in value // { resolution.tarball = "file:${tarball}"; }
else
let tarball = fetchurl rec
{ url = value.resolution.tarball; sha256 = extraIntegritySha256.${url}; };
in value // { resolution.tarball = "file:${tarball}"; }
)
originalLock.packages;
};
patchedLockFile = writeText "pnpm-lock.yaml" (builtins.toJSON patchedLock);
in stdenv.mkDerivation
({
inherit src pname version;
nativeBuildInputs = [ nodejs nodejs.pkgs.pnpm pkg-config ] ++ extraNativeBuildInputs;
configurePhase =
''
runHook preConfigure
export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME
export npm_config_nodedir=${nodejs}
pnpm config set reporter append-only
cp -f ${patchedLockFile} pnpm-lock.yaml
runHook postConfigure
'';
buildPhase =
''
runHook preBuild
pnpm install --frozen-lockfile --offline
pnpm run ${buildScript}
runHook postBuild
'';
installPhase =
''
runHook preInstall
mkdir -p $out
mv * .* $out
runHook postInstall
'';
} // extraAttrs)

24
local/pkgs/rsshub.nix Normal file
View File

@@ -0,0 +1,24 @@
{
lib, mkPnpmPackage, nodejs, writeShellScript,
bash, chromium, src, git
}: (mkPnpmPackage.override { inherit nodejs; })
{
inherit src;
extraNativeBuildInputs = [ bash git ];
extraAttrs =
{
PUPPETEER_SKIP_DOWNLOAD = true;
postInstall =
let startScript = writeShellScript "rsshub"
''
export PATH=${lib.makeBinPath [ bash nodejs nodejs.pkgs.pnpm chromium git ]}:$PATH
export CHROMIUM_EXECUTABLE_PATH=chromium
pnpm start
'';
in
''
mkdir -p $out/bin
cp ${startScript} $out/bin/rsshub
'';
};
}

View File

@@ -1,50 +0,0 @@
{
lib, stdenv, mkPnpmPackage, nodejs, writeShellScript,
chromium, bash, src, git
}:
let
name = "rsshub";
originalPnpmPackage = mkPnpmPackage { inherit name src nodejs; };
nodeModules = originalPnpmPackage.nodeModules.overrideAttrs { PUPPETEER_SKIP_DOWNLOAD = true; };
rsshub-unwrapped = stdenv.mkDerivation
{
inherit src;
name = "${name}-unwrapped";
configurePhase =
''
export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME
export npm_config_nodedir=${nodejs}
runHook preConfigure
ln -s ${nodeModules}/. node_modules
runHook postConfigure
'';
installPhase =
''
runHook preInstall
mkdir -p $out
mv * .* $out
runHook postInstall
'';
};
startScript = writeShellScript "rsshub"
''
cd ${rsshub-unwrapped}
export PATH=${lib.makeBinPath [ bash nodejs nodejs.pkgs.pnpm chromium git ]}:$PATH
export CHROMIUM_EXECUTABLE_PATH=chromium
pnpm start
'';
in stdenv.mkDerivation
{
inherit name;
phases = [ "installPhase" ];
installPhase =
''
runHook preInstall
mkdir -p $out/bin
cp ${startScript} $out/bin/rsshub
runHook postInstall
'';
}

View File

@@ -25,7 +25,6 @@ inputs:
topInputs.qchem.overlays.default
topInputs.nixd.overlays.default
topInputs.napalm.overlays.default
topInputs.pnpm2nix-nzbr.overlays.default
topInputs.aagl.overlays.default
topInputs.bscpkgs.overlays.default
(final: prev:

View File

@@ -1,4 +1,3 @@
* 读 pnpm2nix重写用到它的包。
* 使用 wrap 好的 intel 编译器。
* 更新到 24.05