Replace head -1 with sed -n '1p' across all install scripts to prevent SIGPIPE when commands produce multi-line output. head closes the pipe after reading line 1, causing the writer to receive SIGPIPE which propagates via pipefail (exit 141). sed reads all input, avoiding the broken pipe. Remove install.d/26-bat.sh — bat is already installed and managed via mise in 30-mise.sh. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
116 lines
3.6 KiB
Bash
Executable File
116 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Description:
|
|
# Install mise runtime manager and all development tools.
|
|
# Consolidated installation of Python, Node.js, GitHub CLI, Terraform, Firebase, etc.
|
|
#
|
|
|
|
# Install mise
|
|
if ! command -v mise &>/dev/null; then
|
|
log_info "Installing mise..."
|
|
case "$DOTS_PKG" in
|
|
brew)
|
|
brew install mise
|
|
;;
|
|
apt)
|
|
# https://mise.jdx.dev/getting-started.html#apt-debian-ubuntu
|
|
sudo install -dm 755 /etc/apt/keyrings
|
|
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | \
|
|
sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
|
|
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | \
|
|
sudo tee /etc/apt/sources.list.d/mise.list
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -qq mise
|
|
;;
|
|
pacman)
|
|
yay -S --noconfirm mise
|
|
;;
|
|
*)
|
|
# Fallback: curl install
|
|
log_info "Using curl installer..."
|
|
curl https://mise.jdx.dev/install.sh | sh
|
|
# Add to PATH for current session
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
echo "mise $(MISE_QUIET=1 mise --version)" | log_quote
|
|
|
|
# Skip runtimes in Codespaces (use pre-installed versions)
|
|
if [[ "$DOTS_ENV" != "codespaces" ]]; then
|
|
typeset -a MISE_RUNTIMES=(
|
|
"python@3.14.2"
|
|
"node@25.5.0"
|
|
)
|
|
|
|
log_info "Installing runtimes..."
|
|
MISE_QUIET=1 mise install "${MISE_RUNTIMES[@]}" 2>&1 | log_quote
|
|
for tool in "${MISE_RUNTIMES[@]}"; do
|
|
MISE_QUIET=1 mise use -g "$tool" 2>&1 | log_quote
|
|
done
|
|
fi
|
|
|
|
# Activate mise shims so runtimes (e.g. python3) are available for app installers
|
|
eval "$(mise activate bash)"
|
|
export PATH="$HOME/.local/share/mise/shims:$PATH"
|
|
|
|
typeset -a MISE_APPS=(
|
|
"bat@latest"
|
|
"fzf@latest"
|
|
"zoxide@latest"
|
|
"ripgrep@latest"
|
|
"delta@latest"
|
|
)
|
|
|
|
if [[ "$DOTS_ENV" != "codespaces" ]]; then
|
|
MISE_APPS+=(
|
|
"poetry@2.3.2"
|
|
"gh@2.86.0"
|
|
"terraform@1.14.4"
|
|
"firebase@15.5.1"
|
|
"fastfetch@latest"
|
|
"glow@latest"
|
|
)
|
|
fi
|
|
|
|
log_info "Installing apps..."
|
|
for tool in "${MISE_APPS[@]}"; do
|
|
MISE_QUIET=1 mise use -g "$tool" 2>&1 | tail -1 | log_quote
|
|
done
|
|
|
|
# Rebuild bat theme cache with mise-installed bat (must match delta's syntect version)
|
|
bat cache --build &>/dev/null
|
|
|
|
if [[ "$DOTS_ENV" != "codespaces" ]]; then
|
|
# Setup Poetry ZSH completions (XDG compliant)
|
|
COMPLETIONS_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/zsh/completions"
|
|
mkdir -p "$COMPLETIONS_DIR"
|
|
if [ ! -f "$COMPLETIONS_DIR/_poetry" ]; then
|
|
mise exec -- poetry completions zsh > "$COMPLETIONS_DIR/_poetry"
|
|
fi
|
|
fi
|
|
|
|
# Verify installations
|
|
log_info "Verifying installations..."
|
|
{
|
|
if [[ "$DOTS_ENV" != "codespaces" ]]; then
|
|
mise exec -- python --version
|
|
mise exec -- poetry --version
|
|
echo "node $(mise exec -- node --version)"
|
|
echo "npm $(mise exec -- npm --version)"
|
|
mise exec -- gh --version
|
|
mise exec -- terraform --version | sed -n '1p'
|
|
echo "firebase: $(mise exec -- firebase --version)"
|
|
echo "fastfetch: $(mise exec -- fastfetch --version 2>&1 | sed -n '1p')"
|
|
mise exec -- glow --version | sed -n '1p'
|
|
fi
|
|
echo "fzf $(fzf --version)"
|
|
bat --version | sed -n '1p'
|
|
zoxide --version
|
|
rg --version | sed -n '1p'
|
|
delta --version 2>/dev/null | sed -n '1p' || echo "delta: installed (version check failed)"
|
|
} | log_quote
|
|
log_pass "mise tools installed"
|