irongit

refactor: more reliable installer

huncholanehuncholaneauthored
parent 678aee7commit 8c91c6641d76fbfed3b559bbdadefb802e5a9bbeBrowse files

3 files changed, +166 -108

+1-1.zshrc
@@ -11,5 +11,5 @@ autoload -Uz compinit && compinit
1111 source "$ZDOTDIR/update_functions.sh"
1212
1313 # Post compinit setups. Good for overriding plugins.
14-touch "$ZDOTDIR/env.sh" && source "$ZDOTDIR"/env.sh
14+[ -f "$ZDOTDIR/env.sh" ] && source "$ZDOTDIR/env.sh"
1515 source "$ZDOTDIR"/config.sh
+164-106install.sh
@@ -1,118 +1,176 @@
11 #!/bin/bash
22
3-STORAGE="${XDG_DATA_HOME:-$HOME/.local/share}/dotzsh"
4-mkdir -p "$STORAGE"
5-
6-# Select installer
7-if command -v pacman &>/dev/null; then
8- INSTALL='sudo pacman -S --noconfirm'
9-elif command -v apt &>/dev/null; then
10- INSTALL='sudo apt install -y'
11-elif command -v dnf &>/dev/null; then
12- INSTALL='sudo dnf install -y'
13-elif command -v brew &>/dev/null; then
14- INSTALL='brew install'
15-fi
16-echo "Using $INSTALL for installations"
17-
18-# Pass in command to invoke and installation name
19-install() {
20- if ! command -v "$1" &>/dev/null; then
21- echo -e "\e[33mInstalling $1 using '$INSTALL $2'\e[0m"
22- $INSTALL $2
23- else
24- echo -e "\e[32m$1 is already installed. Skipping.\e[0m"
25- fi
3+BLA_clock=(๐Ÿ•› ๐Ÿ• ๐Ÿ•‘ ๐Ÿ•’ ๐Ÿ•“ ๐Ÿ•” ๐Ÿ•• ๐Ÿ•– ๐Ÿ•— ๐Ÿ•˜ ๐Ÿ•™ ๐Ÿ•š)
4+
5+animate() {
6+ eval "$1" &>/tmp/last_output &
7+ local pid=$!
8+ local spin='-\|/'
9+ local i=0
10+ while kill -0 $pid 2>/dev/null; do
11+ for frame in "${BLA_clock[@]}"; do
12+ printf "\r%s" "${frame}"
13+ sleep 0.2
14+ done
15+ done
16+ printf "\r"
17+ wait $pid
18+ return $?
2619 }
2720
28-# Pass in command to invoke and installation command
29-custominstall() {
30- if ! command -v "$1" &>/dev/null; then
31- echo -e "\e[33mInstalling $1 using $2\e[0m"
32- eval "$2"
33- else
34- echo -e "\e[32m$1 is already installed. Skipping.\e[0m"
35- fi
21+# Colored echos
22+echop() {
23+ echo -e "\e[35m$1\e[0m"
24+}
25+echor() {
26+ echo -e "\e[31m$1\e[0m"
27+}
28+echog() {
29+ echo -e "\e[32m$1\e[0m"
30+}
31+echot() {
32+ echo -e "\e[36m$1\e[0m"
33+}
34+echob() {
35+ echo -e "\e[34$1\e[0m"
3636 }
3737
38-# Install useful tools
39-install curl curl
40-install git git
41-install nvim neovim
42-install tmux tmux
43-install hostname inetutils
44-if command -v pacman &>/dev/null; then
45- install gh github-cli
46-else
47- install gh gh
48-fi
49-install crontab cronie
50-if command -v systemctl &>/dev/null; then
51- sudo systemctl enable --now cronie
52-fi
53-if command -v pacman &>/dev/null; then
54- install docker docker
55-else
56- custominstall docker 'curl -fsSL https://get.docker.com | sh'
57-fi
58-custominstall fnm 'curl -fsSL https://fnm.vercel.app/install | bash'
59-custominstall cargo "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" && . "$HOME/.cargo/env"
60-custominstall lsd 'cargo install lsd'
61-custominstall lazygit 'go install github.com/jesseduffield/lazygit@latest'
62-if [ ! -d "$HOME/.fzf" ]; then
63- git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
64- ~/.fzf/install
65-fi
38+# Select sudo or not
39+[ "$(whoami)" == "root" ] && prefix="" || prefix="sudo"
6640
67-# Initialize git setup
68-if [[ -z $(git config --global user.name) ]]; then
69- read -rp "Git username: " username </dev/tty
70- git config --global user.name "$username"
71-fi
72-if [[ -z $(git config --global user.email) ]]; then
73- read -rp "Git email: " email </dev/tty
74- git config --global user.email "$email"
75-fi
41+login_sudo() {
42+ [ "$prefix" != "sudo" ] || sudo -v
43+}
7644
77-# Install dotzsh
78-read -rp "Are you sure you want to replace your current config? (y/n): " yn </dev/tty
79-if [[ "$yn" == "y" ]]; then
80- oldenv="$(cat "$HOME/.zshenv" 2>/dev/null)"
81- echo 'export ZDOTDIR=$HOME/.config/zsh' >"$HOME/.zshenv"
82- if cp -r "$HOME/.config/zsh" "$STORAGE/backup" &>/dev/null; then
83- echo "Stored $HOME/.config/zsh into $STORAGE/backup"
84- fi
85- rm -rf "$HOME/.config/zsh" &>/dev/null
86- if ! git clone https://github.com/huncholane/dotzsh "$HOME/.config/zsh" 2>/dev/null; then
87- echo "Clone failed"
88- if cp -r "$STORAGE/backup" "$HOME/.config/zsh" &>/dev/null; then
89- echo "Reverted $HOME/.config/zsh to original"
90- fi
91- else
92- echo "$oldenv" >"$HOME/.config/zsh/env.sh"
93- git clone --depth=1 https://github.com/mattmc3/antidote.git "$HOME/.config/zsh/.antidote"
94- fi
95-fi
45+echo "Ensuring base tools are installed."
9646
97-# Register update check cron job (every 6 hours)
98-CRON_CMD="0 */6 * * * $HOME/.config/zsh/updates.sh # dotzsh-update-check"
99-if ! crontab -l 2>/dev/null | grep -q "dotzsh/monitor_updates.sh"; then
100- (
101- crontab -l 2>/dev/null
102- echo "$CRON_CMD"
103- ) | crontab -
104- echo "Registered update check cron job"
105-fi
47+# Install basic tools on debian
48+if [ -f /etc/debian_version ]; then
49+ # Set the installer prefix
50+ installer="$prefix apt-get"
51+ install_cmd="$installer install -y"
52+
53+ # Update system
54+ echop "Detected Debian. Updating and upgrading now!"
55+ animate "$installer update -y && $installer upgrade -y"
56+ echog "โœ… System up to date!"
57+
58+ # Install build essential
59+ dpkg -s build-essential &>/dev/null ||
60+ { echo "Installing build-essential" && animate "$install_cmd build-essential" && printf "\e[1A\e[2K"; } ||
61+ { cat /tmp/last_output && echor "Failed to install build-essential" && exit 1; }
62+ echog "โœ… build-essential installed"
63+
64+# Install basic tools for arch
65+elif [ -f /etc/arch-release ]; then
66+ # Set pacman prefix
67+ installer="$prefix pacman"
68+ install_cmd="$installer -S --noconfirm"
69+
70+ # Update system
71+ echob "Arch Detected. You are elite. Updating and upgrading now!"
72+ animate "$installer -Syu"
73+ echog "โœ… System up to date!"
74+
75+ # Install base-devel
76+ pacman -Q base-devel &>/dev/null ||
77+ { echo "Installing base-devel" && animate "$installer base-devel" && printf "\e[1A\e[2K"; } ||
78+ { cat /tmp/last_output && echor "Failed to install base-devel"; }
79+ echog "โœ… base-devel installed"
10680
107-# Arch specific installations
108-if [ -f /etc/arch-release ]; then
109- echo "Arch detected"
11081 # Install paru
111- if ! command -v paru &>/dev/null; then
112- echo "Installing paru"
113- sudo pacman -S --needed base-devel
114- git clone https://aur.archlinux.org/paru.git /tmp/paru
115- (cd /tmp/paru && makepkg -si)
116- rm -rf /tmp/paru
117- fi
82+ command -v paru &>/dev/null ||
83+ { echo "Installing paru" && animate "git clone https://aur.archlinux.org/paru.git /tmp/paru &&
84+ cd /tmp/paru && makepkg -si" && printf "\e[1A\e[2K"; } ||
85+ { cat /tmp/last_output && echor "Failed to install paru"; }
86+ echog "โœ… paru installed"
11887 fi
88+
89+# Install zsh
90+command -v zsh &>/dev/null ||
91+ { echo "Installing zsh" && animate "$install_cmd zsh" && printf "\e[1A\e[2K"; } ||
92+ { cat /tmp/last_output && echor "Failed to install zsh" && exit 1; }
93+echog "โœ… zsh installed"
94+
95+# Install curl (crazy but this happens sometimes)
96+command -v curl &>/dev/null ||
97+ { echo "Installing curl" && animate "$install_cmd curl" && printf "\e[1A\e[2K"; } ||
98+ { cat /tmp/last_output && echor "Failed to install curl"; }
99+echog "โœ… curl installed"
100+
101+# Install unzip
102+command -v unzip &>/dev/null ||
103+ { echo "Installing unzip" && animate "$install_cmd unzip" && printf "\e[1A\e[2K"; } ||
104+ { cat /tmp/last_output && echor "Failed to install unzip"; }
105+echog "โœ… unzip installed"
106+
107+# Install git
108+command -v git &>/dev/null ||
109+ { echo "Installing git" && animate "$install_cmd git" && printf "\e[1A\e[2K"; } ||
110+ { cat /tmp/last_output && echor "Failed to install git"; }
111+echog "โœ… git installed"
112+
113+# Install cargo
114+[ -f ~/.cargo/env ] ||
115+ { echo "Installing cargo" && animate "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y" && printf "\e[1A\e[2K"; } ||
116+ { cat /tmp/last_output && echor "Failed to install cargo" && exit 1; }
117+echog "โœ… cargo installed"
118+. ~/.cargo/env
119+
120+# Install lsd with cargo
121+command -v lsd &>/dev/null ||
122+ { echo "Installing lsd" && animate "cargo install lsd" && printf "\e[1A\e[2K"; } ||
123+ { cat /tmp/last_output && echor "Failed to install lsd" && exit 1; }
124+echog "โœ… lsd installed"
125+
126+# Install golang
127+export PATH=$PATH:/usr/local/go/bin:/usr/local/go/bin
128+latest_go_version="$(curl -fsSL "https://go.dev/VERSION?m=text" | head -1)"
129+filename="$latest_go_version.$([[ "$(uname -m)" == "Linux" ]] && { printf "linux"; } || printf "darwin").$(uname -m).tar.gz"
130+[[ "$(go version 2>/dev/null | awk '{print $3}')" == "$latest_go_version" ]] ||
131+ { login_sudo && echo "Installing golang" && animate "curl -fsSL https://go.dev/dl/go1.26.1.linux-amd64.tar.gz | $prefix tar xvzf - -C /usr/local" && printf "\e[1A\e[2K"; } ||
132+ { cat /tmp/last_output && echor "Failed to install go" && exit 1; }
133+echog "โœ… golang installed"
134+
135+# Install lazygit with go
136+command -v lazygit &>/dev/null ||
137+ { echo "Installing lazygit" && animate "go install github.com/jesseduffield/lazygit@latest" && printf "\e[1A\e[2K"; } ||
138+ { cat /tmp/last_output && echor "Failed to install lazygit" && exit 1; }
139+echog "โœ… lazygit installed"
140+
141+# Install yazi
142+filename="yazi-$(uname -m)-$(
143+ { [[ "$(uname -s)" == "Linux" ]] && printf "unknown-linux-%s" "$(ldd --version 2>&1 | grep -qi musl && echo musl || echo gnu)"; } || printf "apple-darwin"
144+).zip"
145+[ -d /usr/local/yazi ] ||
146+ { login_sudo && echo "installing yazi" && animate "rm -rf /tmp/yazi* && $prefix rm -rf /usr/local/yazi &&
147+ curl -fsSL https://github.com/sxyazi/yazi/releases/download/v26.1.22/yazi-x86_64-unknown-linux-gnu.zip -o /tmp/yazi.zip &&
148+ unzip /tmp/yazi.zip -d /tmp && $prefix mv /tmp/yazi-x86_64-unknown-linux-gnu/ /usr/local/yazi/ && $prefix mv /usr/local/yazi/ya* /usr/local/bin" &&
149+ printf "\e[1A\e[2K"; } ||
150+ { cat /tmp/last_output && echor "Failed to install yazi" && exit 1; }
151+echog "โœ… yazi installed"
152+
153+# Create backups
154+[ -d ~/.config ] || mkdir -p ~/.config
155+[ -f ~/.zshrc ] && mv ~/.zshrc ~/.zshrc.bak && echot "Backup ~/.zshrc -> ~/.zshrc.bak"
156+[ -f ~/.zshenv ] && mv ~/.zshenv ~/.zshenv.bak && echot "Backup ~/.zshenv -> ~/.zshenv.bak"
157+[ -d ~/.config/zsh ] && rm -rf ~/.config/zsh.bak
158+
159+# Clone config repo
160+echo 'export ZDOTDIR=$HOME/.config/zsh' >~/.zshenv
161+{ echo "Cloning dotzsh" && animate "git clone https://github.com/huncholane/dotzsh ~/.config/zsh" && printf "\e[1A\e[2K"; } ||
162+ { cat /tmp/last_output && echor "Failed to clone dotzsh to ~/.config/zsh" && exit 1; }
163+export ZDOTDIR=$HOME/.config/zsh
164+echog "โœ… dotzsh installed"
165+
166+# Install antidote
167+[ -d ~/.config/zsh/.antidote ] ||
168+ { echo "Installing antidote" && animate "git clone --depth=1 https://github.com/mattmc3/antidote.git ${ZDOTDIR:-~}/.antidote" && printf "\e[1A\e[2K"; } ||
169+ { cat /tmp/last_output && echor "Failed to install antidote" && exit 1; }
170+
171+echot -e "\nRun 'exec zsh' to see the magic"
172+
173+# [ -f /etc/arch-release ] && pacman -Q base-devel &>/dev/null || sudo pacman -S base-devel || echo -e "\e[31mFailed to install base-devel" && exit 1
174+# [ -f /etc/debian_version ] && (apt update dpkg -s build-essential &>/dev/null || echo "missing build-essential")
175+
176+# command -v zsh || sudo apt install zsh || sudo dnf install zsh || sudo pacman -S zsh
+1-1precomp.sh
@@ -13,7 +13,7 @@ add_completions _rustup 'rustup completions zsh'
1313 add_completions _uv 'uv generate-shell-completion zsh'
1414
1515 # Custom PATH additions
16-export PATH="$PATH:$HOME/.local/bin:$HOME/go/bin"
16+export PATH="$PATH:$HOME/.local/bin:$HOME/go/bin:$HOME/.local/share/solana/install/active_release/bin:$HOME/.avm/bin:/usr/local/go/bin"
1717
1818 # Setup fzf env
1919 [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh