From 81a729ea065e89d87d634547006d6313434c0bb9 Mon Sep 17 00:00:00 2001 From: alexion Date: Sat, 29 Aug 2026 19:31:08 -0400 Subject: [PATCH] feat(direnv): add repo-root flake shorthand --- .../shell/{direnv.nix => direnv/default.nix} | 1 + modules/shell/direnv/repo-flake.sh | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) rename modules/shell/{direnv.nix => direnv/default.nix} (92%) create mode 100644 modules/shell/direnv/repo-flake.sh diff --git a/modules/shell/direnv.nix b/modules/shell/direnv/default.nix similarity index 92% rename from modules/shell/direnv.nix rename to modules/shell/direnv/default.nix index acff31d..c88953c 100644 --- a/modules/shell/direnv.nix +++ b/modules/shell/direnv/default.nix @@ -20,6 +20,7 @@ in # nix-direnv caches the evaluated shell so re-entering a directory is instant # instead of re-running `nix develop`, and adds the `use flake` stdlib helper. nix-direnv.enable = true; + stdlib = builtins.readFile ./repo-flake.sh; }; }; } diff --git a/modules/shell/direnv/repo-flake.sh b/modules/shell/direnv/repo-flake.sh new file mode 100644 index 0000000..01df55f --- /dev/null +++ b/modules/shell/direnv/repo-flake.sh @@ -0,0 +1,33 @@ +if declare -f use_flake >/dev/null; then + __dotfiles_use_flake_definition="$(declare -f use_flake)" + eval "${__dotfiles_use_flake_definition/use_flake/__dotfiles_nix_direnv_use_flake}" + unset __dotfiles_use_flake_definition + + use_flake() { + local flake_expr="${1:-.}" + + if [[ "$flake_expr" == //* ]]; then + local git_root + if ! git_root="$(git rev-parse --show-toplevel 2>/dev/null)"; then + log_error 'use flake // requires a Git repository' + return 1 + fi + + local flake_suffix="${flake_expr#//}" + if [[ -n "$flake_suffix" && "$flake_suffix" != \#* && "$flake_suffix" != /* ]]; then + flake_expr="path:${git_root}/${flake_suffix}" + else + flake_expr="path:${git_root}${flake_suffix}" + fi + + shift + __dotfiles_nix_direnv_use_flake "$flake_expr" "$@" + return + fi + + __dotfiles_nix_direnv_use_flake "$@" + } +else + log_error 'nix-direnv must define use_flake before the // wrapper loads' + return 1 +fi -- 2.47.3