Hatch configuration¶
Configuration for Hatch itself is stored in a config.toml
file located by default in one of the following platform-specific directories.
Platform | Path |
---|---|
macOS | ~/Library/Preferences/hatch |
Windows | %USERPROFILE%\AppData\Local\hatch |
Unix | $XDG_CONFIG_HOME/hatch (the XDG_CONFIG_HOME environment variable default is ~/.config ) |
You can select a custom path to the file using the --config
root option or by setting the HATCH_CONFIG
environment variable.
The file can be managed by the config
command group.
Mode¶
The mode
key controls how Hatch selects the project to work on.
Local¶
mode = "local"
By default, Hatch will look for a pyproject.toml
file in the current working directory and any parent directories. The directory storing the first found file will be considered the project root.
Project¶
mode = "project"
project = "proj1"
[projects]
proj1 = "/path/to/project1"
proj2 = {"location": "/path/to/project2"}
[dirs]
project = ["/path/to/monorepo1", "/path/to/monorepo2"]
In this mode, Hatch will only work on the selected project
. The project is located using multiple heuristics:
- If the project is defined in the
projects
table then it must be a string, or an inline table with alocation
key, that is the full path to the project. - If the project matches a subdirectory in any of the directories listed in
dirs.project
, then that will be used as the project root.
An error will occur if the project cannot be found.
You can use the config set
command to change the project you are working on:
$ hatch config set project proj2
New setting:
project = "proj2"
The project can be selected on a per-command basis with the -p
/--project
(environment variable HATCH_PROJECT
) root option.
Aware¶
mode = "aware"
This is essentially the local
mode with a fallback to the project
mode.
Shell¶
You can control the shell used to enter environments with the shell
key.
If defined as a string, it must be the name of one of the supported shells and be available along your PATH
.
shell = "fish"
If the executable name of your shell differs from the supported name, you can define the shell
as a table with name
and path
keys.
[shell]
name = "bash"
path = "/bin/ash"
You can change the default arguments used to spawn most shells with the args
key. The default for such supported shells is usually ["-i"]
.
[shell]
name = "bash"
args = ["--login"]
Supported¶
Shell | Name | Arguments | macOS | Windows | Unix |
---|---|---|---|---|---|
Almquist shell | ash | ["-i"] | |||
Bash | bash | ["-i"] | |||
Command Prompt | cmd | ||||
C shell | csh | ["-i"] | |||
fish | fish | ["-i"] | |||
Nushell | nu | [] | |||
PowerShell | pwsh , powershell | ||||
tcsh | tcsh | ["-i"] | |||
xonsh | xonsh | ["-i"] | |||
Z shell | zsh | ["-i"] |
Default¶
Hatch will attempt to use the current shell based on parent processes. If the shell cannot be determined, then on Windows systems Hatch will use the SHELL
environment variable, if present, followed by the COMSPEC
environment variable, defaulting to cmd
. On all other platforms only the SHELL
environment variable will be used, defaulting to bash
.
Directories¶
Data¶
[dirs]
data = "..."
This is the directory that is used to persist data. By default it is set to one of the following platform-specific directories.
Platform | Path |
---|---|
macOS | ~/Library/Application Support/hatch |
Windows | %USERPROFILE%\AppData\Local\hatch |
Unix | $XDG_DATA_HOME/hatch (the XDG_DATA_HOME environment variable default is ~/.local/share ) |
You can select a custom path to the directory using the --data-dir
root option or by setting the HATCH_DATA_DIR
environment variable.
Cache¶
[dirs]
cache = "..."
This is the directory that is used to cache data. By default it is set to one of the following platform-specific directories.
Platform | Path |
---|---|
macOS | ~/Library/Caches/hatch |
Windows | %USERPROFILE%\AppData\Local\hatch\Cache |
Unix | $XDG_CACHE_HOME/hatch (the XDG_CACHE_HOME environment variable default is ~/.cache ) |
You can select a custom path to the directory using the --cache-dir
root option or by setting the HATCH_CACHE_DIR
environment variable.
Environments¶
[dirs.env]
<ENV_TYPE> = "..."
This determines where to store environments, with every key being the type of environment and the value being the desired storage location.
For example, if you wanted to store virtual environments in a .virtualenvs
directory within your home directory, you could specify the following:
[dirs.env]
virtual = "~/.virtualenvs"
Any environment variables are also expanded.
If the path is not absolute, then it will be relative to the project root. So if you wanted to use a directory named .hatch
in each project directory, you could do:
[dirs.env]
virtual = ".hatch"
Any type of environment that is not explicitly defined will default to <DATA_DIR>/env/<ENV_TYPE>
.
Python installations¶
[dirs]
python = "..."
This determines where to install specific versions of Python, with the full path being <VALUE>/pythons
.
The following values have special meanings.
Value | Path |
---|---|
isolated (default) | <DATA_DIR>/pythons |
shared | ~/.pythons |
Terminal¶
You can configure how all output is displayed using the terminal.styles
table. These settings are also applied to all plugins.
[terminal.styles]
error = "..."
...
Cross-platform terminal capabilities are provided by Rich.
Output levels¶
The levels of output are as follows. Note that the verbosity indicates the minimum level at which the output is displayed.
Level | Default | Verbosity | Description |
---|---|---|---|
debug | bold | 1 - 3 | Messages that are not useful for most user experiences |
error | bold red | -2 | Messages indicating some unrecoverable error |
info | bold | 0 | Messages conveying basic information |
success | bold cyan | 0 | Messages indicating some positive outcome |
waiting | bold magenta | 0 | Messages shown before potentially time consuming operations |
warning | bold yellow | -1 | Messages conveying important information |
See the documentation and color reference for guidance on valid values.
Spinner¶
You can select the sequence used for waiting animations with the spinner
option.
[terminal.styles]
spinner = "..."