main flake.nix
David van Munster  ·  2026-08-11
 1{
 2  description = "zmx - session persistence for terminal processes";
 3
 4  inputs = {
 5    zig2nix.url = "github:Cloudef/zig2nix";
 6  };
 7
 8  outputs =
 9    { zig2nix, ... }:
10    let
11      flake-utils = zig2nix.inputs.flake-utils;
12    in
13    (flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ] (
14      system:
15      let
16        env = zig2nix.outputs.zig-env.${system} {
17          zig = zig2nix.outputs.packages.${system}.zig-0_16_0;
18        };
19      in
20      with builtins;
21      with env.pkgs.lib;
22      let
23        isDarwin = env.pkgs.stdenv.hostPlatform.isDarwin;
24        sdkRoot = env.pkgs.apple-sdk.sdkroot;
25        xcrunWrapper = env.pkgs.writeShellScriptBin "xcrun" ''
26          echo "${sdkRoot}"
27        '';
28        xcodeselectWrapper = env.pkgs.writeShellScriptBin "xcode-select" ''
29          echo "${sdkRoot}"
30        '';
31
32        zmx-package = env.package (
33          {
34            src = cleanSource ./.;
35            zigBuildFlags = [ "-Doptimize=ReleaseSafe" ];
36            zigPreferMusl = !isDarwin;
37          }
38          // optionalAttrs isDarwin {
39            glibc = null;
40            musl = null;
41            nativeBuildInputs = [
42              xcrunWrapper
43              xcodeselectWrapper
44            ];
45          }
46        );
47      in
48      {
49        packages = {
50          zmx = zmx-package;
51          default = zmx-package;
52        };
53
54        apps = {
55          zmx = {
56            type = "app";
57            program = "${zmx-package}/bin/zmx";
58          };
59          default = {
60            type = "app";
61            program = "${zmx-package}/bin/zmx";
62          };
63
64          build = env.app [ ] "zig build \"$@\"";
65
66          test = env.app [ ] "zig build test -- \"$@\"";
67        };
68
69        devShells.default = env.mkShell {
70        };
71      }
72    ));
73}