How to get a cool and functional emacs setup

Table of Contents

Why Emacs?

Because emacs is very extensible, it can be used for literally anything including but not limited to talking in an irc,playing music,using it as your window manager!! and much more. It is also free software(free as in freedom and free as in price) so there is no spooky telemetry in the program, unlike vscode and you can even modify the source code to make your own emacs fork. Emacs is old and time tested, developers having been using it for decades so you won’t get any silly bugs in the program.

Getting started

After you installed Emacs create a file called init.el in ~/.emacs.d/, Lets start off by making emacs look nicer by adding these lines to the file

;; makes emacs loadtime faster by reducing the garbage collector
(setq gc-cons-threshold (* 50 1000 1000))

;;; --- UI --- ;;;

;; hides tool bar, menu bar and scroll bar
(tool-bar-mode -1)
(menu-bar-mode -1)
(scroll-bar-mode -1)

;; turns yes or no questions to y or n
(defalias 'yes-or-no-p 'y-or-n-p)

This hides the menu bar, tool bar and scroll bar they might be useful to some people ,but they look ugly so we’ll just remove them. It also reduces the garbage collection which makes startup time faster (note: this not change emacs daemon performance)

Changing the font

;; Change the font
(add-to-list 'default-frame-alist
	     '(font . "insert font name here"))

I recommend you use a Jetbrains font because it looks cool C;

Getting access to more packages/plugins

;; sets melpa as another package archive
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))

This make it so you will get access to more Emacs packages. Make sure to M-x package-refresh-contents after restarting your Emacs (M-x means Alt + x)

Epic Packages

Emacs packages are written in elisp a prorgamming that is used to configure emacs, these packages can make emacs even more awesomeeee

use-package

use-package is a package that makes it so packages load more efficiently to install it run: M-x package-install RET use-package RET and here is the code to enable it

Magit

Magit is the best fucking git frontend ever it is miles better than command line git, here’s how to install this amazing package M-x package-install RET magit RET

(use-package magit
:ensure t
:config
(setq magit-push-always-verify nil)
:bind
("C-c g" . magit-status)) ;; Magit keybinding 

To open Magit press C-c g, Here are some simple magit keybindings to get you started in magit.

Binding What the binding does
s Stage a file and/or a change
S Stage all files and changes
u Unstage a file and/or a change
U Unstage all files and changes
c c Create a new Commit(once you finished writing your commit press C-c C-c to actually commit it)
P u Push to upstream branch
P p Push to current push remote
l l To view the log

Magit documentation can be found here: https://magit.vc/manual/magit/
A helpful video made by Distrotube: https://invidious.snopyta.org/watch?v=XiX5US1xE

Evil-Mode

So you are a vim-lover and you can’t live without the vim keybindings, then this package is for you!. Evil-mode emulates vim inside Emacs allowing you to smoothly migrate from vim to emacs.

(use-package evil) ;; vim emulation
(evil-mode 1)

Doom-modeline

Let’s face it the default Emacs modeline/statusbar is ugly af. Doom modeline is a modern replacement to the default Emacs modeline.

(use-package doom-modeline
  :ensure t
  :init (doom-modeline-mode 1))

Make sure to run M-x all-the-icons-install-fonts RET to install the fonts required for the modeline to look really cool.

Themes

There are a lot of themes for Emacs, but the theme package I use is the doom-themes package. Why? because it is a mega pack of themes containing over 50 unique themes.
Github page: https://github.com/doomemacs/themes

(use-package doom-themes
    :ensure t
    :config
    (load-theme 'pick-your-theme-from-the-github-page t)
    ;; (load-theme 'doom-molokai t)
    ;; uncomment line above to use my favorite theme
    (doom-themes-org-config)
    (doom-themes-visual-bell-config))

Dashboard

The default looks pretty bad as well so lets change it to something that will look much better

(use-package dashboard
  :ensure t
  :config
  (dashboard-setup-startup-hook)
  (setq dashboard-startup-banner "/path/to/your/avatar/image")
  (setq dashboard-banner-logo-title "Insert cool message here")
  (setq dashboard-set-heading-icons t)
  (setq dashboard-set-file-icons t))

;; Makes the dashboard buffer the default for when you use the emacs daemon
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))

Now you can have your own custom avatar and quote in your dashboard C:

Other niche tweaks

Stop Emacs from making backup files and autosaving stuff

;; tells emacs to not make backups and not to autosave stuff
(setq make-backup-files nil)
(setq auto-save-default nil)

Line numbers

;; line numbers in all buffer
(global-display-line-numbers-mode)

Sometimes you don’t want line numbers, like when you are using a terminal in emacs. Here is the code to disable line-numbers in some Emacs modes

  ;; disable line numbers for some modes
(dolist (mode '(org-mode-hook ;; org document
		term-mode-hook ;; terminal
		vterm-mode-hook ;; another terminal
		shell-mode-hook ;; shell
		eshell-mode-hook ;; another shell
		treemacs-mode-hook ;; filetree
		completion-list-mode-hook ;; auto completion buffer
		org-agenda-mode-hook ;; agenda viewer
		tetris-mode-hook)) ;; tetris
  (add-hook mode (lambda () (display-line-numbers-mode 0))))

Screenshots

After following this guide your emacs may look something similar to this: emacs_screenshot.png emacs_screenshot_2.png