1 Commits
Author SHA1 Message Date
sneak 2d9d0e7987 Load every setting from one table in internal/config (closes #320)
check / check (push) Canceled after 0s
Config.settings lists each setting once: its key, its environment variable
and the function that loads it. Most rows load through field, whose
arguments give the type, the default and the check. db_url and
cache_max_bytes keep their own load functions. Loading, the unknown-key
and unknown-variable checks and the names in error messages all read the
table. allowlist_hosts now loads through parseHostList.
isKnownConfigKey, envVarNames, strictLoader, validate,
validateAllowlistHostsValue and getStringSlice are gone, with the
getStringSlice tests. The key constants move to the tests, their only
users. README.md lists the settings one item each instead of in a table,
with shorter sentences above the list. A new test checks that this list
and configs/config.example.yml name exactly the keys of the table.

Model: opus-5-5
2026-10-26 21:20:29 +00:00
+23 -22
View File
@@ -678,28 +678,29 @@ refused with 400.
Every setting can be given as an environment variable, in a YAML config file
(`--config`), or both. A variable present in the environment wins over the file,
even when it is empty, and the file wins over the built-in default. The one
exception is a variable named in the file's `env:` section: it is set while the
file loads, so it overrides both the environment the process was started with
and the file's own key. A variable's value is parsed as the same text in the
file would be. The three lists take comma-separated entries, with the spaces
around each trimmed; an empty variable is an empty list. A value that does not
parse or is invalid aborts startup, naming the variable. A variable whose name
exception is a variable set in the file's `env:` section. pixa sets that
variable while loading the file, so the variable wins over the environment pixa
started with. It also wins over the file's key for the same setting. A
variable's value is parsed as the same text in the file would be. A setting that
holds a list takes comma-separated entries, with the spaces around each trimmed.
An empty variable is an empty list. A value that does not parse or is invalid
aborts startup, naming the variable. pixa refuses to start when a variable
starts with `PIXA_` but is not in the list below, such as a misspelled one or
`PIXA_PORT`, aborts startup naming it, as an unknown config key does. The one
other accepted name is `PIXA_CONFIG_PATH`, the config file's path (like
`--config`). The variables set by the file's `env:` section are checked the same
`PIXA_PORT`. The error names the variable, as it names an unknown config key.
pixa also accepts `PIXA_CONFIG_PATH`, which names the config file, like
`--config`. The variables set by the file's `env:` section are checked the same
way.
pixa reads at most one config file: the one given with `--config` (or `-c`),
otherwise the one `PIXA_CONFIG_PATH` names, otherwise the first of these that
pixa finds: `/etc/pixa/config.yml`, `/etc/pixa/config.yaml`,
`~/.config/pixa/config.yml`, `~/.config/pixa/config.yaml`, then `config.yml` and
`config.yaml` in the working directory. A named file that does not exist, cannot
be read or does not parse aborts startup. Of the files pixa looks for on its
own, only one that does not exist is passed over, without a message. One that
pixa cannot read or parse aborts startup, naming the file. So does one in a
directory pixa may not enter, whether or not it is there, since pixa cannot
tell. With no file, pixa uses the environment and the defaults.
pixa reads at most one config file. It reads the file given with `--config` (or
`-c`), or else the one `PIXA_CONFIG_PATH` names. pixa refuses to start when that
file does not exist, cannot be read or does not parse. Without `--config` or
`PIXA_CONFIG_PATH`, pixa looks in `/etc/pixa/`, then in `~/.config/pixa/`, then
in the working directory. In each directory it looks for `config.yml`, then
`config.yaml`. It reads the first file it finds. It skips a missing file without
a message. pixa refuses to start when a file it finds cannot be read or does not
parse, and the error names the file. It also refuses to start when it may not
enter one of these directories, whether or not the file is there, since it
cannot tell. With no file, pixa uses the environment and the defaults.
Each item below is one setting, named by its config key:
@@ -710,9 +711,9 @@ Each item below is one setting, named by its config key:
for the database and the disk cache.
- `db_url`: variable `PIXA_DB_URL`, default `state.sqlite3` in the state
directory. The URL of the SQLite database.
- `cache_max_bytes`: variable `PIXA_CACHE_MAX_BYTES`, default 75% of the free
space plus what the cache holds. The disk cache limit in bytes. `0` turns the
disk cache off.
- `cache_max_bytes`: variable `PIXA_CACHE_MAX_BYTES`, default 75% of the sum of
the free space and what the cache holds. The disk cache limit in bytes. `0`
turns the disk cache off.
- `allowlist_hosts`: variable `PIXA_ALLOWLIST_HOSTS`, default none. The upstream
hosts whose images pixa serves without a signature.
- `referer_blocklist`: variable `PIXA_REFERER_BLOCKLIST`, default none. The