use crate::migrate::m3t4;
use serde::Deserialize;
use smart_default::SmartDefault;
#[derive(SmartDefault, Debug, Clone, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct Config {
#[default = true]
pub layerrules: bool,
#[default = "ctrl+shift+alt, h"]
pub kill_bind: String,
#[default(None)]
pub windows: Option<Windows>,
#[allow(dead_code)]
pub version: Option<u16>,
}
#[derive(SmartDefault, Debug, Clone, PartialEq, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct Windows {
#[default = 8.5]
pub scale: f64,
#[default = 5]
pub items_per_row: u8,
#[default(None)]
pub overview: Option<Overview>,
#[default(None)]
pub switch: Option<m3t4::Switch>,
}
#[derive(SmartDefault, Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct Overview {
pub launcher: Launcher,
#[default = "super_l"]
pub key: Box<str>,
#[default(crate::Modifier::Super)]
pub modifier: crate::Modifier,
#[default(Vec::new())]
pub filter_by: Vec<crate::io::FilterBy>,
#[default = false]
pub hide_filtered: bool,
}
#[derive(SmartDefault, Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct Launcher {
#[default(None)]
pub default_terminal: Option<Box<str>>,
#[default(crate::Modifier::Ctrl)]
pub launch_modifier: crate::Modifier,
#[default = 650]
pub width: u32,
#[default = 5]
pub max_items: u8,
#[default = true]
pub show_when_empty: bool,
#[default(Plugins{
applications: Some(crate::io::ApplicationsPluginConfig::default()),
terminal: Some(crate::io::EmptyConfig::default()),
shell: None,
websearch: Some(crate::io::WebSearchConfig::default()),
calc: Some(crate::io::EmptyConfig::default()),
path: Some(crate::io::EmptyConfig::default()),
})]
pub plugins: Plugins,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Plugins {
pub applications: Option<crate::io::ApplicationsPluginConfig>,
pub terminal: Option<crate::io::EmptyConfig>,
pub shell: Option<crate::io::EmptyConfig>,
pub websearch: Option<crate::io::WebSearchConfig>,
pub calc: Option<crate::io::EmptyConfig>,
pub path: Option<crate::io::EmptyConfig>,
}