forks/sorcery

git clone https://git.gae.moe/forks/sorcery

Charlotte Somperf: use arbrisseau binary cache90f94f2

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