Files
just-nixpkgs/.envrc
T
2025-09-03 12:22:02 +02:00

86 lines
1.9 KiB
Bash

#!/usr/bin/env bash
(
set -euo pipefail
now="$(date +%Y-%m-%d)"
if [[ -s .direnv/pull-date && "$now" = "$(cat .direnv/pull-date)" ]]; then
return 0
fi
prints_true() {
[[ "$("$@" 2>/dev/null)" = "true" ]]
}
git_dot_git_dir() {
if prints_true git rev-parse --is-inside-work-tree; then
git rev-parse --git-dir 2>/dev/null
fi
}
gdot="$(git_dot_git_dir)"
[ -n "$gdot" ] || return 1
if [[ -f "$gdot/rebase-merge/interactive" ]]; then
printf >&2 "%s\n" "REBASE-i"
return 1
elif [[ -d "$gdot/rebase-merge" ]]; then
printf >&2 "%s\n" "REBASE-m"
return 1
elif [[ -d "$gdot/rebase-apply" ]]; then
printf >&2 "%s\n" "AM/REBASE"
return 1
elif [[ -f "$gdot/MERGE_HEAD" ]]; then
printf >&2 "%s\n" "MERGING"
return 1
elif [[ -f "$gdot/CHERRY_PICK_HEAD" ]]; then
printf >&2 "%s\n" "CHERRY-PICKING"
return 1
elif [[ -f "$gdot/BISECT_LOG" ]]; then
printf >&2 "%s\n" "BISECTING"
return 1
fi
git pull --rebase --autostash
mkdir -p .direnv/
printf "%s\n" "$now" >.direnv/pull-date
direnv allow # cheeky
)
(
if command -v pueue >/dev/null && pueue status >&/dev/null; then
now="$(date +%Y-%m-%d)"
if [[ -s .direnv/update-upstreams-date && "$now" = "$(cat .direnv/update-upstreams-date)" ]]; then
return 0
fi
(set -x
pueue add --escape just setup
pueue add --escape just _packages_json
)
printf "%s\n" "$now" >.direnv/update-upstreams-date
fi
)
export NIX_PATH_ORIG="${NIX_PATH:-}"
# pkgs/top-level/impure.nix go brrr
#export NIXPKGS_CONFIG="$(realpath config.nix)"
#export NIX_PATH="$NIX_PATH${NIX_PATH:+:}nixpkgs-overlays=$(realpath overlays.nix)"
mkdir -p .direnv/bin/
command cat <<EOF >.direnv/bin/ndev
#!/usr/bin/env bash
export NIXPKGS_CONFIG="$(realpath config.nix)"
export NIX_PATH="$NIX_PATH${NIX_PATH:+:}nixpkgs-overlays=$(realpath overlays.nix)"
if [[ "\$#" -gt 0 ]]; then
env "\$@"
fi
EOF
chmod +x .direnv/bin/ndev
PATH_add .direnv/bin/
# TODO: any better way to avoid this leaking?
unset JUST_SYSTEM