pacsea/theme/config/
skeletons.rs1pub const THEME_SKELETON_CONTENT: &str = "# Pacsea theme configuration\n\
3#\n\
4# Format: key = value\n\
5# Value formats supported:\n\
6# - #RRGGBB (hex)\n\
7# - R,G,B (decimal, 0-255 each)\n\
8# Example (decimal): text_primary = 205,214,244\n\
9# Lines starting with # are comments.\n\
10#\n\
11# Key naming:\n\
12# Comprehensive names are preferred (shown first). Legacy keys remain supported\n\
13# for compatibility (e.g., \"base\", \"surface1\").\n\
14#\n\
15#-----------------------------------------------------------------------------------------------------------------------\n\
16#\n\
17# ---------- Catppuccin Mocha (dark) ----------\n\
18#\n\
19# Background layers (from darkest to lightest)\n\
20background_base = #1e1e2e\n\
21background_mantle = #181825\n\
22background_crust = #11111b\n\
23#\n\
24# Component surfaces\n\
25surface_level1 = #45475a\n\
26surface_level2 = #585b70\n\
27#\n\
28# Low-contrast lines/borders\n\
29overlay_primary = #7f849c\n\
30overlay_secondary = #9399b2\n\
31#\n\
32# Text hierarchy\n\
33text_primary = #cdd6f4\n\
34text_secondary = #a6adc8\n\
35text_tertiary = #bac2de\n\
36#\n\
37# Accents and semantic colors\n\
38accent_interactive = #74c7ec\n\
39accent_heading = #cba6f7\n\
40accent_emphasis = #b4befe\n\
41semantic_success = #a6e3a1\n\
42semantic_warning = #f9e2af\n\
43semantic_error = #f38ba8\n\
44#\n\
45# ---------- Alternative Theme (Light) ----------\n\
46#\n\
47# # Background layers (from lightest to darkest)\n\
48# background_base = #f5f5f7\n\
49# background_mantle = #eaeaee\n\
50# background_crust = #dcdce1\n\
51#\n\
52# # Component surfaces\n\
53# surface_level1 = #cfd1d7\n\
54# surface_level2 = #b7bac3\n\
55#\n\
56# # Low-contrast lines/borders and secondary text accents\n\
57# overlay_primary = #7a7d86\n\
58# overlay_secondary = #63666f\n\
59#\n\
60# # Text hierarchy\n\
61# text_primary = #1c1c22\n\
62# text_secondary = #3c3f47\n\
63# text_tertiary = #565a64\n\
64#\n\
65# # Accents and semantic colors\n\
66# accent_interactive = #1e66f5\n\
67# accent_heading = #8839ef\n\
68# accent_emphasis = #7287fd\n\
69# semantic_success = #40a02b\n\
70# semantic_warning = #df8e1d\n\
71# semantic_error = #d20f39\n\
72\n\
73# ---------- Alternative Theme (Tokyo Night — Night) ----------\n\
74#\n\
75# # Background layers (from darkest to lightest)\n\
76# background_base = #1a1b26\n\
77# background_mantle = #16161e\n\
78# background_crust = #0f0f14\n\
79#\n\
80# # Component surfaces\n\
81# surface_level1 = #24283b\n\
82# surface_level2 = #1f2335\n\
83#\n\
84# # Low-contrast lines/borders\n\
85# overlay_primary = #414868\n\
86# overlay_secondary = #565f89\n\
87#\n\
88# # Text hierarchy\n\
89# text_primary = #c0caf5\n\
90# text_secondary = #a9b1d6\n\
91# text_tertiary = #9aa5ce\n\
92#\n\
93# # Accents and semantic colors\n\
94# accent_interactive = #7aa2f7\n\
95# accent_heading = #bb9af7\n\
96# accent_emphasis = #7dcfff\n\
97# semantic_success = #9ece6a\n\
98# semantic_warning = #e0af68\n\
99# semantic_error = #f7768e\n\
100\n\
101# ---------- Alternative Theme (Nord) ----------\n\
102#\n\
103# # Background layers (from darkest to lightest)\n\
104# background_base = #2e3440\n\
105# background_mantle = #3b4252\n\
106# background_crust = #434c5e\n\
107#\n\
108# # Component surfaces\n\
109# surface_level1 = #3b4252\n\
110# surface_level2 = #4c566a\n\
111#\n\
112# # Low-contrast lines/borders\n\
113# overlay_primary = #4c566a\n\
114# overlay_secondary = #616e88\n\
115#\n\
116# # Text hierarchy\n\
117# text_primary = #e5e9f0\n\
118# text_secondary = #d8dee9\n\
119# text_tertiary = #eceff4\n\
120#\n\
121# # Accents and semantic colors\n\
122# accent_interactive = #81a1c1\n\
123# accent_heading = #b48ead\n\
124# accent_emphasis = #88c0d0\n\
125# semantic_success = #a3be8c\n\
126# semantic_warning = #ebcb8b\n\
127# semantic_error = #bf616a\n\
128\n\
129# ---------- Alternative Theme (Dracula) ----------\n\
130#\n\
131# # Background layers (from darkest to lightest)\n\
132# background_base = #282a36\n\
133# background_mantle = #21222c\n\
134# background_crust = #44475a\n\
135#\n\
136# # Component surfaces\n\
137# surface_level1 = #44475a\n\
138# surface_level2 = #343746\n\
139#\n\
140# # Low-contrast lines/borders\n\
141# overlay_primary = #44475a\n\
142# overlay_secondary = #6272a4\n\
143#\n\
144# # Text hierarchy\n\
145# text_primary = #f8f8f2\n\
146# text_secondary = #e2e2e6\n\
147# text_tertiary = #d6d6de\n\
148#\n\
149# # Accents and semantic colors\n\
150# accent_interactive = #8be9fd\n\
151# accent_heading = #bd93f9\n\
152# accent_emphasis = #ff79c6\n\
153# semantic_success = #50fa7b\n\
154# semantic_warning = #f1fa8c\n\
155# semantic_error = #ff5555\n\
156#\n\
157# ---------- Alternative Theme (Gruvbox Dark) ----------\n\
158#\n\
159# # Background layers (from darkest to lightest)\n\
160# background_base = #171717\n\
161# background_mantle = #1d2021\n\
162# background_crust = #0d1011\n\
163#\n\
164# # Component surfaces\n\
165# surface_level1 = #3c3836\n\
166# surface_level2 = #504945\n\
167#\n\
168# # Low-contrast lines/borders\n\
169# overlay_primary = #665c54\n\
170# overlay_secondary = #7c6f64\n\
171#\n\
172# # Text hierarchy\n\
173# text_primary = #ebdbb2\n\
174# text_secondary = #d5c4a1\n\
175# text_tertiary = #bdae93\n\
176#\n\
177# # Accents and semantic colors\n\
178# accent_interactive = #83a598\n\
179# accent_heading = #b16286\n\
180# accent_emphasis = #d3869b\n\
181# semantic_success = #b8bb26\n\
182# semantic_warning = #fabd2f\n\
183# semantic_error = #fb4934\n\
184#\n\
185#-----------------------------------------------------------------------------------------------------------------------\n";
186
187pub const REPOS_SKELETON_CONTENT: &str = include_str!("../../../config/repos.conf");
198
199pub const SETTINGS_SKELETON_CONTENT: &str = "# Pacsea settings configuration\n\
201# Layout percentages for the middle row panes (must sum to 100)\n\
202layout_left_pct = 20\n\
203layout_center_pct = 60\n\
204layout_right_pct = 20\n\
205# Main vertical stack order: comma-separated permutation of results, search, package_info\n\
206# Aliases: middle (search row), details (package_info)\n\
207main_pane_order = results, search, package_info\n\
208# Vertical row limits (apply to the pane role, not screen position)\n\
209vertical_min_results = 3\n\
210vertical_max_results = 17\n\
211vertical_min_middle = 3\n\
212vertical_max_middle = 5\n\
213vertical_min_package_info = 3\n\
214# Default dry-run behavior when starting the app (overridden by --dry-run)\n\
215app_dry_run_default = false\n\
216# Middle row visibility (default true)\n\
217show_search_history_pane = true\n\
218show_install_pane = true\n\
219show_keybinds_footer = true\n\
220# Search input mode on startup\n\
221# Allowed values: insert_mode | normal_mode\n\
222# Default is insert_mode\n\
223search_startup_mode = insert_mode\n\
224# Fuzzy search mode\n\
225# When true, uses fuzzy matching (fzf-style) instead of substring search\n\
226# Default is false (normal substring search)\n\
227fuzzy_search = false\n\
228\n\
229# Installed packages filter mode\n\
230# Controls which packages are shown when viewing installed packages\n\
231# Allowed values: leaf | all\n\
232# - leaf: Show only leaf packages (explicitly installed, nothing depends on them) - default\n\
233# - all: Show all explicitly installed packages (including those other packages depend on)\n\
234installed_packages_mode = leaf\n\
235\n\
236# Results sorting\n\
237# Allowed values: alphabetical | aur_popularity | best_matches\n\
238sort_mode = best_matches\n\
239\n\
240# Clipboard\n\
241# Text appended when copying PKGBUILD to the clipboard\n\
242clipboard_suffix = Check PKGBUILD and source for suspicious and malicious activities\n\
243\n\
244# Preflight modal / safety confirmation\n\
245# When true, Pacsea will bypass the Preflight confirmation modal and execute install/remove/downgrade actions immediately.\n\
246# Recommended to keep this false for safety unless you understand the risks of executing package operations directly.\n\
247skip_preflight = false\n\
248\n\
249# Passwordless sudo\n\
250# When true, Pacsea will use passwordless sudo for install operations if configured on the system.\n\
251# When false (default), Pacsea will always show the password prompt even if passwordless sudo is available.\n\
252# This acts as an additional safety barrier requiring explicit opt-in.\n\
253# To use this feature, you must also have passwordless sudo configured in /etc/sudoers or /etc/sudoers.d/\n\
254use_passwordless_sudo = false\n\
255\n\
256# Privilege tool\n\
257# Which privilege escalation tool to use for install/remove/downgrade operations.\n\
258# Allowed values: auto | sudo | doas\n\
259# - auto (default): prefer doas if available, fall back to sudo\n\
260# - sudo: always use sudo\n\
261# - doas: always use doas (requires opendoas package)\n\
262# Note: doas does not support in-app password prompts; the terminal handles password entry.\n\
263privilege_tool = auto\n\
264\n\
265# Authentication mode\n\
266# How Pacsea handles authentication before privileged operations (works with both sudo and doas).\n\
267# Allowed values: prompt | passwordless_only | interactive\n\
268# - prompt (default): Pacsea captures your password for stdin-capable tools (sudo)\n\
269# and is automatically coerced to interactive when doas is active\n\
270# - passwordless_only: skip password prompt only when the tool allows passwordless execution\n\
271# - interactive: let the privilege tool handle auth directly (supports fingerprint via PAM)\n\
272# Note: if you have fingerprint auth configured in PAM, use 'interactive' to enable it.\n\
273# Known limitation: 'prompt' mode uses sudo -S which may stall if pam_fprintd runs before\n\
274# pam_unix in /etc/pam.d/sudo. If you experience stalls, switch to auth_mode = interactive.\n\
275# doas + interactive: works best with 'persist' enabled in /etc/doas.conf. Without 'persist',\n\
276# each doas invocation re-prompts (the initial auth succeeds but PTY commands may re-prompt).\n\
277auth_mode = prompt\n\
278\n\
279# Mirrors\n\
280# Select one or more countries (comma-separated). Example: \"Switzerland, Germany, Austria\"\n\
281selected_countries = Worldwide\n\
282# Number of HTTPS mirrors to consider when updating\n\
283mirror_count = 20\n\
284# Available countries (commented list; edit selected_countries above as needed):\n\
285# Worldwide\n\
286# Albania\n\
287# Algeria\n\
288# Argentina\n\
289# Armenia\n\
290# Australia\n\
291# Austria\n\
292# Azerbaijan\n\
293# Belarus\n\
294# Belgium\n\
295# Bosnia and Herzegovina\n\
296# Brazil\n\
297# Bulgaria\n\
298# Cambodia\n\
299# Canada\n\
300# Chile\n\
301# China\n\
302# Colombia\n\
303# Costa Rica\n\
304# Croatia\n\
305# Cyprus\n\
306# Czechia\n\
307# Denmark\n\
308# Ecuador\n\
309# Estonia\n\
310# Finland\n\
311# France\n\
312# Georgia\n\
313# Germany\n\
314# Greece\n\
315# Hong Kong\n\
316# Hungary\n\
317# Iceland\n\
318# India\n\
319# Indonesia\n\
320# Iran\n\
321# Ireland\n\
322# Israel\n\
323# Italy\n\
324# Japan\n\
325# Kazakhstan\n\
326# Latvia\n\
327# Lithuania\n\
328# Luxembourg\n\
329# Malaysia\n\
330# Mexico\n\
331# Moldova\n\
332# Netherlands\n\
333# New Caledonia\n\
334# New Zealand\n\
335# Norway\n\
336# Peru\n\
337# Philippines\n\
338# Poland\n\
339# Portugal\n\
340# Romania\n\
341# Russia\n\
342# Serbia\n\
343# Singapore\n\
344# Slovakia\n\
345# Slovenia\n\
346# South Africa\n\
347# South Korea\n\
348# Spain\n\
349# Sweden\n\
350# Switzerland\n\
351# Taiwan\n\
352# Thailand\n\
353# Turkey\n\
354# Ukraine\n\
355# United Kingdom\n\
356# United States\n\
357# Uruguay\n\
358# Vietnam\n\
359\n\
360# Scans\n\
361# Default scan configuration used when opening Scan Configuration\n\
362scan_do_clamav = true\n\
363scan_do_trivy = true\n\
364scan_do_semgrep = true\n\
365scan_do_shellcheck = true\n\
366scan_do_virustotal = true\n\
367scan_do_custom = true\n\
368scan_do_sleuth = true\n\
369# Comma-separated ShellCheck rule IDs for PKGBUILD preview checks (--exclude). Empty disables --exclude.\n\
370pkgbuild_shellcheck_exclude = SC2034,SC2164,SC2148,SC2154\n\
371# Show Raw output block for PKGBUILD static checks (shellcheck/namcap)\n\
372pkgbuild_checks_show_raw_output = false\n\
373\n\
374# News\n\
375# Symbols for read/unread indicators in the News popup\n\
376app_start_mode = package\n\
377news_read_symbol = ✓\n\
378news_unread_symbol = ∘\n\
379news_filter_show_arch_news = true\n\
380news_filter_show_advisories = true\n\
381news_filter_show_pkg_updates = true\n\
382news_filter_show_aur_updates = true\n\
383news_filter_show_aur_comments = true\n\
384# When news_filter_show_advisories is true, this restricts advisories to only those affecting installed packages\n\
385news_filter_installed_only = false\n\
386# Allowed values: number of days | all\n\
387news_max_age_days = 30\n\
388\n\
389# Startup News Popup Configuration\n\
390# Whether startup news popup setup has been completed\n\
391startup_news_configured = false\n\
392# News sources to show in startup popup\n\
393startup_news_show_arch_news = true\n\
394startup_news_show_advisories = true\n\
395startup_news_show_aur_updates = true\n\
396startup_news_show_aur_comments = true\n\
397startup_news_show_pkg_updates = true\n\
398# Maximum age of news items in days for startup popup (7, 30, or 90)\n\
399startup_news_max_age_days = 7\n\
400\n\
401# News Cache\n\
402# How many days to keep Arch news and advisories cached on disk.\n\
403# Reduces network requests on startup. Default is 14 days.\n\
404news_cache_ttl_days = 14\n\
405\n\
406# VirusTotal\n\
407# API key used for VirusTotal scans (optional)\n\
408virustotal_api_key = \n\
409\n\
410# Terminal\n\
411# Preferred terminal emulator binary (optional): e.g., alacritty, kitty, gnome-terminal\n\
412preferred_terminal = \n\
413\n\
414# Package selection marker\n\
415# Visual marker for packages added to Install/Remove/Downgrade lists.\n\
416# Allowed values: full_line | front | end\n\
417# - full_line: color the entire line\n\
418# - front: add marker at the front of the line (default)\n\
419# - end: add marker at the end of the line\n\
420package_marker = front
421
422# Language / Locale
423# Locale code for translations (e.g., \"en-US\", \"de-DE\").
424# Leave empty to auto-detect from system locale (LANG/LC_ALL environment variables).
425# Available locales: en-US, de-DE, hu-HU (more coming soon)
426locale = \n\
427\n\
428# Updates refresh interval\n\
429# Time in seconds between pacman -Qu and AUR helper checks.\n\
430# Default is 30 seconds. Increase this value on systems with slow I/O or many packages to reduce resource usage.\n\
431# Minimum value is 1 second.\n\
432updates_refresh_interval = 30\n\
433\n\
434# Remote announcements\n\
435# URL for fetching remote announcements (GitHub Gist raw URL)\n\
436# Default: true\n\
437# If true, fetches remote announcements from GitHub Gist\n\
438# If false, remote announcements are disabled (version announcements still show)\n\
439get_announcement = true\n\
440\n\
441# Terminal Theme\n\
442# When true, uses the terminal's theme colors instead of theme.conf via OSC 10/11 queries.\n\
443# When false (default), uses theme.conf colors.\n\
444# Note: Terminal theme is also used automatically when theme.conf is missing/invalid\n\
445# and the terminal is supported (alacritty, kitty, konsole, ghostty, wezterm,\n\
446# wezterm-gui, xterm, gnome-terminal, xfce-terminal, tilix, mate-terminal).\n\
447use_terminal_theme = false\n\
448\n\
449# AUR Voting via SSH\n\
450# Vote/unvote AUR packages directly from Pacsea using SSH.\n\
451# Requires your SSH public key to be uploaded to your AUR account:\n\
452# https://aur.archlinux.org/account\n\
453# Enable AUR voting (default: true)\n\
454aur_vote_enabled = true\n\
455# SSH connect timeout in seconds (default: 10)\n\
456aur_vote_ssh_timeout_seconds = 10\n\
457# SSH binary to use (default: ssh). Override for non-standard setups.\n\
458aur_vote_ssh_command = ssh\n";
459
460pub const KEYBINDS_SKELETON_CONTENT: &str = "# Pacsea keybindings configuration\n\
462# Modifiers can be one of: SUPER, CTRL, SHIFT, ALT.\n\
463\n\
464# GLOBAL — App\n\
465keybind_help = F1\n\
466# Alternative help shortcut\n\
467keybind_help = ?\n\
468keybind_reload_config = CTRL+R\n\
469keybind_exit = CTRL+Q\n\
470keybind_show_pkgbuild = CTRL+X\n\
471keybind_comments_toggle = CTRL+T\n\
472# Run PKGBUILD checks; same setting as keybind_pkgbuild_checks / keybind_toggle_pkgbuild_checks\n\
473keybind_run_pkgbuild_checks = CTRL+K\n\
474keybind_cycle_pkgbuild_sections = CTRL+D\n\
475\n\
476# GLOBAL — Pane switching\n\
477keybind_pane_left = Left\n\
478keybind_pane_right = Right\n\
479keybind_pane_next = Tab\n\
480# GLOBAL — Sorting\n\
481keybind_change_sort = BackTab\n\
482\n\
483# SEARCH — Navigation\n\
484keybind_search_move_up = Up\n\
485keybind_search_move_down = Down\n\
486keybind_search_page_up = PgUp\n\
487keybind_search_page_down = PgDn\n\
488\n\
489# SEARCH — Actions\n\
490keybind_search_add = Space\n\
491keybind_search_install = Enter\n\
492\n\
493# SEARCH — Focus/Edit\n\
494keybind_search_focus_left = Left\n\
495keybind_search_focus_right = Right\n\
496keybind_search_backspace = Backspace\n\
497keybind_search_insert_clear = Shift+Del\n\
498\n\
499# SEARCH — Normal Mode (Focused Search Window)\n\
500keybind_search_normal_toggle = Esc\n\
501keybind_search_normal_insert = i\n\
502keybind_search_normal_select_left = h\n\
503keybind_search_normal_select_right = l\n\
504keybind_search_normal_delete = d\n\
505keybind_search_normal_clear = Shift+Del\n\
506\n\
507# SEARCH — Normal Mode (Menus)\n\
508# Toggle dropdown menus while in Normal Mode\n\
509keybind_toggle_config = Shift+C\n\
510keybind_toggle_options = Shift+O\n\
511keybind_toggle_panels = Shift+P\n\
512\n\
513# SEARCH — Normal Mode (Other)\n\
514# Open Arch status page in default browser\n\
515keybind_search_normal_open_status = Shift+S\n\
516# Import packages list into Install list\n\
517keybind_search_normal_import = Shift+I\n\
518# Export current Install list to a file\n\
519keybind_search_normal_export = Shift+E\n\
520# Open Available Updates window\n\
521keybind_search_normal_updates = Shift+U\n\
522\n\
523# SEARCH — Fuzzy Search Toggle\n\
524# Toggle between normal substring search and fuzzy search (fzf-style)\n\
525keybind_toggle_fuzzy = CTRL+F\n\
526\n\
527# RECENT — Navigation\n\
528keybind_recent_move_up = k\n\
529keybind_recent_move_down = j\n\
530\n\
531# RECENT — Actions\n\
532keybind_recent_use = Enter\n\
533keybind_recent_add = Space\n\
534keybind_recent_remove = d\n\
535keybind_recent_remove = Del\n\
536\n\
537# RECENT — Find/Focus\n\
538keybind_recent_find = /\n\
539keybind_recent_to_search = Esc\n\
540keybind_recent_focus_right = Right\n\
541\n\
542# INSTALL — Navigation\n\
543keybind_install_move_up = k\n\
544keybind_install_move_down = j\n\
545\n\
546# INSTALL — Actions\n\
547keybind_install_confirm = Enter\n\
548keybind_install_remove = Del\n\
549keybind_install_remove = d\n\
550keybind_install_clear = Shift+Del\n\
551\n\
552# INSTALL — Find/Focus\n\
553keybind_install_find = /\n\
554keybind_install_to_search = Esc\n\
555keybind_install_focus_left = Left\n\
556\n\
557# NEWS — Actions\n\
558keybind_news_mark_read = r\n\
559keybind_news_mark_all_read = CTRL+R\n\
560keybind_news_feed_mark_read = r\n\
561keybind_news_feed_mark_unread = u\n\
562keybind_news_feed_toggle_read = t\n";