aboutsummaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs111
1 files changed, 104 insertions, 7 deletions
diff --git a/src/config.rs b/src/config.rs
index abb610b..22873dd 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -19,6 +19,7 @@ use std::path::PathBuf;
use color_eyre::eyre::Result;
use config::{ConfigError, FileFormat};
+use ratatui::style::Color;
use serde::Deserialize;
use crate::cliargs::CLIArgs;
@@ -26,7 +27,8 @@ use crate::cliargs::CLIArgs;
/// Main struct of the config file. Contains substructs/headings in toml
#[derive(Debug, Clone, Deserialize)]
pub struct BibiConfig {
- pub general: General,
+ pub general: Option<General>,
+ pub colors: Option<Colors>,
}
/// Substruct [general] in config.toml
@@ -38,17 +40,103 @@ pub struct General {
pub url_opener: Option<String>,
}
-impl BibiConfig {
- pub fn default() -> Self {
+/// Substruct [colors] in config.toml
+#[derive(Debug, Clone, Deserialize)]
+pub struct Colors {
+ pub main_text_color: Option<Color>,
+ pub highlight_text_color: Option<Color>,
+ pub entry_color: Option<Color>,
+ pub keyword_color: Option<Color>,
+ pub info_color: Option<Color>,
+ pub confirm_color: Option<Color>,
+ pub warn_color: Option<Color>,
+ pub bar_bg_color: Option<Color>,
+ pub popup_bg_color: Option<Color>,
+ pub selected_row_bg_color: Option<Color>,
+}
+
+impl Default for BibiConfig {
+ fn default() -> Self {
Self {
- general: General {
+ general: Some(General {
bibfiles: None,
editor: None,
- pdf_opener: None,
- url_opener: None,
- },
+ pdf_opener: Some(select_opener()),
+ url_opener: Some(select_opener()),
+ }),
+ colors: Some(Colors {
+ main_text_color: Some(Color::Indexed(250)),
+ highlight_text_color: Some(Color::Indexed(254)),
+ entry_color: Some(Color::Indexed(36)),
+ keyword_color: Some(Color::Indexed(101)),
+ info_color: Some(Color::Indexed(99)),
+ confirm_color: Some(Color::Indexed(47)),
+ warn_color: Some(Color::Indexed(124)),
+ bar_bg_color: Some(Color::Indexed(234)),
+ popup_bg_color: Some(Color::Indexed(234)),
+ selected_row_bg_color: Some(Color::Indexed(237)),
+ }),
}
}
+}
+
+impl BibiConfig {
+ pub fn parse_config(&mut self, args: &CLIArgs) -> Result<()> {
+ if args.cfg_path.is_file() {
+ let cfg_file = Self::parse_cfg_file(args)?;
+
+ if let Some(general) = cfg_file.general {
+ if let Some(bibfiles) = general.bibfiles {
+ self.general.as_mut().unwrap().bibfiles = Some(bibfiles)
+ }
+ if let Some(editor) = general.editor {
+ self.general.as_mut().unwrap().editor = Some(editor)
+ }
+ if let Some(pdf_opener) = general.pdf_opener {
+ self.general.as_mut().unwrap().pdf_opener = Some(pdf_opener)
+ }
+ if let Some(url_opener) = general.url_opener {
+ self.general.as_mut().unwrap().url_opener = Some(url_opener)
+ }
+ }
+
+ if let Some(colors) = cfg_file.colors {
+ if let Some(main_text_color) = colors.main_text_color {
+ self.colors.as_mut().unwrap().main_text_color = Some(main_text_color)
+ }
+ if let Some(highlight_text_color) = colors.highlight_text_color {
+ self.colors.as_mut().unwrap().highlight_text_color = Some(highlight_text_color)
+ }
+ if let Some(entry_color) = colors.entry_color {
+ self.colors.as_mut().unwrap().entry_color = Some(entry_color)
+ }
+ if let Some(keyword_color) = colors.keyword_color {
+ self.colors.as_mut().unwrap().keyword_color = Some(keyword_color)
+ }
+ if let Some(info_color) = colors.info_color {
+ self.colors.as_mut().unwrap().info_color = Some(info_color)
+ }
+ if let Some(confirm_color) = colors.confirm_color {
+ self.colors.as_mut().unwrap().confirm_color = Some(confirm_color)
+ }
+ if let Some(warn_color) = colors.warn_color {
+ self.colors.as_mut().unwrap().warn_color = Some(warn_color)
+ }
+ if let Some(bar_bg_color) = colors.bar_bg_color {
+ self.colors.as_mut().unwrap().bar_bg_color = Some(bar_bg_color)
+ }
+ if let Some(popup_bg_color) = colors.popup_bg_color {
+ self.colors.as_mut().unwrap().popup_bg_color = Some(popup_bg_color)
+ }
+ if let Some(selected_row_bg_color) = colors.selected_row_bg_color {
+ self.colors.as_mut().unwrap().selected_row_bg_color =
+ Some(selected_row_bg_color)
+ }
+ }
+ }
+
+ Ok(())
+ }
pub fn new(args: &CLIArgs) -> Result<Self> {
// let mut cfg = config::Config::builder();
@@ -71,3 +159,12 @@ impl BibiConfig {
cfg.build()?.try_deserialize()
}
}
+
+fn select_opener() -> String {
+ match std::env::consts::OS {
+ "linux" => String::from("xdg-open"),
+ "macos" => String::from("open"),
+ "windows" => String::from("start"),
+ _ => panic!("Couldn't detect OS for setting correct opener"),
+ }
+}