cutlerv0.3.1

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.

Installation

Just a single brew command and you're ready to go!

brew install hitblast/tap/cutler
⚠️ Important: The prebuilt binaries are compiled and shipped from macOS 14 on arm64. Intel Macs will require a manual compilation of the project.

📦 Other installation methods

Besides Homebrew, you can also install cutler using:

# Using cargo
cargo install cutler

# Using mise
mise use -g cargo:cutler

🔨 Simple Configuration

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):

Usage

cutler makes it super simple to apply, check, and revert your settings:

Apply your settings

cutler apply

This command applies all settings from your config file and restarts necessary system services.

Check current status

cutler status

Compares your configuration with current system settings.

Revert changes

cutler unapply

Removes all settings applied by cutler.

Manage configuration file

# 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.

Advanced Features

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.

View Source on GitHub 📚 macOS Defaults Reference