+87
-207
config/river/init.roc
+87
-207
config/river/init.roc
···
1
1
#!/usr/bin/env roc
2
-
app [main!] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.19.0/Hj-J_zxz7V9YurCSTFcFdu6cQJie4guzsPMUi5kBYUk.tar.br" }
2
+
app [main!] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.20.0/X73hGh05nNTkDHU06FHC0YfFaQB1pimX7gncRcao5mU.tar.br" }
3
3
4
4
# TODO: Create a platform that interfaces directly with the river wayland protocol
5
5
# TODO: Check for a cli argument to determine if the autostart commands should be run
6
6
7
7
import pf.Cmd
8
-
import pf.Env
9
8
import pf.Stdout
10
9
import pf.Stderr
11
10
11
+
tag_to_rtag = |num|
12
+
Num.shift_left_by 1 (num - 1)
13
+
|> Num.to_str
14
+
12
15
named_tag_to_rtag = |tag_name|
13
16
when tag_name is
14
17
One -> tag_to_rtag 1
···
20
23
Seven -> tag_to_rtag 7
21
24
Eight -> tag_to_rtag 8
22
25
Nine -> tag_to_rtag 9
23
-
KeePassXC -> tag_to_rtag 10
24
-
Nautilus -> tag_to_rtag 11
25
-
Thunderbird -> tag_to_rtag 12
26
-
All -> (Num.shift_left_by 1 32) - 1
26
+
Discord -> tag_to_rtag 10
27
+
Games -> tag_to_rtag 11
28
+
Hide -> tag_to_rtag 12
29
+
KeePassXC -> tag_to_rtag 13
30
+
Nautilus -> tag_to_rtag 14
31
+
Signal -> tag_to_rtag 15
32
+
Steam -> tag_to_rtag 16
33
+
Thunderbird -> tag_to_rtag 17
34
+
All -> Num.to_str ((Num.shift_left_by 1 32) - 1)
27
35
28
-
autostart! = |{}|
29
-
home = Env.decode! "HOME" ?? "/"
36
+
autostart = [
37
+
"systemctl --user start river-session-pre.target",
38
+
"update-session-vars",
39
+
"systemctl --user start river-session.target",
40
+
"kanshi",
41
+
"xrandr --output HDMI-A-5 --primary",
42
+
"rivertile -outer-padding 0 -view-padding 0 -main-ratio 0.5",
43
+
"swaybg -i /media/nextcloud/wallpapers/dark/evie-s-Pb1KFv4tauY-unsplash.jpg -m fill",
44
+
]
30
45
31
-
[
32
-
"systemctl --user start river-session-pre.target",
33
-
"update-session-vars",
34
-
"systemctl --user start river-session.target",
35
-
"kanshi",
36
-
"rivertile -outer-padding 0 -view-padding 0 -main-ratio 0.5",
37
-
Str.replace_each "swaybg -i $HOME/pic/wallpapers/dark/evie-s-Pb1KFv4tauY-unsplash.jpg -m fill" "$HOME" home,
38
-
]
46
+
autostart_apps = [
47
+
"keepassxc",
48
+
"org.mozilla.Thunderbird",
49
+
]
39
50
40
51
configurations = [
52
+
{ option: "allow-tearing", args: ["enabled"] },
41
53
{ option: "border-color-focused", args: ["0x93a1a1"] },
42
54
{ option: "border-color-unfocused", args: ["0x586e75"] },
55
+
{ option: "border-width", args: ["0"] },
43
56
{ option: "focus-follows-cursor", args: ["normal"] },
44
57
{ option: "set-cursor-warp", args: ["on-output-change"] },
45
58
{ option: "xcursor-theme", args: ["Adwaita", "24"] },
46
-
{
47
-
option: "input",
48
-
args: [
49
-
"pointer-1356-3570-Sony_Interactive_Entertainment_DualSense_Edge_Wireless_Controller_Touchpad",
50
-
"events",
51
-
"disabled",
52
-
],
53
-
},
59
+
{ option: "input", args: ["pointer-1356-3570-Sony_Interactive_Entertainment_DualSense_Edge_Wireless_Controller_Touchpad", "events", "disabled"] },
60
+
{ option: "input", args: ["pointer-4660-22136-extest_fake_device", "map-to-output", "HDMI-A-5"] },
54
61
]
55
62
56
63
rules = [
64
+
{ id: "discord", title: "", action: "output", args: ["AOC 2460G4 0x0000075E"] },
65
+
{ id: "discord", title: "", action: "tags", args: [named_tag_to_rtag Discord] },
57
66
{ id: "org.gnome.Nautilus", title: "", action: "float", args: [] },
58
-
{ id: "org.gnome.Nautilus", title: "", action: "tags", args: [Num.to_str (named_tag_to_rtag Nautilus)] },
59
-
{ id: "org.gnome.Nautilus", title: "", action: "float", args: [] },
67
+
{ id: "org.gnome.Nautilus", title: "", action: "tags", args: [named_tag_to_rtag Nautilus] },
68
+
{ id: "org.keepassxc.KeePassXC", title: "", action: "csd", args: [] },
60
69
{ id: "org.keepassxc.KeePassXC", title: "", action: "float", args: [] },
61
-
{
62
-
id: "org.keepassxc.KeePassXC",
63
-
title: "KeyChain.kdbx [Locked] - KeePassXC",
64
-
action: "tags",
65
-
args: [Num.to_str (named_tag_to_rtag KeePassXC)],
66
-
},
67
-
{ id: "org.mozilla.Thunderbird", title: "", action: "tags", args: [Num.to_str (named_tag_to_rtag Thunderbird)] },
70
+
{ id: "org.keepassxc.KeePassXC", title: "KeyChain.kdbx [Locked] - KeePassXC", action: "output", args: ["LG Electronics LG HDR WFHD 0x0000B11B"] },
71
+
{ id: "org.keepassxc.KeePassXC", title: "KeyChain.kdbx [Locked] - KeePassXC", action: "tags", args: [named_tag_to_rtag KeePassXC] },
72
+
{ id: "org.mozilla.Thunderbird", title: "", action: "output", args: ["LG Electronics LG HDR WFHD 0x0000B11B"] },
73
+
{ id: "org.mozilla.Thunderbird", title: "", action: "tags", args: [named_tag_to_rtag Thunderbird] },
74
+
{ id: "signal", title: "", action: "output", args: ["AOC 2460G4 0x0000075E"] },
75
+
{ id: "signal", title: "", action: "tags", args: [named_tag_to_rtag Signal] },
76
+
{ id: "steam", title: "", action: "output", args: ["LG Electronics LG HDR WFHD 0x0000B11B"] },
77
+
{ id: "steam", title: "", action: "tags", args: [named_tag_to_rtag Steam] },
78
+
{ id: "steam_app_*", title: "", action: "output", args: ["LG Electronics LG HDR WFHD 0x0000B11B"] },
79
+
{ id: "steam_app_*", title: "", action: "tags", args: [named_tag_to_rtag Games] },
68
80
]
69
81
70
82
modes = [
···
80
92
tag_binds =
81
93
List.range { start: At(1), end: At(9) }
82
94
|> List.map(
83
-
|tag_num| [
84
-
{
85
-
mode: "normal",
86
-
mods: [Super],
87
-
key: Num.to_str tag_num,
88
-
cmd: "toggle-focused-tags",
89
-
args: [Num.to_str (tag_to_rtag tag_num)],
90
-
},
91
-
{
92
-
mode: "normal",
93
-
mods: [Super, Shift],
94
-
key: Num.to_str tag_num,
95
-
cmd: "toggle-view-tags",
96
-
args: [Num.to_str (tag_to_rtag tag_num)],
97
-
},
98
-
{
99
-
mode: "normal",
100
-
mods: [Super, Control],
101
-
key: Num.to_str tag_num,
102
-
cmd: "set-focused-tags",
103
-
args: [Num.to_str (tag_to_rtag tag_num)],
104
-
},
105
-
{
106
-
mode: "normal",
107
-
mods: [Super, Shift, Control],
108
-
key: Num.to_str tag_num,
109
-
cmd: "set-view-tags",
110
-
args: [Num.to_str (tag_to_rtag tag_num)],
111
-
},
112
-
],
95
+
|tag|
96
+
tag_str = Num.to_str tag
97
+
[
98
+
{ mode: "normal", mods: [Super], key: tag_str, cmd: "toggle-focused-tags", args: [tag_to_rtag tag] },
99
+
{ mode: "normal", mods: [Super, Shift], key: tag_str, cmd: "toggle-view-tags", args: [tag_to_rtag tag] },
100
+
{ mode: "normal", mods: [Super, Control], key: tag_str, cmd: "set-focused-tags", args: [tag_to_rtag tag] },
101
+
{ mode: "normal", mods: [Super, Shift, Control], key: tag_str, cmd: "set-view-tags", args: [tag_to_rtag tag] },
102
+
],
113
103
)
114
104
|> List.join
115
105
|> List.concat [
116
106
# Show all tags
117
-
{
118
-
mode: "normal",
119
-
mods: [Super],
120
-
key: "0",
121
-
cmd: "set-focused-tags",
122
-
args: [Num.to_str (named_tag_to_rtag All)],
123
-
},
124
-
{
125
-
mode: "normal",
126
-
mods: [Super, Shift],
127
-
key: "0",
128
-
cmd: "set-view-tags",
129
-
args: [Num.to_str (named_tag_to_rtag All)],
130
-
},
107
+
{ mode: "normal", mods: [Super], key: "0", cmd: "set-focused-tags", args: [named_tag_to_rtag All] },
108
+
{ mode: "normal", mods: [Super, Shift], key: "0", cmd: "set-view-tags", args: [named_tag_to_rtag All] },
109
+
]
110
+
|> List.concat [
111
+
# Hide applications
112
+
{ mode: "normal", mods: [Super], key: "H", cmd: "set-view-tags", args: [named_tag_to_rtag Hide] },
113
+
{ mode: "normal", mods: [Super, Control], key: "H", cmd: "set-focused-tags", args: [named_tag_to_rtag Hide] },
131
114
]
115
+
116
+
special_tag_binds = |named_tag, key| [
117
+
{ mode: "special-tags", mods: [None], key: key, cmd: "toggle-focused-tags", args: [named_tag_to_rtag named_tag] },
118
+
{ mode: "special-tags", mods: [Shift], key: key, cmd: "toggle-view-tags", args: [named_tag_to_rtag named_tag] },
119
+
{ mode: "special-tags", mods: [Control], key: key, cmd: "set-focused-tags", args: [named_tag_to_rtag named_tag] },
120
+
{ mode: "special-tags", mods: [Shift, Control], key: key, cmd: "set-view-tags", args: [named_tag_to_rtag named_tag] },
121
+
]
132
122
133
123
keybinds = [
134
124
# Launch Applications
···
147
137
{ mode: "normal", mods: [Super, Alt], key: "X", cmd: "focus-output", args: ["previous"] },
148
138
{ mode: "normal", mods: [Super, Control], key: "X", cmd: "send-to-output", args: ["next"] },
149
139
{ mode: "normal", mods: [Super, Control, Alt], key: "X", cmd: "send-to-output", args: ["previous"] },
150
-
{
151
-
mode: "normal",
152
-
mods: [Super, Shift, Control],
153
-
key: "X",
154
-
cmd: "send-to-output",
155
-
args: ["-current-tags", "next"],
156
-
},
157
-
{
158
-
mode: "normal",
159
-
mods: [Super, Shift, Control, Alt],
160
-
key: "X",
161
-
cmd: "send-to-output",
162
-
args: ["-current-tags", "previous"],
163
-
},
140
+
{ mode: "normal", mods: [Super, Shift, Control], key: "X", cmd: "send-to-output", args: ["-current-tags", "next"] },
141
+
{ mode: "normal", mods: [Super, Shift, Control, Alt], key: "X", cmd: "send-to-output", args: ["-current-tags", "previous"] },
164
142
165
143
# Exit River
166
144
{ mode: "normal", mods: [Super, Control], key: "Escape", cmd: "exit", args: [] },
···
178
156
{ mode: "normal", mods: [Super], key: "Down", cmd: "send-layout-cmd", args: ["rivertile", "main-location bottom"] },
179
157
{ mode: "normal", mods: [Super], key: "Right", cmd: "send-layout-cmd", args: ["rivertile", "main-location right"] },
180
158
{ mode: "normal", mods: [Super], key: "Bracketleft", cmd: "send-layout-cmd", args: ["rivertile", "main-count -1"] },
181
-
{
182
-
mode: "normal",
183
-
mods: [Super],
184
-
key: "Bracketright",
185
-
cmd: "send-layout-cmd",
186
-
args: ["rivertile", "main-count +1"],
187
-
},
188
-
{
189
-
mode: "normal",
190
-
mods: [Super, Control],
191
-
key: "Bracketleft",
192
-
cmd: "send-layout-cmd",
193
-
args: ["rivertile", "main-ratio -0.05"],
194
-
},
195
-
{
196
-
mode: "normal",
197
-
mods: [Super, Control],
198
-
key: "Bracketright",
199
-
cmd: "send-layout-cmd",
200
-
args: ["rivertile", "main-ratio +0.05"],
201
-
},
159
+
{ mode: "normal", mods: [Super], key: "Bracketright", cmd: "send-layout-cmd", args: ["rivertile", "main-count +1"] },
160
+
{ mode: "normal", mods: [Super, Control], key: "Bracketleft", cmd: "send-layout-cmd", args: ["rivertile", "main-ratio -0.05"] },
161
+
{ mode: "normal", mods: [Super, Control], key: "Bracketright", cmd: "send-layout-cmd", args: ["rivertile", "main-ratio +0.05"] },
202
162
{ mode: "normal", mods: [Super], key: "Space", cmd: "zoom", args: [] },
203
163
{ mode: "normal", mods: [Super], key: "Comma", cmd: "focus-view", args: ["previous"] },
204
164
{ mode: "normal", mods: [Super], key: "Period", cmd: "focus-view", args: ["next"] },
···
212
172
# Special Tags Mode
213
173
{ mode: "normal", mods: [Super], key: "G", cmd: "enter-mode", args: ["special-tags"] },
214
174
{ mode: "special-tags", mods: [None], key: "Escape", cmd: "enter-mode", args: ["normal"] },
215
-
216
-
# KeePassXC Tag
217
-
{
218
-
mode: "special-tags",
219
-
mods: [None],
220
-
key: "K",
221
-
cmd: "toggle-focused-tags",
222
-
args: [Num.to_str (named_tag_to_rtag KeePassXC)],
223
-
},
224
-
{
225
-
mode: "special-tags",
226
-
mods: [Shift],
227
-
key: "K",
228
-
cmd: "toggle-view-tags",
229
-
args: [Num.to_str (named_tag_to_rtag KeePassXC)],
230
-
},
231
-
{
232
-
mode: "special-tags",
233
-
mods: [Control],
234
-
key: "K",
235
-
cmd: "set-focused-tags",
236
-
args: [Num.to_str (named_tag_to_rtag KeePassXC)],
237
-
},
238
-
{
239
-
mode: "special-tags",
240
-
mods: [Shift, Control],
241
-
key: "K",
242
-
cmd: "set-view-tags",
243
-
args: [Num.to_str (named_tag_to_rtag KeePassXC)],
244
-
},
245
-
246
-
# Thunderbird Tag
247
-
{
248
-
mode: "special-tags",
249
-
mods: [None],
250
-
key: "T",
251
-
cmd: "toggle-focused-tags",
252
-
args: [Num.to_str (named_tag_to_rtag Thunderbird)],
253
-
},
254
-
{
255
-
mode: "special-tags",
256
-
mods: [Shift],
257
-
key: "T",
258
-
cmd: "toggle-view-tags",
259
-
args: [Num.to_str (named_tag_to_rtag Thunderbird)],
260
-
},
261
-
{
262
-
mode: "special-tags",
263
-
mods: [Control],
264
-
key: "T",
265
-
cmd: "set-focused-tags",
266
-
args: [Num.to_str (named_tag_to_rtag Thunderbird)],
267
-
},
268
-
{
269
-
mode: "special-tags",
270
-
mods: [Shift, Control],
271
-
key: "T",
272
-
cmd: "set-view-tags",
273
-
args: [Num.to_str (named_tag_to_rtag Thunderbird)],
274
-
},
275
-
276
-
# Nautilus Tag
277
-
{
278
-
mode: "special-tags",
279
-
mods: [None],
280
-
key: "N",
281
-
cmd: "toggle-focused-tags",
282
-
args: [Num.to_str (named_tag_to_rtag Nautilus)],
283
-
},
284
-
{
285
-
mode: "special-tags",
286
-
mods: [Shift],
287
-
key: "N",
288
-
cmd: "toggle-view-tags",
289
-
args: [Num.to_str (named_tag_to_rtag Nautilus)],
290
-
},
291
-
{
292
-
mode: "special-tags",
293
-
mods: [Control],
294
-
key: "N",
295
-
cmd: "set-focused-tags",
296
-
args: [Num.to_str (named_tag_to_rtag Nautilus)],
297
-
},
298
-
{
299
-
mode: "special-tags",
300
-
mods: [Shift, Control],
301
-
key: "N",
302
-
cmd: "set-view-tags",
303
-
args: [Num.to_str (named_tag_to_rtag Nautilus)],
304
-
},
305
175
]
306
176
307
-
tag_to_rtag = |num|
308
-
Num.shift_left_by 1 (num - 1)
309
-
310
177
mod_str = |mod|
311
178
when mod is
312
179
Control -> "Control"
···
325
192
result =
326
193
Cmd.new "riverctl"
327
194
|> Cmd.args elem
328
-
|> Cmd.status!
195
+
|> Cmd.exec_exit_code!
329
196
330
197
when result is
331
198
Ok exit_code if exit_code == 0 -> Ok {}
···
334
201
335
202
main! = |_args|
336
203
autostart_cmds! =
337
-
autostart! {}
204
+
autostart
205
+
|> List.map |cmd|
206
+
["spawn", cmd]
207
+
208
+
autostart_apps_cmds =
209
+
autostart_apps
338
210
|> List.map |cmd|
339
211
["spawn", cmd]
340
212
···
367
239
368
240
keybind_cmds =
369
241
tag_binds
242
+
|> List.concat (special_tag_binds Discord "D")
243
+
|> List.concat (special_tag_binds Games "G")
244
+
|> List.concat (special_tag_binds KeePassXC "K")
245
+
|> List.concat (special_tag_binds Nautilus "N")
246
+
|> List.concat (special_tag_binds Signal "M")
247
+
|> List.concat (special_tag_binds Steam "S")
248
+
|> List.concat (special_tag_binds Thunderbird "T")
370
249
|> List.concat keybinds
371
250
|> List.map |{ mode, mods, key, cmd, args }|
372
251
["map", mode, Str.join_with (List.map mods mod_str) "+", key, cmd]
···
378
257
|> List.concat mode_cmds
379
258
|> List.concat pointer_bind_cmds
380
259
|> List.concat keybind_cmds
260
+
|> List.concat autostart_apps_cmds
381
261
|> riverctl_runner!