TwigTheCat 96d9b0abda | ||
---|---|---|
themes | ||
.gitignore | ||
LICENSE | ||
README.org | ||
dashboard.txt | ||
init.el |
README.org
- Table of Contents
- Packages
- Aesthetics
- Other Options
Twig's Emacs Configuration -- org --
Table of Contents TOC_4
Packages
Important Packages
Third Party Repos
(require 'package)
;; Add the Melpa repository to the list of package sources
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/")) ;; installed by default
(add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/")) ;; installed by default from Emacs 28 onwards
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(setq use-package-always-ensure t)
Quelpa
(unless (package-installed-p 'quelpa)
(with-temp-buffer
(url-insert-file-contents
"https://raw.githubusercontent.com/quelpa/quelpa/master/quelpa.el")
(eval-buffer)
(quelpa-self-upgrade)))
(quelpa
'(quelpa-use-package
:fetcher git
:url "https://github.com/quelpa/quelpa-use-package.git"))
(require 'quelpa-use-package)
Evil Mode
(use-package evil
:ensure t
:init
(setq evil-want-keybinding nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(evil-mode)
:config
;; Delete without register
(evil-define-operator evil-delete-without-register (beg end type yank-handler)
(interactive "<R><y>")
(evil-delete beg end type ?_ yank-handler))
(define-key evil-insert-state-map (kbd "C-<backspace>") 'evil-delete-backward-word)
(with-eval-after-load 'evil-maps
(define-key evil-motion-state-map (kbd "SPC") nil)
(define-key evil-motion-state-map (kbd "RET") nil)
(define-key evil-motion-state-map (kbd "TAB") nil))
(evil-set-undo-system 'undo-tree))
(use-package evil-collection
:ensure t
:after evil
:config
(setq evil-collection-mode-list '(dashboard dired ibuffer))
(evil-collection-init))
Undo Tree
To get redo functionality in evil-mode / emacs
(use-package undo-tree
:ensure t
:config
(global-undo-tree-mode)
;; I don't want random files in my directories for the undo-tree,
;; so unify them under this directory
(setq undo-tree-history-directory-alist '(("." . "~/.config/emacs/undo-tree"))))
Keybinds
(use-package general
:config
(general-evil-setup)
;; set up 'SPC' as the global leader key
(general-create-definer twig/leader-keys
:states '(normal insert visual emacs)
:keymaps 'override
:prefix "SPC" ;; set leader
:global-prefix "M-SPC") ;; access leader in insert mode
(twig/leader-keys
"b" '(:ignore t :wk "buffer")
"bb" '(switch-to-buffer :wk "Switch buffer")
"bk" '(kill-this-buffer :wk "Kill this buffer")
"bn" '(next-buffer :wk "Next buffer")
"bp" '(previous-buffer :wk "Previous buffer")
"br" '(revert-buffer :wk "Reload buffer"))
(twig/leader-keys
"t" '(:ignore t :wk "neotree")
"to" '(neotree-toggle :wk "Open neotree")))
;; zoom in and out
(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)
;; drag stuff
(global-set-key (kbd "M-<up>") 'drag-stuff-up)
(global-set-key (kbd "M-<down>") 'drag-stuff-down)
;; man fuck minibuffers and their 3 esc quits
(global-set-key [escape] 'keyboard-escape-quit)
WhichKey
(use-package which-key
:init
(which-key-mode 1)
:ensure t
: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-idle-delay 0.8
which-key-max-description-length 25
which-key-allow-imprecise-window-fit t
which-key-separator " → " ))
Org Mode
Denote
(use-package denote
:pin gnu
:ensure t
:config
(setq denote-directory (expand-file-name "~/Documents/notes/denote/"))
(setq denote-known-keywords '())
(setq denote-file-type nil)
(add-hook 'dired-mode-hook #'denote-dired-mode))
Org Agenda
(setq org-agenda-files '("~/Documents/notes/agenda.org"))
Org Superstar
Org bullets but better
(use-package org-superstar
:hook
(org-mode . org-superstar-mode)
:config
(setq org-superstar-special-todo-items t)
(setq org-superstar-headline-bullets-list '(""
"☭"
"❦"
""
""))
;; disables leading bullets
(setq org-superstar-leading-bullet ?\s)
(setq org-indent-mode-turns-on-hiding-stars nil))
Org Table of Contents
(use-package toc-org
:hook
(org-mode . toc-org-mode)
:commands toc-org-enable)
Org Auto Tangle
(use-package org-auto-tangle
:defer t
:hook
((org-mode . org-auto-tangle-mode))
:config
(setq org-auto-tangle-default t))
LaTeX
Auctex
(use-package auctex
:ensure t
:defer t)
CDLatex
(use-package cdlatex
:ensure t)
Org FragTog
(use-package org-fragtog
:custom
(org-startup-with-latex-preview t)
:ensure t
:hook
((org-mode . org-fragtog-mode)))
Org Appear
(use-package org-appear
:hook
(org-mode . org-appear-mode))
Org Diary
(load "~/.config/emacs/scl.el")
Org Krita
(use-package org-krita
:ensure t
:quelpa (org-krita :fetcher github :repo "Accacio/org-krita" :files ("*.el" "resources"))
:config
(add-hook 'org-mode-hook 'org-krita-mode))
Org Alert
(use-package org-alert
:ensure t
:config
(setq org-alert-enable t)
(setq alert-default-style 'libnotify)
(setq org-alert-interval 150))
Hooks And Configuration
(require 'org-tempo)
(plist-put org-format-latex-options :scale 1.5)
(custom-set-faces
'(org-level-1 ((t (:inherit outline-1 :height 1.1))))
'(org-level-2 ((t (:inherit outline-2 :height 1.1))))
'(org-level-3 ((t (:inherit outline-3 :height 1.1))))
'(org-level-4 ((t (:inherit outline-4 :height 1.1))))
'(org-level-5 ((t (:inherit outline-5 :height 1.1))))
'(org-level-6 ((t (:inherit outline-5 :height 1.1))))
'(org-level-7 ((t (:inherit outline-5 :height 1.1)))))
(setq-default org-agenda-include-diary t)
(setq org-display-custom-times t)
(setq org-pretty-entities t)
(setq org-use-sub-superscripts "{}")
(setq org-hide-emphasis-markers t)
(setq org-startup-with-inline-images t)
(add-hook 'org-mode-hook 'org-indent-mode)
(setq org-return-follows-link t)
;; Stop src blocks from auto indenting
(setq org-edit-src-content-indentation 0)
Dashboard
(use-package dashboard
:ensure t
:init
(setq initial-buffer-choice 'dashboard-open)
(setq dashboard-set-heading-icons t)
(setq dashboard-set-file-icons t)
(setq dashboard-banner-logo-title "MRROW MRRP")
(setq dashboard-startup-banner "~/.config/emacs/dashboard.txt") ;; use custom image as banner
(setq dashboard-center-content t) ;; set to 't' for centered content
(setq dashboard-items '((recents . 5)
(projects . 3)
(agenda . 5)))
:custom
(dashboard-modify-heading-icons '((recents . "file-text")
(bookmarks . "book")))
:config
(dashboard-setup-startup-hook))
All The Icons
(use-package all-the-icons
:ensure t
:if (display-graphic-p))
(use-package all-the-icons-dired
:ensure t
:config
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
(setq all-the-icons-dired-monochrome nil))
(use-package all-the-icons-ivy-rich
:ensure t
:init (all-the-icons-ivy-rich-mode 1))
Company
(use-package company
:ensure t
:defer 2
:diminish
:custom
(company-begin-commands '(self-insert-command))
(company-idle-delay .05)
(company-minimum-prefix-length 2)
(company-show-numbers t)
(company-tooltip-align-annotations 't)
:config
(global-company-mode)
(setq lsp-completion-provider :capf))
(use-package frame-local
:ensure t)
(use-package company-box
:ensure t
:after company frame-local
:hook (company-mode . company-box-mode))
Ivy, Counsel, Prescient
(use-package counsel
:ensure t
:after ivy
:diminish
:config
(counsel-mode)
(setq ivy-initial-inputs-alist nil)) ;; removes starting ^ regex in M-x
(use-package ivy
:ensure t
: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 ivy-rich
:after ivy
: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))
(use-package prescient
:ensure t)
(use-package ivy-prescient
:after counsel
:ensure t
:config
(ivy-prescient-mode))
(use-package company-prescient
:after company
:ensure t
:config
(company-prescient-mode))
Projectile
(use-package projectile
:ensure t
:config
(projectile-mode +1))
Rainbow stuff (GAYYY!!!!)
Rainbow Delimiters
(use-package rainbow-delimiters
:hook ((prog-mode . rainbow-delimiters-mode)))
Rainbow Mode
(use-package rainbow-mode
:diminish
:hook org-mode prog-mode)
Beacon
Shows your mouse when you make large movements
(use-package beacon
:ensure t
:config
(beacon-mode))
Modeline
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1))
Nyan Mode
(use-package nyan-mode
:ensure t
:config
(nyan-mode))
Neotree
(use-package neotree
:config
(setq neo-theme (if (display-graphic-p) 'icons 'arrow))
(setq neo-smart-open t
neo-show-hidden-files t
neo-window-width 30
neo-window-fixed-size nil
inhibit-compacting-font-caches t
projectile-switch-project-action 'neotree-projectile-action)
;; truncate long file names in neotree
(add-hook 'neo-after-create-hook
#'(lambda (_)
(with-current-buffer (get-buffer neo-buffer-name)
(setq truncate-lines t)
(setq word-wrap nil)
(make-local-variable 'auto-hscroll-mode)
(setq auto-hscroll-mode nil)))))
Vterm
(use-package vterm
:ensure t)
(use-package vterm-toggle
:ensure t
:after vterm
:config
;; When running programs in Vterm and in 'normal' mode, make sure that ESC
;; kills the program as it would in most standard terminal programs.
(evil-define-key 'normal vterm-mode-map (kbd "<escape>") 'vterm--self-insert)
(setq vterm-toggle-fullscreen-p nil)
(setq vterm-toggle-scope 'project)
(add-to-list 'display-buffer-alist
'((lambda (buffer-or-name _)
(let ((buffer (get-buffer buffer-or-name)))
(with-current-buffer buffer
(or (equal major-mode 'vterm-mode)
(string-prefix-p vterm-buffer-name (buffer-name buffer))))))
(display-buffer-reuse-window display-buffer-at-bottom)
;;(display-buffer-reuse-window display-buffer-in-direction)
;;display-buffer-in-direction/direction/dedicated is added in emacs27
;;(direction . bottom)
;;(dedicated . t) ;dedicated is supported in emacs27
(reusable-frames . visible)
(window-height . 0.4))))
Highlight Todo
(use-package hl-todo
:ensure t
:hook ((org-mode . hl-todo-mode)
(prog-mode . hl-todo-mode))
:config
(setq hl-todo-highlight-punctuation ":"
hl-todo-keyword-faces
`(("TODO" warning bold)
("FIXME" error bold)
("HACK" font-lock-constant-face bold)
("REVIEW" font-lock-keyword-face bold)
("NOTE" success bold)
("DEPRECATED" font-lock-doc-face bold))))
Flyspell
(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)
Flycheck
(use-package flycheck
:ensure t
:defer t
:diminish
:config (global-flycheck-mode))
(use-package flycheck-rust
:ensure t
:config
(with-eval-after-load 'rust-mode
(add-hook 'flycheck-mode-hook #'flycheck-rust-setup)))
Drag Stuff
(use-package drag-stuff
:ensure t
:config
(drag-stuff-global-mode 1))
Programming Stuff
Ligatures
(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))
Formatting
(use-package hindent
:ensure t
:hook (haskell-mode . hindent-mode))
Programming Modes
(use-package go-mode
:ensure t)
(use-package rust-mode
:ensure t)
(use-package yaml-mode
:ensure t)
(use-package json-mode
:ensure t)
(use-package haskell-mode
:ensure t)
(use-package markdown-mode
:ensure t
:hook ((markdown-mode . visual-line-mode)))
Ocaml
(load "/home/ly/.opam/default/share/emacs/site-lisp/tuareg-site-file")
(let ((opam-share (ignore-errors (car (process-lines "opam" "var" "share")))))
(when (and opam-share (file-directory-p opam-share))
;; Register Merlin
(add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share))
(autoload 'merlin-mode "merlin" nil t nil)
;; Automatically start it in OCaml buffers
(add-hook 'tuareg-mode-hook 'merlin-mode t)
(add-hook 'caml-mode-hook 'merlin-mode t)
;; Use opam switch to lookup ocamlmerlin binary
(setq merlin-command 'opam)
;; To easily change opam switches within a given Emacs session, you can
;; install the minor mode https://github.com/ProofGeneral/opam-switch-mode
;; and use one of its "OPSW" menus.
))
(defun set-ocaml-error-regexp ()
(set
'compilation-error-regexp-alist
(list '("[Ff]ile \\(\"\\(.*?\\)\", line \\(-?[0-9]+\\)\\(, characters \\(-?[0-9]+\\)-\\([0-9]+\\)\\)?\\)\\(:\n\\(\\(Warning .*?\\)\\|\\(Error\\)\\):\\)?"
2 3 (5 . 6) (9 . 11) 1 (8 compilation-message-face)))))
(add-hook 'tuareg-mode-hook 'set-ocaml-error-regexp)
(add-hook 'caml-mode-hook 'set-ocaml-error-regexp)
;; ## added by OPAM user-setup for emacs / base ## 56ab50dc8996d2bb95e7856a6eddb17b ## you can edit, but keep this line
(require 'opam-user-setup "~/.config/emacs/opam-user-setup.el")
Eglot
(use-package eglot
:ensure t
:config
(add-to-list 'eglot-server-programs '((python-mode . ("pylsp"))))
(add-to-list 'eglot-server-programs '((rust-mode . ("rust-analyzer"))))
(add-to-list 'eglot-server-programs '((go-mode . ("gopls"))))
:hook
((rust-mode . eglot)
(go-mode . eglot)))
Treesitter
(setq treesit-font-lock-level 4)
(use-package treesit-auto
:ensure t
:config
(global-treesit-auto-mode)
(treesit-auto-add-to-auto-mode-alist 'all)
(setq treesit-auto-install t))
Aesthetics
Fonts
(set-face-attribute 'default nil
:font "CaskaydiaCove Nerd Font"
:height 110
:weight 'regular)
(set-face-attribute 'variable-pitch nil
:font "Ubuntu Nerd Font"
:height 120
:weight 'regular)
(set-face-attribute 'fixed-pitch nil
:font "CaskaydiaCove Nerd Font"
:height 110
:weight 'regular)
;; 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 . "caskaydiacovenerdfont-16:regular:antialias=true:hinting=true"))
(setq-default line-spacing 0.17)
Theme
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(use-package doom-themes
:pin melpa
: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 'fairy-forest 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))
Other Options
;; Changing the backup file path
(defun twig/backup-file-name (fpath)
"Return a new file path of a given file path.
If the new path's directories does not exist, create them."
(let* ((backupRootDir "~/.config/emacs/emacs-backup/")
(filePath (replace-regexp-in-string "[A-Za-z]:" "" fpath )) ; remove Windows driver letter in path
(backupFilePath (replace-regexp-in-string "//" "/" (concat backupRootDir filePath "~") )))
(make-directory (file-name-directory backupFilePath) (file-name-directory backupFilePath))
backupFilePath))
(setq make-backup-file-name-function 'twig/backup-file-name)
;; auto save path
(defvar autosave-dir (concat "~/.config/emacs/auto-save" "/"))
(make-directory autosave-dir t)
(setq auto-save-file-name-transforms
`(("\\(?:[^/]*/\\)*\\(.*\\)" ,(concat autosave-dir "\\1") t)))
;; save minibuffer history
(savehist-mode 1)
(setq-default left-margin-width 5 right-margin-width 5) ; Define new widths.
(set-window-buffer nil (current-buffer)) ; Use them now.
;; smooth scrolling
(setq scroll-step 1
scroll-conservatively 10000)
(fset 'yes-or-no-p 'y-or-n-p)
;; disable the gtk stuff
(menu-bar-mode -1)
(tool-bar-mode -1)
(blink-cursor-mode -1)
(delete-selection-mode 1) ;; You can select text and delete it by typing.
(electric-indent-mode 1)
(electric-pair-mode 1) ;; Turns on automatic parens pairing
(global-auto-revert-mode t) ;; Automatically show changes if the file has changed
;; i want line numbers when i program !!
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
(add-hook 'text-mode-hook 'visual-line-mode)