apply-user-defaults
is a small utility to set macOS user defaults
declaratively from a YAML file.
To use, simply structure a YAML file like the following:
com.apple.dock:
# System Preferences > Dock > Automatically hide and show the Dock.
autohide: true
# System Preferences > Dock > Minimize windows using: Scale effect.
mineffect: "scale"
# System Preferences > Dock > Show indicators for open applications.
show-process-indicators: false
# System Preferences > Dock > Size.
tilesize: 72
Then apply it using:
$ apply-user-defaults path-to-file.yaml
You can also see what commands are being run by enabling verbose output:
$ apply-user-defaults path-to-file.yaml --verbose
==> defaults write com.apple.dock autohide -bool true
==> defaults write com.apple.dock mineffect -string scale
==> defaults write com.apple.dock show-process-indicators -bool false
==> defaults write com.apple.dock tilesize -int 72
Success! Applied defaults.
Environment variables can also be included using shell parameter expansion syntax. For example:
com.apple.finder:
# Finder > Preferences > New Finder windows show > Home directory.
NewWindowTargetPath: "file://${HOME}"
will evaluate to:
defaults write com.apple.finder NewWindowTargetPath -string "file://$HOME"
where $HOME
is the value contained in the HOME
environment variable.
This only applies when the string in the YAML file begins with a dollar sign and
is wrapped in braces (just using $HOME
won't work).
To disable, you may pass the flag --no-env
or escape the dollar sign, e.g.
'\\${VALUE}'
.
Pre-compiled binaries are available on the releases page.
If you're using Homebrew, you can install with a custom tap:
$ brew install zero-sh/tap/apply-user-defaults
To install via Cargo, run:
$ cargo install apply-user-defaults
To build from source:
$ git clone https://github.com/zero-sh/apply-user-defaults.git
$ cd apply-user-defaults
$ cargo run -- path-to-file.yml --verbose
This project is licensed under either the Apache-2.0 or MIT license, at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.