diff --git a/pkgs/by-name/static-nix-shell/package.nix b/pkgs/by-name/static-nix-shell/package.nix index 72f5e3f92..884cb62c7 100644 --- a/pkgs/by-name/static-nix-shell/package.nix +++ b/pkgs/by-name/static-nix-shell/package.nix @@ -221,12 +221,17 @@ in rec { inherit pkgsEnv pkgExprs; interpreter = lib.getExe bash; postConfigure = '' - shellPreamble=' - export PATH=''${PATH:+$PATH:}'"$append_PATH"' - export XDG_DATA_DIRS=''${XDG_DATA_DIRS:+$XDG_DATA_DIRS:}'"$append_XDG_DATA_DIRS"' - ' + if [[ -n "$append_PATH" ]]; then + shellPreamble="$shellPreamble"' + export PATH=''${PATH:+$PATH:}'"$append_PATH" unset append_PATH + fi + + if [[ -n "$append_XDG_DATA_DIRS" ]]; then + shellPreamble="$shellPreamble"' + export XDG_DATA_DIRS=''${XDG_DATA_DIRS:+$XDG_DATA_DIRS:}'"$append_XDG_DATA_DIRS" unset append_XDG_DATA_DIRS + fi ''; } // (removeAttrs attrs [ "bash" "pkgs" ]) ); @@ -241,6 +246,18 @@ in rec { inherit pkgsEnv pkgExprs; interpreter = lib.getExe' oils-for-unix "ysh"; postConfigure = '' + shellPreambleBody= + if [[ -n "$append_PATH" ]]; then + shellPreambleBody="$shellPreambleBody"' + addToSearchPath "PATH" "'"$append_PATH"'"' + unset append_PATH + fi + if [[ -n "$append_XDG_DATA_DIRS" ]]; then + shellPreambleBody="$shellPreambleBody"' + addToSearchPath "XDG_DATA_DIRS" "'"$append_XDG_DATA_DIRS"'"' + unset append_XDG_DATA_DIRS + fi + if [[ -n "$shellPreambleBody" ]]; then shellPreamble=' { proc addToSearchPath(envName, appendValue) { @@ -251,15 +268,12 @@ in rec { setglobal ENV[envName] = "$value:$appendValue" } } - - addToSearchPath "PATH" "'"$append_PATH"'" - addToSearchPath "XDG_DATA_DIRS" "'"$append_XDG_DATA_DIRS"'" + '"$shellPreambleBody"' unset addToSearchPath } ' - unset append_PATH - unset append_XDG_DATA_DIRS + fi ''; } // (removeAttrs attrs [ "oils-for-unix" "pkgs" ]) ); @@ -274,12 +288,17 @@ in rec { inherit pkgsEnv pkgExprs; interpreter = lib.getExe zsh; postConfigure = '' - shellPreamble=' - export PATH=''${PATH:+$PATH:}'"$append_PATH"' - export XDG_DATA_DIRS=''${XDG_DATA_DIRS:+$XDG_DATA_DIRS:}'"$append_XDG_DATA_DIRS"' - ' - unset append_PATH - unset append_XDG_DATA_DIRS + if [[ -n "$append_PATH" ]]; then + shellPreamble="$shellPreamble"' + export PATH=''${PATH:+$PATH:}'"$append_PATH" + unset append_PATH + fi + + if [[ -n "$append_XDG_DATA_DIRS" ]]; then + shellPreamble="$shellPreamble"' + export XDG_DATA_DIRS=''${XDG_DATA_DIRS:+$XDG_DATA_DIRS:}'"$append_XDG_DATA_DIRS" + unset append_XDG_DATA_DIRS + fi ''; } // (removeAttrs attrs [ "pkgs" "zsh" ]) ); @@ -302,15 +321,32 @@ in rec { addToSearchPath append_PYTHONPATH "$p/${python3.sitePackages}" done - shellPreamble=' + shellPreambleBody= + if [[ -n "$append_PATH" ]]; then + shellPreambleBody="$shellPreambleBody"' + addToSearchPath("PATH", "'"$append_PATH"'")' + unset append_PATH + fi + if [[ -n "$append_XDG_DATA_DIRS" ]]; then + shellPreambleBody="$shellPreambleBody"' + addToSearchPath("XDG_DATA_DIRS", "'"$append_XDG_DATA_DIRS"'")' + unset append_XDG_DATA_DIRS + fi + + if [[ -n "$append_PYTHONPATH" ]]; then + shellPreambleBody="$shellPreambleBody"' + addSiteDirs("'"$append_PYTHONPATH"'")' + unset append_PYTHONPATH + fi + + if [[ -n "$shellPreambleBody" ]]; then + shellPreamble=' # this preamble is unaware of the tab-style used in the rest of the file, # so wrap it in a big `exec` to avoid conflicting tab styles # (and to avoid polluting the globals) exec(""" - import os - import site - def addToSearchPath(envName, appendValue): + import os value = os.environ.get(envName) if value is None: os.environ[envName] = appendValue @@ -318,18 +354,15 @@ in rec { os.environ[envName] = value + ":" + appendValue def addSiteDirs(joinedDirs): + import site known = site._init_pathinfo() for p in joinedDirs.split(":"): known = site.addsitedir(p, known) - addToSearchPath("PATH", "'"$append_PATH"'") - addToSearchPath("XDG_DATA_DIRS", "'"$append_XDG_DATA_DIRS"'") - addSiteDirs("'"$append_PYTHONPATH"'") + '"$shellPreambleBody"' """, globals={}) ' - unset append_PATH - unset append_PYTHONPATH - unset append_XDG_DATA_DIRS + fi ''; } // (removeAttrs attrs [ "pkgs" "python3" ]) );