Files
dotfiles/home/run_onchange_install-packages.sh.tmpl
Xevion 4d914f1e2f feat: migrate from Zsh to Fish shell with comprehensive configuration
Major shell migration replacing Zsh/Oh-My-Zsh with Fish shell:

- Remove all Zsh configurations (dot_zshrc.tmpl, dot_p10k.zsh)
- Remove Oh-My-Zsh external dependencies from .chezmoiexternal.toml
- Add complete Fish shell setup with config.fish.tmpl and abbr.fish.tmpl
- Implement Fish-native functions for lazy-loading tools (mise, pyenv, zoxide, etc.)
- Create commonrc.fish.tmpl for cross-shell compatibility
- Add Fish plugin management via Fisher (tide prompt, fzf.fish)
- Update documentation (CLAUDE.md, TODO.md, ONBOARDING.md) to reflect Fish
- Add .fish.tmpl file association to VS Code settings
- Enhance PowerShell profile with lsd aliases
- Configure git delta pager and zdiff3 merge conflict style
- Update WSL keychain integration for Fish shell

This migration maintains all existing tool integrations while improving
startup performance through lazy-loading and Fish's native features.
2025-10-27 14:45:37 -05:00

111 lines
3.5 KiB
Bash

{{ if eq .chezmoi.os "linux" -}}
#!/bin/bash
set -xeu
{{/* This script is intended to be idempotent and should be safe to run multiple times. */ -}}
{{/* No custom packages should be expected to be installed by default. */ -}}
{{ if .wsl }}
# WSL-specific commands
sudo apt install -y keychain
{{ else }}
# Non-WSL commands
sudo apt install -y xclip xsel
{{ end }}
{{/* TODO: Add basic yes/no prompts before installing packages */ -}}
# Install Fisher (Fish plugin manager) and plugins from fish_plugins file
if type -P fish; then
if [ ! -f ~/.config/fish/functions/fisher.fish ]; then
echo "chezmoi: Installing Fisher (Fish plugin manager)"
fish -c "curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher"
fi
# Update plugins from fish_plugins file
if [ -f ~/.config/fish/fish_plugins ]; then
echo "chezmoi: Updating Fish plugins from fish_plugins file"
fish -c "fisher update"
fi
fi
# Install micro (+ register as text editor)
if ! type -P micro; then
echo "chezmoi: Installing micro"
sudo apt remove -y micro
curl https://getmic.ro/r | sudo sh
sudo mv ./micro /usr/bin/micro
fi
echo "chezmoi: Installing apt packages"
PACKAGES='git fzf fish sqlite curl ripgrep jq' # Install and/or update
sudo apt install -y $PACKAGES
INSTALL_ONLY_PACKAGES='iperf3 unzip p7zip-full nmap reptyr btop' # Install only if missing
MISSING_PACKAGES=""
for pkg in $INSTALL_ONLY_PACKAGES; do
if ! dpkg -l $pkg >/dev/null 2>&1; then
MISSING_PACKAGES="$MISSING_PACKAGES $pkg"
fi
done
if [ -n "$MISSING_PACKAGES" ]; then
echo "chezmoi: The following packages are missing and will be installed: $MISSING_PACKAGES"
sudo apt install -y $MISSING_PACKAGES
fi
# Install hishtory
if ! type -P hishtory; then
echo "chezmoi: Installing hishtory"
export HISHTORY_SERVER="https://hsh.{{ dopplerProjectJson.PRIVATE_DOMAIN }}"
export HISHTORY_SKIP_INIT_IMPORT='true'
curl https://hishtory.dev/install.py | python3 - --offline --skip-config-modification
fi
# Hishtory initialization
if type -P hishtory; then
if ! hishtory status | grep -q "$(doppler secrets get HISHTORY_USER_SECRET --plain)"; then
echo "chezmoi: expected user secret not found, initializing hishtory"
hishtory init "$(doppler secrets get HISHTORY_USER_SECRET --plain)" --force
hishtory syncing enable
fi
else
echo "chezmoi: hishtory not found, skipping initialization"
fi
# Install chatgpt
if ! type -P chatgpt; then
echo "chezmoi: Installing chatgpt"
curl -L -o chatgpt https://github.com/kardolus/chatgpt-cli/releases/latest/download/chatgpt-linux-amd64
chmod +x chatgpt
sudo mv chatgpt /usr/local/bin/
fi
# Set Fish as default shell
if type -P fish; then
FISH_PATH=$(which fish)
CURRENT_SHELL=$(getent passwd "$USER" | cut -d: -f7)
if [ "$CURRENT_SHELL" != "$FISH_PATH" ]; then
echo "chezmoi: Setting Fish as default shell"
# Add fish to /etc/shells if not already present
if ! grep -q "^$FISH_PATH$" /etc/shells; then
echo "$FISH_PATH" | sudo tee -a /etc/shells
fi
# Change default shell
sudo chsh -s "$FISH_PATH" "$USER"
echo "chezmoi: Default shell changed to Fish. Please log out and back in for changes to take effect."
else
echo "chezmoi: Fish is already the default shell"
fi
fi
{{- else if eq .chezmoi.os "darwin" -}}
#!/bin/sh
brew install ripgrep
{{ end -}}