forks/sorcery
git clone https://git.gae.moe/forks/sorcery
ce1bca7
darwin-flake
1{ 2description = "Sorcery, a static Git forge" ; 3 4inputs . nixpkgs . url = "github:NixOS/nixpkgs/nixpkgs-unstable" ; 5 6outputs = { nixpkgs , ...} : 7let 8forAllSystems = nixpkgs . lib . genAttrs [ "x86_64-linux" "aarch64-darwin" ]; 9perSystem = system :let 10pkgs = import nixpkgs { inherit system ; }; 11buildPkgs = if pkgs . stdenv . hostPlatform . isLinux then pkgs . pkgsStatic else pkgs ; 12 13denoDeps = pkgs . stdenvNoCC . mkDerivation { 14pname = "sorcery-web-deps" ; 15version = "0.1.0" ; 16src = ./web ; 17nativeBuildInputs = [ pkgs . deno ]; 18dontConfigure = true ; 19dontFixup = true ; 20 21buildPhase = '' 22runHook preBuild 23export DENO_DIR = $ TMPDIR /deno-cache 24export DENO_NO_UPDATE_CHECK =1 25deno cache --frozen --lock=deno.lock *.ts *.tsx git/*.ts 26runHook postBuild 27'' ; 28 29installPhase = '' 30runHook preInstall 31mkdir -p " $ out " 32cp -R " $ DENO_DIR "/{npm,remote} " $ out /" 33deno run --no-config --no-lock --allow-read --allow-write ${ ./nix/normalize-deno-cache.ts } " $ out " deno.lock 34runHook postInstall 35'' ; 36outputHashMode = "recursive" ; 37outputHashAlgo = "sha256" ; 38outputHash = "sha256-9t3jyDDbzL/GgTHfo5J8p7Atb4wCpkXlYEwimm7DXa0=" ; 39}; 40 41shlex = pkgs . fetchFromGitHub { 42owner = "char" ; 43repo = "shlex" ; 44rev = "293b7c4bdc3b6c9a3195d226f0d8e92bf4516f96" ; 45hash = "sha256-aL5AJYVjnmvu8BJMD3f1z99e4MGJgNkUrOidWhr27NE=" ; 46}; 47 48sorcery = buildPkgs . rustPlatform . buildRustPackage { 49pname = "sorcery" ; 50version = "0.1.0" ; 51src = ./. ; 52cargoLock = { 53lockFile = ./Cargo.lock ; 54outputHashes . "arbrisseau-0.1.0" = "sha256-vvHdwNWSV2QVvJ+5a0dW5rAYIHcuVlQW6ME+B+uCH5k=" ; 55}; 56nativeBuildInputs = [ pkgs . deno pkgs . gitMinimal ]; 57 58preBuild = '' 59cp -R ${ denoDeps } deno-dir 60chmod -R u+w deno-dir 61export DENO_DIR = $ PWD /deno-dir 62( cd web && deno task check && deno task test && deno task build) 63'' ; 64 65meta . mainProgram = "sorceryd" ; 66}; 67 68sorcery-ssh = pkgs . stdenv . mkDerivation { 69pname = "sorcery-ssh" ; 70version = "0.1.0" ; 71src = pkgs . lib . fileset . toSource { 72root = ./extra/sorcery-ssh ; 73fileset = pkgs . lib . fileset . unions [ 74./extra/sorcery-ssh/build.zig 75./extra/sorcery-ssh/build.zig.zon 76./extra/sorcery-ssh/src 77]; 78}; 79nativeBuildInputs = [ pkgs . zig ]; 80 81postPatch = '' 82mkdir -p zig-pkg 83ln -s ${ shlex } zig-pkg/shlex-0.1.1-O1DEI5oDAQARcXkYasXdAAsR0riDfb-1_riTtx0vemxN 84'' ; 85 86dontSetZigDefaultFlags = true ; 87zigBuildFlags = [ 88"-Dtarget= ${ if pkgs . stdenv . hostPlatform . isLinux then "x86_64-linux-musl" else "aarch64-macos" } " 89"-Doptimize=ReleaseSafe" 90]; 91zigCheckFlags = [ 92"-Dtarget= ${ if pkgs . stdenv . hostPlatform . isLinux then "x86_64-linux-musl" else "aarch64-macos" } " 93"-Doptimize=ReleaseSafe" 94]; 95doCheck = true ; 96 97meta . mainProgram = "sorcery-ssh" ; 98}; 99 100sorcery-ssh-tui = buildPkgs . rustPlatform . buildRustPackage { 101pname = "sorcery-ssh-tui" ; 102version = "0.1.0" ; 103src = ./extra/sorcery-ssh/tui ; 104cargoLock . lockFile = ./extra/sorcery-ssh/tui/Cargo.lock ; 105meta . mainProgram = "sorcery-ssh-tui" ; 106}; 107in { 108packages = { 109default = sorcery ; 110inherit sorcery-ssh sorcery-ssh-tui ; 111}; 112 113devShells . default = buildPkgs . mkShell { 114inputsFrom = [ sorcery sorcery-ssh sorcery-ssh-tui ]; 115nativeBuildInputs = [ pkgs . git pkgs . rustfmt pkgs . zig ]; 116CARGO_BUILD_TARGET = buildPkgs . stdenv . hostPlatform . rust . rustcTarget ; 117}; 118}; 119in { 120packages = forAllSystems ( system :( perSystem system ). packages ); 121devShells = forAllSystems ( system :( perSystem system ). devShells ); 122}; 123}