- stinkpot enregistre l’historique des commandes Bash dans SQLite pour le gérer indépendamment des sessions et le retrouver rapidement via une TUI de recherche
- Il reprend uniquement les fonctions nécessaires d’Atuin — en retirant le serveur de synchronisation, l’IA, le gestionnaire de dotfiles et de scripts, ainsi que le stockage KV — et les implémente en environ 400 lignes de Go
- L’historique Bash existant peut être importé avec
stinkpot import, et en appuyant surCtrl+R, la TUI de recherche inverse s’ouvre - Sur NixOS, un module home-manager est fourni ; dans les autres environnements, l’initialisation se fait dans
.bashrcaveceval "$(stinkpot init)" - La base de données est stockée dans
~/.local/share/stinkpotet, si elle est corrompue après une mise à niveau, il est possible de la supprimer puis de réimporter l’historique
Isoler uniquement les fonctions nécessaires d’Atuin
- stinkpot est né de l’expérience d’un utilisateur d’Atuin qui n’avait besoin que d’une gestion de l’historique indépendante des sessions et d’une TUI de recherche
- Il n’inclut ni serveur de synchronisation, ni Atuin AI, ni gestionnaire de dotfiles, ni gestionnaire de scripts, ni stockage KV
- Les réglages et commandes d’exécution variant fortement d’une machine à l’autre, la fonction de synchronisation n’était pas utilisée non plus
- Le projet est écrit en environ 400 lignes de Go, et la répartition des langages du dépôt est de 82,5 % Go et 17,5 % Nix
- Son nom vient du
stinkpot, une petite espèce de tortue - Pour accélérer la recherche inverse, le plan d’exécution SQLite utilise un index couvrant (covering index) au lieu d’un B-tree temporaire pour le tri
Installation et recherche dans l’historique
- Depuis les sources, la compilation se fait avec la commande suivante
go build -o stinkpot .
- Les utilisateurs de NixOS avec home-manager peuvent importer le module fourni
homeManagerModules.default - Dans les autres environnements, ajoutez la commande d’initialisation suivante à
.bashrc
eval "$(stinkpot init)"
- L’historique Bash existant peut être importé avec la commande suivante
stinkpot import
- Dans le shell, appuyer sur
Ctrl+Rouvre la TUI de recherche- Déplacement avec
↑et↓, puis sélection avecTabouEnter - Après la sélection, appuyer de nouveau sur
Enterexécute la commande Escpermet d’annuler
- Déplacement avec
- La base de données de l’historique est stockée dans
~/.local/share/stinkpot- Si la base est endommagée après une mise à niveau, supprimez le fichier puis relancez
stinkpot import
- Si la base est endommagée après une mise à niveau, supprimez le fichier puis relancez
1 commentaires
Avis sur Lobste.rs
?par erreur dans le prompt, et quand Atuin m’a demandé si je voulais activer le mode IA, j’ai réalisé à quel point il était devenu lourdNon merci. Grâce à cette présentation, je suis passé à stinkpot
J’aime particulièrement le fait qu’il produise un binaire statique minimal et simple en 400 lignes de Go. Go est globalement un excellent langage, et je compte aussi essayer stinkpot
J’ai utilisé hstr pendant environ 15 ans et je suis récemment en train de passer à fzf. J’aime beaucoup SQLite en soi, mais je ne comprends pas pourquoi il serait nécessaire pour cet usage
Le fichier d’historique par défaut n’est pas structuré, mais SQLite permet d’enregistrer des données comme le code de sortie et l’heure de fin, et d’effectuer rapidement des traitements comme la déduplication à l’insertion ou la mise à jour de l’heure d’exécution lorsqu’une même commande est relancée
En théorie, on peut reconstituer péniblement le contexte à partir de l’historique des commandes, mais pouvoir consulter rapidement l’historique shell par répertoire de projet me semblerait assez utile
Il a quand même l’avantage de bien fonctionner, mais il est très possible que je ne l’aie pas mis à jour depuis longtemps
cwd. Le fait de pouvoir utiliser le répertoire comme critère pour l’historique des commandes est la seule raison pour laquelle j’utilise AtuinAprès un
cddans un projet, je peux reprendre exactement là où je m’étais arrêté, ce qui est particulièrement utile pour relancer de longues commandes avec beaucoup de paramètrescwddes commandes exécutées après l’installation de stinkpot sera enregistré, car lebash_historypar défaut ne contient pas cette informationSi cela te convient, j’aimerais ajouter une licence publique puis l’intégrer à experimental oils readline. Une fois le widget dynamique terminé, l’historique des commandes fait partie des TODO les plus prioritaires
C’est rare, mais il arrive de devoir supprimer quelques lignes de l’historique shell, et avec l’approche classique on pouvait ouvrir directement
bash_historyet effacer les lignes concernées. Je me demande si stinkpot propose une commande de suppression d’historiqueÀ part ce cas d’usage un peu particulier, le projet lui-même a l’air assez intéressant