forks/sorcery

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

Grace Yodertypst: gate behind feature flag37af77a

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