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