repos / zmx

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

commit
ce4e7b6
parent
62d03a0
author
Eric Bower
date
2025-10-13 11:58:36 -0400 EDT
chore: forward more env vars from daemon to children ptys
1 files changed,  +27, -6
M src/daemon.zig
+27, -6
 1@@ -1044,17 +1044,38 @@ fn createSession(allocator: std.mem.Allocator, session_name: []const u8) !*Sessi
 2 
 3     if (pid == 0) {
 4         // Child process - set environment and execute shell with prompt
 5+
 6+        // Set ZMX_SESSION to identify the session
 7         const zmx_session_var = std.fmt.allocPrint(allocator, "ZMX_SESSION={s}\x00", .{session_name}) catch {
 8             std.posix.exit(1);
 9         };
10         _ = c.putenv(@ptrCast(zmx_session_var.ptr));
11 
12-        // Forward TERM from host machine
13-        if (std.posix.getenv("TERM")) |term| {
14-            const term_var = std.fmt.allocPrint(allocator, "TERM={s}\x00", .{term}) catch {
15-                std.posix.exit(1);
16-            };
17-            _ = c.putenv(@ptrCast(term_var.ptr));
18+        // Forward important environment variables from daemon
19+        // (Most variables like HOME, USER, PATH are already inherited)
20+        const env_vars = [_][]const u8{
21+            "TERM", // Terminal type
22+            "DISPLAY", // X11 display
23+            "XAUTHORITY", // X11 auth
24+            "WAYLAND_DISPLAY", // Wayland display
25+            "WINDOWID", // X11 window ID
26+            "SSH_AUTH_SOCK", // SSH agent socket
27+            "SSH_AGENT_PID", // SSH agent PID
28+            "SSH_CONNECTION", // SSH connection info
29+            "XDG_RUNTIME_DIR", // XDG runtime directory
30+            "LANG", // Primary locale
31+            "LC_ALL", // Override all locale settings
32+            "LC_CTYPE", // Character classification
33+            "COLORTERM", // Truecolor support indicator
34+        };
35+
36+        for (env_vars) |var_name| {
37+            if (std.posix.getenv(var_name)) |value| {
38+                const env_var = std.fmt.allocPrint(allocator, "{s}={s}\x00", .{ var_name, value }) catch {
39+                    std.posix.exit(1);
40+                };
41+                _ = c.putenv(@ptrCast(env_var.ptr));
42+            }
43         }
44 
45         const shell = std.posix.getenv("SHELL") orelse "/bin/sh";