Config

The full config is read and inherited from many locations, including

  • $XDG_CONFIG_DIR/ick/ick.toml

  • $XDG_CONFIG_DIR/ick/ick.toml.local

  • $REPO/ick.toml

  • $REPO/pyproject.toml

Any of these can define one or more [[ruleset]] sections, as detailed below.

For environments that have their own convention for settings files, a repo_settings setting specifies a TOML or YAML file within the target repo containing more configuration settings:

[tool.ick.repo_settings]
file = "my_settings.yaml"
key = "ick"

Then in the repo’s my_settings.yaml:

ick:
  explicit_project_dirs:
    - subproject1
    - subproject2
  outer_project_dirs:
    - services/

The file can include a path into a subdirectory, and the key can be a dotted name to drill down through nested dictionaries in the file.

outer_project_dirs is for nested-project layouts: it tells project discovery to keep looking beneath the listed directories even if a parent project has already been found there.

Rulesets

A ruleset is a directory or repo url that contains more ick.toml files that define hooks and can contain arbitrary other files that we want to exist on the filesystem (for example, compiled Go binaries).

The syntax with the doubled square brackets is called an Array of Tables.

[[ruleset]]
url = "https://github.com/thatch/hobbyhorse"
prefix = "hh/"

(or in pyproject.toml)

[[tool.ick.ruleset]]
url = "https://github.com/thatch/hobbyhorse"
prefix = "hh/"

The .local one is in case the preceding one is provided by your employer, and you want to add to it to flag more things with your own (personal) checks.