//! How to handle config files and arguments.
// TODO: Break this apart or do something a bit smarter.
pub mod args;
pub mod config;
use std::{
borrow::Cow,
convert::TryInto,
str::FromStr,
time::{Duration, Instant},
};
use anyhow::{Context, Result};
use clap::ArgMatches;
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 crate::{
app::{filter::Filter, layout_manager::*, *},
canvas::{styling::CanvasStyling, ColourScheme},
constants::*,
data_collection::temperature::TemperatureType,
utils::{
data_units::DataUnit,
error::{self, BottomError},
},
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