1pub fn cols() -> usize {
4 80
5}
6
7pub fn rows() -> usize {
8 24
9}
10
11pub fn font_size() -> f32 {
12 12.0
13}
14
15pub fn font_family() -> String {
16 "JetBrains Mono".to_string()
17}
18
19pub fn line_spacing() -> f32 {
20 1.0 }
22
23pub fn char_spacing() -> f32 {
24 1.0 }
26
27pub fn text_shaping() -> bool {
28 true }
30
31pub fn minimum_contrast() -> f32 {
32 1.0 }
34
35pub fn scrollback() -> usize {
36 10000
37}
38
39pub fn window_title() -> String {
40 "par-term".to_string()
41}
42
43pub fn theme() -> String {
44 "dark-background".to_string()
45}
46
47pub fn light_theme() -> String {
48 "light-background".to_string()
49}
50
51pub fn dark_theme() -> String {
52 "dark-background".to_string()
53}
54
55pub fn screenshot_format() -> String {
56 "png".to_string()
57}
58
59pub fn max_fps() -> u32 {
60 60
61}
62
63pub fn window_padding() -> f32 {
64 0.0
65}
66
67pub fn login_shell() -> bool {
68 true
69}
70
71pub fn initial_text() -> String {
72 String::new()
73}
74
75pub fn initial_text_delay_ms() -> u64 {
76 100
77}
78
79pub fn initial_text_send_newline() -> bool {
80 true
81}
82
83pub fn scrollbar_position() -> String {
84 "right".to_string()
85}
86
87pub fn scrollbar_width() -> f32 {
88 15.0
89}
90
91pub fn scrollbar_thumb_color() -> [f32; 4] {
92 [0.4, 0.4, 0.4, 0.95] }
94
95pub fn scrollbar_track_color() -> [f32; 4] {
96 [0.15, 0.15, 0.15, 0.6] }
98
99pub fn command_separator_thickness() -> f32 {
100 1.0 }
102
103pub fn command_separator_opacity() -> f32 {
104 0.4 }
106
107pub fn command_separator_color() -> [u8; 3] {
108 [128, 128, 128] }
110
111pub fn link_highlight_color() -> [u8; 3] {
112 [79, 195, 247] }
114
115pub fn paste_delay_ms() -> u64 {
116 0 }
118
119pub fn clipboard_max_sync_events() -> usize {
120 64 }
122
123pub fn clipboard_max_event_bytes() -> usize {
124 2048 }
126
127pub fn activity_threshold() -> u64 {
128 10 }
130
131pub fn anti_idle_seconds() -> u64 {
132 60 }
134
135pub fn anti_idle_code() -> u8 {
136 0 }
138
139pub fn silence_threshold() -> u64 {
140 300 }
142
143pub fn notification_max_buffer() -> usize {
144 64 }
146
147pub fn scroll_speed() -> f32 {
148 3.0 }
150
151pub fn double_click_threshold() -> u64 {
152 500 }
154
155pub fn triple_click_threshold() -> u64 {
156 500 }
158
159pub fn cursor_blink_interval() -> u64 {
160 500 }
162
163pub fn cursor_color() -> [u8; 3] {
164 [255, 255, 255] }
166
167pub fn scrollbar_autohide_delay() -> u64 {
168 0 }
170
171pub fn window_opacity() -> f32 {
172 1.0 }
174
175pub fn background_image_opacity() -> f32 {
176 1.0 }
178
179pub fn pane_background_darken() -> f32 {
180 0.0 }
182
183pub fn background_color() -> [u8; 3] {
184 [30, 30, 30] }
186
187pub fn bool_false() -> bool {
188 false
189}
190
191pub fn bool_true() -> bool {
192 true
193}
194
195pub fn mdns_timeout() -> u32 {
196 3
197}
198
199pub fn text_opacity() -> f32 {
200 1.0 }
202
203pub fn custom_shader_speed() -> f32 {
204 1.0 }
206
207pub fn custom_shader_brightness() -> f32 {
208 0.15 }
210
211pub fn cursor_shader_color() -> [u8; 3] {
212 [255, 255, 255] }
214
215pub fn cursor_trail_duration() -> f32 {
216 0.5 }
218
219pub fn cursor_glow_radius() -> f32 {
220 80.0 }
222
223pub fn cursor_glow_intensity() -> f32 {
224 0.3 }
226
227pub fn cursor_shader_disable_in_alt_screen() -> bool {
228 true }
230
231pub fn bell_sound() -> u8 {
232 50 }
234
235pub fn tab_bar_height() -> f32 {
236 28.0 }
238
239pub fn tab_bar_width() -> f32 {
240 160.0 }
242
243pub fn zero() -> usize {
244 0
245}
246
247pub fn unfocused_fps() -> u32 {
248 30 }
250
251pub fn inactive_tab_fps() -> u32 {
252 2 }
254
255pub fn reduce_flicker() -> bool {
257 true
258}
259
260pub fn reduce_flicker_delay_ms() -> u32 {
262 16 }
264
265pub fn maximize_throughput() -> bool {
267 false }
269
270pub fn throughput_render_interval_ms() -> u32 {
272 100 }
274
275pub fn shader_hot_reload_delay() -> u64 {
276 100 }
278
279pub fn tab_bar_background() -> [u8; 3] {
281 [40, 40, 40] }
283
284pub fn tab_active_background() -> [u8; 3] {
285 [60, 60, 60] }
287
288pub fn tab_inactive_background() -> [u8; 3] {
289 [40, 40, 40] }
291
292pub fn tab_hover_background() -> [u8; 3] {
293 [50, 50, 50] }
295
296pub fn tab_active_text() -> [u8; 3] {
297 [255, 255, 255] }
299
300pub fn tab_inactive_text() -> [u8; 3] {
301 [180, 180, 180] }
303
304pub fn tab_active_indicator() -> [u8; 3] {
305 [100, 150, 255] }
307
308pub fn tab_activity_indicator() -> [u8; 3] {
309 [100, 180, 255] }
311
312pub fn tab_bell_indicator() -> [u8; 3] {
313 [255, 200, 100] }
315
316pub fn tab_close_button() -> [u8; 3] {
317 [150, 150, 150] }
319
320pub fn tab_close_button_hover() -> [u8; 3] {
321 [255, 100, 100] }
323
324pub fn cubemap_enabled() -> bool {
325 true }
327
328pub fn inactive_tab_opacity() -> f32 {
329 0.6 }
331
332pub fn tab_min_width() -> f32 {
333 120.0 }
335
336pub fn tab_stretch_to_fill() -> bool {
337 true }
339
340pub fn tab_html_titles() -> bool {
341 false }
343
344pub fn tab_border_color() -> [u8; 3] {
345 [80, 80, 80] }
347
348pub fn tab_border_width() -> f32 {
349 1.0 }
351
352pub fn blur_radius() -> u32 {
353 8 }
355
356pub fn light_tab_style() -> crate::types::TabStyle {
357 crate::types::TabStyle::Light
358}
359
360pub fn dark_tab_style() -> crate::types::TabStyle {
361 crate::types::TabStyle::Dark
362}
363
364pub fn use_background_as_channel0() -> bool {
365 false }
367
368pub fn keybindings() -> Vec<crate::types::KeyBinding> {
369 #[cfg(target_os = "macos")]
374 let bindings = vec![
375 crate::types::KeyBinding {
376 key: "CmdOrCtrl+Shift+B".to_string(),
377 action: "toggle_background_shader".to_string(),
378 },
379 crate::types::KeyBinding {
380 key: "CmdOrCtrl+Shift+U".to_string(),
381 action: "toggle_cursor_shader".to_string(),
382 },
383 crate::types::KeyBinding {
384 key: "CmdOrCtrl+Shift+V".to_string(),
385 action: "paste_special".to_string(),
386 },
387 crate::types::KeyBinding {
388 key: "CmdOrCtrl+Shift+R".to_string(),
389 action: "toggle_session_logging".to_string(),
390 },
391 crate::types::KeyBinding {
393 key: "CmdOrCtrl+D".to_string(),
394 action: "split_horizontal".to_string(),
395 },
396 crate::types::KeyBinding {
397 key: "CmdOrCtrl+Shift+D".to_string(),
398 action: "split_vertical".to_string(),
399 },
400 crate::types::KeyBinding {
401 key: "CmdOrCtrl+Shift+W".to_string(),
402 action: "close_pane".to_string(),
403 },
404 crate::types::KeyBinding {
406 key: "CmdOrCtrl+Alt+Left".to_string(),
407 action: "navigate_pane_left".to_string(),
408 },
409 crate::types::KeyBinding {
410 key: "CmdOrCtrl+Alt+Right".to_string(),
411 action: "navigate_pane_right".to_string(),
412 },
413 crate::types::KeyBinding {
414 key: "CmdOrCtrl+Alt+Up".to_string(),
415 action: "navigate_pane_up".to_string(),
416 },
417 crate::types::KeyBinding {
418 key: "CmdOrCtrl+Alt+Down".to_string(),
419 action: "navigate_pane_down".to_string(),
420 },
421 crate::types::KeyBinding {
423 key: "CmdOrCtrl+Alt+Shift+Left".to_string(),
424 action: "resize_pane_left".to_string(),
425 },
426 crate::types::KeyBinding {
427 key: "CmdOrCtrl+Alt+Shift+Right".to_string(),
428 action: "resize_pane_right".to_string(),
429 },
430 crate::types::KeyBinding {
431 key: "CmdOrCtrl+Alt+Shift+Up".to_string(),
432 action: "resize_pane_up".to_string(),
433 },
434 crate::types::KeyBinding {
435 key: "CmdOrCtrl+Alt+Shift+Down".to_string(),
436 action: "resize_pane_down".to_string(),
437 },
438 crate::types::KeyBinding {
440 key: "CmdOrCtrl+Alt+I".to_string(),
441 action: "toggle_broadcast_input".to_string(),
442 },
443 crate::types::KeyBinding {
445 key: "CmdOrCtrl+Shift+T".to_string(),
446 action: "toggle_throughput_mode".to_string(),
447 },
448 crate::types::KeyBinding {
450 key: "CmdOrCtrl+Alt+T".to_string(),
451 action: "toggle_tmux_session_picker".to_string(),
452 },
453 crate::types::KeyBinding {
455 key: "CmdOrCtrl+Shift+C".to_string(),
456 action: "toggle_copy_mode".to_string(),
457 },
458 crate::types::KeyBinding {
460 key: "CmdOrCtrl+R".to_string(),
461 action: "toggle_command_history".to_string(),
462 },
463 crate::types::KeyBinding {
465 key: "CmdOrCtrl+Z".to_string(),
466 action: "reopen_closed_tab".to_string(),
467 },
468 crate::types::KeyBinding {
470 key: "CmdOrCtrl+Shift+S".to_string(),
471 action: "ssh_quick_connect".to_string(),
472 },
473 ];
474
475 #[cfg(not(target_os = "macos"))]
476 let bindings = vec![
477 crate::types::KeyBinding {
478 key: "Ctrl+Shift+B".to_string(),
479 action: "toggle_background_shader".to_string(),
480 },
481 crate::types::KeyBinding {
482 key: "Ctrl+Shift+U".to_string(),
483 action: "toggle_cursor_shader".to_string(),
484 },
485 crate::types::KeyBinding {
487 key: "Ctrl+Alt+V".to_string(),
488 action: "paste_special".to_string(),
489 },
490 crate::types::KeyBinding {
491 key: "Ctrl+Shift+R".to_string(),
492 action: "toggle_session_logging".to_string(),
493 },
494 crate::types::KeyBinding {
497 key: "Ctrl+Shift+D".to_string(),
498 action: "split_horizontal".to_string(),
499 },
500 crate::types::KeyBinding {
502 key: "Ctrl+Shift+E".to_string(),
503 action: "split_vertical".to_string(),
504 },
505 crate::types::KeyBinding {
507 key: "Ctrl+Shift+X".to_string(),
508 action: "close_pane".to_string(),
509 },
510 crate::types::KeyBinding {
512 key: "Ctrl+Alt+Left".to_string(),
513 action: "navigate_pane_left".to_string(),
514 },
515 crate::types::KeyBinding {
516 key: "Ctrl+Alt+Right".to_string(),
517 action: "navigate_pane_right".to_string(),
518 },
519 crate::types::KeyBinding {
520 key: "Ctrl+Alt+Up".to_string(),
521 action: "navigate_pane_up".to_string(),
522 },
523 crate::types::KeyBinding {
524 key: "Ctrl+Alt+Down".to_string(),
525 action: "navigate_pane_down".to_string(),
526 },
527 crate::types::KeyBinding {
529 key: "Ctrl+Alt+Shift+Left".to_string(),
530 action: "resize_pane_left".to_string(),
531 },
532 crate::types::KeyBinding {
533 key: "Ctrl+Alt+Shift+Right".to_string(),
534 action: "resize_pane_right".to_string(),
535 },
536 crate::types::KeyBinding {
537 key: "Ctrl+Alt+Shift+Up".to_string(),
538 action: "resize_pane_up".to_string(),
539 },
540 crate::types::KeyBinding {
541 key: "Ctrl+Alt+Shift+Down".to_string(),
542 action: "resize_pane_down".to_string(),
543 },
544 crate::types::KeyBinding {
546 key: "Ctrl+Alt+I".to_string(),
547 action: "toggle_broadcast_input".to_string(),
548 },
549 crate::types::KeyBinding {
551 key: "Ctrl+Shift+M".to_string(),
552 action: "toggle_throughput_mode".to_string(),
553 },
554 crate::types::KeyBinding {
556 key: "Ctrl+Alt+T".to_string(),
557 action: "toggle_tmux_session_picker".to_string(),
558 },
559 crate::types::KeyBinding {
562 key: "Ctrl+Shift+Space".to_string(),
563 action: "toggle_copy_mode".to_string(),
564 },
565 crate::types::KeyBinding {
569 key: "Ctrl+Alt+R".to_string(),
570 action: "toggle_command_history".to_string(),
571 },
572 crate::types::KeyBinding {
574 key: "Ctrl+Shift+Z".to_string(),
575 action: "reopen_closed_tab".to_string(),
576 },
577 crate::types::KeyBinding {
579 key: "Ctrl+Shift+S".to_string(),
580 action: "ssh_quick_connect".to_string(),
581 },
582 ];
583
584 bindings
585}
586
587pub fn progress_bar_height() -> f32 {
589 4.0 }
591
592pub fn progress_bar_normal_color() -> [u8; 3] {
593 [80, 180, 255] }
595
596pub fn progress_bar_warning_color() -> [u8; 3] {
597 [255, 200, 50] }
599
600pub fn progress_bar_error_color() -> [u8; 3] {
601 [255, 80, 80] }
603
604pub fn progress_bar_indeterminate_color() -> [u8; 3] {
605 [150, 150, 150] }
607
608pub fn progress_bar_opacity() -> f32 {
609 0.8
610}
611
612pub fn cursor_guide_color() -> [u8; 4] {
614 [255, 255, 255, 20] }
616
617pub fn cursor_shadow_color() -> [u8; 4] {
618 [0, 0, 0, 128] }
620
621pub fn cursor_shadow_offset() -> [f32; 2] {
622 [2.0, 2.0] }
624
625pub fn cursor_shadow_blur() -> f32 {
626 3.0 }
628
629pub fn cursor_boost() -> f32 {
630 0.0 }
632
633pub fn cursor_boost_color() -> [u8; 3] {
634 [255, 255, 255] }
636
637pub fn update_check_frequency() -> crate::types::UpdateCheckFrequency {
638 crate::types::UpdateCheckFrequency::Daily
639}
640
641pub fn search_highlight_color() -> [u8; 4] {
643 [255, 200, 0, 180] }
645
646pub fn search_current_highlight_color() -> [u8; 4] {
647 [255, 100, 0, 220] }
649
650pub fn word_characters() -> String {
652 "/-+\\~_.".to_string()
655}
656
657pub fn smart_selection_enabled() -> bool {
658 true }
660
661pub fn answerback_string() -> String {
662 String::new() }
664
665pub fn semantic_history_editor() -> String {
668 String::new() }
670
671pub fn jobs_to_ignore() -> Vec<String> {
674 vec![
675 "bash".to_string(),
677 "zsh".to_string(),
678 "fish".to_string(),
679 "sh".to_string(),
680 "dash".to_string(),
681 "ksh".to_string(),
682 "tcsh".to_string(),
683 "csh".to_string(),
684 "less".to_string(),
686 "more".to_string(),
687 "man".to_string(),
688 "cat".to_string(),
690 "sleep".to_string(),
691 ]
692}
693
694pub fn unicode_version() -> par_term_emu_core_rust::UnicodeVersion {
695 par_term_emu_core_rust::UnicodeVersion::Auto
696}
697
698pub fn ambiguous_width() -> par_term_emu_core_rust::AmbiguousWidth {
699 par_term_emu_core_rust::AmbiguousWidth::Narrow
700}
701
702pub fn normalization_form() -> par_term_emu_core_rust::NormalizationForm {
703 par_term_emu_core_rust::NormalizationForm::NFC
704}
705
706pub fn pane_divider_width() -> Option<f32> {
708 Some(2.0) }
710
711pub fn pane_divider_hit_width() -> f32 {
712 8.0 }
714
715pub fn pane_padding() -> f32 {
716 4.0 }
718
719pub fn pane_min_size() -> usize {
720 10 }
722
723pub fn pane_background_opacity() -> f32 {
724 0.85 }
726
727pub fn pane_divider_color() -> [u8; 3] {
728 [80, 80, 80] }
730
731pub fn pane_divider_hover_color() -> [u8; 3] {
732 [120, 150, 200] }
734
735pub fn inactive_pane_opacity() -> f32 {
736 0.7 }
738
739pub fn max_panes() -> usize {
740 16 }
742
743pub fn pane_title_height() -> f32 {
744 20.0 }
746
747pub fn pane_title_color() -> [u8; 3] {
748 [200, 200, 200] }
750
751pub fn pane_title_bg_color() -> [u8; 3] {
752 [40, 40, 50] }
754
755pub fn pane_focus_color() -> [u8; 3] {
756 [100, 150, 255] }
758
759pub fn pane_focus_width() -> f32 {
760 2.0 }
762
763pub fn tmux_path() -> String {
765 if let Ok(path_env) = std::env::var("PATH") {
767 let separator = if cfg!(windows) { ';' } else { ':' };
768 let executable = if cfg!(windows) { "tmux.exe" } else { "tmux" };
769
770 for dir in path_env.split(separator) {
771 let candidate = std::path::Path::new(dir).join(executable);
772 if candidate.exists() {
773 return candidate.to_string_lossy().to_string();
774 }
775 }
776 }
777
778 #[cfg(target_os = "macos")]
781 {
782 let macos_paths = [
783 "/opt/homebrew/bin/tmux", "/usr/local/bin/tmux", ];
786 for path in macos_paths {
787 if std::path::Path::new(path).exists() {
788 return path.to_string();
789 }
790 }
791 }
792
793 #[cfg(target_os = "linux")]
794 {
795 let linux_paths = [
796 "/usr/bin/tmux", "/usr/local/bin/tmux", "/snap/bin/tmux", ];
800 for path in linux_paths {
801 if std::path::Path::new(path).exists() {
802 return path.to_string();
803 }
804 }
805 }
806
807 "tmux".to_string()
809}
810
811pub fn tmux_default_session() -> Option<String> {
812 None }
814
815pub fn tmux_auto_attach_session() -> Option<String> {
816 None }
818
819pub fn tmux_prefix_key() -> String {
820 "C-b".to_string() }
822
823pub fn tmux_status_bar_refresh_ms() -> u64 {
824 1000 }
826
827pub fn tmux_status_bar_left() -> String {
828 "[{session}] {windows}".to_string()
829}
830
831pub fn tmux_status_bar_right() -> String {
832 "{pane} | {time:%H:%M}".to_string()
833}
834
835pub fn badge_format() -> String {
837 "\\(session.username)@\\(session.hostname)".to_string()
838}
839
840pub fn badge_color() -> [u8; 3] {
841 [255, 0, 0] }
843
844pub fn badge_color_alpha() -> f32 {
845 0.5 }
847
848pub fn badge_font() -> String {
849 "Helvetica".to_string()
850}
851
852pub fn badge_top_margin() -> f32 {
853 0.0 }
855
856pub fn badge_right_margin() -> f32 {
857 16.0 }
859
860pub fn badge_max_width() -> f32 {
861 0.5 }
863
864pub fn badge_max_height() -> f32 {
865 0.2 }
867
868pub fn command_history_max_entries() -> usize {
870 1000 }
872
873pub fn session_undo_timeout_secs() -> u32 {
874 5
875}
876
877pub fn session_undo_max_entries() -> usize {
878 10
879}
880
881pub fn session_undo_preserve_shell() -> bool {
882 false
883}
884
885pub fn status_bar_height() -> f32 {
887 22.0
888}
889
890pub fn status_bar_bg_color() -> [u8; 3] {
891 [30, 30, 30]
892}
893
894pub fn status_bar_bg_alpha() -> f32 {
895 0.95
896}
897
898pub fn status_bar_fg_color() -> [u8; 3] {
899 [200, 200, 200]
900}
901
902pub fn status_bar_font_size() -> f32 {
903 12.0
904}
905
906pub fn status_bar_separator() -> String {
907 " \u{2502} ".to_string() }
909
910pub fn status_bar_mouse_inactive_timeout() -> f32 {
911 3.0
912}
913
914pub fn status_bar_system_poll_interval() -> f32 {
915 2.0
916}
917
918pub fn status_bar_git_poll_interval() -> f32 {
919 5.0
920}
921
922pub fn status_bar_time_format() -> String {
923 "%H:%M:%S".to_string()
924}
925
926pub fn session_log_directory() -> String {
927 if let Some(home) = dirs::home_dir() {
929 home.join(".local")
930 .join("share")
931 .join("par-term")
932 .join("logs")
933 .to_string_lossy()
934 .to_string()
935 } else {
936 "logs".to_string()
937 }
938}
939
940pub fn ai_inspector_enabled() -> bool {
942 true
943}
944
945pub fn ai_inspector_width() -> f32 {
946 300.0
947}
948
949pub fn ai_inspector_open_on_startup() -> bool {
950 false
951}
952
953pub fn ai_inspector_default_scope() -> String {
954 "visible".to_string()
955}
956
957pub fn ai_inspector_view_mode() -> String {
958 "tree".to_string()
959}
960
961pub fn ai_inspector_live_update() -> bool {
962 false
963}
964
965pub fn ai_inspector_show_zones() -> bool {
966 true
967}
968
969pub fn ai_inspector_agent() -> String {
970 "claude.com".to_string()
971}
972
973pub fn ai_inspector_auto_launch() -> bool {
974 false
975}
976
977pub fn ai_inspector_auto_context() -> bool {
978 false
979}
980
981pub fn ai_inspector_context_max_lines() -> usize {
982 200
983}
984
985pub fn ai_inspector_auto_approve() -> bool {
986 false
987}
988
989pub fn ai_inspector_agent_terminal_access() -> bool {
990 false
991}
992
993pub fn ai_inspector_agent_screenshot_access() -> bool {
994 true
995}