1
1
# shellcheck shell=bash
2
2
3
+ _nix_export_or_unset() {
4
+ local key=$1 value=$2
5
+ if [[ "$value" == __UNSET__ ]]; then
6
+ unset "$key"
7
+ else
8
+ export "$key=$value"
9
+ fi
10
+ }
11
+
3
12
_nix_import_env() {
4
13
local env=$1
5
14
6
- local term_backup=$TERM path_backup=$PATH
7
- if [[ -n ${TMPDIR+x} ]]; then
8
- local tmp_backup=$TMPDIR
9
- fi
10
- local impure_ssl_cert_file=${SSL_CERT_FILE:-__UNSET__}
11
- local impure_nix_ssl_cert_file=${NIX_SSL_CERT_FILE:-__UNSET__}
15
+ local old_path=${PATH:-}
16
+ local old_term=${TERM:-__UNSET__}
17
+ local old_tmpdir=${TMPDIR:-__UNSET__}
18
+ local old_ssl_cert_file=${SSL_CERT_FILE:-__UNSET__}
19
+ local old_nix_ssl_cert_file=${NIX_SSL_CERT_FILE:-__UNSET__}
12
20
13
21
eval "$env"
14
22
15
23
# `nix-shell --pure` sets invalid ssl certificate paths
16
24
if [[ "${SSL_CERT_FILE:-}" = /no-cert-file.crt ]]; then
17
- if [[ $impure_ssl_cert_file == __UNSET__ ]]; then
18
- unset SSL_CERT_FILE
19
- else
20
- export SSL_CERT_FILE=$impure_ssl_cert_file
21
- fi
25
+ _nix_export_or_unset SSL_CERT_FILE "$old_ssl_cert_file"
22
26
fi
23
27
24
28
if [[ "${NIX_SSL_CERT_FILE:-}" = /no-cert-file.crt ]]; then
25
- if [[ $impure_nix_ssl_cert_file == __UNSET__ ]]; then
26
- unset NIX_SSL_CERT_FILE
27
- else
28
- export NIX_SSL_CERT_FILE=${impure_nix_ssl_cert_file}
29
- fi
29
+ _nix_export_or_unset NIX_SSL_CERT_FILE "$old_nix_ssl_cert_file"
30
30
fi
31
31
32
- export PATH=$PATH:$path_backup TERM=$term_backup
33
- if [[ -n ${tmp_backup+x} ]]; then
34
- export TMPDIR=${tmp_backup}
35
- else
36
- unset TMPDIR
37
- fi
32
+ export PATH=$PATH${old_path:+":"}$old_path
33
+ _nix_export_or_unset TEMPDIR "$old_tmp"
34
+ _nix_export_or_unset TERM "$old_term"
38
35
39
36
# misleading since we are in an impure shell now
40
37
export IN_NIX_SHELL=impure
@@ -58,12 +55,13 @@ use_flake() {
58
55
local profile="$(direnv_layout_dir)/flake-profile"
59
56
local profile_rc="${profile}.rc"
60
57
61
- if [[ ! -e "$profile" ]] || \
62
- [[ ! -e "$profile_rc" ]] || \
63
- [[ "$HOME/.direnvrc" -nt "$profile_rc" ]] || \
64
- [[ .envrc -nt "$profile_rc" ]] || \
65
- [[ flake.nix -nt "$profile_rc" ]] || \
66
- [[ flake.lock -nt "$profile_rc" ]];
58
+ if [[ ! -e "$profile" \
59
+ || ! -e "$profile_rc" \
60
+ || "$HOME/.direnvrc" -nt "$profile_rc"
61
+ || .envrc -nt "$profile_rc"
62
+ || flake.nix -nt "$profile_rc"
63
+ || flake.lock -nt "$profile_rc"
64
+ ]];
67
65
then
68
66
local tmp_profile="$(direnv_layout_dir)/flake-profile.$$"
69
67
[[ -d "$(direnv_layout_dir)" ]] || mkdir "$(direnv_layout_dir)"
@@ -90,31 +88,11 @@ use_flake() {
90
88
rmdir "$NIX_BUILD_TOP"
91
89
fi
92
90
93
- if [[ "$old_nix_build_top" == __UNSET__ ]]; then
94
- unset NIX_BUILD_TOP
95
- else
96
- export NIX_BUILD_TOP=$old_nix_build_top
97
- fi
98
- if [[ "$old_tmp" == __UNSET__ ]]; then
99
- unset TMP
100
- else
101
- export TMP=$old_temp
102
- fi
103
- if [[ "$old_tmpdir" == __UNSET__ ]]; then
104
- unset TMPDIR
105
- else
106
- export TMPDIR=$old_tmpdir
107
- fi
108
- if [[ "$old_temp" == __UNSET__ ]]; then
109
- unset TEMP
110
- else
111
- export TEMP=$old_temp
112
- fi
113
- if [[ "$old_tempdir" == __UNSET__ ]]; then
114
- unset TEMPDIR
115
- else
116
- export TEMPDIR=$old_tempdir
117
- fi
91
+ _nix_export_or_unset NIX_BUILD_TOP "$old_nix_build_top"
92
+ _nix_export_or_unset TMP "$old_tmp"
93
+ _nix_export_or_unset TMPDIR "$old_tmpdir"
94
+ _nix_export_or_unset TEMP "$old_temp"
95
+ _nix_export_or_unset TEMPDIR "$old_tempdir"
118
96
}
119
97
120
98
use_nix() {
@@ -143,11 +121,12 @@ use_nix() {
143
121
local cache="$direnv_dir/cache-${version:-unknown}"
144
122
145
123
local update_drv=0
146
- if [[ ! -e "$cache" ]] || \
147
- [[ "$HOME/.direnvrc" -nt "$cache" ]] || \
148
- [[ .envrc -nt "$cache" ]] || \
149
- [[ default.nix -nt "$cache" ]] || \
150
- [[ shell.nix -nt "$cache" ]];
124
+ if [[ ! -e "$cache" \
125
+ || "$HOME/.direnvrc" -nt "$cache" \
126
+ || .envrc -nt "$cache" \
127
+ || default.nix -nt "$cache" \
128
+ || shell.nix -nt "$cache" \
129
+ ]];
151
130
then
152
131
[[ -d "$direnv_dir" ]] || mkdir "$direnv_dir"
153
132
local dump_cmd tmp
0 commit comments