#+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 ("" . 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 "") 'TEXT-SCALE-INCREASE) (GLOBAL-SET-KEY (KBD "") '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 ' " )) #+END_SRC