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, KeyModifiers, Keybinds, NodeBindingAction,
8    PointerBinding, PointerBindingAction, TileBindingAction, TrailBindingAction, WHEEL_DOWN_CODE,
9    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::Global,
156            modifiers: KeyModifiers {
157                shift: true,
158                ..modifier
159            },
160            key: key("c"),
161            action: CompositorBindingAction::ClusterMode,
162        },
163        CompositorBinding {
164            scope: CompositorBindingScope::Global,
165            modifiers: modifier,
166            key: key("z"),
167            action: CompositorBindingAction::Bearings(BearingsBindingAction::Show),
168        },
169        CompositorBinding {
170            scope: CompositorBindingScope::Global,
171            modifiers: KeyModifiers {
172                shift: true,
173                ..modifier
174            },
175            key: key("z"),
176            action: CompositorBindingAction::Bearings(BearingsBindingAction::Toggle),
177        },
178        CompositorBinding {
179            scope: CompositorBindingScope::Global,
180            modifiers: modifier,
181            key: WHEEL_UP_CODE,
182            action: CompositorBindingAction::ZoomIn,
183        },
184        CompositorBinding {
185            scope: CompositorBindingScope::Global,
186            modifiers: modifier,
187            key: WHEEL_DOWN_CODE,
188            action: CompositorBindingAction::ZoomOut,
189        },
190        CompositorBinding {
191            scope: CompositorBindingScope::Global,
192            modifiers: modifier,
193            key: key("mousemiddle"),
194            action: CompositorBindingAction::ZoomReset,
195        },
196        CompositorBinding {
197            scope: CompositorBindingScope::Global,
198            modifiers: KeyModifiers {
199                shift: true,
200                ..modifier
201            },
202            key: key("q"),
203            action: CompositorBindingAction::Quit {
204                requires_shift: true,
205            },
206        },
207        CompositorBinding {
208            scope: CompositorBindingScope::Field,
209            modifiers: modifier,
210            key: key("h"),
211            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Left)),
212        },
213        CompositorBinding {
214            scope: CompositorBindingScope::Field,
215            modifiers: modifier,
216            key: key("k"),
217            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Up)),
218        },
219        CompositorBinding {
220            scope: CompositorBindingScope::Field,
221            modifiers: modifier,
222            key: key("l"),
223            action: CompositorBindingAction::Node(NodeBindingAction::Move(
224                DirectionalAction::Right,
225            )),
226        },
227        CompositorBinding {
228            scope: CompositorBindingScope::Field,
229            modifiers: modifier,
230            key: key("j"),
231            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Down)),
232        },
233        CompositorBinding {
234            scope: CompositorBindingScope::Global,
235            modifiers: KeyModifiers {
236                shift: true,
237                ..modifier
238            },
239            key: key("comma"),
240            action: CompositorBindingAction::Trail(TrailBindingAction::Prev),
241        },
242        CompositorBinding {
243            scope: CompositorBindingScope::Global,
244            modifiers: KeyModifiers {
245                shift: true,
246                ..modifier
247            },
248            key: key("dot"),
249            action: CompositorBindingAction::Trail(TrailBindingAction::Next),
250        },
251        CompositorBinding {
252            scope: CompositorBindingScope::Cluster,
253            modifiers: modifier,
254            key: key("l"),
255            action: CompositorBindingAction::Cluster(ClusterBindingAction::LayoutCycle),
256        },
257        CompositorBinding {
258            scope: CompositorBindingScope::Tile,
259            modifiers: modifier,
260            key: key("left"),
261            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
262                DirectionalAction::Left,
263            )),
264        },
265        CompositorBinding {
266            scope: CompositorBindingScope::Tile,
267            modifiers: modifier,
268            key: key("right"),
269            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
270                DirectionalAction::Right,
271            )),
272        },
273        CompositorBinding {
274            scope: CompositorBindingScope::Tile,
275            modifiers: modifier,
276            key: key("up"),
277            action: CompositorBindingAction::Tile(TileBindingAction::Focus(DirectionalAction::Up)),
278        },
279        CompositorBinding {
280            scope: CompositorBindingScope::Tile,
281            modifiers: modifier,
282            key: key("down"),
283            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
284                DirectionalAction::Down,
285            )),
286        },
287        CompositorBinding {
288            scope: CompositorBindingScope::Tile,
289            modifiers: KeyModifiers {
290                ctrl: true,
291                ..modifier
292            },
293            key: key("left"),
294            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Left)),
295        },
296        CompositorBinding {
297            scope: CompositorBindingScope::Tile,
298            modifiers: KeyModifiers {
299                ctrl: true,
300                ..modifier
301            },
302            key: key("right"),
303            action: CompositorBindingAction::Tile(TileBindingAction::Swap(
304                DirectionalAction::Right,
305            )),
306        },
307        CompositorBinding {
308            scope: CompositorBindingScope::Tile,
309            modifiers: KeyModifiers {
310                ctrl: true,
311                ..modifier
312            },
313            key: key("up"),
314            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Up)),
315        },
316        CompositorBinding {
317            scope: CompositorBindingScope::Tile,
318            modifiers: KeyModifiers {
319                ctrl: true,
320                ..modifier
321            },
322            key: key("down"),
323            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Down)),
324        },
325    ]
326}