Configuration
Settings can be configured in the following ways, in order of priority:
- Command line flag
- Environment variables
- Configuration file
- Default value
The location of the configuration file can be specified using --config or the
environment variable SYND_CONFIG_FILE.
By default, synd searches the following locations depending on the platform:
| Platform | Locations |
|---|---|
| Linux | $XDG_CONFIG_HOME/syndicationd/config.toml$HOME/.config/syndicationd/config.toml |
| macOS | $HOME/Library/Application Support/syndicationd/config.toml |
| Windows | {FOLDERID_RoamingAppData}/syndicationd/config.toml |
synd does not automatically create configuration files.
To create one, run:
synd config init > config.toml
To inspect the resolved configuration after flags, environment variables,
configuration files, and defaults have been applied, use config view.
synd config view
synd config view -o json
Common Settings
| Flag | Environment variable | Configuration file | Default | Description |
|---|---|---|---|---|
--config | SYND_CONFIG_FILE | - | see above | Configuration file path |
--log | SYND_LOG_FILE | [log.path] | see synd config view | Log file path |
--cache-dir | SYND_CACHE_DIR | [cache.directory] | see synd config view | Cache directory |
--theme | SYND_THEME | [theme.name] | ferra | Theme name |
--sqlite-db | SYND_SQLITE_DB | [backend.sqlite_db] | see synd config view | SQLite database path |
--entries-limit | SYND_ENTRIES_LIMIT | [feed.entries_limit] | 200 | Feed entries to fetch |
--browser | SYND_BROWSER | [feed.browser.command] | - | Command to browse feed |
--browser-args | SYND_BROWSER_ARGS | [feed.browser.args] | [] | Command args to browse feed |
| - | - | [keys.<layer>.keymap] | built-in keymap | Custom key bindings |
Theme
The theme can be changed with --theme, SYND_THEME, or [theme.name].
Run synd --help to see the available values.
Log
The default log file path is based on ProjectDirs::data_dir().
Use synd config view to inspect the resolved output destination.
The log directives can be changed with the SYND_LOG environment variable.
SYND_LOG=synd=debug synd
Local Data
The local database path can be set with --sqlite-db, SYND_SQLITE_DB, or
[backend.sqlite_db].
synd --sqlite-db ~/.local/share/syndicationd/synd.db
Additional Categories
To add a category, add the following content to the configuration file:
[categories.rust]
icon = { symbol = "R", color = { rgb = 0xF74C00 } }
aliases = ["rs"]
Keymap
Custom key bindings are configured in the config file and merged with the built-in keymap.
[keys.entries]
keymap = [
{ on = "j", command = "entries.next", desc = "Next entry" },
{ on = ["g", "g"], command = "entries.first", desc = "Go to first entry" },
{ on = "up", command = "no_op" },
]
See Keymap for layer names, command names, key notation, and merge behavior.
Keymap
synd key bindings are grouped by keymap layer. A layer is an active UI
context, such as entries, feeds, or filter.
Custom Key Bindings
Key bindings can be customized in the configuration file under
[keys.<layer>].
[keys.entries]
keymap = [
{ on = "j", command = "entries.next", desc = "Next entry" },
{ on = ["g", "g"], command = "entries.first", desc = "Go to first entry" },
{ on = "up", command = "no_op" },
]
on is either a single key string or an array of key strings for multi-key
sequences. The example above binds g followed by g.
User keymaps are merged onto the default keymaps:
- a binding with the same
onin the same layer replaces the default binding - a binding with a new
onis added to that layer command = "no_op"disables that key sequence in that layer
desc is optional description metadata for the binding.
Commands are validated against the layer. For example, entries.next is valid
in the entries layer, but not in the feeds layer.
Key names use the same notation as the default keymap, including enter,
space, tab, backtab, esc, arrow keys, C-c for Control-C, S-t for
Shift-T, and A-enter for Alt-Enter.
Configurable layers:
| Layer | Context |
|---|---|
app | Always active application keys |
global | Always active normal keys |
login | Authentication screen |
tabs | Tab navigation |
entries | Entries tab |
feeds | Feeds tab |
filter | Entry/feed filter controls |
unsubscribe-popup | Feed unsubscribe confirmation |
github-notifications | GitHub notifications tab |
github-notification-filter-popup | GitHub notification filter popup |
category-filter and search-prompt are runtime-generated layers. Their
dynamic bindings are managed by the application for now.
Commands
| Command | Layer |
|---|---|
no_op | any layer |
app.quit | app, global |
theme.rotate | global |
login.authenticate | login |
login.provider.prev | login |
login.provider.next | login |
tabs.prev | tabs |
tabs.next | tabs |
entries.prev | entries |
entries.next | entries |
entries.first | entries |
entries.last | entries |
entries.reload | entries |
entries.open | entries |
entries.browse | entries |
feeds.prev | feeds |
feeds.next | feeds |
feeds.first | feeds |
feeds.last | feeds |
feeds.subscribe | feeds |
feeds.edit | feeds |
feeds.unsubscribe | feeds |
feeds.refresh-selected | feeds |
feeds.reload | feeds |
feeds.open | feeds |
feeds.unsubscribe-popup.prev | unsubscribe-popup |
feeds.unsubscribe-popup.next | unsubscribe-popup |
feeds.unsubscribe-popup.select | unsubscribe-popup |
feeds.unsubscribe-popup.cancel | unsubscribe-popup |
filter.requirement.prev | filter |
filter.requirement.next | filter |
filter.category | filter |
filter.search | filter |
filter.close | filter |
github-notifications.prev | github-notifications |
github-notifications.next | github-notifications |
github-notifications.first | github-notifications |
github-notifications.last | github-notifications |
github-notifications.open | github-notifications |
github-notifications.open-and-done | github-notifications |
github-notifications.reload | github-notifications |
github-notifications.mark-done | github-notifications |
github-notifications.mark-all-done | github-notifications |
github-notifications.unsubscribe-thread | github-notifications |
github-notifications.filter.open | github-notifications |
github-notifications.filter.close | github-notification-filter-popup |
github-notifications.filter.include-unread.toggle | github-notification-filter-popup |
github-notifications.filter.participating.toggle | github-notification-filter-popup |
github-notifications.filter.visibility-public.toggle | github-notification-filter-popup |
github-notifications.filter.visibility-private.toggle | github-notification-filter-popup |
github-notifications.filter.pr-open.toggle | github-notification-filter-popup |
github-notifications.filter.pr-closed.toggle | github-notification-filter-popup |
github-notifications.filter.pr-merged.toggle | github-notification-filter-popup |
github-notifications.filter.reason-mentioned.toggle | github-notification-filter-popup |
github-notifications.filter.reason-review-requested.toggle | github-notification-filter-popup |
Default Key Bindings
| Key | Description |
|---|---|
k/j | Move up/down |
gg | Go to first |
ge | Go to end |
Tab | Switch tab |
Enter | Open entry/feed with web browser |
Space | Open entry with text browser ($SYND_BROWSER) |
a | Add feed subscription on the Feeds tab |
e | Edit subscribed feed on the Feeds tab |
d | Delete subscribed feed on the Feeds tab |
r | Reload entries/feeds |
h/l | Change requirement filter |
c | Activate category filter (Esc to deactivate) |
+ | Activate all categories on category filter |
- | Deactivate all categories on category filter |
/ | Activate keyword search (Esc to deactivate) |
q | Quit app |
Privacy Policy
Personal Information You Provide
When logging in using Google
The email address associated with your Google account.
When logging in using GitHub
The email address associated with your GitHub account.
Our Use of Personal Information
We use a hashed value of your email address as the user_id.
The email address is never used for any other purpose.
The email address is not persisted in the filesystem or sent to external services.
The user_id is recorded in logs and traces, which are deleted after 14 days.
The user_id is used for applying rate limits on API requests and as the key for persisting subscribed feed data.
The user_id is used for error and performance investigations.