123 lines
5.6 KiB
Markdown
123 lines
5.6 KiB
Markdown
# Configuration Reference
|
|
|
|
goget loads configuration from a TOML file at `~/.config/goget/config.toml`. CLI flags override config file values, which override defaults. The `GOGET_CONFIG` environment variable can be used to specify an alternative config path.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Generate default config
|
|
goget --init-config
|
|
|
|
# Read a value
|
|
goget --config-get timeout
|
|
|
|
# Set a value
|
|
goget --config-set timeout 5m
|
|
|
|
# List all values
|
|
goget --config-list
|
|
|
|
# Remove a value
|
|
goget --config-unset timeout
|
|
```
|
|
|
|
## Configuration Keys
|
|
|
|
### Network
|
|
|
|
| Key | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `timeout` | duration string | `30m` | Request timeout. Set to `0` for auto-calculation based on file size |
|
|
| `parallel` | int | `0` | Parallel connections. `0` = auto (4 for files >100 MB, 1 otherwise) |
|
|
| `proxy` | string | `""` | Proxy server URL (HTTP CONNECT) |
|
|
| `max_speed` | int64 | `0` | Bytes per second cap. `0` = unlimited |
|
|
| `max_retries` | int | `0` | Retry attempts on failure |
|
|
| `dns_servers` | []string | `[]` | Custom DNS servers (e.g. `["1.1.1.1","8.8.8.8"]`) |
|
|
| `ipv4_fallback` | bool | `true` | Whether to fall back to IPv4 if IPv6 is unavailable |
|
|
|
|
### HTTP
|
|
|
|
| Key | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `user_agent` | string | `Goget/1.0.0` | HTTP User-Agent header value |
|
|
| `auto_decompress` | bool | `true` | Auto-decompress gzip/deflate responses |
|
|
| `insecure_skip_verify` | bool | `false` | Skip TLS certificate verification (insecure) |
|
|
| `auto_resume` | bool | `true` | Resume download when `.goget.meta` metadata exists |
|
|
| `cookie_jar` | string | `""` | Path to Netscape-format cookie jar file |
|
|
| `keep_metadata` | bool | `false` | Keep `.goget.meta` files after download completes |
|
|
|
|
### Authentication
|
|
|
|
| Key | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `auth.username` | string | `""` | Default username for HTTP Auth |
|
|
| `auth.password` | string | `""` | Default password (⚠ stored in plain text — prefer `password_file`) |
|
|
| `auth.password_file` | string | `""` | Path to file containing the password |
|
|
| `auth.auth_type` | string | `"auto"` | `basic`, `digest`, or `auto` |
|
|
| `auth.oauth.client_id` | string | `""` | OAuth 2.0 Client ID |
|
|
| `auth.oauth.client_secret` | string | `""` | OAuth 2.0 Client Secret |
|
|
| `auth.oauth.token_url` | string | `""` | OAuth 2.0 Token endpoint URL |
|
|
| `auth.oauth.auth_url` | string | `""` | OAuth 2.0 Authorization endpoint URL |
|
|
| `auth.oauth.redirect_uri` | string | `""` | OAuth 2.0 Redirect URI |
|
|
| `auth.oauth.scopes` | []string | `[]` | OAuth 2.0 scopes |
|
|
| `auth.oauth.access_token` | string | `""` | OAuth 2.0 Access Token |
|
|
| `auth.oauth.refresh_token` | string | `""` | OAuth 2.0 Refresh Token |
|
|
| `auth.oauth.grant_type` | string | `""` | `client_credentials`, `authorization_code`, `password`, `refresh_token` |
|
|
|
|
### Recursive Downloads
|
|
|
|
| Key | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `recursive.enabled` | bool | `false` | Enable recursive downloading |
|
|
| `recursive.max_depth` | int | `3` | Maximum recursion depth |
|
|
| `recursive.follow_external` | bool | `false` | Follow links to external domains |
|
|
| `recursive.exclude_patterns` | []string | `[]` | URL patterns to exclude (simple substring match) |
|
|
| `recursive.include_patterns` | []string | `[]` | URL patterns to include (simple substring match) |
|
|
| `recursive.delay` | duration string | `100ms` | Delay between requests in recursive mode |
|
|
| `recursive.parallel` | int | `0` | Concurrent file downloads in recursive mode. `0` = sequential, `N` = up to N concurrent workers (applies to HTTP, WebDAV, FTP, SFTP) |
|
|
|
|
### Archive Extraction
|
|
|
|
| Key | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `extract.enabled` | bool | `false` | Auto-extract archives after download |
|
|
| `extract.output_dir` | string | `""` | Extraction target directory (empty = same as download dir) |
|
|
| `extract.strip_components` | int | `0` | Number of leading path components to strip |
|
|
| `extract.exclude_patterns` | []string | `[]` | File patterns to exclude from extraction |
|
|
| `extract.preserve_permissions` | bool | `true` | Preserve file permissions from archive |
|
|
| `extract.auto_detect` | bool | `true` | Auto-detect archive format (tar, tar.gz, tar.bz2, zip) |
|
|
|
|
### Output / Display
|
|
|
|
| Key | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `output_dir` | string | `"."` | Default output directory |
|
|
| `verbose` | bool | `true` | Verbose output with progress bar |
|
|
| `debug` | bool | `false` | Debug output with detailed connection info |
|
|
| `color` | string | `"auto"` | Color output: `always`, `never`, or `auto` (honors `NO_COLOR` env var) |
|
|
| `progress_style` | string | `"unicode"` | Progress bar style: `"unicode"` or `"dot"` |
|
|
| `show_eta` | bool | `true` | Display estimated time remaining |
|
|
| `checksum_algo` | string | `"sha256"` | Default checksum algorithm |
|
|
|
|
## Password Security
|
|
|
|
Passwords are stored in plain text in the config file by default. For better security, use `auth.password_file` to reference an external file, and set `GOGET_PASSWORD` as an environment variable — the config loader will prefer it.
|
|
|
|
When `config.Save()` is called, the `password`, `client_secret`, `access_token`, and `refresh_token` fields are stripped from the output to prevent accidental credential leakage.
|
|
|
|
## Config Resolution Order
|
|
|
|
1. **CLI flags** (highest priority) — override everything below
|
|
2. **Config file** — `~/.config/goget/config.toml` (or `GOGET_CONFIG` path)
|
|
3. **Defaults** (lowest priority) — hardcoded in `DefaultConfig()`
|
|
|
|
The `config.Merge()` method applies CLI overrides after loading:
|
|
|
|
```go
|
|
cfg, _ := config.Load("")
|
|
cfg.Merge(&config.CLIFlags{
|
|
Timeout: 5 * time.Minute,
|
|
Parallel: 8,
|
|
})
|
|
```
|