base on ⚙️ All-in-One menu bar app, hide 💻MacBook Pro's notch, dark mode, AirPods, Shortcuts ![](https://badgen.net/github/release/jacklandrin/onlyswitch)![](https://img.shields.io/badge/UI-SwiftUI-green) ![](https://img.shields.io/badge/Platform-Monterey-purple) ![](https://img.shields.io/badge/License-MIT-orange)
<p align="left">
<img alt="AppIcon" src="https://github.com/jacklandrin/OnlySwitch/blob/main/OnlySwitch/Assets.xcassets/AppIcon.appiconset/
[email protected]?raw=true" width="128px" align="center" />
</p>
# OnlySwitch
***Menubar is smaller, you only need an All-in-One switch.***
## Install by Homebrew
```
brew install only-switch
```
## Manually Download
[**Download the app**](https://github.com/jacklandrin/OnlySwitch/releases/latest/download/OnlySwitch.dmg)
## Communities
Telegram group: https://t.me/OnlySwitchforMac
Discord: https://discord.gg/UzSNpYdPZj
## What's the OnlySwitch?
OnlySwitch provides a series of toggle switches to simplify your routine work, such as Hidden desktop icons, dark mode, and hide notch of the new Macbook Pro. The switches show on your status bar, you can control them effortlessly. Switch and Shortcuts items can be customized (remove/add or sort) to show on the list. These functionalities even can be put on your desktop as Widgets.
Since Version 1.7, **Shortcuts** can be imported into OnlySwitch.
Since Version 2.0, supports **keyboard shortcuts**. You can control your all switches and Shortcuts with the keyboard.
<p align="center">
<img alt="Only Switch" src="https://github.com/user-attachments/assets/40d94175-6487-4c59-b09e-2261ac5b8453" width="80%" align="center" />
</p>
Since Version 2.3.6, the Switches Availability (including Player and Hide Menu Bar Icons) is moved to System's menu bar.
![](https://github.com/jacklandrin/OnlySwitch/assets/3782279/11c89e33-2007-4913-b320-47c188538b68)
Since Version 2.5.0, OnlySwitch has started to support **Apple Widgets** (Sonoma and above).
Since Version 2.5.4, OnlySwitch has Only Control appearance.
## Shortcuts Gallery
Everyone can contribute macOS Shortcuts for OnlySwitch now. Please read [How to contribute to Shortcuts Gallery](ShortcutsGalleryContributing.md). The shared Shortcuts will be displayed here:
<p align="center">
<img alt="Sits in the status bar" src="https://github.com/jacklandrin/OnlySwitch/assets/3782279/a9d90eed-c540-4183-9332-396dce0f72d4" width="70%" align="center" />
</p>
## Switch list
#### Native Switches:
| Switch | status | Switch | status |
|:--------------------|-----------------|:-------------------------|:------------------|
| Hide desktop | finished | Hide notch | exist some issues |
| Dark mode | finished | Low power mode | require password |
| Screen Saver | finished | Show Finder Path Bar | finished |
| Night Shift | finished | Mute mic | finished |
| Autohide Dock | finished | Small launchpad icon | finished |
| Airpods | finished | Pomodoro timer | finished |
| Bluetooth | finished | Show extension name | finished |
| Xcode cache | finished | Show user library folder | finished |
| Autohide Menu Bar | finished | Mute | finished |
| Show hidden files | finished | Empty pasteboard | finished |
| Radio Station | finished | Empty trash | finished |
| Keep awake | finished | Show Recent Apps on Dock | finished |
| Spotify | finished | Apple Music | finished |
| Screen Test & Clean | finished | Hide Menu Bar Icons | partly finished |
| FKey | finished | Back Noises | finished |
| Dim Screen | finished | Eject Discs | finished |
| Hide Windows | partly finished | True Tone | finished |
| Top Sticker | partly finished | Key Light | finished |
Since Version 1.3, switches can be added to or removed from the list.
#### Shortcuts Gallery:
| Shortcuts | Remark | Shortcuts | Remark |
|----------------------------------|-------------------------------------------------|----------------------------------|:--------|
| Toggle Scroll Direction | Monteray | Invert Scroll Direction(Ventura) | Ventura |
| DarkMode Switch | | Network Details | |
| Split-Screen Apps | | Passwords | |
| Google Translate | | IP Address Information | |
| Autohide menu bar in full screen | Monteray | Flush DNS Cache | |
| Do Not Disturb | Monteray or higher | Upcoming Events | |
| S-GPT | works with S-GPT Encoder, needs OpenAI API key | S-GPT Encoder | |
#### Evolution Gallery:
| Evolution | Remark | Evolution | Remark |
|---------------------|--------|--------------------|:------------------------|
| Stage Manager | | Update Software | installed via App Store |
| Hide desktop Widget | Sonoma | Hide Desktop Icons | Sonoma |
| Clamshell | | Wifi Switch | |
## Shortcuts Actions
| Actions | status |
|---------------------|-------------------|
| Get wallpaper image | exist some issues |
| Get wallpaper url | finished |
| Is dark mode | finished |
| Set dark mode | finished |
## Supported Languages 🇺🇳
English, Simplified Chinese, German, Croatian, Turkish, Polish, Filipino, Dutch, Italian, Russian, Spanish, Japanese, Somali, Korean, French, Ukrainian, Slovak, Portuguese (BR)
## Welcome to pull requests for these
* support other languages
* fix bugs
If you have other good ideas 💡, feel free to send an E-mail to me.
## Donate
If you like it, help support this app by giving me a cup of tea for me to keep coding.
<p align="center">
<img alt="Sits in the status bar" src="https://github.com/user-attachments/assets/76347782-e84f-469d-b9bf-2dae89d61979" width="20%" align="medium" title="Made by QRCobot"/>
</p>
## Hiding new Macbook Notch
The Hide notch switch only shows on the built-in display of M1 Pro/Max Macbook Pro. The switch just controls the current desktop, not all work desktops.
Now, the Hide notch switch supports dynamic wallpaper, just the processing takes a much longer time.
<p align="center">
<img alt="Sits in the status bar" src="https://github.com/jacklandrin/OnlySwitch/assets/3782279/efddd8d3-edfe-4497-bea0-5051d27625ca" width="60%" align="center" />
</p>
## Only Widget
Only Switch supports Apple Widgets since version 2.5.0. The Widgets can be edited to any built-in switches and buttons. Clicking them will trigger the reflection of relevant switches and buttons. You can put Only Widgets anywhere, desktop or notification center.
Since version 2.5.2, Only Widget supports Evolution.
**NOTE:** After updating version 2.5.0, you might need to reset your language. If your widgets didn't follow your language settings, please kill Only Widget process, it will update.
<img width="370" alt="Only Widget" src="https://github.com/jacklandrin/OnlySwitch/assets/3782279/0c1be202-9e5f-41dd-b62d-52d5a7147139">
## Evolution🔥
Evolution has come following version 2.4, you can freely DIY the switches and buttons that you want. Currently, evolution supports **Shell** and **Apple Script**. They also can be invoked by hotkeys. Next, evolution will be able to be distributed by users as a shortcut utility platform.
Evolution settings page is implemented with TCA.
PS: Evolution feature needs macOS 13.0 and above.
![](https://github.com/jacklandrin/OnlySwitch/assets/3782279/69131917-bfe0-4c54-8b38-d4aeb26f749a)
Everyone can contribute Evolution for OnlySwitch since version 2.4.3. Please read [How to contribute to Evolution Gallery](EvolutionGalleryContributing.md). The shared Evolutions will be displayed here:
<p align="center">
<img alt="Sits in the status bar" src="https://github.com/jacklandrin/OnlySwitch/assets/3782279/f3299ae0-0222-49a3-864a-80c6601bac6a" width="70%" align="center" />
</p>
### How to create an Evolution?
So far, Evolution offers two types, with Switch and Button.
1. Button is very simple, when Run button is pressed, the script you added will be executed.
2. Regarding Switch, there are four fields you can edit.
* Check status: When OnlySwitch list appeared or some settings are changed, the switch status will be checked whether on or off. At this moment, the script of check status will be executed. You can press the debug button to output the result of this script.
* True condition: You can input a true condition to define what is on or off for the switch status. If the true condition matches the output result, the status will be on, and vice versa.
* Turn on: the script can change the status to on.
* Turn off: the script can change the status to off.
The debug button can verify if your scripts are valid. Before you save evolution, all scripts must pass the test.
## AirPods Switch
I use `classOfDevice`(2360344) to check if a Bluetooth device is Airpods Pro, but I'm not sure whether other AirPods modules are also 2360344, since I only have two AirPods Pros. If you are using AirPods 1~3, please tell me what the `classOfDevice` is. Or I can detect the count of battery value to check if AirPods (when the count is 3, it's AirPods), like **AirPods Battery Monitor For MAC OS**.
## Radio Player
Radio Player supports m3u, and aac stream, but without sound wave effect. Please send me the crash log and stream URL if your Radio Player crashes. You can close the sound wave effect on the Radio setting, and that player is AVPlayer, more stable. In version 2.3.5, the radio play can be set to enable/disabled. If the function is disabled, the switch will be invisible in the list, and the radio player will be unregistered from Now Playing(But I don't know why there will be a little delay. It should be a problem by macOS).
Since Version 2.3.11, the radio list can be exported and imported.
## Low Power Mode
Low Power Mode uses Terminal commands that require root access, so the app will ask you to enter the password on every toggle.
## Screen Test & Clean
In Version 2.3, Only Switch brings a new feature, Screen Test. It provides a pure color view in full-screen mode, you can check dead pixels via it. Press the left and right arrow keys, the color will change from black, white, red, green, and blue. This functionality also can be used for screen cleaning, as you can see the stains on the screen.
## Hide Menu Bar Icons
This feature is new in version 2.3.2. To be honest, Hidden and Dozer are both good apps for this function. Many users install OnlySwitch and them simultaneously, but this also squeezes the menu bar, which is already lacking in space. Therefore, the feature integrates into OnlySwitch.
![](https://github.com/jacklandrin/OnlySwitch/assets/3782279/fdda284e-929f-400e-aba5-9c628f065de6)
When the switch is on, items on the left of the split(arrow-pointing) icon are hidden. Hold ⌘ (command) and drag the icon to configure the hidden section. If you want to use it no longer, you can disable it in preferences, the split icon will disappear. You also can set the interval of autohide for it here. If your date on the menu bar is truncated when it's on, you can set this: System Preferences -> Dock & Menu Bar -> Clock -> Show date -> always.
Since version 2.3.10, this switch can be controlled via right-click icons.
## They talk about it
| | | | |
|---------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|
| [itopnews.de](https://www.itopnews.de/?s=OnlySwitch) | [Ifun.de](https://www.ifun.de/suche/OnlySwitch) | [appgefahren.de](https://www.appgefahren.de/onlyswitch-kleines-tool-mit-wichtigen-aktionen-fuer-die-mac-menueleiste-312135.html) | [CASCHYS BLOG](https://stadt-bremerhaven.de/only-switch-fuer-macos-schnellzugriff-auf-einige-systemoptionen/) |
| [softpedia](https://mac.softpedia.com/get/System-Utilities/OnlySwitch.shtml) | [macupdate](https://www.macupdate.com/app/mac/63719/onlyswitch) | [v1tx](https://www.v1tx.com/post/onlyswitch/) | [OSCHINA](https://www.oschina.net/p/onlyswitch) |
| [Macken](https://www.macken.xyz/2021/12/gratis-ar-gott-alla-installningar-pa-ett-stalle-onlyswitch/) | [AAPL Ch](https://applech2.com/archives/20220111-onlyswitch-all-in-one-status-bar-button-for-mac.html) | [appsofter](https://appsofter.com/download/1265.html) | [lifehacker.ru](https://lifehacker.ru/onlyswitch) |
| [appletechnikblog](https://appletechnikblog.com/de/2022/02/25/app-tipp-der-woche-only-switch-fuer-die-menueleiste-auf-dem-mac/) | [All-in-One person](https://en.blog.themarfa.name/how-to-quickly-manage-macos-system-settings/) | [Mac Gadget](https://www.macgadget.de/News/2022/03/24/OnlySwitch-Schnellzugriff-auf-viele-Systemfunktionen-per-Mac-Menueleiste) | [MaxiApple](https://www.maxiapple.com/2022/05/onlyswitch-macos-mac-gratuit.html) |
| [insmac](https://insmac.org/macosx/5018-onlyswitch.html) | [tchgdns](https://tchgdns.de/onlyswitch-macos-open-source/) | [insmac](https://insmac.org/macosx/5018-onlyswitch.html) | [macbff](https://macbff.com/onlyswitch-2-3-1/) |
| [korben](https://korben.info/controler-macos-onlyswitch.html) | [macg](https://www.macg.co/logiciels/2023/03/onlyswitch-ajoute-une-pelletee-de-raccourcis-pratiques-votre-barre-des-menus-135357) | [korben.info](https://korben.info/controler-macos-onlyswitch.html) | [AlternativeTo](https://alternativeto.net/software/only-switch) |
| [macsoft.jp](https://macsoft.jp/onlyswitch/) | [macgeneration](https://www.macg.co/logiciels/2023/03/onlyswitch-ajoute-une-pelletee-de-raccourcis-pratiques-votre-barre-des-menus-135357) | [hdwh.de](https://hdwh.de/onlyswitch-vereinfacht-eure-routinearbeit-mit-praktischen-schaltern/) | [MacKed](https://macked.app/onlyswitch.html) |
| [Mac Torrents](https://www.tntmactorrent.net/onlyswitch-for-mac-free-download/) | [PCtipp](https://www.pctipp.ch/praxis/mac/mac-tipp-onlyswitch-2-2892320.html) | [lifehacker](https://lifehacker.com/tech/change-hidden-mac-settings-with-onlyswitch) | [PHAPLUAT](https://kynguyenso.plo.vn/su-dung-onlyswitch-de-tuy-chinh-tat-ca-cai-dat-may-mac-nhanh-hon-post776151.html) |
| [Techgedöns](https://tchgdns.de/onlyswitch-menueleisten-multitool-bekommt-widgets-fuer-den-mac-desktop/) | [MacVince](https://www.youtube.com/watch?v=ARfBLKzRQY4&t=41s) | | |
## Reference
* NightShift switch refers to [Nocturnal](https://github.com/joshjon/nocturnal)
* [LaunchAtLogin](https://github.com/sindresorhus/LaunchAtLogin)
* AirPods Battery refers to [AirPods Battery Monitor For MAC OS](https://github.com/mohamed-arradi/AirpodsBattery-Monitor-For-Mac)
* Dynamic Wallpaper processing refer to https://itnext.io/macos-mojave-dynamic-wallpaper-fd26b0698223 and [wallpapper](https://github.com/mczachurski/wallpapper)
* [AlertToast](https://github.com/elai950/AlertToast)
* [AudioStreamer](https://github.com/syedhali/AudioStreamer) modified for live streaming
* [AudioSpectrum](https://github.com/potato04/AudioSpectrum) modified for AppKit
* [Alamofire](https://github.com/Alamofire/Alamofire)
* Sound Source: [mixkit](https://mixkit.co) and [pixabay](https://pixabay.com)
* [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts)
* Apple Music & Spotify Switch refer to [SpotMenu](https://github.com/kmikiy/SpotMenu)
* The idea of hiding menu bar icons from [Hidden](https://github.com/dwarvesf/hidden)
* FKey refer to [Fluor](https://github.com/Pyroh/Fluor)
* Hide Windows refer to [Later](https://github.com/alyssaxuu/later)
* [The composable architecture](https://github.com/pointfreeco/swift-composable-architecture)
* [Sparkle](https://github.com/sparkle-project/Sparkle)
* True Tone refers to [Shifty](https://github.com/thompsonate/Shifty)
* [swift-markdown-ui](https://github.com/gonzalezreal/swift-markdown-ui)
* Key Light refers to [mac-brightnessctl](https://github.com/rakalex/mac-brightnessctl)
## Contributors
**Translation:**
| Language | Contributor | Language | Contributor |
|----------|--------------------------|:----------------|:---------------|
| German | @C0d3Br3aker | Italian | @bellaposa |
| Croatian | @milotype | Russian | @kirillyakopov |
| Turkish | @berkbatuhans | Spanish | @kant |
| Polish | @kpacholak | Japanese | @ShogoKoyama |
| Dutch | Alex | Somali | @abdorizak |
| Filipino | Rosel | Korean | @iosdevted |
| French | @BtKent and Ange Lefrère | Ukrainian | @andryua |
| Slovak | @Svec-Tomas | Portuguese (BR) | @EvertonCa |
@wrngwrld for the volume slider of the radio player
@kant for syntax issue
## License
MIT
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=jacklandrin/OnlySwitch&type=Date)](https://star-history.com/#jacklandrin/OnlySwitch&Date)
", Assign "at most 3 tags" to the expected json: {"id":"11119","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"