|
| 1 | +{ |
| 2 | + pkgs ? let |
| 3 | + lock = (builtins.fromJSON (builtins.readFile ./flake.lock)).nodes.nixpkgs.locked; |
| 4 | + nixpkgs = fetchTarball { |
| 5 | + url = "https://github.com/nixos/nixpkgs/archive/${lock.rev}.tar.gz"; |
| 6 | + sha256 = lock.narHash; |
| 7 | + }; |
| 8 | + in |
| 9 | + import nixpkgs {overlays = [];}, |
| 10 | + ... |
| 11 | +}: let |
| 12 | + # Manifest data |
| 13 | + manifest = pkgs.lib.importJSON ./package.json; |
| 14 | + |
| 15 | + # All source codes |
| 16 | + source = ./.; |
| 17 | + |
| 18 | + # Executable |
| 19 | + exec = pkgs.writeShellScript "${manifest.name}-start.sh" '' |
| 20 | + # Change working directory to script |
| 21 | + cd "$(dirname "$0")/../lib" |
| 22 | +
|
| 23 | + ${pkgs.lib.getExe pkgs.nodejs} ./server.js |
| 24 | + ''; |
| 25 | +in |
| 26 | + pkgs.stdenv.mkDerivation { |
| 27 | + pname = manifest.name; |
| 28 | + version = manifest.version; |
| 29 | + |
| 30 | + src = source; |
| 31 | + |
| 32 | + nativeBuildInputs = [ |
| 33 | + pkgs.nodejs_22 |
| 34 | + pkgs.pnpm.configHook |
| 35 | + pkgs.typescript |
| 36 | + ]; |
| 37 | + |
| 38 | + buildPhase = '' |
| 39 | + pnpm next build |
| 40 | + ''; |
| 41 | + |
| 42 | + installPhase = '' |
| 43 | + # Create output directory |
| 44 | + mkdir -p $out |
| 45 | +
|
| 46 | + # Copy standalone as library |
| 47 | + cp -R ./.next/standalone $out/lib |
| 48 | +
|
| 49 | + # Copy static contents |
| 50 | + if [ -d "./.next/static" ]; then |
| 51 | + cp -R ./.next/static $out/lib/.next/static |
| 52 | + fi |
| 53 | +
|
| 54 | + # Copy public assets |
| 55 | + if [ -d "./public" ]; then |
| 56 | + cp -R ./public $out/lib/public |
| 57 | + fi |
| 58 | +
|
| 59 | + # Create executable directory |
| 60 | + mkdir -p $out/bin |
| 61 | +
|
| 62 | + # Copy shell script to executables |
| 63 | + cp -r ${exec} $out/bin/${manifest.name}-start |
| 64 | + ''; |
| 65 | + |
| 66 | + pnpmDeps = pkgs.pnpm.fetchDeps { |
| 67 | + pname = manifest.name; |
| 68 | + version = manifest.version; |
| 69 | + src = source; |
| 70 | + hash = "sha256-tPQhuySUKG+IYFleagKSSTx0IDv9RGDFYHlaHoan32s="; |
| 71 | + }; |
| 72 | + |
| 73 | + meta = with pkgs.lib; { |
| 74 | + homepage = "https://devops-journey.uz"; |
| 75 | + mainProgram = "${manifest.name}-start"; |
| 76 | + description = "Website of DevOps Journey"; |
| 77 | + license = with licenses; [cc-by-40]; |
| 78 | + platforms = with platforms; linux ++ darwin; |
| 79 | + maintainers = with maintainers; [orzklv]; |
| 80 | + }; |
| 81 | + } |
0 commit comments