mirror of
https://github.com/CHN-beta/nixos.git
synced 2026-01-12 06:49:24 +08:00
重写 mkPnpmPackage
This commit is contained in:
55
flake.lock
generated
55
flake.lock
generated
@@ -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": {
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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
27
local/pkgs/misskey.nix
Normal 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
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
85
local/pkgs/mkPnpmPackage.nix
Normal file
85
local/pkgs/mkPnpmPackage.nix
Normal 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
24
local/pkgs/rsshub.nix
Normal 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
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
'';
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user