add forgejo, add linkwarden, nixfmt, add secrets
This commit is contained in:
parent
7b7afc6798
commit
b938a41bee
8 changed files with 471 additions and 5 deletions
145
packages/linkwarden/default.nix
Normal file
145
packages/linkwarden/default.nix
Normal file
|
@ -0,0 +1,145 @@
|
|||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
buildNpmPackage,
|
||||
fetchFromGitHub,
|
||||
fetchYarnDeps,
|
||||
makeWrapper,
|
||||
nixosTests,
|
||||
yarnBuildHook,
|
||||
yarnConfigHook,
|
||||
# dependencies
|
||||
bash,
|
||||
monolith,
|
||||
nodejs,
|
||||
openssl,
|
||||
playwright-driver,
|
||||
prisma,
|
||||
prisma-engines,
|
||||
}:
|
||||
|
||||
let
|
||||
bcrypt = buildNpmPackage rec {
|
||||
pname = "bcrypt";
|
||||
version = "5.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kelektiv";
|
||||
repo = "node.bcrypt.js";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-mgfYEgvgC5JwgUhU8Kn/f1D7n9ljnIODkKotEcxQnDQ=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-CPXZ/yLEjTBIyTPVrgCvb+UGZJ6yRZUJOvBSZpLSABY=";
|
||||
|
||||
npmBuildScript = "install";
|
||||
|
||||
postInstall = ''
|
||||
cp -r lib $out/lib/node_modules/bcrypt/
|
||||
'';
|
||||
};
|
||||
in
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "linkwarden";
|
||||
version = "2.10.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "linkwarden";
|
||||
repo = "linkwarden";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-mtygHx09VqrVq5eiCm8UbVM+bjA6n4MbRRT1HcWnUAo=";
|
||||
};
|
||||
|
||||
yarnOfflineCache = fetchYarnDeps {
|
||||
yarnLock = src + "/yarn.lock";
|
||||
hash = "sha256-D6iZp7O90ZwxyiwRZ1H67eUphh3kRplu3ucOEJIRR/w=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
nodejs
|
||||
prisma
|
||||
yarnBuildHook
|
||||
yarnConfigHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
];
|
||||
|
||||
NODE_ENV = "production";
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace package.json \
|
||||
--replace-fail "yarn worker:prod" "ts-node --transpile-only --skip-project scripts/worker.ts"
|
||||
|
||||
for f in lib/api/storage/*Folder.ts lib/api/storage/*File.ts; do
|
||||
substituteInPlace $f \
|
||||
--replace-fail 'path.join(process.cwd(), storagePath + "/" + file' 'path.join(storagePath, file'
|
||||
done
|
||||
'';
|
||||
|
||||
preBuild = ''
|
||||
export PRISMA_CLIENT_ENGINE_TYPE='binary'
|
||||
export PRISMA_QUERY_ENGINE_LIBRARY="${prisma-engines}/lib/libquery_engine.node"
|
||||
export PRISMA_QUERY_ENGINE_BINARY="${prisma-engines}/bin/query-engine"
|
||||
export PRISMA_SCHEMA_ENGINE_BINARY="${prisma-engines}/bin/schema-engine"
|
||||
prisma generate
|
||||
'';
|
||||
|
||||
postBuild = ''
|
||||
substituteInPlace node_modules/next/dist/server/image-optimizer.js \
|
||||
--replace-fail 'this.cacheDir = (0, _path.join)(distDir, "cache", "images");' 'this.cacheDir = (0, _path.join)(process.env.LINKWARDEN_CACHE_DIR, "cache", "images");'
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
rm -r node_modules/bcrypt node_modules/@next/swc-*
|
||||
ln -s ${bcrypt}/lib/node_modules/bcrypt node_modules/
|
||||
mkdir -p $out/share/linkwarden/.next $out/bin
|
||||
cp -r * .next $out/share/linkwarden/
|
||||
|
||||
echo "#!${lib.getExe bash} -e
|
||||
export DATABASE_URL=\''${DATABASE_URL-"postgresql://\$DATABASE_USER:\$POSTGRES_PASSWORD@\$DATABASE_HOST:\$DATABASE_PORT/\$DATABASE_NAME"}
|
||||
export npm_config_cache="\$LINKWARDEN_CACHE_DIR/npm"
|
||||
${lib.getExe prisma} migrate deploy --schema $out/share/linkwarden/prisma/schema.prisma \
|
||||
&& ${lib.getExe' nodejs "npm"} start --prefix $out/share/linkwarden -- -H \$LINKWARDEN_HOST -p \$LINKWARDEN_PORT
|
||||
" > $out/bin/start.sh
|
||||
chmod +x $out/bin/start.sh
|
||||
|
||||
makeWrapper $out/bin/start.sh $out/bin/linkwarden \
|
||||
--prefix PATH : "${
|
||||
lib.makeBinPath [
|
||||
bash
|
||||
monolith
|
||||
openssl
|
||||
]
|
||||
}" \
|
||||
--set-default PRISMA_CLIENT_ENGINE_TYPE 'binary' \
|
||||
--set-default PRISMA_QUERY_ENGINE_LIBRARY "${prisma-engines}/lib/libquery_engine.node" \
|
||||
--set-default PRISMA_QUERY_ENGINE_BINARY "${prisma-engines}/bin/query-engine" \
|
||||
--set-default PRISMA_SCHEMA_ENGINE_BINARY "${prisma-engines}/bin/schema-engine" \
|
||||
--set-default PLAYWRIGHT_LAUNCH_OPTIONS_EXECUTABLE_PATH ${playwright-driver.browsers-chromium}/chromium-*/chrome-linux/chrome \
|
||||
--set-default LINKWARDEN_CACHE_DIR /var/cache/linkwarden \
|
||||
--set-default LINKWARDEN_HOST localhost \
|
||||
--set-default LINKWARDEN_PORT 3000 \
|
||||
--set-default STORAGE_FOLDER /var/lib/linkwarden
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.tests = {
|
||||
inherit (nixosTests) linkwarden;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Self-hosted collaborative bookmark manager to collect, organize, and preserve webpages, articles, and more...";
|
||||
homepage = "https://linkwarden.app/";
|
||||
license = lib.licenses.agpl3Only;
|
||||
maintainers = with lib.maintainers; [ jvanbruegge ];
|
||||
platforms = lib.platforms.linux;
|
||||
mainProgram = "linkwarden";
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue