aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/di
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/di')
-rwxr-xr-xmodules/by-name/di/direnv/landrun-fish.sh32
-rw-r--r--modules/by-name/di/direnv/module.nix33
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
'';