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