feat(direnv): add repo-root flake shorthand
This commit was merged in pull request #74.
This commit is contained in:
@@ -20,6 +20,7 @@ in
|
|||||||
# nix-direnv caches the evaluated shell so re-entering a directory is instant
|
# 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.
|
# instead of re-running `nix develop`, and adds the `use flake` stdlib helper.
|
||||||
nix-direnv.enable = true;
|
nix-direnv.enable = true;
|
||||||
|
stdlib = builtins.readFile ./repo-flake.sh;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
33
modules/shell/direnv/repo-flake.sh
Normal file
33
modules/shell/direnv/repo-flake.sh
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user