|
@@ -37,34 +37,55 @@ fn state-type {|@a|
|
|
|
|
|
|
var state-dir = (get-env XDG_STATE_HOME &default=~/.local/state)/direlv
|
|
|
var dir-stack = []
|
|
|
-var ignore = [
|
|
|
+var quiet = [
|
|
|
AR
|
|
|
+ AR_FOR_TARGET
|
|
|
AS
|
|
|
+ AS_FOR_TARGET
|
|
|
CC
|
|
|
- CONFIG_SHELL
|
|
|
+ CC_FOR_TARGET
|
|
|
CXX
|
|
|
- HOME
|
|
|
- HOST_PATH
|
|
|
+ CXX_FOR_TARGET
|
|
|
LD
|
|
|
- LD_DYLD_PATH
|
|
|
- MACOSX_DEPLOYMENT_TARGET
|
|
|
+ LD_FOR_TARGET
|
|
|
NM
|
|
|
- OBJCOPY
|
|
|
- OBJDUMP
|
|
|
- OLDPWD
|
|
|
+ NM_FOR_TARGET
|
|
|
RANLIB
|
|
|
- READELF
|
|
|
- SHELL
|
|
|
+ RANLIB_FOR_TARGET
|
|
|
SIZE
|
|
|
- SOURCE_DATE_EPOCH
|
|
|
+ SIZE_FOR_TARGET
|
|
|
STRINGS
|
|
|
+ STRINGS_FOR_TARGET
|
|
|
STRIP
|
|
|
+ STRIP_FOR_TARGET
|
|
|
+
|
|
|
+ READELF
|
|
|
+ OBJCOPY
|
|
|
+ OBJDUMP
|
|
|
+
|
|
|
+ MACOSX_DEPLOYMENT_TARGET
|
|
|
+
|
|
|
+ CONFIG_SHELL
|
|
|
+ HOST_PATH
|
|
|
+]
|
|
|
+var ignore = [
|
|
|
+ # keep user variables
|
|
|
+ HOME
|
|
|
+ OLDPWD
|
|
|
+ SHELL
|
|
|
TEMP
|
|
|
TEMPDIR
|
|
|
TERM
|
|
|
TMP
|
|
|
TMPDIR
|
|
|
TZ
|
|
|
+
|
|
|
+ # purity-related envs
|
|
|
+ NIX_ENFORCE_PURITY
|
|
|
+ SOURCE_DATE_EPOCH
|
|
|
+ ZERO_AR_DATE
|
|
|
+
|
|
|
+ # nix build variables
|
|
|
buildInputs
|
|
|
buildPhase
|
|
|
builder
|
|
@@ -88,6 +109,7 @@ var ignore = [
|
|
|
outputs
|
|
|
patches
|
|
|
phases
|
|
|
+ preferLocalBuild
|
|
|
propagatedBuildInputs
|
|
|
propagatedNativeBuildInputs
|
|
|
shell
|
|
@@ -109,17 +131,33 @@ fn diff-env {|env|
|
|
|
} $env
|
|
|
}
|
|
|
|
|
|
+fn print-change {|key new|
|
|
|
+ if (has-value $quiet $key) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (str:has-prefix $key "NIX_") {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if $new {
|
|
|
+ put +$key
|
|
|
+ } else {
|
|
|
+ put -$key
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
fn apply-env {|env|
|
|
|
each {|row|
|
|
|
var key value = (all $row)
|
|
|
if (eq $value $nil) {
|
|
|
- put -$key
|
|
|
+ print-change $key $false
|
|
|
unset-env $key
|
|
|
} else {
|
|
|
- put +$key
|
|
|
+ print-change $key $true
|
|
|
set-env $key $value
|
|
|
}
|
|
|
- } $env
|
|
|
+ } $env | compact
|
|
|
}
|
|
|
|
|
|
fn env-from-nix-flake {|state-file|
|
|
@@ -127,15 +165,16 @@ fn env-from-nix-flake {|state-file|
|
|
|
keys $data[variables] | each {|key|
|
|
|
var v = $data[variables][$key]
|
|
|
if (eq $v[type] "exported") {
|
|
|
- if (str:has-prefix $key "NIX_") {
|
|
|
- continue
|
|
|
- } elif (str:has-prefix $key "__") {
|
|
|
+ if (str:has-prefix $key "__") {
|
|
|
continue
|
|
|
} elif (has-value $ignore $key) {
|
|
|
continue
|
|
|
} elif (has-value $extend $key) {
|
|
|
- var existing = (get-env $key)
|
|
|
var extended = $v[value]
|
|
|
+ if (eq $extended "") {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ var existing = (get-env $key)
|
|
|
if (not-eq $existing $nil) {
|
|
|
set extended = $extended":"$existing
|
|
|
}
|