thoth_cli/
lib.rs

1pub mod cli;
2pub mod clipboard;
3pub mod code_block_popup;
4pub mod config;
5pub mod formatter;
6pub mod markdown_renderer;
7pub mod scrollable_textarea;
8pub mod theme;
9pub mod title_popup;
10pub mod title_select_popup;
11pub mod ui;
12pub mod ui_handler;
13pub mod utils;
14
15pub use clipboard::ClipboardTrait;
16pub use clipboard::EditorClipboard;
17pub use code_block_popup::CodeBlockPopup;
18pub use config::{ThemeMode, ThothConfig};
19use dirs::home_dir;
20pub use formatter::{format_json, format_markdown};
21pub use markdown_renderer::MarkdownRenderer;
22pub use scrollable_textarea::ScrollableTextArea;
23use std::path::PathBuf;
24pub use theme::{ThemeColors, DARK_MODE_COLORS, LIGHT_MODE_COLORS};
25pub use title_popup::TitlePopup;
26pub use title_select_popup::TitleSelectPopup;
27pub use utils::{load_textareas, save_textareas};
28
29pub fn get_save_file_path() -> PathBuf {
30    // First, check environment variable
31    if let Ok(custom_dir) = std::env::var("THOTH_NOTES_DIR") {
32        return PathBuf::from(shellexpand::tilde(&custom_dir).to_string()).join("thoth_notes.md");
33    }
34
35    // Second, check config file
36    if let Ok(config) = ThothConfig::load() {
37        if let Some(notes_dir) = config.notes_dir {
38            return PathBuf::from(shellexpand::tilde(&notes_dir).to_string())
39                .join("thoth_notes.md");
40        }
41    }
42
43    // Finally, use default
44    home_dir().unwrap_or_default().join("thoth_notes.md")
45}
46pub fn get_save_backup_file_path() -> PathBuf {
47    let main_path = get_save_file_path();
48    let parent = main_path
49        .parent()
50        .unwrap_or_else(|| std::path::Path::new("."));
51    parent.join("thoth_notes_backup.md")
52}
53pub fn get_clipboard_backup_file_path() -> PathBuf {
54    let main_path = get_save_file_path();
55    let parent = main_path
56        .parent()
57        .unwrap_or_else(|| std::path::Path::new("."));
58    parent.join("thoth_clipboard.txt")
59}
60
61// The ORANGE constant is kept for backward compatibility
62pub const ORANGE: ratatui::style::Color = ratatui::style::Color::Rgb(255, 165, 0);
63pub const DAEMONIZE_ARG: &str = "__thoth_copy_daemonize";
64pub const MIN_TEXTAREA_HEIGHT: usize = 3;
65pub const BORDER_PADDING_SIZE: usize = 2;