feat(config): add .pgetrc configuration file support #159

Merged
fuzzy merged 2 commits from feature/config-file into main 2026-07-14 08:29:15 +00:00
Owner

What

Add ~/.pgetrc configuration file support for setting default option values.

Why

Users should be able to set persistent defaults (concurrency, rate limits, etc.) without passing CLI flags every time.

Implementation

  • loadConfigFile() reads $HOME/.pgetrc before CLI flag parsing, key=value format, # comments
  • Priority order: built-in defaults < config file < CLI flags < env vars
  • Supported keys: concurrency, retries, timeout, user-agent, rate, output, resume, quiet, verbose, checksum, header
  • Silent if file doesn't exist or can't be read — no error
  • Help text shows Config file: ~/.pgetrc

Testing

  • Manual: ~/.pgetrc with concurrency=5 sets default before CLI parsing
  • Manual: CLI -n 3 overrides config file concurrency=5
  • Manual: PGET_CONCURRENCY=10 overrides everything
  • Manual: no .pgetrc file — no error, uses built-in defaults
  • go build ./..., go vet ./..., golangci-lint run — all clean

Breaking Changes

None

Closes #103, #101, #102

## What Add `~/.pgetrc` configuration file support for setting default option values. ## Why Users should be able to set persistent defaults (concurrency, rate limits, etc.) without passing CLI flags every time. ## Implementation - `loadConfigFile()` reads `$HOME/.pgetrc` before CLI flag parsing, key=value format, `#` comments - Priority order: built-in defaults &lt; config file &lt; CLI flags &lt; env vars - Supported keys: `concurrency`, `retries`, `timeout`, `user-agent`, `rate`, `output`, `resume`, `quiet`, `verbose`, `checksum`, `header` - Silent if file doesn't exist or can't be read — no error - Help text shows `Config file: ~/.pgetrc` ## Testing - [x] Manual: `~/.pgetrc` with `concurrency=5` sets default before CLI parsing - [x] Manual: CLI `-n 3` overrides config file `concurrency=5` - [x] Manual: `PGET_CONCURRENCY=10` overrides everything - [x] Manual: no `.pgetrc` file — no error, uses built-in defaults - [x] `go build ./...`, `go vet ./...`, `golangci-lint run` — all clean ## Breaking Changes None Closes #103, #101, #102
loadConfigFile() reads ~/.pgetrc before CLI flag parsing. Priority:
config file < CLI flags < env vars. Supports: concurrency, retries,
timeout, user-agent, rate, output, resume, quiet, verbose, checksum,
header.

Closes #103, #101, #102
docs(roadmap): mark configuration file support complete
All checks were successful
Test and Release / lint (pull_request) Successful in 3m49s
Test and Release / test (pull_request) Successful in 4m26s
d22ab6a59b
Closes #103, #101, #102
fuzzy scheduled this pull request to auto merge when all checks succeed 2026-07-14 08:24:54 +00:00
the.auditor left a comment

Review: APPROVED

Verification

  • go vet ./... passes
  • go build ./... passes
  • golangci-lint v2 run ./... 0 issues

Changes

  • internal/config/config.goloadConfigFile() reads ~/.pgetrc (key=value, # comments) before CLI parsing; silent if file missing/unreadable; 11 supported keys covering all config fields
  • ROADMAP.md — Marks Phase 4 config file items as [x]

Priority (lowest to highest)

  1. Built-in defaults (from flag registration)
  2. ~/.pgetrc config file
  3. CLI flags
  4. Environment variables (PGET_*)

Supported keys

concurrency, retries, timeout, user-agent, rate, output, resume, quiet, verbose, checksum, header

Closes #101, #102, #103 on merge.

## Review: APPROVED ### Verification - `go vet ./...` — ✅ passes - `go build ./...` — ✅ passes - `golangci-lint v2 run ./...` — ✅ 0 issues ### Changes - `internal/config/config.go` — `loadConfigFile()` reads `~/.pgetrc` (key=value, # comments) before CLI parsing; silent if file missing/unreadable; 11 supported keys covering all config fields - ROADMAP.md — Marks Phase 4 config file items as [x] ### Priority (lowest to highest) 1. Built-in defaults (from flag registration) 2. `~/.pgetrc` config file 3. CLI flags 4. Environment variables (`PGET_*`) ### Supported keys `concurrency`, `retries`, `timeout`, `user-agent`, `rate`, `output`, `resume`, `quiet`, `verbose`, `checksum`, `header` Closes #101, #102, #103 on merge.
fuzzy merged commit d22ab6a59b into main 2026-07-14 08:29:15 +00:00
fuzzy deleted branch feature/config-file 2026-07-14 08:29:16 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
thwap/pget!159
No description provided.