# Configuring projectable
Almost every behavior of projectable can be custommized through a simple `toml`
file.
To get started, run `prj --make-config` to create a new config file. Then, run
`prj --config` to get the location of your config file. Go to that directory,
and edit the TOML file.
Additionally, you can create _project local_ configurations. Just create a
`.projectable.toml` file anywhere, and it'll be merged with your global
configuration. This allows you to have specific commands depending on your
build system, programming language, and more!
## Commands
To create a new command, bound to a key, use the `commands` key of the
configuration. This will be a key-value pair.
Here's an example:
```toml
[commands]
"ctrl-e" = "echo Hello, World!"
```
You can use [the command syntax](../README.md#command-syntax) for more dynamic
commands!
### Special Commands
In projectable, you may also define commands that change on a per-file basis.
By default, this is bound to `v`, but can be [changed](#keys).
For example, here's a possible configuration for a `Cargo.toml` file:
```toml
[special_commands]
"Cargo.toml" = ["cargo add {...}", "cargo remove {...}", "cargo build"]
```
When you press `v` while selecting a `Cargo.toml` file, projectable will prompt
you to run one of these commands!
The key part of the configuration accepts globs, so you could generalize this
to run with `Cargo.*` if you'd like this prompt to appear in lock file as well.
## Keys
Many of the default keybinds can be changed in projectable.
For example, if you'd like to change the default up/down selection keys and
still keep the defaults, you could do so with:
```toml
up = ["k", "up"]
down = ["j", "down"]
```
Changing the new file key could look like this:
```toml
[filetree]
new_file = "alt-n"
```
alt and ctrl are the only currently supported modifiers.
For the rest of the possible keybinds, see
[the entire configuration](#all-configuration-options).
## Colors
Like everything else, projectable's colorscheme can be completely user-defined!
"Colors" is a bit of a misnomer; projectable also allows you to control the
text style too, giving you the options of bold or italic text.
Here's an example of a possible color change:
```toml
selected = { color = "rgb(0, 0, 0)", bg = "#FFFFFF", mods = ["italic"] }
[filetree]
border_color = { color = "yellow" }
```
RGB and hex are both supported, along with a list of modifiers. Currently, only
italic and bold are available.
To see all possible color options, see
[the entire configuration reference](#all-configuration-options).
## External Preview Command
The projectable previewer uses two default pagers:
1. `cat` for Unix
2. `type` for Windows
This can be changed! For example, if you want to use
[bat](https://github.com/sharkdp/bat):
```toml
[preview]
preview_cmd = "bat --force-colorization --line-range 0:1000 {}"
```
The `--line-range` is not strictly necessary, but it helps to avoid slowdowns
on massive files.
### Git Pager
You can also modify the `git diff` pager. If you want to use
[delta](https://github.com/dandavison/delta), you can put this into your config:
```toml
[preview]
git_pager = "delta"
```
Your git preview command will become `git diff | delta`!
## All Configuration Options
These are the default configuration options for projectable. You can override
them as you wish! You can check out
[my configuration](../src/config_defaults/_my_config.toml), too.
Generally, the file is split up based on pane. For example, the pane that shows
all of your files corresponds to the `[filetree]` section of the file.
```toml
# General settings
project_roots = [".git"]
# Items of the form: `GLOB = [COMMAND]`
special_commands = {}
# Items of the form `KEY = COMMAND`
commands = {}
esc_to_close = true
# Defaults to ["$SHELL", "-c"]
# exec_cmd = ["zsh", "-ci"]
# Keys
up = ["k", "up"]
down = ["j", "down"]
quit = "q"
help = "?"
all_up = "g"
all_down = "G"
open = "enter"
# Kill processes started by projectable
kill_processes = "ctrl-c"
# Defaults to $EDITOR
# editor_cmd = "nvim"
# General styles
selected = { color = "black", bg = "magenta" }
popup_border_style = { color = "white" }
help_key_style = { color = "lightcyan", mods = ["bold"] }
[preview]
# For unix, uses `type` for windows
preview_cmd = "cat {}"
# Optional git pager
# git_pager = "delta"
down_key = "ctrl-d"
up_key = "ctrl-u"
scroll_amount = 10
border_color = { color = "cyan" }
scroll_bar_color = { color = "magenta" }
# Unreached part of the scroll bar
unreached_bar_color = { color = "blue" }
[filetree]
# Whether to show git diffs
use_git = true
# Ignore certain globs
ignore = []
use_gitignore = true
refresh_time = 1000
# Display directories before files
dirs_first = false
show_hidden_by_default = false
# Whether to show special commads in a fuzzy style. Alternative is a list-like
# view
special_commands_fuzzy = true
# Keys
special_command = "v"
down_three = "ctrl-n"
up_three = "ctrl-p"
exec_cmd = "e"
delete = "d"
search = "/"
# Full refresh of tree
clear = '\'
new_file = "n"
new_dir = "N"
rename = "r"
move_path = "R"
git_filter = "T"
diff_mode = "t"
open_all = "o"
close_all = "O"
mark_selected = "m"
open_under = "l"
close_under = "h"
show_dotfiles = "."
focus = "f"
# Colors
dir_style = { color = "blue", mods = ["italic"] }
filtered_out_message = { color = "yellow" }
border_color = { color = "magenta" }
# Color of git added files
git_added_style = { color = "green" }
git_new_style = { color = "red" }
git_modified_style = { color = "cyan" }
# Color of marked files
marks_style = { color = "yellow" }
[log]
border_color = { color = "blue" }
info = { color = "white" }
error = { color = "red" }
warn = { color = "yellow" }
# Only shown when run with the --debug option
debug = { color = "green" }
trace = { color = "magenta" }
[marks]
# Whether to show marks as relative paths or not
relative = true
open = "M"
delete = "d"
# Color of marks in marks window, NOT in filetree
mark_style = { color = "white" }
```