package Nix::Config; use MIME::Base64; $version = "@PACKAGE_VERSION@"; $binDir = $ENV{"NIX_BIN_DIR"} || "@bindir@"; $libexecDir = $ENV{"NIX_LIBEXEC_DIR"} || "@libexecdir@"; $stateDir = $ENV{"NIX_STATE_DIR"} || "@localstatedir@/nix"; $manifestDir = $ENV{"NIX_MANIFESTS_DIR"} || "@localstatedir@/nix/manifests"; $logDir = $ENV{"NIX_LOG_DIR"} || "@localstatedir@/log/nix"; $confDir = $ENV{"NIX_CONF_DIR"} || "@sysconfdir@/nix"; $storeDir = $ENV{"NIX_STORE_DIR"} || "@storedir@"; $caBundle = $ENV{"NIX_SSL_CERT_FILE"} // $ENV{"SSL_CERT_FILE"} // $ENV{"CURL_CA_BUNDLE"} // $ENV{"OPENSSL_X509_CERT_FILE"}; $caBundle = "/etc/ssl/certs/ca-bundle.crt" if !$caBundle && -f "/etc/ssl/certs/ca-bundle.crt"; $caBundle = "/etc/ssl/certs/ca-certificates.crt" if !$caBundle && -f "/etc/ssl/certs/ca-certificates.crt"; $curlCaFlag = defined $caBundle ? "--cacert $caBundle" : ""; $bzip2 = "@bzip2@"; $xz = "@xz@"; $curl = "@curl@"; $openssl = "@openssl@"; $useBindings = "@perlbindings@" eq "yes"; %config = (); %binaryCachePublicKeys = (); $defaultPublicKeys = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="; sub readConfig { if (defined $ENV{'_NIX_OPTIONS'}) { foreach my $s (split '\n', $ENV{'_NIX_OPTIONS'}) { my ($n, $v) = split '=', $s, 2; $config{$n} = $v; } } else { my $config = "$confDir/nix.conf"; return unless -f $config; open CONFIG, "<$config" or die "cannot open ‘$config’"; while () { /^\s*([\w\-\.]+)\s*=\s*(.*)$/ or next; $config{$1} = $2; } close CONFIG; } foreach my $s (split(/ /, $config{"binary-cache-public-keys"} // $defaultPublicKeys)) { my ($keyName, $publicKey) = split ":", $s; next unless defined $keyName && defined $publicKey; $binaryCachePublicKeys{$keyName} = decode_base64($publicKey); } } return 1;