Skip to main content

halley_config/layout/
defaults.rs

1use std::collections::HashMap;
2
3use halley_core::field::Vec2;
4
5use crate::keybinds::{
6    BearingsBindingAction, ClusterBindingAction, CompositorBinding, CompositorBindingAction,
7    CompositorBindingScope, DirectionalAction, FocusCycleBindingAction, KeyModifiers, Keybinds,
8    NodeBindingAction, PointerBinding, PointerBindingAction, TileBindingAction, TrailBindingAction,
9    WHEEL_DOWN_CODE, WHEEL_UP_CODE, key_name_to_evdev,
10};
11
12use super::{
13    AnimationsConfig, BearingsConfig, ClickCollapsedOutsideFocusMode, ClickCollapsedPanMode,
14    CloseRestorePanMode, ClusterBloomDirection, ClusterDefaultLayout, CursorConfig, DebugConfig,
15    DecorationsConfig, FontConfig, InputConfig, NodeBackgroundColorMode, NodeBorderColorMode,
16    NodeDisplayPolicy, OverlayStyleConfig, PanToNewMode, PinsConfig, PlacementConfig, RailConfig,
17    RuntimeTuning, ScreenshotConfig, ShapeStyle,
18};
19
20impl Default for RuntimeTuning {
21    fn default() -> Self {
22        Self {
23            viewport_center: Vec2 { x: 0.0, y: 0.0 },
24            viewport_size: Vec2 {
25                x: 1920.0,
26                y: 1080.0,
27            },
28
29            focus_ring_rx: 820.0,
30            focus_ring_ry: 420.0,
31            focus_ring_offset_x: 0.0,
32            focus_ring_offset_y: 0.0,
33
34            primary_hot_inner_frac: 0.88,
35            primary_to_node_ms: 1_260_000,
36            node_show_labels: NodeDisplayPolicy::Hover,
37            node_show_app_icons: NodeDisplayPolicy::Always,
38            node_shape: ShapeStyle::Squircle,
39            node_label_shape: ShapeStyle::Squircle,
40            node_icon_size: 0.72,
41            node_background_color: NodeBackgroundColorMode::Auto,
42            node_border_color_hover: NodeBorderColorMode::UseWindowActive,
43            node_border_color_inactive: NodeBorderColorMode::UseWindowInactive,
44            decorations: DecorationsConfig::default(),
45            click_collapsed_outside_focus: ClickCollapsedOutsideFocusMode::Activate,
46            click_collapsed_pan: ClickCollapsedPanMode::IfOffscreen,
47            bearings: BearingsConfig {
48                show_distance: true,
49                show_icons: true,
50                show_pinned: true,
51                fade_distance: 1200.0,
52            },
53            rail: RailConfig::default(),
54
55            cluster_distance_px: 280.0,
56            cluster_dwell_ms: 900,
57            cluster_show_icons: true,
58            cluster_bloom_direction: ClusterBloomDirection::Clockwise,
59            cluster_default_layout: ClusterDefaultLayout::Stacking,
60            tile_gaps_inner_px: 20.0,
61            tile_gaps_outer_px: 20.0,
62            tile_new_on_top: false,
63            tile_queue_show_icons: true,
64            tile_max_stack: 3,
65            stacking_max_visible: 5,
66            trail_history_length: 32,
67            trail_wrap: true,
68
69            active_outside_ring_delay_ms: 120_000,
70            inactive_outside_ring_delay_ms: 30_000,
71            docked_offscreen_delay_ms: 300_000,
72
73            non_overlap_gap_px: 20.0,
74            field_active_windows_allowed: 5,
75            pan_to_new: PanToNewMode::IfNeeded,
76            placement: PlacementConfig::default(),
77            pins: PinsConfig::default(),
78            close_restore_focus: true,
79            close_restore_pan: CloseRestorePanMode::IfOffscreen,
80            zoom_enabled: true,
81            zoom_step: 1.10,
82            zoom_min: 0.25,
83            zoom_max: 1.35,
84            zoom_smooth: true,
85            zoom_smooth_rate: 12.5,
86            non_overlap_active_gap_scale: 0.22,
87            non_overlap_bump_newer: false,
88            non_overlap_bump_damping: 0.65,
89            drag_smoothing_boost: 6.0,
90            center_window_to_mouse: false,
91            restore_last_active_on_pan_return: true,
92            physics_enabled: true,
93            window_rules: Vec::new(),
94
95            keybinds: Keybinds::default(),
96            compositor_bindings: default_compositor_bindings(Keybinds::default().modifier),
97            launch_bindings: Vec::new(),
98            pointer_bindings: default_pointer_bindings(Keybinds::default().modifier),
99
100            tty_viewports: Vec::new(),
101            autostart_once: Vec::new(),
102            autostart_on_reload: Vec::new(),
103            input: InputConfig::default(),
104            cursor: CursorConfig::default(),
105            font: FontConfig::default(),
106            debug: DebugConfig::default(),
107            animations: AnimationsConfig::default(),
108            overlay_style: OverlayStyleConfig::default(),
109            screenshot: ScreenshotConfig::default(),
110            env: HashMap::new(),
111        }
112    }
113}
114
115pub fn default_pointer_bindings(modifier: KeyModifiers) -> Vec<PointerBinding> {
116    let mut transfer_modifier = modifier;
117    transfer_modifier.shift = true;
118    vec![
119        PointerBinding {
120            modifiers: modifier,
121            button: 272,
122            action: PointerBindingAction::MoveWindow,
123        },
124        PointerBinding {
125            modifiers: transfer_modifier,
126            button: 272,
127            action: PointerBindingAction::PanField,
128        },
129        PointerBinding {
130            modifiers: modifier,
131            button: 273,
132            action: PointerBindingAction::ResizeWindow,
133        },
134    ]
135}
136
137pub fn default_compositor_bindings(modifier: KeyModifiers) -> Vec<CompositorBinding> {
138    let key = |name: &str| key_name_to_evdev(name).expect("default compositor key should exist");
139
140    vec![
141        CompositorBinding {
142            scope: CompositorBindingScope::Global,
143            modifiers: modifier,
144            key: key("r"),
145            action: CompositorBindingAction::Reload,
146        },
147        CompositorBinding {
148            scope: CompositorBindingScope::Global,
149            modifiers: modifier,
150            key: key("return"),
151            action: CompositorBindingAction::OpenTerminal,
152        },
153        CompositorBinding {
154            scope: CompositorBindingScope::Global,
155            modifiers: modifier,
156            key: key("n"),
157            action: CompositorBindingAction::ToggleState,
158        },
159        CompositorBinding {
160            scope: CompositorBindingScope::Field,
161            modifiers: modifier,
162            key: key("m"),
163            action: CompositorBindingAction::MaximizeFocusedWindow,
164        },
165        CompositorBinding {
166            scope: CompositorBindingScope::Field,
167            modifiers: modifier,
168            key: key("p"),
169            action: CompositorBindingAction::ToggleFocusedPin,
170        },
171        CompositorBinding {
172            scope: CompositorBindingScope::Global,
173            modifiers: KeyModifiers {
174                shift: true,
175                ..modifier
176            },
177            key: key("c"),
178            action: CompositorBindingAction::ClusterMode,
179        },
180        CompositorBinding {
181            scope: CompositorBindingScope::Global,
182            modifiers: modifier,
183            key: key("z"),
184            action: CompositorBindingAction::Bearings(BearingsBindingAction::Show),
185        },
186        CompositorBinding {
187            scope: CompositorBindingScope::Global,
188            modifiers: KeyModifiers {
189                shift: true,
190                ..modifier
191            },
192            key: key("z"),
193            action: CompositorBindingAction::Bearings(BearingsBindingAction::Toggle),
194        },
195        CompositorBinding {
196            scope: CompositorBindingScope::Global,
197            modifiers: modifier,
198            key: key("tab"),
199            action: CompositorBindingAction::FocusCycle(FocusCycleBindingAction::Forward),
200        },
201        CompositorBinding {
202            scope: CompositorBindingScope::Global,
203            modifiers: KeyModifiers {
204                shift: true,
205                ..modifier
206            },
207            key: key("tab"),
208            action: CompositorBindingAction::FocusCycle(FocusCycleBindingAction::Backward),
209        },
210        CompositorBinding {
211            scope: CompositorBindingScope::Global,
212            modifiers: modifier,
213            key: WHEEL_UP_CODE,
214            action: CompositorBindingAction::ZoomIn,
215        },
216        CompositorBinding {
217            scope: CompositorBindingScope::Global,
218            modifiers: modifier,
219            key: WHEEL_DOWN_CODE,
220            action: CompositorBindingAction::ZoomOut,
221        },
222        CompositorBinding {
223            scope: CompositorBindingScope::Global,
224            modifiers: modifier,
225            key: key("mousemiddle"),
226            action: CompositorBindingAction::ZoomReset,
227        },
228        CompositorBinding {
229            scope: CompositorBindingScope::Global,
230            modifiers: KeyModifiers {
231                shift: true,
232                ..modifier
233            },
234            key: key("q"),
235            action: CompositorBindingAction::Quit {
236                requires_shift: true,
237            },
238        },
239        CompositorBinding {
240            scope: CompositorBindingScope::Field,
241            modifiers: modifier,
242            key: key("h"),
243            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Left)),
244        },
245        CompositorBinding {
246            scope: CompositorBindingScope::Field,
247            modifiers: modifier,
248            key: key("k"),
249            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Up)),
250        },
251        CompositorBinding {
252            scope: CompositorBindingScope::Field,
253            modifiers: modifier,
254            key: key("l"),
255            action: CompositorBindingAction::Node(NodeBindingAction::Move(
256                DirectionalAction::Right,
257            )),
258        },
259        CompositorBinding {
260            scope: CompositorBindingScope::Field,
261            modifiers: modifier,
262            key: key("j"),
263            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Down)),
264        },
265        CompositorBinding {
266            scope: CompositorBindingScope::Global,
267            modifiers: KeyModifiers {
268                shift: true,
269                ..modifier
270            },
271            key: key("comma"),
272            action: CompositorBindingAction::Trail(TrailBindingAction::Prev),
273        },
274        CompositorBinding {
275            scope: CompositorBindingScope::Global,
276            modifiers: KeyModifiers {
277                shift: true,
278                ..modifier
279            },
280            key: key("dot"),
281            action: CompositorBindingAction::Trail(TrailBindingAction::Next),
282        },
283        CompositorBinding {
284            scope: CompositorBindingScope::Cluster,
285            modifiers: modifier,
286            key: key("l"),
287            action: CompositorBindingAction::Cluster(ClusterBindingAction::LayoutCycle),
288        },
289        CompositorBinding {
290            scope: CompositorBindingScope::Global,
291            modifiers: modifier,
292            key: key("1"),
293            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(1)),
294        },
295        CompositorBinding {
296            scope: CompositorBindingScope::Global,
297            modifiers: modifier,
298            key: key("2"),
299            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(2)),
300        },
301        CompositorBinding {
302            scope: CompositorBindingScope::Global,
303            modifiers: modifier,
304            key: key("3"),
305            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(3)),
306        },
307        CompositorBinding {
308            scope: CompositorBindingScope::Global,
309            modifiers: modifier,
310            key: key("4"),
311            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(4)),
312        },
313        CompositorBinding {
314            scope: CompositorBindingScope::Global,
315            modifiers: modifier,
316            key: key("5"),
317            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(5)),
318        },
319        CompositorBinding {
320            scope: CompositorBindingScope::Global,
321            modifiers: modifier,
322            key: key("6"),
323            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(6)),
324        },
325        CompositorBinding {
326            scope: CompositorBindingScope::Global,
327            modifiers: modifier,
328            key: key("7"),
329            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(7)),
330        },
331        CompositorBinding {
332            scope: CompositorBindingScope::Global,
333            modifiers: modifier,
334            key: key("8"),
335            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(8)),
336        },
337        CompositorBinding {
338            scope: CompositorBindingScope::Global,
339            modifiers: modifier,
340            key: key("9"),
341            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(9)),
342        },
343        CompositorBinding {
344            scope: CompositorBindingScope::Global,
345            modifiers: modifier,
346            key: key("0"),
347            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(10)),
348        },
349        CompositorBinding {
350            scope: CompositorBindingScope::Tile,
351            modifiers: modifier,
352            key: key("left"),
353            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
354                DirectionalAction::Left,
355            )),
356        },
357        CompositorBinding {
358            scope: CompositorBindingScope::Tile,
359            modifiers: modifier,
360            key: key("right"),
361            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
362                DirectionalAction::Right,
363            )),
364        },
365        CompositorBinding {
366            scope: CompositorBindingScope::Tile,
367            modifiers: modifier,
368            key: key("up"),
369            action: CompositorBindingAction::Tile(TileBindingAction::Focus(DirectionalAction::Up)),
370        },
371        CompositorBinding {
372            scope: CompositorBindingScope::Tile,
373            modifiers: modifier,
374            key: key("down"),
375            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
376                DirectionalAction::Down,
377            )),
378        },
379        CompositorBinding {
380            scope: CompositorBindingScope::Tile,
381            modifiers: KeyModifiers {
382                ctrl: true,
383                ..modifier
384            },
385            key: key("left"),
386            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Left)),
387        },
388        CompositorBinding {
389            scope: CompositorBindingScope::Tile,
390            modifiers: KeyModifiers {
391                ctrl: true,
392                ..modifier
393            },
394            key: key("right"),
395            action: CompositorBindingAction::Tile(TileBindingAction::Swap(
396                DirectionalAction::Right,
397            )),
398        },
399        CompositorBinding {
400            scope: CompositorBindingScope::Tile,
401            modifiers: KeyModifiers {
402                ctrl: true,
403                ..modifier
404            },
405            key: key("up"),
406            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Up)),
407        },
408        CompositorBinding {
409            scope: CompositorBindingScope::Tile,
410            modifiers: KeyModifiers {
411                ctrl: true,
412                ..modifier
413            },
414            key: key("down"),
415            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Down)),
416        },
417    ]
418}