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