diff options
Diffstat (limited to '2020')
-rw-r--r-- | 2020/info/08.md | 694 |
1 files changed, 366 insertions, 328 deletions
diff --git a/2020/info/08.md b/2020/info/08.md index 0527cee5..5494a68e 100644 --- a/2020/info/08.md +++ b/2020/info/08.md @@ -62,331 +62,369 @@ Currently trying it, and also in-process of switching from Nix to Guix. <a name="transcript"></a> # Transcript -00:00:00.399 --> 00:00:36.399 -My name is Corwin Brust and I will be -talking about getting started with Emacs -today. I have been an Emacs user for a -long time. First of all, thanks and a -huge welcome to the conference from me -and and on behalf and back to the other -people that have been helping to -organize. It's been amazing just to be -involved with that and just, kind of, -see backstage. - -00:00:36.399 --> 00:01:33.759 -So I've used a lot of different editors -in my time. That's about 25 years as a -professional software engineer. And most -of that time I've been using Emacs. I'll -talk a little bit in a minute (if I can -ever find my slides) about how I got -into Emacs, but I think if you've used -Emacs and a lot of other editors for a -long time, something that you notice -right away is that you get good with it -in a way that stays meaningful. You -learn new things. Those things stick -with you. You learn how to make it do -new tricks and then keep doing those -tricks. - -00:01:33.759 --> 00:02:17.200 -I want to mention that this -conference--oops, this talk isn't about -how to adjust your configuration -specifically. I don't have a bunch of -good code samples in here. There are -other great talks at the conference, -particularly Andrew's, that I looked at, -that looked like they might be more -aimed at that "hey, I'm just getting -started with Emacs, what are some things -to try to make it more comfortable for -me starting?" This is about how to think -about the problem space. Hopefully, a -good warm up as we start thinking about -some of the lightning talks a little -later on. - -00:02:17.200 --> 00:02:29.680 -I'm just gonna quickly make sure I can -see my IRC buffer in case I run into -time. I didn't get my stopwatch started -for this one. So all right, let's dive -in. - -00:02:29.680 --> 00:02:53.519 -We assume that we want to install -packages and maybe configure some -features. This is particularly from the -perspective of where we're working with -a bunch of people on a team and we want -to get something done. Some of us -probably already have mature Emacs -workflows. Others are installing it for -the first time. - -00:02:53.519 --> 00:03:35.840 -So the first question is, you know, in -that context: what's the value -proposition? Why should I mess with my -machine, my mature Emacs configuration, -and impose my ideas over the way -somebody else is learning Emacs? Well, -it can be.. I'm off my slides here a -little bit. It can be a little bit -tricky to learn Emacs. One thing that -helps us a lot is if people that we're -working with can tell us, kinda, -keystroke for keystroke at times, what -to do and explain what everything is -doing. Using the same packages can -really help us working together on a -project. - -00:03:35.840 --> 00:04:54.840 -Speaking from my personal experience, it -took me decades to get to the point -where I was excited to program in Emacs -Lisp. I've programmed in a lot of -programming languages, but Lisp wasn't -on my list. I looked at my config that I -was copy-pasting around from generation -after generation of .emacs file or -recrafting it from hand and from -Internet searches, to get the things -that I needed when I would quickly go -install Emacs at some new job or -contract, and be able to to quickly get -through that workflow that caused me to -install the program. You know, just -little simple one-liners that that got -committed to memory over decades -eventually just led me to a sort of "hey -what's going on here." And I credit Jeff -Goff, my good friend who died earlier in -2020, for my lifelong love of Emacs. -Perhaps EriK and I will talk about that -a little bit more in another talk we -have scheduled, but Jeff was a huge -influence on us in a number of ways and -a huge contributor to the Raku -programming language which is very cool. - -00:04:54.840 --> 00:06:23.380 -So, understanding how to make a good -decision about splitting up -configuration in a way to share it -across people with really different uses -of Emacs... That's actually a -complicated topic and I want to sort of -back off and stare at it for a second. I -think Emacs is about people, so that -means it's about community. And -community means we're going to invite -disagreement. In fact, that disagreement -isn't necessarily a road-block to our -project. In fact, some of the work that -a community project can invite us to do -is to get closer to each other by -inviting those disagreements, by -learning from them--learning from -different people's styles and from how -they argue, and thinking about why they -have that perspective and what technical -benefits that perhaps radical point of -view might carry away. Some people are -really aggressive arguers, and others -are very passive and really couch their -ideas in distancing terms, to say, "well -probably, this is a good idea" or -"please double check me." Those don't -always necessarily indicate how certain -a person is, because we're different. We -have different ways of communicating -ideas like certainty or excitement. - -00:06:24.560 --> 00:07:29.039 -When we think about a bunch of really -diverse programmers approaching Emacs, -probably one of our our first really big -challenges is just to pick what we're -going to go after. There are a lot of -existing kit installs and things like -this. My argument is that you could -actually get pretty far just trading -files around. Maybe the more valuable -conversation to have is making the hard -decisions about, well, "should we have -vertical completion," should that be the -out of the box, and the people that want -the traditional splayed out over a -single line completion for example in -the mode line, those people are going to -add a line of config to their own setup? - -00:07:29.039 --> 00:08:16.240 -The way to get there? I mean, how do we -find out what works? We don't want to -slow down the people that are super -productive with Emacs by asking them to -completely break their workflows and -make it easier for new folks. At the -same time, we do want to make sure those -new people are excited by Emacs and not -turned off by having to learn the entire -jungle of Emacs history in the form of -its unique technical stylings for things -like frames, buffers, and other unique -Emacs viewpoints on important interface -concepts, especially. - -00:08:16.240 --> 00:09:04.800 -The encouragement here is to keep the -initialization for a project team -together as a crucible. Rather than -necessarily following our defaults of -finding the simplest configuration that -generally work and letting people -customize it, what if we tried to look -for fairly specific configurations that -we'll expect essentially all of our -developers to be using, at least when -they submit bug reports. In particular, -with this, I think that degree of -experimentation can drive back into the -Emacs development process. In the -development mailing list... - -00:09:04.800 --> 00:09:15.120 -I'm hoping I'll get a timing cue here. - -00:09:15.120 --> 00:09:50.720 -In the context of Emacs development as a -greater entity, we see some of these -struggles. Should we change this -default? Sometimes we can have the sense -that defaults in Emacs will never -change. The conversation is too -difficult. I think one thing that can -help us get there is evidence that says, -"hey my 30- to 40-person project is -using this set of bindings and here's -what we learned about brand new Emacs -users trying to come in and get work -done with that." (Amin: Yeah you still -have a couple more minutes) - -00:09:50.720 --> 00:10:02.000 -Oh, beautiful. Okay, great. I will try -to get through my last few slides that i -cut in my last walkthrough, but I think -i'm going quicker today, thank you. Thank -you. - -00:10:02.000 --> 00:10:43.040 -So let's just recap real quick: in -theory, Emacs works out of the box. That -means we're free to experiment. We can -throw it all away and start over. As an -organizational principle... I don't know -what I was thinking on that slide, -excuse me. Bringing it back around to -the free and open source software -community, our goal is to enable users -to unlock their computers, to do as much -with them as possible. - -00:10:43.040 --> 00:10:57.920 -That's the context to take with project -initialization, but sometimes it could -make sense to put some gloves on. I've -thrown up on the screen here just a -couple of other ideas, ways to maybe -think outside of the box. - -00:10:57.920 --> 00:11:29.120 -As you're putting together project nets, -my words of encouragement are to -experiment with it, try different -things, and think really specifically -about how different the development -users might be from each other as you -define standards for configuring the -user environment of Emacs specifically -for developing on a project. That's -pretty much my talk. - -00:11:29.120 --> 00:11:32.959 -If there's any time, I would take a -couple questions. - -00:11:32.959 --> 00:11:53.839 -(Amin: Thank you for your awesome talk, Corwin. -I think we have one or two minutes for a -few questions. Do you have the pad open -or would you like me to read the -questions for you?) - -00:11:53.839 --> 00:12:03.519 -Oh, I managed to close the pad and I am -trying to open it again. All right, -there it opened. - -00:12:03.519 --> 00:12:09.360 -Bringing it onto a screen where I can -see it. Will you read me the first -question while I drag windows around, -please? - -00:12:09.360 --> 00:12:15.600 -(Amin: Sure. It says, "do you use Emacs -as a community building tool?") - -00:12:15.600 --> 00:12:19.760 -Do I use Emacs as a community building -tool, or how do I? - -00:12:19.760 --> 00:12:22.182 -(Amin: It just says do you.) - -00:12:22.182 --> 00:13:14.639 -Yes, absolutely. I think Emacs is an -ambassador to the GNU tool chain. I -think that in the fullness of time, we -will see an Emacs that makes and that -makes iOS and Android and other -closed-source tools dream. That's why -they mock us and call Emacs an operating -system. It's because it could be, if we -cared for it to be. It's quite a -threatening product from the perspective -of how many problem spaces it can -address, how many types of users it can -satisfy, the things that we can do to -make it robust in those environments. I -mean, we're always thinking about the -weak points, but is Emacs a community -building tool? Heck yeah. - -00:13:14.639 --> 00:13:26.880 -(Amin: There's like one or two more -questions. I think they're more -long-form so it might be better if you -took them off stream so you could keep -the schedule on time.) - -00:13:26.880 --> 00:13:33.360 -I would love to take those questions -offline. I will respond to you in -writing if we don't get to it in a -breakout room. - -00:13:33.360 --> 00:13:38.000 -Thanks so much for joining us. I can't -wait to see the rest of the conference. -See you there! - -00:13:38.000 --> 00:13:42.800 -(Amin: Awesome. Thank you again so much, Corwin.) +00:00:00.000 --> 00:00:24.056 +Hello, everyone. I am Andrew Tropin. I +am a professional software engineer I +was playing with NixOS It's an operating +system based on the Nix package manager. +I came up with this interesting approach +for configuring Emacs. I want to share +it with you. + +00:00:24.056 --> 00:01:31.389 +I will start with the bold statement +that Emacs configuration is almost the +same as system configuration. It's not +related to that Emacs joke about Emacs +being an operating system. It's more +about Emacs being integrated with so +many tools inside the environment. For +example, if you don't even use any fancy +workflows, you use only plain Emacs +without any configuration, dired uses +ls, grep.el uses grep, and info files +placed somewhere in your system. Also +Emacs can interact with gpg, git, make, +and other stuff. When you grow your +Emacs Lisp init.el file or other files +in your .emacs.d directory, you get much +more integration with underlying +operating system. + +00:01:31.389 --> 00:02:08.622 +The question is: how to manage such +configuration? Because you can't just +take a bunch of .el files and move to a +different machine and be sure that +everything will work. Because you didn't +move your executables. You didn't move +configuration of other programs. You +didn't move your service configurations. +And you can't even just create dotfiles +for each program and move it with your +.el files. The approach would be a +little broader. + +00:02:08.622 --> 00:02:23.722 +Everything that I am showing today is +available on Github. Any source code, +you can find here. but my copy of the +repository is on my local machine. + +00:02:23.722 --> 00:03:45.889 +As you can see, the font is a little +small. And also, my terminal font is +also a little small. I can do a quick +fix and increase the font. But imagine +how cool it will be if you can have a +file which contains the configuration +for a system. You change some value. +Here, for example, fontSize = 16 and run +some command and based on this file and +some other includes your operating +system is built and all your environment +is set up and ready for use. For example +here, we already built the new operating +system, and everything is already +installed in my SSD. Now I can run the +program and you can see that my alacrity +terminal has much bigger font and also +if I restart my Emacs instance it by +default uses a much bigger font for any +buffer. Practical, and as you can see, +it's already working, thanks to Nix and +NixOS. + +00:03:45.889 --> 00:04:44.556 +I will explain a little later how it +works inside, but for now, let's specify +a little more what happened right now. I +fed my... Oh. It doesn't work. Sorry. I +want... I have my whole operating system +defined in a few Nix files. For example, +here you saw the file which defines some +variables for my environment and then a +few more files for different programs. +There is a folder which contains all +Emacs-related configuration. Also, there +are package definitions defined in Nix +package repositories which is also +included for the function which +generates the operating system. + +00:04:44.556 --> 00:05:11.689 +Getting all my configurations written in +Nix language and a few firewalls in ?? +languages, everything is gathered +together, and from that input and only +from that input, the new operating +system is built. Emacs now is a part of +this operating system. I can distribute +this Emacs configuration with all the +environment that I want. + +00:05:11.689 --> 00:05:50.789 +Practical so far. Let's clarify which +problems does it solve. First of all, +the integration problem. For example, a +few minutes ago, you saw that I changed +one variable. That was to update... The +first one, for my terminal, and the +second one, for my Emacs. It's pretty +good that a few different programs can +share some data. For example, you can +have one of them for every application, +or something like that and you change +only one value in one place and the +whole operating system is updated. + +00:05:50.789 --> 00:06:20.856 +Also, another problem is +reproducibility. For example, when you +install your new instance of Emacs on +your laptop or something like that, you +can be sure that you will get the same +package versions and you can be sure +that the configuration of your work +results in newly-updated or +newly-installed packages. + +00:06:20.856 --> 00:06:43.256 +Also, if you update packages, sometimes +it's hard to revert, because it's the +way your package manager almost every +time works. You're just getting the +latest available packages. If they are +broken, you need to wait for the +maintainer to update them. + +00:06:43.256 --> 00:07:39.656 +And also, your basic configuration +almost always doesn't contain any native +dependencies, like executables or +something else. Recently, I saw some +attempts to make it possible to use +use-package for those needs, like +ensuring native dependencies or +something like that. It's obviously... +If your configuration isn't reproducible +and it doesn't have your whole +environment, placed in one repository, +it's very hard to share such +configuration. You can share part of +your configuration and some instruction +how to get a similar environment, but it +doesn't always work. Let's go closer to +actually Emacs configuration itself. + +00:07:39.656 --> 00:08:10.839 +I had some experience with Spacemacs and +Doom Emacs distributions. I also watched +a lot of videos and articles by +Protesilaos and a lot of other custom +configurations of many different cool +people. And also I was inspired by +use-package and decided that I will +create a folding structure for my Emacs +configuration. + +00:08:10.839 --> 00:09:01.306 +I will be using subconfigs. It's almost +the same as layers in Spacemacs, or +modules in Doom Emacs, which are +self-contained. They contain Emacs Lisp +code which configures all packages +necessary for this part of +configuration. It contains all Emacs +dependencies like Emacs packages. It +contains all native dependencies like +binaries or maybe info pages or +something like that. It also contains +variables that can be shared between +Emacs and other applications, and it can +contain service or system definitions +which configure your systemd service or +something like that that you use in your +workflow. For example, for synchronizing +your e-mails. + +00:09:01.306 --> 00:10:06.922 +Let's start from just the example that I +already am... I have a folding structure +for my configuration. I have some files +here. early-init just has this. Nothing +changes. It will be copied to that +.emacs.d directory later with some +exceptions that it will replace the Nix +dir and a symlink will be created to it. +I have use-package-init.el. It's part of +configuration that will be on top of +everything to be able to use use-package +in my subconfigurations. And actually +some Nix code to glue everything up and +config dirs which contain all my +subconfigs. + +00:10:06.922 --> 00:11:10.105 +Let's start from faces subconfig. Let's +start from config.el which can be +familiar for many people. Just +use-package definition for faces package +and some configuration for it which are +setting some attributes. It reads some +variables. Those variables are actually +defined in a different place. If I open +default.nix file, you can see that it +contains the definition or subconfig, +and it should contain a definition of +variables that it uses by... I forgot to +move it from my original default.nix +file somewhere here. You probably can +find definition of those variables just +right here. + +00:11:10.105 --> 00:11:38.422 +I took values from my Nix expressions. +Those values will be shared across my +alacrity, Emacs, and other applications. +Later, they will be placed in generated +Emacs configuration. They will be +available for faces config. Here I will +be referencing them just like Emacs +variables. + +00:11:38.422 --> 00:12:39.222 +Let's take a look at another more +complicated example. For example, +org-roam package. Just a basic +use-package configuration which uses a +variable and the definition. It's a +little more complex than the previous +one. Elisp configuration in the same +file. emacsPackages specified here. +Those two packages: org-roam and +company-org-roam. systemPackages: it's +something that should be available on +your host operating system. And for +emacsPackages, you need sqlite package, +and also the definition of the variable +which will be passed in my Emacs +configuration later. It's equal to my +workDir, which is defined in my +environment, and a subdirectory of it. + +00:12:39.222 --> 00:12:43.222 +([Amin:] Andrew, you have about five +minutes including questions.) + +00:12:43.222 --> 00:13:26.222 +Oh, okay. I'm almost finished. It was +last example. Let me open my Org file. +Okay. Right here. I won't give you an +introduction to Nix itself and the +underlying mechanism, but I can say that +there's already a proof of concept +framework for utilizing Nix and NixOS +for configuring Emacs and making a very +complex workflow reproducible on other +machines. It gives everything that we +saw right now. + +00:13:26.222 --> 00:14:05.389 +For the future work, I plan to +reimplement it in Guile, which is a +Scheme dialect, which is another Lisp +language, for the GNU Guix operating +system, because I like Lisp languages a +little more than Nix languages and I +want to make this project from proof of +concept to some state which will be +user-friendly and available for other +people. If I will have a lot of time, I +will make an operating system which will +be inspired by Lisp machines to make the +whole experience very Lispy. + +00:14:05.389 --> 00:14:22.622 +Thank you for your attention and now I +will answer questions. Oh. There is a +lot of... Okay. I see some questions. + +00:14:22.622 --> 00:14:29.222 +Did you release some config files such +as Emacs custom.el, some of which have +sensitive data? + +00:14:29.222 --> 00:14:59.456 +Ideally, in the folding way, I create a +separate directory called +local/share/emacs, and I place custom el +files here. It's not synchronized in any +way, and it will be just lost in case +you move to a separate machine. I do it +for a purpose, because I don't use +custom.el. It's hard to make it +reproducible if you're using such +mechanism as custom.el. + +00:14:59.456 --> 00:15:06.656 +How do you learn the Nix language +basics? Just from the manual? + +00:15:06.656 --> 00:15:32.989 +I read a lot of documentation. Also, I +saw the course like Learn Nix in 15 +minutes. And also there was another +resource. Better to ask this question in +Nix or NixOS channel in IRC, which will +be treated in more details. + +00:15:32.989 --> 00:15:38.909 +What are the main advantages besides +switching computers, which most people +rarely do? + +00:15:38.909 --> 00:16:10.556 +For example, the original idea was to +make part of configurations available +for projects. For example, you have some +project, you made the setup, and want +other developers to use the same setup +on their machine, but you implement only +the part of stuff, like one subconfig +especially for this language for this +project. With such approach, you can +easily share such subconfig with other +people. + +00:16:10.556 --> 00:16:15.239 +Have you tried Guix in place of Nix? + +00:16:15.239 --> 00:16:41.239 +Yes, I tried it, and currently I am in +the state of switching from Nix to Guix. +You can follow my Youtube channel, I +think, I do streams twice in a month +talking about reproducibility and +related stuff. Probably soon I will be +talking about installation of Guix and +configuration of it. + +00:16:41.239 --> 00:16:50.406 +In case you're watching this video +later, you can find me somewhere on the +network using those contacts. It's my +nickname and my e-mail address. + +00:16:54.072 --> 00:17:04.622 +([Amin:] Awesome. I think we're wrapping +up just on time. Thank you so much, +Andrew, for your great talk, and for +hanging out to answer the questions +live.) + +00:17:04.622 --> 00:17:18.000 +[Andrew:] Thank you for organizing the +conference and thank you all +participants for questions and +participation. See you soon! |