summaryrefslogtreecommitdiffstats
path: root/2022/info/rde-after.md
blob: c3d6852ff7c02ab1652ab8e9f466552021868230 (plain) (blame)
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
<!-- Automatically generated by emacsconf-publish-after-page -->


<a name="rde-mainVideo-transcript"></a>
# Transcript

[[!template new="1" text="""Hello and welcome everyone at EmacsConf 2022.""" start="00:00:00.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I'm Andrew Tropin, and today""" start="00:00:11.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""we will talk about my Emacs setup.""" start="00:00:13.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I will tell you the story behind it.""" start="00:00:16.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We will discuss what rde and rde Emacs are,""" start="00:00:19.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and we'll make a small Emacs configuration.""" start="00:00:23.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""My original motivation was to have""" start="00:00:28.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a ready for work development environment""" start="00:00:30.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which is reliable and guaranteed to work""" start="00:00:34.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""every time I need it,""" start="00:00:36.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""preferably performant and consistent.""" start="00:00:37.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I say development environment,""" start="00:00:42.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but it actually applies to""" start="00:00:44.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""many other working environment,""" start="00:00:45.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""especially text-heavy.""" start="00:00:47.600" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""An easy and obvious solution is to""" start="00:00:52.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""pick one of existing configuration frameworks""" start="00:00:54.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""like Spacemacs, Doom Emacs, Prelude,""" start="00:00:57.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or something else,""" start="00:01:00.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and to get a pre-configured Emacs""" start="00:01:02.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""in a minute with all bells and whistles.""" start="00:01:05.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But the problem is: only Emacs.""" start="00:01:09.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""In reality, your working environment consists""" start="00:01:12.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""not only from elisp packages,""" start="00:01:16.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but also from system packages""" start="00:01:18.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and their configurations, project libraries,""" start="00:01:21.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""compilers, building tools, etc.,""" start="00:01:23.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and thus you already have at least""" start="00:01:27.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""three, or more likely, five things""" start="00:01:31.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""for managing your environment:""" start="00:01:34.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""configuration, Emacs configuration framework,""" start="00:01:37.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Emacs package manager, system package manager,""" start="00:01:39.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""system/dot files configuration manager,""" start="00:01:42.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""project/language package manager""" start="00:01:46.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and maybe something else.""" start="00:01:49.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Even having our Emacs configuration""" start="00:01:51.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and package manager covered by framework""" start="00:01:56.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""we still have a lot of things""" start="00:01:59.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which we have to interact with,""" start="00:02:02.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""keep in sync, and more importantly,""" start="00:02:04.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""each of them can break.""" start="00:02:08.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But by &quot;works every time,&quot; I mean""" start="00:02:12.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""even if I updated my system packages,""" start="00:02:17.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""configurations, I migrated to a different machine,""" start="00:02:19.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""someone on my team updated project dependencies,""" start="00:02:23.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can get back to work in a matter of seconds,""" start="00:02:29.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or maybe in some cases, minutes.""" start="00:02:31.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""If I have multiple tools""" start="00:02:39.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""for managing my environment""" start="00:02:40.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and even one of them is broken,""" start="00:02:43.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the whole setup is broken.""" start="00:02:45.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Also, if one of them doesn't support""" start="00:02:48.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""deterministic rollback,""" start="00:02:51.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can't guarantee the reliability""" start="00:02:53.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""of my working environment.""" start="00:02:58.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can't be sure that I will be able to""" start="00:02:59.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""rescue or revive it.""" start="00:03:01.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""The less points of failure we have,""" start="00:03:02.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the easier to stay sane.""" start="00:03:06.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Imagine some late breakage notice""" start="00:03:09.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""when you did update a few hours or days ago""" start="00:03:13.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and found it later, and you have""" start="00:03:17.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a few different tools involved.""" start="00:03:20.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It will be really hard to find the cause""" start="00:03:25.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and to make everything work again.""" start="00:03:28.280" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""Is it possible to have one tool""" start="00:03:34.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to cover all the needs I described above?""" start="00:03:37.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Yes, almost. With this tool,""" start="00:03:44.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you can get a reliable setup.""" start="00:03:48.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Now, I talk about functional package managers.""" start="00:03:50.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Functional package managers allow us to""" start="00:03:57.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""manage systems, users, Emacs, project/""" start="00:04:00.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""language packages, and their configurations.""" start="00:04:03.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But more importantly, it allows to do it""" start="00:04:07.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""in a declarative and reproducible manner.""" start="00:04:10.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""That means you just define what you need,""" start="00:04:13.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and those tools build it for you.""" start="00:04:16.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""No matter what was before, you get what you asked for.""" start="00:04:19.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It doesn't matter what time of day,""" start="00:04:24.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""what you did before, what other packages""" start="00:04:26.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you have installed previously.""" start="00:04:29.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You just ask for something, and you get it.""" start="00:04:31.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Two years ago, I did a talk at EmacsConf 2020""" start="00:04:34.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""where I demonstrated a prototype of""" start="00:04:41.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Emacs configuration managed by Nix.""" start="00:04:43.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Originally, I wanted to base my work on""" start="00:04:47.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""an already existing Emacs configuration framework.""" start="00:04:50.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But later, I decided that it will be easier""" start="00:04:56.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and a little more flexible""" start="00:05:01.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to start from ground up.""" start="00:05:02.440" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""After the first prototype in Nix,""" start="00:05:04.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I decided to switch to Guix. To make it short,""" start="00:05:06.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Guix is another functional package manager,""" start="00:05:12.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but more freedom- and reproducibility-oriented,""" start="00:05:14.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and written in only one language (Guile Scheme)""" start="00:05:21.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""instead of few custom-made Nix DSL, Bash, and C++.""" start="00:05:24.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""So now I can write Lisp code, while this code""" start="00:05:29.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""writes another Lisp code. Very neat indeed.""" start="00:05:34.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Unfortunately, at the moment, there was no tool""" start="00:05:37.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to manage user configurations,""" start="00:05:42.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""also known as dotfiles, with Guix.""" start="00:05:45.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""So I wrote one. And now it's a part of GNU Guix""" start="00:05:48.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and called Guix Home.""" start="00:05:52.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""What do we get from this one tool?""" start="00:05:54.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We can use one language to describe the whole system,""" start="00:05:58.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the home environment, the project environment,""" start="00:06:05.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and everything else.""" start="00:06:09.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We don't need to worry about""" start="00:06:10.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to keep different tools in sync""" start="00:06:13.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and to integrate them between each other.""" start="00:06:17.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Also, using one language to describe""" start="00:06:19.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the whole configuration makes it possible""" start="00:06:23.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to share values between different parts of the system.""" start="00:06:25.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""For example, color scheme, fonts, and much more.""" start="00:06:28.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""To sum up the first part of the talk:""" start="00:06:32.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I want a working environment which is ready for work,""" start="00:06:39.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""configured in minutes to almost what I want.""" start="00:06:43.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""That means it should have some batteries included.""" start="00:06:47.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It should be reliable.""" start="00:06:50.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I want to get back to work in seconds""" start="00:06:52.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""even if I broke something""" start="00:06:54.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or someone else broke something.""" start="00:06:56.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""For example, using rollbacks.""" start="00:06:58.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It would be nice if it will be performant.""" start="00:07:03.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It's a little subjective thing,""" start="00:07:07.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but it's nice when things are snappy.""" start="00:07:08.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And it's cool when things are consistent.""" start="00:07:12.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Different interfaces have""" start="00:07:16.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the same way of interactions with them.""" start="00:07:17.800" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""Let's get to the next part,""" start="00:07:20.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and let's discuss what rde is.""" start="00:07:25.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Originally it was my dotfiles repo,""" start="00:07:29.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but it grew into something bigger.""" start="00:07:33.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Now, it's a set of tools on top of""" start="00:07:35.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""GNU Guix, Guix System, and Guix Home.""" start="00:07:39.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can treat it as a GNU/Linux distribution,""" start="00:07:41.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""system and home environment manager""" start="00:07:45.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or configuration framework,""" start="00:07:48.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""project environment manager""" start="00:07:50.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""(like virtualenv, but on steroids),""" start="00:07:52.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and Emacs distribution.""" start="00:07:55.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Usually, you just pick a few features,""" start="00:07:58.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""parameterize them and ask the tool""" start="00:08:02.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to create an operating system for you,""" start="00:08:05.655" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a home environment, project environment,""" start="00:08:08.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or Emacs configuration.""" start="00:08:10.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""That's it. That's simple.""" start="00:08:11.560" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""And what rde Emacs is and how it tastes...""" start="00:08:15.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It's like an ice cream, vanilla-flavored.""" start="00:08:22.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""No fancy macros for configuration, just plain Elisp.""" start="00:08:26.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can find in almost every""" start="00:08:30.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""personal Emacs configuration,""" start="00:08:34.955" video="mainVideo-rde" id="subtitle"]]
[[!template text="""built-in or vanilla-flavored packages""" start="00:08:36.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""are in priority over external""" start="00:08:42.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or very fancy packages.""" start="00:08:45.589" video="mainVideo-rde" id="subtitle"]]
[[!template text="""There is practical reason for this.""" start="00:08:46.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Maybe sometimes you don't get the things""" start="00:08:52.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you're used to in other text editors,""" start="00:08:55.455" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or maybe even in other Emacs frameworks,""" start="00:08:57.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but we want to keep the final result consistent,""" start="00:09:01.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""so you can apply the same interaction patterns""" start="00:09:05.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""in different situations and extend your expectations""" start="00:09:08.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""from one tool to another,""" start="00:09:13.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""from one package to another.""" start="00:09:15.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""For example, we encourage people""" start="00:09:16.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to use the minibuffer completion""" start="00:09:19.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""with orderless and vertico for many tasks:""" start="00:09:22.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""code navigation, file navigation,""" start="00:09:26.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""looking through your emails,""" start="00:09:30.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or just for jumping around.""" start="00:09:32.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's see.""" start="00:09:35.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""First, create a new Emacs instance""" start="00:09:36.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and open a repository with my configuration.""" start="00:09:39.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can see the source code.""" start="00:09:45.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's open another file which contains""" start="00:09:54.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Emacs-related features.""" start="00:09:58.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can see I use imenu,""" start="00:09:59.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and I can filter the list using minibuffer.""" start="00:10:02.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Now let's open the Magit interface,""" start="00:10:08.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and now I want to navigate through""" start="00:10:16.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""this long list of things here.""" start="00:10:18.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Some of them staged. Some of them are recent commits.""" start="00:10:22.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Some of them are untracked at all.""" start="00:10:25.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can open imenu: the same interface,""" start="00:10:28.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but for now, I can navigate around""" start="00:10:31.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the Magit sections and files which are present here.""" start="00:10:34.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""If I want to navigate project files,""" start="00:10:41.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I use almost the same interface.""" start="00:10:45.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can use the same patterns to filter out""" start="00:10:47.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""files in my project or items in magit-imenu.""" start="00:10:51.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Very similar and very consistent.""" start="00:11:00.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Also, we try to have hotkeys consistent""" start="00:11:07.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""across different packages and parts of Emacs.""" start="00:11:11.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We usually don't provide alternatives on what to use.""" start="00:11:16.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We provide only one package for one task.""" start="00:11:21.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But of course this is""" start="00:11:25.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a configuration framework after all.""" start="00:11:28.155" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can declare your own features,""" start="00:11:29.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""implement them yourself,""" start="00:11:32.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and use whatever you want.""" start="00:11:35.789" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""Let's get to some real-world examples.""" start="00:11:37.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It's always easy to show""" start="00:11:45.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""how things get appended,""" start="00:11:48.222" video="mainVideo-rde" id="subtitle"]]
[[!template text="""how things get installed,""" start="00:11:50.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but usually people don't show""" start="00:11:51.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""how they remove things,""" start="00:11:55.289" video="mainVideo-rde" id="subtitle"]]
[[!template text="""because it's usually painful.""" start="00:11:56.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But in our case, it's not.""" start="00:11:58.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's take my configuration,""" start="00:12:02.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""let's find feature-emacs-vertico.""" start="00:12:10.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Vertico's just used to show""" start="00:12:12.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""this fancy completion UI""" start="00:12:19.822" video="mainVideo-rde" id="subtitle"]]
[[!template text="""that you can see here.""" start="00:12:25.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""If I disable this feature""" start="00:12:27.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and rebuild my home environment,""" start="00:12:30.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Emacs will lack this feature.""" start="00:12:43.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It may take some time. It was quite fast,""" start="00:12:46.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I didn't expect it.""" start="00:12:55.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I have Emacs. As you can see here,""" start="00:13:00.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""now it doesn't have this completion UI anymore.""" start="00:13:02.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I just commented it out,""" start="00:13:06.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""rebuilt my home environment,""" start="00:13:09.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and this thing disappeared from Emacs.""" start="00:13:13.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But what if I broke something?""" start="00:13:15.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I just call guix home roll-back command""" start="00:13:19.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and launch Emacs again, and you see""" start="00:13:28.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""now we have vertico back.""" start="00:13:31.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Very good.""" start="00:13:32.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Reliability is one of the most important qualities""" start="00:13:36.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""of working environment.""" start="00:13:41.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We can always get back to""" start="00:13:43.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the working state of our environment""" start="00:13:46.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and be sure that we do the things we want.""" start="00:13:48.440" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""Now let's see another example.""" start="00:13:52.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Here I have a mastodon,""" start="00:13:57.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a post which contains a gemini link.""" start="00:13:59.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can click it, and you see it opens emacsclient,""" start="00:14:03.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""it renders this gemini capsule,""" start="00:14:11.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and we can read all the posts of this guy.""" start="00:14:14.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Very cool.""" start="00:14:17.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But what if I go back to my configuration,""" start="00:14:21.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""we'll find a feature related to elpher,""" start="00:14:26.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""the application which handles gemini links,""" start="00:14:32.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""we'll comment it out,""" start="00:14:36.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and we'll rebuild my home environment.""" start="00:14:38.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""What I expect here is that""" start="00:14:41.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""when I will be clicking the link,""" start="00:14:47.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""emacsclient won't pop up anymore.""" start="00:14:48.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Cool.""" start="00:15:02.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We rebuilt it and let's click the link.""" start="00:15:02.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Now you see, it just opens another tab""" start="00:15:06.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which doesn't do anything useful.""" start="00:15:08.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Cool.""" start="00:15:10.760" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""Why it is important?""" start="00:15:14.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It is important because every time""" start="00:15:15.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you install something and you want to remove it,""" start="00:15:19.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""some parts depending on it can be broken.""" start="00:15:24.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And also important in the other way around.""" start="00:15:29.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Sometimes you want to install something,""" start="00:15:31.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and it requires a few steps.""" start="00:15:34.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""For example, if you want to have""" start="00:15:36.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a docker.el in your Emacs,""" start="00:15:40.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you need not only docker.el itself""" start="00:15:43.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and configuration for it,""" start="00:15:49.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you also need to add your user to the docker group.""" start="00:15:51.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But before it, you need to create this group,""" start="00:15:55.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and you also need to""" start="00:15:59.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""define a system service and run it.""" start="00:16:00.455" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Also you need to install docker package,""" start="00:16:02.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""docker-cli package, and containerd package.""" start="00:16:05.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can forget every of this small step,""" start="00:16:11.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but if it in your declarative configuration""" start="00:16:15.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""in one place, and you just ask""" start="00:16:20.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to enable this feature, each of those steps""" start="00:16:23.589" video="mainVideo-rde" id="subtitle"]]
[[!template text="""will be performed automatically.""" start="00:16:27.822" video="mainVideo-rde" id="subtitle"]]
[[!template text="""If you don't need docker anymore,""" start="00:16:30.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you just disable the feature,""" start="00:16:33.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and all the effect of all those steps""" start="00:16:34.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""will be removed from your system.""" start="00:16:38.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I won't be showing it because it probably will""" start="00:16:42.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""take more time for reconfiguring,""" start="00:16:46.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but you can experiment with it on your own.""" start="00:16:48.920" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""Let's do another interesting thing.""" start="00:16:54.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's construct a small""" start="00:17:00.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Emacs configuration from scratch.""" start="00:17:05.922" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Who's this?""" start="00:17:07.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I will open a file which contains only""" start="00:17:10.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""emacs-portable feature and feature-user-info.""" start="00:17:14.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Now I will build an environment,""" start="00:17:18.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and inside this environment,""" start="00:17:21.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I will launch a new Emacs instance.""" start="00:17:24.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""As you see, it's very different""" start="00:17:26.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""from what you saw previously.""" start="00:17:28.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And it's almost barebones.""" start="00:17:30.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It doesn't contain anything""" start="00:17:32.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""except user-mail-address""" start="00:17:39.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which is set to my mail address,""" start="00:17:41.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and user-full-name.""" start="00:17:45.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""How it works:""" start="00:17:46.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""In feature-user-info, I define a few values.""" start="00:17:50.760" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Those values are obtained by Emacs""" start="00:17:54.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""feature-emacs-portable""" start="00:18:01.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and set inside Emacs configuration.""" start="00:18:03.280" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""But let's enable a few more features.""" start="00:18:07.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I will do it in one go""" start="00:18:12.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""because we already saw how it works overall.""" start="00:18:15.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's build another Emacs with Emacs configuration.""" start="00:18:22.120" video="mainVideo-rde" id="subtitle"]]
[[!template text="""The interesting thing about this Emacs instance""" start="00:18:30.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""is that it doesn't contain anything""" start="00:18:39.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""that I have in my usual Emacs.""" start="00:18:44.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""For example, I don't have much here.""" start="00:18:46.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I don't have make installed, and so on.""" start="00:18:49.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""But we have feature-loader-portable package""" start="00:18:55.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which just requires a few configure packages.""" start="00:19:06.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's move it to a separate workspace.""" start="00:19:09.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""First of all, configure-rde-emacs-portable""" start="00:19:13.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which just sets a few variables.""" start="00:19:21.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""rde configure-keycast which just shows""" start="00:19:23.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""something on the modeline""" start="00:19:27.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which demonstrates the last hotkey pressed""" start="00:19:31.200" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and the command which was invoked.""" start="00:19:34.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We can enable which-key,""" start="00:19:40.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and now when I type a prefix,""" start="00:19:41.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can see all the possible continuations""" start="00:19:45.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""for this prefix.""" start="00:19:48.600" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I can enable vertico,""" start="00:19:49.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and you can see, now we have nice completion UI.""" start="00:19:51.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We can enable completion-related improvements""" start="00:19:58.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and now I have not only UI itself, but also""" start="00:20:03.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""some notes here near each command,""" start="00:20:07.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and ability to use regular expressions""" start="00:20:15.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""or some orderless matching.""" start="00:20:17.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""We can enable eshell,""" start="00:20:21.480" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and now I have a hotkey for invoking Emacs shell.""" start="00:20:26.400" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I don't have hotkey for vterm yet,""" start="00:20:31.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but I can enable it,""" start="00:20:35.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and now I have a terminal inside my Emacs.""" start="00:20:37.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""As you can see my usual shell is Zsh,""" start="00:20:40.800" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but here I have a plain bash.""" start="00:20:43.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's enable feature-git,""" start="00:20:46.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and now I will be able to open my project.""" start="00:20:52.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And inside this project,""" start="00:21:04.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""I will be able to open Magit""" start="00:21:11.489" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and navigate around using imenu.""" start="00:21:14.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's do few more things.""" start="00:21:19.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's enable Org Roam""" start="00:21:26.160" video="mainVideo-rde" id="subtitle"]]
[[!template text="""so I will be able to open my EmacsConf notes.""" start="00:21:29.640" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's enable configure-emacs.""" start="00:21:43.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""As you can see, the way it displayed updated.""" start="00:21:48.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Let's enable configure-appearance,""" start="00:21:53.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and you see the appearance of Emacs changed radically.""" start="00:21:59.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And also, let's change the faces.""" start="00:22:03.880" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And now you see almost my setup""" start="00:22:06.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""that you saw previously,""" start="00:22:13.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but we build it from small tiny pieces.""" start="00:22:14.800" video="mainVideo-rde" id="subtitle"]]
[[!template new="1" text="""A little summary:""" start="00:22:19.000" video="mainVideo-rde" id="subtitle"]]
[[!template text="""rde is the one tool that you can use""" start="00:22:27.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""to manage the whole computing experience.""" start="00:22:32.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""It consists of composable components,""" start="00:22:34.440" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and actually, it provides""" start="00:22:38.080" video="mainVideo-rde" id="subtitle"]]
[[!template text="""a reliable configuration framework.""" start="00:22:41.720" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You always have a rollback.""" start="00:22:43.240" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You always can switch to a generation""" start="00:22:46.360" video="mainVideo-rde" id="subtitle"]]
[[!template text="""you used a week ago.""" start="00:22:49.320" video="mainVideo-rde" id="subtitle"]]
[[!template text="""And of course, it's reproducible and declarative""" start="00:22:50.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which is also very cool.""" start="00:22:57.520" video="mainVideo-rde" id="subtitle"]]
[[!template text="""rde Emacs is a part of rde""" start="00:22:58.680" video="mainVideo-rde" id="subtitle"]]
[[!template text="""but it can be used separately.""" start="00:23:05.789" video="mainVideo-rde" id="subtitle"]]
[[!template text="""You can think of it as an Emacs distribution""" start="00:23:06.920" video="mainVideo-rde" id="subtitle"]]
[[!template text="""which is vanilla-flavored, consistent,""" start="00:23:11.280" video="mainVideo-rde" id="subtitle"]]
[[!template text="""well-integrated, and self-contained.""" start="00:23:14.040" video="mainVideo-rde" id="subtitle"]]
[[!template text="""That's it for today.""" start="00:23:15.960" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Don't hesitate to contact me""" start="00:23:19.560" video="mainVideo-rde" id="subtitle"]]
[[!template text="""via email or any other way.""" start="00:23:22.055" video="mainVideo-rde" id="subtitle"]]
[[!template text="""Thank you everyone for your attention""" start="00:23:23.840" video="mainVideo-rde" id="subtitle"]]
[[!template text="""and see you in a bit.""" start="00:23:28.155" video="mainVideo-rde" id="subtitle"]]



Captioner: sachac

Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20rde%3A%20rde%20Emacs%20introduction)


<!-- End of emacsconf-publish-after-page -->