LA BRANCHE C'EST MASTER PAS MAIN F2P
Installeurs autonomes pour poser une toolchain sans root et sans gestionnaire
de paquets, dans .drops/<outil>/ à côté des scripts. Chaque <outil>.sh :
- est idempotent : s'il trouve l'exécutable, il ne fait rien ;
- écrit uniquement le chemin de l'exécutable sur stdout, tout le reste sur stderr ;
- se localise par
dirname "$0": à appeler par chemin absolu, jamais via un symlink.
Les outils qui ont besoin de variables d'environnement (rust, skopeo) renvoient un wrapper qui les embarque : rien à exporter côté appelant.
git clone <remote> ~/dropin
# activer les outils voulus : un symlink par outil, versionnable
cd ~/dropin && ln -s ../fish.sh ../ripgrep.sh ../skopeo.sh ../rust.sh autostart/
# brancher l'autostart dans le shell de login (une fois)
echo '. ~/dropin/autostart/activate.sh' >> ~/.profile # sh / bash / zsh
# ou, sous fish, dans ~/.config/fish/config.fish :
# set -gx PATH (sh -c '. ~/dropin/autostart/activate.sh && printf %s "$PATH"' | string split :)
# sans attendre le prochain login
. ~/dropin/autostart/activate.shLe premier source installe ce qui manque, les suivants ne font que lire.
Ensuite les commandes sont dans le PATH :
rg TODO src/
skopeo inspect docker://alpine
cargo new demo # le wrapper pose RUSTUP_HOME/CARGO_HOME lui-mêmeMettre à jour : supprimer le drop, le prochain source réinstalle la dernière
version (rust : rustup update). Désinstaller : supprimer le symlink dans
autostart/ et le drop. Rien n'est écrit ailleurs.
rm -rf ~/dropin/.drops/ripgrepL'autostart n'intervient pas : chaque installeur est appelé par chemin absolu et renvoie le chemin de son exécutable.
#!/bin/sh
set -eu
git clone --depth 1 <remote> "$HOME/dropin"
skopeo=$("$HOME/dropin/skopeo.sh") # télécharge le binaire, quelques secondes
trufflehog=$("$HOME/dropin/trufflehog.sh") # idem
"$skopeo" copy docker://alpine:latest "dir:$HOME/up"
"$trufflehog" filesystem "$HOME/up" --json- Entrypoint en fish :
exec "$("$HOME/dropin/fish.sh")" "$HOME/entry.fish", puis même contrat dansentry.fish:set skopeo (~/dropin/skopeo.sh). - Un outil qui en appelle un autre par son nom (
git,cargo…) :PATH="$PATH:$(dirname "$cargo")", sans sourcer l'autostart.
go-3rd.sh, rust-3rd.sh et node-3rd.sh prennent le nom du binaire en argument
et le trouvent dans go-bins.txt, rust-bins.txt, npm-bins.txt (<binaire> <source>
par ligne). Un binaire absent du fichier est une erreur, même s'il est déjà installé.
httpx=$(~/dropin/go-3rd.sh httpx) # go install, dans .drops/go-3rd/bin
websocat=$(~/dropin/rust-3rd.sh websocat) # cargo install --root, dans .drops/rust-3rd/bin
claude=$(~/dropin/node-3rd.sh claude) # npm install -g, dans .drops/node/binPour l'humain, le nom du symlink dans autostart/ est passé en argument :
ln -s ../go-3rd.sh ~/dropin/autostart/httpx.shLes shims npm sont en général des scripts #!/usr/bin/env node : ils ont besoin de
node dans le PATH, ce que activate.sh garantit ; dans un script, préfixer PATH avec
$(dirname "$node"). Le paquet claude-code, lui, fournit un binaire natif.