!lheuhImcToQZYTQTuI:nixos.org

Nix on macOS

1190 Members
“There are still many issues with the Darwin platform but most of it is quite usable.” — http://yves.gnu-darwin.org200 Servers

Load older messages


SenderMessageTime
21 Feb 2026
@h7x4:nani.wtfh7x4 changed their profile picture.19:34:04
22 Feb 2026
@cedarquest11:matrix.orgCedar joined the room.02:54:07
@desdaemon:matrix.orgDesdaemon joined the room.04:14:32
23 Feb 2026
@philip4g:matrix.org@philip4g:matrix.org left the room.06:16:26
@samasaur:matrix.orgsamasaur

do we have a standard recommendation for how to handle meta.mainProgram/nix run compatibility for packages that produce an app bundle? I've seen:

  1. symlinking the binary to $out/bin via something like ln -s $out/{Applications/${name}.app/Contents/MacOS/${name},bin/}
  2. using makeBinaryWrapper to do something similar
  3. putting a wrapper script in $out/bin that calls open -na on the produced application bundle

Is one of these unambiguously "better" than the others? I recall the symlink approach having issues (and I can find comments in nixpkgs and on PRs to that extent), so makeBinaryWrapper seems better than that for not a lot of overhead. I vaguely recall some cases where even that approach doesn't work (properly), and see some examples in nixpkgs (libreoffice, mongodb-compass, beekeeper-studio, jetbrains, tigervnc) using open instead, but that has some other behavioral differences (such as exiting in the terminal immediately, unless we standardize on using -W). Maybe there isn't a universal right answer, but I feel like it'd be helpful to have docs either way

06:29:38
@rebmit:rebmit.moerebmit[reb]
In reply to @samasaur:matrix.org

do we have a standard recommendation for how to handle meta.mainProgram/nix run compatibility for packages that produce an app bundle? I've seen:

  1. symlinking the binary to $out/bin via something like ln -s $out/{Applications/${name}.app/Contents/MacOS/${name},bin/}
  2. using makeBinaryWrapper to do something similar
  3. putting a wrapper script in $out/bin that calls open -na on the produced application bundle

Is one of these unambiguously "better" than the others? I recall the symlink approach having issues (and I can find comments in nixpkgs and on PRs to that extent), so makeBinaryWrapper seems better than that for not a lot of overhead. I vaguely recall some cases where even that approach doesn't work (properly), and see some examples in nixpkgs (libreoffice, mongodb-compass, beekeeper-studio, jetbrains, tigervnc) using open instead, but that has some other behavioral differences (such as exiting in the terminal immediately, unless we standardize on using -W). Maybe there isn't a universal right answer, but I feel like it'd be helpful to have docs either way

