Une application de recherche type Spotlight pour Linux, construite avec Electron. Finder permet de rechercher et lancer rapidement des applications, fichiers, et effectuer des calculs, le tout avec un simple raccourci clavier.
- Recherche instantanée dans toutes les applications installées
- Support des applications système, Snap et Flatpak
- Icônes natives des applications
- Indexation du répertoire HOME (profondeur: 4 niveaux)
- Icônes personnalisées par type de fichier
- Preview des images directement dans les résultats
- Support de plus de 40 types de fichiers
- Détection automatique des expressions mathématiques
- Support des opérations:
+,-,*,/,%,^(puissance) - Support des parenthèses pour l'ordre des opérations
- Copie automatique du résultat dans le presse-papier
- Fallback automatique vers Google si aucun résultat local
- Ouverture dans le navigateur par défaut
.: Rechercher uniquement les applications (ex:.firefox)?: Rechercher uniquement les fichiers et dossiers (ex:?document)??: Recherche directe sur Google (ex:??recette de crêpes)>: Exécuter une commande shell (ex:>ls -la)to: Conversions d'unités et devises (ex:10$ to eur,100m to ft)
- Stockage persistant des 5 dernières recherches
- Clic pour relancer directement l'application/fichier
- Suppression individuelle des entrées
- Auto-démarrage : Se lance automatiquement au démarrage de la session
- Mises à jour automatiques : Télécharge chaque release publiée depuis
mainet propose un redémarrage dès qu'elle est prête - Interface moderne et fluide
- Masquage automatique de la fenêtre (blur)
- Compteur d'éléments indexés
Pour Ubuntu/Debian :
-
Télécharger le fichier
.debdepuis les releasesVérifiez ensuite le checksum et sa signature Sigstore :
sha256sum --check SHA256SUMS
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity 'https://github.com/slayercode1/Utilitaire-Ubuntu/.github/workflows/release.yml@refs/heads/main' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
gh attestation verify Finder-*-amd64.deb --repo slayercode1/Utilitaire-Ubuntu- Installer le package :
sudo apt install ./Finder-*-amd64.deb-
C'est tout ! 🎉
- L'application se lance automatiquement en arrière-plan
- Appuyez sur
Alt + Spacepour l'utiliser - Finder vérifie les mises à jour au démarrage puis toutes les quatre heures
Le paquet configure lui-même le sandbox Chromium (
chrome-sandboxen root:4755 via le script post-installation) : aucune manipulation n'est demandée aux utilisateurs, y compris sur Ubuntu 24.04+ où le noyau restreint les user namespaces non privilégiés.Dépannage — si une installation datant d'une version antérieure affiche « The SUID sandbox helper binary was found, but is not configured correctly », réinstallez le paquet ou exécutez :
sudo chmod 4755 /opt/Finder/chrome-sandbox
Les paquets AppImage et Debian téléchargent automatiquement la dernière release GitHub, vérifient son empreinte SHA-512 et demandent avant de redémarrer. Une installation Snap doit être mise à jour par le Snap Store.
AppImage sur Ubuntu 24.04+ : un AppImage ne peut pas embarquer de binaire setuid ; si le lancement échoue sur l'erreur de sandbox, préférez le
.deb, ou autorisez les user namespaces pour ce binaire via un profil AppArmor (même principe quescripts/setup-dev-sandbox.sh).
Désinstallation :
sudo apt remove finder- Node.js 22.12 ou supérieur
- npm ou yarn
- Linux (Ubuntu, Debian, Fedora, Arch, etc.)
- Cloner le dépôt
git clone https://github.com/slayercode1/Utilitaire-Ubuntu.git
cd Utilitaire-Ubuntu- Installer les dépendances
npm installCe npm install installe aussi les hooks git (husky) : formatage et lint
Biome au commit, message au format Conventional Commits, typecheck + tests
avant chaque push.
- Autoriser le sandbox Chromium (une fois par machine, Ubuntu 24.04+)
sudo scripts/setup-dev-sandbox.shUbuntu restreint les user namespaces non privilégiés : sans ce réglage,
npm start s'arrête sur « The SUID sandbox helper binary was found, but
is not configured correctly ». Le script installe un profil AppArmor qui
autorise les user namespaces pour le seul binaire Electron de ce
dépôt — pas de chmod 4755 sur un fichier de node_modules (un
binaire setuid-root réécrit à chaque npm install serait une élévation
de privilèges offerte à toute compromission de la chaîne npm), et le
profil survit aux réinstallations. Les utilisateurs finaux ne sont pas
concernés : le .deb règle son propre sandbox à l'installation.
- Lancer en mode développement
npm startPour créer un package distribuable :
# Créer l'AppImage, le .deb et les métadonnées d'auto-update
npm run release:linux
# Les fichiers seront dans ./out/builder/Le package .deb inclut :
- ✅ L'application Finder
- ✅ Configuration autostart (lancement automatique au démarrage)
- ✅ Fichier .desktop pour le menu d'applications
- ✅ Toutes les dépendances
Note sur l'auto-démarrage :
L'application se configure automatiquement pour démarrer avec votre session
Linux en créant elle-même une entrée atomique et privée dans
~/.config/autostart/. Aucune configuration manuelle n'est nécessaire.
Appuyez sur Alt + Space pour ouvrir/fermer Finder
En configuration multi-écrans, Finder s'ouvre sur l'écran où se trouve le curseur, comme Spotlight sur macOS.
.firefox → Cherche uniquement dans les applications
.chrome
.code
?document → Cherche uniquement dans les fichiers/dossiers
?image
?projet
??météo paris → Recherche directement sur Google
??traduction bonjour en anglais
>ls -la → Exécute la commande dans un terminal
>htop
>git status
# Devises
10$ to eur → Convertit 10 dollars en euros
100€ to usd
50£ to eur
# Longueurs
100m to ft → Convertit 100 mètres en pieds
5km to mi
10in to cm
# Poids
5kg to lb → Convertit 5 kilos en livres
100g to oz
# Températures
20c to f → Convertit 20°C en Fahrenheit
100f to c
# Volumes
5l to gal → Convertit 5 litres en gallons
Note : Le résultat des conversions est automatiquement copié dans le presse-papier.
- Tapez le nom d'une application, fichier, ou une expression mathématique
- Utilisez les flèches ↑ et ↓ pour naviguer
- Appuyez sur Entrée pour ouvrir/lancer
- Appuyez sur Échap pour fermer
Recherche d'applications :
firefox
chrome
code
Recherche de fichiers :
document.pdf
photo.jpg
script.sh
Calculs mathématiques :
2+2 → 4
10*5 → 50
(5+3)*2 → 16
2^8 → 256
100/4 → 25
15%4 → 3
Le projet est écrit intégralement en TypeScript. Les sources vivent dans src/
et sont compilées vers dist/, d'où Electron les charge.
Le compilateur utilise le mode strict et ses contrôles complémentaires. Le
build exécute aussi scripts/check-strict-types.ts, qui refuse les types
échappatoires explicites et les paramètres de capture non typables proprement.
finder/
├── src/
│ ├── main/ # Processus principal
│ │ ├── index.ts # Point d'entrée
│ │ ├── config.ts # Constantes et chemins
│ │ ├── window.ts # Fenêtre et positionnement multi-écrans
│ │ ├── lifecycle.ts # Instance unique, démarrage automatique
│ │ ├── ipc/ # Handlers IPC (transport uniquement)
│ │ ├── services/ # Logique métier, sans Electron
│ │ └── scanners/ # Accès au système
│ ├── preload/index.ts # Pont contextBridge
│ ├── renderer/ # Interface
│ │ ├── index.html
│ │ ├── main.ts
│ │ └── features/conversion/
│ └── shared/ # Contrats IPC, types, chemins
├── tests/unit/ # Tests unitaires Vitest
└── scripts/ # Outillage de build
Le renderer n'a accès à aucune API Node : sa configuration TypeScript ne déclare
aucun type Node, ce qui rend un import fs impossible à compiler. Tous les
échanges passent par window.electronAPI, défini par le preload.
Le document principal utilise l'origine interne sécurisée
finder-app://renderer. Le handler ne sert que les fichiers compilés attendus ;
les images locales doivent appartenir à un index détenu par le processus main.
Les scanners et les services ne dépendent pas d'Electron : ils sont vérifiables sans lancer l'application.
Dans src/main/config.ts :
export const GLOBAL_SHORTCUT = 'Alt+Space'
export const WINDOW_TOP_POSITION = 0.15 // 15 % depuis le hautDans src/main/scanners/file-scanner.ts :
const MAX_SCAN_DEPTH = 4Dans src/shared/paths.ts : répertoires .desktop, thèmes d'icônes et racines
autorisées, partagés par tous les scanners.
Les couleurs, espacements et durées d'animation sont regroupés en variables CSS
au début de src/renderer/styles.css.
npm start # compile puis lance l'application
npm test # tests unitaires (Vitest)
npm run test:e2e # tests E2E Playwright (vraie application Electron)
npm run test:regression # parcours critique + comparaisons visuelles
npm run test:all # unitaires + couverture + E2E + régression
npm run lint # Biome (format + lint) ; lint:fix pour corriger
npm run typecheck # vérification de types (mode strict)
npm run verify # typecheck + tests + build
npm run make # paquets .deb et .zipLa qualité est verrouillée par les hooks git (installés par npm install) :
| Hook | Vérification |
|---|---|
pre-commit |
Biome sur les fichiers indexés (lint-staged) |
commit-msg |
Message au format Conventional Commits (commitlint) |
pre-push |
typecheck + tests unitaires |
Dans src/main/window.ts, après la création de la fenêtre :
win.webContents.openDevTools({ mode: 'detach' })Finder fonctionne entièrement en local. L'application ne comporte ni compte utilisateur, ni serveur, ni télémétrie, ni collecteur de plantages, ni service d'analyse d'usage. Aucune dépendance tierce de collecte n'est embarquée.
| Donnée | Emplacement | Durée | Finalité |
|---|---|---|---|
| Historique de recherche (5 entrées) | Stockage local du navigateur | Jusqu'à effacement | Proposer les recherches récentes |
| Index des applications et fichiers | Mémoire vive uniquement | Durée de la session | Répondre aux recherches |
| Position du curseur | Non conservée | Instantanée | Ouvrir sur le bon écran |
L'index des fichiers ne quitte jamais la mémoire : il n'est écrit sur aucun disque et disparaît à la fermeture.
La recherche web (préfixe ??, ou absence de résultat local) ouvre votre
navigateur par défaut sur Google avec la requête saisie. Elle n'est déclenchée
que par une action explicite. L'URL est construite par le processus principal
à partir de la seule requête, jamais par l'interface.
Aucune autre donnée ne sort de votre poste.
Appuyez sur Ctrl + Suppr dans la fenêtre de recherche. Après confirmation,
l'application supprime :
- l'historique de recherche ;
- les caches du moteur de rendu ;
- les artefacts créés par Chromium.
Vos fichiers personnels ne sont pas touchés.
Au démarrage, Finder retire par ailleurs les fichiers laissés par la session
précédente que Chromium crée sans finalité pour cette application, dont un
identifiant persistant du poste
(Crashpad/client_id).
Les messages affichés dans la console ne contiennent ni chemin de fichier, ni requête, ni contenu de document. Ils ne sont écrits dans aucun fichier et ne sont transmis nulle part.
Les contributions sont les bienvenues ! Le guide complet (mise en route, hooks, style, tests, sécurité) est dans CONTRIBUTING.md. En résumé :
- Fork le projet
- Créez votre branche (
git checkout -b feat/ma-fonctionnalite) - Committez au format Conventional Commits (
git commit -m 'feat: ajoute ma fonctionnalité') — vérifié par le hookcommit-msg - Push vers la branche (
git push origin feat/ma-fonctionnalite) — typecheck + tests exécutés par le hookpre-push - Ouvrez une Pull Request
- Style appliqué automatiquement par Biome (
npm run lint:fix) - Commentaires expliquant le pourquoi, en français
- Tout nouveau service arrive avec ses tests unitaires
- Tester sur différentes distributions Linux quand c'est possible
Code source disponible : consultation, usage personnel et contributions bienvenus ; redistribution et usage commercial soumis à autorisation. Voir LICENSE et CONTRIBUTING.md.
- Inspiré par Spotlight (macOS)
- Construit avec Electron
- Icônes générées avec SVG
Pour toute question ou suggestion :
- Ouvrir une issue sur GitHub
- Contribuer via Pull Request
- Pour une vulnérabilité, suivre la procédure privée de SECURITY.md
Fait avec ❤️ pour la communauté Linux
