Files
andwati 36f0caa66e Add modular dev environment installer, dotfiles, and desnap script
Adds a TUI-driven, rollback-capable installer (install/install.sh +
install/modules/*.sh) covering JS/Python/systems toolchains, dev tooling,
browsers, chat apps, GNOME extras, and misc setup (wakatime key, ssh/gpg
perms, apt mirror benchmarking), all sourced from each vendor's official
install method. bootstrap.sh stows the zsh/git/tmux/vscode dotfiles and
runs the installer; desnap.sh purges snapd and replaces default snaps with
apt/Flatpak equivalents.
2026-07-15 17:02:27 +03:00

66 lines
2.0 KiB
Bash

install_zig() {
local index latest
index=$(curl -fsSL https://ziglang.org/download/index.json)
latest=$(jq -r 'keys[]' <<< "$index" | grep -v '^master$' | sort -V | tail -n1)
if has_cmd zig && zig version 2>/dev/null | grep -qx "$latest"; then
ok "zig already at $latest"
else
local url tarball extract_dir
url=$(jq -r --arg v "$latest" '.[$v]["x86_64-linux"].tarball' <<< "$index")
tarball=$(mktemp --suffix=.tar.xz)
curl -fsSL "$url" -o "$tarball"
extract_dir=$(mktemp -d)
tar -xJf "$tarball" -C "$extract_dir" --strip-components=1
rm -f "$tarball"
sudo rm -rf /opt/zig
track_new_sudo_dir /opt/zig
sudo mv "$extract_dir" /opt/zig
sudo ln -sf /opt/zig/zig /usr/local/bin/zig
rollback_push "sudo rm -f /usr/local/bin/zig"
fi
_zig_install_zls
}
# zls (the Zig language server) is versioned against a specific zig build;
# zigtools' own select-version API returns the right zls release for
# whatever zig version is currently installed.
_zig_install_zls() {
if ! has_cmd zig; then return 0; fi
local zig_version resp url
zig_version=$(zig version)
resp=$(curl -fsSL "https://releases.zigtools.org/v1/zls/select-version?zig_version=${zig_version}&compatibility=only-runtime")
url=$(jq -r '.["x86_64-linux"].tarball // empty' <<< "$resp" 2>/dev/null)
if [[ -z "$url" ]]; then
warn "no matching zls build for zig $zig_version, skipping"
return 0
fi
if [[ -x /opt/zls/zls ]]; then
local current
current=$(/opt/zls/zls --version 2>/dev/null || echo "")
if [[ "$current" == *"$zig_version"* ]]; then
ok "zls already matches zig $zig_version"
return 0
fi
fi
local tarball extract_dir
tarball=$(mktemp --suffix=.tar.xz)
curl -fsSL "$url" -o "$tarball"
extract_dir=$(mktemp -d)
tar -xJf "$tarball" -C "$extract_dir"
rm -f "$tarball"
sudo rm -rf /opt/zls
track_new_sudo_dir /opt/zls
sudo mv "$extract_dir" /opt/zls
sudo ln -sf /opt/zls/zls /usr/local/bin/zls
rollback_push "sudo rm -f /usr/local/bin/zls"
}