Files
nixos/configs/emacs/config.org
T
2025-08-22 11:55:03 -04:00

731 lines
25 KiB
Org Mode

#+TITLE:LM's Emacs Config
#+Author: Liam Malone (LM)
#+DESCRIPTION: LM's personal Emacs config
#+STARTUP: showeverything
#+OPTIONS: toc:2
* TABLE OF CONTENTS :toc:
- [[#important-programs-to-load-first][IMPORTANT PROGRAMS TO LOAD FIRST]]
- [[#elpaca-package-manager][Elpaca Package Manager]]
- [[#load-evil-mode][Load Evil Mode]]
- [[#general-keybindings][General Keybindings]]
- [[#all-the-icons][ALL THE ICONS]]
- [[#autosave][AUTOSAVE]]
- [[#company][COMPANY]]
- [[#dashboard][DASHBOARD]]
- [[#diminish][DIMINISH]]
- [[#drag-stuff][DRAG-STUFF]]
- [[#flycheck][FLYCHECK]]
- [[#fonts][FONTS]]
- [[#setting-the-font-face][Setting The Font Face]]
- [[#zoom-inout][ZOOM IN/OUT]]
- [[#gnuplot][GNUPLOT]]
- [[#image-dir-ed][IMAGE DIR-ED]]
- [[#indentingtabs][INDENTING/TABS]]
- [[#ligatures][LIGATURES]]
- [[#markdown-mode][MARKDOWN MODE]]
- [[#org-download][ORG DOWNLOAD]]
- [[#pulse][PULSE]]
- [[#pdf-tools][PDF TOOLS]]
- [[#projectile][PROJECTILE]]
- [[#rainbow-mode][RAINBOW MODE]]
- [[#reload-emacs][RELOAD EMACS]]
- [[#shells-and-terminals][SHELLS AND TERMINALS]]
- [[#eshell][ESHELL]]
- [[#sudo-edit][SUDO EDIT]]
- [[#theme][THEME]]
- [[#transparency][TRANSPARENCY]]
- [[#gui-tweaks][GUI TWEAKS]]
- [[#disable-menubar-toolbars-and-scrollbars][DISABLE MENUBAR, TOOLBARS AND SCROLLBARS]]
- [[#display-line-numbers-and-truncated-lines][DISPLAY LINE NUMBERS AND TRUNCATED LINES]]
- [[#ivy-counsel][IVY (COUNSEL)]]
- [[#language-support][LANGUAGE SUPPORT]]
- [[#org-mode][ORG MODE]]
- [[#enabling-table-of-contents][ENABLING TABLE OF CONTENTS]]
- [[#enabling-org-bullets][ENABLING ORG BULLETS]]
- [[#source-code-block-tag-expansion][SOURCE CODE BLOCK TAG EXPANSION]]
- [[#which-key][WHICH-KEY]]
* IMPORTANT PROGRAMS TO LOAD FIRST
** Elpaca Package Manager
#+begin_src emacs-lisp
(defvar elpaca-installer-version 0.6)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil
:files (:defaults (:exclude "extensions"))
:build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
(build (expand-file-name "elpaca/" elpaca-builds-directory))
(order (cdr elpaca-order))
(default-directory repo))
(add-to-list 'load-path (if (file-exists-p build) build repo))
(unless (file-exists-p repo)
(make-directory repo t)
(when (< emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err
(if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (call-process "git" nil buffer t "clone"
(plist-get order :repo) repo)))
((zerop (call-process "git" nil buffer t "checkout"
(or (plist-get order :ref) "--"))))
(emacs (concat invocation-directory invocation-name))
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
((require 'elpaca))
((elpaca-generate-autoloads "elpaca" repo)))
(kill-buffer buffer)
(error "%s" (with-current-buffer buffer (buffer-string))))
((error) (warn "%s" err) (delete-directory repo 'recursive))))
(unless (require 'elpaca-autoloads nil t)
(require 'elpaca)
(elpaca-generate-autoloads "elpaca" repo)
(load "./elpaca-autoloads")))
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
;; Install use-package support
(elpaca elpaca-use-package
;; Enable :elpaca use-package keyword.
(elpaca-use-package-mode)
;; Assume :elpaca t unless otherwise specified.
(setq elpaca-use-package-by-default t))
;; Block until current queue processed.
(elpaca-wait)
;;When installing a package which modifies a form used at the top-level
;;(e.g. a package which adds a use-package key word),
;;use `elpaca-wait' to block until that package has been installed/configured.
;;For example:
;;(use-package general :demand t)
;;(elpaca-wait)
;;Turns off elpaca-use-package-mode current declartion
;;Note this will cause the declaration to be interpreted immediately (not deferred).
;;Useful for configuring built-in emacs features.
;;(use-package emacs :elpaca nil :config (setq ring-bell-function #'ignore))
;; Don't install anything. Defer execution of BODY
;;(elpaca nil (message "deferred"))
#+end_src
** Load Evil Mode
#+begin_src emacs-lisp
;; Expands to: (elpaca evil (use-package evil :demand t))
(use-package evil
:bind (:map evil-normal-state-map
("<C-u>" . evil-scroll-page-up))
:init ;; tweak evil's configuration before loading it
(setq evil-want-integration t) ;; This is optional since it's already set to t by default.
(setq evil-respect-visual-line-mode t)
(setq evil-want-keybinding nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(evil-mode))
(use-package evil-collection
:after evil
:config
(setq evil-collection-mode-list '(dashboard dired ibuffer))
(evil-collection-init))
#+end_src
** General Keybindings
#+begin_src emacs-lisp
(use-package general
:config
(general-evil-setup)
;; set 'SPC' as global leader key
(general-create-definer lm/leader-keys
:states '(normal insert visual emacs)
:keymaps 'override
:prefix "SPC" ;; set leader
:global-prefix "M-SPC") ;; access leader in insert mode
(lm/leader-keys
"b" '(:ignore t :wk "buffer")
"b b" '(switch-to-buffer :wk "Switch buffer")
"b i" '(ibuffer :wk "Ibuffer")
"b k" '(kill-this-buffer :wk "Kill this buffer")
"b n" '(next-buffer :wk "Next buffer")
"b p" '(previous-buffer :wk "Previous buffer")
"b r" '(revert-buffer :wk "Reload buffer"))
(lm/leader-keys
"e" '(:ignore t :wk "Eshell/Evaluate")
"e b" '(eval-buffer :wk "Evaluate elisp in buffer")
"e d" '(eval-defun :wk "Evaluate defun containing or after point")
"e e" '(eval-expression :wk "Evaluate an elisp expression")
"e l" '(eval-last-sexp :wk "Evaluate elisp expression before point")
"e r" '(eval-region :wk "Evaluate elisp in region")
"e h" '(counsel-esh-history :wk "Eshell history")
"e s" '(eshell :wk "Eshell"))
(lm/leader-keys
"SPC" '(counsel-M-x :wk "Counsel M-x")
"." '(find-file :wk "Find file")
"f c" '((lambda () (interactive) (find-file "~/personal/nixos/configs/emacs/config.org")) :wk "Edit emacs config")
"f r" '(counsel-recentf :wk "Find recent files")
"TAB TAB" '(comment-line :wk "Comment lines"))
(lm/leader-keys
"h" '(:ignore t :wk "Help")
"h f" '(describe-function :wk "Describe function")
"h v" '(describe-variable :wk "Describe variable")
"h r r" '(reload-init-file :wk "Reload emacs config"))
;; "h r r" '((lambda () (interactive) (load-file user-init-file)) :wk "Reload emacs config"))
;; (lm/leader-keys
;; "i" '(:ignore t :wk "Insert")
;; "i p" '(org-download-screenshot :wk "Insert screenshot (org)"))
(lm/leader-keys
"t" '(:ignore t :wk "Toggle")
"t l" '(display-line-numbers-mode :wk "Toggle line numbers")
"t i" '(org-toggle-inline-images :wk "Toggle inline images")
"t t" '(visual-line-mode :wk "Toggle truncated lines"))
(lm/leader-keys
"s" '(:ignore t :wk "Shell")
"s c" '(shell-command :wk "Run a shell command")
"s d" '(sh-cd-here :wk "Move current shell to current dir")
"s m" '(sh-mode :wk "Shell mode"))
(lm/leader-keys
"c" '(:ignore t :wk "Capitalize")
"c w" '(capitalize-word :wk "Capitalize word")
"c r" '(capitalize-region :wk "Capitalize region")
"c c" '(upcase-char :wk "Upcase char")
"c u" '(upcase-region :wk "Upcase region"))
(lm/leader-keys
"l" '(:ignore t :wk "Downcase")
"l w" '(downcase-word :wk "Downcase word")
"l u" '(downcase-region :wk "Downcase region"))
;; Evil window bindings
(lm/leader-keys
"w" '(:ignore t :wk "Window")
"w w" '(evil-window-next :wk "Next window")
"w h" '(evil-window-left :wk "Move cursor to window left")
"w j" '(evil-window-down :wk "Move cursor to window below")
"w k" '(evil-window-up :wk "Move cursor to window above")
"w l" '(evil-window-right :wk "Move cursor to window right")
"w s" '(evil-window-split :wk "Split window horizontally")
"w v" '(evil-window-vsplit :wk "Split window vertically")
"w H" '(evil-window-move-far-left :wk "Move split to left")
"w J" '(evil-window-move-very-bottom :wk "Move split to bottom")
"w K" '(evil-window-move-very-top :wk "Move split to top")
"w L" '(evil-window-move-far-right :wk "Move split to right")
"w >" '(evil-window-increase-width :wk "Increase window width")
"w ." '(evil-window-increase-width :wk "Increase window width")
"w <" '(evil-window-decrease-width :wk "Increase window width")
"w ," '(evil-window-decrease-width :wk "Increase window width")
"w c" '(evil-window-delete :wk "Close window")
"w o" '(delete-other-windows :wk "Delete other windows")
"w =" '(balance-windows :wk "Balance windows")
"q k" '(kill-buffer-and-window :wk "Kill buf and window")
"q q" '(save-buffers-kill-terminal :wk "Save bufs, kill term"))
;; (evil-global-set-key 'visual "K" (kbd ":m '<-2 RET gv '< gk"))
(evil-global-set-key 'visual "K" 'drag-stuff-up)
;; (evil-global-set-key 'visual "J" (kbd ":m '>+1 RET gv '> gj"))
(evil-global-set-key 'visual "J" 'drag-stuff-down)
(lm/leader-keys
"p" '(:ignore t :wk "Project")
"p o" '(dashboard-open :wk "Return to dashboard")
"p f" '(project-find-file :wk "Find project file"))
)
#+end_src
* ALL THE ICONS
#+begin_src emacs-lisp
(use-package all-the-icons
:ensure t
:diminish
:if (display-graphic-p))
(use-package all-the-icons-dired
:hook (dired-mode . (lambda () (all-the-icons-dired-mode t))))
#+end_src
* AUTOSAVE
#+begin_src emacs-lisp
(setq backup-directory-alist
`((".*" . "~/emacs/auto-saves")))
(setq auto-save-file-name-transforms
`((".*" "~/emacs/auto-saves" t)))
#+end_src
* COMPANY
#+begin_src emacs-lisp
(use-package company
:defer 2
:diminish
:custom
(company-begin-commands '(self-insert-command))
(company-idle-delay .1)
(company-minimum-prefix-length 2)
(company-show-numbers t)
(company-tooltip-align-annotations 't)
(global-company-mode t))
(use-package company-box
:after company
:diminish
:hook (company-mode . company-box-mode))
#+end_src
* DASHBOARD
#+begin_src emacs-lisp
(use-package dashboard
:ensure t
:diminish
:init
(setq initial-buffer-choice 'dashboard-open)
(setq dashboard-set-heading-icons t)
;; (setq dashboard-set-navigator t)
(setq dashboard-set-file-icons t)
(setq dashboard-banner-logo-title "Welcome to Emacs!")
(setq dashboard-startup-banner 'logo) ;; default logo
(setq dashboard-center-content t)
(setq dashboard-items '((recents . 5)
(agenda . 5)
(bookmarks . 3)
(projects . 3)))
:config
(dashboard-setup-startup-hook))
#+end_src
* DIMINISH
This package implements hiding or abbreviation of the modeline displays (lighters) of minor-modes. With this package installed, you can add ':diminish' to any use-package block to hide that particular mode in the modeline.
#+begin_src emacs-lisp
(use-package diminish)
#+end_src
* DRAG-STUFF
#+begin_src emacs-lisp
(use-package drag-stuff
:diminish
:config
(drag-stuff-global-mode 1))
#+end_src
* FLYCHECK
Install =luacheck= from your Linux distro's repositories for flycheck to work correctly with lua files. Install =python-pylint= for flycheck to work with python files. Haskell works with flycheck as long as =haskell-ghc= or =haskell-stack-ghc= is installed. For more information on language support for flycheck, [[https://www.flycheck.org/en/latest/languages.html][read this]].
#+begin_src emacs-lisp
(use-package flycheck
:ensure t
:defer t
:diminish
:init (global-flycheck-mode))
#+end_src
* FONTS
Defining the various fonts emacs will use
** Setting The Font Face
#+begin_src emacs-lisp
(set-face-attribute 'default nil
:font "FiraCodeNerdFontMono"
:height 110
:weight 'medium)
(set-face-attribute 'variable-pitch nil
:font "FiraCodeNerdFontMono"
:height 120
:weight 'medium)
(set-face-attribute 'fixed-pitch nil
:font "FiraCodeNerdFontMono"
:height 130
:weight 'medium)
;; Makes commented text and keywords italics.
;; This is working in emacsclient but not emacs.
;; Your font must have an italic face available.
(set-face-attribute 'font-lock-comment-face nil
:slant 'italic)
(set-face-attribute 'font-lock-keyword-face nil
:slant 'italic)
;; This sets the default font on all graphical frames created after restarting Emacs.
;; Does the same thing as 'set-face-attribute default' above, but emacsclient fonts
;; are not right unless I also add this method of setting the default font.
(add-to-list 'default-frame-alist '(font . "FiraCodeNerdFontMono-15"))
;; UNCOMMENT THE FOLLOWING LINE IF LINE SPACING NEEDS ADJUSTING.
;; (SETQ-DEFAULT LINE-SPACING 0.12)
#+END_SRC
** ZOOM IN/OUT
ENABLE ZOOM IN/OUT WITH C-=/- AND ALSO FOR C-SCRL-UP/DOWN
#+BEGIN_SRC EMACS-LISP
(GLOBAL-SET-KEY (KBD "C-=") 'TEXT-SCALE-INCREASE)
(GLOBAL-SET-KEY (KBD "C--") 'TEXT-SCALE-DECREASE)
(GLOBAL-SET-KEY (KBD "<C-WHEEL-UP>") 'TEXT-SCALE-INCREASE)
(GLOBAL-SET-KEY (KBD "<C-WHEEL-DOWN>") 'TEXT-SCALE-DECREASE)
#+END_SRC
* GNUPLOT
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE GNUPLOT-MODE)
;; AUTOMATICALLY OPEN FILES ENDING WITH .GP OR .GNUPLOT IN GNUPLOT MODE
;; (SETQ AUTO-MODE-ALIST
;; (APPEND '(("\\.\\(GP\\|GNUPLOT\\)$" . GNUPLOT-MODE)) AUTO-MODE-ALIST)))
#+END_SRC
* IMAGE DIR-ED
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE IMAGE-DIRED+)
#+END_SRC
* INDENTING/TABS
#+BEGIN_SRC EMACS-LISP
(SETQ-DEFAULT INDENT-TABS-MODE NIL)
(SETQ-DEFAULT TAB-WIDTH 2)
(SETQ-DEFAULT INDENT-LINE-FUNCTION 'INSERT-TAB)
(SETQ-DEFAULT C-DEFAULT-STYLE "LINUX"
C-BASIC-OFFSET 2)
;; IF INDENT-TABS-MODE IS OFF, UNTABIFY BEFORE SAVING
;;(ADD-HOOK 'WRITE-FILE-HOOKS
;; (LAMBDA () (IF (NOT INDENT-TABS-MODE)
;; (UNTABIFY (POINT-MIN) (POINT-MAX)))))
#+END_SRC
* LIGATURES
#+BEGIN_SRC EMACS-LISP
;; THIS ASSUMES YOU'VE INSTALLED THE PACKAGE VIA MELPA.
(USE-PACKAGE LIGATURE
:CONFIG
;; ENABLE THE "WWW" LIGATURE IN EVERY POSSIBLE MAJOR MODE
(LIGATURE-SET-LIGATURES 'T '("WWW"))
;; ENABLE TRADITIONAL LIGATURE SUPPORT IN EWW-MODE, IF THE
;; `VARIABLE-PITCH' FACE SUPPORTS IT
(LIGATURE-SET-LIGATURES 'EWW-MODE '("FF" "FI" "FFI"))
;; ENABLE ALL CASCADIA CODE LIGATURES IN PROGRAMMING MODES
(LIGATURE-SET-LIGATURES 'PROG-MODE '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
"..." "+++" "/==" "///" "_|_" "WWW" "&&" "^=" "~~" "~@" "~="
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
"\\\\" "://"))
;; ENABLES LIGATURE CHECKS GLOBALLY IN ALL BUFFERS. YOU CAN ALSO DO IT
;; PER MODE WITH `LIGATURE-MODE'.
(GLOBAL-LIGATURE-MODE T))
#+END_SRC
* MARKDOWN MODE
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE MARKDOWN-MODE
:ENSURE T
:MODE ("README\\.MD\\'" . GFM-MODE)
:INIT (SETQ MARKDOWN-COMMAND "MULTIMARKDOWN"))
#+END_SRC
* ORG DOWNLOAD
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE ORG-DOWNLOAD
:AFTER ORG
:DEFER NIL
:CUSTOM
(ORG-DOWNLOAD-METHOD 'DIRECTORY)
(ORG-DOWNLOAD-IMAGE-DIR "~/EMACS/IMAGES/")
(ORG-DOWNLOAD-HEADING-LVL 0)
(ORG-DOWNLOAD-TIMESTAMP "ORG_%Y%M%D-%H%M%S_")
(ORG-IMAGE-ACTUAL-WIDTH 400)
(ORG-DOWNLOAD-SCREENSHOT-METHOD "WAYLAND_DISPLAY=WAYLAND-1 WL-PASTE -T IMAGE/PNG > '%S'.PNG")
:BIND
("C-M-Y" . ORG-DOWNLOAD-SCREENSHOT)
:CONFIG
(REQUIRE 'ORG-DOWNLOAD))
#+END_SRC
* PULSE
PULSE HIGHLIGHT A LINE ON CERTAIN ACTIONS
# #+BEGIN_SRC EMACS-LISP
# (USE-PACKAGE PULSE
# :ENSURE NIL
# :DEFER
# :INIT
# (DEFUN PULSE-LINE (&REST _)
# "PULSE THE CURRENT LINE"
# (PULSE-MOMENTARY-HIGHLIGHT-ONE-LINE (POINT)))
# (DOLIST (COMMAND '(SCROLL-UP-COMMAND
# SCROLL-DOWN-COMMAND
# WINDMOVE-LEFT
# WINDMOVE-RIGHT
# WINDMOVE-UP
# WINDMOVE-DOWN
# MOVE-TO-WINDOW-LINE-TOP-BOTTOM
# RECENTER-TOP-BOTTOM
# OTHER-WINDOW))
# (ADVICE-ADD COMMAND :AFTER #'PULSE-LINE)))
# #+END_SRC
* PDF TOOLS
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE PDF-TOOLS)
#+END_SRC
* PROJECTILE
[[HTTPS://GITHUB.COM/BBATSOV/PROJECTILE][PROJECTILE]] IS A PROJECT INTERACTION LIBRARY FOR EMACS.
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE PROJECTILE
:DIMINISH
:CONFIG
(PROJECTILE-MODE 1))
#+END_SRC
* RAINBOW MODE
DISPLAY THE ACTUAL COLOR AS A BACKGROUND FOR ANY HEX COLOR VALUE (EX. #FFFFFF). THE CODE BLOCK BELOW ENABLES RAINBOW-MODE IN ALL PROGRAMMING MODES (PROG-MODE) AS WELL AS ORG-MODE, WHICH IS WHY RAINBOW WORKS IN THIS DOCUMENT.
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE RAINBOW-MODE
:DIMINISH
:HOOK
((ORG-MODE PROG-MODE) . RAINBOW-MODE))
#+END_SRC
* RELOAD EMACS
THIS IS JUST AN EXAMPLE OF HOW TO CREATE A SIMPLE FUNCTION IN EMACS. USE THIS FUNCTION TO RELOAD EMACS AFTER ADDING CHANGES TO THE CONFIG. YES, I AM LOADING THE USER-INIT-FILE TWICE IN THIS FUNCTION, WHICH IS A HACK BECAUSE FOR SOME REASON, JUST LOADING THE USER-INIT-FILE ONCE DOES NOT WORK PROPERLY.
#+BEGIN_SRC EMACS-LISP
(DEFUN RELOAD-INIT-FILE ()
(INTERACTIVE)
(LOAD-FILE USER-INIT-FILE)
(LOAD-FILE USER-INIT-FILE))
#+END_SRC
* SHELLS AND TERMINALS
** ESHELL
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE ESHELL-SYNTAX-HIGHLIGHTING
:AFTER ESH-MODE
:CONFIG
(ESHELL-SYNTAX-HIGHLIGHTING-GLOBAL-MODE +1))
(SETQ ESHELL-RC-SCRIPT (CONCAT USER-EMACS-DIRECTORY "ESHELL/PROFILE")
ESHELL-ALIASES-FILE (CONCAT USER-EMACS-DIRECTORY "ESHELL/ALIASES")
ESHELL-HISTORY-SIZE 5000
ESHELL-BUFFER-MAXIMUM-LINES 5000
ESHELL-HIST-IGNOREDUPS T
ESHELL-SCROLL-TO-BOTTOM-ON-INPUT T
ESHELL-DESTROY-BUFFER-WHEN-PROCESS-DIES T
ESHELL-VISUAL-COMMANDS'("BASH" "FISH" "HTOP" "SSH" "TOP" "ZSH"))
#+END_SRC
* SUDO EDIT
ENABLE EDITING OF PRIVILEGED FILES
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE SUDO-EDIT
:CONFIG
(LM/LEADER-KEYS
"FU" '(SUDO-EDIT-FIND-FILE :WK "SUDO FIND FILE")
"FU" '(SUDO-EDIT :WK "SUDO EDIT FILE")))
#+END_SRC
* THEME
SET THEMES DIR, LOAD CHOSEN THEME - THEME MADE WITH [[HTTPS://EMACSFODDER.GITHUB.IO/EMACS-THEME-EDITOR/][EMACS THEME EDITOR]].
#+BEGIN_SRC EMACS-LISP
;;(ADD-TO-LIST 'CUSTOM-THEME-LOAD-PATH "~/.CONFIG/EMACS/THEMES")
;;(LOAD-THEME 'SOFT-CHARCOAL T)
(USE-PACKAGE DOOM-THEMES
:ENSURE T
:CONFIG
;; GLOBAL SETTINGS (DEFAULTS)
(SETQ DOOM-THEMES-ENABLE-BOLD T ; IF NIL, BOLD IS UNIVERSALLY DISABLED
DOOM-THEMES-ENABLE-ITALIC T) ; IF NIL, ITALICS IS UNIVERSALLY DISABLED
(LOAD-THEME 'DOOM-MONOKAI-SPECTRUM T)
;; (LOAD-THEME 'DOOM-MONOKAI-MACHINE T)
;; ENABLE FLASHING MODE-LINE ON ERRORS
(DOOM-THEMES-VISUAL-BELL-CONFIG)
;; ENABLE CUSTOM NEOTREE THEME (ALL-THE-ICONS MUST BE INSTALLED!)
(DOOM-THEMES-NEOTREE-CONFIG)
;; OR FOR TREEMACS USERS
(SETQ DOOM-THEMES-TREEMACS-THEME "DOOM-COLORS") ; USE "DOOM-COLORS" FOR LESS MINIMAL ICON THEME
(DOOM-THEMES-TREEMACS-CONFIG)
;; CORRECTS (AND IMPROVES) ORG-MODE'S NATIVE FONTIFICATION.
(DOOM-THEMES-ORG-CONFIG))
#+END_SRC
* TRANSPARENCY
TRUE TRANSPARENCY SUPPORT AS OF EMACS 29
#+BEGIN_SRC EMACS-LISP
(ADD-TO-LIST 'DEFAULT-FRAME-ALIST '(ALPHA-BACKGROUND . 90)) ;; FOR ALL NEW FRAMES
#+END_SRC
* GUI TWEAKS
MAKING THE UI LOOK NICER
** DISABLE MENUBAR, TOOLBARS AND SCROLLBARS
#+BEGIN_SRC EMACS-LISP
(MENU-BAR-MODE -1)
(TOOL-BAR-MODE -1)
(SCROLL-BAR-MODE -1)
#+END_SRC
** DISPLAY LINE NUMBERS AND TRUNCATED LINES
#+BEGIN_SRC EMACS-LISP
(GLOBAL-DISPLAY-LINE-NUMBERS-MODE 0)
(MENU-BAR--DISPLAY-LINE-NUMBERS-MODE-RELATIVE)
;; (SETQ DISPLAY-LINE-NUMBERS-MODE-RELATIVE 'T)
(GLOBAL-VISUAL-LINE-MODE T)
#+END_SRC
* IVY (COUNSEL)
+ IVY, A GENERIC COMPLETION MECHANISM FOR EMACS.
+ COUNSEL, A COLLECTION OF IVY-ENHANCED VERSIONS OF COMMON EMACS COMMANDS.
+ IVY-RICH ALLOWS US TO ADD DESCRIPTIONS ALONGSIDE THE COMMANDS IN M-X.
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE COUNSEL
:AFTER IVY
:DIMINISH
:CONFIG (COUNSEL-MODE))
(USE-PACKAGE IVY
:BIND
;; IVY-RESUME RESUMES THE LAST IVY-BASED COMPLETION.
(("C-C C-R" . IVY-RESUME)
("C-X B" . IVY-SWITCH-BUFFER-OTHER-WINDOW))
:DIMINISH
:CUSTOM
(SETQ IVY-USE-VIRTUAL-BUFFERS T)
(SETQ IVY-COUNT-FORMAT "(%D/%D) ")
(SETQ ENABLE-RECURSIVE-MINIBUFFERS T)
:CONFIG
(IVY-MODE))
(USE-PACKAGE ALL-THE-ICONS-IVY-RICH
:ENSURE T
:DIMINISH
:INIT (ALL-THE-ICONS-IVY-RICH-MODE 1))
(USE-PACKAGE IVY-RICH
:AFTER IVY
:DIMINISH
:ENSURE T
:INIT (IVY-RICH-MODE 1) ;; THIS GETS US DESCRIPTIONS IN M-X.
:CUSTOM
(IVY-VIRTUAL-ABBREVIATE 'FULL
IVY-RICH-SWITCH-BUFFER-ALIGN-VIRTUAL-BUFFER T
IVY-RICH-PATH-STYLE 'ABBREV)
:CONFIG
(IVY-SET-DISPLAY-TRANSFORMER 'IVY-SWITCH-BUFFER
'IVY-RICH-SWITCH-BUFFER-TRANSFORMER))
#+END_SRC
* LANGUAGE SUPPORT
EMACS HAS BUILT-IN PROGRAMMING LANGUAGE MODES FOR LISP, SCHEME, DSSSL, ADA, ASM, AWK, C, C++, FORTRAN, ICON, IDL (CORBA), IDLWAVE, JAVA, JAVASCRIPT, M4, MAKEFILES, METAFONT, MODULA2, OBJECT PASCAL, OBJECTIVE-C, OCTAVE, PASCAL, PERL, PIKE, POSTSCRIPT, PROLOG, PYTHON, RUBY, SIMULA, SQL, TCL, VERILOG, AND VHDL. OTHER LANGUAGES WILL REQUIRE YOU TO INSTALL ADDITIONAL MODES.
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE ZIG-MODE)
(USE-PACKAGE NIX-MODE)
;; (USE-PACKAGE JAI-MODE)
(USE-PACKAGE RUST-MODE)
(USE-PACKAGE CARGO-MODE)
(USE-PACKAGE LUA-MODE)
(ADD-TO-LIST 'LOAD-PATH "~/.CONFIG/EMACS/MANUAL-PACKAGES")
(REQUIRE 'ODIN-MODE)
#+END_SRC
* ORG MODE
** ENABLING TABLE OF CONTENTS
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE TOC-ORG
:COMMANDS TOC-ORG-ENABLE
:INIT (ADD-HOOK 'ORG-MODE-HOOK 'TOC-ORG-ENABLE))
#+END_SRC
** ENABLING ORG BULLETS
ORG-BULLETS GIVE BULLET POINTS INSTEAD OF ASTERISKS
#+BEGIN_SRC EMACS-LISP
(ADD-HOOK 'ORG-MODE-HOOK 'ORG-INDENT-MODE)
;;(SETQ (SETQ ORG-RETURN-FOLLOWS-LINK T)
(USE-PACKAGE ORG-BULLETS)
(ADD-HOOK 'ORG-MODE-HOOK (LAMBDA () (ORG-BULLETS-MODE 1)))
#+END_SRC
** SOURCE CODE BLOCK TAG EXPANSION
ORG-TEMPO IS NOT A SEPARATE PACKAGE BUT A MODULE WITHIN ORG THAT CAN BE ENABLED. ORG-TEMPO ALLOWS FOR '<S' FOLLOWED BY TAB TO EXPAND TO A BEGIN_SRC TAG. OTHER EXPANSIONS AVAILABLE INCLUDE:
| TYPING THE BELOW + TAB | EXPANDS TO ... |
|------------------------+-----------------------------------------|
| <A | '#+BEGIN_EXPORT ASCII' … '#+END_EXPORT |
| <C | '#+BEGIN_CENTER' … '#+END_CENTER' |
| <C | '#+BEGIN_COMMENT' … '#+END_COMMENT' |
| <E | '#+BEGIN_EXAMPLE' … '#+END_EXAMPLE' |
| <E | '#+BEGIN_EXPORT' … '#+END_EXPORT' |
| <H | '#+BEGIN_EXPORT HTML' … '#+END_EXPORT' |
| <L | '#+BEGIN_EXPORT LATEX' … '#+END_EXPORT' |
| <Q | '#+BEGIN_QUOTE' … '#+END_QUOTE' |
| <S | '#+BEGIN_SRC' … '#+END_SRC' |
| <V | '#+BEGIN_VERSE' … '#+END_VERSE' |
#+BEGIN_SRC EMACS-LISP
(REQUIRE 'ORG-TEMPO)
#+END_SRC
* WHICH-KEY
#+BEGIN_SRC EMACS-LISP
(USE-PACKAGE WHICH-KEY
:INIT
(WHICH-KEY-MODE 1)
:DIMINISH
:CONFIG
(SETQ WHICH-KEY-SIDE-WINDOW-LOCATION 'BOTTOM
WHICH-KEY-SORT-ORDER #'WHICH-KEY-KEY-ORDER-ALPHA
WHICH-KEY-SORT-UPPERCASE-FIRST NIL
WHICH-KEY-ADD-COLUMN-PADDING 1
WHICH-KEY-MAX-DISPLAY-COLUMNS NIL
WHICH-KEY-MIN-DISPLAY-LINES 6
WHICH-KEY-SIDE-WINDOW-SLOT -10
WHICH-KEY-SIDE-WINDOW-MAX-HEIGHT 0.25
WHICH-KEY-IDE-DELAY 0.8
WHICH-KEY-MAX-DESCRIPTION-LENGTH 25
WHICH-KEY-ALLOW-IMPRECISE-WINDOW-FIT NIL
WHICH-KEY-SEPARATOR " -> " ))
#+END_SRC