Configuration
Config File Location
When starting Tattoy for the first time, the default config file is copied to your filesystem.
- Linux:
$HOME/.config/tattoy/tattoy.toml
. - MacOS:
$HOME/Library/Application Support/tattoy/tattoy.toml
- Windows:
%LOCALAPPDATA%\tattoy\tattoy.toml
.
You can start Tattoy with a custom config file using: tattoy --main-config <path/to/file>
.
Because Tattoy's configuration requires a file containing the terminal palette's true colour values (palette.toml
), you can also start Tattoy with an entire custom config directory using: tattoy --config-dir <path/to/directory>
.
Default Config
# The command to run in Tattoy. Defaults to your current shell defined in the
# `SHELL` env var.
# command = "/usr/bin/zsh"
# The log level, one of: "off", "error", "warn", "info", "debug", "trace"
log_level = "off"
# The path to the log file. Defaults to your OS's `XDG_STATE_DIR`.
# See: https://specifications.freedesktop.org/basedir-spec/latest/
# log_path = ""
# The target frame rate
frame_rate = 30
# Whether to show a small blue indicator in the very top-right of the terminal screen.
# It can be useful to indicate that Tattoy is indeed running.
show_tattoy_indicator = true
# Whether to show the startup logo.
show_startup_logo = true
# The number of lines in the scrollback. Any lines beyond this are removed.
scrollback_size = 1000
[notifications]
enabled = true
opacity = 0.9
# The minimum level of notifications to display.
# One of: "error", "warn", "info", "debug", "trace".
level = "info"
# The amount of time in seconds to display each notification.
duration = 5.0
# Change various colour qualities of the final composited render.
[color]
saturation = 0.0
brightness = 0.0
hue = 0.0
# Automatically increases the foreground colour of alphanumeric text. This includes
# international language characters, but hopefully not common characters used in UI
# elements such as borders etc. It uses the WCAG 2.1 algorithm to define the contrast.
# For normal text on the web they recommend a minimum contrast of 4.5. Note that only
# the foreground colour is ever changed (as background colours are used for UIs). The
# target contrast is searched for by lightening, then darkening and if neither reach
# the target contrast then the larger of the 2 found contrasts is used.
[text_contrast]
enabled = true
target_contrast = 2.0
# When set to false, all text is automatically adjusted, even non-alphanumeric characters
# like UI border elements etc. The only characters that aren't adjusted are the UTF8
# half blocks (eg ▀) that are used to render "graphics", as in the shaders for example.
apply_to_readable_text_only = true
[minimap]
enabled = false
animation_speed = 0.15
# The maximum width of the minimap. It can be narrower when the scrollback is long
# in order to maintain a consistent aspect ratio.
max_width = 10
[shader]
enabled = false
opacity = 0.75
layer = -10
# Whether to render the computed shader from the GPU. The shader pixels can still be
# used for other purposes such as defining the foreground colour of the terminal's text,
# see `render_shader_colours_to_text`.
render = true
# It can be useful to disable this for certain GUI terminal shaders (such as Ghostty shaders)
# that also take responsibility for rendering terminal text. Tattoy can only send a crude
# representation of terminal text as 2 pixels per character, which is sometimes desirable
# when the shader uses the terminal to inform the output of the shader, but it can also cause
# an unnesceray blocky effect when the shader doesn't use the terminal colours.
upload_tty_as_pixels = true
# Use each "cell" of the shader to set the corresponding text cell's foreground colour.
# This is most likely desirable in conjunction with the `render` option, so that the shader
# is only visible via the terminal's text.
render_shader_colours_to_text = false
# Path to a Shadertoy shader on your local filesystem. Is relative to the root of
# Tattoy's config directory.
path = "shaders/soft_shadows.glsl"
[bg_command]
enabled = false
# The command to run. The executable goes in the first position and then each argument must
# be placed in its own quotes in the array.
# Examples:
# * Render a live-updating instance of the common monitoring application "top" in the background.
# `command = ["top"]`
# * Play the "Bad Apple" video in the background.
# `command = ["mpv", "--really-quiet", "--vo=tct", "--volume=0", "https://www.youtube.com/watch?v=UkgK8eUdpAo"]`
command = ["echo", "Hello World"]
# Do you expect the command to exit or not?
# Usually when a command exits Tattoy shows an error notification. But you may want to render a
# command that outputs some static content, for example to print out some ASCII-based image:
# `command = ["chafa", "/path/to/wallpaper.png"]`
# Bare in mind that there's currently no config to re-run the command on terminal resize.
expect_exit = false
opacity = 0.75
layer = -5
[keybindings]
# Whether Tattoy renders anything apart from the TTY. They TTY is always rendered,
# so toggling this will disable all tattoys, effects, eye-candy, etc.
toggle_tattoy = { mods = "ALT", key = "t" }
# Toggle scolling mode whilst in scrollback.
toggle_scrolling = { mods = "ALT", key = "s" }
# Show/hide the minimap.
toggle_minimap = { mods = "ALT", key = "M" }
# Scroll up in the scrollback
scroll_up = { key = "UpArrow" }
# Scroll down in the scrollback
scroll_down = { key = "DownArrow" }
# Exit scrolling mode
scroll_exit = { key = "Escape" }
# Cycle to previous shader in user's shader config directory
shader_prev = { mods = "ALT", key = "9" }
# Cycle to next shader in user's shader config directory
shader_next = { mods = "ALT", key = "0" }