1
0
Fork 0
mirror of https://github.com/ryanccn/flake.git synced 2025-12-06 08:10:43 +01:00
flake/.github/workflows/install-nix.sh
2025-10-19 11:02:48 +01:00

86 lines
2.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2025 Ryan Cao <hello@ryanccn.dev>
#
# SPDX-License-Identifier: Apache-2.0
# Modified from https://github.com/cachix/install-nix-action/blob/9280e7aca88deada44c930f1e2c78e21c3ae3edd/install-nix.sh
set -euo pipefail
if nix_path="$(type -p nix)" ; then
echo "Aborting: Nix is already installed at ${nix_path}"
exit
fi
if [[ ($OSTYPE =~ linux) ]]; then
enable_kvm() {
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-install-nix-action-kvm.rules
sudo udevadm control --reload-rules && sudo udevadm trigger --name-match=kvm
}
echo '::group::Enabling KVM support'
enable_kvm && echo 'Enabled KVM' || echo 'KVM is not available'
echo '::endgroup::'
fi
echo "::group::Installing Nix"
workdir=$(mktemp -d)
trap 'rm -rf "$workdir"' EXIT
extra_conf=(
"experimental-features = nix-command flakes"
"show-trace = true"
"max-jobs = auto"
"trusted-users = root ${USER:-}"
)
if [[ -n "${GITHUB_TOKEN:-}" && "${GITHUB_SERVER_URL:-}" == "https://github.com" ]]; then
echo "::debug::Using the default GITHUB_TOKEN for github.com"
extra_conf+=("access-tokens = github.com=$GITHUB_TOKEN")
else
echo "::debug::Continuing without a GitHub access token"
fi
# Nix installer flags
installer_args=(install)
case "$OSTYPE" in
linux*) installer_args+=(linux) ;;
darwin*) installer_args+=(macos) ;;
*) echo "Aborting: unsupported OSTYPE $OSTYPE"; exit 1 ;;
esac
if [[ ! ($OSTYPE =~ darwin || -e /run/systemd/system) ]]; then
installer_args+=(--init none)
fi
installer_args+=(
--no-confirm
--extra-conf "$(printf $'%s\n' "${extra_conf[@]}")"
)
echo "installer args: ${installer_args[*]}"
# There is --retry-on-errors, but only newer curl versions support that
curl_retries=5
while ! curl -o "$workdir/install" --proto '=https' --fail --tlsv1.2 -sSf -L https://artifacts.nixos.org/experimental-installer
do
sleep 1
((curl_retries--))
if [[ $curl_retries -le 0 ]]; then
echo "curl retries failed" >&2
exit 1
fi
done
sh "$workdir/install" "${installer_args[@]}"
{
echo "/nix/var/nix/profiles/default/bin"
echo "${XDG_STATE_HOME:-"$HOME/.local/state"}/nix/profile"
echo "$HOME/.nix-profile/bin"
} >> "$GITHUB_PATH"
# Close the log message group which was opened above
echo "::endgroup::"