about summary refs log tree commit diff
path: root/emacs-elisp
diff options
context:
space:
mode:
authorvenomade <venomade@venomade.com>2025-02-27 17:06:42 +0000
committervenomade <venomade@venomade.com>2025-02-27 17:06:42 +0000
commit1cace80e4832a5d250ef4b7ccd687996563fb01b (patch)
treedb1ced91d1382ca3cabe37dbae00da51231d6a99 /emacs-elisp
Add old dotfiles
Diffstat (limited to 'emacs-elisp')
-rw-r--r--emacs-elisp/config.el47
-rw-r--r--emacs-elisp/config/fonts.el74
-rw-r--r--emacs-elisp/config/functions.el50
-rw-r--r--emacs-elisp/config/misc.el43
-rw-r--r--emacs-elisp/config/orgmode.el6
-rw-r--r--emacs-elisp/config/project.el10
-rw-r--r--emacs-elisp/config/shortcuts.el33
-rw-r--r--emacs-elisp/config/straight.el15
-rw-r--r--emacs-elisp/config/theme.el5
-rw-r--r--emacs-elisp/init.el4
-rw-r--r--emacs-elisp/languages/c-cpp.el4
-rw-r--r--emacs-elisp/languages/clojure.el5
-rw-r--r--emacs-elisp/languages/rust.el11
-rw-r--r--emacs-elisp/languages/scheme.el10
-rw-r--r--emacs-elisp/packages/avy.el6
-rw-r--r--emacs-elisp/packages/cape.el11
-rw-r--r--emacs-elisp/packages/corfu.el7
-rw-r--r--emacs-elisp/packages/counsel.el11
-rw-r--r--emacs-elisp/packages/devdocs.el5
-rw-r--r--emacs-elisp/packages/flycheck.el6
-rw-r--r--emacs-elisp/packages/lsp.el13
-rw-r--r--emacs-elisp/packages/magit.el3
-rw-r--r--emacs-elisp/packages/movetext.el4
-rw-r--r--emacs-elisp/packages/multicursor.el6
-rw-r--r--emacs-elisp/packages/rainbow.el4
-rw-r--r--emacs-elisp/packages/simplemdln.el15
-rw-r--r--emacs-elisp/packages/smartparens.el5
-rw-r--r--emacs-elisp/packages/undotree.el6
-rw-r--r--emacs-elisp/packages/whichkey.el5
29 files changed, 424 insertions, 0 deletions
diff --git a/emacs-elisp/config.el b/emacs-elisp/config.el
new file mode 100644
index 0000000..53412e1
--- /dev/null
+++ b/emacs-elisp/config.el
@@ -0,0 +1,47 @@
+(defun dir-load (dir config)
+  (load-file
+   (expand-file-name
+    (concat dir "/" config ".el")
+    user-emacs-directory)))
+
+(defun cfg-load (config)
+  (dir-load "config" config))
+
+(defun pkg-load (config)
+  (dir-load "packages" config))
+
+(defun lang-load (config)
+  (dir-load "languages" config))
+
+;; Configs
+(cfg-load "straight")
+(cfg-load "theme")
+(cfg-load "fonts")
+(cfg-load "functions")
+(cfg-load "shortcuts")
+(cfg-load "misc")
+(cfg-load "orgmode")
+(cfg-load "project")
+
+;; Packages
+(pkg-load "avy")
+(pkg-load "corfu")
+(pkg-load "cape")
+(pkg-load "flycheck")
+(pkg-load "smartparens")
+(pkg-load "devdocs")
+(pkg-load "counsel")
+(pkg-load "movetext")
+(pkg-load "whichkey")
+(pkg-load "lsp")
+(pkg-load "magit")
+(pkg-load "undotree")
+(pkg-load "simplemdln")
+(pkg-load "multicursor")
+(pkg-load "rainbow")
+
+;; Languages
+(lang-load "rust")
+(lang-load "c-cpp")
+(lang-load "scheme")
+(lang-load "clojure")
diff --git a/emacs-elisp/config/fonts.el b/emacs-elisp/config/fonts.el
new file mode 100644
index 0000000..7e951af
--- /dev/null
+++ b/emacs-elisp/config/fonts.el
@@ -0,0 +1,74 @@
+;; Set Fonts and their size
+(defvar customfontsettings
+  '((mono . "Iosevka")
+    (variabl . "RobotoCondensed")
+    (size . 14)))
+
+(set-face-attribute 'variable-pitch nil
+                    :font (cdr (assoc 'variabl customfontsettings))
+                    :height (* (cdr (assoc 'size customfontsettings)) 10)
+                    :weight 'regular)
+
+(set-face-attribute 'fixed-pitch nil
+                    :font (cdr (assoc 'mono customfontsettings))
+                    :height (* (cdr (assoc 'size customfontsettings)) 10)
+                    :weight 'regular)
+
+(set-face-attribute 'default nil
+                    :font (cdr (assoc 'mono customfontsettings))
+                    :height (* (cdr (assoc 'size customfontsettings)) 10)
+                    :weight 'regular)
+
+
+(add-to-list 'default-frame-alist
+             `(font . ,(concat (cdr (assoc 'mono customfontsettings)) "-" (number-to-string (cdr (assoc 'size customfontsettings))))))
+
+(set-face-attribute 'font-lock-comment-face nil
+                    :slant 'italic)
+
+(set-face-attribute 'font-lock-keyword-face nil
+                    :slant 'italic)
+
+;; Set mode-line font
+(set-face-attribute 'mode-line nil :inherit 'variable-pitch)
+(set-face-attribute 'mode-line-inactive nil :inherit 'variable-pitch)
+
+;; Set Usable Ligatures
+(dolist (char/ligature-re
+     `((?-  . ,(rx (or (or "-->" "-<<" "->>" "-|" "-~" "-<" "->") (+ "-"))))
+       (?/  . ,(rx (or (or "/==" "/=" "/>" "/**" "/*") (+ "/"))))
+       (?*  . ,(rx (or (or "*>" "*/") (+ "*"))))
+       (?<  . ,(rx (or (or "<<=" "<<-" "<|||" "<==>" "<!--" "<=>" "<||" "<|>" "<-<"
+	 "<==" "<=<" "<-|" "<~>" "<=|" "<~~" "<$>" "<+>" "</>"
+	 "<*>" "<->" "<=" "<|" "<:" "<>"  "<$" "<-" "<~" "<+"
+	 "</" "<*")
+	   (+ "<"))))
+       (?:  . ,(rx (or (or ":?>" "::=" ":>" ":<" ":?" ":=") (+ ":"))))
+       (?=  . ,(rx (or (or "=>>" "==>" "=/=" "=!=" "=>" "=:=") (+ "="))))
+       (?!  . ,(rx (or (or "!==" "!=") (+ "!"))))
+       (?>  . ,(rx (or (or ">>-" ">>=" ">=>" ">]" ">:" ">-" ">=") (+ ">"))))
+       (?&  . ,(rx (+ "&")))
+       (?|  . ,(rx (or (or "|->" "|||>" "||>" "|=>" "||-" "||=" "|-" "|>"
+	 "|]" "|}" "|=")
+	   (+ "|"))))
+       (?.  . ,(rx (or (or ".?" ".=" ".-" "..<") (+ "."))))
+       (?+  . ,(rx (or "+>" (+ "+"))))
+       (?\[ . ,(rx (or "[<" "[|")))
+       (?\{ . ,(rx "{|"))
+       (?\? . ,(rx (or (or "?." "?=" "?:") (+ "?"))))
+       (?#  . ,(rx (or (or "#_(" "#[" "#{" "#=" "#!" "#:" "#_" "#?" "#(")
+	   (+ "#"))))
+       (?\; . ,(rx (+ ";")))
+       (?_  . ,(rx (or "_|_" "__")))
+       (?~  . ,(rx (or "~~>" "~~" "~>" "~-" "~@")))
+       (?$  . ,(rx "$>"))
+       (?^  . ,(rx "^="))
+       (?\] . ,(rx "]#"))))
+    (let ((char (car char/ligature-re))
+    (ligature-re (cdr char/ligature-re)))
+(set-char-table-range composition-function-table char
+	  `([,ligature-re 0 font-shape-gstring]))))
+
+;; Font Zooming
+(global-set-key (kbd "C-=") 'text-scale-increase)
+(global-set-key (kbd "C--") 'text-scale-decrease)
diff --git a/emacs-elisp/config/functions.el b/emacs-elisp/config/functions.el
new file mode 100644
index 0000000..f8f587b
--- /dev/null
+++ b/emacs-elisp/config/functions.el
@@ -0,0 +1,50 @@
+;; Pop Out Buffer
+;;; Pops the current buffer out into it's own frame.
+(defun pop-out-buffer-into-frame ()
+  (interactive)
+  (let* ((current-buffer (current-buffer))
+         (previous-buffer (other-buffer (current-buffer) t)))  ;; Get the previous buffer in the window
+    ;; Switch the current window back to the previous buffer
+    (set-window-buffer (selected-window) previous-buffer)
+    ;; Create a new frame and show the original buffer there
+    (select-frame (make-frame))
+    (set-window-buffer (selected-window) current-Kill)))
+;; Kill Current Buffer
+;;; kill-this-buffer doesn't work in emacs 30 (relies on menubar visibility?) so this is a small implementation of window.el's /C-x 4 0/.
+(defun kill-current-buffer()
+  (interactive)
+  (let ((buffer-to-kill (current-buffer))))
+  (kill-buffer (current-buffer)))
+
+;; Duplicate Line (stolen from https://github.com/rexim/dotfiles)
+;;; TODO: Expand function to be able duplicate region if region selected
+(defun duplicate-line ()
+  (interactive)
+  (let ((column (- (point) (point-at-bol)))
+        (line (let ((s (thing-at-point 'line t)))
+                (if s (string-remove-suffix "\n" s) ""))))
+    (move-end-of-line 1)
+    (newline)
+    (insert line)
+    (move-beginning-of-line 1)
+    (forward-char column)))
+;; Use bind-key to override other bindings
+(keymap-global-set "C-c y d" 'duplicate-line)
+
+;; Vim's o and S-o (stolen from https://stackoverflow.com/a/2173393)
+(defun vi-open-line-above ()
+  (interactive)
+  (unless (bolp)
+    (beginning-of-line))
+  (newline)
+  (forward-line -1)
+  (indent-according-to-mode))
+
+(defun vi-open-line-below ()
+  (interactive)
+  (unless (eolp)
+    (end-of-line))
+  (newline-and-indent))
+
+(keymap-global-set "C-c O" 'vi-open-line-below)
+(keymap-global-set "C-c o" 'vi-open-line-above)
diff --git a/emacs-elisp/config/misc.el b/emacs-elisp/config/misc.el
new file mode 100644
index 0000000..631c1ed
--- /dev/null
+++ b/emacs-elisp/config/misc.el
@@ -0,0 +1,43 @@
+;; Hide Warnings
+(setq warning-minimum-level :emergency)
+
+;; Disable Bell
+(setq ring-bell-function 'ignore)
+
+;; Add Scroll Margin
+(setq scroll-margin 12)
+
+;; Setup Line Numbers
+(add-hook 'prog-mode-hook 'display-line-numbers-mode)
+(setq display-line-numbers-type 'relative)
+(global-visual-line-mode t)
+(add-hook 'prog-mode-hook (lambda () (visual-line-mode -1)))
+(setq-default truncate-lines t)
+
+;; Use Spaces over Tabs
+(setq-default indent-tabs-mode nil)
+(setq-default tab-width 2)
+(setq tab-stop-list (number-sequence 2 200 2))
+
+;; Highlight Column
+(setq-default display-fill-column-indicator-column 80)
+(add-hook 'prog-mode-hook #'display-fill-column-indicator-mode)
+
+;; Disable GUI Features
+(menu-bar-mode -1)
+(tool-bar-mode -1)
+(scroll-bar-mode -1)
+
+;; Set Emacs auto-save directories
+(setq backup-directory-alist
+      `(("." . ,(concat user-emacs-directory "backups"))))
+(setq auto-save-file-name-transforms
+      `(("." ,(concat user-emacs-directory "autosaves") t)))
+(setq lock-file-name-transforms
+      `(("." ,(concat user-emacs-directory "lock") t)))
+
+;; Go back to old position on file open
+(save-place-mode 1)
+
+;; Disable Fringes
+(set-fringe-mode 0)
diff --git a/emacs-elisp/config/orgmode.el b/emacs-elisp/config/orgmode.el
new file mode 100644
index 0000000..c8e436b
--- /dev/null
+++ b/emacs-elisp/config/orgmode.el
@@ -0,0 +1,6 @@
+;; Add shorthands for Org Functions
+(require 'org-tempo)
+
+;; Use both Mono and Variable fonts in a single buffer
+(use-package mixed-pitch)
+(add-hook 'org-mode-hook 'mixed-pitch-mode)
diff --git a/emacs-elisp/config/project.el b/emacs-elisp/config/project.el
new file mode 100644
index 0000000..f0efb03
--- /dev/null
+++ b/emacs-elisp/config/project.el
@@ -0,0 +1,10 @@
+(require 'project)
+
+(keymap-global-set "C-c p b" 'project-list-buffers)
+(keymap-global-set "C-c p c" 'project-compile)
+(keymap-global-set "C-c p e" 'project-dired)
+(keymap-global-set "C-c p f" 'project-find-file)
+(keymap-global-set "C-c f p" 'project-find-file)
+(keymap-global-set "C-c p g" 'project-find-regexp)
+(keymap-global-set "C-c p o" 'project-find-dir)
+(keymap-global-set "C-c p p" 'project-switch-project)
diff --git a/emacs-elisp/config/shortcuts.el b/emacs-elisp/config/shortcuts.el
new file mode 100644
index 0000000..16024df
--- /dev/null
+++ b/emacs-elisp/config/shortcuts.el
@@ -0,0 +1,33 @@
+;; Replace Emacs default behaviour
+(keymap-global-set "C-x b" 'counsel-switch-buffer)
+(global-set-key (kbd "C-x C-c") (lookup-key global-map (kbd "C-c")))
+
+;; Rebind Emacs Quit
+(keymap-global-set "C-M-S-q" 'save-buffers-kill-terminal)
+
+;; Custom C-c keybinds
+(keymap-global-set "C-c e c" (lambda () (interactive) (load-file "~/.emacs.d/init.el")))
+
+(keymap-global-set "C-c f c" (lambda () (interactive) (find-file "~/.emacs.d/config.el")))
+(keymap-global-set "C-c f t" (lambda () (interactive) (find-file "~/Documents/TODO.org")))
+(keymap-global-set "C-c f b" (lambda () (interactive) (find-file "~/Documents/Bookmarks.org")))
+
+(keymap-global-set "C-c b p" 'previous-buffer)
+(keymap-global-set "C-c b n" 'next-buffer)
+(keymap-global-set "C-c b r" 'revert-buffer)
+
+(keymap-global-set "C-c e b" 'eval-buffer)
+(keymap-global-set "C-c e r" 'eval-region)
+(keymap-global-set "C-c e s" 'eshell)
+
+(keymap-global-set "C-c r" 'replace-regexp)
+
+(keymap-global-set "C-c y a" 'copy-from-above-command)
+
+(keymap-global-set "C-c v" 'scroll-other-window)
+(keymap-global-set "C-c V" 'scroll-other-window-down)
+
+(keymap-global-set "C-c w n" 'other-window)
+(keymap-global-set "C-c w f" 'other-window)
+(keymap-global-set "C-c w p" (lambda () (interactive) (other-window -1)))
+(keymap-global-set "C-c w b" (lambda () (interactive) (other-window -1)))
diff --git a/emacs-elisp/config/straight.el b/emacs-elisp/config/straight.el
new file mode 100644
index 0000000..06592a5
--- /dev/null
+++ b/emacs-elisp/config/straight.el
@@ -0,0 +1,15 @@
+;; Setup the straight package manager to use the use-package syntax
+(defvar bootstrap-version)
+(let ((bootstrap-file
+	 (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
+	(bootstrap-version 6))
+  (unless (file-exists-p bootstrap-file)
+    (with-current-buffer
+	  (url-retrieve-synchronously
+	   "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
+	   'silent 'inhibit-cookies)
+	(goto-char (point-max))
+	(eval-print-last-sexp)))
+  (load bootstrap-file nil 'nomessage))
+
+(setq straight-use-package-by-default t)
diff --git a/emacs-elisp/config/theme.el b/emacs-elisp/config/theme.el
new file mode 100644
index 0000000..8e812b5
--- /dev/null
+++ b/emacs-elisp/config/theme.el
@@ -0,0 +1,5 @@
+;; Set Theme
+(load-theme 'modus-vivendi t)
+
+;; Add Padding
+(set-window-margins nil 0)
diff --git a/emacs-elisp/init.el b/emacs-elisp/init.el
new file mode 100644
index 0000000..c2918ad
--- /dev/null
+++ b/emacs-elisp/init.el
@@ -0,0 +1,4 @@
+(load-file
+ (expand-file-name
+  "config.el"
+  user-emacs-directory))
diff --git a/emacs-elisp/languages/c-cpp.el b/emacs-elisp/languages/c-cpp.el
new file mode 100644
index 0000000..f99c948
--- /dev/null
+++ b/emacs-elisp/languages/c-cpp.el
@@ -0,0 +1,4 @@
+(add-hook 'c++-mode-hook #'lsp)
+(add-hook 'c-mode-hook #'lsp)
+(setq c-default-style "linux"
+      c-basic-offset 2)
diff --git a/emacs-elisp/languages/clojure.el b/emacs-elisp/languages/clojure.el
new file mode 100644
index 0000000..7e0e5d0
--- /dev/null
+++ b/emacs-elisp/languages/clojure.el
@@ -0,0 +1,5 @@
+;; Clojure
+(use-package clojure-mode)
+(use-package cider)
+(use-package flycheck-clj-kondo)
+(use-package clj-refactor)
diff --git a/emacs-elisp/languages/rust.el b/emacs-elisp/languages/rust.el
new file mode 100644
index 0000000..212a575
--- /dev/null
+++ b/emacs-elisp/languages/rust.el
@@ -0,0 +1,11 @@
+(use-package rust-mode)
+(setq rust-mode-treesitter-derive t)
+
+(setenv "PATH" (concat (concat
+                        (concat (expand-file-name "~/.cargo/bin") ":")
+                        (getenv "PATH"))))
+
+(setq exec-path (append exec-path (list (expand-file-name "~/.cargo/bin"))))
+
+(use-package flycheck-rust)
+(add-hook 'flycheck-mode-hook #'flycheck-rust-setup)
diff --git a/emacs-elisp/languages/scheme.el b/emacs-elisp/languages/scheme.el
new file mode 100644
index 0000000..7fdcd5d
--- /dev/null
+++ b/emacs-elisp/languages/scheme.el
@@ -0,0 +1,10 @@
+;; TODO: Write this header
+
+(use-package geiser)
+(use-package geiser-guile)
+(use-package flycheck-guile)
+
+(setq geiser-default-implementation 'guile)
+(setq geiser-active-implementations '(guile))
+ (setq geiser-implementations-alist '(((regexp "\\.scm$") guile)))
+(setq geiser-guile-binary "guile3.0")
diff --git a/emacs-elisp/packages/avy.el b/emacs-elisp/packages/avy.el
new file mode 100644
index 0000000..1d6cae8
--- /dev/null
+++ b/emacs-elisp/packages/avy.el
@@ -0,0 +1,6 @@
+;; Avy keybinds superfast cursor movement
+;;; https://github.com/abo-abo/avy
+(use-package avy)
+(setq avy-keys '(?a ?r ?s ?t ?n ?e ?i ?o)
+      avy-all-windows nil)
+(bind-key* "C-q" 'avy-goto-char)
diff --git a/emacs-elisp/packages/cape.el b/emacs-elisp/packages/cape.el
new file mode 100644
index 0000000..2e9777c
--- /dev/null
+++ b/emacs-elisp/packages/cape.el
@@ -0,0 +1,11 @@
+;; Cape adds setting what completions are used where
+;;; https://github.com/minad/cape
+(use-package cape)
+(keymap-global-set "C-c c" 'cape-prefix-map)
+
+;; Fall back to dabbrev without other completions
+(setq dabbrev-case-fold-search t)
+;;(add-to-list 'completion-at-point-functions #'cape-dabbrev)
+(add-hook 'completion-at-point-functions #'cape-dabbrev)
+(add-hook 'completion-at-point-functions #'cape-file)
+(add-hook 'completion-at-point-functions #'cape-elisp-block)
diff --git a/emacs-elisp/packages/corfu.el b/emacs-elisp/packages/corfu.el
new file mode 100644
index 0000000..77dd003
--- /dev/null
+++ b/emacs-elisp/packages/corfu.el
@@ -0,0 +1,7 @@
+;; Corfu enables in-text-buffer completion
+;;; https://github.com/minad/corfu
+(use-package corfu)
+(keymap-unset corfu-map "RET")
+(setq corfu-auto t)
+(global-corfu-mode 1)
+(add-hook 'prog-mode-hook 'corfu-popupinfo-mode)
diff --git a/emacs-elisp/packages/counsel.el b/emacs-elisp/packages/counsel.el
new file mode 100644
index 0000000..7cb272e
--- /dev/null
+++ b/emacs-elisp/packages/counsel.el
@@ -0,0 +1,11 @@
+;; Counsel improves Emacs' minibuffer in many ways
+;;; https://github.com/abo-abo/swiper
+(use-package counsel)
+(counsel-mode 1)
+(ivy-mode 1)
+
+(keymap-global-set "C-c f r" 'counsel-buffer-or-recentf)
+(keymap-global-set "C-c f f" 'counsel-fzf)
+(keymap-global-set "C-c f g" 'counsel-rg)
+
+(keymap-global-set "C-c s" 'swiper)
diff --git a/emacs-elisp/packages/devdocs.el b/emacs-elisp/packages/devdocs.el
new file mode 100644
index 0000000..ae13b7c
--- /dev/null
+++ b/emacs-elisp/packages/devdocs.el
@@ -0,0 +1,5 @@
+;; Devdocs provides documentation browsing within Emacs
+;;; https://github.com/astoff/devdocs.el
+(use-package devdocs)
+;; TODO: Automatically installed documentation if not installed
+(keymap-global-set "C-c d" 'devdocs-lookup)
diff --git a/emacs-elisp/packages/flycheck.el b/emacs-elisp/packages/flycheck.el
new file mode 100644
index 0000000..9a66c22
--- /dev/null
+++ b/emacs-elisp/packages/flycheck.el
@@ -0,0 +1,6 @@
+;; Flycheck shows syntax errors for many languages
+;;; https://github.com/flycheck/flycheck
+(use-package flycheck)
+(add-hook 'prog-mode-hook 'flycheck-mode)
+(setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc))
+(setq flycheck-indication-mode nil)
diff --git a/emacs-elisp/packages/lsp.el b/emacs-elisp/packages/lsp.el
new file mode 100644
index 0000000..ee02bd3
--- /dev/null
+++ b/emacs-elisp/packages/lsp.el
@@ -0,0 +1,13 @@
+;; LSP Mode adds LSP Support to Emacs
+;;; https://github.com/emacs-lsp/lsp-mode
+(use-package lsp-mode)
+(setq lsp-keymap-prefix "C-c l")
+(setq gc-cons-threshold 100000000)
+(setq read-process-output-max (* 1024 1024))
+(setq lsp-headerline-breadcrumb-enable nil)
+
+(use-package lsp-ui)
+
+;; Dependency for LSP Completion
+(use-package yasnippet)
+(yas-global-mode 1)
diff --git a/emacs-elisp/packages/magit.el b/emacs-elisp/packages/magit.el
new file mode 100644
index 0000000..d5736bf
--- /dev/null
+++ b/emacs-elisp/packages/magit.el
@@ -0,0 +1,3 @@
+;; Magit is a fast GIT GUI in Elisp
+;;; https://github.com/magit/magit
+(use-package magit)
diff --git a/emacs-elisp/packages/movetext.el b/emacs-elisp/packages/movetext.el
new file mode 100644
index 0000000..c1a58bd
--- /dev/null
+++ b/emacs-elisp/packages/movetext.el
@@ -0,0 +1,4 @@
+;; Move Text up and down easily
+(use-package move-text)
+(keymap-global-set "M-p" 'move-text-up)
+(keymap-global-set "M-n" 'move-text-down)
diff --git a/emacs-elisp/packages/multicursor.el b/emacs-elisp/packages/multicursor.el
new file mode 100644
index 0000000..664f66f
--- /dev/null
+++ b/emacs-elisp/packages/multicursor.el
@@ -0,0 +1,6 @@
+;; Multi Cursors enable easier editing than built in rectangles
+;;; https://github.com/magnars/multiple-cursors.el
+(use-package multiple-cursors)
+(keymap-global-set "C-c m" 'mc/edit-lines)
+
+;; TODO: Find out more ways to use multicursors
diff --git a/emacs-elisp/packages/rainbow.el b/emacs-elisp/packages/rainbow.el
new file mode 100644
index 0000000..7d8a44f
--- /dev/null
+++ b/emacs-elisp/packages/rainbow.el
@@ -0,0 +1,4 @@
+;; Rainbow Delimiters colours parentheses and other delimiters for visual matching
+;;; https://github.com/Fanael/rainbow-delimiters
+(use-package rainbow-delimiters)
+(add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
diff --git a/emacs-elisp/packages/simplemdln.el b/emacs-elisp/packages/simplemdln.el
new file mode 100644
index 0000000..5f45e4c
--- /dev/null
+++ b/emacs-elisp/packages/simplemdln.el
@@ -0,0 +1,15 @@
+;; Simple Modeline replaces the default modeline with a minimal one
+;;; https://github.com/gexplorer/simple-modeline
+(use-package simple-modeline)
+
+(setq simple-modeline-segments
+'((;;simple-modeline-segment-modified
+   simple-modeline-segment-buffer-name
+   simple-modeline-segment-position)
+  (simple-modeline-segment-vc
+   ;;simple-modeline-segment-minor-modes
+   simple-modeline-segment-misc-info
+   simple-modeline-segment-process
+   simple-modeline-segment-major-mode)))
+
+(simple-modeline-mode 1)
diff --git a/emacs-elisp/packages/smartparens.el b/emacs-elisp/packages/smartparens.el
new file mode 100644
index 0000000..7c1d776
--- /dev/null
+++ b/emacs-elisp/packages/smartparens.el
@@ -0,0 +1,5 @@
+;; Smartparens is a package for LISP editing that helps with parentheses paralysis
+;;; https://github.com/Fuco1/smartparens
+(use-package smartparens)
+(require 'smartparens-config)
+(add-hook 'prog-mode-hook 'smartparens-mode)
diff --git a/emacs-elisp/packages/undotree.el b/emacs-elisp/packages/undotree.el
new file mode 100644
index 0000000..02ec1df
--- /dev/null
+++ b/emacs-elisp/packages/undotree.el
@@ -0,0 +1,6 @@
+;; Undo-Tree replaces the normal undo with advanced Undo Control
+;;; https://gitlab.com/tsc25/undo-tree
+(use-package undo-tree)
+(global-undo-tree-mode 1)
+(setq undo-tree-history-directory-alist
+      `(("." . ,(concat user-emacs-directory "undo"))))
diff --git a/emacs-elisp/packages/whichkey.el b/emacs-elisp/packages/whichkey.el
new file mode 100644
index 0000000..cd2eb1f
--- /dev/null
+++ b/emacs-elisp/packages/whichkey.el
@@ -0,0 +1,5 @@
+(use-package which-key)
+(setq which-key-show-early-on-C-h t)
+(setq which-key-idle-delay 10000)
+(setq which-key-idle-secondary-delay 0.05)
+(which-key-mode 1)