 I've been using Emacs for a few years now and for most of that time I've been a Doom Emacs user because Doom Emacs is a really nice distribution of Emacs that comes with a lot of programs that most Emacs users probably want already installed, already configured. Things like Evil Mode, especially for those of us that are coming from them. We really need the Evil Key Bindings. So Doom Emacs is a really great project and I love it. But a lot of you guys were asking for more GNU Emacs content, like you want to see me take a standard GNU Emacs installation, a very plain vanilla GNU Emacs bare bones, and then slowly build it into something akin to Doom Emacs. And I thought that is a great idea. So we're going to start a series of videos today. This will be video number one in this series. And what we're going to do, I'm going to install GNU Emacs just playing GNU Emacs and then slowly we're going to evolve it into something special. So let me switch over to my desktop here. The first thing you need to do is you need to make sure that you have installed Emacs. So here on an ArchBase system, of course, I would do a sudo pacman-capitalS Emacs, right? You're on Debian or an Ubuntu-based system, sudo apt install Emacs, whatever package manager you have, you know, do the install command, name of package is typically just Emacs. Get Emacs installed. And then what you want to do, open your file manager. So in my case, I use PCMAN-FM as a GUI file manager. Make sure that there is no current .emacs.d directory in your home directory. That's a Emacs config directory. So don't have any older Emacs configs that you've previously used on the system. Get rid of those. Also check in the .config folder because these days Emacs also has the more standard xdg-compliant .config-slash-emacs directory, which in my case, I also do not have. I've already deleted those directories. So now what I want to do is I want to go ahead and create a new Emacs directory in .config, right? So now I have in my home directory slash .config-slash-emacs an empty directory. And we're going to start writing a config file and start putting configs in this directory because I don't want to run Emacs, vanilla Emacs, which is this here. This is standard GNU Emacs out of the box. Looks very plain. It does have toolbars and menu systems to help you. Like if you didn't know any of the Emacs key bindings and things like that, because it is this graphical program, it's a GTK program that has this menu system. A lot of things can be found in the menu system if you need help at first. Just know ctrl-x, ctrl-c closes Emacs, that's how you exit. You could also exit it in the graphical menu system as well. So the first thing we need to create is an init file and init.el. Now typically I like to configure Emacs in org mode and I think a lot of you guys will eventually really fall in love with org mode and start writing a lot of your stuff in org mode. So let's go ahead and just start using org mode right away. So first of all, let me go ahead and launch Emacs. So I'll just run Emacs here from D menu and I'm going to do the standard find file command in Emacs, which is ctrl-x, ctrl-f, and now down here in the mini buffer, this little echo area, see I get a prompt find file and just type the path to a file. So I'm going to do home directory slash dot config slash Emacs slash and I'm going to type init.el. This is a new file that we're going to create here. Now to zoom in using the standard Emacs key bindings, I believe it's ctrl-x, ctrl-plus, ctrl-x, ctrl-plus, ctrl-x, ctrl-plus, yeah, that zoomed me in just a little bit. I haven't started typing yet, but that did make the text a little bigger. So ctrl-x, ctrl-x, plus, there we go. Now you will have to bear with me for a few minutes here because I have to try to remember some of the standard new Emacs key bindings because I'm used to evil mode, but we're going to get evil mode installed rather quickly. That way I don't have to remember some of these older key bindings that I haven't used in a long time. Now the good thing about the standard GNU Emacs key bindings, it's not modal like VIM. You can just start typing right away. For me, I'm going to do a lot of copying, pasting, just for sake of time here. So I'm going to do a ctrl-y to paste this here. So this is the only thing that's going to go in our init.el today. And you can see what it's going to do inside the parentheses here. Org-babel-load-file, so expand-file-name-config.org-user-emacs-directory. So what does all of this mean? Well what we're going to do is we're going to set up a file, an org document, to essentially be our config file. Typically your config file in Emacs is going to be config.el. Where we're going to tell Emacs our config file is actually going to be config.org, and then it's going to org-babel-load-file. It's basically going to take this config.org and transform it into a config.el automatically for us. That's all this code does. So that is our init.el. We're done with that. So we could click the button here in the menu bar to save. If you didn't have that menu bar, that toolbar up there, what you could do is ctrl-x, ctrl-s also for save. So now that we've got the init.el set up for us to be able to use a config.org config file. Let's do ctrl-x, ctrl-f for find file once again. Automatically the path is in our current directory, so .config-slash-emacs, and then type config.org to create this new config.org file. Once again I'm going to do ctrl-x plus a few times to make the font bigger. Since this is an org document, I'm going to go ahead and I'm going to go ahead and put some header information here. So typically you want the title. So the title of this I'm just going to call dts-genu-emacs-config if I can type. And I'm going to go ahead and add some other interesting heading information as well. I'm also going to add the author name which is me. Title and author are really important to have in your org documents, especially if you ever export them to something like HTML or PDFs and things like that. You already got this information that will be used once that conversion is done for you. For example, if you transformed your org document from org to HTML, the title header here for the org document will become the title tag in your HTML document. So that's nice information to have. I also added a description. I also added a startup header as well, show everything. What this means is an org has the ability to fold the document based on heading levels. I'm telling you, when I start this document, I want to actually see everything. I want the whole document unfolded. There's other options you could actually put in this as well, but you can look that up in the org mode documentation. And then the other thing is the options for TOC, that's table of contents, colon 2. If I create a table of contents, which I often do in my org documents, I only want the table of contents to include two header levels down. So the next thing we need to do is actually just start outlining our config. I'm going to go ahead and create a top level header, and I'm going to call this important programs to load first. So what are the things that need to be loaded first in your config before anything else gets run? We probably need to set up some kind of package manager. By default, Emacs has a built in package manager called package.el. Most Emacs users probably don't really use it. They install a third party package manager, and there's several of them. One of the most popular ones is straight.el. Believe straight.el is kind of the foundation of what DOOM Emacs does. Of course, DOOM Emacs does a lot of extra macros and stuff on top of straight as well. There is another really cool package manager I've been hearing a lot of good things about called Elpaca. And I think that's the one I'm going to install today just because I think it's kind of a neat project, and I don't know much about it because I haven't used it. So it will give me a chance to learn a different package manager. Another thing we of course want to load up right away is we want to make sure that we get evil mode started. So we'll have a heading here for some code to actually load evil mode for us. That way I get my vim key bindings. That way I don't struggle here like I am right now, trying to remember how Emacs works as far as the standard good new Emacs key bindings. And speaking of key bindings, we're eventually going to have to set some key bindings. So I'm going to have general key bindings, and by general, that is actually the name of a program. General.el is a program for Emacs that allows you to set key bindings. Now I could make probably a two hour long video about El Paca, the package manager, about evil mode. I could make a couple of hour video about general.el and key bindings. I'm not going to go that deep into any of these because honestly, if you want to learn about El Paca, read the documentation. If you want to learn about evil mode as a deep topic, go read about evil mode. If you want to go read about general key bindings, which is a massive documentation over on GitHub. There's so much you can do with this, so many different ways to add key bindings that have various different macros you can use if depending on whether you want to set key bindings for normal mode, visual mode, insert mode, whatever you have. If you're doing evil, for example, there's a lot to these programs. So know that I'm going to give you a very general overview for sake of time. So know that we're probably going to revisit most of these in future videos because I'm only going to show you the functionality that we're interested in right now. Later on, as we get deeper into this config file, we may revisit some of these topics, but I'm only going to hit the things that we need to know about for this particular config. If I try to do a video where I try to document every functionality and every Emacs package that I end up putting in this config, I would spend the next 10 years doing nothing but making Emacs videos. So let's start setting up Elpaq of the package manager. So let me go back to my browser and let's go back to the Elpaq of GitHub because on their GitHub, they do have some example code, this rather large block of coder. I'm going to copy that and what this is, this is code that they say should go in your init.el, I'm actually going to put it in our config.org because I think it'll be fine there, but this sets up our Emacs to actually use the Elpaq package manager. And let's go ahead and add a source code block here in org mode. So in org mode, all these headers are just comments, everything, all this and all of this, this is actually not going to be exported to the proper config.el that this document writes to, right? This is just comments. It's not actual code. So to actually put a code block here, what we need to do is I'm going to do the pound symbol plus I'm going to do begin underscore src for begin source, begin a source block and then space and then name of language that the source code block is written in. It'll be emacs dash lisp, lisp, not lips, and then we're going to do another pound sign plus and then end underscore source. That will be the end of the source block. And then I'm going to do control Y to paste that code that I got from GitHub. And you can see there is the emacs lisp and we get emacs lisp syntax highlighting because it knows the source code block is emacs lisp. So it's doing the proper syntax highlighting for this language. So that should set up Elpaq itself. Let's go back to the GitHub because there was one other thing that they suggested, or actually it's kind of required, is we need to set up an early init file. What an early init is, it's things that need to happen before the actual proper init. Like it was the very, very first thing that needs to happen. And what we need is this one line in the early init file and this will disable the standard emacs package manager package.el, that way it doesn't conflict with Elpaq. So let me go back over to emacs. So let's do the find file command again. Remember control X control F is the standard GNU emacs key binding for that. And we've got the path home directory slash config slash emacs. And then we need to do early dash init.el. And then once we're here, control Y to paste that from the GitHub, right, for Elpaq. You can see set queue assigns a value to a variable. The variable name is package dash enable dash at dash startup. So package package.el is the emacs package manager enable at startup. We're setting that to nil nil is false. So when you're setting things to true and false and emacs list t is true nil is false. And now let's go ahead and save. I'll just use the toolbar here. And then I'm going to go back to our config.org. Now if I do meta X, alt X on the keyboard, I don't know the standard GNU emacs key binding to go back a previous buffer, but I do know the command previous dash buffer that I could just type here and go back to this. Now one other thing that we want to do here is Elpaqa does have the ability to use package. Use package is a standard emacs program that's got some nice little macros that makes the code blocks that you would insert into your config file for installing and configuring programs a little simpler to use. I'm going to go back to their GitHub page for Elpaqa. And this block of code here enables use package support for Elpaqa. So I'm going to copy that and then let's go back and then once again I'll just control Y to paste inside the source code block, right? So now I think we've got all the code for Elpaqa. Let me zoom out so you can actually see that's actually a lot of code, right? It was just a copy and paste job, but there is the begin source for emacs list. And then all of this is just basically setting up Elpaqa to work. And then we had the one line in the early init.eo we had to add as well. And if all of this works, I could save and let's close emacs. Let me go ahead and once again, I'll launch from Dmenu emacs cloning into Elpaqa repos. You can see Elpaqa is installing itself. It's setting itself up because we put that code in the config file. And then it's going to install a few programs going to install Elpaqa. And then it's also going to install looks like it's installing evil. That's interesting. It installed evil mode and then it also installed use package. Why did it install evil mode? Did I not? So this is an example block of use package, right? And the example program that they were using because, you know, this sets it up to use use package and then they give you an example of how to use use package to install a program. The program they install is evil mode. That's great. We've got evil mode in this without us even really wanting it. So now evil mode will not actually be set up because it's not running yet. But what I could do is, for example, if I get over here and do meta X and I type evil dash mode, let's say J and K now go up and down. Very cool. But let's actually set evil mode up in our config file. So it automatically starts without me needing to manually do a meta X and then type evil dash mode. So I'm going to close emacs out and let's get back into our config file. Which, of course, to get back into our config file, I needed emacs open. So that was my fault there. But I'll open up this new instance of emacs and I'll do control X, control F for find file and then dot config slash emacs, if I can type correctly, config dot org and then control X plus a couple of times to zoom in and then let's scroll down. Then I had this heading here to load evil mode. Now let me do a meta X and do evil dash mode so I can actually use my standard Vim key bindings here. I'm going to DD now to delete. Yes, because I'm going to move this header up here to where it really installed evil mode. Now, of course, that's going to break these source code blocks. So let me add a end source there and then start a new one here and then emacs list every source code block will need to have a language, but I don't need the header in the source code block. I need it outside the source code block. Let me colon W to write that. So do you guys see what I did there? Let me zoom out. I now have two separate source code blocks. They're the second one for evil mode. So that was that second thing I pasted from the LPAC of GitHub where it installed use package and as I can sample it installed evil mode. So that goes under the evil mode heading. And then this is the first source code block, which really just sets up LPAC up for us. So zoom back in now. Now there's a lot of things I want to change here. So use package evil just installs evil. It doesn't configure it in any way. There's several things I want to configure for evil mode out of the box and you probably will to you're going to want to make sure evil mode actually is the default mode for most things. You're going to want evil mode to set up how it wants to do splits. Do you prefer your vertical splits to be on the right or the left? Do you prefer your horizontal splits to be at the top or at the bottom? So we're going to have to add some configuration options here. And for a second of time, I'm just going to jump ahead to where I've changed this now. So use package evil and then I have some line breaks and I have this section. Use package inside the use package block. You have different configuration options. You have, you know, colon and yet. So what to do on initialization of evil mode. And then you have after evil. So this would be something after evil loads to do something else. You have colon config. This is your configuration options. Typically there's a lot of different things you can do with these use package blocks. But basically what I'm setting up is I set up vertical splits to the right is true windows below. So my horizontal splits at the bottom will be true. And then just in quotations here, evil dash mode, just run evil mode, right? Just start evil mode for me, please. I'm also going to add this use package block. So this is a separate use package block and this is installing evil collection because really you don't want to just install evil. You also want to install evil collections. So you have evil mode functionality baked into everything, not just your text editing. You want evil mode and things like dear Ed and, you know, various other Emacs programs. And then just for educational purposes on this video, I'm going to suggest use package evil dash tutor. The evil tutor is kind of like the Vim tutor, except it's for evil mode in Emacs. So if you're not familiar with like your Vim key bindings and you need to run through an evil tutor, that's available for you as well. And so now that I've added that, let's go ahead and save. So I'll just hit the save button here, although now that we have evil mode, I could have done a colon W for right and I could do colon Q to quit. Now let me reload Emacs and now Elpaka should install all those extra evil packages because we had those use package blocks. And it is, it's installing some extra stuff for us. Looks like that completed. And now that I have evil mode loading by default, at least I think it should, I should be able to do a control WC to close a split. And that works. Now one thing I noticed is the font change the font is very small. I also don't have a logo anymore, but let me do control X control F to find file. So get back into dot config slash Emacs config.org, which I did not type that path correctly. Yeah, that's not the correct path. So control X control F, I typed the directory wrong. Part of the problem is the font is really small. It was hard for me to see what I was typing there. We're going to correct this font problem here in a minute permanently, but for now I just zoom in. So we've got important programs to load first Elpaka, the package manager, evil mode, of course, so I can have my VM key bindings. And then general key bindings. Let's go ahead and install general dot EL. So once again, let's do a outside plus and then begin underscore source Emacs dash lisp. Let's go ahead and add the end source block as well just so I don't forget it and create some space here. And obviously we need to add some code here. Now probably already you kind of know what we're about to do, right? We're going to do a use dash package and then name of program. The name of this program, you can go back to the GitHub for general dot EL, but you know it's general, right? So that's going to tell the Elpaka package manager that we want general, package general. It's not already installed. Install it for us. If it is installed, then we're going to give it some configuration options to set. And how do we do the configuration options? Well, you probably already know the colon config that I showed you earlier. Then inside parentheses, you know, we're going to set various configuration stuff. Now one thing I know we're going to need to add to general is for the config, we need general dash evil dash setup because I'm going to use evil, right? I like the evil key bindings, the Vim key bindings, probably most of you guys are also going to use the Vim key bindings because I love Emacs, the ecosystem, everything about it. I'm not a fan of the new Emacs key bindings, so I prefer to use evil mode. If you don't want to use evil mode though, you can ignore all the evil stuff I do in these videos. So you didn't have to set up evil mode, use package, space evil earlier or any of that. But a lot of you guys are probably going to use evil mode. So general dash evil dash setup. And then other than that, inside this use package statement, because I haven't closed it with a closing parentheses, right? Eventually I'll have a closing parentheses. But inside this, I'm going to have a code block where I also go ahead and set up some basic key bindings that I know right away I need, because for me, I'm struggling like moving between buffers, next buffer, previous buffer and things like that. So I'm going to set up some key bindings that right away I want to go ahead and set up and also just to have an example for you guys to look at. So I went ahead and added these blocks here. The very first block you can see I added a comment. Let me zoom in a little bit here. I set up the space key as the global leader key because I'm used to space and then more keys for key bindings because obviously using doom Emacs for so long. I prefer all of my key bindings to involve the space key. And then in parentheses, I have general dash create dash definer. So we have to create a definer. So what is basically create a label. And the label I created is dt slash leader dash keys. Now you could create this name to be anything. You could change dt to whatever you want. I'm going to do dt slash leader dash keys. And then you can say I have colon states, colon key maps, colon prefix, colon global prefix states because evil, the VM key bindings or their modal, right? Normal mode, insert mode, visual mode, Emacs mode essentially. Key maps are set to override prefix is set to SPC all caps. So that is the name of the space key. The global prefix would be meta space, alt space. And now that I've set that up. Now I can actually create some key bindings and that's really simple. So to create the key bindings inside the use package statement for general, I have dt slash leader dash keys, right? And then B. B is colon ignore. So this is not a real key binding. So that's why the ignore T for true is there. And then colon WK is which key. So if which key is installed, which we haven't installed it, this would be the description for this key. So space B does nothing. Space B is part of a key binding for other stuff. And until we actually press another key in the mini buffer, it's just going to say buffer, right? That's the description. So it's the buffer key bindings essentially. But until I actually hit another key like B, B to switch buffer or BK to kill the buffer, right? So space BK will kill the buffer space B in is the next buffer space BP is the previous buffer. And the way this is the name of the program, the actual name of the Emacs program you're running and then colon WK for the which key description that should appear if you're using which key, which we're going to install which key in just a second. Now let's go ahead and verify that all of this that I just put here actually works because I'm not positive that all of this was legit code. You never know until you actually run it, right? So let me go ahead and restart Emacs. So it is installing some more stuff. I really like the Elpaca package manager for just using it just for a few minutes. I hate these fonts. Man, these fonts. I don't know why the fonts got really small all of a sudden, but at some point playing with the config, the fonts just got incredibly small. I can't even read the mini buffer. I'm just being honest. That's partly why I type the wrong path to the file sometimes is because I can't actually see the confirmation in the mini buffer of what I'm typing because that font is so small, but we can play with the fonts here in a minute as well. So let's see if setting up space for our leader key works and let's see if these key bindings for these buffer key bindings work. So if I do space BB to switch buffer, space BB does switch buffer. I've got it down here in the mini buffer. It says switch to buffer and I'd have to type the name of a buffer. I do space BP for previous buffer. I go back to the welcome screen for Emacs. I know this video is already running long, but the very first video has to be kind of long because I don't want to leave you guys if you're following along with a system that is still kind of incomplete. Like I really, this is still hard to work with until you do, until we add a few other things like, for example, these fonts are so bad. Let me go ahead. I'm just going to do a quick copy and paste. I'm going to add a new header here, top level header for fonts. You can see, and you can see I have a comment here, defining the various fonts that Emacs will use and then a second level header. We're going to set the font face. And then you see I have these three blocks here. I set face attribute default. That's the default font. I'm going to use JetBrains Mono because I have it installed. The height is going to be 110, so it's like a 11 point font. Weight will be medium. Then I also do a set face attribute for variable pitch font. So that will not be monospace fonts. That's your variable fonts. And you'll see variable fonts if you use things. For example, like the web browser in Emacs, E-W-W, when you're reading web pages, it's not monospace font. It's variable pitch font. I'm going to use Ubuntu font for stuff like that. And then set face attribute fixed pitch. So specify fixed pitch. I'm also going to use JetBrains Mono typically. This one and the default font should be the same probably. And then I have set face attribute for comment face and keyword face. So comment face, what I'm doing is I'm making comments be italicized. So right now in Emacs list, that's a comment. Emacs list comments start with these semicolons. Well, just for these comments to stand out, I want these to be italicized from now on. So I'm going to add that line. And then I also have keyword face italicized. Well, any kind of keywords in the document will also be italicized as well. And then one other thing, because I'm going to eventually start using the Emacs client, you know, the Emacs server. And then all my Emacs windows will be Emacs client windows. I've noticed fonts for whatever reason, even though all of this works just fine, just running Emacs the Emacs way, just typing Emacs without the server, right? But opening it as Emacs client windows, I've noticed I always have to add this line or else fonts just don't look right in the Emacs client. So add to list, default frame a list, and then set the font. And then I also set Q dash default line spacing to 0.12. So that's just obviously line spacing. Now let's see if that block of code actually works. I'm going to do a colon WQ to write and quit. Let's launch Emacs without the Emacs client. So just standard Emacs and you can already tell the font here. So this is our variable pitch font, the Ubuntu font. It actually is a little bigger, still small for purposes of this video. But it's definitely a better font than what we're using. I can actually read the mini buffer now. I can actually see what I'm typing and I'm not doing a good job of typing right now. But yeah, you can see the fonts are better. By the way, the comments, I told the comments to be italicized, right? So anything that is a commented line. So all these comments here in elist are now italicized font. So that was our new fonts section. And I added a second level heading but I don't think I really needed this because I don't know if I'm going to add anything else to this fonts section here. I think we pretty much covered that. The next thing I'm going to go ahead and do, there's a few things that I don't like about Emacs out of the box and things that most Emacs users either enable or disable. Most Emacs users are not going to need the toolbar and the menu bar. So the menu bar supports file, edit options, your standard menu on a GTK program, which is what Emacs is in this case. And then the toolbar has your icons that do various things like close and cut and save and all of that. You probably just want to go ahead and disable that. The other thing I want to do is I want to add line numbers to all of my files because I want to know what line number I'm actually on. So I'm going to go ahead and let's go ahead and paste a new section here for graphical user interface tweaks and do control X plus again to zoom in a little bit. So you can see what I'm doing and this is pretty straightforward. Menu dash bar dash mode, menu bar mode is displaying the menu. If it's set to negative one, it's turned off. Toolbar mode, negative one, turn off the toolbar. Scroll bar mode, negative one. I don't need a scroll bar on the side of the window. You really don't need that in Emacs. So just turn all of that stuff off. I just want a box that displays text, nothing else. And then the second level heading here, display line numbers and truncated lines. Global display line numbers mode is one, turn on line number mode and then global visual line mode T set to true. We should have line numbers after writing all of this. I'm going to do a colon WQ for write and quit, relaunch Emacs and then control X, control F for find file. And then let me navigate to dot config Emacs config.org. I'm getting tired of typing that as well. But already this looks much better. The fonts have straightened themselves out for some reason, right? They look a lot better all of a sudden, the line numbers. So that is nice. Yeah, syntax highlighting already without too much work. This is looking pretty good. We figured out how to use the package manager. We figured out how to add key bindings because we're going to add a lot of key bindings. There's going to be hundreds of key bindings that will eventually add to this thing. The fonts look good and the visual tweaks turning off the menu system and all of that. A couple of other things we need to go ahead and do because which key is such an important like integral part of most people's Emacs config. Let's go ahead and install which key. Everybody pretty much installs which key. So I'm going to put this block here. It's your standard use package block, right? Use package, which key installs the which key program tells Elpaca install which key. And yet, so on a net, I want you to which key mode one. So which key mode is one, turn it on, right? If it wasn't one, if it was negative one or something else, some value that's not one, it would be off, right? Then we have colon config and we set these various variables. So where should which key be? I set it to the bottom of the screen, for example. How much padding should it have? How many columns should it display? What is the separator? I'm going to use a right pointing arrow. So all of these variables should be kind of self-explanatory what they are. So that is which key. And let's go ahead and colon WQ to write and quit, restart Emacs. And it's installing which key. So then control WC to close that split, control X, control F for find file. I need to find a better key binding for find file. We'll eventually get to that as well. So now let's see if which key is working. Remember the general key binding section where I did space B plus other keys for the buffer key binding. So if I just do space B, and wait a second, there is all the key bindings, right? B will switch buffer, K will kill buffer, and I even get a description when I hover over it. I kind of would like to turn that off. We'll get to all of that. But yeah, which key is definitely working by do control X and nothing else. There are all the other key bindings that would work, control X plus something else, right? So that is which key. So that is nice to have working. And the very last thing I want to add is, you know, I mentioned we would eventually add table of contents to all of our org documents. Well, org is not set up for table of contents out of the box. I also want to set up org to use bullets instead of these asterisks for headers. It just makes things look a little nicer. So I'm going to go alphabetically as best I can with these top level headers. And I'm going to add a org mode section here. So I'm going to go ahead and paste this block here. So top level, org mode, and then second level, I've got two second level headers. We're going to enable the table of contents. We're also going to enable org bullets. Enabling the table of contents, you simply need to do a use package. Let me zoom in so you can see use package to see dash org is the name of program table of contents dash org. And then commands wanted to run this command to see dash org dash enable and then a knit ad hook org mode hook to see dash org dash enable. Now, if you're not familiar with Emacs list, you may be wondering what this is, but just know every mode has a hook. So org mode has a org mode hook. And we're just making sure that anytime we're in org mode, basically that to see dash org is enabled so we can have a table of contents. And then enabling the org bullets, very similar kinds of code, right? We're going to add hook or mode hook once again, and then we're going to add org in that mode. And we're also going to use package org bullets, install org bullets. And then after we install org bullets, ad hook to org mode hook. And then you can see we're going to turn on org bullets mode because it's set to one, right? So it turns the bullets on. Let me colon WQ to write and quit. And now let's load this up. It's installing the TOC dash org package control WC to close that split control X control L for fine file. And then dot config slash Emacs config dot org. And there we have it. We have our bullets. So now this is a much cleaner way to view a document instead of having all those asterisks because second level headers were two asterisks, you know, fifth level headers would be five asterisks. And it actually expands the asterisks, right? It's a little clunky to read just using bullets for the headers. I like that a lot. Let's go ahead and add one more top level header. And it needs to be called table of contents. You can label it anything, but then out to the side of it, space colon TOC colon. And now let me escape, let me write. So colon W. And as soon as I write it, there is our table of contents. It automatically gets generated. It automatically changes itself as I add more headings to an org document. I love these table of contents. And of course, if I click on something, for example, org mode, it'll just take me right to that in the document. So I know this very first video was very lengthy, but I really think that we had to get all of this set up on day one just to have a proper text editor that you can actually begin to work with. We had to talk about the package manager. We had to set up evil mode. We had to at least talk about how to set up key bindings because almost everybody's going to want to set key bindings right away. We had to talk about the fonts because the fonts and standard Emacs are terrible. We had to talk about getting rid of the menu bars, toolbar, like this is stuff that we just had to do in Witchkey. It's such an important program. Witchkey should probably just be a default part of Emacs. Somebody should actually put that as an issue on the Emacs issue board. Witchkey should just be baked in by now. So what I'm going to do is I'm going to go ahead and save this document. And I've created a new repository over on my GitLab. I'm going to call it configuring Emacs. So just look for my configuring Emacs repo on my dot files over on my GitLab. And what I'm going to do is for each one of these videos in this series, I will add a new directory with the config as it existed at that point in the series. So this will be video number one. So I titled this 01-lpaqa-evl-general just to give you an idea of what we did with the config. I'm going to go ahead and put the config over on my GitLab. And then, of course, that will be not just the config.org, but also the init.el and the early init.el as well. That way you guys can go grab these configs or you can clone the repository. That way you can pull down the new configs as we go through this series in the future. Now before I go, I need to thank a few special people. I need to thank the producers of this episode. Gabe James Maxim, my homies to bald man, Mitchell, Paul, Royal West, Armored Dragon, Bash, Potato, Chuck, Commander, Angry, George, Lee, Marshall, Methodist, Nate, Erion, Paul, Peace, Arch, Maduro, Polytech, Realities for the West Red Prophet, Rollin, Tools, Nebler, Willie, and Zenabit. These guys, they're my highest tier patrons over on Patreon without these guys. This fresh start with GNU Emacs, it would not have been possible. The show is also brought to you by each and every one of these fine ladies and gentlemen. All these names you're seeing on the screen right now, these are all my supporters over on Patreon. I don't have any corporate sponsors. I'm sponsored by you guys, the community. If you like my work, I'm going to see more videos about free and open source software like GNU Emacs. Peace. Getting started with Emacs is a lot of work, but it's so worth it.