56 lines
1.5 KiB
Bash
56 lines
1.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
# Prevent double-sourcing
|
||
|
|
if [[ -n "${PKGMGR_NIX_CONF_FILE_SH:-}" ]]; then
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
PKGMGR_NIX_CONF_FILE_SH=1
|
||
|
|
|
||
|
|
nixconf_file_path() {
|
||
|
|
echo "/etc/nix/nix.conf"
|
||
|
|
}
|
||
|
|
|
||
|
|
nixconf_ensure_experimental_features() {
|
||
|
|
local nix_conf want
|
||
|
|
nix_conf="$(nixconf_file_path)"
|
||
|
|
want="experimental-features = nix-command flakes"
|
||
|
|
|
||
|
|
mkdir -p /etc/nix
|
||
|
|
|
||
|
|
if [[ ! -f "${nix_conf}" ]]; then
|
||
|
|
echo "[nix-conf] Creating ${nix_conf} with: ${want}"
|
||
|
|
printf "%s\n" "${want}" >"${nix_conf}"
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
if grep -qE '^\s*experimental-features\s*=' "${nix_conf}"; then
|
||
|
|
if grep -qE '^\s*experimental-features\s*=.*\bnix-command\b' "${nix_conf}" \
|
||
|
|
&& grep -qE '^\s*experimental-features\s*=.*\bflakes\b' "${nix_conf}"; then
|
||
|
|
echo "[nix-conf] experimental-features already correct"
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "[nix-conf] Extending experimental-features in ${nix_conf}"
|
||
|
|
|
||
|
|
local current
|
||
|
|
current="$(grep -E '^\s*experimental-features\s*=' "${nix_conf}" | head -n1 | cut -d= -f2-)"
|
||
|
|
current="$(echo "${current}" | xargs)" # trim
|
||
|
|
|
||
|
|
# Build a merged feature string without duplicates (simple token set)
|
||
|
|
local merged="nix-command flakes"
|
||
|
|
local token
|
||
|
|
for token in ${current}; do
|
||
|
|
if [[ " ${merged} " != *" ${token} "* ]]; then
|
||
|
|
merged="${merged} ${token}"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
sed -i "s|^\s*experimental-features\s*=.*|experimental-features = ${merged}|" "${nix_conf}"
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "[nix-conf] Appending to ${nix_conf}: ${want}"
|
||
|
|
printf "\n%s\n" "${want}" >>"${nix_conf}"
|
||
|
|
}
|