WEBVTT
00:00.950 --> 00:03.225
Hello, my name is Dhavan,
00:03.225 --> 00:05.500
also known as codingquark!
00:05.500 --> 00:08.041
I started out learning Emacs
00:08.041 --> 00:12.540
without knowing I had to plug things in
00:12.540 --> 00:13.629
to make it work.
00:13.629 --> 00:14.849
Eventually I had to learn to set up ELPA.
00:14.849 --> 00:16.850
Since then I’ve used MELPA
00:16.850 --> 00:21.030
and Debian apt sources.
00:21.030 --> 00:21.054
Recent discussions about ELPA,
00:21.054 --> 00:21.054
NonGNU ELPA, MELPA, etc.
00:21.054 --> 00:21.054
made me reconsider
00:21.054 --> 00:21.054
what I was doing
00:21.054 --> 00:28.590
with my Emacs.
00:28.590 --> 00:30.887
I am not the kind of person
00:30.887 --> 00:34.290
to mindlessly ram things into my emacs.
00:34.290 --> 00:36.041
I like to ponder,
00:36.041 --> 00:37.500
to understand,
00:37.500 --> 00:40.128
to have a level of control
00:40.128 --> 00:42.069
and mindfulness
00:42.069 --> 00:43.890
about my Emacs.
00:43.890 --> 00:45.730
It is not just a matter
00:45.730 --> 00:47.340
of trying things out,
00:47.340 --> 00:50.909
it is about living an examined life
00:50.909 --> 00:53.387
as the Greeks would say;
00:53.387 --> 00:57.040
or sutta as Buddhists would say.
00:57.040 --> 00:59.860
Such an Emacs is an Emacs worth having.
00:59.860 --> 01:01.414
This pursuit of mine
01:01.414 --> 01:03.710
brought me to learn about borg.
01:03.710 --> 01:05.595
And I am going to share with you
01:05.595 --> 01:06.479
how to use it.
01:06.479 --> 01:09.018
I believe the approach of using borg
01:09.018 --> 01:10.597
for package management
01:10.597 --> 01:12.710
is not for everyone.
01:12.710 --> 01:14.307
It involves knowing git,
01:14.307 --> 01:16.648
it involves looking into source code
01:16.648 --> 01:18.229
and reading makefiles.
01:18.229 --> 01:20.170
Sure, anyone can learn
01:20.170 --> 01:22.617
should they be motivated so,
01:22.617 --> 01:25.740
but people have different priorities.
01:25.740 --> 01:29.056
This is what is working for me right now.
01:29.056 --> 01:32.826
Here is what we are going to do.
01:32.826 --> 01:35.696
We'll set up Debian, install dependencies,
01:35.696 --> 01:39.032
set up borg, install a package,
01:39.032 --> 01:42.090
and make sure it installs all the docs.
01:42.090 --> 01:47.240
Let’s get started!
01:47.240 --> 01:48.342
Would it not be amazing
01:48.342 --> 01:49.560
if we could start out with
01:49.560 --> 01:52.399
just Debian and basic tools?
01:52.399 --> 01:54.848
For borg, we need git,
01:54.848 --> 01:55.916
build-essential,
01:55.916 --> 01:57.384
and something to build docs.
01:57.384 --> 02:00.499
Nothing more!
02:00.499 --> 02:04.658
Now that we have the OS setup,
02:04.658 --> 02:06.226
it is time to clone
02:06.226 --> 02:09.429
what is called a “seed”.
02:09.429 --> 02:11.431
A seed will speed our process up
02:11.431 --> 02:13.379
by providing things like
02:13.379 --> 02:15.500
magit, epkg, auto-compile, etc.
02:15.500 --> 02:20.430
We will soon be using epkg and magit.
02:20.430 --> 02:22.642
The docs cover how to start
02:22.642 --> 02:23.477
without a seed,
02:23.477 --> 02:25.779
but for the purposes of a short demo,
02:25.779 --> 02:27.770
seeds are better.
02:27.770 --> 02:28.682
I started with a seed
02:28.682 --> 02:30.083
for my own dot emacs.
02:30.083 --> 02:32.890
It is fairly slim.
02:32.890 --> 02:33.854
As you can see,
02:33.854 --> 02:35.088
borg uses git URLs
02:35.088 --> 02:37.290
and /not/ HTTPS URLs.
02:37.290 --> 02:38.992
Make sure you have your ssh keys
02:38.992 --> 02:43.989
set up on GitHub, GitLab, etc.
02:43.989 --> 02:45.899
Bootstrapping is like cloning a dot emacs,
02:45.899 --> 02:47.310
but it only comes with a
02:47.310 --> 02:51.400
useful dot git submodules file.
02:51.400 --> 02:54.841
We get a Makefile that has targets
02:54.841 --> 02:57.739
like help and bootstrap-borg.
02:57.739 --> 02:59.880
There will be more targets
02:59.880 --> 03:02.115
after we finish the bootstrapping process.
03:30.110 --> 03:35.582
Then, we need to clone all the git modules,
03:35.582 --> 03:38.310
which is also done by a make target.
03:38.310 --> 03:40.754
This time, it will not just pull
03:40.754 --> 03:42.656
the git submodules,
03:42.656 --> 03:44.658
but will also run various things
03:44.658 --> 03:45.826
like auto-compilation,
03:45.826 --> 03:48.030
Info doc installation, etc.
03:48.030 --> 04:08.680
Good thing we installed texinfo earlier!
04:08.282 --> 04:10.884
Now that we have borg bootstrapped,
04:10.884 --> 04:14.520
let’s see how to “assimilate” a drone.
04:14.520 --> 04:17.090
Well, that’s just a borg way of saying
04:17.090 --> 04:19.900
how to install a new package.
04:19.900 --> 04:22.910
We get to work from inside Emacs now.
04:22.910 --> 04:26.366
Borg has excellent info docs,
04:26.366 --> 04:28.450
should you ever be having questions.
04:28.450 --> 04:32.240
I earlier talked about using a seed.
04:32.240 --> 04:34.830
Borg docs go into details of what that means.
04:34.830 --> 04:40.190
I encourage you to read the docs.
04:40.190 --> 04:51.500
Let’s try to install lsp-mode.
04:51.500 --> 04:52.459
Examining lsp-mode
04:52.459 --> 04:54.694
with epkg’s helper function,
04:54.694 --> 04:57.280
we can see details of the package,
04:57.280 --> 05:00.200
dependencies required, and so on.
05:00.200 --> 05:02.470
epkg uses sqlite database.
05:02.470 --> 05:04.871
Now you know why I installed sqlite
05:04.871 --> 05:12.350
in the OS preparation step!
05:20.820 --> 05:22.622
Well, lsp-mode has
05:22.622 --> 05:24.057
way too many dependencies
05:24.057 --> 05:25.830
for this demo.
05:25.830 --> 05:28.795
Note how one is naturally led
05:28.795 --> 05:32.332
to take a peek at the innards of the packages
05:32.332 --> 05:34.780
in this simple workflow.
05:34.780 --> 05:37.270
As I said, it is about being mindful!
05:37.270 --> 05:39.573
Okay, instead of lsp-mode,
05:39.573 --> 05:41.308
let’s take a look at
05:41.308 --> 05:45.400
Prot’s excellent modus-themes.
05:45.400 --> 05:47.247
No extra dependencies needed.
05:47.247 --> 05:49.870
That is perfect!
05:49.870 --> 05:52.018
The themes have great docs
05:52.018 --> 05:53.620
and our philosopher friend
05:53.620 --> 05:56.000
is good at writing.
05:56.000 --> 06:02.930
Alright, first, we clone the package.
06:02.930 --> 06:04.664
This allows us to inspect the code,
06:04.664 --> 06:06.330
should we want to.
06:06.330 --> 06:23.000
Well, you /should/.
06:23.000 --> 06:25.552
Upon inspecting the code,
06:25.552 --> 06:30.620
we ask borg to assimilate the package.
06:30.620 --> 06:33.927
This will load the code in our Emacs
06:33.927 --> 06:37.270
and make the package available for use.
06:39.799 --> 06:42.135
Wait, I was praising all the docs,
06:42.135 --> 06:43.690
but where are they?
06:43.690 --> 06:44.571
To install the docs,
06:44.571 --> 06:46.273
we need to instruct borg
06:46.273 --> 06:48.020
about where to find them.
06:48.020 --> 06:51.978
To do this, we edit the gitmodules file
06:51.978 --> 06:53.910
and add the details.
06:53.910 --> 06:58.310
There they are!
06:58.310 --> 07:04.170
We have our docs!
07:04.170 --> 07:09.940
Alright, we have assimilated a package.
07:09.940 --> 07:11.398
After sufficient testing,
07:11.398 --> 07:14.234
we can commit it as a part of our own dot emacs,
07:14.234 --> 07:19.272
which is a drone of our borg collective.
07:19.272 --> 07:21.741
Since all the packages are git submodules,
07:21.741 --> 07:23.810
we get to use magit
07:23.810 --> 07:25.245
(all hail magit!)
07:25.245 --> 07:27.514
and borg’s helper functions
07:27.514 --> 07:29.530
to commit the code.
07:29.530 --> 07:31.818
Now create your own dot el file
07:31.818 --> 07:38.758
and hack away!
07:38.758 --> 07:39.793
So that is it.
00:07:39.793 --> 00:07:41.661
I hope you enjoyed the talk
07:41.661 --> 07:45.131
and I will be hanging out in IRC
07:45.131 --> 07:46.666
if you have any questions.
07:46.666 --> 07:48.330
Thank you, and bye.