harden install script and fix fish config portability
Install script: - fix package availability (skim/fedora, fd-find/debian, direnv+goku/macos) - add CLI flags for non-interactive mode (--skip-timezone, --skip-neovim-bootstrap, etc.) - template STEPS count per OS for correct TUI layout - add brew shellenv for fresh Apple Silicon, timeout portability - pam_ssh_agent_auth availability check with warning for Fedora 42+ - fix fisher detection, authorized_keys whole-line dedup Fish config: - replace set -gx PATH with idempotent fish_add_path - guard direnv/cargo sourcing for missing tools - fix hardcoded /home/anton/ and /Users/anton/ paths - remove unused micromamba/conda setup Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e838936be2
commit
ac46863b48
@ -1,12 +1,12 @@
|
|||||||
set -gx PATH /usr/local/opt/coreutils/libexec/gnubin $PATH
|
fish_add_path /opt/homebrew/bin
|
||||||
set -gx PATH /opt/homebrew/coreutils/libexec/gnubin $PATH
|
fish_add_path /opt/homebrew/coreutils/libexec/gnubin
|
||||||
set -gx PATH /opt/homebrew/bin $PATH
|
fish_add_path /usr/local/opt/coreutils/libexec/gnubin
|
||||||
set -gx PATH /usr/local/bin $PATH
|
fish_add_path /usr/local/bin
|
||||||
set -gx PATH /snap/bin $PATH
|
fish_add_path /snap/bin
|
||||||
|
fish_add_path $HOME/.local/bin
|
||||||
|
fish_add_path $HOME/.cargo/bin
|
||||||
|
fish_add_path $HOME/.go/bin
|
||||||
set -gx GOPATH $HOME/.go
|
set -gx GOPATH $HOME/.go
|
||||||
set -gx PATH $HOME/.local/bin $PATH
|
|
||||||
set -gx PATH $HOME/.cargo/bin $PATH
|
|
||||||
set -gx PATH $HOME/.go/bin $PATH
|
|
||||||
set -gx EDITOR nvim
|
set -gx EDITOR nvim
|
||||||
set fish_color_valid_path
|
set fish_color_valid_path
|
||||||
set -g fish_greeting
|
set -g fish_greeting
|
||||||
@ -73,23 +73,9 @@ function winbox
|
|||||||
~/dev/winbox/run.sh&
|
~/dev/winbox/run.sh&
|
||||||
end
|
end
|
||||||
|
|
||||||
function conda
|
|
||||||
micromamba $argv
|
|
||||||
end
|
|
||||||
|
|
||||||
|
if test -e $HOME/.nix-profile/etc/profile.d/nix.fish
|
||||||
|
source $HOME/.nix-profile/etc/profile.d/nix.fish
|
||||||
if [ -e /opt/homebrew/bin/micromamba ]
|
|
||||||
# >>> mamba initialize >>>
|
|
||||||
# !! Contents within this block are managed by 'mamba init' !!
|
|
||||||
set -gx MAMBA_EXE "/opt/homebrew/bin/micromamba"
|
|
||||||
set -gx MAMBA_ROOT_PREFIX "/Users/anton/micromamba"
|
|
||||||
$MAMBA_EXE shell hook --shell fish --root-prefix $MAMBA_ROOT_PREFIX | source
|
|
||||||
# <<< mamba initialize <<<
|
|
||||||
end
|
|
||||||
|
|
||||||
if [ -e /home/anton/.nix-profile/etc/profile.d/nix.fish ];
|
|
||||||
source /home/anton/.nix-profile/etc/profile.d/nix.fish;
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# The next line updates PATH for the Google Cloud SDK.
|
# The next line updates PATH for the Google Cloud SDK.
|
||||||
@ -98,7 +84,9 @@ if [ -f ~/dev/google-cloud-sdk/path.fish.inc ]
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
direnv hook fish | source
|
if type -q direnv
|
||||||
|
direnv hook fish | source
|
||||||
|
end
|
||||||
if [ -f ~/.config/op/plugins.sh ]
|
if [ -f ~/.config/op/plugins.sh ]
|
||||||
source ~/.config/op/plugins.sh
|
source ~/.config/op/plugins.sh
|
||||||
end
|
end
|
||||||
@ -106,14 +94,16 @@ end
|
|||||||
#fish_vi_key_bindings
|
#fish_vi_key_bindings
|
||||||
|
|
||||||
# bun
|
# bun
|
||||||
set --export BUN_INSTALL "$HOME/.bun"
|
set -gx BUN_INSTALL "$HOME/.bun"
|
||||||
set --export PATH $BUN_INSTALL/bin $PATH
|
fish_add_path $HOME/.bun/bin
|
||||||
source "$HOME/.cargo/env.fish"
|
if test -f "$HOME/.cargo/env.fish"
|
||||||
|
source "$HOME/.cargo/env.fish"
|
||||||
|
end
|
||||||
|
|
||||||
export PATH="$PATH:/Users/anton/dev/screenpipe/target/debug"
|
fish_add_path $HOME/dev/screenpipe/target/debug
|
||||||
|
|
||||||
# Added by LM Studio CLI (lms)
|
# Added by LM Studio CLI (lms)
|
||||||
set -gx PATH $PATH /Users/anton/.cache/lm-studio/bin
|
fish_add_path $HOME/.cache/lm-studio/bin
|
||||||
|
|
||||||
# Added by OrbStack: command-line tools and integration
|
# Added by OrbStack: command-line tools and integration
|
||||||
# This won't be added again if you remove it.
|
# This won't be added again if you remove it.
|
||||||
|
|||||||
@ -17,12 +17,46 @@
|
|||||||
|
|
||||||
|
|
||||||
#Config
|
#Config
|
||||||
|
{{ if eq .chezmoi.os "darwin" -}}
|
||||||
|
STEPS=9
|
||||||
|
{{ else if eq .chezmoi.os "freebsd" -}}
|
||||||
|
STEPS=9
|
||||||
|
{{ else if eq .chezmoi.osRelease.id "ubuntu" -}}
|
||||||
STEPS=14
|
STEPS=14
|
||||||
|
{{ else if eq .chezmoi.osRelease.id "debian" -}}
|
||||||
|
STEPS=13
|
||||||
|
{{ else -}}
|
||||||
|
STEPS=12
|
||||||
|
{{ end -}}
|
||||||
PAD_LEN=4
|
PAD_LEN=4
|
||||||
|
|
||||||
BASE_PACKAGES="gnupg curl wget git"
|
BASE_PACKAGES="gnupg curl wget git"
|
||||||
ACT_PACKAGES="ripgrep unzip htop fzf bat gawk jq nnn tmux mc nethogs ngrep mtr gcc"
|
ACT_PACKAGES="ripgrep unzip htop fzf bat gawk jq nnn tmux mc nethogs ngrep mtr gcc"
|
||||||
|
|
||||||
|
# Non-interactive mode flags
|
||||||
|
ASSUME_YES=0
|
||||||
|
NON_INTERACTIVE=0
|
||||||
|
SKIP_TIMEZONE=0
|
||||||
|
SKIP_AUTH_KEYS=0
|
||||||
|
SKIP_SHELL_CHANGE=0
|
||||||
|
SKIP_NVIM_BOOTSTRAP=0
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--yes) ASSUME_YES=1 ;;
|
||||||
|
--non-interactive) NON_INTERACTIVE=1 ;;
|
||||||
|
--skip-timezone) SKIP_TIMEZONE=1 ;;
|
||||||
|
--skip-authorized-keys) SKIP_AUTH_KEYS=1 ;;
|
||||||
|
--skip-shell-change) SKIP_SHELL_CHANGE=1 ;;
|
||||||
|
--skip-neovim-bootstrap) SKIP_NVIM_BOOTSTRAP=1 ;;
|
||||||
|
*) echo "Unknown option: $1"; exit 2 ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# Timeout portability (macOS has gtimeout via coreutils, not timeout)
|
||||||
|
TIMEOUT_BIN="$(command -v timeout || command -v gtimeout || true)"
|
||||||
|
|
||||||
#Colors
|
#Colors
|
||||||
Green='\033[0;32m' # Green
|
Green='\033[0;32m' # Green
|
||||||
Blue='\033[0;34m' # Blue
|
Blue='\033[0;34m' # Blue
|
||||||
@ -55,7 +89,8 @@ read
|
|||||||
|
|
||||||
|
|
||||||
#Setup
|
#Setup
|
||||||
TERM_WIDTH_BASE=$(stty size|awk '{print $2}')
|
TERM_WIDTH_BASE=$(stty size 2>/dev/null | awk '{print $2}')
|
||||||
|
TERM_WIDTH_BASE=${TERM_WIDTH_BASE:-80}
|
||||||
PADDING=$(printf "%${PAD_LEN}s") # 4 spaces of padding
|
PADDING=$(printf "%${PAD_LEN}s") # 4 spaces of padding
|
||||||
TERM_WIDTH=$(($TERM_WIDTH_BASE - $PAD_LEN))
|
TERM_WIDTH=$(($TERM_WIDTH_BASE - $PAD_LEN))
|
||||||
USER=$(whoami)
|
USER=$(whoami)
|
||||||
@ -125,9 +160,14 @@ new_line "Update caches and upgrade packages"
|
|||||||
|
|
||||||
|
|
||||||
{{ else if eq .chezmoi.os "darwin" -}}
|
{{ else if eq .chezmoi.os "darwin" -}}
|
||||||
if ! type brew; then
|
if ! command -v brew >/dev/null 2>&1; then
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 2>&1|pad
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 2>&1|pad
|
||||||
fi
|
fi
|
||||||
|
if [ -x /opt/homebrew/bin/brew ]; then
|
||||||
|
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||||
|
elif [ -x /usr/local/bin/brew ]; then
|
||||||
|
eval "$(/usr/local/bin/brew shellenv)"
|
||||||
|
fi
|
||||||
brew update 2>&1|pad
|
brew update 2>&1|pad
|
||||||
|
|
||||||
{{ else if eq .chezmoi.osRelease.id "fedora" "almalinux" "rocky" -}}
|
{{ else if eq .chezmoi.osRelease.id "fedora" "almalinux" "rocky" -}}
|
||||||
@ -150,7 +190,7 @@ new_line "Install base packages"
|
|||||||
sudo pkg install --yes $BASE_PACKAGES py39-pipx direnv 2>&1|pad
|
sudo pkg install --yes $BASE_PACKAGES py39-pipx direnv 2>&1|pad
|
||||||
|
|
||||||
{{ else if eq .chezmoi.os "darwin" -}}
|
{{ else if eq .chezmoi.os "darwin" -}}
|
||||||
brew install -q $BASE_PACKAGES python pipx 2>&1|pad
|
brew install -q $BASE_PACKAGES python pipx direnv goku 2>&1|pad
|
||||||
|
|
||||||
{{ else if eq .chezmoi.osRelease.id "fedora" -}}
|
{{ else if eq .chezmoi.osRelease.id "fedora" -}}
|
||||||
sudo dnf install $BASE_PACKAGES direnv kitty-terminfo util-linux-user pipx -y 2>&1|pad
|
sudo dnf install $BASE_PACKAGES direnv kitty-terminfo util-linux-user pipx -y 2>&1|pad
|
||||||
@ -221,12 +261,24 @@ sudo pkg install --yes $ACT_PACKAGES neovim fish atuin lazygit fd-find pam_ssh_a
|
|||||||
brew install -q fish neovim $ACT_PACKAGES atuin jump fd sk dust lazygit 2>&1|pad
|
brew install -q fish neovim $ACT_PACKAGES atuin jump fd sk dust lazygit 2>&1|pad
|
||||||
|
|
||||||
{{ else if eq .chezmoi.osRelease.id "fedora" -}}
|
{{ else if eq .chezmoi.osRelease.id "fedora" -}}
|
||||||
sudo dnf install neovim fish $ACT_PACKAGES fd-find skim pam_ssh_agent_auth -y 2>&1|pad
|
PAM_SSH_PKG=""
|
||||||
|
if dnf list --quiet pam_ssh_agent_auth >/dev/null 2>&1; then
|
||||||
|
PAM_SSH_PKG="pam_ssh_agent_auth"
|
||||||
|
else
|
||||||
|
echo -e "${Yello}WARNING: pam_ssh_agent_auth not available in repos. sudo via SSH agent won't work.${NC}"
|
||||||
|
fi
|
||||||
|
sudo dnf install neovim fish $ACT_PACKAGES fd-find ${PAM_SSH_PKG:+$PAM_SSH_PKG} -y 2>&1|pad
|
||||||
new_line "via NIX"
|
new_line "via NIX"
|
||||||
nix-env -iA nixpkgs.atuin nixpkgs.jump nixpkgs.du-dust nixpkgs.lazygit 2>&1|pad
|
nix-env -iA nixpkgs.atuin nixpkgs.jump nixpkgs.du-dust nixpkgs.lazygit nixpkgs.skim 2>&1|pad
|
||||||
|
|
||||||
{{ else if eq .chezmoi.osRelease.id "almalinux" "rocky" -}}
|
{{ else if eq .chezmoi.osRelease.id "almalinux" "rocky" -}}
|
||||||
sudo dnf install neovim fish $ACT_PACKAGES fd-find pam_ssh_agent_auth -y 2>&1|pad
|
PAM_SSH_PKG=""
|
||||||
|
if dnf list --quiet pam_ssh_agent_auth >/dev/null 2>&1; then
|
||||||
|
PAM_SSH_PKG="pam_ssh_agent_auth"
|
||||||
|
else
|
||||||
|
echo -e "${Yello}WARNING: pam_ssh_agent_auth not available in repos. sudo via SSH agent won't work.${NC}"
|
||||||
|
fi
|
||||||
|
sudo dnf install neovim fish $ACT_PACKAGES fd-find ${PAM_SSH_PKG:+$PAM_SSH_PKG} -y 2>&1|pad
|
||||||
new_line "via NIX"
|
new_line "via NIX"
|
||||||
nix-env -iA nixpkgs.fish nixpkgs.neovim nixpkgs.direnv nixpkgs.atuin nixpkgs.jump nixpkgs.du-dust nixpkgs.lazygit 2>&1|pad
|
nix-env -iA nixpkgs.fish nixpkgs.neovim nixpkgs.direnv nixpkgs.atuin nixpkgs.jump nixpkgs.du-dust nixpkgs.lazygit 2>&1|pad
|
||||||
|
|
||||||
@ -238,7 +290,7 @@ new_line "via NIX"
|
|||||||
{{ else if eq .chezmoi.osRelease.id "debian" "ubuntu" -}}
|
{{ else if eq .chezmoi.osRelease.id "debian" "ubuntu" -}}
|
||||||
sudo apt-get install fish -y 2>&1|pad
|
sudo apt-get install fish -y 2>&1|pad
|
||||||
sudo apt-get install neovim -y 2>&1|pad
|
sudo apt-get install neovim -y 2>&1|pad
|
||||||
sudo apt-get install $ACT_PACKAGES libpam-ssh-agent-auth -y 2>&1|pad
|
sudo apt-get install $ACT_PACKAGES fd-find libpam-ssh-agent-auth -y 2>&1|pad
|
||||||
|
|
||||||
new_line "via NIX"
|
new_line "via NIX"
|
||||||
nix-env -iA nixpkgs.neovim nixpkgs.lazygit nixpkgs.jump nixpkgs.skim nixpkgs.du-dust nixpkgs.atuin 2>&1|pad
|
nix-env -iA nixpkgs.neovim nixpkgs.lazygit nixpkgs.jump nixpkgs.skim nixpkgs.du-dust nixpkgs.atuin 2>&1|pad
|
||||||
@ -251,18 +303,22 @@ mkdir ~/.ssh 2>/dev/null || true
|
|||||||
cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys.old 2>/dev/null || true
|
cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys.old 2>/dev/null || true
|
||||||
|
|
||||||
##print only unique lines
|
##print only unique lines
|
||||||
cat ~/.ssh/authorized_keys.old <(echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdqIDeRKDOh7NQDcqnmLH/6M0ys7Wt/SEnF6ZYqroiH") 2>/dev/null | awk '!seen[$1]++' > ~/.ssh/authorized_keys
|
cat ~/.ssh/authorized_keys.old <(echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdqIDeRKDOh7NQDcqnmLH/6M0ys7Wt/SEnF6ZYqroiH") 2>/dev/null | awk 'NF && !seen[$0]++' > ~/.ssh/authorized_keys
|
||||||
|
|
||||||
|
if [ "$SKIP_NVIM_BOOTSTRAP" -eq 0 ]; then
|
||||||
new_line "Waiting for neovim plugins and lsm compilations..."
|
new_line "Waiting for neovim plugins and lsm compilations..."
|
||||||
timeout 60s nvim --headless -c "sleep 1" -c ":Lazy! sync" -c "sleep 10" -c "qa" 2>&1|pad
|
${TIMEOUT_BIN:+$TIMEOUT_BIN 60s} nvim --headless -c "sleep 1" -c ":Lazy! sync" -c "sleep 10" -c "qa" 2>&1|pad
|
||||||
timeout 60s nvim --headless -c "sleep 1" -c ":MasonUpdate" -c "sleep 5" -c "qa" 2>&1|pad
|
${TIMEOUT_BIN:+$TIMEOUT_BIN 60s} nvim --headless -c "sleep 1" -c ":MasonUpdate" -c "sleep 5" -c "qa" 2>&1|pad
|
||||||
timeout 60s nvim --headless -c "sleep 1" -c ":MasonInstall lua-language-server" -c "sleep 5" -c "qa" 2>&1|pad
|
${TIMEOUT_BIN:+$TIMEOUT_BIN 60s} nvim --headless -c "sleep 1" -c ":MasonInstall lua-language-server" -c "sleep 5" -c "qa" 2>&1|pad
|
||||||
timeout 60s nvim --headless -c "sleep 1" -c ":MasonInstall rust-analyzer" -c "sleep 5" -c "qa" 2>&1|pad
|
${TIMEOUT_BIN:+$TIMEOUT_BIN 60s} nvim --headless -c "sleep 1" -c ":MasonInstall rust-analyzer" -c "sleep 5" -c "qa" 2>&1|pad
|
||||||
timeout 60s nvim --headless -c "sleep 1" -c ":TSUpdate" -c "sleep 5" -c "qa" 2>&1|pad
|
${TIMEOUT_BIN:+$TIMEOUT_BIN 60s} nvim --headless -c "sleep 1" -c ":TSUpdate" -c "sleep 5" -c "qa" 2>&1|pad
|
||||||
|
fi
|
||||||
|
|
||||||
{{ if eq .chezmoi.os "linux" -}}
|
{{ if eq .chezmoi.os "linux" -}}
|
||||||
|
if [ "$SKIP_TIMEZONE" -eq 0 ]; then
|
||||||
new_line "Setting timezone to Moscow"
|
new_line "Setting timezone to Moscow"
|
||||||
sudo timedatectl set-timezone Europe/Moscow
|
sudo timedatectl set-timezone Europe/Moscow
|
||||||
|
fi
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
new_line "Installing shell-gpt"
|
new_line "Installing shell-gpt"
|
||||||
@ -270,7 +326,7 @@ pipx install shell-gpt 2>&1|pad
|
|||||||
|
|
||||||
new_line "Install fisher plugin manager for fish"
|
new_line "Install fisher plugin manager for fish"
|
||||||
## Install fisher plugin manager for fish, so that we may update in after plugin list sync by chezmoi
|
## Install fisher plugin manager for fish, so that we may update in after plugin list sync by chezmoi
|
||||||
if ! fish -c fisher &>/dev/null
|
if ! fish -c "type -q fisher" &>/dev/null
|
||||||
then
|
then
|
||||||
fish -c "curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher update" 2>&1|pad
|
fish -c "curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher update" 2>&1|pad
|
||||||
fi
|
fi
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user