Files
fish-config/functions/_fish_deps_update.fish
T
rootiest 9e7539d863 feat(deps): support upgrading fish itself via cargo install fish
Fish 4.x is a Rust rewrite published to crates.io as 'fish'. Added the
crate to the catalog so fish-deps update will run cargo install --force
fish to upgrade it. A yellow restart reminder is printed after the
upgrade since the new binary won't take effect until the shell restarts.

README warning updated to mention cargo install fish as the upgrade
path for users stuck on Fish 3.x.
2026-05-18 22:23:10 -04:00

101 lines
2.8 KiB
Fish

# Copyright (C) 2026 Rootiest
# SPDX-License-Identifier: AGPL-3.0-or-later
# Update all installed deps using their known install method.
# Priority: cargo > system PM > special (fzf-update, fisher, pipx).
function _fish_deps_update
_fish_deps_catalog
set -l pm (_fish_deps_detect_pm)
set -l updated_any 0
# Fisher plugins — always update if fisher is present
if type -q fisher
echo "Updating fisher plugins..."
fisher update
set updated_any 1
end
set -l i 1
for bin in $_fdc_bins
# Skip fisher itself (handled above) and tools that aren't installed
if test "$bin" = fisher; or not type -q $bin
set i (math $i + 1)
continue
end
set -l cargo_crate $_fdc_cargo[$i]
set -l pm_pkg $_fdc_pm[$i]
set -l special $_fdc_special[$i]
# cargo: update via rustup
if test "$special" = rustup-installer
if type -q rustup
echo "Updating $bin..."
rustup update
set updated_any 1
end
set i (math $i + 1)
continue
end
# fzf: always use fzf-update (git-based)
if test "$special" = fzf-update
echo "Updating $bin..."
fzf-update
set updated_any 1
set i (math $i + 1)
continue
end
# pipx tools
if test "$special" = pipx
if type -q pipx
echo "Updating $bin..."
pipx upgrade $bin
set updated_any 1
end
set i (math $i + 1)
continue
end
# curl-installer tools (starship etc.): re-run install script, which upgrades in place
if test "$special" = curl-installer
if test "$bin" = starship
echo "Updating $bin..."
curl -sS https://starship.rs/install.sh | sh -- --yes
set updated_any 1
end
set i (math $i + 1)
continue
end
# Cargo: prefer for Rust tools
if test -n "$cargo_crate"; and type -q cargo
echo "Updating $bin..."
cargo install --force $cargo_crate
set updated_any 1
if test "$bin" = fish
set_color yellow
echo " Fish updated — restart your shell to use the new version."
set_color normal
end
set i (math $i + 1)
continue
end
# System PM fallback
if test -n "$pm_pkg"; and test -n "$pm"
echo "Updating $bin..."
_fish_deps_pm_upgrade $pm_pkg
set updated_any 1
end
set i (math $i + 1)
end
if test $updated_any -eq 0
echo "Nothing to update."
end
end