Projets personnels

Custom menu est traduit dans cinq langues dont l'anglais, le français, l'allemand, le tchèque et le chinoix simplifié. Une demande m'a été faite pour la traduire également en néerlandais mais rien n'a été réalisé pour le moment.

Pour moi, le plus important est de permettre aux contributeurs⋅trices de rejoindre facilement le projet sans se poser la question de code source, de fork ou de pull request. C'est pourquoi j'ai décidé d'utiliser Weblate, une application web dédiée à la traduction. Je remercie chaudement Codeberg qui partage son instance et qui devient la plateforme de traduction officielle de Custom menu.

Après s'être créé un compte, tout se déroule sur une interface web simplifiée. Les chaines à traduire et le projet sont mis à jour automatiquement et les traducteurs⋅tices peuvent visualiser et corriger les données incomplètes et/ou incohérentes. De nouvelles langues seront ajoutées dès lors qu'on en fait la demande.

je suis très heureux d'avoir migré les traductions sur Weblate et j'ai bon espoir de voir de nouvelles langues apparaître 🙂

Si vous désirez contribuer, tout se passe ici !

Weblate Custom Menu


Cette semaine, j'ai publié la version 3.0 de Custom Menu. Cette version devient compatible avec Nextcloud 25.
Pour rappel, Custom Menu est une application qu'on installe dans Nextcloud. Elle permet de corriger un manque cruel de mise en page dans le menu de navigation de Nextcloud. L'application permet de paramétrer 4 modes d'affichage du menu avec, à ce jour, une 40ène de paramètres.

Nextcloud 25 inclut un nombre important de mises à jour et intègre de grandes modifications techniques qui ont impacté le fonctionnement de Custom Menu. Par conséquent, cette version 3 ne supporte que Nextcloud 25 et casse la compatibilité avec AppOrder que je vais certainement réimplémenter. Cependant, cela m'a permis de faire du ménage et d'améliorer des choses !

Pour terminer, Custom Menu a franchit la barre des 345K téléchargements et je n'en suis pas peu fiers 😎

Nextcloud 25 avec Custom Menu

Je viens de publier le code source d'un nouveau projet : Wireguard GUI.

Pour rappel, Wireguard permet de réaliser des VPN rapidement et assez simplement. Il est multiplateforme et très robuste.

Wireguard GUI est quant à lui un logiciel écrit en Go qui pemet de gérer les connexions existantes de Wireguard depuis une application graphique. L'idée derrière cet utilitaire est de faciliter la modification des fichiers de configuration et de gérer le démarrage des interfaces. Wireguard GUI est destiné à Linux.

C'est un projet libre et il vous pouvez télécharger une version compilée depuis la page des releases. Toutes les informations techniques sont disponibles sur le dépot du projet.

Wireguard GUI


Je suis un fervent utilisateur de i3wm et ça dure depuis des années ! Grâce à i3blocks, j'ai pu développer mes propres blocs initialement écrits en PHP, mon langage de prédilection. Dans un but d'apprentissage mais aussi pour gagner de préciseuses ressources (CPU/mémoire/temps d'exécution), j'ai entrepris une refonte en Go.

Ces blocs permettent de récupérer les adresses IP des interfaces réseau, son IP publique, d'activer et désactiver des connexions VPN Wireguard, d'afficher l'usage des disques, créer des lanceurs d'applications, afficher le volume du son et ce qui est joué sur Spotify, générer une barre de tâches, des indicateurs pour RSS et Atom et des messages quand des processus sont détectés.

Toutes la documentation et les liens de téléchargement sont disponibles dans le dépot du projet. Voici un aperçu des blocs en fonctionnement :

i3-blocks-go


Ces dernières semaines, j'ai réalisé plusieurs Pull Requests sur des projets écrits en Go. J'ai travaillé sur une fonctionnalité qui permet d'ajouter des informations dans le registre de paquet de Gitea, j'ai corrigé un bug sur l'outil d'intégration continue Woodpecker et j'ai proposé une fonctionnalité pour Codeberg/pages-server que j'utilise pour héberger des pages statiques. Ces contributions étaient mes premiers pas avec Go et j'ai vraiment apprécié ce langage.

Pour en apprendre un peu plus, j'ai décidé de réécrire un projet initialement en PHP. Le use case est très personnel, mais il peut sans doute plaire à d'autres personnes. Il s'agit d'un outil client/server en ligne de commande pour servir des fichiers vidéos distants.

Le projet s'appelle Mugo et les sources sont libres ! Je fourni un unique binaire qui permet de lancer le serveur et le client.

Côté serveur, il suffit de définir quel est le répertoire où se trouvent les vidéos, sur quel port écouter et l'adresse publique du serveur web qui sera démarré (API). Coté client, on définit l'adresse du serveur web (API) et éventuellement les filtres à appliquer.

Une fois le serveur démarré, le client peut s'y connecter et afficher les vidéos disponibles. Les vidéos pourront être sélectionnées interactivement avec leur numéro ou en spécifiant une plage.

Pour démarrer le serveur, la commande est simple : mugo serve. Le répertoire courant sera servi par défaut et il écoutera sur le port 4000. Il est possible de spécifier l'adresse publique du serveur avec l'argument --api-url (si reverse proxy par exemple).
Dans mon cas, l'API exposée par le serveur est accessible via un frontend Apache2. L'adresse du proxy est sous la forme https://videos.example.com. Mes fichiers sont stockés dans le répertoire /srv/videos (sous répertoires inclus). Voilà comment je lance le serveur :

$ mugo serve -d /srv/videos -u https://videos.example.com

Je peux maintenant accéder à l'API via https://videos.example.com/api/list.

Côté client, je peux afficher la liste des vidéos comme suit. Le résultat de chacunes de ces commandes sera une liste de vidéos avec un prompt interactif.

# Lire les fichiers (mpv)
$ mugo play -u https://videos.example.com

# Télécharger les fichiers (wget)
$ mugo download -u https://videos.example.com
$ mugo download -d "$HOME/Videos" -u https://videos.example.com

# Afficher que les fichiers qui contiennent "batman"
$ mugo play -u https://videos.example.com -n batman
# …et les ordonner par nom
$ mugo play -u https://videos.example.com -n batman -o name

Toutes les infos sur le projet son dispos sur Gitnet 🙂