Powerful & declarative settings management for your Mac, with speed.
cutler simplifies macOS configuration by letting you manage
system settings through a single TOML file instead of clicking
through System Settings or typing complex defaults
commands in the terminal.
Define your settings once, then easily apply, track, and revert changes across your system—think of it as infrastructure-as-code for your Mac.
Just a single brew command and you're ready to go!
brew install hitblast/tap/cutler
Besides Homebrew, you can also install cutler using:
# Using cargo
cargo install cutler
# Using mise
mise use -g cargo:cutler
Create a config.toml file within one of the
locations listed below and write your preferred settings
following the defaults syntax. Check out the
example configuration files
to get started quickly!
[dock]
tilesize = 46
[finder]
AppleShowAllFiles = true
CreateDesktop = false
[NSGlobalDomain]
ApplePressAndHoldEnabled = true
Config file location: cutler looks for your configuration in these locations (in order):
$XDG_CONFIG_HOME/cutler/config.toml~/.config/cutler/config.toml~/.config/cutler.tomlconfig.toml (current directory)cutler makes it super simple to apply, check, and revert your settings:
cutler apply
This command applies all settings from your config file and restarts necessary system services.
cutler status
Compares your configuration with current system settings.
cutler unapply
Removes all settings applied by cutler.
# Shows the contents of the configuration file
cutler config show
# Unapplies and deletes the configuration file
cutler config delete
Snapshot file: When you run
cutler apply, a snapshot file
.cutler_snapshot is created in your home directory.
This file records your configuration state and lets you revert
to a previous setup if needed. Do not delete this file manually!
Add --verbose to any command for more detailed
output about what's happening behind the scenes.
cutler also supports external commands:
[external.variables]
common_args = ["Hello", "World"]
[external]
[[external.command]]
cmd = "echo"
args = ["$common_args"]
sudo = false
⚠️ Warning: Currently, cutler does not verify
the integrity of domains or keys under
NSGlobalDomain. Please review these settings
manually before applying any changes.