forks/sorcery

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

Grace Yodernix: flake for aarch64-darwince1bca7

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