src/*.zig file per app or daemon, each exporting a Config struct (plus nested widget configs).
| Module | Application | Notes |
|---|---|---|
bar | otter-bar | LayoutConfig, ClockConfig, WorkspacesConfig, BatteryConfig, widgets |
launcher | otter-launcher | Appearance, sort order, keybinds |
dock | otter-dock | Workspace-only, not in metapackage |
notifications | otter-notifications | Timeout, position, styling |
wallpaper | otter-wallpaper | Mode, paths, transitions |
osd | otter-osd | Volume/brightness overlay |
jade | otter-jade | Layer-shell pet |
logout | otter-logout | Power menu overlay |
overview | otter-overview | Workspace overlay: axis, card scale, captures, empty-workspace policy |
polkit | otter-polkit | Auth dialog chrome |
lock | otter-lock | Colors, layout, PAM, focus output |
greeter | otter-greeter | Login UI tokens |
idle | otter-idle | Idle timeouts and dim |
monitor | otter-monitor | refresh_interval_seconds (1..3600) |
transcribe | otter-transcribe | Model and device prefs |
term | otter-term | Font, scrollback, palette |
theme_gen | otter-theme-gen | Generation options |
assist | otter-assist | Backend settings (otter-shell-extras) |
clicker | otter-clicker | Interval, button, click type, fixed position |
search | otter-search | Roots, budgets, content indexing, max_results |
Monitor example
pub const Config = struct {
refresh_interval_seconds: u16 = 3, // clamped 1..3600 at runtime
};
Assist example
pub const Backend = enum { cpu, vulkan };
pub const Config = struct {
backend: Backend = .vulkan,
vulkan_device: i32 = -1,
idle_seconds: u32 = 120,
knowledge_enabled: bool = true,
web_enabled: bool = true,
web_always_allow: bool = false,
weather_enabled: bool = true,
desktop_search_enabled: bool = true,
desktop_search_always_allow: bool = false,
pika_search_url: []const u8 = "https://search.pika-os.com/search?lang=en",
knowledge_index_dir: []const u8 = "/usr/lib/otter-assist/indexes",
max_tool_calls: u8 = 4,
max_web_searches: u8 = 2,
};
Search example
pub const Config = struct {
enable_xdg_user_dirs: bool = true,
enable_home_config: bool = true,
enable_home_shallow: bool = true,
content_indexing: bool = true,
max_content_file_bytes: u64 = 10 * 1024 * 1024,
cache_budget_max_bytes: u64 = 256 * 1024 * 1024,
max_files_per_root: u64 = 75_000,
max_results: u32 = 10, // daemon clamps to 50
root: conf.Dynamic(Root, "root") = .{},
};
calc, emoji, clip, etc.) live in otter-tools-core app_configs.zig, not here.
