char/sorcery

static-files based git repo viewer

git clone https://git.t4t.associates/char/sorcery

Charlotte Somadd sorcery-ssh with sorcery-ssh-tui8f07a0e

main
3.3 KiB112 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=$out
22          mkdir -p "$DENO_DIR"
23          deno cache --lock=deno.lock build.ts main.tsx historical.tsx highlight.ts git/*.ts
24          deno cache npm:pako
25          runHook postBuild
26        '';
27
28        installPhase = "true";
29        outputHashMode = "recursive";
30        outputHashAlgo = "sha256";
31        outputHash = "sha256-GPA+e94CEvc/FVohcgY2ev6l2sxORxw0OrphKUQMtKk=";
32      };
33
34      shlex = pkgs.fetchFromGitHub {
35        owner = "char";
36        repo = "shlex";
37        rev = "293b7c4bdc3b6c9a3195d226f0d8e92bf4516f96";
38        hash = "sha256-aL5AJYVjnmvu8BJMD3f1z99e4MGJgNkUrOidWhr27NE=";
39      };
40
41      sorcery = pkgs.pkgsStatic.rustPlatform.buildRustPackage {
42        pname = "sorcery";
43        version = "0.1.0";
44        src = ./.;
45        cargoLock = {
46          lockFile = ./Cargo.lock;
47          outputHashes."arbrisseau-0.1.0" = "sha256-J+G8pQr2a6v7LNnn7jh306sRBqh0/uNgH7D8c115rxY=";
48        };
49        nativeBuildInputs = [ pkgs.deno pkgs.gitMinimal ];
50
51        preBuild = ''
52          cp -R ${denoDeps} deno-dir
53          chmod -R u+w deno-dir
54          export DENO_DIR=$PWD/deno-dir
55          (cd web && deno task check && deno task test && deno task build)
56        '';
57
58        meta.mainProgram = "sorceryd";
59      };
60
61      sorcery-ssh = pkgs.stdenv.mkDerivation {
62        pname = "sorcery-ssh";
63        version = "0.1.0";
64        src = pkgs.lib.fileset.toSource {
65          root = ./extra/sorcery-ssh;
66          fileset = pkgs.lib.fileset.unions [
67            ./extra/sorcery-ssh/build.zig
68            ./extra/sorcery-ssh/build.zig.zon
69            ./extra/sorcery-ssh/src
70          ];
71        };
72        nativeBuildInputs = [ pkgs.zig ];
73
74        postPatch = ''
75          mkdir -p zig-pkg
76          ln -s ${shlex} zig-pkg/shlex-0.1.1-O1DEI5oDAQARcXkYasXdAAsR0riDfb-1_riTtx0vemxN
77        '';
78
79        dontSetZigDefaultFlags = true;
80        zigBuildFlags = [
81          "-Dtarget=x86_64-linux-musl"
82          "-Doptimize=ReleaseSafe"
83        ];
84        zigCheckFlags = [
85          "-Dtarget=x86_64-linux-musl"
86          "-Doptimize=ReleaseSafe"
87        ];
88        doCheck = true;
89
90        meta.mainProgram = "sorcery-ssh";
91      };
92
93      sorcery-ssh-tui = pkgs.pkgsStatic.rustPlatform.buildRustPackage {
94        pname = "sorcery-ssh-tui";
95        version = "0.1.0";
96        src = ./extra/sorcery-ssh/tui;
97        cargoLock.lockFile = ./extra/sorcery-ssh/tui/Cargo.lock;
98        meta.mainProgram = "sorcery-ssh-tui";
99      };
100    in {
101      packages.${system} = {
102        default = sorcery;
103        inherit sorcery-ssh sorcery-ssh-tui;
104      };
105
106      devShells.${system}.default = pkgs.pkgsStatic.mkShell {
107        inputsFrom = [ sorcery sorcery-ssh sorcery-ssh-tui ];
108        nativeBuildInputs = [ pkgs.git pkgs.rustfmt pkgs.zig ];
109        CARGO_BUILD_TARGET = pkgs.pkgsStatic.stdenv.hostPlatform.rust.rustcTarget;
110      };
111    };
112}