diff options
Diffstat (limited to 'modules/by-name/di')
| -rwxr-xr-x | modules/by-name/di/direnv/landrun-fish.sh | 32 | ||||
| -rw-r--r-- | modules/by-name/di/direnv/module.nix | 33 |
2 files changed, 42 insertions, 23 deletions
diff --git a/modules/by-name/di/direnv/landrun-fish.sh b/modules/by-name/di/direnv/landrun-fish.sh index 09687afb..2220db20 100755 --- a/modules/by-name/di/direnv/landrun-fish.sh +++ b/modules/by-name/di/direnv/landrun-fish.sh @@ -1,30 +1,44 @@ #! /usr/bin/env sh -export NO_DIRENV_LOAD=true +_new_tmp="$(mktemp --directory -t landrun_fish_XXXXX)" +trap 'rm --recursive "$_new_tmp"' EXIT + +# NOTE: We need to keep the XDG_RUNTIME_DIR, as pam_systemd sets it only once upon login. <2026-08-25> landrun \ - --env PATH \ - --env USER \ - --env IN_NIX_SHELL \ + --env XDG_RUNTIME_DIR \ --env NIX_SHELL_LEVEL \ - --env NO_DIRENV_LOAD \ + --env TERM \ --env SHLVL \ + --env IN_DIRENV_SANDBOX=true \ + --env TMPDIR="$_new_tmp" \ --rox /nix/store \ + --rox /run/wrappers/bin/sudo \ + --rw "$_new_tmp" \ --ro /etc/ \ --ro /proc/ \ --rw /dev/ \ - --rw "/run/user/$(id --user)" \ - --ro "$HOME/.config" \ + --rw "$XDG_RUNTIME_DIR" \ --rw "$HOME/.cache" \ --ro "$HOME/.local/share/nix/trusted-settings.json" \ --rw "$HOME/.local/share/nix/repl-history" \ + --rw "$HOME/.local/share/ssh/known_hosts" \ + --ro "$HOME/.local/share/ssh/id_ed25519.pub" \ --rw "$HOME/.local/share/task/" \ --rw "$HOME/.local/share/nvim/" \ + --rw "$HOME/.local/state/nvim/" \ --rw "$HOME/.local/share/cargo/" \ --rw "$HOME/.local/share/ctpv/" \ - --rw "$HOME/.local/share/direnv" \ + --rw "$HOME/.local/share/direnv/" \ + --rw "$HOME/.local/share/lf/" \ --ro "$HOME/.config/fish/" \ + --ro "$HOME/.config/task/" \ + --ro "$HOME/.config/nvim/" \ + --ro "$HOME/.config/turtle/" \ + --ro "$HOME/.config/git/" \ + --rwx "$PWD" \ --connect-tcp 80 \ + --connect-tcp 22 \ --connect-tcp 443 \ - -- fish "$@" + -- fish --login "$@" # vim: ft=sh diff --git a/modules/by-name/di/direnv/module.nix b/modules/by-name/di/direnv/module.nix index ad47a2a7..fc800f35 100644 --- a/modules/by-name/di/direnv/module.nix +++ b/modules/by-name/di/direnv/module.nix @@ -35,6 +35,8 @@ pkgs.landrun ]; }; + + direnvPkg = lib.getExe direnvCfg.package; in { options.soispha.programs.direnv = { enable = lib.mkEnableOption "direnv"; @@ -44,24 +46,27 @@ in { soispha.programs.fish.integrations.direnv = # fish '' - function __direnv_export_eval - ${lib.getExe direnvCfg.package} export fish | source; + set --global SHOULD_SANDBOX_DIRENV + + function _direnv_export_eval + ${direnvPkg} export fish | source end - if test -z "$NO_DIRENV_LOAD" - function _direnv_hook - if test -f ".env" -o -f ".envrc" -o -f ".nenvrc" - # ${lib.getExe landrun-fish} --interactive --command='__direnv_export_eval' - __direnv_export_eval - end - end + function _direnv_hook --on-variable PWD + if not set --query IN_DIRENV_SANDBOX; + and set --query SHOULD_SANDBOX_DIRENV; + and ${direnvPkg} status | grep 'Found RC path' --quiet; + and ${direnvPkg} status | grep 'No .envrc or .env loaded' --quiet - function __direnv_on_prompt --on-event fish_prompt; - _direnv_hook - end + # We found a RC path, but no RC file is loaded. So we can start our shell and + # load it. + ${lib.getExe landrun-fish} --init-command='_direnv_export_eval' - function _direnv_on_preexec --on-event fish_preexec; - _direnv_hook + # After the user exists (via Ctrl+D), they probably want to change the + # directory. + ll + else + _direnv_export_eval end end ''; |
