Script d'automatisation macOS pour basculer dynamiquement entre différents thèmes complets d'environnement de bureau en un instant.
- Technologies utilisées
- Prérequis & Compatibilité
- Comment utiliser Switcher
- Fonctionnalités
- Guide de configuration
- Démo
- Structure du projet
- Problèmes connus
- Roadmap
- FAQ
- Contributeurs
Switcher s'appuie sur des outils en ligne de commande et des fonctionnalités natives de macOS :
- Bash : Cœur du script d'automatisation (gestion des processus, boucles, conditions).
- JSON &
jq: Stockage et requêtage de la configuration des thèmes (coordonnées, couleurs, chemins). - AppleScript (
osascript) : Interaction avec le système macOS (fonds d'écran, mode sombre/clair, Terminal). fileicon: Utilitaire CLI pour la modification dynamique des icônes d'applications.dockutil: Utilitaire CLI pour réorganiser dynamiquement le Dock macOS.- Übersicht : Moteur de rendu HTML/JS pour afficher des widgets personnalisés sur le bureau.
Switcher est conçu spécifiquement pour l'environnement macOS moderne :
| OS | Architecture | Support complet |
|---|---|---|
| macOS Tahoe/Sequoia/Sonoma | Apple Silicon (M1, M2, ..., M5) | ✅ Recommandé |
| macOS Ventura | Intel / Apple Silicon | ✅ |
Avant d'utiliser le script, vous devez installer ces outils via Homebrew :
brew install jq
brew install dockutil
brew tap mkchoi212/fac && brew install fileiconNote : L'application Übersicht doit également être installée dans le dossier /Applications.
Pour mettre en place et utiliser le script, suivez ces étapes :
-
Cloner le dépôt et placer les données
Clonez le projet dans votre dossier de développement :
git clone https://github.com/LoupesDEV/Switcher.git ~/Dev/Switcher -
Préparer l'arborescence des médias
Créez le dossier
~/Pictures/SWITCH/et placez-y vos ressources (fonds d'écran, icônes, sons, widgets) en respectant la hiérarchie attendue (voir Structure du projet). -
Exécuter le script
Rendez le script exécutable puis lancez-le. Le script demandera les droits
sudopour modifier le cache des icônes :chmod +x ~/Dev/Switcher/switcher.sh ./switcher.sh
💡 Commandes avancées : Vous pouvez forcer un mode précis en passant des arguments. Par exemple,
./switcher.sh force normalappliquera le thème par défaut, et./switcher.sh force redappliquera la variante rouge du thème de couleur.
- Mode "Normal" : Thème minimaliste, couleurs sombres (
#2C2C2C), interface épurée. - Thèmes Couleur : Un thème complet avec 6 variantes de couleurs (Bleu, Rose, Vert, Rouge, Jaune, Violet), modifiant l'intégralité du bureau.
- Sélection aléatoire intelligente : Le script évite de retomber sur la même couleur deux fois de suite grâce à l'enregistrement du dernier état dans
data.json.
- Changement d'icônes à la volée : Remplace les icônes de plus de 50 applications (VS Code, Spotify, Discord, JetBrains, etc.) via
fileicon. - Exécution parallèle optimisée : Utilise un pool de jobs (max 6 processus) pour appliquer les icônes sans saturer les I/O du Mac.
- Dock sur mesure : Nettoie le Dock et épingle uniquement les applications essentielles grâce à
dockutil.
- Coordonnées dynamiques : Redimensionne et déplace 20+ widgets (photos, horloge, lecteur musical, paroles) en modifiant les fichiers
layout.jsonde chaque widget. - Rafraîchissement automatique : Relance Übersicht via AppleScript pour appliquer les changements sans délai.
- Fonds d'écran : Changement simultané sur tous les espaces de travail actifs.
- Effets sonores : Lecture en arrière-plan d'un fichier audio (ex:
switch.mp3) lors de la transition. - Nettoyage du cache : Purge des démons
iconservicesagentpour forcer l'affichage immédiat des nouvelles icônes.
Toute l'interface est paramétrée depuis le fichier data.json. Voici comment le modifier :
{
"theme": 1,
"last_color": 0,
"colors": ["red", "green", "blue", "pink", "yellow", "purple"],
"wallpaper": {
"normal": "normal.jpg",
"blue": "colors/blue.png"
},
"palettes": {
"blue": {
"main": "#1A3A5E",
"second": "#A0D2EB"
}
}
}Chaque widget possède des propriétés (position, taille, couleur) spécifiques à chaque variante :
"widgets": {
"Clock": {
"normal": "{\"top\": \"26%\", \"left\": \"31%\", \"color\": \"#2C2C2C\", \"align\": \"left\", \"size\": \"6rem\"}",
"blue": "{\"top\": \"8.98%\", \"left\": \"41%\", \"color\": \"#1A3A5E\", \"align\": \"center\", \"size\": \"8rem\"}"
}
}OUI tout les \ sont obligatoires sinon les différents fichiers layout.json seront faux.
Vous pouvez trouver tout mes widgets dans le dossier docs/widgets, vous pouveza les reutiliser facilement en les mettant dans le dossier /Users/USERNAME_HERE/Library/Application Support/Übersicht/widgets
Pour modifier l'icône d'une nouvelle app :
- Ajoutez le nom exact de l'application dans le tableau
APPS_TO_ICON_SWITCHau début du script.sh. - Placez l'image correspondante (
NomDeLApp.pngou.icns) dans vos sous-dossiersICNS/NormaletICNS/Colors/....
Le script requiert une arborescence stricte pour trouver les médias :
Switcher/
├── switcher.sh # Script principal exécutable
├── data.json # Base de données de configuration
└── README.md # Documentation~/Pictures/SWITCH/ # Dossier externe (à créer manuellement)
├── WP/ # Fonds d'écran
│ ├── normal.jpg
│ └── colors/
│ └── blue.png
├── ICNS/ # Icônes de remplacement
│ ├── Normal/
│ │ └── Spotify.png
│ └── Colors/
│ └── blue/
│ └── Spotify.png
├── SOUNDS/ # Effet sonore
│ └── switch.mp3
└── WIDGET/ # Ressources pour les widgets Photo Übersicht
├── 1/
│ ├── normal.png
│ └── colors/
│ └── blue.png
└── ...Parfois, malgré le redémarrage des services (
iconservicesagent), le Finder ou le Dock peut afficher temporairement l'ancienne icône d'une application ou une icône générique.Solution : Le système finit par s'actualiser. Un redémarrage manuel du Dock (
killall Dock) ou un log out/log in résout instantanément les caches persistants.
Certaines applications (comme les jeux Steam, Lunar Client ou certains outils XQuartz) n'ont pas un bundle ID standard reconnu immédiatement par macOS.
- Solution intégrée : Le script utilise plusieurs chemins de vérification successifs (
/Applications,/System/Applications,/Applications/Utilities) avant de faire un fallback avecmdfindpour localiser l'application.
Versions futures
- ???
📢 Suggestions : Proposez vos idées dans les discussions GitHub.
Q : Puis-je créer mon propre thème avec ce script ?
R : Oui ! Ajoutez simplement une nouvelle clé dans le tableau "colors" du data.json, définissez ses positions de widgets, et créez les dossiers correspondants dans ~/Pictures/SWITCH/.
Q : Pourquoi le script demande-t-il mon mot de passe (sudo) ?
R : L'utilitaire fileicon a besoin de privilèges administrateur pour écrire dans les dossiers système des applications (/Applications) et forcer la mise à jour des attributs de fichiers.
Q : Übersicht ne met pas à jour mes widgets, que faire ?
R : Assurez-vous que le chemin $HOME/Library/Application Support/Übersicht/widgets/ est correct. Le script utilise AppleScript pour forcer Übersicht à s'actualiser (osascript -e 'tell application id "tracesOf.Uebersicht" to refresh').
Q : Comment revenir aux icônes d'origine de macOS ?
R : Vous pouvez lancer sudo fileicon rm /Chemin/Vers/App.app pour purger l'icône modifiée et restaurer celle incluse dans le bundle de l'application.
Merci aux personnes et ressources ayant contribué au projet:
- LoupesDEV — Développement principal, conception et maintenance.
Vous souhaitez contribuer ? Consultez le guide de contribution ou ouvrez une issue pour proposer des améliorations.




