From bb6663ebac872ad8a9982bdc63e5e8792073b63e Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sun, 16 Feb 2025 08:46:38 +0300 Subject: config: Convert parse test to a snapshot test Updating it by hand got really old tbh --- niri-config/src/lib.rs | 1207 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 853 insertions(+), 354 deletions(-) diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index c692844b..6a705226 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -3494,18 +3494,17 @@ mod tests { use super::*; #[track_caller] - fn check(text: &str, expected: Config) { + fn do_parse(text: &str) -> Config { let _ = set_miette_hook(); - let parsed = Config::parse("test.kdl", text) + Config::parse("test.kdl", text) .map_err(miette::Report::new) - .unwrap(); - assert_eq!(parsed, expected); + .unwrap() } #[test] fn parse() { - check( + let parsed = do_parse( r##" input { keyboard { @@ -3748,17 +3747,25 @@ mod tests { workspace "workspace-2" workspace "workspace-3" "##, + ); + + assert_debug_snapshot!(parsed, @r#" Config { input: Input { keyboard: Keyboard { xkb: Xkb { - layout: "us,ru".to_owned(), - options: Some("grp:win_space_toggle".to_owned()), - ..Default::default() + rules: "", + model: "", + layout: "us,ru", + variant: "", + options: Some( + "grp:win_space_toggle", + ), + file: None, }, repeat_delay: 600, repeat_rate: 25, - track_layout: TrackLayout::Window, + track_layout: Window, }, touchpad: Touchpad { off: false, @@ -3766,169 +3773,380 @@ mod tests { dwt: true, dwtp: true, drag_lock: false, - click_method: Some(ClickMethod::Clickfinger), natural_scroll: false, + click_method: Some( + Clickfinger, + ), accel_speed: 0.2, - accel_profile: Some(AccelProfile::Flat), - scroll_method: Some(ScrollMethod::TwoFinger), - scroll_button: Some(272), - tap_button_map: Some(TapButtonMap::LeftMiddleRight), + accel_profile: Some( + Flat, + ), + scroll_method: Some( + TwoFinger, + ), + scroll_button: Some( + 272, + ), + tap_button_map: Some( + LeftMiddleRight, + ), left_handed: false, disabled_on_external_mouse: true, middle_emulation: false, - scroll_factor: Some(FloatOrInt(0.9)), + scroll_factor: Some( + FloatOrInt( + 0.9, + ), + ), }, mouse: Mouse { off: false, natural_scroll: true, accel_speed: 0.4, - accel_profile: Some(AccelProfile::Flat), - scroll_method: Some(ScrollMethod::NoScroll), - scroll_button: Some(273), + accel_profile: Some( + Flat, + ), + scroll_method: Some( + NoScroll, + ), + scroll_button: Some( + 273, + ), left_handed: false, middle_emulation: true, - scroll_factor: Some(FloatOrInt(0.2)), + scroll_factor: Some( + FloatOrInt( + 0.2, + ), + ), }, trackpoint: Trackpoint { off: true, natural_scroll: true, accel_speed: 0.0, - accel_profile: Some(AccelProfile::Flat), - scroll_method: Some(ScrollMethod::OnButtonDown), - scroll_button: Some(274), + accel_profile: Some( + Flat, + ), + scroll_method: Some( + OnButtonDown, + ), + scroll_button: Some( + 274, + ), middle_emulation: false, }, trackball: Trackball { off: true, natural_scroll: true, accel_speed: 0.0, - accel_profile: Some(AccelProfile::Flat), - scroll_method: Some(ScrollMethod::Edge), - scroll_button: Some(275), + accel_profile: Some( + Flat, + ), + scroll_method: Some( + Edge, + ), + scroll_button: Some( + 275, + ), left_handed: true, middle_emulation: true, }, tablet: Tablet { off: false, - calibration_matrix: Some(vec![1., 2., 3., - 4., 5., 6.]), - map_to_output: Some("eDP-1".to_owned()), + calibration_matrix: Some( + [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0, + ], + ), + map_to_output: Some( + "eDP-1", + ), left_handed: false, }, touch: Touch { - map_to_output: Some("eDP-1".to_owned()), + map_to_output: Some( + "eDP-1", + ), }, disable_power_key_handling: true, warp_mouse_to_focus: true, - focus_follows_mouse: Some(FocusFollowsMouse { - max_scroll_amount: None, - }), + focus_follows_mouse: Some( + FocusFollowsMouse { + max_scroll_amount: None, + }, + ), workspace_auto_back_and_forth: true, }, - outputs: Outputs(vec![Output { - off: false, - name: "eDP-1".to_owned(), - scale: Some(FloatOrInt(2.)), - transform: Transform::Flipped90, - position: Some(Position { x: 10, y: 20 }), - mode: Some(ConfiguredMode { - width: 1920, - height: 1080, - refresh: Some(144.), - }), - variable_refresh_rate: Some(Vrr { on_demand: true }), - background_color: Color::from_rgba8_unpremul(25, 25, 102, 255), - }]), + outputs: Outputs( + [ + Output { + off: false, + name: "eDP-1", + scale: Some( + FloatOrInt( + 2.0, + ), + ), + transform: Flipped90, + position: Some( + Position { + x: 10, + y: 20, + }, + ), + mode: Some( + ConfiguredMode { + width: 1920, + height: 1080, + refresh: Some( + 144.0, + ), + }, + ), + variable_refresh_rate: Some( + Vrr { + on_demand: true, + }, + ), + background_color: Color { + r: 0.09803922, + g: 0.09803922, + b: 0.4, + a: 1.0, + }, + }, + ], + ), + spawn_at_startup: [ + SpawnAtStartup { + command: [ + "alacritty", + "-e", + "fish", + ], + }, + ], layout: Layout { focus_ring: FocusRing { off: false, - width: FloatOrInt(5.), - active_color: Color::from_rgba8_unpremul(0, 100, 200, 255), - inactive_color: Color::from_rgba8_unpremul(255, 200, 100, 0), - active_gradient: Some(Gradient { - from: Color::from_rgba8_unpremul(10, 20, 30, 255), - to: Color::from_rgba8_unpremul(0, 128, 255, 255), - angle: 180, - relative_to: GradientRelativeTo::WorkspaceView, - in_: GradientInterpolation { - color_space: GradientColorSpace::Srgb, - hue_interpolation: HueInterpolation::Shorter, + width: FloatOrInt( + 5.0, + ), + active_color: Color { + r: 0.0, + g: 0.39215687, + b: 0.78431374, + a: 1.0, + }, + inactive_color: Color { + r: 1.0, + g: 0.78431374, + b: 0.39215687, + a: 0.0, + }, + active_gradient: Some( + Gradient { + from: Color { + r: 0.039215688, + g: 0.078431375, + b: 0.11764706, + a: 1.0, + }, + to: Color { + r: 0.0, + g: 0.5019608, + b: 1.0, + a: 1.0, + }, + angle: 180, + relative_to: WorkspaceView, + in_: GradientInterpolation { + color_space: Srgb, + hue_interpolation: Shorter, + }, }, - }), + ), inactive_gradient: None, }, border: Border { off: false, - width: FloatOrInt(3.), - active_color: Color::from_rgba8_unpremul(255, 200, 127, 255), - inactive_color: Color::from_rgba8_unpremul(255, 200, 100, 0), + width: FloatOrInt( + 3.0, + ), + active_color: Color { + r: 1.0, + g: 0.78431374, + b: 0.49803922, + a: 1.0, + }, + inactive_color: Color { + r: 1.0, + g: 0.78431374, + b: 0.39215687, + a: 0.0, + }, active_gradient: None, inactive_gradient: None, }, shadow: Shadow { + on: false, offset: ShadowOffset { - x: FloatOrInt(10.), - y: FloatOrInt(-20.), + x: FloatOrInt( + 10.0, + ), + y: FloatOrInt( + -20.0, + ), }, - ..Default::default() + softness: FloatOrInt( + 30.0, + ), + spread: FloatOrInt( + 5.0, + ), + draw_behind_window: false, + color: Color { + r: 0.0, + g: 0.0, + b: 0.0, + a: 0.4392157, + }, + inactive_color: None, }, tab_indicator: TabIndicator { - width: FloatOrInt(10.), - position: TabIndicatorPosition::Top, - ..Default::default() + off: false, + hide_when_single_tab: false, + place_within_column: false, + gap: FloatOrInt( + 5.0, + ), + width: FloatOrInt( + 10.0, + ), + length: TabIndicatorLength { + total_proportion: Some( + 0.5, + ), + }, + position: Top, + gaps_between_tabs: FloatOrInt( + 0.0, + ), + corner_radius: FloatOrInt( + 0.0, + ), + active_color: None, + inactive_color: None, + active_gradient: None, + inactive_gradient: None, }, insert_hint: InsertHint { off: false, - color: Color::from_rgba8_unpremul(255, 200, 127, 255), - gradient: Some(Gradient { - from: Color::from_rgba8_unpremul(10, 20, 30, 255), - to: Color::from_rgba8_unpremul(0, 128, 255, 255), - angle: 180, - relative_to: GradientRelativeTo::WorkspaceView, - in_: GradientInterpolation { - color_space: GradientColorSpace::Srgb, - hue_interpolation: HueInterpolation::Shorter, + color: Color { + r: 1.0, + g: 0.78431374, + b: 0.49803922, + a: 1.0, + }, + gradient: Some( + Gradient { + from: Color { + r: 0.039215688, + g: 0.078431375, + b: 0.11764706, + a: 1.0, + }, + to: Color { + r: 0.0, + g: 0.5019608, + b: 1.0, + a: 1.0, + }, + angle: 180, + relative_to: WorkspaceView, + in_: GradientInterpolation { + color_space: Srgb, + hue_interpolation: Shorter, + }, }, - }), + ), }, - preset_column_widths: vec![ - PresetSize::Proportion(0.25), - PresetSize::Proportion(0.5), - PresetSize::Fixed(960), - PresetSize::Fixed(1280), + preset_column_widths: [ + Proportion( + 0.25, + ), + Proportion( + 0.5, + ), + Fixed( + 960, + ), + Fixed( + 1280, + ), ], - default_column_width: Some(DefaultPresetSize(Some(PresetSize::Proportion( - 0.25, - )))), - preset_window_heights: vec![ - PresetSize::Proportion(0.25), - PresetSize::Proportion(0.5), - PresetSize::Fixed(960), - PresetSize::Fixed(1280), + default_column_width: Some( + DefaultPresetSize( + Some( + Proportion( + 0.25, + ), + ), + ), + ), + preset_window_heights: [ + Proportion( + 0.25, + ), + Proportion( + 0.5, + ), + Fixed( + 960, + ), + Fixed( + 1280, + ), ], - gaps: FloatOrInt(8.), - struts: Struts { - left: FloatOrInt(1.), - right: FloatOrInt(2.), - top: FloatOrInt(3.), - bottom: FloatOrInt(0.), - }, - center_focused_column: CenterFocusedColumn::OnOverflow, - default_column_display: ColumnDisplay::Tabbed, + center_focused_column: OnOverflow, always_center_single_column: false, empty_workspace_above_first: false, + default_column_display: Tabbed, + gaps: FloatOrInt( + 8.0, + ), + struts: Struts { + left: FloatOrInt( + 1.0, + ), + right: FloatOrInt( + 2.0, + ), + top: FloatOrInt( + 3.0, + ), + bottom: FloatOrInt( + 0.0, + ), + }, }, - spawn_at_startup: vec![SpawnAtStartup { - command: vec!["alacritty".to_owned(), "-e".to_owned(), "fish".to_owned()], - }], prefer_no_csd: true, cursor: Cursor { - xcursor_theme: String::from("breeze_cursors"), + xcursor_theme: "breeze_cursors", xcursor_size: 16, hide_when_typing: true, - hide_after_inactive_ms: Some(3000), + hide_after_inactive_ms: Some( + 3000, + ), }, - screenshot_path: Some(String::from("~/Screenshots/screenshot.png")), + screenshot_path: Some( + "~/Screenshots/screenshot.png", + ), clipboard: Clipboard { disable_primary: true, }, @@ -3936,289 +4154,570 @@ mod tests { skip_at_startup: true, }, animations: Animations { - slowdown: 2., - workspace_switch: WorkspaceSwitchAnim(Animation { - off: false, - kind: AnimationKind::Spring(SpringParams { - damping_ratio: 1., - stiffness: 1000, - epsilon: 0.0001, - }), - }), - horizontal_view_movement: HorizontalViewMovementAnim(Animation { - off: false, - kind: AnimationKind::Easing(EasingParams { - duration_ms: 100, - curve: AnimationCurve::EaseOutExpo, - }), - }), + off: false, + slowdown: 2.0, + workspace_switch: WorkspaceSwitchAnim( + Animation { + off: false, + kind: Spring( + SpringParams { + damping_ratio: 1.0, + stiffness: 1000, + epsilon: 0.0001, + }, + ), + }, + ), window_open: WindowOpenAnim { anim: Animation { off: true, - ..WindowOpenAnim::default().anim + kind: Easing( + EasingParams { + duration_ms: 150, + curve: EaseOutExpo, + }, + ), }, custom_shader: None, }, - ..Default::default() - }, - environment: Environment(vec![ - EnvironmentVariable { - name: String::from("QT_QPA_PLATFORM"), - value: Some(String::from("wayland")), + window_close: WindowCloseAnim { + anim: Animation { + off: false, + kind: Easing( + EasingParams { + duration_ms: 150, + curve: EaseOutQuad, + }, + ), + }, + custom_shader: None, }, - EnvironmentVariable { - name: String::from("DISPLAY"), - value: None, + horizontal_view_movement: HorizontalViewMovementAnim( + Animation { + off: false, + kind: Easing( + EasingParams { + duration_ms: 100, + curve: EaseOutExpo, + }, + ), + }, + ), + window_movement: WindowMovementAnim( + Animation { + off: false, + kind: Spring( + SpringParams { + damping_ratio: 1.0, + stiffness: 800, + epsilon: 0.0001, + }, + ), + }, + ), + window_resize: WindowResizeAnim { + anim: Animation { + off: false, + kind: Spring( + SpringParams { + damping_ratio: 1.0, + stiffness: 800, + epsilon: 0.0001, + }, + ), + }, + custom_shader: None, }, - ]), - window_rules: vec![WindowRule { - matches: vec![Match { - app_id: Some(RegexEq::from_str(".*alacritty").unwrap()), - title: None, - is_active: None, - is_focused: None, - is_active_in_column: None, - is_floating: None, - is_window_cast_target: None, - at_startup: None, - }], - excludes: vec![ - Match { - app_id: None, - title: Some(RegexEq::from_str("~").unwrap()), - is_active: None, - is_focused: None, - is_active_in_column: None, - is_floating: None, - is_window_cast_target: None, - at_startup: None, + config_notification_open_close: ConfigNotificationOpenCloseAnim( + Animation { + off: false, + kind: Spring( + SpringParams { + damping_ratio: 0.6, + stiffness: 1000, + epsilon: 0.001, + }, + ), }, - Match { - app_id: None, - title: None, - is_active: Some(true), - is_focused: Some(false), - is_active_in_column: None, - is_floating: None, - is_window_cast_target: None, - at_startup: None, + ), + screenshot_ui_open: ScreenshotUiOpenAnim( + Animation { + off: false, + kind: Easing( + EasingParams { + duration_ms: 200, + curve: EaseOutQuad, + }, + ), + }, + ), + }, + environment: Environment( + [ + EnvironmentVariable { + name: "QT_QPA_PLATFORM", + value: Some( + "wayland", + ), + }, + EnvironmentVariable { + name: "DISPLAY", + value: None, }, ], - open_on_output: Some("eDP-1".to_owned()), - open_maximized: Some(true), - open_fullscreen: Some(false), - open_floating: Some(false), - open_focused: Some(true), - default_window_height: Some(DefaultPresetSize(Some(PresetSize::Fixed(500)))), - default_column_display: Some(ColumnDisplay::Tabbed), - default_floating_position: Some(FloatingPosition { - x: FloatOrInt(100.), - y: FloatOrInt(-200.), - relative_to: RelativeTo::BottomLeft, - }), - focus_ring: BorderRule { - off: true, - width: Some(FloatOrInt(3.)), - ..Default::default() - }, - border: BorderRule { - on: true, - width: Some(FloatOrInt(8.5)), - ..Default::default() - }, - tab_indicator: TabIndicatorRule { - active_color: Some(Color::from_rgba8_unpremul(255, 0, 0, 255)), - ..Default::default() + ), + window_rules: [ + WindowRule { + matches: [ + Match { + app_id: Some( + RegexEq( + Regex( + ".*alacritty", + ), + ), + ), + title: None, + is_active: None, + is_focused: None, + is_active_in_column: None, + is_floating: None, + is_window_cast_target: None, + at_startup: None, + }, + ], + excludes: [ + Match { + app_id: None, + title: Some( + RegexEq( + Regex( + "~", + ), + ), + ), + is_active: None, + is_focused: None, + is_active_in_column: None, + is_floating: None, + is_window_cast_target: None, + at_startup: None, + }, + Match { + app_id: None, + title: None, + is_active: Some( + true, + ), + is_focused: Some( + false, + ), + is_active_in_column: None, + is_floating: None, + is_window_cast_target: None, + at_startup: None, + }, + ], + default_column_width: None, + default_window_height: Some( + DefaultPresetSize( + Some( + Fixed( + 500, + ), + ), + ), + ), + open_on_output: Some( + "eDP-1", + ), + open_on_workspace: None, + open_maximized: Some( + true, + ), + open_fullscreen: Some( + false, + ), + open_floating: Some( + false, + ), + open_focused: Some( + true, + ), + min_width: None, + min_height: None, + max_width: None, + max_height: None, + focus_ring: BorderRule { + off: true, + on: false, + width: Some( + FloatOrInt( + 3.0, + ), + ), + active_color: None, + inactive_color: None, + active_gradient: None, + inactive_gradient: None, + }, + border: BorderRule { + off: false, + on: true, + width: Some( + FloatOrInt( + 8.5, + ), + ), + active_color: None, + inactive_color: None, + active_gradient: None, + inactive_gradient: None, + }, + shadow: ShadowRule { + off: false, + on: false, + offset: None, + softness: None, + spread: None, + draw_behind_window: None, + color: None, + inactive_color: None, + }, + tab_indicator: TabIndicatorRule { + active_color: Some( + Color { + r: 1.0, + g: 0.0, + b: 0.0, + a: 1.0, + }, + ), + inactive_color: None, + active_gradient: None, + inactive_gradient: None, + }, + draw_border_with_background: None, + opacity: None, + geometry_corner_radius: None, + clip_to_geometry: None, + baba_is_float: None, + block_out_from: None, + variable_refresh_rate: None, + default_column_display: Some( + Tabbed, + ), + default_floating_position: Some( + FloatingPosition { + x: FloatOrInt( + 100.0, + ), + y: FloatOrInt( + -200.0, + ), + relative_to: BottomLeft, + }, + ), + scroll_factor: None, }, - ..Default::default() - }], - layer_rules: vec![ + ], + layer_rules: [ LayerRule { - matches: vec![layer_rule::Match { - namespace: Some(RegexEq::from_str("^notifications$").unwrap()), - at_startup: None, - }], - excludes: vec![], + matches: [ + Match { + namespace: Some( + RegexEq( + Regex( + "^notifications$", + ), + ), + ), + at_startup: None, + }, + ], + excludes: [], opacity: None, - block_out_from: Some(BlockOutFrom::Screencast), - shadow: ShadowRule::default(), + block_out_from: Some( + Screencast, + ), + shadow: ShadowRule { + off: false, + on: false, + offset: None, + softness: None, + spread: None, + draw_behind_window: None, + color: None, + inactive_color: None, + }, geometry_corner_radius: None, - } - ], - workspaces: vec![ - Workspace { - name: WorkspaceName("workspace-1".to_string()), - open_on_output: Some("eDP-1".to_string()), - }, - Workspace { - name: WorkspaceName("workspace-2".to_string()), - open_on_output: None, - }, - Workspace { - name: WorkspaceName("workspace-3".to_string()), - open_on_output: None, }, ], - binds: Binds(vec![ - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::Escape), - modifiers: Modifiers::COMPOSITOR, + binds: Binds( + [ + Bind { + key: Key { + trigger: Keysym( + XK_Escape, + ), + modifiers: Modifiers( + COMPOSITOR, + ), + }, + action: ToggleKeyboardShortcutsInhibit, + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: false, + hotkey_overlay_title: Some( + Some( + "Inhibit", + ), + ), }, - action: Action::ToggleKeyboardShortcutsInhibit, - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: false, - hotkey_overlay_title: Some(Some("Inhibit".to_owned())), - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::Escape), - modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT, + Bind { + key: Key { + trigger: Keysym( + XK_Escape, + ), + modifiers: Modifiers( + SHIFT | COMPOSITOR, + ), + }, + action: ToggleKeyboardShortcutsInhibit, + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: false, + hotkey_overlay_title: None, }, - action: Action::ToggleKeyboardShortcutsInhibit, - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: false, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::t), - modifiers: Modifiers::COMPOSITOR, + Bind { + key: Key { + trigger: Keysym( + XK_t, + ), + modifiers: Modifiers( + COMPOSITOR, + ), + }, + action: Spawn( + [ + "alacritty", + ], + ), + repeat: true, + cooldown: None, + allow_when_locked: true, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::Spawn(vec!["alacritty".to_owned()]), - repeat: true, - cooldown: None, - allow_when_locked: true, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::q), - modifiers: Modifiers::COMPOSITOR, + Bind { + key: Key { + trigger: Keysym( + XK_q, + ), + modifiers: Modifiers( + COMPOSITOR, + ), + }, + action: CloseWindow, + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: Some( + None, + ), }, - action: Action::CloseWindow, - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: Some(None), - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::h), - modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT, + Bind { + key: Key { + trigger: Keysym( + XK_h, + ), + modifiers: Modifiers( + SHIFT | COMPOSITOR, + ), + }, + action: FocusMonitorLeft, + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::FocusMonitorLeft, - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::l), - modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT | Modifiers::CTRL, + Bind { + key: Key { + trigger: Keysym( + XK_l, + ), + modifiers: Modifiers( + CTRL | SHIFT | COMPOSITOR, + ), + }, + action: MoveWindowToMonitorRight, + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::MoveWindowToMonitorRight, - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::comma), - modifiers: Modifiers::COMPOSITOR, + Bind { + key: Key { + trigger: Keysym( + XK_comma, + ), + modifiers: Modifiers( + COMPOSITOR, + ), + }, + action: ConsumeWindowIntoColumn, + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::ConsumeWindowIntoColumn, - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::_1), - modifiers: Modifiers::COMPOSITOR, + Bind { + key: Key { + trigger: Keysym( + XK_1, + ), + modifiers: Modifiers( + COMPOSITOR, + ), + }, + action: FocusWorkspace( + Index( + 1, + ), + ), + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::FocusWorkspace(WorkspaceReference::Index(1)), - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::_1), - modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT, + Bind { + key: Key { + trigger: Keysym( + XK_1, + ), + modifiers: Modifiers( + SHIFT | COMPOSITOR, + ), + }, + action: FocusWorkspace( + Name( + "workspace-1", + ), + ), + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::FocusWorkspace(WorkspaceReference::Name( - "workspace-1".to_string(), - )), - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::Keysym(Keysym::e), - modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT, + Bind { + key: Key { + trigger: Keysym( + XK_e, + ), + modifiers: Modifiers( + SHIFT | COMPOSITOR, + ), + }, + action: Quit( + true, + ), + repeat: true, + cooldown: None, + allow_when_locked: false, + allow_inhibiting: false, + hotkey_overlay_title: None, }, - action: Action::Quit(true), - repeat: true, - cooldown: None, - allow_when_locked: false, - allow_inhibiting: false, - hotkey_overlay_title: None, - }, - Bind { - key: Key { - trigger: Trigger::WheelScrollDown, - modifiers: Modifiers::COMPOSITOR, + Bind { + key: Key { + trigger: WheelScrollDown, + modifiers: Modifiers( + COMPOSITOR, + ), + }, + action: FocusWorkspaceDown, + repeat: true, + cooldown: Some( + 150ms, + ), + allow_when_locked: false, + allow_inhibiting: true, + hotkey_overlay_title: None, }, - action: Action::FocusWorkspaceDown, - repeat: true, - cooldown: Some(Duration::from_millis(150)), - allow_when_locked: false, - allow_inhibiting: true, - hotkey_overlay_title: None, - }, - ]), + ], + ), switch_events: SwitchBinds { lid_open: None, lid_close: None, - tablet_mode_on: Some(SwitchAction { - spawn: vec![ - "bash".to_owned(), - "-c".to_owned(), - "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true".to_owned(), - ], - }), - tablet_mode_off: Some(SwitchAction { - spawn: vec![ - "bash".to_owned(), - "-c".to_owned(), - "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false".to_owned(), - ], - }), + tablet_mode_on: Some( + SwitchAction { + spawn: [ + "bash", + "-c", + "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true", + ], + }, + ), + tablet_mode_off: Some( + SwitchAction { + spawn: [ + "bash", + "-c", + "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false", + ], + }, + ), }, debug: DebugConfig { - render_drm_device: Some(PathBuf::from("/dev/dri/renderD129")), - ..Default::default() + preview_render: None, + dbus_interfaces_in_non_session_instances: false, + wait_for_frame_completion_before_queueing: false, + enable_overlay_planes: false, + disable_cursor_plane: false, + disable_direct_scanout: false, + restrict_primary_scanout_to_matching_format: false, + render_drm_device: Some( + "/dev/dri/renderD129", + ), + force_pipewire_invalid_modifier: false, + emulate_zero_presentation_time: false, + disable_resize_throttling: false, + disable_transactions: false, + keep_laptop_panel_on_when_lid_is_closed: false, + disable_monitor_names: false, + strict_new_window_focus_policy: false, }, - }, - ); + workspaces: [ + Workspace { + name: WorkspaceName( + "workspace-1", + ), + open_on_output: Some( + "eDP-1", + ), + }, + Workspace { + name: WorkspaceName( + "workspace-2", + ), + open_on_output: None, + }, + Workspace { + name: WorkspaceName( + "workspace-3", + ), + open_on_output: None, + }, + ], + } + "#); } #[test] -- cgit