There were many undocumented options and it was quite unclear what the user could change without looking into the source code itself. Hopefully these changes should greatly simplify the configuration process!
FH7DVISTYYLLNT44W3MPG7Z4ZHIETMBPTRBPPCARPNX5I2BQKEMAC
The location of Pijul's global configuration depends on the conventions of the user's operating system; Pijul will first try to instantiate a global configuration in the user's configuration directory according to [this table](https://docs.rs/dirs-next/2.0.0/dirs_next/fn.config_dir.html). If pijul cannot access the conventional config location, it will fall back to the [home directory](https://docs.rs/dirs-next/2.0.0/dirs_next/fn.home_dir.html), using `$HOME/.config/pijul`. If that fails, `$HOME/.pijulconfig` will be tried as a last resort.
### Global configuration data
Pijul supports the following global config values:
| Key | Description | Format |
|--------------------|----------------------------------------------------------------|-------------------------------|
| `colors` | If Pijul should display colorful output | [Choice](#choice) |
| `pager` | If Pijul should use a pager (eg `less`) to display diff output | [Choice](#choice) |
| `unrecord_changes` | How many changes to show when runnning `pijul unrecord` | Number |
| `author` | Set the default author details | [Author](#author) |
| `template` | Set a default template when using `pijul record` | [Template](#template) |
| `ignore_kinds` | Set default ignore files when using `pijul init --kind=<KIND>` | [Ignore kinds](#ignore-kinds) |
Here is an example of a fully-configured `config.toml`:
```toml
colors = "always"
pager = "always"
unrecord_changes = 1
The location of Pijul's global configuration depends on the conventions of the user's operating system; Pijul will first try to instantiate a global configuration in the user's congiruation directory according to [this table](https://docs.rs/dirs-next/2.0.0/dirs_next/fn.config_dir.html). If pijul cannot access the conventional config location, it will fall back to the [home directory](https://docs.rs/dirs-next/2.0.0/dirs_next/fn.home_dir.html), using `$HOME/.config/pijul`. If that fails, `$HOME/.pijulconfig` will be tried as a last resort.
[author]
name = "ferris"
full_name = "Ferris the Crab"
email = "ferris@example.com"
key_path = "/home/ferris/.ssh/id_ed25519.pub"
[template]
message = "/home/ferris/Documents/a_custom_message_for_me.txt"
description = "/home/ferris/Documents/a_custom_description_for_you.txt"
[ignore_kinds]
rust = ["target"]
```
#### Author
You can give Pijul some basic information to identify yourself using any of the following fields:
```toml
[author]
name = "<REMOTE USERNAME>"
full_name = "<DISPLAY NAME (optional)>"
email = "<EMAIL (optional)>"
key_path = "<PATH TO SSH PUBLIC KEY (optional)>"
```
Unlike many other version control systems, Pijul does not permanently assign these details to changes. For more information please reference [the section on keys](keys.md).
#### Template
If you have a file containing some default text, Pijul can automatically load those files into the relevant fields using the following configuration:
```toml
[template]
message = "<MESSAGE FILE PATH (optional)>"
description = "<DESCRIPTION FILE PATH (optional)>"
```
#### Ignore Kinds
Pijul can be configured to automatically set up the [`.ignore` file](#ignore) when running `pijul init --kind <KIND>`. Here is an idea of what it might look like in practice:
```toml
[ignore_kinds]
rust = ["target", "*.perf"]
python = ["dist", "build", "eggs"]
```
Users can take advantage of repository-specific configuration by editing the appropriate toml file: `<repo>/.pijul/config`. Repository-specific configuration settings have a higher precedence than global configuration settings. Pijul supports the following repository config values:
| Value | Description | Format |
|----------------------|------------------------------------------------------------------|---------------------|
| `colors` | If Pijul should display colorful output | [Choice](#choice) |
| `pager` | If Pijul should use a pager (eg `less`) to display diff output | [Choice](#choice) |
| `unrecord_changes` | How many changes to show when runnning `pijul unrecord` | Number |
| `default_remote` | The default remote to interact with | String |
| `extra_dependencies` | Extra changes that should always be depended upon | List[String] |
| `remotes` | Named remotes that can be interacted with | [Remotes](#remotes) |
| `hooks` | Hooks to run before recording a change | [Hooks](#hooks) |
Users can take advantage of repository-specific configuration by editing the appropriate toml file: `<repo>/.pijul/config.toml`. Repository-specific configuration settings have a higher precedence than global configuration settings.
Here is an example of a fully-configured `.pijul/config`:
```toml
colors = "always"
pager = "always"
unrecord_changes = 1
default_remote = "ferris@ssh.pijul.com:pijul/pijul"
extra_dependencies = ["SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC"]
[hooks]
record = [ "cargo fmt" ]
```
#### Remotes
A remote is simply the address of where to find a Pijul repository. For more information please reference [pijul remote](reference/remote.md).
#### Hooks
A hook is a script run in the default shell before a command is executed. Currently only `pijul record` is supported. Here is an example:
```toml
[hooks]
record = [ "cargo fmt" ]
```
## Choice
A choice in Pijul can have 3 possible values:
1. `auto`
2. `always`
3. `never`