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.