{ description = "Sorcery, a static Git forge"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; outputs = { nixpkgs, ... }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; denoDeps = pkgs.stdenvNoCC.mkDerivation { pname = "sorcery-web-deps"; version = "0.1.0"; src = ./web; nativeBuildInputs = [ pkgs.deno ]; dontConfigure = true; dontFixup = true; buildPhase = '' runHook preBuild export DENO_DIR=$out mkdir -p "$DENO_DIR" deno cache --lock=deno.lock build.ts main.tsx historical.tsx highlight.ts git/*.ts deno cache npm:pako runHook postBuild ''; installPhase = "true"; outputHashMode = "recursive"; outputHashAlgo = "sha256"; outputHash = "sha256-GPA+e94CEvc/FVohcgY2ev6l2sxORxw0OrphKUQMtKk="; }; shlex = pkgs.fetchFromGitHub { owner = "char"; repo = "shlex"; rev = "293b7c4bdc3b6c9a3195d226f0d8e92bf4516f96"; hash = "sha256-aL5AJYVjnmvu8BJMD3f1z99e4MGJgNkUrOidWhr27NE="; }; sorcery = pkgs.pkgsStatic.rustPlatform.buildRustPackage { pname = "sorcery"; version = "0.1.0"; src = ./.; cargoLock = { lockFile = ./Cargo.lock; outputHashes."arbrisseau-0.1.0" = "sha256-J+G8pQr2a6v7LNnn7jh306sRBqh0/uNgH7D8c115rxY="; }; nativeBuildInputs = [ pkgs.deno pkgs.gitMinimal ]; preBuild = '' cp -R ${denoDeps} deno-dir chmod -R u+w deno-dir export DENO_DIR=$PWD/deno-dir (cd web && deno task check && deno task test && deno task build) ''; meta.mainProgram = "sorceryd"; }; sorcery-ssh = pkgs.stdenv.mkDerivation { pname = "sorcery-ssh"; version = "0.1.0"; src = pkgs.lib.fileset.toSource { root = ./extra/sorcery-ssh; fileset = pkgs.lib.fileset.unions [ ./extra/sorcery-ssh/build.zig ./extra/sorcery-ssh/build.zig.zon ./extra/sorcery-ssh/src ]; }; nativeBuildInputs = [ pkgs.zig ]; postPatch = '' mkdir -p zig-pkg ln -s ${shlex} zig-pkg/shlex-0.1.1-O1DEI5oDAQARcXkYasXdAAsR0riDfb-1_riTtx0vemxN ''; dontSetZigDefaultFlags = true; zigBuildFlags = [ "-Dtarget=x86_64-linux-musl" "-Doptimize=ReleaseSafe" ]; zigCheckFlags = [ "-Dtarget=x86_64-linux-musl" "-Doptimize=ReleaseSafe" ]; doCheck = true; meta.mainProgram = "sorcery-ssh"; }; sorcery-ssh-tui = pkgs.pkgsStatic.rustPlatform.buildRustPackage { pname = "sorcery-ssh-tui"; version = "0.1.0"; src = ./extra/sorcery-ssh/tui; cargoLock.lockFile = ./extra/sorcery-ssh/tui/Cargo.lock; meta.mainProgram = "sorcery-ssh-tui"; }; in { packages.${system} = { default = sorcery; inherit sorcery-ssh sorcery-ssh-tui; }; devShells.${system}.default = pkgs.pkgsStatic.mkShell { inputsFrom = [ sorcery sorcery-ssh sorcery-ssh-tui ]; nativeBuildInputs = [ pkgs.git pkgs.rustfmt pkgs.zig ]; CARGO_BUILD_TARGET = pkgs.pkgsStatic.stdenv.hostPlatform.rust.rustcTarget; }; }; }