From df7c921bc66f329f0e4fda70a54daccb44438729 Mon Sep 17 00:00:00 2001 From: rootiest Date: Mon, 18 May 2026 22:18:57 -0400 Subject: [PATCH] feat(deps): add cargo as a managed dependency with rustup installer cargo is now the second entry in the catalog (after fish) so it is installed before any Rust tool that depends on it. Install preference: rustup installer (curl | sh) first, system PM as fallback. Update runs rustup update when rustup is available. The rustup-installer special is evaluated before the system PM in the method list so it is always option 1 / the default for cargo. --- functions/_fish_deps_catalog.fish | 18 ++++++++++-------- functions/_fish_deps_install.fish | 16 ++++++++++++---- functions/_fish_deps_update.fish | 11 +++++++++++ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/functions/_fish_deps_catalog.fish b/functions/_fish_deps_catalog.fish index 457373f..5667f11 100644 --- a/functions/_fish_deps_catalog.fish +++ b/functions/_fish_deps_catalog.fish @@ -2,38 +2,40 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # Populates parallel arrays describing every managed dependency. -# Callers must invoke this function before accessing _fdc_* variables. +# Callers must invoke this function before accessing _fdc_* arrays. # # Array layout (same index across all sets): # _fdc_bins — binary name (what `type -q` checks) # _fdc_tiers — req | int | rec # _fdc_cargo — cargo crate name, or "" if not on crates.io # _fdc_pm — system PM package name, or "" if not in repos -# _fdc_special — special install key: fisher-bootstrap | fzf-update | -# pipx | curl-installer | "" (none) +# _fdc_special — special install key: rustup-installer | fisher-bootstrap | +# fzf-update | paru-build | pipx | curl-installer | "" (none) +# +# cargo is listed second so it is installed before Rust tools that depend on it. function _fish_deps_catalog set -g _fdc_bins \ - fish fisher starship fzf zoxide direnv paru \ + fish cargo fisher starship fzf zoxide direnv paru \ wakatime tailscale \ eza lsd bat btop dust duf prettyping most rg lazygit lazydocker trash kitty wezterm set -g _fdc_tiers \ - req req req req req req rec \ + req req req req req req req rec \ int int \ rec rec rec rec rec rec rec rec rec rec rec rec rec rec set -g _fdc_cargo \ - "" "" starship "" zoxide "" "" \ + "" "" "" starship "" zoxide "" "" \ "" "" \ eza lsd bat "" du-dust "" "" "" ripgrep "" "" trash-cli "" "" set -g _fdc_pm \ - fish "" starship fzf zoxide direnv "" \ + fish cargo "" starship fzf zoxide direnv "" \ wakatime tailscale \ eza lsd bat btop dust duf prettyping most ripgrep lazygit lazydocker trash kitty wezterm set -g _fdc_special \ - "" fisher-bootstrap curl-installer fzf-update "" "" paru-build \ + "" rustup-installer fisher-bootstrap curl-installer fzf-update "" "" paru-build \ pipx "" \ "" "" "" "" "" "" "" "" "" "" "" "" "" "" end diff --git a/functions/_fish_deps_install.fish b/functions/_fish_deps_install.fish index a3bfe2e..c3e07c7 100644 --- a/functions/_fish_deps_install.fish +++ b/functions/_fish_deps_install.fish @@ -20,25 +20,31 @@ function _fish_deps_install set -l methods set -l method_labels - # Cargo first — preferred for Rust tools; gets the latest crate version + # Cargo — preferred for Rust tools; gets the latest crate version if test -n "$cargo_crate" if type -q cargo set -a methods cargo set -a method_labels "cargo ($cargo_crate)" else set_color brblack - echo " note: cargo not found — install rustup for the latest $bin" + echo " note: cargo not found — install cargo first for the latest $bin" set_color normal end end - # System PM — after cargo so cargo is always the default when available + # rustup installer — listed before system PM so it is the default for cargo itself + if test "$special" = rustup-installer + set -a methods special-rustup + set -a method_labels "rustup installer (curl | sh)" + end + + # System PM — after cargo/rustup so those are always the default when available if test -n "$pm_pkg"; and test -n "$pm" set -a methods pm set -a method_labels "$pm ($pm_pkg)" end - # Special methods + # Remaining special methods switch $special case fzf-update set -a methods special-fzf @@ -108,6 +114,8 @@ function _fish_deps_install cargo install $cargo_crate case pm _fish_deps_pm_install $pm_pkg + case special-rustup + curl https://sh.rustup.rs -sSf | sh case special-fzf fzf-update case special-fisher diff --git a/functions/_fish_deps_update.fish b/functions/_fish_deps_update.fish index 189143b..35d2b14 100644 --- a/functions/_fish_deps_update.fish +++ b/functions/_fish_deps_update.fish @@ -28,6 +28,17 @@ function _fish_deps_update 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..."