# dsc config
Inspect and validate your `dsc.toml` configuration.
Running `dsc config` without a subcommand prints the env-var overrides (if any), the active config file, the source it came from, and (when discovery selected it) the full search order with markers:
```text
$ dsc config
$DSC_CONFIG: (unset)
$DSC_CONFIG_HOME: (unset)
Active config: /home/marcus/.config/dsc/dsc.toml (from search hierarchy)
Search order:
1. dsc.toml
2. /home/marcus/.config/dsc/dsc.toml <-- active
3. /etc/xdg/dsc/dsc.toml
4. /etc/dsc/dsc.toml
5. /etc/dsc.toml
6. /usr/local/etc/dsc.toml
```
When `--config` or `$DSC_CONFIG` is in effect, the source line shows which selector won (e.g. `(via --config flag)`, `(via $DSC_CONFIG)`) and the search-order list is suppressed (it would be misleading - it was bypassed). See [configuration.md](configuration.md) for the full resolution chain and env-var reference.
## dsc config check
```text
dsc config check [--format text|json|yaml] [--skip-ssh]
```
Probes each configured Discourse and reports two things per install:
- **API** — sends `GET /about.json` with the configured `apikey`/`api_username`. Reports `ok` on 2xx, flags 401/403 with a hint to check credentials, and surfaces other HTTP errors verbatim.
- **SSH** (only when `ssh_host` is set on the entry, and `--skip-ssh` is not passed) — runs `ssh -o BatchMode=yes -o ConnectTimeout=5 <host> true`. Reports the first stderr line on failure so problems are diagnosable at a glance.
Exits non-zero if any install fails any check, making it suitable for CI or pre-deploy gates.
Examples:
```bash
dsc config check
dsc config check --format json
dsc config check --skip-ssh # API-only check, much faster
```