The behavior of bacon is defined by both a global
prefs.toml file and a project specific
Both configuration files are optional but you'll fast need specific jobs for your targets, examples, etc.
When you modified those files and bacon evolved since, you may want to have a look at the current default ones and pick the changes you like:
The two files can accept the same properties (preferences, keybindings, jobs, etc.).
What's defined in the
bacon.toml file overrides the global
bacon --prefs creates the preferences file if it doesn't exist and returns its path (which is system dependent).
You may run
$EDITOR $(bacon --prefs) to edit it directly.
The default configuration file contains already possible entries that you may uncomment and modify.
bacon --init creates the
bacon.toml file if it doesn't exist.
This file usually contains project specific jobs and shortcuts and should be saved and shared using your version control system.
It's a good idea to put here the triggers for specific jobs.
The default bacon.toml is used when you don't create a file.
summary, wrap, reverse
You can change the
reverse mode at launch (see
bacon --help), in the application using keys, and you may set the initial values in this preferences file:
# Uncomment and change the value (true/false) to # specify whether bacon should start in summary mode # # summary = true # Uncomment and change the value (true/false) to # specify whether bacon should start with lines wrapped # # wrap = true # In "reverse" mode, the focus is at the bottom, item # order is reversed, and the status bar is on top # # reverse = true
This section, that you can also define in the project specific
bacon.toml file, lets you change the key combinations to use to trigger actions.
[keybindings] k = "scroll-lines(-1)" j = "scroll-lines(1)" h = "job:clippy" esc = "job:previous" shift-F9 = "toggle-backtrace" ctrl-r = "toggle-raw-output" ctrl-u = "scroll-page(-1)" ctrl-d = "scroll-page(1)"
Note that you may have keybindings for jobs which aren't defined in all projects, this isn't an error.
Your operating system and console intercept many key combinations. If you want to know which one are available, and the key syntax to use, you may find print_key useful.
A job is a command which is ran by bacon in background, and whose result is analyzed and displayed on end.
It's defined by the following fields:
|command||no||the tokens making the command to execute (first one is the executable)|
|watch||yes||a list of directories that will be watched if the job is run on a package.
|default_watch||yes||whether to watch default directories (
|need_stdout||yes||whether we need to capture stdout too (stderr is always captured). Default is
|on_success||yes||the action to run when there's no error, warning or test failures|
[jobs.exs] command = ["cargo", "run", "--example", "simple", "--color", "always"] need_stdout = true
Don't forget to include
--color always in most jobs, because bacon uses style information to parse the output of cargo.
Beware of job references in
on_success: you must avoid loops with 2 jobs calling themselves mutually, which would make bacon run all the time.
The default job is the one which is launched when you don't specify one in argument to the bacon command (ie
It's also the one you can run with the
If you use neovim, you probably want to use the nvim-bacon plugin.
This plugin needs bacon to be launched with the
-e argument which makes it keep a
.bacon-locations file up to date (you'll probably want to put the
.bacon-locations in your global .gitignore).
If you write
export_locations = true in the prefs.toml file, you can omit passing
-e to every bacon command.
Actions are launched
- on key presses, depending on key-binding
- when triggered by a job ending success
Actions are parsed from strings, for example
quit (long form:
internal:quit) is the action of quitting bacon and can be bound to a key.
An action is either an internal, based on a hardcoded behavior of bacon, or a job reference
|back||Esc||get back to the previous page or job|
|help||h or ?||open the help page|
|quit||q or ctrlq or ctrlc||quit|
|rerun||F5||run current job again|
|toggle-raw-output||display the untransformed command output|
|toggle-backtrace||b||enable rust backtrace (for example on test failing)|
|toggle-summary||s||display results as abstracts|
|toggle-wrap||w||toggle line wrapping|
|scroll-to-top||Home||scroll to top|
|scroll-to-bottom||End||scroll to bottom|
|scroll-lines(-1)||↑||move one line up|
|scroll-lines(1)||↓||move one line down|
|scroll-pages(-1)||PageUp||move one page up|
|scroll-pages(1)||PageDown||move one page down|
scroll-pages internals are parameterized.
You can for example define a shortcut to move down 5 lines:
shift-d = "scroll-lines(5)"
Job references are useful as actions, which can be bound to key combinations.
They're either role based or name based.
To refer to the job called
test, you use a name based reference:
To refer to a job based on a cargo alias, add
alias:, for example
Role based job references are the following ones:
||the job defined as default in the bacon.toml file|
||the job specified as argument, or the default one if there was none explicit|
||the job which ran before, if any (or we would quit). The