summaryrefslogtreecommitdiffstats
path: root/2022
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2022-12-04 10:00:49 -0500
committerSacha Chua <sacha@sachachua.com>2022-12-04 10:00:49 -0500
commit51351444dee539df3e9f49fcdb4e041e95e9f234 (patch)
tree303054c84990b75cb8b10692af505c0e83f4390f /2022
parent966e3ee708dbcdcd189d2520ab9d3f67f749903f (diff)
downloademacsconf-wiki-51351444dee539df3e9f49fcdb4e041e95e9f234.tar.xz
emacsconf-wiki-51351444dee539df3e9f49fcdb4e041e95e9f234.zip
Automated commit
Diffstat (limited to '2022')
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt1129
-rw-r--r--2022/info/rde-after.md383
-rw-r--r--2022/info/rde-before.md27
4 files changed, 1575 insertions, 2 deletions
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt
new file mode 100644
index 00000000..dc0c9307
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:52.040
+Introduction
+
+00:00:52.040 --> 00:03:34.840
+The challenge
+
+00:03:34.840 --> 00:05:04.920
+Functional package managers
+
+00:05:04.920 --> 00:07:20.360
+Guix Home
+
+00:07:20.360 --> 00:08:15.520
+rde
+
+00:08:15.520 --> 00:11:37.440
+Vanilla-flavoured
+
+00:11:37.440 --> 00:13:52.520
+Removing features
+
+00:13:52.520 --> 00:15:14.080
+Another example
+
+00:15:14.080 --> 00:16:54.400
+Multiple steps
+
+00:16:54.400 --> 00:18:07.480
+A small Emacs configuration
+
+00:18:07.480 --> 00:22:19.000
+Enabling features
+
+00:22:19.000 --> 00:23:33.760
+Summary
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt
new file mode 100644
index 00000000..99a9e201
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt
@@ -0,0 +1,1129 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:11.480
+Hello and welcome everyone at EmacsConf 2022.
+
+00:00:11.480 --> 00:00:13.400
+I'm Andrew Tropin, and today
+
+00:00:13.400 --> 00:00:16.280
+we will talk about my Emacs setup.
+
+00:00:16.280 --> 00:00:19.360
+I will tell you the story behind it.
+
+00:00:19.360 --> 00:00:23.960
+We will discuss what rde and rde Emacs are,
+
+00:00:23.960 --> 00:00:28.760
+and we'll make a small Emacs configuration.
+
+00:00:28.760 --> 00:00:30.920
+My original motivation was to have
+
+00:00:30.920 --> 00:00:34.000
+a ready for work development environment
+
+00:00:34.000 --> 00:00:36.640
+which is reliable and guaranteed to work
+
+00:00:36.640 --> 00:00:37.840
+every time I need it,
+
+00:00:37.840 --> 00:00:42.680
+preferably performant and consistent.
+
+00:00:42.680 --> 00:00:44.160
+I say development environment,
+
+00:00:44.160 --> 00:00:45.720
+but it actually applies to
+
+00:00:45.720 --> 00:00:47.600
+many other working environment,
+
+00:00:47.600 --> 00:00:52.040
+especially text-heavy.
+
+00:00:52.040 --> 00:00:54.040
+An easy and obvious solution is to
+
+00:00:54.040 --> 00:00:57.640
+pick one of existing configuration frameworks
+
+00:00:57.640 --> 00:01:00.760
+like Spacemacs, Doom Emacs, Prelude,
+
+00:01:00.760 --> 00:01:02.520
+or something else,
+
+00:01:02.520 --> 00:01:05.040
+and to get a pre-configured Emacs
+
+00:01:05.040 --> 00:01:09.040
+in a minute with all bells and whistles.
+
+00:01:09.040 --> 00:01:12.480
+But the problem is: only Emacs.
+
+00:01:12.480 --> 00:01:16.400
+In reality, your working environment consists
+
+00:01:16.400 --> 00:01:18.680
+not only from elisp packages,
+
+00:01:18.680 --> 00:01:21.360
+but also from system packages
+
+00:01:21.360 --> 00:01:23.320
+and their configurations, project libraries,
+
+00:01:23.320 --> 00:01:27.080
+compilers, building tools, etc.,
+
+00:01:27.080 --> 00:01:31.600
+and thus you already have at least
+
+00:01:31.600 --> 00:01:34.880
+three, or more likely, five things
+
+00:01:34.880 --> 00:01:37.120
+for managing your environment:
+
+00:01:37.120 --> 00:01:39.640
+configuration, Emacs configuration framework,
+
+00:01:39.640 --> 00:01:42.880
+Emacs package manager, system package manager,
+
+00:01:42.880 --> 00:01:46.600
+system/dot files configuration manager,
+
+00:01:46.600 --> 00:01:49.080
+project/language package manager
+
+00:01:49.080 --> 00:01:51.800
+and maybe something else.
+
+00:01:51.800 --> 00:01:56.360
+Even having our Emacs configuration
+
+00:01:56.360 --> 00:01:59.800
+and package manager covered by framework
+
+00:01:59.800 --> 00:02:02.080
+we still have a lot of things
+
+00:02:02.080 --> 00:02:04.240
+which we have to interact with,
+
+00:02:04.240 --> 00:02:08.640
+keep in sync, and more importantly,
+
+00:02:08.640 --> 00:02:12.480
+each of them can break.
+
+00:02:12.480 --> 00:02:17.320
+But by "works every time," I mean
+
+00:02:17.320 --> 00:02:19.560
+even if I updated my system packages,
+
+00:02:19.560 --> 00:02:23.880
+configurations, I migrated to a different machine,
+
+00:02:23.880 --> 00:02:29.120
+someone on my team updated project dependencies,
+
+00:02:29.120 --> 00:02:31.960
+I can get back to work in a matter of seconds,
+
+00:02:31.960 --> 00:02:39.040
+or maybe in some cases, minutes.
+
+00:02:39.040 --> 00:02:40.400
+If I have multiple tools
+
+00:02:40.400 --> 00:02:43.720
+for managing my environment
+
+00:02:43.720 --> 00:02:45.720
+and even one of them is broken,
+
+00:02:45.720 --> 00:02:48.360
+the whole setup is broken.
+
+00:02:48.360 --> 00:02:51.080
+Also, if one of them doesn't support
+
+00:02:51.080 --> 00:02:53.560
+deterministic rollback,
+
+00:02:53.560 --> 00:02:58.200
+I can't guarantee the reliability
+
+00:02:58.200 --> 00:02:59.200
+of my working environment.
+
+00:02:59.200 --> 00:03:01.360
+I can't be sure that I will be able to
+
+00:03:01.360 --> 00:03:02.800
+rescue or revive it.
+
+00:03:02.800 --> 00:03:06.760
+The less points of failure we have,
+
+00:03:06.760 --> 00:03:09.720
+the easier to stay sane.
+
+00:03:09.720 --> 00:03:13.080
+Imagine some late breakage notice
+
+00:03:13.080 --> 00:03:17.880
+when you did update a few hours or days ago
+
+00:03:17.880 --> 00:03:20.920
+and found it later, and you have
+
+00:03:20.920 --> 00:03:25.320
+a few different tools involved.
+
+00:03:25.320 --> 00:03:28.280
+It will be really hard to find the cause
+
+00:03:28.280 --> 00:03:34.840
+and to make everything work again.
+
+00:03:34.840 --> 00:03:37.880
+Is it possible to have one tool
+
+00:03:37.880 --> 00:03:44.360
+to cover all the needs I described above?
+
+00:03:44.360 --> 00:03:48.520
+Yes, almost. With this tool,
+
+00:03:48.520 --> 00:03:50.320
+you can get a reliable setup.
+
+00:03:50.320 --> 00:03:57.400
+Now, I talk about functional package managers.
+
+00:03:57.400 --> 00:04:00.680
+Functional package managers allow us to
+
+00:04:00.680 --> 00:04:03.720
+manage systems, users, Emacs, project/
+
+00:04:03.720 --> 00:04:07.560
+language packages, and their configurations.
+
+00:04:07.560 --> 00:04:10.880
+But more importantly, it allows to do it
+
+00:04:10.880 --> 00:04:13.200
+in a declarative and reproducible manner.
+
+00:04:13.200 --> 00:04:16.840
+That means you just define what you need,
+
+00:04:16.840 --> 00:04:19.680
+and those tools build it for you.
+
+00:04:19.680 --> 00:04:24.320
+No matter what was before, you get what you asked for.
+
+00:04:24.320 --> 00:04:26.200
+It doesn't matter what time of day,
+
+00:04:26.200 --> 00:04:29.640
+what you did before, what other packages
+
+00:04:29.640 --> 00:04:31.680
+you have installed previously.
+
+00:04:31.680 --> 00:04:34.440
+You just ask for something, and you get it.
+
+00:04:34.440 --> 00:04:41.440
+Two years ago, I did a talk at EmacsConf 2020
+
+00:04:41.440 --> 00:04:43.840
+where I demonstrated a prototype of
+
+00:04:43.840 --> 00:04:47.480
+Emacs configuration managed by Nix.
+
+00:04:47.480 --> 00:04:50.480
+Originally, I wanted to base my work on
+
+00:04:50.480 --> 00:04:56.160
+an already existing Emacs configuration framework.
+
+00:04:56.160 --> 00:05:01.360
+But later, I decided that it will be easier
+
+00:05:01.360 --> 00:05:02.440
+and a little more flexible
+
+00:05:02.440 --> 00:05:04.920
+to start from ground up.
+
+00:05:04.920 --> 00:05:06.960
+After the first prototype in Nix,
+
+00:05:06.960 --> 00:05:12.120
+I decided to switch to Guix. To make it short,
+
+00:05:12.120 --> 00:05:14.600
+Guix is another functional package manager,
+
+00:05:14.600 --> 00:05:21.840
+but more freedom- and reproducibility-oriented,
+
+00:05:21.840 --> 00:05:24.200
+and written in only one language (Guile Scheme)
+
+00:05:24.200 --> 00:05:29.880
+instead of few custom-made Nix DSL, Bash, and C++.
+
+00:05:29.880 --> 00:05:34.240
+So now I can write Lisp code, while this code
+
+00:05:34.240 --> 00:05:37.040
+writes another Lisp code. Very neat indeed.
+
+00:05:37.040 --> 00:05:42.760
+Unfortunately, at the moment, there was no tool
+
+00:05:42.760 --> 00:05:45.400
+to manage user configurations,
+
+00:05:45.400 --> 00:05:48.400
+also known as dotfiles, with Guix.
+
+00:05:48.400 --> 00:05:52.680
+So I wrote one. And now it's a part of GNU Guix
+
+00:05:52.680 --> 00:05:54.160
+and called Guix Home.
+
+00:05:54.160 --> 00:05:58.840
+What do we get from this one tool?
+
+00:05:58.840 --> 00:06:05.240
+We can use one language to describe the whole system,
+
+00:06:05.240 --> 00:06:09.080
+the home environment, the project environment,
+
+00:06:09.080 --> 00:06:10.240
+and everything else.
+
+00:06:10.240 --> 00:06:13.000
+We don't need to worry about
+
+00:06:13.000 --> 00:06:17.000
+to keep different tools in sync
+
+00:06:17.000 --> 00:06:19.760
+and to integrate them between each other.
+
+00:06:19.760 --> 00:06:23.080
+Also, using one language to describe
+
+00:06:23.080 --> 00:06:25.440
+the whole configuration makes it possible
+
+00:06:25.440 --> 00:06:28.640
+to share values between different parts of the system.
+
+00:06:28.640 --> 00:06:32.920
+For example, color scheme, fonts, and much more.
+
+00:06:32.920 --> 00:06:39.440
+To sum up the first part of the talk:
+
+00:06:39.440 --> 00:06:43.320
+I want a working environment which is ready for work,
+
+00:06:43.320 --> 00:06:47.960
+configured in minutes to almost what I want.
+
+00:06:47.960 --> 00:06:50.800
+That means it should have some batteries included.
+
+00:06:50.800 --> 00:06:52.000
+It should be reliable.
+
+00:06:52.000 --> 00:06:54.840
+I want to get back to work in seconds
+
+00:06:54.840 --> 00:06:56.160
+even if I broke something
+
+00:06:56.160 --> 00:06:58.200
+or someone else broke something.
+
+00:06:58.200 --> 00:07:03.560
+For example, using rollbacks.
+
+00:07:03.560 --> 00:07:07.320
+It would be nice if it will be performant.
+
+00:07:07.320 --> 00:07:08.640
+It's a little subjective thing,
+
+00:07:08.640 --> 00:07:12.360
+but it's nice when things are snappy.
+
+00:07:12.360 --> 00:07:16.160
+And it's cool when things are consistent.
+
+00:07:16.160 --> 00:07:17.800
+Different interfaces have
+
+00:07:17.800 --> 00:07:20.360
+the same way of interactions with them.
+
+00:07:20.360 --> 00:07:25.920
+Let's get to the next part,
+
+00:07:25.920 --> 00:07:29.120
+and let's discuss what rde is.
+
+00:07:29.120 --> 00:07:33.360
+Originally it was my dotfiles repo,
+
+00:07:33.360 --> 00:07:35.720
+but it grew into something bigger.
+
+00:07:35.720 --> 00:07:39.320
+Now, it's a set of tools on top of
+
+00:07:39.320 --> 00:07:41.680
+GNU Guix, Guix System, and Guix Home.
+
+00:07:41.680 --> 00:07:45.800
+You can treat it as a GNU/Linux distribution,
+
+00:07:45.800 --> 00:07:48.720
+system and home environment manager
+
+00:07:48.720 --> 00:07:50.880
+or configuration framework,
+
+00:07:50.880 --> 00:07:52.920
+project environment manager
+
+00:07:52.920 --> 00:07:55.160
+(like virtualenv, but on steroids),
+
+00:07:55.160 --> 00:07:58.200
+and Emacs distribution.
+
+00:07:58.200 --> 00:08:02.840
+Usually, you just pick a few features,
+
+00:08:02.840 --> 00:08:05.654
+parameterize them and ask the tool
+
+00:08:05.655 --> 00:08:08.120
+to create an operating system for you,
+
+00:08:08.120 --> 00:08:10.280
+a home environment, project environment,
+
+00:08:10.280 --> 00:08:11.560
+or Emacs configuration.
+
+00:08:11.560 --> 00:08:15.520
+That's it. That's simple.
+
+00:08:15.520 --> 00:08:22.080
+And what rde Emacs is and how it tastes...
+
+00:08:22.080 --> 00:08:26.360
+It's like an ice cream, vanilla-flavored.
+
+00:08:26.360 --> 00:08:30.880
+No fancy macros for configuration, just plain Elisp.
+
+00:08:30.880 --> 00:08:34.954
+You can find in almost every
+
+00:08:34.955 --> 00:08:36.480
+personal Emacs configuration,
+
+00:08:36.480 --> 00:08:42.640
+built-in or vanilla-flavored packages
+
+00:08:42.640 --> 00:08:45.588
+are in priority over external
+
+00:08:45.589 --> 00:08:46.760
+or very fancy packages.
+
+00:08:46.760 --> 00:08:52.200
+There is practical reason for this.
+
+00:08:52.200 --> 00:08:55.454
+Maybe sometimes you don't get the things
+
+00:08:55.455 --> 00:08:57.720
+you're used to in other text editors,
+
+00:08:57.720 --> 00:09:01.920
+or maybe even in other Emacs frameworks,
+
+00:09:01.920 --> 00:09:05.880
+but we want to keep the final result consistent,
+
+00:09:05.880 --> 00:09:08.720
+so you can apply the same interaction patterns
+
+00:09:08.720 --> 00:09:13.480
+in different situations and extend your expectations
+
+00:09:13.480 --> 00:09:15.000
+from one tool to another,
+
+00:09:15.000 --> 00:09:16.560
+from one package to another.
+
+00:09:16.560 --> 00:09:19.400
+For example, we encourage people
+
+00:09:19.400 --> 00:09:22.600
+to use the minibuffer completion
+
+00:09:22.600 --> 00:09:26.720
+with orderless and vertico for many tasks:
+
+00:09:26.720 --> 00:09:30.680
+code navigation, file navigation,
+
+00:09:30.680 --> 00:09:32.120
+looking through your emails,
+
+00:09:32.120 --> 00:09:35.160
+or just for jumping around.
+
+00:09:35.160 --> 00:09:36.320
+Let's see.
+
+00:09:36.320 --> 00:09:39.480
+First, create a new Emacs instance
+
+00:09:39.480 --> 00:09:45.280
+and open a repository with my configuration.
+
+00:09:45.280 --> 00:09:54.040
+You can see the source code.
+
+00:09:54.040 --> 00:09:58.760
+Let's open another file which contains
+
+00:09:58.760 --> 00:09:59.960
+Emacs-related features.
+
+00:09:59.960 --> 00:10:02.280
+You can see I use imenu,
+
+00:10:02.280 --> 00:10:08.360
+and I can filter the list using minibuffer.
+
+00:10:08.360 --> 00:10:16.600
+Now let's open the Magit interface,
+
+00:10:16.600 --> 00:10:18.920
+and now I want to navigate through
+
+00:10:18.920 --> 00:10:22.240
+this long list of things here.
+
+00:10:22.240 --> 00:10:25.560
+Some of them staged. Some of them are recent commits.
+
+00:10:25.560 --> 00:10:28.400
+Some of them are untracked at all.
+
+00:10:28.400 --> 00:10:31.040
+I can open imenu: the same interface,
+
+00:10:31.040 --> 00:10:34.640
+but for now, I can navigate around
+
+00:10:34.640 --> 00:10:41.320
+the Magit sections and files which are present here.
+
+00:10:41.320 --> 00:10:45.120
+If I want to navigate project files,
+
+00:10:45.120 --> 00:10:47.520
+I use almost the same interface.
+
+00:10:47.520 --> 00:10:51.720
+I can use the same patterns to filter out
+
+00:10:51.720 --> 00:11:00.400
+files in my project or items in magit-imenu.
+
+00:11:00.400 --> 00:11:07.720
+Very similar and very consistent.
+
+00:11:07.720 --> 00:11:11.920
+Also, we try to have hotkeys consistent
+
+00:11:11.920 --> 00:11:16.680
+across different packages and parts of Emacs.
+
+00:11:16.680 --> 00:11:21.720
+We usually don't provide alternatives on what to use.
+
+00:11:21.720 --> 00:11:25.520
+We provide only one package for one task.
+
+00:11:25.520 --> 00:11:28.154
+But of course this is
+
+00:11:28.155 --> 00:11:29.880
+a configuration framework after all.
+
+00:11:29.880 --> 00:11:32.800
+You can declare your own features,
+
+00:11:32.800 --> 00:11:35.788
+implement them yourself,
+
+00:11:35.789 --> 00:11:37.440
+and use whatever you want.
+
+00:11:37.440 --> 00:11:45.240
+Let's get to some real-world examples.
+
+00:11:45.240 --> 00:11:48.221
+It's always easy to show
+
+00:11:48.222 --> 00:11:50.200
+how things get appended,
+
+00:11:50.200 --> 00:11:51.760
+how things get installed,
+
+00:11:51.760 --> 00:11:55.288
+but usually people don't show
+
+00:11:55.289 --> 00:11:56.360
+how they remove things,
+
+00:11:56.360 --> 00:11:58.800
+because it's usually painful.
+
+00:11:58.800 --> 00:12:02.120
+But in our case, it's not.
+
+00:12:02.120 --> 00:12:10.840
+Let's take my configuration,
+
+00:12:10.840 --> 00:12:12.960
+let's find feature-emacs-vertico.
+
+00:12:12.960 --> 00:12:19.821
+Vertico's just used to show
+
+00:12:19.822 --> 00:12:25.880
+this fancy completion UI
+
+00:12:25.880 --> 00:12:27.400
+that you can see here.
+
+00:12:27.400 --> 00:12:30.960
+If I disable this feature
+
+00:12:30.960 --> 00:12:43.080
+and rebuild my home environment,
+
+00:12:43.080 --> 00:12:46.360
+Emacs will lack this feature.
+
+00:12:46.360 --> 00:12:55.400
+It may take some time. It was quite fast,
+
+00:12:55.400 --> 00:13:00.400
+I didn't expect it.
+
+00:13:00.400 --> 00:13:02.880
+I have Emacs. As you can see here,
+
+00:13:02.880 --> 00:13:06.280
+now it doesn't have this completion UI anymore.
+
+00:13:06.280 --> 00:13:09.280
+I just commented it out,
+
+00:13:09.280 --> 00:13:13.320
+rebuilt my home environment,
+
+00:13:13.320 --> 00:13:15.600
+and this thing disappeared from Emacs.
+
+00:13:15.600 --> 00:13:19.960
+But what if I broke something?
+
+00:13:19.960 --> 00:13:28.440
+I just call guix home roll-back command
+
+00:13:28.440 --> 00:13:31.200
+and launch Emacs again, and you see
+
+00:13:31.200 --> 00:13:32.800
+now we have vertico back.
+
+00:13:32.800 --> 00:13:36.080
+Very good.
+
+00:13:36.080 --> 00:13:41.280
+Reliability is one of the most important qualities
+
+00:13:41.280 --> 00:13:43.920
+of working environment.
+
+00:13:43.920 --> 00:13:46.400
+We can always get back to
+
+00:13:46.400 --> 00:13:48.440
+the working state of our environment
+
+00:13:48.440 --> 00:13:52.520
+and be sure that we do the things we want.
+
+00:13:52.520 --> 00:13:57.720
+Now let's see another example.
+
+00:13:57.720 --> 00:13:59.960
+Here I have a mastodon,
+
+00:13:59.960 --> 00:14:03.600
+a post which contains a gemini link.
+
+00:14:03.600 --> 00:14:11.560
+I can click it, and you see it opens emacsclient,
+
+00:14:11.560 --> 00:14:14.480
+it renders this gemini capsule,
+
+00:14:14.480 --> 00:14:17.800
+and we can read all the posts of this guy.
+
+00:14:17.800 --> 00:14:21.000
+Very cool.
+
+00:14:21.000 --> 00:14:26.760
+But what if I go back to my configuration,
+
+00:14:26.760 --> 00:14:32.400
+we'll find a feature related to elpher,
+
+00:14:32.400 --> 00:14:36.080
+the application which handles gemini links,
+
+00:14:36.080 --> 00:14:38.320
+we'll comment it out,
+
+00:14:38.320 --> 00:14:41.720
+and we'll rebuild my home environment.
+
+00:14:41.720 --> 00:14:47.120
+What I expect here is that
+
+00:14:47.120 --> 00:14:48.440
+when I will be clicking the link,
+
+00:14:48.440 --> 00:15:02.320
+emacsclient won't pop up anymore.
+
+00:15:02.320 --> 00:15:02.720
+Cool.
+
+00:15:02.720 --> 00:15:06.600
+We rebuilt it and let's click the link.
+
+00:15:06.600 --> 00:15:08.360
+Now you see, it just opens another tab
+
+00:15:08.360 --> 00:15:10.760
+which doesn't do anything useful.
+
+00:15:10.760 --> 00:15:14.080
+Cool.
+
+00:15:14.080 --> 00:15:15.520
+Why it is important?
+
+00:15:15.520 --> 00:15:19.640
+It is important because every time
+
+00:15:19.640 --> 00:15:24.640
+you install something and you want to remove it,
+
+00:15:24.640 --> 00:15:29.320
+some parts depending on it can be broken.
+
+00:15:29.320 --> 00:15:31.840
+And also important in the other way around.
+
+00:15:31.840 --> 00:15:34.920
+Sometimes you want to install something,
+
+00:15:34.920 --> 00:15:36.640
+and it requires a few steps.
+
+00:15:36.640 --> 00:15:40.600
+For example, if you want to have
+
+00:15:40.600 --> 00:15:43.160
+a docker.el in your Emacs,
+
+00:15:43.160 --> 00:15:49.080
+you need not only docker.el itself
+
+00:15:49.080 --> 00:15:51.360
+and configuration for it,
+
+00:15:51.360 --> 00:15:55.240
+you also need to add your user to the docker group.
+
+00:15:55.240 --> 00:15:59.000
+But before it, you need to create this group,
+
+00:15:59.000 --> 00:16:00.454
+and you also need to
+
+00:16:00.455 --> 00:16:02.800
+define a system service and run it.
+
+00:16:02.800 --> 00:16:05.800
+Also you need to install docker package,
+
+00:16:05.800 --> 00:16:11.640
+docker-cli package, and containerd package.
+
+00:16:11.640 --> 00:16:15.440
+You can forget every of this small step,
+
+00:16:15.440 --> 00:16:20.480
+but if it in your declarative configuration
+
+00:16:20.480 --> 00:16:23.588
+in one place, and you just ask
+
+00:16:23.589 --> 00:16:27.821
+to enable this feature, each of those steps
+
+00:16:27.822 --> 00:16:30.880
+will be performed automatically.
+
+00:16:30.880 --> 00:16:33.200
+If you don't need docker anymore,
+
+00:16:33.200 --> 00:16:34.840
+you just disable the feature,
+
+00:16:34.840 --> 00:16:38.480
+and all the effect of all those steps
+
+00:16:38.480 --> 00:16:42.840
+will be removed from your system.
+
+00:16:42.840 --> 00:16:46.640
+I won't be showing it because it probably will
+
+00:16:46.640 --> 00:16:48.920
+take more time for reconfiguring,
+
+00:16:48.920 --> 00:16:54.400
+but you can experiment with it on your own.
+
+00:16:54.400 --> 00:17:00.840
+Let's do another interesting thing.
+
+00:17:00.840 --> 00:17:05.921
+Let's construct a small
+
+00:17:05.922 --> 00:17:07.720
+Emacs configuration from scratch.
+
+00:17:07.720 --> 00:17:10.920
+Who's this?
+
+00:17:10.920 --> 00:17:14.240
+I will open a file which contains only
+
+00:17:14.240 --> 00:17:18.720
+emacs-portable feature and feature-user-info.
+
+00:17:18.720 --> 00:17:21.120
+Now I will build an environment,
+
+00:17:21.120 --> 00:17:24.480
+and inside this environment,
+
+00:17:24.480 --> 00:17:26.640
+I will launch a new Emacs instance.
+
+00:17:26.640 --> 00:17:28.800
+As you see, it's very different
+
+00:17:28.800 --> 00:17:30.440
+from what you saw previously.
+
+00:17:30.440 --> 00:17:32.120
+And it's almost barebones.
+
+00:17:32.120 --> 00:17:39.520
+It doesn't contain anything
+
+00:17:39.520 --> 00:17:41.760
+except user-mail-address
+
+00:17:41.760 --> 00:17:45.080
+which is set to my mail address,
+
+00:17:45.080 --> 00:17:46.880
+and user-full-name.
+
+00:17:46.880 --> 00:17:50.760
+How it works:
+
+00:17:50.760 --> 00:17:54.000
+In feature-user-info, I define a few values.
+
+00:17:54.000 --> 00:18:01.120
+Those values are obtained by Emacs
+
+00:18:01.120 --> 00:18:03.280
+feature-emacs-portable
+
+00:18:03.280 --> 00:18:07.480
+and set inside Emacs configuration.
+
+00:18:07.480 --> 00:18:12.840
+But let's enable a few more features.
+
+00:18:12.840 --> 00:18:15.400
+I will do it in one go
+
+00:18:15.400 --> 00:18:22.120
+because we already saw how it works overall.
+
+00:18:22.120 --> 00:18:30.160
+Let's build another Emacs with Emacs configuration.
+
+00:18:30.160 --> 00:18:39.280
+The interesting thing about this Emacs instance
+
+00:18:39.280 --> 00:18:44.560
+is that it doesn't contain anything
+
+00:18:44.560 --> 00:18:46.520
+that I have in my usual Emacs.
+
+00:18:46.520 --> 00:18:49.360
+For example, I don't have much here.
+
+00:18:49.360 --> 00:18:55.040
+I don't have make installed, and so on.
+
+00:18:55.040 --> 00:19:06.640
+But we have feature-loader-portable package
+
+00:19:06.640 --> 00:19:09.960
+which just requires a few configure packages.
+
+00:19:09.960 --> 00:19:13.320
+Let's move it to a separate workspace.
+
+00:19:13.320 --> 00:19:21.680
+First of all, configure-rde-emacs-portable
+
+00:19:21.680 --> 00:19:23.720
+which just sets a few variables.
+
+00:19:23.720 --> 00:19:27.280
+rde configure-keycast which just shows
+
+00:19:27.280 --> 00:19:31.200
+something on the modeline
+
+00:19:31.200 --> 00:19:34.440
+which demonstrates the last hotkey pressed
+
+00:19:34.440 --> 00:19:40.080
+and the command which was invoked.
+
+00:19:40.080 --> 00:19:41.640
+We can enable which-key,
+
+00:19:41.640 --> 00:19:45.040
+and now when I type a prefix,
+
+00:19:45.040 --> 00:19:48.600
+I can see all the possible continuations
+
+00:19:48.600 --> 00:19:49.360
+for this prefix.
+
+00:19:49.360 --> 00:19:51.880
+I can enable vertico,
+
+00:19:51.880 --> 00:19:58.160
+and you can see, now we have nice completion UI.
+
+00:19:58.160 --> 00:20:03.560
+We can enable completion-related improvements
+
+00:20:03.560 --> 00:20:07.560
+and now I have not only UI itself, but also
+
+00:20:07.560 --> 00:20:15.320
+some notes here near each command,
+
+00:20:15.320 --> 00:20:17.800
+and ability to use regular expressions
+
+00:20:17.800 --> 00:20:21.480
+or some orderless matching.
+
+00:20:21.480 --> 00:20:26.400
+We can enable eshell,
+
+00:20:26.400 --> 00:20:31.320
+and now I have a hotkey for invoking Emacs shell.
+
+00:20:31.320 --> 00:20:35.920
+I don't have hotkey for vterm yet,
+
+00:20:35.920 --> 00:20:37.360
+but I can enable it,
+
+00:20:37.360 --> 00:20:40.800
+and now I have a terminal inside my Emacs.
+
+00:20:40.800 --> 00:20:43.240
+As you can see my usual shell is Zsh,
+
+00:20:43.240 --> 00:20:46.040
+but here I have a plain bash.
+
+00:20:46.040 --> 00:20:52.280
+Let's enable feature-git,
+
+00:20:52.280 --> 00:21:04.720
+and now I will be able to open my project.
+
+00:21:04.720 --> 00:21:11.488
+And inside this project,
+
+00:21:11.489 --> 00:21:14.640
+I will be able to open Magit
+
+00:21:14.640 --> 00:21:19.880
+and navigate around using imenu.
+
+00:21:19.880 --> 00:21:26.160
+Let's do few more things.
+
+00:21:26.160 --> 00:21:29.640
+Let's enable Org Roam
+
+00:21:29.640 --> 00:21:43.840
+so I will be able to open my EmacsConf notes.
+
+00:21:43.840 --> 00:21:48.240
+Let's enable configure-emacs.
+
+00:21:48.240 --> 00:21:53.320
+As you can see, the way it displayed updated.
+
+00:21:53.320 --> 00:21:59.520
+Let's enable configure-appearance,
+
+00:21:59.520 --> 00:22:03.880
+and you see the appearance of Emacs changed radically.
+
+00:22:03.880 --> 00:22:06.560
+And also, let's change the faces.
+
+00:22:06.560 --> 00:22:13.040
+And now you see almost my setup
+
+00:22:13.040 --> 00:22:14.800
+that you saw previously,
+
+00:22:14.800 --> 00:22:19.000
+but we build it from small tiny pieces.
+
+00:22:19.000 --> 00:22:27.520
+A little summary:
+
+00:22:27.520 --> 00:22:32.280
+rde is the one tool that you can use
+
+00:22:32.280 --> 00:22:34.440
+to manage the whole computing experience.
+
+00:22:34.440 --> 00:22:38.080
+It consists of composable components,
+
+00:22:38.080 --> 00:22:41.720
+and actually, it provides
+
+00:22:41.720 --> 00:22:43.240
+a reliable configuration framework.
+
+00:22:43.240 --> 00:22:46.360
+You always have a rollback.
+
+00:22:46.360 --> 00:22:49.320
+You always can switch to a generation
+
+00:22:49.320 --> 00:22:50.560
+you used a week ago.
+
+00:22:50.560 --> 00:22:57.520
+And of course, it's reproducible and declarative
+
+00:22:57.520 --> 00:22:58.680
+which is also very cool.
+
+00:22:58.680 --> 00:23:05.788
+rde Emacs is a part of rde
+
+00:23:05.789 --> 00:23:06.920
+but it can be used separately.
+
+00:23:06.920 --> 00:23:11.280
+You can think of it as an Emacs distribution
+
+00:23:11.280 --> 00:23:14.040
+which is vanilla-flavored, consistent,
+
+00:23:14.040 --> 00:23:15.960
+well-integrated, and self-contained.
+
+00:23:15.960 --> 00:23:19.560
+That's it for today.
+
+00:23:19.560 --> 00:23:22.054
+Don't hesitate to contact me
+
+00:23:22.055 --> 00:23:23.840
+via email or any other way.
+
+00:23:23.840 --> 00:23:28.154
+Thank you everyone for your attention
+
+00:23:28.155 --> 00:23:33.760
+and see you in a bit.
diff --git a/2022/info/rde-after.md b/2022/info/rde-after.md
index 2b494905..ee096fc3 100644
--- a/2022/info/rde-after.md
+++ b/2022/info/rde-after.md
@@ -1,6 +1,389 @@
<!-- 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)
diff --git a/2022/info/rde-before.md b/2022/info/rde-before.md
index 51f733a6..38a54577 100644
--- a/2022/info/rde-before.md
+++ b/2022/info/rde-before.md
@@ -3,16 +3,39 @@ In this talk, Andrew Tropin will demonstrate how to use rde Emacs for reproducib
The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="rde">
-<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:55-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="86" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect stroke-width="3" x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:15 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(397,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect stroke-width="3" x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
</div>
[[!toc ]]
Format: 24-min talk followed by live Q&A (<https://emacsconf.org/current/rde/room>)
Etherpad: <https://pad.emacsconf.org/2022-rde>
Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
-Status: Talk captioned
+Status: Now playing on the conference livestream
<div>Times in different timezones:</div><div class="times" start="2022-12-04T15:00:00Z" end="2022-12-04T15:25:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~10:00 AM - 10:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~9:00 AM - 9:25 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~8:00 AM - 8:25 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~7:00 AM - 7:25 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~3:00 PM - 3:25 PM UTC <br />Sunday, Dec 4 2022, ~4:00 PM - 4:25 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~5:00 PM - 5:25 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~8:30 PM - 8:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~11:00 PM - 11:25 PM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~12:00 AM - 12:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+[[!template id="vid" vidid="rde-mainVideo" src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.webm" poster="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt" default />"""
+size="278M" duration="23:34" other_resources="""[Download --main.webm (278MB)](https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.webm)
+[Download --main.org](https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.org)
+[Download --main.vtt](https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt)
+[View transcript](https://emacsconf.org/2022/talks/rde#rde-mainVideo-transcript)
+[View on Toobnix](https://toobnix.org/w/iPos3hVhMrPsnyJskzSkY9)
+"""]]
+[[!template id="chapters" vidid="rde-mainVideo" data="""
+00:00:00.000 Introduction
+00:52.040 The challenge
+03:34.840 Functional package managers
+05:04.920 Guix Home
+07:20.360 rde
+08:15.520 Vanilla-flavoured
+11:37.440 Removing features
+13:52.520 Another example
+15:14.080 Multiple steps
+16:54.400 A small Emacs configuration
+18:07.480 Enabling features
+22:19.000 Summary
+
+"""]]
# Description