an example of symlink causing behavior differences I ran into recently: https://github.com/NixOS/nixpkgs/pull/489364
06:55:25
@samasaur:matrix.orgsamasauryea that's what prompted me to ask, i have the zotero, cinny, and nheko PRs up in tabs rn06:56:06
@toonn:matrix.orgtoonn Each of those approaches has more overhead than the last is worth mentioning. 08:25:20
@toonn:matrix.orgtoonn Maybe also the fact that them not working might be of interest to upstream. 08:26:27
@benjaminsparks:chat.alugha.appBen Sparksconsider not setting a meta.mainProgram, then providing script aliases that point at the executables of that bundle 11:22:13
@benjaminsparks:chat.alugha.appBen Sparks let multiOutputBundle = stdenv.mkDerivation { ... }; let singleProg = writers.makeShellScript { "${multiOutputBundle}/bin/$MY-SINGLE-PROGRAM $@" } 11:23:52
@benjaminsparks:chat.alugha.appBen Sparkssomething like this perhaps?11:23:57
@rebmit:rebmit.moerebmit[reb]
In reply to @benjaminsparks:chat.alugha.app
consider not setting a meta.mainProgram, then providing script aliases that point at the executables of that bundle
i don't get it, your example seems pretty similar to using a (shell) wrapper
11:35:44
@benjaminsparks:chat.alugha.appBen Sparksexcept that you don't rebuild the multiOutputBundle when you use overrideAttrs to make a new meta.mainProgram for each program11:36:25
@benjaminsparks:chat.alugha.appBen Sparksahh im sorry i have misread the message 😄 is what I have written even helpful to you, probably not 😂11:37:33
@michael:zortek.cloudMichael set a profile picture.14:34:01
@weethet:catgirl.cloudWeetHet I think the last option forces macl to be set and then nix-collect-garbage would fail 17:49:49
@emilazy:matrix.orgemily does meta.mainProgram = "../Applications/…"; work 17:51:50
@weethet:catgirl.cloudWeetHet I think it should, it would with my nix-run 17:54:00
@emilazy:matrix.orgemilyit's kind of awful and shouldn't work17:57:08
@emilazy:matrix.orgemilybut if it does…17:57:09
@emilazy:matrix.orgemily meta.mainProgram = "../../../../usr/bin/hello"; 17:57:35
@weethet:catgirl.cloudWeetHet
nix --extra-experimental-features "nix-command flakes" run --impure -E "((import <nixpkgs> {}).hello).overrideAttrs { doInstallCheck = false;  meta.mainProgram = \"../../../../usr/bin/true\"; }"
❮ echo $status
0
18:34:58
@weethet:catgirl.cloudWeetHet *
❮ nix --extra-experimental-features "nix-command flakes" run --impure -E "((import <nixpkgs> {}).hello).overrideAttrs { doInstallCheck = false;  meta.mainProgram = \"../../../../usr/bin/true\"; }"
❮ echo $status
0
18:35:03
@magpi:matrix.org@magpi:matrix.org changed their display name from magpi to Luke Worth.21:17:05
@magpi:matrix.org@magpi:matrix.org changed their display name from Luke Worth to Luke.21:17:36
@msgilligan:matrix.orgmsgilliganI didn't get any responses and also did some searching and didn't find quite what I'm looking for. So I created a repo (with just a README) explaining what I'm trying to do and as a starting point for pulling things together: https://github.com/msgilligan/max-nix-on-macos23:20:12
24 Feb 2026
@ihar.hrachyshka:matrix.orgIhar Hrachyshka @msgilligan:matrix.org: FWIW 5 and 6 can be covered by native nixpkgs qemu based VMs, unless you really care it's Lima / Apple vz. 13:06:51
@msgilligan:matrix.orgmsgilligan

Thanks for the reminder. I'm looking for maximum performance and seamless integration with the host. In my experience, Lima is best (among OSS solutions, at least) for headless and UTM for GUI, but I can't say that I've tried (the latest versions of) everything.

VZ is not Open Source but is built-in to macOS and is (in theory) higher-performance (especially for local file access. Given that we're already running on a closed-source system I make an exception to my Open Source rule for it.

One of my goals is to have a GUI NixOS VM that is performant enough to be a daily-driver. I'm hoping the latest UTM with VZ will be able to deliver that.

For headless Linux, I really like Lima (though it is adding support for displays and for macOS guests, too) and have been using it for much longer than I've been using Nix. I created the nixos-lima project based on the work of others so there could be an actively maintained public repo for NixOS VMs on Lima.

I use nixpkgs qemu via Nix Darwin for a Linux Builder VM, but to date I haven't found it nearly as friendly as Lima or UTM. I definitely need to take a another look. Do people use it for creating interactive VMs for development?

16:40:48
@msgilligan:matrix.orgmsgilligan *

Thanks for the reminder. I'm looking for maximum performance and seamless integration with the host. In my experience, Lima is best (among OSS solutions, at least) for headless and UTM for GUI, but I can't say that I've tried (the latest versions of) everything.

VZ is not Open Source but is built-in to macOS and is (in theory) higher-performance (especially for local file access.) Given that we're already running on a closed-source system I make an exception to my Open Source rule for it.

One of my goals is to have a GUI NixOS VM that is performant enough to be a daily-driver. I'm hoping the latest UTM with VZ will be able to deliver that.

For headless Linux, I really like Lima (though it is adding support for displays and for macOS guests, too) and have been using it for much longer than I've been using Nix. I created the nixos-lima project based on the work of others so there could be an actively maintained public repo for NixOS VMs on Lima.

I use nixpkgs qemu via Nix Darwin for a Linux Builder VM, but to date I haven't found it nearly as friendly as Lima or UTM. I definitely need to take a another look. Do people use it for creating interactive VMs for development?

16:41:21

Show newer messages


Back to Room ListRoom Version: 6