From 368dea1bbd027b243d2791a416b64707a71a64db Mon Sep 17 00:00:00 2001 From: Aditya Gupta Date: Wed, 24 Jun 2026 22:04:30 +0530 Subject: [PATCH] refactor: Update installer scripts to make use of rollback hooks and exec tracking --- installers/install_agy.sh | 2 ++ installers/install_asciicinema.sh | 2 ++ installers/install_bat.sh | 1 + installers/install_node.sh | 2 ++ installers/install_nvim.sh | 5 +++++ installers/install_pnpm.sh | 1 + installers/install_rust.sh | 2 ++ installers/install_starship.sh | 1 + installers/install_uv.sh | 2 ++ installers/install_yay.sh | 1 + installers/install_yazi.sh | 2 ++ installers/install_zoxide.sh | 1 + 12 files changed, 22 insertions(+) diff --git a/installers/install_agy.sh b/installers/install_agy.sh index b880768..1ba2483 100644 --- a/installers/install_agy.sh +++ b/installers/install_agy.sh @@ -130,6 +130,8 @@ install_agy() { cp "$extracted_binary" "$BINARY_PATH" chmod +x "$BINARY_PATH" rm -rf "$staging_dir" + + track_file "$BINARY_PATH" log_success "Antigravity CLI successfully installed to $BINARY_PATH." } diff --git a/installers/install_asciicinema.sh b/installers/install_asciicinema.sh index e409a80..e0448c6 100644 --- a/installers/install_asciicinema.sh +++ b/installers/install_asciicinema.sh @@ -81,10 +81,12 @@ install_asciicinema() { log_info "Installing asciinema to /usr/local/bin..." sudo cp "$TMP_DIR/asciinema" /usr/local/bin/asciinema sudo chmod +x /usr/local/bin/asciinema + track_file "/usr/local/bin/asciinema" # Create compatibility symlink matching the installer name spelling log_info "Creating compatibility symlink for asciicinema..." sudo ln -sf /usr/local/bin/asciinema /usr/local/bin/asciicinema + track_file "/usr/local/bin/asciicinema" log_success "asciinema ${latest_tag} installed." } diff --git a/installers/install_bat.sh b/installers/install_bat.sh index 5d65076..0cb14a3 100644 --- a/installers/install_bat.sh +++ b/installers/install_bat.sh @@ -67,6 +67,7 @@ install_bat() { log_info "Installing Bat package..." sudo apt install -y "$TMP_DIR/bat.deb" + add_rollback_cmd "sudo apt remove -y bat" else log_error "Unsupported distribution." diff --git a/installers/install_node.sh b/installers/install_node.sh index c3f1883..0ec7705 100644 --- a/installers/install_node.sh +++ b/installers/install_node.sh @@ -51,6 +51,8 @@ install_nvm() { log_info "Extracting NVM archive directly to $HOME/.nvm (stripping versioned subfolder to keep config generic)..." mkdir -p "$HOME/.nvm" tar -xzf "$TMP_DIR/nvm.tar.gz" -C "$HOME/.nvm" --strip-components=1 + + track_dir "$HOME/.nvm" log_success "NVM source files successfully extracted to $HOME/.nvm." } diff --git a/installers/install_nvim.sh b/installers/install_nvim.sh index abbc3c7..5dd080a 100644 --- a/installers/install_nvim.sh +++ b/installers/install_nvim.sh @@ -47,6 +47,7 @@ install_packages() { log_info "Installing tree-sitter-cli globally..." sudo npm install -g tree-sitter-cli + add_rollback_cmd "sudo npm uninstall -g tree-sitter-cli" } install_nvim() { @@ -86,6 +87,9 @@ install_nvim() { sudo mv "$TMP_DIR/nvim-${nvim_arch}" "$NVIM_INSTALL_DIR" sudo ln -sf "$NVIM_INSTALL_DIR/bin/nvim" /usr/local/bin/nvim + + track_dir "$NVIM_INSTALL_DIR" + track_file "/usr/local/bin/nvim" log_success "Installed:" nvim --version | head -n1 @@ -102,6 +106,7 @@ install_config() { log_info "Cloning configuration to $NVIM_CONFIG_DIR..." git clone "$NVIM_CONFIG_REPO" "$NVIM_CONFIG_DIR" + track_dir "$NVIM_CONFIG_DIR" log_success "Configuration installed." } diff --git a/installers/install_pnpm.sh b/installers/install_pnpm.sh index 9c2ebbf..dc5220d 100644 --- a/installers/install_pnpm.sh +++ b/installers/install_pnpm.sh @@ -173,6 +173,7 @@ install_pnpm() { } fi + track_dir "$HOME/.local/share/pnpm" log_success "pnpm v${version} installed successfully!" } diff --git a/installers/install_rust.sh b/installers/install_rust.sh index dac02bd..5b0d74b 100644 --- a/installers/install_rust.sh +++ b/installers/install_rust.sh @@ -85,6 +85,8 @@ install_rust() { # -y: skip prompts (we already confirmed) # --no-modify-path: let bootstrap manage the shell paths "$dest" -y --no-modify-path + + add_rollback_cmd "rustup self uninstall -y" } configure_shell() { diff --git a/installers/install_starship.sh b/installers/install_starship.sh index dba8b3e..0377684 100644 --- a/installers/install_starship.sh +++ b/installers/install_starship.sh @@ -71,6 +71,7 @@ install_starship() { log_info "Installing Starship to $target_dir/starship..." cp "$TMP_DIR/starship" "$target_dir/starship" chmod +x "$target_dir/starship" + track_file "$target_dir/starship" } configure_shell() { diff --git a/installers/install_uv.sh b/installers/install_uv.sh index ccf6fc6..e76c48b 100644 --- a/installers/install_uv.sh +++ b/installers/install_uv.sh @@ -81,6 +81,8 @@ install_uv() { cp "$TMP_DIR/uv" "$target_dir/uv" cp "$TMP_DIR/uvx" "$target_dir/uvx" chmod +x "$target_dir/uv" "$target_dir/uvx" + track_file "$target_dir/uv" + track_file "$target_dir/uvx" } configure_shell() { diff --git a/installers/install_yay.sh b/installers/install_yay.sh index 2df109a..aaa5a8d 100755 --- a/installers/install_yay.sh +++ b/installers/install_yay.sh @@ -61,6 +61,7 @@ install_yay() { log_info "Building and installing yay..." makepkg -si + add_rollback_cmd "sudo pacman -R --noconfirm yay" cd "$orig_dir" log_info "Cleaning up installer directory..." diff --git a/installers/install_yazi.sh b/installers/install_yazi.sh index 0121919..9bebe0a 100755 --- a/installers/install_yazi.sh +++ b/installers/install_yazi.sh @@ -80,6 +80,7 @@ install_yazi() { log_info "Installing Yazi package..." sudo apt install -y "$TMP_DIR/yazi.deb" + add_rollback_cmd "sudo apt remove -y yazi" log_info "Installing dependencies subsequently..." pkg_install ffmpeg jq poppler-utils fd-find ripgrep fzf zoxide resvg imagemagick 7zip || \ @@ -101,6 +102,7 @@ install_yazi() { log_info "Installing Yazi (without weak dependencies first)..." sudo dnf install -y yazi --setopt=install_weak_deps=False + add_rollback_cmd "sudo dnf remove -y yazi" log_info "Installing weak dependencies subsequently..." pkg_install yazi diff --git a/installers/install_zoxide.sh b/installers/install_zoxide.sh index 0c059db..110baa3 100755 --- a/installers/install_zoxide.sh +++ b/installers/install_zoxide.sh @@ -40,6 +40,7 @@ install_zoxide() { log_info "Downloading and running the official zoxide installer..." curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh + track_file "$HOME/.local/bin/zoxide" } configure_shell() {