···131131132132`appherder list` shows each app's status in the **SIGNATURE** column: `pinned` (key locked in), `signed` (carries a signature appherder hasn't pinned yet), or `none`.
133133134134+## Configuration
135135+136136+AppHerder's directories and update sources can be customized via `~/.config/appherder/config.toml`. See [Configuration](docs/Configuration.md) for all options.
137137+134138## Under the hood
135139136140AppHerder reads the AppImage's filesystem to grab its icon and desktop entry. SquashFS images are parsed in-process. DwarFS images use the system dwarfsextract tool, falling back to the AppImage's own runtime when the tool isn't available. Everything it writes is tagged, so uninstall and sync only touch its own files.
+91
docs/Configuration.md
···11+# Configuration
22+33+AppHerder reads `~/.config/appherder/config.toml` on startup. Missing or malformed keys fall back to defaults.
44+55+## Example
66+77+```toml
88+appimages_dir = "/data/AppImages"
99+max_saved_versions = 5
1010+bin_dir = "/usr/local/bin"
1111+1212+[sources.firefox]
1313+type = "github"
1414+owner = "mozilla"
1515+repo = "geckodriver"
1616+tag = "latest"
1717+pattern = "Firefox-*.AppImage"
1818+1919+[sources.librewolf]
2020+type = "gitlab"
2121+host = "gitlab.com"
2222+project = "librewolf-community/browser/appimage"
2323+tag = "latest"
2424+pattern = "LibreWolf-*.AppImage"
2525+2626+[sources.myapp]
2727+type = "static"
2828+url = "https://example.com/MyApp-latest.AppImage"
2929+```
3030+3131+## Settings
3232+3333+| Key | Type | Default | Description |
3434+|---|---|---|---|
3535+| `appimages_dir` | string | `~/AppImages` | Directory where AppImages live. |
3636+| `max_saved_versions` | int | `3` | Number of prior versions kept for rollback. |
3737+| `bin_dir` | string | `~/.local/bin` | Directory for `appherder link` symlinks. |
3838+3939+## Source overrides
4040+4141+The `[sources]` table overrides the update source for an app, taking priority over the embedded `.upd_info` ELF section. The key is the app name (the filename without `.appimage`).
4242+4343+### github
4444+4545+GitHub Releases.
4646+4747+```toml
4848+[sources.appname]
4949+type = "github"
5050+owner = "owner"
5151+repo = "repo"
5252+tag = "latest"
5353+pattern = "*-x86_64.AppImage"
5454+```
5555+5656+Set `GH_TOKEN` or `GITHUB_TOKEN` in the environment for higher API rate limits.
5757+5858+### gitlab
5959+6060+GitLab Releases (gitlab.com or self-hosted).
6161+6262+```toml
6363+[sources.appname]
6464+type = "gitlab"
6565+host = "gitlab.com"
6666+project = "group/project"
6767+tag = "latest"
6868+pattern = "*-x86_64.AppImage"
6969+```
7070+7171+Set `GL_TOKEN` or `GITLAB_TOKEN` in the environment for higher API rate limits.
7272+7373+### static
7474+7575+A fixed URL that always serves the latest AppImage.
7676+7777+```toml
7878+[sources.appname]
7979+type = "static"
8080+url = "https://example.com/App-latest.AppImage"
8181+```
8282+8383+### zsync
8484+8585+A zsync control file at a fixed URL.
8686+8787+```toml
8888+[sources.appname]
8989+type = "zsync"
9090+url = "https://example.com/App-latest.AppImage.zsync"
9191+```