repos / zmx

session persistence for terminal processes
git clone https://github.com/neurosnap/zmx.git

commit
c15a46b
parent
f756c23
author
Britton Robitzsch
date
2025-12-05 14:38:12 -0500 EST
add nix flake (#5)

4 files changed,  +321, -0
M .gitignore
+5, -0
1@@ -10,3 +10,8 @@ zig_std_src/
2 ghostty_src/
3 prior_art/
4 .beads/
5+
6+# Nix
7+result
8+result-*
9+.direnv/
A build.zig.zon2json-lock
+184, -0
  1@@ -0,0 +1,184 @@
  2+{
  3+  "ghostty-1.3.0-dev-5UdBC1jbPQQiKIuCh-CDmtqsuAVn7HUDNjkzKjt9H_aX": {
  4+    "name": "ghostty",
  5+    "url": "git+https://github.com/ghostty-org/ghostty.git?ref=HEAD#4ff0e0c9d251ddd0687ead578a90d58d63f9840b",
  6+    "hash": "sha256-S7ksHBC6jVDnSDaFgVhJ5wwdEjtfVhbPvkqWxkFH8kA=",
  7+    "rev": "4ff0e0c9d251ddd0687ead578a90d58d63f9840b"
  8+  },
  9+  "libxev-0.0.0-86vtc4IcEwCqEYxEYoN_3KXmc6A9VLcm22aVImfvecYs": {
 10+    "name": "libxev",
 11+    "url": "https://deps.files.ghostty.org/libxev-34fa50878aec6e5fa8f532867001ab3c36fae23e.tar.gz",
 12+    "hash": "sha256-YAPqa5bkpRihKPkyMn15oRvTCZaxO3O66ymRY3lIfdc="
 13+  },
 14+  "vaxis-0.5.1-BWNV_LosCQAGmCCNOLljCIw6j6-yt53tji6n6rwJ2BhS": {
 15+    "name": "vaxis",
 16+    "url": "https://github.com/rockorager/libvaxis/archive/7dbb9fd3122e4ffad262dd7c151d80d863b68558.tar.gz",
 17+    "hash": "sha256-LnIzK8icW1Qexua9SHaeHz+3V8QAbz0a+UC1T5sIjvY="
 18+  },
 19+  "zigimg-0.1.0-8_eo2vHnEwCIVW34Q14Ec-xUlzIoVg86-7FU2ypPtxms": {
 20+    "name": "zigimg",
 21+    "url": "https://github.com/ivanstepanovftw/zigimg/archive/d7b7ab0ba0899643831ef042bd73289510b39906.tar.gz",
 22+    "hash": "sha256-LB7Xa6KzVRRUSwwnyWM+y6fDG+kIDjfnoBDJO1obxVM="
 23+  },
 24+  "uucode-0.1.0-ZZjBPj96QADXyt5sqwBJUnhaDYs_qBeeKijZvlRa0eqM": {
 25+    "name": "uucode",
 26+    "url": "git+https://github.com/jacobsandlund/uucode#5f05f8f83a75caea201f12cc8ea32a2d82ea9732",
 27+    "hash": "sha256-sHPh+TQSdUGus/QTbj7KSJJkTuNTrK4VNmQDjS30Lf8=",
 28+    "rev": "5f05f8f83a75caea201f12cc8ea32a2d82ea9732"
 29+  },
 30+  "z2d-0.9.0-j5P_Hu-WFgA_JEfRpiFss6gdvcvS47cgOc0Via2eKD_T": {
 31+    "name": "z2d",
 32+    "url": "https://github.com/vancluever/z2d/archive/refs/tags/v0.9.0.tar.gz",
 33+    "hash": "sha256-+QqCRoXwrFA1/l+oWvYVyAVebGQitAFQNhi9U3EVrxA="
 34+  },
 35+  "zig_objc-0.0.0-Ir_Sp5gTAQCvxxR7oVIrPXxXwsfKgVP7_wqoOQrZjFeK": {
 36+    "name": "zig_objc",
 37+    "url": "https://deps.files.ghostty.org/zig_objc-f356ed02833f0f1b8e84d50bed9e807bf7cdc0ae.tar.gz",
 38+    "hash": "sha256-3YSvc3YlNW/NciyzCQnzsujXAmZ89XlxSqfqvArAjsw="
 39+  },
 40+  "zig_js-0.0.0-rjCAV-6GAADxFug7rDmPH-uM_XcnJ5NmuAMJCAscMjhi": {
 41+    "name": "zig_js",
 42+    "url": "https://deps.files.ghostty.org/zig_js-04db83c617da1956ac5adc1cb9ba1e434c1cb6fd.tar.gz",
 43+    "hash": "sha256-TCAY5WAV05UEuAkDhq2c6Tk/ODgAhdnDI3O/flb8c6M="
 44+  },
 45+  "uucode-0.1.0-ZZjBPicPTQDlG6OClzn2bPu7ICkkkyWrTB6aRsBr-A1E": {
 46+    "name": "uucode",
 47+    "url": "https://github.com/jacobsandlund/uucode/archive/31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz",
 48+    "hash": "sha256-SzpYGhgG4B6Luf8eT35sKLobCxjmwEuo1Twk0jeu9g4="
 49+  },
 50+  "wayland-0.5.0-dev-lQa1khrMAQDJDwYFKpdH3HizherB7sHo5dKMECfvxQHe": {
 51+    "name": "zig_wayland",
 52+    "url": "https://deps.files.ghostty.org/zig_wayland-1b5c038ec10da20ed3a15b0b2a6db1c21383e8ea.tar.gz",
 53+    "hash": "sha256-TxRrc17Q1Sf1IOO/cdPpP3LD0PpYOujt06SFH3B5Ek4="
 54+  },
 55+  "zf-0.10.3-OIRy8RuJAACKA3Lohoumrt85nRbHwbpMcUaLES8vxDnh": {
 56+    "name": "zf",
 57+    "url": "https://github.com/natecraddock/zf/archive/3c52637b7e937c5ae61fd679717da3e276765b23.tar.gz",
 58+    "hash": "sha256-OwFdkorwTp4mJyvBXrTbtNmp1GnrbSkKDdrmc7d8RWg="
 59+  },
 60+  "gobject-0.3.0-Skun7ET3nQCqJhDL0KnF_X7M4L7o7JePsJBbrYpEr7UV": {
 61+    "name": "gobject",
 62+    "url": "https://deps.files.ghostty.org/gobject-2025-09-20-20-1.tar.zst",
 63+    "hash": "sha256-SXiqGm81aUn6yq1wFXgNTAULdKOHS/Rzkp5OgNkkcXo="
 64+  },
 65+  "N-V-__8AAH0GaQC8a52s6vfIxg88OZgFgEW6DFxfSK4lX_l3": {
 66+    "name": "imgui",
 67+    "url": "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz",
 68+    "hash": "sha256-oF/QHgTPEat4Hig4fGIdLkIPHmBEyOJ6JeYD6pnveGA="
 69+  },
 70+  "N-V-__8AAKLKpwC4H27Ps_0iL3bPkQb-z6ZVSrB-x_3EEkub": {
 71+    "name": "freetype",
 72+    "url": "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz",
 73+    "hash": "sha256-QnIB9dUVFnDQXB9bRb713aHy592XHvVPD+qqf/0quQw="
 74+  },
 75+  "N-V-__8AAJrvXQCqAT8Mg9o_tk6m0yf5Fz-gCNEOKLyTSerD": {
 76+    "name": "libpng",
 77+    "url": "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz",
 78+    "hash": "sha256-/syVtGzwXo4/yKQUdQ4LparQDYnp/fF16U/wQcrxoDo="
 79+  },
 80+  "N-V-__8AAB0eQwD-0MdOEBmz7intriBReIsIDNlukNVoNu6o": {
 81+    "name": "zlib",
 82+    "url": "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz",
 83+    "hash": "sha256-F+iIY/NgBnKrSRgvIXKBtvxNPHYr3jYZNeQ2qVIU0Fw="
 84+  },
 85+  "N-V-__8AAIrfdwARSa-zMmxWwFuwpXf1T3asIN7s5jqi9c1v": {
 86+    "name": "fontconfig",
 87+    "url": "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz",
 88+    "hash": "sha256-O6LdkhWHGKzsXKrxpxYEO1qgVcJ7CB2RSvPMtA3OilU="
 89+  },
 90+  "N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK": {
 91+    "name": "libxml2",
 92+    "url": "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz",
 93+    "hash": "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU="
 94+  },
 95+  "N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr": {
 96+    "name": "gtk4_layer_shell",
 97+    "url": "https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz",
 98+    "hash": "sha256-mChCgSYKXu9bT2OlXxbEv2p4ihAgptsDfssPcfozaYg="
 99+  },
100+  "N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S": {
101+    "name": "wayland_protocols",
102+    "url": "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz",
103+    "hash": "sha256-XO3K3egbdeYPI+XoO13SuOtO+5+Peb16NH0UiusFMPg="
104+  },
105+  "N-V-__8AAG02ugUcWec-Ndp-i7JTsJ0dgF8nnJRUInkGLG7G": {
106+    "name": "harfbuzz",
107+    "url": "https://deps.files.ghostty.org/harfbuzz-11.0.0.tar.xz",
108+    "hash": "sha256-8WNRuv4hRyX+LB1bWfDZPkmQWkskeJn7kNcM/5U6K5s="
109+  },
110+  "N-V-__8AAGmZhABbsPJLfbqrh6JTHsXhY6qCaLAQyx25e0XE": {
111+    "name": "highway",
112+    "url": "https://deps.files.ghostty.org/highway-66486a10623fa0d72fe91260f96c892e41aceb06.tar.gz",
113+    "hash": "sha256-h9T4iT704I8iSXNgj/6/lCaKgTgLp5wS6IQZaMgKohI="
114+  },
115+  "N-V-__8AADcZkgn4cMhTUpIz6mShCKyqqB-NBtf_S2bHaTC-": {
116+    "name": "gettext",
117+    "url": "https://deps.files.ghostty.org/gettext-0.24.tar.gz",
118+    "hash": "sha256-yRhQPVk9cNr0hE0XWhPYFq+stmfAb7oeydzVACwVGLc="
119+  },
120+  "N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c": {
121+    "name": "oniguruma",
122+    "url": "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz",
123+    "hash": "sha256-ABqhIC54RI9MC/GkjHblVodrNvFtks4yB+zP1h2Z8qA="
124+  },
125+  "N-V-__8AAPlZGwBEa-gxrcypGBZ2R8Bse4JYSfo_ul8i2jlG": {
126+    "name": "sentry",
127+    "url": "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz",
128+    "hash": "sha256-KsZJfMjWGo0xCT5HrduMmyxFsWsHBbszSoNbZCPDGN8="
129+  },
130+  "N-V-__8AALw2uwF_03u4JRkZwRLc3Y9hakkYV7NKRR9-RIZJ": {
131+    "name": "breakpad",
132+    "url": "https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz",
133+    "hash": "sha256-bMqYlD0amQdmzvYQd8Ca/1k4Bj/heh7+EijlQSttatk="
134+  },
135+  "N-V-__8AAHffAgDU0YQmynL8K35WzkcnMUmBVQHQ0jlcKpjH": {
136+    "name": "utfcpp",
137+    "url": "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz",
138+    "hash": "sha256-/8ZooxDndgfTk/PBizJxXyI9oerExNbgV5oR345rWc8="
139+  },
140+  "N-V-__8AAAzZywE3s51XfsLbP9eyEw57ae9swYB9aGB6fCMs": {
141+    "name": "wuffs",
142+    "url": "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz",
143+    "hash": "sha256-nkzSCr6W5sTG7enDBXEIhgEm574uLD41UVR2wlC+HBM="
144+  },
145+  "N-V-__8AADYiAAB_80AWnH1AxXC0tql9thT-R-DYO1gBqTLc": {
146+    "name": "pixels",
147+    "url": "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz",
148+    "hash": "sha256-Veg7FtCRCCUCvxSb9FfzH0IJLFmCZQ4/+657SIcb8Ro="
149+  },
150+  "N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy": {
151+    "name": "glslang",
152+    "url": "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz",
153+    "hash": "sha256-FKLtu1Ccs+UamlPj9eQ12/WXFgS0uDPmPmB26MCpl7U="
154+  },
155+  "N-V-__8AANb6pwD7O1WG6L5nvD_rNMvnSc9Cpg1ijSlTYywv": {
156+    "name": "spirv_cross",
157+    "url": "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz",
158+    "hash": "sha256-tStvz8Ref6abHwahNiwVVHNETizAmZVVaxVsU7pmV+M="
159+  },
160+  "N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t": {
161+    "name": "wayland",
162+    "url": "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz",
163+    "hash": "sha256-6kGR1o5DdnflHzqs3ieCmBAUTpMdOXoyfcYDXiw5xQ0="
164+  },
165+  "N-V-__8AAKYZBAB-CFHBKs3u4JkeiT4BMvyHu3Y5aaWF3Bbs": {
166+    "name": "plasma_wayland_protocols",
167+    "url": "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz",
168+    "hash": "sha256-XFi6IUrNjmvKNCbcCLAixGqN2Zeymhs+KLrfccIN9EE="
169+  },
170+  "N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x": {
171+    "name": "jetbrains_mono",
172+    "url": "https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz",
173+    "hash": "sha256-xXppHouCrQmLWWPzlZAy5AOPORCHr3cViFulkEYQXMQ="
174+  },
175+  "N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO26s": {
176+    "name": "nerd_fonts_symbols_only",
177+    "url": "https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz",
178+    "hash": "sha256-EWTRuVbUveJI17LwmYxDzJT1ICQxoVZKeTiVsec7DQQ="
179+  },
180+  "N-V-__8AAPZCAwDJ0OsIn2nbr3FMvBw68oiv-hC2pFuY1eLN": {
181+    "name": "iterm2_themes",
182+    "url": "https://github.com/mbadolato/iTerm2-Color-Schemes/releases/download/release-20251110-150531-d5f3d53/ghostty-themes.tgz",
183+    "hash": "sha256-VZq3L/cAAu7kLA5oqJYNjAZApoblfBtAzfdKVOuJPQI="
184+  }
185+}
A flake.lock
+78, -0
 1@@ -0,0 +1,78 @@
 2+{
 3+  "nodes": {
 4+    "flake-utils": {
 5+      "inputs": {
 6+        "systems": "systems"
 7+      },
 8+      "locked": {
 9+        "lastModified": 1731533236,
10+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
11+        "owner": "numtide",
12+        "repo": "flake-utils",
13+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
14+        "type": "github"
15+      },
16+      "original": {
17+        "owner": "numtide",
18+        "repo": "flake-utils",
19+        "type": "github"
20+      }
21+    },
22+    "nixpkgs": {
23+      "locked": {
24+        "lastModified": 1764635402,
25+        "narHash": "sha256-6rYcajRLe2C5ZYnV1HYskJl+QAkhvseWTzbdQiTN9OI=",
26+        "owner": "nixos",
27+        "repo": "nixpkgs",
28+        "rev": "5f53b0d46d320352684242d000b36dcfbbf7b0bc",
29+        "type": "github"
30+      },
31+      "original": {
32+        "owner": "nixos",
33+        "repo": "nixpkgs",
34+        "type": "github"
35+      }
36+    },
37+    "root": {
38+      "inputs": {
39+        "zig2nix": "zig2nix"
40+      }
41+    },
42+    "systems": {
43+      "locked": {
44+        "lastModified": 1681028828,
45+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
46+        "owner": "nix-systems",
47+        "repo": "default",
48+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
49+        "type": "github"
50+      },
51+      "original": {
52+        "owner": "nix-systems",
53+        "repo": "default",
54+        "type": "github"
55+      }
56+    },
57+    "zig2nix": {
58+      "inputs": {
59+        "flake-utils": "flake-utils",
60+        "nixpkgs": "nixpkgs"
61+      },
62+      "locked": {
63+        "lastModified": 1764678235,
64+        "narHash": "sha256-NNQWR3DAufaH7fs6ZplfAv1xPHEc0Ne3Z0v4MNHCqSw=",
65+        "owner": "Cloudef",
66+        "repo": "zig2nix",
67+        "rev": "8b6ec85bccdf6b91ded19e9ef671205937e271e6",
68+        "type": "github"
69+      },
70+      "original": {
71+        "owner": "Cloudef",
72+        "repo": "zig2nix",
73+        "type": "github"
74+      }
75+    }
76+  },
77+  "root": "root",
78+  "version": 7
79+}
A flake.nix
+54, -0
 1@@ -0,0 +1,54 @@
 2+{
 3+  description = "zmx - session persistence for terminal processes";
 4+
 5+  inputs = {
 6+    zig2nix.url = "github:Cloudef/zig2nix";
 7+  };
 8+
 9+  outputs =
10+    { zig2nix, ... }:
11+    let
12+      flake-utils = zig2nix.inputs.flake-utils;
13+    in
14+    (flake-utils.lib.eachDefaultSystem (
15+      system:
16+      let
17+        env = zig2nix.outputs.zig-env.${system} {
18+          zig = zig2nix.outputs.packages.${system}.zig-0_15_2;
19+        };
20+      in
21+      with builtins;
22+      with env.pkgs.lib;
23+      let
24+        zmx-package = env.package {
25+          src = cleanSource ./.;
26+          zigBuildFlags = [ "-Doptimize=ReleaseSafe" ];
27+          zigPreferMusl = true;
28+        };
29+      in
30+      {
31+        packages = {
32+          zmx = zmx-package;
33+          default = zmx-package;
34+        };
35+
36+        apps = {
37+          zmx = {
38+            type = "app";
39+            program = "${zmx-package}/bin/zmx";
40+          };
41+          default = {
42+            type = "app";
43+            program = "${zmx-package}/bin/zmx";
44+          };
45+
46+          build = env.app [ ] "zig build \"$@\"";
47+
48+          test = env.app [ ] "zig build test -- \"$@\"";
49+        };
50+
51+        devShells.default = env.mkShell {
52+        };
53+      }
54+    ));
55+}