halley-config 0.3.0

Configuration loading and parsing for the Halley Wayland compositor.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
use std::collections::HashMap;

use halley_core::field::Vec2;

use crate::keybinds::{
    BearingsBindingAction, ClusterBindingAction, CompositorBinding, CompositorBindingAction,
    CompositorBindingScope, DirectionalAction, FocusCycleBindingAction, KeyModifiers, Keybinds,
    NodeBindingAction, PointerBinding, PointerBindingAction, TileBindingAction, TrailBindingAction,
    WHEEL_DOWN_CODE, WHEEL_UP_CODE, key_name_to_evdev,
};

use super::{
    AnimationsConfig, BearingsConfig, ClickCollapsedOutsideFocusMode, ClickCollapsedPanMode,
    CloseRestorePanMode, ClusterBloomDirection, ClusterDefaultLayout, CursorConfig,
    DecorationsConfig, FontConfig, InputConfig, NodeBackgroundColorMode, NodeBorderColorMode,
    NodeDisplayPolicy, OverlayStyleConfig, PanToNewMode, PinsConfig, PlacementConfig,
    RuntimeTuning, ScreenshotConfig, ShapeStyle,
};

impl Default for RuntimeTuning {
    fn default() -> Self {
        Self {
            viewport_center: Vec2 { x: 0.0, y: 0.0 },
            viewport_size: Vec2 {
                x: 1920.0,
                y: 1080.0,
            },

            focus_ring_rx: 820.0,
            focus_ring_ry: 420.0,
            focus_ring_offset_x: 0.0,
            focus_ring_offset_y: 0.0,

            primary_hot_inner_frac: 0.88,
            primary_to_node_ms: 1_260_000,
            node_show_labels: NodeDisplayPolicy::Hover,
            node_show_app_icons: NodeDisplayPolicy::Always,
            node_shape: ShapeStyle::Squircle,
            node_label_shape: ShapeStyle::Squircle,
            node_icon_size: 0.72,
            node_background_color: NodeBackgroundColorMode::Auto,
            node_border_color_hover: NodeBorderColorMode::UseWindowActive,
            node_border_color_inactive: NodeBorderColorMode::UseWindowInactive,
            decorations: DecorationsConfig::default(),
            click_collapsed_outside_focus: ClickCollapsedOutsideFocusMode::Activate,
            click_collapsed_pan: ClickCollapsedPanMode::IfOffscreen,
            bearings: BearingsConfig {
                show_distance: true,
                show_icons: true,
                show_pinned: true,
                fade_distance: 1200.0,
            },

            cluster_distance_px: 280.0,
            cluster_dwell_ms: 900,
            cluster_show_icons: true,
            cluster_bloom_direction: ClusterBloomDirection::Clockwise,
            cluster_default_layout: ClusterDefaultLayout::Stacking,
            tile_gaps_inner_px: 20.0,
            tile_gaps_outer_px: 20.0,
            tile_new_on_top: false,
            tile_queue_show_icons: true,
            tile_max_stack: 3,
            stacking_max_visible: 5,
            trail_history_length: 32,
            trail_wrap: true,

            active_outside_ring_delay_ms: 120_000,
            inactive_outside_ring_delay_ms: 30_000,
            docked_offscreen_delay_ms: 300_000,

            non_overlap_gap_px: 20.0,
            field_active_windows_allowed: 5,
            pan_to_new: PanToNewMode::IfNeeded,
            placement: PlacementConfig::default(),
            pins: PinsConfig::default(),
            close_restore_focus: true,
            close_restore_pan: CloseRestorePanMode::IfOffscreen,
            zoom_enabled: true,
            zoom_step: 1.10,
            zoom_min: 0.25,
            zoom_max: 1.35,
            zoom_smooth: true,
            zoom_smooth_rate: 12.5,
            non_overlap_active_gap_scale: 0.22,
            non_overlap_bump_newer: false,
            non_overlap_bump_damping: 0.65,
            drag_smoothing_boost: 6.0,
            center_window_to_mouse: false,
            restore_last_active_on_pan_return: true,
            physics_enabled: true,
            window_rules: Vec::new(),

            keybinds: Keybinds::default(),
            compositor_bindings: default_compositor_bindings(Keybinds::default().modifier),
            launch_bindings: Vec::new(),
            pointer_bindings: default_pointer_bindings(Keybinds::default().modifier),

            tty_viewports: Vec::new(),
            autostart_once: Vec::new(),
            autostart_on_reload: Vec::new(),
            input: InputConfig::default(),
            cursor: CursorConfig::default(),
            font: FontConfig::default(),
            animations: AnimationsConfig::default(),
            overlay_style: OverlayStyleConfig::default(),
            screenshot: ScreenshotConfig::default(),
            env: HashMap::new(),
        }
    }
}

