diff --git a/build.zig b/build.zig index 5fa6c2ed7..ae439db96 100644 --- a/build.zig +++ b/build.zig @@ -69,6 +69,10 @@ pub fn build(b: *std.build.Builder) !void { const wasm_target: WasmTarget = .browser; + // We use env vars throughout the build so we grab them immediately here. + var env = try std.process.getEnvMap(b.allocator); + defer env.deinit(); + tracy = b.option( bool, "tracy", @@ -132,7 +136,6 @@ pub fn build(b: *std.build.Builder) !void { // If we're in a nix shell we default to doing this. // Note: we purposely never deinit envmap because we leak the strings - const env = try std.process.getEnvMap(b.allocator); if (env.get("IN_NIX_SHELL") == null) break :patch_rpath null; break :patch_rpath env.get("LD_LIBRARY_PATH"); }; @@ -210,6 +213,41 @@ pub fn build(b: *std.build.Builder) !void { // Add the shared dependencies _ = try addDeps(b, exe, static); + // If we're in NixOS but not in the shell environment then we issue + // a warning because the rpath may not be setup properly. + const is_nixos = is_nixos: { + if (!target.isLinux()) break :is_nixos false; + if (!target.isNativeCpu()) break :is_nixos false; + if (target.getOsTag() != builtin.os.tag) break :is_nixos false; + break :is_nixos if (std.fs.accessAbsolute("/etc/NIXOS", .{})) true else |_| false; + }; + if (is_nixos and env.get("IN_NIX_SHELL") == null) { + const notice = b.addLog( + "\x1b[" ++ color_map.get("yellow").? ++ + "\x1b[" ++ color_map.get("b").? ++ + "WARNING: " ++ + "\x1b[" ++ color_map.get("d").? ++ + \\Detected building on and for NixOS outside of the Nix shell enviornment. + \\ + \\The resulting ghostty binary will likely fail on launch because it is + \\unable to dynamically load the windowing libs (X11, Wayland, etc.). + \\We highly recommend running only within the Nix build environment + \\and the resulting binary will be portable across your system. + \\ + \\To run in the Nix build environment, use the following command. + \\Append any additional options like (`-Doptimize` flags). The resulting + \\binary will be in zig-out as usual. + \\ + \\ nix develop -c zig build + \\ + ++ + "\x1b[0m", + .{}, + ); + + exe.step.dependOn(¬ice.step); + } + // If we're installing, we get the install step so we can add // additional dependencies to it. const install_step = if (app_runtime != .none) step: {