forks/sorcery

Mirror of https://git.t4t.associates/char/sorcery

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

Grace Yodergraces patchesf7e7a66

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