cargo install apply-user-defaults


Build Status License


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:
  # 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 autohide -bool true
==> defaults write mineffect -string scale
==> defaults write show-process-indicators -bool false
==> defaults write tilesize -int 72
Success! Applied defaults.

Template Expansion

Environment variables can also be included using shell parameter expansion syntax. For example:
  # Finder > Preferences > New Finder windows show > Home directory.
  NewWindowTargetPath: "file://${HOME}"

will evaluate to:

defaults write 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

Cargo Install

To install via Cargo, run:

$ cargo install apply-user-defaults

Building from Source

To build from source:

$ git clone
$ 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.

Jump To