summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2024-01-18 18:46:00 -0500
committerGitHub <noreply@github.com>2024-01-18 18:46:00 -0500
commit975e3d776bad3d0111394ae7871b96c513b4f10c (patch)
tree4f72b09f40251d40fe26b3068a66e6b27c9508d7 /src
parentbe4fa27b84ada5400fece60e84ebff18f3ef7641 (diff)
refactor: move some files around in prep for a future options refactor (#1393)
* some formatting * refactor: move some files around in prep for a bigger config/options refactor
Diffstat (limited to 'src')
-rw-r--r--src/canvas/styling.rs10
-rw-r--r--src/options.rs144
-rw-r--r--src/options/colours.rs43
-rw-r--r--src/options/config.rs81
-rw-r--r--src/options/config/ignore_list.rs21
-rw-r--r--src/options/config/layout.rs3
6 files changed, 157 insertions, 145 deletions
diff --git a/src/canvas/styling.rs b/src/canvas/styling.rs
index dec1800f..88273352 100644
--- a/src/canvas/styling.rs
+++ b/src/canvas/styling.rs
@@ -1,14 +1,12 @@
+mod colour_utils;
+
use anyhow::Context;
use colour_utils::*;
use tui::style::{Color, Style};
use super::ColourScheme;
-use crate::{
- constants::*,
- options::{Config, ConfigColours},
- utils::error,
-};
-mod colour_utils;
+pub use crate::options::Config;
+use crate::{constants::*, options::colours::ConfigColours, utils::error};
pub struct CanvasStyling {
pub currently_selected_text_colour: Color,
diff --git a/src/options.rs b/src/options.rs
index 95c780f6..092d982d 100644
--- a/src/options.rs
+++ b/src/options.rs
@@ -3,10 +3,10 @@
// TODO: Break this apart or do something a bit smarter.
pub mod args;
+pub mod colours;
pub mod config;
use std::{
- borrow::Cow,
convert::TryInto,
str::FromStr,
time::{Duration, Instant},
@@ -14,14 +14,14 @@ use std::{
use anyhow::{Context, Result};
use clap::ArgMatches;
+pub use colours::ConfigColours;
use hashbrown::{HashMap, HashSet};
use indexmap::IndexSet;
use regex::Regex;
-use serde::{Deserialize, Serialize};
#[cfg(feature = "battery")]
use starship_battery::Manager;
-use self::config::{cpu::CpuConfig, layout::Row, process_columns::ProcessConfig};
+use self::config::{layout::Row, IgnoreList, StringOrNum};
use crate::{
app::{filter::Filter, layout_manager::*, *},
canvas::{styling::CanvasStyling, ColourScheme},
@@ -33,139 +33,7 @@ use crate::{
},
widgets::*,
};
-
-#[derive(Clone, Debug, Default, Deserialize)]
-pub struct Config {
- pub flags: Option<ConfigFlags>,
- pub colors: Option<ConfigColours>,
- pub row: Option<Vec<Row>>,
- pub disk_filter: Option<IgnoreList>,
- pub mount_filter: Option<IgnoreList>,
- pub temp_filter: Option<IgnoreList>,
- pub net_filter: Option<IgnoreList>,
- pub processes: Option<ProcessConfig>,
- pub cpu: Option<CpuConfig>,
-}
-
-#[derive(Clone, Debug, Deserialize, Serialize)]
-#[serde(untagged)]
-enum StringOrNum {
- String(String),
- Num(u64),
-}
-
-impl From<String> for StringOrNum {
- fn from(value: String) -> Self {
- StringOrNum::String(value)
- }
-}
-
-impl From<u64> for StringOrNum {
- fn from(value: u64) -> Self {
- StringOrNum::Num(value)
- }
-}
-
-#[derive(Clone, Debug, Default, Deserialize, Serialize)]
-pub struct ConfigFlags {
- hide_avg_cpu: Option<bool>,
- dot_marker: Option<bool>,
- temperature_type: Option<String>,
- rate: Option<StringOrNum>,
- left_legend: Option<bool>,
- current_usage: Option<bool>,
- unnormalized_cpu: Option<bool>,
- group_processes: Option<bool>,
- case_sensitive: Option<bool>,
- whole_word: Option<bool>,
- regex: Option<bool>,
- basic: Option<bool>,
- default_time_value: Option<StringOrNum>,
- time_delta: Option<StringOrNum>,
- autohide_time: Option<bool>,
- hide_time: Option<bool>,
- default_widget_type: Option<String>,
- default_widget_count: Option<u64>,
- expanded_on_startup: Option<bool>,
- use_old_network_legend: Option<bool>,
- hide_table_gap: Option<bool>,
- battery: Option<bool>,
- disable_click: Option<bool>,
- no_write: Option<bool>,
- /// For built-in colour palettes.
- color: Option<String>,
- mem_as_value: Option<bool>,
- tree: Option<bool>,
- show_table_scroll_position: Option<bool>,
- process_command: Option<bool>,
- disable_advanced_kill: Option<bool>,
- network_use_bytes: Option<bool>,
- network_use_log: Option<bool>,
- network_use_binary_prefix: Option<bool>,
- enable_gpu: Option<bool>,
- enable_cache_memory: Option<bool>,
- retention: Option<StringOrNum>,
-}
-
-#[derive(Clone, Debug, Default, Deserialize, Serialize)]
-pub struct ConfigColours {
- pub table_header_color: Option<Cow<'static, str>>,
- pub all_cpu_color: Option<Cow<'static, str>>,
- pub avg_cpu_color: Option<Cow<'static, str>>,
- pub cpu_core_colors: Option<Vec<Cow<'static, str>>>,
- pub ram_color: Option<Cow<'static, str>>,
- #[cfg(not(target_os = "windows"))]
- pub cache_color: Option<Cow<'static, str>>,
- pub swap_color: Option<Cow<'static, str>>,
- pub arc_color: Option<Cow<'static, str>>,
- pub gpu_core_colors: Option<Vec<Cow<'static, str>>>,
- pub rx_color: Option<Cow<'static, str>>,
- pub tx_color: Option<Cow<'static, str>>,
- pub rx_total_color: Option<Cow<'static, str>>, // These only affect basic mode.
- pub tx_total_color: Option<Cow<'static, str>>, // These only affect basic mode.
- pub border_color: Option<Cow<'static, str>>,
- pub highlighted_border_color: Option<Cow<'static, str>>,
- pub disabled_text_color: Option<Cow<'static, str>>,
- pub text_color: Option<Cow<'static, str>>,
- pub selected_text_color: Option<Cow<'static, str>>,
- pub selected_bg_color: Option<Cow<'static, str>>,
- pub widget_title_color: Option<Cow<'static, str>>,
- pub graph_color: Option<Cow<'static, str>>,
- pub high_battery_color: Option<Cow<'static, str>>,
- pub medium_battery_color: Option<Cow<'static, str>>,
- pub low_battery_color: Option<Cow<'static, str>>,
-}
-
-impl ConfigColours {
- /// Returns `true` if there is a [`ConfigColours`] that is empty or there isn't one at all.
- pub fn is_empty(&self) -> bool {
- if let Ok(serialized_string) = toml_edit::ser::to_string(self) {
- return serialized_string.is_empty();
- }
-
- true
- }
-}
-
-/// Workaround as per https://github.com/serde-rs/serde/issues/1030
-fn default_as_true() -> bool {
- true
-}
-
-#[derive(Clone, Debug, Default, Deserialize, Serialize)]
-pub struct IgnoreList {
- #[serde(default = "default_as_true")]
- // TODO: Deprecate and/or rename, current name sounds awful.
- // Maybe to something like "deny_entries"? Currently it defaults to a denylist anyways, so maybe "allow_entries"?
- pub is_list_ignored: bool,
- pub list: Vec<String>,
- #[serde(default = "bool::default")]
- pub regex: bool,
- #[serde(default = "bool::default")]
- pub case_sensitive: bool,
- #[serde(default = "bool::default")]
- pub whole_word: bool,
-}
+pub use config::Config;
macro_rules! is_flag_enabled {
($flag_name:ident, $matches:expr, $config:expr) => {
@@ -261,6 +129,7 @@ pub fn init_app(
}
};
+ // TODO: Can probably just reuse the options struct.
let app_config_fields = AppConfigFields {
update_rate: get_update_rate(matches, config)
.context("Update 'rate' in your config file.")?,
@@ -917,7 +786,8 @@ mod test {
app::App,
canvas::styling::CanvasStyling,
options::{
- get_default_time_value, get_retention, get_update_rate, try_parse_ms, ConfigFlags,
+ config::ConfigFlags, get_default_time_value, get_retention, get_update_rate,
+ try_parse_ms,
},
};
diff --git a/src/options/colours.rs b/src/options/colours.rs
new file mode 100644
index 00000000..edef00b4
--- /dev/null
+++ b/src/options/colours.rs
@@ -0,0 +1,43 @@
+use std::borrow::Cow;
+
+use serde::{Deserialize, Serialize};
+
+#[derive(Clone, Debug, Default, Deserialize, Serialize)]
+pub struct ConfigColours {
+ pub table_header_color: Option<Cow<'static, str>>,
+ pub all_cpu_color: Option<Cow<'static, str>>,
+ pub avg_cpu_color: Option<Cow<'static, str>>,
+ pub cpu_core_colors: Option<Vec<Cow<'static, str>>>,
+ pub ram_color: Option<Cow<'static, str>>,
+ #[cfg(not(target_os = "windows"))]
+ pub cache_color: Option<Cow<'static, str>>,
+ pub swap_color: Option<Cow<'static, str>>,
+ pub arc_color: Option<Cow<'static, str>>,
+ pub gpu_core_colors: Option<Vec<Cow<'static, str>>>,
+ pub rx_color: Option<Cow<'static, str>>,
+ pub tx_color: Option<Cow<'static, str>>,
+ pub rx_total_color: Option<Cow<'static, str>>, // These only affect basic mode.
+ pub tx_total_color: Option<Cow<'static, str>>, // These only affect basic mode.
+ pub border_color: Option<Cow<'static, str>>,
+ pub highlighted_border_color: Option<Cow<'static, str>>,
+ pub disabled_text_color: Option<Cow<'static, str>>,
+ pub text_color: Option<Cow<'static, str>>,
+ pub selected_text_color: Option<Cow<'static, str>>,
+ pub selected_bg_color: Option<Cow<'static, str>>,
+ pub widget_title_color: Option<Cow<'static, str>>,
+ pub graph_color: Option<Cow<'static, str>>,
+ pub high_battery_color: Option<Cow<'static, str>>,
+ pub medium_battery_color: Option<Cow<'static, str>>,
+ pub low_battery_color: Option<Cow<'static, str>>,
+}
+
+impl ConfigColours {
+ /// Returns `true` if there is a [`ConfigColours`] that is empty or there isn't one at all.
+ pub fn is_empty(&self) -> bool {
+ if let Ok(serialized_string) = toml_edit::ser::to_string(self) {
+ return serialized_string.is_empty();
+ }
+
+ true
+ }
+}
diff --git a/src/options/config.rs b/src/options/config.rs
index e76d867c..23c2f956 100644
--- a/src/options/config.rs
+++ b/src/options/config.rs
@@ -1,3 +1,84 @@
pub mod cpu;
+mod ignore_list;
pub mod layout;
pub mod process_columns;
+
+use serde::{Deserialize, Serialize};
+
+pub use self::ignore_list::IgnoreList;
+use self::{cpu::CpuConfig, layout::Row, process_columns::ProcessConfig};
+
+use super::ConfigColours;
+
+#[derive(Clone, Debug, Default, Deserialize)]
+pub struct Config {
+ pub(crate) flags: Option<ConfigFlags>,
+ pub(crate) colors: Option<ConfigColours>,
+ pub(crate) row: Option<Vec<Row>>,
+ pub(crate) disk_filter: Option<IgnoreList>,
+ pub(crate) mount_filter: Option<IgnoreList>,
+ pub(crate) temp_filter: Option<IgnoreList>,
+ pub(crate) net_filter: Option<IgnoreList>,
+ pub(crate) processes: Option<ProcessConfig>,
+ pub(crate) cpu: Option<CpuConfig>,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+#[serde(untagged)]
+pub(crate) enum StringOrNum {
+ String(String),
+ Num(u64),
+}
+
+impl From<String> for StringOrNum {
+ fn from(value: String) -> Self {
+ StringOrNum::String(value)
+ }
+}
+
+impl From<u64> for StringOrNum {
+ fn from(value: u64) -> Self {
+ StringOrNum::Num(value)
+ }
+}
+
+#[derive(Clone, Debug, Default, Deserialize, Serialize)]
+pub(crate) struct ConfigFlags {
+ pub(crate) hide_avg_cpu: Option<bool>,
+ pub(crate) dot_marker: Option<bool>,
+ pub(crate) temperature_type: Option<String>,
+ pub(crate) rate: Option<StringOrNum>,
+ pub(crate) left_legend: Option<bool>,
+ pub(crate) current_usage: Option<bool>,
+ pub(crate) unnormalized_cpu: Option<bool>,
+ pub(crate) group_processes: Option<bool>,
+ pub(crate) case_sensitive: Option<bool>,
+ pub(crate) whole_word: Option<bool>,
+ pub(crate) regex: Option<bool>,
+ pub(crate) basic: Option<bool>,
+ pub(crate) default_time_value: Option<StringOrNum>,
+ pub(crate) time_delta: Option<StringOrNum>,
+ pub(crate) autohide_time: Option<bool>,
+ pub(crate) hide_time: Option<bool>,
+ pub(crate) default_widget_type: Option<String>,
+ pub(crate) default_widget_count: Option<u64>,
+ pub(crate) expanded_on_startup: Option<bool>,
+ pub(crate) use_old_network_legend: Option<bool>,
+ pub(crate) hide_table_gap: Option<bool>,
+ pub(crate) battery: Option<bool>,
+ pub(crate) disable_click: Option<bool>,
+ pub(crate) no_write: Option<bool>,
+ /// For built-in colour palettes.
+ pub(crate) color: Option<String>,
+ pub(crate) mem_as_value: Option<bool>,
+ pub(crate) tree: Option<bool>,
+ pub(crate) show_table_scroll_position: Option<bool>,
+ pub(crate) process_command: Option<bool>,
+ pub(crate) disable_advanced_kill: Option<bool>,
+ pub(crate) network_use_bytes: Option<bool>,
+ pub(crate) network_use_log: Option<bool>,
+ pub(crate) network_use_binary_prefix: Option<bool>,
+ pub(crate) enable_gpu: Option<bool>,
+ pub(crate) enable_cache_memory: Option<bool>,
+ pub(crate) retention: Option<StringOrNum>,
+}
diff --git a/src/options/config/ignore_list.rs b/src/options/config/ignore_list.rs
new file mode 100644
index 00000000..d70224c1
--- /dev/null
+++ b/src/options/config/ignore_list.rs
@@ -0,0 +1,21 @@
+use serde::{Deserialize, Serialize};
+
+/// Workaround as per https://github.com/serde-rs/serde/issues/1030
+fn default_as_true() -> bool {
+ true
+}
+
+#[derive(Clone, Debug, Default, Deserialize, Serialize)]
+pub struct IgnoreList {
+ #[serde(default = "default_as_true")]
+ // TODO: Deprecate and/or rename, current name sounds awful.
+ // Maybe to something like "deny_entries"? Currently it defaults to a denylist anyways, so maybe "allow_entries"?
+ pub is_list_ignored: bool,
+ pub list: Vec<String>,
+ #[serde(default)]
+ pub regex: bool,
+ #[serde(default)]
+ pub case_sensitive: bool,
+ #[serde(default)]
+ pub whole_word: bool,
+}
diff --git a/src/options/config/layout.rs b/src/options/config/layout.rs
index cfb1d705..90467e11 100644
--- a/src/options/config/layout.rs
+++ b/src/options/config/layout.rs
@@ -235,14 +235,13 @@ pub struct FinalWidget {
mod test {
use toml_edit::de::from_str;
+ use super::*;
use crate::{
constants::{DEFAULT_LAYOUT, DEFAULT_WIDGET_ID},
options::Config,
utils::error,
};
- use super::*;
-
const PROC_LAYOUT: &str = r#"
[[row]]
[[row.child]]