diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-08-23 19:51:18 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-08-23 19:51:47 +0200 |
| commit | f10d3170cccc852e21e10bce521999fe1e85aceb (patch) | |
| tree | 9b2d744b8cd34078e8386a0d9b5b3ff591e6cf9f /modules | |
| parent | unflake.nix: Update turtle dependency (diff) | |
| download | nixos-config-f10d3170cccc852e21e10bce521999fe1e85aceb.zip | |
modules/direnv: Implement a landrun based sandbox for dev-shells
Diffstat (limited to 'modules')
| -rwxr-xr-x | modules/by-name/di/direnv/landrun-fish.sh | 30 | ||||
| -rw-r--r-- | modules/by-name/di/direnv/module.nix | 73 |
2 files changed, 87 insertions, 16 deletions
diff --git a/modules/by-name/di/direnv/landrun-fish.sh b/modules/by-name/di/direnv/landrun-fish.sh new file mode 100755 index 00000000..09687afb --- /dev/null +++ b/modules/by-name/di/direnv/landrun-fish.sh @@ -0,0 +1,30 @@ +#! /usr/bin/env sh + +export NO_DIRENV_LOAD=true +landrun \ + --env PATH \ + --env USER \ + --env IN_NIX_SHELL \ + --env NIX_SHELL_LEVEL \ + --env NO_DIRENV_LOAD \ + --env SHLVL \ + --rox /nix/store \ + --ro /etc/ \ + --ro /proc/ \ + --rw /dev/ \ + --rw "/run/user/$(id --user)" \ + --ro "$HOME/.config" \ + --rw "$HOME/.cache" \ + --ro "$HOME/.local/share/nix/trusted-settings.json" \ + --rw "$HOME/.local/share/nix/repl-history" \ + --rw "$HOME/.local/share/task/" \ + --rw "$HOME/.local/share/nvim/" \ + --rw "$HOME/.local/share/cargo/" \ + --rw "$HOME/.local/share/ctpv/" \ + --rw "$HOME/.local/share/direnv" \ + --ro "$HOME/.config/fish/" \ + --connect-tcp 80 \ + --connect-tcp 443 \ + -- fish "$@" + +# vim: ft=sh diff --git a/modules/by-name/di/direnv/module.nix b/modules/by-name/di/direnv/module.nix index baa0d954..242fa1c2 100644 --- a/modules/by-name/di/direnv/module.nix +++ b/modules/by-name/di/direnv/module.nix @@ -15,6 +15,7 @@ ... }: let cfg = config.soispha.programs.direnv; + direnvCfg = config.home-manager.users.soispha.programs.direnv; inherit (sources) devshells nixpkgs; @@ -25,34 +26,74 @@ --replace-fail "%DEVSHELLS_REPO%" "${devshells}" \ --replace-fail "%DEVSHELLS_REPO_REF%" "${devshells.sourceInfo.rev}.${builtins.readFile "${nixpkgs}/.git-revision"}" ''; + + landrun-fish = pkgs.writeShellApplication { + name = "landrun-fish"; + text = builtins.readFile ./landrun-fish.sh; + inheritPath = true; + runtimeInputs = [ + pkgs.landrun + ]; + }; in { options.soispha.programs.direnv = { enable = lib.mkEnableOption "direnv"; }; - config.home-manager.users.soispha = lib.mkIf cfg.enable { - programs.direnv = { - enable = true; + config = lib.mkIf cfg.enable { + soispha.programs.fish.integrations.direnv = + # fish + '' + function __direnv_export_eval + ${lib.getExec direnvCfg.package} export fish | source; + end + + if test -z "$NO_DIRENV_LOAD" + function _direnv_hook() + if test -f ".env" or test -f ".envrc" or test -f ".nenvrc" + ${landrun-fish} --interactive --command='__direnv_export_eval' + end + end - package = pkgs.direnv-patched; + function __direnv_on_prompt --on-event fish_prompt; + _direnv_hook + end - nix-direnv = { + function _direnv_on_preexec --on-event fish_preexec; + _direnv_hook + end + end + ''; + + home-manager.users.soispha = { + programs.direnv = { enable = true; - package = pkgs.nix-direnv.override {nix = config.nix.package;}; - }; - config = { - warn_timeout = 0; + package = pkgs.direnv-patched; - # NOTE: Something variable is undeclared in the my default loaded stuff :/. <2026-08-18> - # strict_env = true; + nix-direnv = { + enable = true; + package = pkgs.nix-direnv.override {nix = config.nix.package;}; + }; - # disable_stdin = true; + # Handled by myself (and the script is overridden) + enableBashIntegration = true; + enableZshIntegration = true; + enableFishIntegration = false; + + config = { + warn_timeout = 0; + + # NOTE: Something variable is undeclared in the my default loaded stuff :/. <2026-08-18> + # strict_env = true; + + # disable_stdin = true; + }; }; - }; - xdg.configFile = { - "direnv/lib/hm-pre-cache.sh" = { - source = pre-cache; + xdg.configFile = { + "direnv/lib/hm-pre-cache.sh" = { + source = pre-cache; + }; }; }; }; |
