Powerful, declarative settings management for your Mac, with
speed.
cutler aims to simplify your macOS setup experience into an "almost" one-command procedure. Define your settings once, then easily apply, track, and revert changes across your systemβthink of it as infrastructure-as-code for your Mac.
This website is just an overview of what cutler can do. In order to get a comprehensive guide on what cutler can do, please read the official README.
If you like this project, consider β starring it! :D
Just a single command and you're ready to go!
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/hitblast/cutler/main/install.sh)"
Or, use one of the following:
brewbrew install hitblast/tap/cutler
cargocargo install cutler
misemise use -g cargo:cutler
Learn more about cutler by running either of these commands:
# Included manpage (brew/manual)
man cutler
# or, the included help menu:
cutler help
In order to setup a comprehensive example on your Mac automatically, use this command:
cutler init
Check out the example configuration files to get started quickly!
bash userscutler completion bash > cutler.bash
mv cutler.bash ~/.bash-completion.d/
zsh userscutler completion zsh > _cutler
mv _cutler ~/.zfunc/
Other shells like powershell, elvish and fish are also available.
cutler apply
# or, skip external commands (see reference below)
cutler apply --no-exec
# or, also invoke `cutler brew install`
cutler apply --with-brew
This command applies all settings from your config file and restarts necessary system services.
cutler status
Compares your configuration with current system settings.
See Shell Integrations for
another use case of this command in your terminal.
cutler unapply
Removes all settings applied by cutler.
cutler reset --force
Resets every defaults domain written in the config file to
factory settings.
NOTE: This should ONLY be used as a fallback option to
cutler unapply.
# Shows the contents of the configuration file
cutler config show
# Unapplies and deletes the configuration file
cutler config delete
# Check only
cutler check-update
# or, upgrade directly (if installed manually):
cutler self-update
cutler eliminates manually installing packages by hand and using bundle files for storing their identifiers using just these two commands:
# Backup installed casks and formulae
# This will store all formula/cask names to cutler.toml
cutler brew backup
# Optionally, you can add the --no-deps flag
# This will only backup the formulae/casks which aren't a dependency.
cutler brew backup --no-deps
# Now, to install from your cutler.toml file:
cutler brew install
When you apply your defaults using cutler, you can also define custom external commands to be executed in a post-hook fashion:
# A basic hello
[commands.greet]
cmd = "echo \"Hello World\""
This translates to running:
echo "Hello World"
For more complex scenarios, you can use a more advanced structure with separate arguments and variables:
# Define reusable variables here:
[vars]
common_args = ["Hello", "World"]
some_string = "Pancakes!"
[commands.greet]
run = "echo $common_args"
sudo = false
If you want to run them:
# combined execution
cutler exec
# or
cutler exec greet
Just a fun part of the project! If you scroll around the
GitHub Releases
section, you will see more "personal takes" which are randomly
written notes of mine to share some open thoughts.
Anyways, cutler is one of my favorite concurrent hobby projects
right now. If you'd like to support me, consider starring this
project! :3