diff --git a/modules/home-environment.nix b/modules/home-environment.nix index 59497ec4a971..773d8a7926cd 100644 --- a/modules/home-environment.nix +++ b/modules/home-environment.nix @@ -474,6 +474,14 @@ in ''; }; + home.buildEnvWithNoChroot = mkEnableOption '' + Sets __noChroot = true on select buildEnv + derivations that assemble large numbers of paths, as well the activation + script derivations. This may be used to avoid sandbox failures on Darwin, + see https://github.com/NixOS/nix/issues/4119 and the sandbox + option in man nix.conf. + ''; + home.preferXdgDirectories = mkEnableOption "" // { description = '' Whether to make programs use XDG directories whenever supported. @@ -701,7 +709,7 @@ in ) + optionalString (!cfg.emptyActivationPath) "\${PATH:+:}$PATH"; - activationScript = pkgs.writeShellScript "activation-script" '' + activationScript = (pkgs.writeShellScript "activation-script" '' set -eu set -o pipefail @@ -718,9 +726,11 @@ in fi ${activationCmds} - ''; + '').overrideAttrs (old: { + __noChroot = cfg.buildEnvWithNoChroot; + }); in - pkgs.runCommand + (pkgs.runCommand "home-manager-generation" { preferLocalBuild = true; @@ -742,9 +752,11 @@ in ln -s ${cfg.path} $out/home-path ${cfg.extraBuilderCommands} - ''; + '').overrideAttrs (old: { + __noChroot = cfg.buildEnvWithNoChroot; + }); - home.path = pkgs.buildEnv { + home.path = (pkgs.buildEnv { name = "home-manager-path"; paths = cfg.packages; @@ -755,6 +767,8 @@ in meta = { description = "Environment of packages installed through home-manager"; }; - }; + }).overrideAttrs (old: { + __noChroot = cfg.buildEnvWithNoChroot; + }); }; } diff --git a/modules/targets/darwin/fonts.nix b/modules/targets/darwin/fonts.nix index 988c5edc9792..e1f905de3baf 100644 --- a/modules/targets/darwin/fonts.nix +++ b/modules/targets/darwin/fonts.nix @@ -4,11 +4,11 @@ with lib; let homeDir = config.home.homeDirectory; - fontsEnv = pkgs.buildEnv { + fontsEnv = (pkgs.buildEnv { name = "home-manager-fonts"; paths = config.home.packages; pathsToLink = "/share/fonts"; - }; + }).overrideAttrs (old: { __noChroot = config.home.buildEnvWithNoChroot; }); fonts = "${fontsEnv}/share/fonts"; installDir = "${homeDir}/Library/Fonts/HomeManager"; in { diff --git a/modules/targets/darwin/linkapps.nix b/modules/targets/darwin/linkapps.nix index 0d434234bbbf..871d33d69d79 100644 --- a/modules/targets/darwin/linkapps.nix +++ b/modules/targets/darwin/linkapps.nix @@ -4,11 +4,12 @@ config = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin { # Install MacOS applications to the user environment. home.file."Applications/Home Manager Apps".source = let - apps = pkgs.buildEnv { + apps = (pkgs.buildEnv { name = "home-manager-applications"; paths = config.home.packages; pathsToLink = "/Applications"; - }; + }).overrideAttrs + (old: { __noChroot = config.home.buildEnvWithNoChroot; }); in "${apps}/Applications"; }; }