Skip to content

Latest commit

 

History

History
91 lines (66 loc) · 3.29 KB

File metadata and controls

91 lines (66 loc) · 3.29 KB

dropin

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.

Usage humain

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.sh

Le 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ême

Mettre à 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/ripgrep

Usage dans un script (VM éphémère)

L'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 dans entry.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.

Outils tiers via une toolchain

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/bin

Pour l'humain, le nom du symlink dans autostart/ est passé en argument :

ln -s ../go-3rd.sh ~/dropin/autostart/httpx.sh

Les 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.