mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +07:00
config: Extract window_rule
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
use crate::{BlockOutFrom, CornerRadius, RegexEq, ShadowRule};
|
||||
use crate::utils::RegexEq;
|
||||
use crate::{BlockOutFrom, CornerRadius, ShadowRule};
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||
pub struct LayerRule {
|
||||
|
||||
+4
-115
@@ -13,7 +13,6 @@ use std::time::Duration;
|
||||
use bitflags::bitflags;
|
||||
use knuffel::errors::DecodeError;
|
||||
use knuffel::Decode as _;
|
||||
use layer_rule::LayerRule;
|
||||
use miette::{miette, Context, IntoDiagnostic};
|
||||
use niri_ipc::{
|
||||
ColumnDisplay, ConfiguredMode, LayoutSwitchTarget, PositionChange, SizeChange, Transform,
|
||||
@@ -29,9 +28,11 @@ pub const DEFAULT_BACKGROUND_COLOR: Color = Color::from_array_unpremul([0.25, 0.
|
||||
pub const DEFAULT_BACKDROP_COLOR: Color = Color::from_array_unpremul([0.15, 0.15, 0.15, 1.]);
|
||||
|
||||
pub mod layer_rule;
|
||||
pub mod utils;
|
||||
pub mod window_rule;
|
||||
|
||||
mod utils;
|
||||
pub use utils::RegexEq;
|
||||
pub use crate::layer_rule::LayerRule;
|
||||
pub use crate::window_rule::{FloatingPosition, RelativeTo, WindowRule};
|
||||
|
||||
#[derive(knuffel::Decode, Debug, PartialEq)]
|
||||
pub struct Config {
|
||||
@@ -1458,95 +1459,6 @@ pub struct Workspace {
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct WorkspaceName(pub String);
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||
pub struct WindowRule {
|
||||
#[knuffel(children(name = "match"))]
|
||||
pub matches: Vec<Match>,
|
||||
#[knuffel(children(name = "exclude"))]
|
||||
pub excludes: Vec<Match>,
|
||||
|
||||
// Rules applied at initial configure.
|
||||
#[knuffel(child)]
|
||||
pub default_column_width: Option<DefaultPresetSize>,
|
||||
#[knuffel(child)]
|
||||
pub default_window_height: Option<DefaultPresetSize>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_on_output: Option<String>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_on_workspace: Option<String>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_maximized: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_fullscreen: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_floating: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_focused: Option<bool>,
|
||||
|
||||
// Rules applied dynamically.
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub min_width: Option<u16>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub min_height: Option<u16>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub max_width: Option<u16>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub max_height: Option<u16>,
|
||||
|
||||
#[knuffel(child, default)]
|
||||
pub focus_ring: BorderRule,
|
||||
#[knuffel(child, default)]
|
||||
pub border: BorderRule,
|
||||
#[knuffel(child, default)]
|
||||
pub shadow: ShadowRule,
|
||||
#[knuffel(child, default)]
|
||||
pub tab_indicator: TabIndicatorRule,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub draw_border_with_background: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub opacity: Option<f32>,
|
||||
#[knuffel(child)]
|
||||
pub geometry_corner_radius: Option<CornerRadius>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub clip_to_geometry: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub baba_is_float: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub block_out_from: Option<BlockOutFrom>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub variable_refresh_rate: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument, str))]
|
||||
pub default_column_display: Option<ColumnDisplay>,
|
||||
#[knuffel(child)]
|
||||
pub default_floating_position: Option<FloatingPosition>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub scroll_factor: Option<FloatOrInt<0, 100>>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub tiled_state: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||
pub struct Match {
|
||||
#[knuffel(property, str)]
|
||||
pub app_id: Option<RegexEq>,
|
||||
#[knuffel(property, str)]
|
||||
pub title: Option<RegexEq>,
|
||||
#[knuffel(property)]
|
||||
pub is_active: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_focused: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_active_in_column: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_floating: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_window_cast_target: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_urgent: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub at_startup: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq)]
|
||||
pub struct CornerRadius {
|
||||
pub top_left: f32,
|
||||
@@ -1641,29 +1553,6 @@ pub struct TabIndicatorRule {
|
||||
pub urgent_gradient: Option<Gradient>,
|
||||
}
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)]
|
||||
pub struct FloatingPosition {
|
||||
#[knuffel(property)]
|
||||
pub x: FloatOrInt<-65535, 65535>,
|
||||
#[knuffel(property)]
|
||||
pub y: FloatOrInt<-65535, 65535>,
|
||||
#[knuffel(property, default)]
|
||||
pub relative_to: RelativeTo,
|
||||
}
|
||||
|
||||
#[derive(knuffel::DecodeScalar, Debug, Default, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum RelativeTo {
|
||||
#[default]
|
||||
TopLeft,
|
||||
TopRight,
|
||||
BottomLeft,
|
||||
BottomRight,
|
||||
Top,
|
||||
Bottom,
|
||||
Left,
|
||||
Right,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq)]
|
||||
pub struct Binds(pub Vec<Bind>);
|
||||
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
use niri_ipc::ColumnDisplay;
|
||||
|
||||
use crate::utils::RegexEq;
|
||||
use crate::{
|
||||
BlockOutFrom, BorderRule, CornerRadius, DefaultPresetSize, FloatOrInt, ShadowRule,
|
||||
TabIndicatorRule,
|
||||
};
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||
pub struct WindowRule {
|
||||
#[knuffel(children(name = "match"))]
|
||||
pub matches: Vec<Match>,
|
||||
#[knuffel(children(name = "exclude"))]
|
||||
pub excludes: Vec<Match>,
|
||||
|
||||
// Rules applied at initial configure.
|
||||
#[knuffel(child)]
|
||||
pub default_column_width: Option<DefaultPresetSize>,
|
||||
#[knuffel(child)]
|
||||
pub default_window_height: Option<DefaultPresetSize>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_on_output: Option<String>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_on_workspace: Option<String>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_maximized: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_fullscreen: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_floating: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub open_focused: Option<bool>,
|
||||
|
||||
// Rules applied dynamically.
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub min_width: Option<u16>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub min_height: Option<u16>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub max_width: Option<u16>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub max_height: Option<u16>,
|
||||
|
||||
#[knuffel(child, default)]
|
||||
pub focus_ring: BorderRule,
|
||||
#[knuffel(child, default)]
|
||||
pub border: BorderRule,
|
||||
#[knuffel(child, default)]
|
||||
pub shadow: ShadowRule,
|
||||
#[knuffel(child, default)]
|
||||
pub tab_indicator: TabIndicatorRule,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub draw_border_with_background: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub opacity: Option<f32>,
|
||||
#[knuffel(child)]
|
||||
pub geometry_corner_radius: Option<CornerRadius>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub clip_to_geometry: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub baba_is_float: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub block_out_from: Option<BlockOutFrom>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub variable_refresh_rate: Option<bool>,
|
||||
#[knuffel(child, unwrap(argument, str))]
|
||||
pub default_column_display: Option<ColumnDisplay>,
|
||||
#[knuffel(child)]
|
||||
pub default_floating_position: Option<FloatingPosition>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub scroll_factor: Option<FloatOrInt<0, 100>>,
|
||||
#[knuffel(child, unwrap(argument))]
|
||||
pub tiled_state: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||
pub struct Match {
|
||||
#[knuffel(property, str)]
|
||||
pub app_id: Option<RegexEq>,
|
||||
#[knuffel(property, str)]
|
||||
pub title: Option<RegexEq>,
|
||||
#[knuffel(property)]
|
||||
pub is_active: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_focused: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_active_in_column: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_floating: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_window_cast_target: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub is_urgent: Option<bool>,
|
||||
#[knuffel(property)]
|
||||
pub at_startup: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)]
|
||||
pub struct FloatingPosition {
|
||||
#[knuffel(property)]
|
||||
pub x: FloatOrInt<-65535, 65535>,
|
||||
#[knuffel(property)]
|
||||
pub y: FloatOrInt<-65535, 65535>,
|
||||
#[knuffel(property, default)]
|
||||
pub relative_to: RelativeTo,
|
||||
}
|
||||
|
||||
#[derive(knuffel::DecodeScalar, Debug, Default, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum RelativeTo {
|
||||
#[default]
|
||||
TopLeft,
|
||||
TopRight,
|
||||
BottomLeft,
|
||||
BottomRight,
|
||||
Top,
|
||||
Bottom,
|
||||
Left,
|
||||
Right,
|
||||
}
|
||||
Reference in New Issue
Block a user