blob: acb47943dd16ff04b74925f9bad7c2e055a798be [file] [log] [blame] [view]
# FFX Config
FFX's configuration management allows you to configure your FFX code without
recompiling. From a high level, configurations can be thought of as key-value
map.
The configuration management code searches in several locations for the value
associated with a key. The search is performed in the following order
and returns the first value found:
1. [Runtime configuration (set by the command line)](#runtime-configuration)
2. [Environment variables](#environment-variables)
3. [Configuration files](#configuration-files)
4. [Heuristics (compiled methods that can guess from the environment)](#heuristics)
## Runtime Configuration
Configuration can be set at runtime when ffx is invoked. The top-level command
accepts a configuration parameter:
```sh
$ fx ffx --config "config=runtime" ...
```
For example, run:
```sh
$ fx ffx --config "config-test=runtime" config get --name config-test
```
The runtime parameter takes the format of comma separated key-value pairs
("{key}={value},{key}={value},etc...") because this is not strongly typed, any
configurations set here will be assumed to be strings.
The daemon runs as its own process and currently the runtime
configuration is not transferred from the CLI to the daemon if the daemon is
started up. It's expected that if you want to configure the daemon using
the runtime configurations, the daemon command will be run manually:
```sh
$ fx ffx --config "config-test=runtime" daemon
```
## Environment variables
Keys can be tied to environment variables as well. This is currently done at
compile time.
Keys can be tied to any number of environment variables and the first
environment variable that resolves to a value is used (in the order that they
are given via the vector parameter).
## Configuration Files
More to come.
## Heuristics
Heuristic configurations use code that is executed at the time of query to
resolve keys to values. This code is set at compile time.
Keys are associated with functions that must match the signature:
```rust
fn(key: &str) -> Option<Value>
```