configuration
slk reads a single TOML file at ~/.config/slk/config.toml.
Every key is optional — sensible defaults cover everything. This page
walks through each section in the order you'd typically reach for it.
Copy this into ~/.config/slk/config.toml as a starting point, then trim what you don't need.
[general] default_workspace = "myteam" [appearance] theme = "dracula" timestamp_format = "3:04 PM" [animations] enabled = true smooth_scrolling = true typing_indicators = true [notifications] enabled = true on_mention = true on_dm = true on_keyword = ["deploy", "incident"] quiet_hours = "22:00-08:00" # planned [cache] message_retention_days = 30 max_db_size_mb = 500 [sections.Alerts] channels = ["alerts", "ops", "*-alerts"] order = 1 [sections.Engineering] channels = ["eng-*", "deploys", "bugs"] order = 2 [theme] primary = "#4A9EFF" accent = "#50C878" background = "#1A1A2E" text = "#E0E0E0"
Workspace-wide defaults.
default_workspace — name of the workspace to focus on launch. Useful when you have many connected workspaces and always start in the same one.How slk looks at the surface level.
theme — name of any built-in or custom theme. See all 12 built-in themes. Live-switch at runtime with Ctrl+y.timestamp_format — Go time-format string. "3:04 PM" for 12-hour, "15:04" for 24-hour, "15:04:05" if you want seconds.If your terminal is slow or you find motion distracting, set enabled = false and the others stop applying.
enabled — master switch. true by default.smooth_scrolling — interpolated scrolling vs. line-at-a-time jumps.typing_indicators — show "@dani is typing…" pulses.OS-level desktop notifications. Suppressed automatically when you're focused on the relevant channel.
enabled — master switch.on_mention — fire on @you, @here, @channel.on_dm — fire on direct messages.on_keyword — list of strings; fires whenever a message contains any of them. Case-insensitive.quiet_hours — planned. A "HH:MM-HH:MM" window during which all notifications are suppressed.slk keeps a local SQLite cache of message history. These knobs control how aggressive it is.
message_retention_days — how many days of scrollback to keep. Older messages are evicted on the next backfill.max_db_size_mb — hard cap on the cache file size. When hit, the oldest messages are dropped first.By default channels are grouped by Slack's own categories. You can override that with one or more [sections.Name] tables. Each section is a glob over channel names.
[sections.Alerts] channels = ["alerts", "ops", "*-alerts"] order = 1 [sections.Engineering] channels = ["eng-*", "deploys", "bugs"] order = 2
channels — a list of glob patterns. Any channel matching one is rolled into this section.order — sort key. Lower numbers appear higher in the sidebar.Alerts, Engineering).If you like a built-in theme but want to nudge a few colors, set them under [theme]. They override the active theme's values, leaving everything else intact.
[theme] primary = "#4A9EFF" accent = "#50C878" background = "#1A1A2E" text = "#E0E0E0"
For a full theme — every color, sidebar variants, etc. — write a custom theme file instead (next section).
Drop a .toml file into ~/.config/slk/themes/ to add a new theme. The filename (minus extension) is the theme's slug; set theme = "<slug>" under [appearance] to use it.
name = "My Theme" [colors] primary = "#BD93F9" accent = "#50FA7B" warning = "#FFB86C" error = "#FF5555" background = "#282A36" surface = "#343746" surface_dark = "#21222C" text = "#F8F8F2" text_muted = "#6272A4" border = "#44475A" # Optional: separate sidebar/rail palette so the sidebar can be darker # than the message pane (Slack's default look). Falls back to # background/text/text_muted/surface_dark when omitted. sidebar_background = "#19171D" sidebar_text = "#D1D2D3" sidebar_text_muted = "#9A9B9E" rail_background = "#19171D"
slk follows the XDG base directory spec.
| Path | Contents |
|---|---|
~/.config/slk/ | Configuration, custom themes |
~/.local/share/slk/ | SQLite cache, tokens |
~/.cache/slk/ | Avatars, image cache |
Stuck or want a key documented that's not here? Open an issue.