Can "defaults write" command line configure the menu bar on macOS?

I would really like to use a script to enable these things on macOS High Sierra, by using defaults. I know how to create the script in .bash_profile, as I will use a function for it, and then just run the function in the terminal. However, what I'm missing are the actual strings to enable the following:

  • Displaying of Bluetooth icon
  • Displaying of Volume icon
  • Displaying of battery percentage
  • Displaying of full date

Are any of these programmatically settable by using Defaults, and have they changed a great deal between 10.6-10.13?

Ok, based on what IconDeamon said in the comments section for this post, I was able to go and edit ~/Library/Preferences/com.apple.systemuiserver.plist and was able to see a list of menus that I have enabled.

However, this does not necessarily take me to the place I want to go to. Ideally, it'd be good to find a list and be able to solve this. I mean, okay, now, thanks to help on this forum, I know that the ones I wish to display are:

/System/Library/CoreServices/Menu Extras/Script Menu.menu

/System/Library/CoreServices/Menu Extras/RemoteDesktop.menu

/System/Library/CoreServices/Menu Extras/Bluetooth.menu

/System/Library/CoreServices/Menu Extras/TimeMachine.menu

/System/Library/CoreServices/Menu Extras/AirPort.menu

/System/Library/CoreServices/Menu Extras/TextInput.menu

/System/Library/CoreServices/Menu Extras/Battery.menu

/System/Library/CoreServices/Menu Extras/Volume.menu

/System/Library/CoreServices/Menu Extras/Clock.menu

and that the menu can have a _5 or a _3 at the end to signify where it should go. But..? It's not exactly a user-writable textfile I can just edit.


Solution 1:

This defaults write command will enable several menu-bar icons, including Bluetooth.

defaults write com.apple.systemuiserver menuExtras -array \
"/System/Library/CoreServices/Menu Extras/AirPort.menu" \
"/System/Library/CoreServices/Menu Extras/Bluetooth.menu" \
"/System/Library/CoreServices/Menu Extras/Clock.menu" \
"/System/Library/CoreServices/Menu Extras/Displays.menu" \
"/System/Library/CoreServices/Menu Extras/Volume.menu"

Changes will not take effect until you restart the SystemUIServer:
killall SystemUIServer

If you want to enable additional items, look in ~/Library/Preferences/com.apple.systemuiserver.plist to find the specific name of the menu extra you are seeking.

Note: If you attempt to enable a menu extra that you do not have on your machine, the command will get stuck in an endless loop. Some users may not have the Eject.menu, for example.

Solution 2:

In macOS Big Sur, it seems some of the options are set in

~/Library/Preferences/ByHost/com.apple.controlcenter.$hostId

and can be set by using the defaults -currentHost write command.

Battery percentage is one of them.