pub fn default_pointer_bindings(modifier: KeyModifiers) -> Vec<PointerBinding> {
    let mut transfer_modifier = modifier;
    transfer_modifier.shift = true;
    vec![
        PointerBinding {
            modifiers: modifier,
            button: 272,
            action: PointerBindingAction::MoveWindow,
        },
        PointerBinding {
            modifiers: transfer_modifier,
            button: 272,
            action: PointerBindingAction::PanField,
        },
        PointerBinding {
            modifiers: modifier,
            button: 273,
            action: PointerBindingAction::ResizeWindow,
        },
    ]
}

pub fn default_compositor_bindings(modifier: KeyModifiers) -> Vec<CompositorBinding> {
    let key = |name: &str| key_name_to_evdev(name).expect("default compositor key should exist");

    vec![
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("r"),
            action: CompositorBindingAction::Reload,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("return"),
            action: CompositorBindingAction::OpenTerminal,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("n"),
            action: CompositorBindingAction::ToggleState,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Field,
            modifiers: modifier,
            key: key("m"),
            action: CompositorBindingAction::MaximizeFocusedWindow,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Field,
            modifiers: modifier,
            key: key("p"),
            action: CompositorBindingAction::ToggleFocusedPin,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: KeyModifiers {
                shift: true,
                ..modifier
            },
            key: key("c"),
            action: CompositorBindingAction::ClusterMode,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("z"),
            action: CompositorBindingAction::Bearings(BearingsBindingAction::Show),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: KeyModifiers {
                shift: true,
                ..modifier
            },
            key: key("z"),
            action: CompositorBindingAction::Bearings(BearingsBindingAction::Toggle),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("tab"),
            action: CompositorBindingAction::FocusCycle(FocusCycleBindingAction::Forward),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: KeyModifiers {
                shift: true,
                ..modifier
            },
            key: key("tab"),
            action: CompositorBindingAction::FocusCycle(FocusCycleBindingAction::Backward),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: WHEEL_UP_CODE,
            action: CompositorBindingAction::ZoomIn,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: WHEEL_DOWN_CODE,
            action: CompositorBindingAction::ZoomOut,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("mousemiddle"),
            action: CompositorBindingAction::ZoomReset,
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: KeyModifiers {
                shift: true,
                ..modifier
            },
            key: key("q"),
            action: CompositorBindingAction::Quit {
                requires_shift: true,
            },
        },
        CompositorBinding {
            scope: CompositorBindingScope::Field,
            modifiers: modifier,
            key: key("h"),
            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Left)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Field,
            modifiers: modifier,
            key: key("k"),
            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Up)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Field,
            modifiers: modifier,
            key: key("l"),
            action: CompositorBindingAction::Node(NodeBindingAction::Move(
                DirectionalAction::Right,
            )),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Field,
            modifiers: modifier,
            key: key("j"),
            action: CompositorBindingAction::Node(NodeBindingAction::Move(DirectionalAction::Down)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: KeyModifiers {
                shift: true,
                ..modifier
            },
            key: key("comma"),
            action: CompositorBindingAction::Trail(TrailBindingAction::Prev),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: KeyModifiers {
                shift: true,
                ..modifier
            },
            key: key("dot"),
            action: CompositorBindingAction::Trail(TrailBindingAction::Next),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Cluster,
            modifiers: modifier,
            key: key("l"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::LayoutCycle),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("1"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(1)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("2"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(2)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("3"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(3)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("4"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(4)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("5"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(5)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("6"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(6)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("7"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(7)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("8"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(8)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("9"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(9)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Global,
            modifiers: modifier,
            key: key("0"),
            action: CompositorBindingAction::Cluster(ClusterBindingAction::Slot(10)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: modifier,
            key: key("left"),
            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
                DirectionalAction::Left,
            )),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: modifier,
            key: key("right"),
            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
                DirectionalAction::Right,
            )),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: modifier,
            key: key("up"),
            action: CompositorBindingAction::Tile(TileBindingAction::Focus(DirectionalAction::Up)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: modifier,
            key: key("down"),
            action: CompositorBindingAction::Tile(TileBindingAction::Focus(
                DirectionalAction::Down,
            )),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: KeyModifiers {
                ctrl: true,
                ..modifier
            },
            key: key("left"),
            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Left)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: KeyModifiers {
                ctrl: true,
                ..modifier
            },
            key: key("right"),
            action: CompositorBindingAction::Tile(TileBindingAction::Swap(
                DirectionalAction::Right,
            )),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: KeyModifiers {
                ctrl: true,
                ..modifier
            },
            key: key("up"),
            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Up)),
        },
        CompositorBinding {
            scope: CompositorBindingScope::Tile,
            modifiers: KeyModifiers {
                ctrl: true,
                ..modifier
            },
            key: key("down"),
            action: CompositorBindingAction::Tile(TileBindingAction::Swap(DirectionalAction::Down)),
        },
    ]
}