Files
dotfiles/install.d/30-mise.sh
Andrejus 296ad6c4eb fix: SIGPIPE (exit 141) in mise verification, remove redundant bat script
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>
2026-03-18 18:53:19 +00:00

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"