docs(schema): ensure every enum variant has a renderable title

This commit is contained in:
LGUG2Z
2025-12-27 20:28:08 -08:00
parent 3a81f7babb
commit f77a303b30
14 changed files with 163 additions and 30 deletions

View File

@@ -5,8 +5,9 @@ Check schema.json and schema.bar.json for missing docstrings and map them to Rus
This script analyzes the generated JSON schemas and identifies: This script analyzes the generated JSON schemas and identifies:
1. Type definitions ($defs) missing top-level descriptions 1. Type definitions ($defs) missing top-level descriptions
2. Enum variants missing descriptions (in oneOf/anyOf) 2. Enum variants missing descriptions (in oneOf/anyOf)
3. Struct properties missing descriptions 3. Enum variants missing titles (object variants in oneOf/anyOf)
4. Top-level schema properties missing descriptions 4. Struct properties missing descriptions
5. Top-level schema properties missing descriptions
For each missing docstring, it attempts to find the corresponding Rust source For each missing docstring, it attempts to find the corresponding Rust source
file and line number where the docstring should be added. file and line number where the docstring should be added.
@@ -23,7 +24,7 @@ from typing import Optional
@dataclass @dataclass
class MissingDoc: class MissingDoc:
type_name: str type_name: str
kind: str # "type", "variant", "property" kind: str # "type", "variant", "property", "variant_title"
item_name: Optional[str] # variant or property name item_name: Optional[str] # variant or property name
rust_file: Optional[str] = None rust_file: Optional[str] = None
rust_line: Optional[int] = None rust_line: Optional[int] = None
@@ -39,6 +40,8 @@ class MissingDoc:
return f"[TYPE] {self.type_name}{location}" return f"[TYPE] {self.type_name}{location}"
elif self.kind == "variant": elif self.kind == "variant":
return f"[VARIANT] {self.type_name}::{self.item_name}{location}" return f"[VARIANT] {self.type_name}::{self.item_name}{location}"
elif self.kind == "variant_title":
return f"[VARIANT_TITLE] {self.type_name}::{self.item_name}{location}"
else: else:
return f"[PROPERTY] {self.type_name}.{self.item_name}{location}" return f"[PROPERTY] {self.type_name}.{self.item_name}{location}"
@@ -62,7 +65,7 @@ def find_rust_definition(
rf"pub\s+enum\s+{type_name}\b", rf"pub\s+enum\s+{type_name}\b",
rf"pub\s+struct\s+{type_name}\b", rf"pub\s+struct\s+{type_name}\b",
] ]
elif kind == "variant": elif kind in ("variant", "variant_title"):
patterns = [ patterns = [
rf"^\s*{re.escape(item_name)}\s*[,\(\{{]", rf"^\s*{re.escape(item_name)}\s*[,\(\{{]",
rf"^\s*{re.escape(item_name)}\s*$", rf"^\s*{re.escape(item_name)}\s*$",
@@ -83,7 +86,7 @@ def find_rust_definition(
if re.search(pattern, line): if re.search(pattern, line):
return str(rust_file), i + 1 return str(rust_file), i + 1
elif kind in ("variant", "property"): elif kind in ("variant", "variant_title", "property"):
parent_pattern = rf"pub\s+(?:enum|struct)\s+{type_name}\b" parent_pattern = rf"pub\s+(?:enum|struct)\s+{type_name}\b"
in_type = False in_type = False
brace_count = 0 brace_count = 0
@@ -112,6 +115,39 @@ def find_rust_definition(
return None, None return None, None
def _get_variant_identifier(variant: dict) -> str:
"""Extract a meaningful identifier for a variant.
Tries to find the best identifier by checking:
1. A top-level const value (e.g., {"const": "Linear"})
2. A property with a const value (e.g., {"kind": {"const": "Bar"}})
3. The first required property name
4. The type field
5. Falls back to "unknown"
"""
# Check for top-level const value (simple enum variant)
if "const" in variant:
return str(variant["const"])
properties = variant.get("properties", {})
# Check for a property with a const value (common pattern for tagged enums)
for prop_name, prop_def in properties.items():
if isinstance(prop_def, dict) and "const" in prop_def:
return str(prop_def["const"])
# Fall back to first required property name
required = variant.get("required", [])
if required:
return str(required[0])
# Fall back to type
if "type" in variant:
return str(variant["type"])
return "unknown"
def check_type_description(type_name: str, type_def: dict) -> list[MissingDoc]: def check_type_description(type_name: str, type_def: dict) -> list[MissingDoc]:
"""Check if a type definition has proper documentation.""" """Check if a type definition has proper documentation."""
missing = [] missing = []
@@ -150,6 +186,19 @@ def check_type_description(type_name: str, type_def: dict) -> list[MissingDoc]:
MissingDoc(type_name, "variant", str(prop_name), None, None) MissingDoc(type_name, "variant", str(prop_name), None, None)
) )
# Case 4: Object variant missing title (needed for schema UI display)
# Object variants should have a title or const for proper display in editors
if (
"properties" in variant
and "title" not in variant
and "const" not in variant
):
# Try to find a good identifier for the variant (for display only)
variant_id = _get_variant_identifier(variant)
missing.append(
MissingDoc(type_name, "variant_title", str(variant_id), None, None)
)
# Check anyOf variants - check each variant individually # Check anyOf variants - check each variant individually
elif "anyOf" in type_def: elif "anyOf" in type_def:
# anyOf types should have a top-level description # anyOf types should have a top-level description
@@ -180,6 +229,17 @@ def check_type_description(type_name: str, type_def: dict) -> list[MissingDoc]:
MissingDoc(type_name, "variant", str(variant_id), None, None) MissingDoc(type_name, "variant", str(variant_id), None, None)
) )
# Check for missing title on object variants in anyOf
if (
"properties" in variant
and "title" not in variant
and "const" not in variant
):
variant_id = _get_variant_identifier(variant)
missing.append(
MissingDoc(type_name, "variant_title", str(variant_id), None, None)
)
# Check simple string enums (no oneOf means no variant descriptions possible in schema) # Check simple string enums (no oneOf means no variant descriptions possible in schema)
elif "enum" in type_def: elif "enum" in type_def:
if not has_top_description: if not has_top_description:
@@ -285,11 +345,13 @@ def print_results(all_missing: list[MissingDoc], display_name: str) -> None:
type_count = sum(1 for d in all_missing if d.kind == "type") type_count = sum(1 for d in all_missing if d.kind == "type")
variant_count = sum(1 for d in all_missing if d.kind == "variant") variant_count = sum(1 for d in all_missing if d.kind == "variant")
variant_title_count = sum(1 for d in all_missing if d.kind == "variant_title")
prop_count = sum(1 for d in all_missing if d.kind == "property") prop_count = sum(1 for d in all_missing if d.kind == "property")
print(f"\nTotal: {len(all_missing)} missing docstrings") print(f"\nTotal: {len(all_missing)} missing docstrings/titles")
print(f" - {type_count} types") print(f" - {type_count} types")
print(f" - {variant_count} variants") print(f" - {variant_count} variants")
print(f" - {variant_title_count} variant titles")
print(f" - {prop_count} properties") print(f" - {prop_count} properties")
# Print by file # Print by file
@@ -311,8 +373,7 @@ def print_results(all_missing: list[MissingDoc], display_name: str) -> None:
def main(): def main():
script_dir = Path(__file__).parent project_root = Path.cwd()
project_root = script_dir.parent
# Define schemas to check with their respective search paths # Define schemas to check with their respective search paths
schemas = [ schemas = [

View File

@@ -78,8 +78,8 @@ deadlock $RUST_LOG="trace":
docgen starlight: docgen starlight:
rm {{ starlight }}/src/data/cli/windows/*.md rm {{ starlight }}/src/data/cli/windows/*.md
cargo run --package komorebic -- docgen --output {{ starlight }}/src/data/cli/windows cargo run --package komorebic -- docgen --output {{ starlight }}/src/data/cli/windows
schemars-docgen ./schema.json --output {{ starlight }}/src/content/docs/reference/komorebi-windows.mdx --format mdx --title "komorebi.json (Windows)" --description "komorebi for Windows configuration schema reference" schemars-docgen ./schema.json --output {{ starlight }}/src/content/docs/reference/komorebi-windows.mdx --title "komorebi.json (Windows)" --description "komorebi for Windows configuration schema reference"
schemars-docgen ./schema.bar.json --output {{ starlight }}/src/content/docs/reference/bar-windows.mdx --format mdx --title "komorebi.bar.json (Windows)" --description "komorebi-bar for Windows configuration schema reference" schemars-docgen ./schema.bar.json --output {{ starlight }}/src/content/docs/reference/bar-windows.mdx --title "komorebi.bar.json (Windows)" --description "komorebi-bar for Windows configuration schema reference"
jsonschema: jsonschema:
cargo run --package komorebic -- static-config-schema > schema.json cargo run --package komorebic -- static-config-schema > schema.json

View File

@@ -571,6 +571,7 @@ impl From<Position> for Pos2 {
/// Komorebi bar theme /// Komorebi bar theme
pub enum KomobarTheme { pub enum KomobarTheme {
/// Theme from catppuccin-egui /// Theme from catppuccin-egui
#[cfg_attr(feature = "schemars", schemars(title = "Catppuccin"))]
Catppuccin { Catppuccin {
/// Name of the Catppuccin theme (theme previews: https://github.com/catppuccin/catppuccin) /// Name of the Catppuccin theme (theme previews: https://github.com/catppuccin/catppuccin)
name: komorebi_themes::Catppuccin, name: komorebi_themes::Catppuccin,
@@ -582,6 +583,7 @@ pub enum KomobarTheme {
auto_select_text: Option<komorebi_themes::CatppuccinValue>, auto_select_text: Option<komorebi_themes::CatppuccinValue>,
}, },
/// Theme from base16-egui-themes /// Theme from base16-egui-themes
#[cfg_attr(feature = "schemars", schemars(title = "Base16"))]
Base16 { Base16 {
/// Name of the Base16 theme (theme previews: https://tinted-theming.github.io/tinted-gallery/) /// Name of the Base16 theme (theme previews: https://tinted-theming.github.io/tinted-gallery/)
name: komorebi_themes::Base16, name: komorebi_themes::Base16,
@@ -593,6 +595,7 @@ pub enum KomobarTheme {
auto_select_text: Option<komorebi_themes::Base16Value>, auto_select_text: Option<komorebi_themes::Base16Value>,
}, },
/// Custom Base16 theme /// Custom Base16 theme
#[cfg_attr(feature = "schemars", schemars(title = "Custom"))]
Custom { Custom {
/// Colours of the custom Base16 theme palette /// Colours of the custom Base16 theme palette
colours: Box<komorebi_themes::Base16ColourPalette>, colours: Box<komorebi_themes::Base16ColourPalette>,
@@ -669,9 +672,10 @@ pub enum DisplayFormat {
} }
macro_rules! extend_enum { macro_rules! extend_enum {
($existing_enum:ident, $new_enum:ident, { $($(#[$meta:meta])* $variant:ident),* $(,)? }) => { ($(#[$type_meta:meta])* $existing_enum:ident, $new_enum:ident, { $($(#[$meta:meta])* $variant:ident),* $(,)? }) => {
#[derive(Copy, Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq)] #[derive(Copy, Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
$(#[$type_meta])*
pub enum $new_enum { pub enum $new_enum {
// Add new variants // Add new variants
$( $(
@@ -692,7 +696,9 @@ macro_rules! extend_enum {
}; };
} }
extend_enum!(DisplayFormat, WorkspacesDisplayFormat, { extend_enum!(
/// Workspaces display format
DisplayFormat, WorkspacesDisplayFormat, {
/// Show all icons only /// Show all icons only
AllIcons, AllIcons,
/// Show both all icons and text /// Show both all icons and text

View File

@@ -30,12 +30,16 @@ static SHOW_KOMOREBI_LAYOUT_OPTIONS: AtomicUsize = AtomicUsize::new(0);
/// Grouping /// Grouping
pub enum Grouping { pub enum Grouping {
/// No grouping is applied /// No grouping is applied
#[cfg_attr(feature = "schemars", schemars(title = "None"))]
None, None,
/// Widgets are grouped as a whole /// Widgets are grouped as a whole
#[cfg_attr(feature = "schemars", schemars(title = "Bar"))]
Bar(GroupingConfig), Bar(GroupingConfig),
/// Widgets are grouped by alignment /// Widgets are grouped by alignment
#[cfg_attr(feature = "schemars", schemars(title = "Alignment"))]
Alignment(GroupingConfig), Alignment(GroupingConfig),
/// Widgets are grouped individually /// Widgets are grouped individually
#[cfg_attr(feature = "schemars", schemars(title = "Widget"))]
Widget(GroupingConfig), Widget(GroupingConfig),
} }
@@ -396,7 +400,7 @@ pub enum GroupingStyle {
#[serde(untagged)] #[serde(untagged)]
/// Rounding configuration /// Rounding configuration
pub enum RoundingConfig { pub enum RoundingConfig {
/// All 4 corners are the same /// All 4 corners are the same
Same(f32), Same(f32),
/// All 4 corners are custom. Order: NW, NE, SW, SE /// All 4 corners are custom. Order: NW, NE, SW, SE
Individual([f32; 4]), Individual([f32; 4]),

View File

@@ -116,8 +116,10 @@ pub enum DateFormat {
/// Day Date Month Year format (8 September 2024) /// Day Date Month Year format (8 September 2024)
DayDateMonthYear, DayDateMonthYear,
/// Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html) /// Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
#[cfg_attr(feature = "schemars", schemars(title = "Custom"))]
Custom(String), Custom(String),
/// Custom format with modifiers /// Custom format with modifiers
#[cfg_attr(feature = "schemars", schemars(title = "CustomModifiers"))]
CustomModifiers(CustomModifiers), CustomModifiers(CustomModifiers),
} }

View File

@@ -29,6 +29,7 @@ use std::fmt::Formatter;
/// Komorebi layout kind /// Komorebi layout kind
pub enum KomorebiLayout { pub enum KomorebiLayout {
/// Predefined layout /// Predefined layout
#[cfg_attr(feature = "schemars", schemars(title = "Default"))]
Default(komorebi_client::DefaultLayout), Default(komorebi_client::DefaultLayout),
/// Monocle mode /// Monocle mode
Monocle, Monocle,

View File

@@ -135,6 +135,7 @@ pub enum TimeFormat {
/// Twenty-four-hour format displayed as a binary clock with rectangles (with seconds) (https://en.wikipedia.org/wiki/Binary_clock) /// Twenty-four-hour format displayed as a binary clock with rectangles (with seconds) (https://en.wikipedia.org/wiki/Binary_clock)
BinaryRectangle, BinaryRectangle,
/// Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html) /// Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
#[cfg_attr(feature = "schemars", schemars(title = "Custom"))]
Custom(String), Custom(String),
} }

View File

@@ -37,28 +37,40 @@ pub trait BarWidget {
/// Widget configuration /// Widget configuration
pub enum WidgetConfig { pub enum WidgetConfig {
/// Applications widget configuration /// Applications widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Applications"))]
Applications(ApplicationsConfig), Applications(ApplicationsConfig),
/// Battery widget configuration /// Battery widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Battery"))]
Battery(BatteryConfig), Battery(BatteryConfig),
/// CPU widget configuration /// CPU widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Cpu"))]
Cpu(CpuConfig), Cpu(CpuConfig),
/// Date widget configuration /// Date widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Date"))]
Date(DateConfig), Date(DateConfig),
/// Keyboard widget configuration /// Keyboard widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Keyboard"))]
Keyboard(KeyboardConfig), Keyboard(KeyboardConfig),
/// Komorebi widget configuration /// Komorebi widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Komorebi"))]
Komorebi(KomorebiConfig), Komorebi(KomorebiConfig),
/// Media widget configuration /// Media widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Media"))]
Media(MediaConfig), Media(MediaConfig),
/// Memory widget configuration /// Memory widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Memory"))]
Memory(MemoryConfig), Memory(MemoryConfig),
/// Network widget configuration /// Network widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Network"))]
Network(NetworkConfig), Network(NetworkConfig),
/// Storage widget configuration /// Storage widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Storage"))]
Storage(StorageConfig), Storage(StorageConfig),
/// Time widget configuration /// Time widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Time"))]
Time(TimeConfig), Time(TimeConfig),
/// Update widget configuration /// Update widget configuration
#[cfg_attr(feature = "schemars", schemars(title = "Update"))]
Update(UpdateConfig), Update(UpdateConfig),
} }

View File

@@ -308,13 +308,13 @@ impl Base16Value {
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, Display, PartialEq)] #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, Display, PartialEq)]
/// Catppuccin palette /// Catppuccin palette
pub enum Catppuccin { pub enum Catppuccin {
/// Frappe /// Frappe (https://catppuccin.com/palette#flavor-frappe)
Frappe, Frappe,
/// Latte /// Latte (https://catppuccin.com/palette#flavor-latte)
Latte, Latte,
/// Macchiato /// Macchiato (https://catppuccin.com/palette#flavor-macchiato)
Macchiato, Macchiato,
/// Mocha /// Mocha (https://catppuccin.com/palette#flavor-mocha)
Mocha, Mocha,
} }

View File

@@ -72,6 +72,7 @@ pub enum AnimationStyle {
EaseOutBounce, EaseOutBounce,
/// Ease in out bounce /// Ease in out bounce
EaseInOutBounce, EaseInOutBounce,
#[cfg_attr(feature = "schemars", schemars(title = "CubicBezier"))]
#[value(skip)] #[value(skip)]
/// Custom Cubic Bézier function /// Custom Cubic Bézier function
CubicBezier(f64, f64, f64, f64), CubicBezier(f64, f64, f64, f64),

View File

@@ -663,12 +663,15 @@ pub struct StaticConfig {
/// Animations configuration options /// Animations configuration options
pub struct AnimationsConfig { pub struct AnimationsConfig {
/// Enable or disable animations /// Enable or disable animations
#[cfg_attr(feature = "schemars", schemars(extend("default" = PerAnimationPrefixConfig::Global(false))))]
pub enabled: PerAnimationPrefixConfig<bool>, pub enabled: PerAnimationPrefixConfig<bool>,
/// Set the animation duration in ms /// Set the animation duration in ms
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "schemars", schemars(extend("default" = PerAnimationPrefixConfig::Global(250))))]
pub duration: Option<PerAnimationPrefixConfig<u64>>, pub duration: Option<PerAnimationPrefixConfig<u64>>,
/// Set the animation style /// Set the animation style
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "schemars", schemars(extend("default" = PerAnimationPrefixConfig::Global(AnimationStyle::Linear))))]
pub style: Option<PerAnimationPrefixConfig<AnimationStyle>>, pub style: Option<PerAnimationPrefixConfig<AnimationStyle>>,
/// Set the animation FPS /// Set the animation FPS
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
@@ -682,6 +685,7 @@ pub struct AnimationsConfig {
/// Komorebi theme /// Komorebi theme
pub enum KomorebiTheme { pub enum KomorebiTheme {
/// A theme from catppuccin-egui /// A theme from catppuccin-egui
#[cfg_attr(feature = "schemars", schemars(title = "Catppuccin"))]
Catppuccin { Catppuccin {
/// Name of the Catppuccin theme (theme previews: https://github.com/catppuccin/catppuccin) /// Name of the Catppuccin theme (theme previews: https://github.com/catppuccin/catppuccin)
name: komorebi_themes::Catppuccin, name: komorebi_themes::Catppuccin,
@@ -727,6 +731,7 @@ pub enum KomorebiTheme {
bar_accent: Option<komorebi_themes::CatppuccinValue>, bar_accent: Option<komorebi_themes::CatppuccinValue>,
}, },
/// A theme from base16-egui-themes /// A theme from base16-egui-themes
#[cfg_attr(feature = "schemars", schemars(title = "Base16"))]
Base16 { Base16 {
/// Name of the Base16 theme (theme previews: https://tinted-theming.github.io/tinted-gallery/) /// Name of the Base16 theme (theme previews: https://tinted-theming.github.io/tinted-gallery/)
name: komorebi_themes::Base16, name: komorebi_themes::Base16,
@@ -772,6 +777,7 @@ pub enum KomorebiTheme {
bar_accent: Option<komorebi_themes::Base16Value>, bar_accent: Option<komorebi_themes::Base16Value>,
}, },
/// A custom Base16 theme /// A custom Base16 theme
#[cfg_attr(feature = "schemars", schemars(title = "Custom"))]
Custom { Custom {
/// Colours of the custom Base16 theme palette /// Colours of the custom Base16 theme palette
colours: Box<komorebi_themes::Base16ColourPalette>, colours: Box<komorebi_themes::Base16ColourPalette>,

View File

@@ -305,8 +305,10 @@ impl RenderDispatcher for TransparencyRenderDispatcher {
/// Aspect ratio for temporarily floating windows /// Aspect ratio for temporarily floating windows
pub enum AspectRatio { pub enum AspectRatio {
/// Predefined aspect ratio /// Predefined aspect ratio
#[cfg_attr(feature = "schemars", schemars(title = "Predefined"))]
Predefined(PredefinedAspectRatio), Predefined(PredefinedAspectRatio),
/// Custom W:H aspect ratio /// Custom W:H aspect ratio
#[cfg_attr(feature = "schemars", schemars(title = "Custom"))]
Custom(i32, i32), Custom(i32, i32),
} }

View File

@@ -345,6 +345,7 @@
"const": "EaseInOutBounce" "const": "EaseInOutBounce"
}, },
{ {
"title": "CubicBezier",
"description": "Custom Cubic Bézier function", "description": "Custom Cubic Bézier function",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2154,22 +2155,22 @@
"description": "Catppuccin palette", "description": "Catppuccin palette",
"oneOf": [ "oneOf": [
{ {
"description": "Frappe", "description": "Frappe (https://catppuccin.com/palette#flavor-frappe)",
"type": "string", "type": "string",
"const": "Frappe" "const": "Frappe"
}, },
{ {
"description": "Latte", "description": "Latte (https://catppuccin.com/palette#flavor-latte)",
"type": "string", "type": "string",
"const": "Latte" "const": "Latte"
}, },
{ {
"description": "Macchiato", "description": "Macchiato (https://catppuccin.com/palette#flavor-macchiato)",
"type": "string", "type": "string",
"const": "Macchiato" "const": "Macchiato"
}, },
{ {
"description": "Mocha", "description": "Mocha (https://catppuccin.com/palette#flavor-mocha)",
"type": "string", "type": "string",
"const": "Mocha" "const": "Mocha"
} }
@@ -2456,6 +2457,7 @@
"const": "DayDateMonthYear" "const": "DayDateMonthYear"
}, },
{ {
"title": "Custom",
"description": "Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html)", "description": "Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html)",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2469,6 +2471,7 @@
] ]
}, },
{ {
"title": "CustomModifiers",
"description": "Custom format with modifiers", "description": "Custom format with modifiers",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2517,7 +2520,7 @@
"const": "UltrawideVerticalStack" "const": "UltrawideVerticalStack"
}, },
{ {
"description": "Grid Layout\n\n```\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n| | | | | | | | | | | | | | |\n| | | | | | | | | | | | | +---+\n+-----+-----+ | +---+---+ +---+---+---+ +---+---| |\n| | | | | | | | | | | | | +---+\n| | | | | | | | | | | | | | |\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n 4 windows 5 windows 6 windows 7 windows\n```", "description": "Grid Layout\n\n```\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n| | | | | | | | | | | | | | |\n| | | | | | | | | | | | | +---+\n+-----+-----+ | +---+---+ +---+---+---+ +---+---| |\n| | | | | | | | | | | | | +---+\n| | | | | | | | | | | | | | |\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n 4 windows 5 windows 6 windows 7 windows\n```",
"type": "string", "type": "string",
"const": "Grid" "const": "Grid"
}, },
@@ -2649,6 +2652,7 @@
"description": "Grouping", "description": "Grouping",
"oneOf": [ "oneOf": [
{ {
"title": "None",
"description": "No grouping is applied", "description": "No grouping is applied",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2662,6 +2666,7 @@
] ]
}, },
{ {
"title": "Bar",
"description": "Widgets are grouped as a whole", "description": "Widgets are grouped as a whole",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2676,6 +2681,7 @@
] ]
}, },
{ {
"title": "Alignment",
"description": "Widgets are grouped by alignment", "description": "Widgets are grouped by alignment",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2690,6 +2696,7 @@
] ]
}, },
{ {
"title": "Widget",
"description": "Widgets are grouped individually", "description": "Widgets are grouped individually",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2879,6 +2886,7 @@
"description": "Komorebi bar theme", "description": "Komorebi bar theme",
"oneOf": [ "oneOf": [
{ {
"title": "Catppuccin",
"description": "Theme from catppuccin-egui", "description": "Theme from catppuccin-egui",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2930,6 +2938,7 @@
] ]
}, },
{ {
"title": "Base16",
"description": "Theme from base16-egui-themes", "description": "Theme from base16-egui-themes",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2981,6 +2990,7 @@
] ]
}, },
{ {
"title": "Custom",
"description": "Custom Base16 theme", "description": "Custom Base16 theme",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -3162,6 +3172,7 @@
"description": "Komorebi layout kind", "description": "Komorebi layout kind",
"anyOf": [ "anyOf": [
{ {
"title": "Default",
"description": "Predefined layout", "description": "Predefined layout",
"$ref": "#/$defs/DefaultLayout" "$ref": "#/$defs/DefaultLayout"
}, },
@@ -3281,6 +3292,7 @@
"description": "Komorebi theme", "description": "Komorebi theme",
"oneOf": [ "oneOf": [
{ {
"title": "Catppuccin",
"description": "A theme from catppuccin-egui", "description": "A theme from catppuccin-egui",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -3419,6 +3431,7 @@
] ]
}, },
{ {
"title": "Base16",
"description": "A theme from base16-egui-themes", "description": "A theme from base16-egui-themes",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -3557,6 +3570,7 @@
] ]
}, },
{ {
"title": "Custom",
"description": "A custom Base16 theme", "description": "A custom Base16 theme",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8055,6 +8069,7 @@
"const": "BinaryRectangle" "const": "BinaryRectangle"
}, },
{ {
"title": "Custom",
"description": "Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html)", "description": "Custom format (https://docs.rs/chrono/latest/chrono/format/strftime/index.html)",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8107,6 +8122,7 @@
"description": "Widget configuration", "description": "Widget configuration",
"oneOf": [ "oneOf": [
{ {
"title": "Applications",
"description": "Applications widget configuration", "description": "Applications widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8120,6 +8136,7 @@
] ]
}, },
{ {
"title": "Battery",
"description": "Battery widget configuration", "description": "Battery widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8133,6 +8150,7 @@
] ]
}, },
{ {
"title": "Cpu",
"description": "CPU widget configuration", "description": "CPU widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8146,6 +8164,7 @@
] ]
}, },
{ {
"title": "Date",
"description": "Date widget configuration", "description": "Date widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8159,6 +8178,7 @@
] ]
}, },
{ {
"title": "Keyboard",
"description": "Keyboard widget configuration", "description": "Keyboard widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8172,6 +8192,7 @@
] ]
}, },
{ {
"title": "Komorebi",
"description": "Komorebi widget configuration", "description": "Komorebi widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8185,6 +8206,7 @@
] ]
}, },
{ {
"title": "Media",
"description": "Media widget configuration", "description": "Media widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8198,6 +8220,7 @@
] ]
}, },
{ {
"title": "Memory",
"description": "Memory widget configuration", "description": "Memory widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8211,6 +8234,7 @@
] ]
}, },
{ {
"title": "Network",
"description": "Network widget configuration", "description": "Network widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8224,6 +8248,7 @@
] ]
}, },
{ {
"title": "Storage",
"description": "Storage widget configuration", "description": "Storage widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8237,6 +8262,7 @@
] ]
}, },
{ {
"title": "Time",
"description": "Time widget configuration", "description": "Time widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8250,6 +8276,7 @@
] ]
}, },
{ {
"title": "Update",
"description": "Update widget configuration", "description": "Update widget configuration",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -8300,6 +8327,7 @@
] ]
}, },
"WorkspacesDisplayFormat": { "WorkspacesDisplayFormat": {
"description": "Workspaces display format",
"anyOf": [ "anyOf": [
{ {
"description": "Show all icons only", "description": "Show all icons only",

View File

@@ -702,6 +702,7 @@
"const": "EaseInOutBounce" "const": "EaseInOutBounce"
}, },
{ {
"title": "CubicBezier",
"description": "Custom Cubic Bézier function", "description": "Custom Cubic Bézier function",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -749,11 +750,13 @@
{ {
"type": "null" "type": "null"
} }
] ],
"default": 250
}, },
"enabled": { "enabled": {
"description": "Enable or disable animations", "description": "Enable or disable animations",
"$ref": "#/$defs/PerAnimationPrefixConfig" "$ref": "#/$defs/PerAnimationPrefixConfig",
"default": false
}, },
"fps": { "fps": {
"description": "Set the animation FPS", "description": "Set the animation FPS",
@@ -774,7 +777,8 @@
{ {
"type": "null" "type": "null"
} }
] ],
"default": "Linear"
} }
}, },
"required": [ "required": [
@@ -826,10 +830,12 @@
"description": "Aspect ratio for temporarily floating windows", "description": "Aspect ratio for temporarily floating windows",
"anyOf": [ "anyOf": [
{ {
"title": "Predefined",
"description": "Predefined aspect ratio", "description": "Predefined aspect ratio",
"$ref": "#/$defs/PredefinedAspectRatio" "$ref": "#/$defs/PredefinedAspectRatio"
}, },
{ {
"title": "Custom",
"description": "Custom W:H aspect ratio", "description": "Custom W:H aspect ratio",
"type": "array", "type": "array",
"maxItems": 2, "maxItems": 2,
@@ -2501,22 +2507,22 @@
"description": "Catppuccin palette", "description": "Catppuccin palette",
"oneOf": [ "oneOf": [
{ {
"description": "Frappe", "description": "Frappe (https://catppuccin.com/palette#flavor-frappe)",
"type": "string", "type": "string",
"const": "Frappe" "const": "Frappe"
}, },
{ {
"description": "Latte", "description": "Latte (https://catppuccin.com/palette#flavor-latte)",
"type": "string", "type": "string",
"const": "Latte" "const": "Latte"
}, },
{ {
"description": "Macchiato", "description": "Macchiato (https://catppuccin.com/palette#flavor-macchiato)",
"type": "string", "type": "string",
"const": "Macchiato" "const": "Macchiato"
}, },
{ {
"description": "Mocha", "description": "Mocha (https://catppuccin.com/palette#flavor-mocha)",
"type": "string", "type": "string",
"const": "Mocha" "const": "Mocha"
} }
@@ -2719,7 +2725,7 @@
"const": "UltrawideVerticalStack" "const": "UltrawideVerticalStack"
}, },
{ {
"description": "Grid Layout\n\n```\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n| | | | | | | | | | | | | | |\n| | | | | | | | | | | | | +---+\n+-----+-----+ | +---+---+ +---+---+---+ +---+---| |\n| | | | | | | | | | | | | +---+\n| | | | | | | | | | | | | | |\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n 4 windows 5 windows 6 windows 7 windows\n```", "description": "Grid Layout\n\n```\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n| | | | | | | | | | | | | | |\n| | | | | | | | | | | | | +---+\n+-----+-----+ | +---+---+ +---+---+---+ +---+---| |\n| | | | | | | | | | | | | +---+\n| | | | | | | | | | | | | | |\n+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+\n 4 windows 5 windows 6 windows 7 windows\n```",
"type": "string", "type": "string",
"const": "Grid" "const": "Grid"
}, },
@@ -2839,6 +2845,7 @@
"description": "Komorebi theme", "description": "Komorebi theme",
"oneOf": [ "oneOf": [
{ {
"title": "Catppuccin",
"description": "A theme from catppuccin-egui", "description": "A theme from catppuccin-egui",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -2977,6 +2984,7 @@
] ]
}, },
{ {
"title": "Base16",
"description": "A theme from base16-egui-themes", "description": "A theme from base16-egui-themes",
"type": "object", "type": "object",
"properties": { "properties": {
@@ -3115,6 +3123,7 @@
] ]
}, },
{ {
"title": "Custom",
"description": "A custom Base16 theme", "description": "A custom Base16 theme",
"type": "object", "type": "object",
"properties": { "properties": {