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.
- Mode "Normal" : Thème minimaliste, couleurs sombres (
#2C2C2C), interface épurée. - Thèmes Artiste (Sabrina Carpenter) : Un thème complet avec 6 variantes de couleurs (Bleu, Rose, Vert, Rouge, Jaune, Violet), modifiant l'intégralité du bureau avec un design "Short n' Sweet".
- 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 selon le thème grâce à
dockutil.
- Coordonnées dynamiques : Redimensionne et déplace 18+ 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.
- Apparence macOS : Bascule automatique entre le Dark Mode et le Light Mode selon le thème actif.
- Effets sonores : Lecture en arrière-plan d'un fichier audio (ex:
sabrina.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": "sabrina/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/Sabrina/....
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
│ └── sabrina/
│ └── blue.png
├── ICNS/ # Icônes de remplacement
│ ├── Normal/
│ │ └── Spotify.png
│ └── Sabrina/
│ └── blue/
│ └── Spotify.png
├── SOUNDS/ # Effets sonores
│ ├── normal.mp3
│ └── sabrina.mp3
└── WIDGET/ # Ressources pour les widgets Photo Übersicht
├── 1/
│ ├── normal.png
│ └── sabrina/
│ └── 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.
Q : Je ne suis pas fan de Sabrina Carpenter, est ce que je peux changer le nom ?
R : C'est une manipulation un peu plus longue et pas native dans se script, mais il vous faudrat remplacer toutes les Sabrina ET sabrina par ce que vous voulez (pareil pour les dossiers).
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.




