Add new post
Tim Izzo tim@5ika.ch
Fri, 27 Mar 2026 10:00:53 +0100
1 files changed,
209 insertions(+),
0 deletions(-)
A
content/posts/petits-outils-persos.md
@@ -0,0 +1,209 @@
+--- +Title: Petits outils persos +Date: 2026-03-27 +--- + +En passant sur Arch Linux il y a quelques mois, j'ai voulu aller plus loin en terme d'efficacité sur mon ordi en poussant plus en profondeur mes connaissances de la ligne de commande et en développant mes propres petits outils pour réaliser les tâches courantes. J'ai aujourd'hui un petit panel de programmes qui peuvent être intéressants à d'autres. + +Ces programmes sont généralement fait en Bash car cela évite d'avoir des choses à compiler et assure un fonctionnement sur quasiment tous les systèmes, notamment les serveurs distants sur lesquels je me connecte. La plupart utilise les outils suivants: +- [gum](https://github.com/charmbracelet/gum): un outil pour développer des scripts plus intéractifs et plus jolis facilement +- [jq](https://jqlang.org/): un outil pour manipuler du JSON, très pratique et bien connu +- [ripgrep](https://github.com/BurntSushi/ripgrep): un `grep` amélioré, plus moderne +- [glow](https://github.com/charmbracelet/glow): Un *render* de markdown dans le terminal + +J'essaye aussi d'utiliser un maximum les choses déjà présentes dans Bash et je passe beaucoupp de temps à lire les docs pour voir s'il n'y a pas une sous-sous-option qui permet de faire ce que je veux sans trop d'effort. C'est aussi l'occasion de pratiquer l'édition de code/script dans le terminal directement. J'ai d'abord utilisé vim, puis neovim pour finalement passer à [helix](https://helix-editor.com/) récemment. + +Voilà une liste de mes outils les plus utiles: + +### `brain` + +Ouvre mon dossier de notes (*second brain*) avec mon éditeur par défaut. + +```bash +#!/bin/bash + +BRAIN_DIR=${BRAIN_DIR:-"$HOME/5ika/brain/"} +cd $BRAIN_DIR +$EDITOR . +``` + +### `bt` (brain tasks) + +Liste mes tâches à faire dans mon dossier de note (*second brain*). + +```bash +#!/bin/bash + +BRAIN_DIR=${BRAIN_DIR:-"$HOME/5ika/brain/"} +rg "\- \[ \]" $BRAIN_DIR +``` + +### `jrnl` (journal) + +Dans le dossier *journals* de mon second brain, crée à partir d'un template (ou ouvre si existant) un fichier Markdown nommé selon la date du jour. +Cela me permet une prise de note rapide, contextualisé par jour. + +```bash +#!/bin/bash + +BRAIN_DIR=${BRAIN_DIR:-"$HOME/5ika/brain/"} +TEMPLATE_FILEPATH="$BRAIN_DIR/templates/jrnl.md" +TODAY_DATE=$(date -I) +TODAY_FILEPATH="${BRAIN_DIR}journals/${TODAY_DATE}.md" + +if [ ! -f "$TODAY_FILEPATH" ]; then + cp "$TEMPLATE_FILEPATH" "$TODAY_FILEPATH" + sed -i s/%DATE%/$TODAY_DATE/g "$TODAY_FILEPATH" + echo "Nouvelle entrée créée pour le ${TODAY_DATE}" + + if [ -f "$BRAIN_DIR/CURRENT.md" ]; then + echo -e "## Projets en cours\n" >>$TODAY_FILEPATH + cat "$BRAIN_DIR/CURRENT.md" >>$TODAY_FILEPATH + echo -e "\n" >>$TODAY_FILEPATH + fi +fi + +$EDITOR "$TODAY_FILEPATH" +``` + +### `scratch` + +Crée un fichier Markdown temporaire et l'ouvre avec mon éditeur par défaut. +Cela me permet de prendre rapidement des notes quand je suis en réunion sans avoir à me soucier où les stocker. + +```bash +#!/usr/bin/env bash + +file="$(mktemp --suffix=.md)" +echo "Editing $file" +exec "$EDITOR" "$file" +``` + +### `music` + +Utilise [rmpc](https://rmpc.mierak.dev/) afin de communiquer avec le serveur MPD sur mon système pour créer et lancer une playlist aléatoire de chansons sur mon ordi: + +```bash +#!/bin/bash + +rmpc clear +rmpc addrandom song 50 +rmpc consume on +rmpc play +``` + +### `radio` + +Inspiré par une découverte sur le Web (que je n'ai pas noté), me permet de choisir parmi une liste de radios et d'en lancer une avec `cvlc`. + +```bash +#!/bin/bash + +ITEMS=( + "lofi lofi@https://live.hunter.fm/lofi_low" + "musicforprogrammer MusicForProgrammer@https://datashat.net/music_for_programming_76-material_object.mp3" + "vertical Vertical@https://verticalradio.ice.infomaniak.ch/verticalradio-128.mp3" + "serenity Paradise Serenity@https://stream.radioparadise.com/serenity?ngsw-bypass=true" + "rock Paradise RockIt@http://stream.radioparadise.com/rock-192" + "mellow Paradise Mellow@http://stream.radioparadise.com/mellow-192" + "global Paradise Globalized@http://stream.radioparadise.com/global-192" + "paradise Paradise Main@http://stream.radioparadise.com/ogg-192m" +) + +if [ ! -x "$(command -v gum)" ]; then + echo "gum needs to be installed. See https://github.com/charmbracelet/gum." + exit 1 +fi + +SELECTED_PATH=$(gum choose --label-delimiter=" " "${ITEMS[@]}") +readarray -d "@" -t PARTS <<<"$SELECTED_PATH" + +LABEL=${PARTS[0]} +URL=${PARTS[1]} + +cvlc --meta-artist="Radio" --meta-title="$LABEL" $URL +``` + +> J'ai également une alternative à ce script, `radiosonos`, qui me permet de lancer sur mes enceintes Sonos plutôt qu'avec VLC. + +### `bookmarks` + +> Celui-ci, je l'ai récupéré et adapté à partir de ce dépôt: https://github.com/soulim/bookmarks.txt. + +Un script qui permet de lister ou ajouter un bookmark dans un fichier texte simple. Un gestionnaire de marque-pages minimalistes. + +```bash +#!/usr/bin/env sh + +# bookmarks [URL] [title] +# +# bookmarks prints content of conventional `bookmarks.txt` files. +# See https://github.com/soulim/bookmarks.txt +# +# Usage: +# +# # Print content of `bookmarks.txt` files stored in $HOME and $PWD. +# bookmarks +# +# # Add a new URL to `bookmarks.txt` file in $PWD. +# bookmarks https://www.example.com + +set -o errexit # Always exit on errors. +set -o nounset # Treat unset variables as errors. + +url=${1:-} +title=${2:-} + +if [ -n "$url" ]; then + echo "$url $title" >>bookmarks.txt +else + inbrain="$HOME/5ika/brain/bookmarks.txt" + cat "$inbrain" 2>/dev/null | fzf | cut -d ' ' -f 1 | xargs xdg-open +fi +``` + +### `swall` + +Utilise `hyprctl` (fonctionne donc uniquement avec [Hyprland](https://hypr.land/)) pour changer le fond d'écran avec une image aléatoire prise dans le dossier *Images/wallpapers*. +Ce script est lancé automatiquement au démarrage de mon ordi afin d'avoir un fond différent d'un jour à l'autre. + +```bash +#!/bin/bash + +WALLPAPER_DIRECTORY=~/Images/wallpapers/ +WALLPAPER=$(find "$WALLPAPER_DIRECTORY" -type f | shuf -n 1) +hyprctl hyprpaper preload "$WALLPAPER" +hyprctl hyprpaper wallpaper "eDP-1,$WALLPAPER" +sleep 1 +hyprctl hyprpaper unload unused +``` + +`eDP-1` correspond à l'ID de mon écran principal. Pour lister les IDs disponibles: `hyprctl monitors`. + +### `tbore` + +Utilise [bore](https://github.com/ekzhang/bore) pour créer un tunnel entre mon serveur VPS et mon ordi. +Cela me permet d'utiliser mon serveur public comme proxy pour qu'un serveur sur mon ordi puisse être accessible depuis le Web. +C'est très utile pour développer un programme qui a besoin de recevoir des webhooks depuis un service tiers par exemple. + +```bash +#!/bin/bash + +hyprctl dispatch exec kitty -- ssh -t ubuntu@5ika.ch scripts/bore server +sleep 3 +bore local ${1:-5173} --to proxy.5ika.ch -p 6666 +``` + +Ce script est assez dépendant de mon setup (Hyprland, kitty) et nécessite que *bore* soit installé sur le serveur distant également. Je le mets à titre d'exemple pour inspirer. + +--- + +Cette liste montre uniquement les outils qui me semblent utiles à d'autres et/ou qui peuvent être facilement adapter sur d'autres systèmes. +J'ai également d'autres scripts plus spécifiques, trop gros ou trop bruts pour être montrés ici. +Par exemple: +- Un script qui ouvre plusieurs terminaux avec différents programmes TUI pour surveiller des activités (mails, activités sur GitLab, agenda de la journée, notes du jour,...) +- Un sous-script `git` pour créer des commit messages qui respectent le standard *conventional commit* +- Un raccourci pour me connecter à mon réseau VPN Wireguard +- Un script qui utilise `logcli` et `jq` pour afficher les logs de différentes apps dans le même terminal + +J'en discute volontiers si ça intéresse.