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.