784 lines
28 KiB
EmacsLisp
784 lines
28 KiB
EmacsLisp
;;; zayd's shitty Emacs config, rewrite 3
|
|
(setq warning-minimum-level :error) ; SHUT THE FUCK UP!!!
|
|
(setq inhibit-startup-screen t) ; go away
|
|
(global-set-key (kbd "C-x C-u") nil) ; I swear your sole purpose is to annoy me
|
|
|
|
(tool-bar-mode -1)
|
|
(menu-bar-mode -1)
|
|
(global-tab-line-mode 1)
|
|
(global-hl-line-mode 1) ; highlight active line
|
|
|
|
;; Set up packages
|
|
(require 'package)
|
|
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
("org" . "https://orgmode.org/elpa/")
|
|
("elpa" . "https://elpa.gnu.org/packages/")))
|
|
(package-initialize)
|
|
(unless package-archive-contents
|
|
(package-refresh-contents))
|
|
(unless (package-installed-p 'use-package)
|
|
(package-install 'use-package))
|
|
(require 'use-package)
|
|
(setq use-package-always-ensure t)
|
|
|
|
(global-visual-line-mode t)
|
|
(use-package adaptive-wrap)
|
|
;; (global-visual-wrap-prefix-mode t) ;; stop recentering you stupid piece of shit
|
|
|
|
(setq-default indent-tabs-mode t) ; use TAB for indentation
|
|
(setq-default tab-width 4)
|
|
(add-hook 'emacs-lisp-mode-hook 'indent-tabs-mode nil) ; but not in ELisp
|
|
|
|
(setq mouse-drag-copy-region nil) ; STOP
|
|
(scroll-bar-mode -1)
|
|
|
|
;; I FUCKING HATE TEMP FILES
|
|
;; Puts backup files in their own directory.
|
|
(setq backup-directory "~/.cache/emacsbackups/")
|
|
(setq backup-directory-alist '(("." . "~/.cache/emacsbackups/"))
|
|
backup-by-copying t ; Don't delink hardlinks
|
|
version-control t ; Use version numbers on backups
|
|
delete-old-versions t ; Automatically delete excess backups
|
|
kept-new-versions 20 ; how many of the newest versions to keep
|
|
kept-old-versions 5 ; and how many of the old
|
|
)
|
|
|
|
(setq user-emacs-directory (expand-file-name "~/.cache/emacs"))
|
|
|
|
(make-directory (expand-file-name "tmp/auto-saves/" user-emacs-directory) t)
|
|
|
|
(setq auto-save-list-file-prefix (expand-file-name "tmp/auto-saves/sessions/" user-emacs-directory)
|
|
auto-save-file-name-transforms `((".*" ,(expand-file-name "tmp/auto-saves/" user-emacs-directory) t)))
|
|
|
|
(setq create-lockfiles nil)
|
|
|
|
;; Set cursor
|
|
(setq-default cursor-type '(bar . 1))
|
|
(blink-cursor-mode 1)
|
|
|
|
;; Dashboard
|
|
(use-package dashboard
|
|
:ensure t
|
|
:config
|
|
(setq dashboard-banner-logo-title "Welcome back to Emacs")
|
|
(setq dashboard-items '((recents . 5)
|
|
(projects . 5)
|
|
(agenda . 5)))
|
|
(setq dashboard-startupify-list '(dashboard-insert-banner-title
|
|
dashboard-insert-newline
|
|
dashboard-insert-navigator
|
|
dashboard-insert-newline
|
|
dashboard-insert-init-info
|
|
dashboard-insert-items
|
|
dashboard-insert-newline
|
|
dashboard-insert-footer))
|
|
(dashboard-setup-startup-hook))
|
|
|
|
;; File tree sidebar (treemacs)
|
|
(use-package treemacs
|
|
:ensure t
|
|
:defer t
|
|
:init
|
|
(with-eval-after-load 'winum
|
|
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
|
|
:config
|
|
(progn
|
|
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
|
|
treemacs-deferred-git-apply-delay 0.5
|
|
treemacs-directory-name-transformer #'identity
|
|
treemacs-display-in-side-window t
|
|
treemacs-eldoc-display 'simple
|
|
treemacs-file-event-delay 2000
|
|
treemacs-file-extension-regex treemacs-last-period-regex-value
|
|
treemacs-file-follow-delay 0.2
|
|
treemacs-file-name-transformer #'identity
|
|
treemacs-follow-after-init t
|
|
treemacs-expand-after-init t
|
|
treemacs-find-workspace-method 'find-for-file-or-pick-first
|
|
treemacs-git-command-pipe ""
|
|
treemacs-goto-tag-strategy 'refetch-index
|
|
treemacs-header-scroll-indicators '(nil . "^^^^^^")
|
|
treemacs-hide-dot-git-directory t
|
|
treemacs-indentation 2
|
|
treemacs-indentation-string " "
|
|
treemacs-is-never-other-window nil
|
|
treemacs-max-git-entries 5000
|
|
treemacs-missing-project-action 'ask
|
|
treemacs-move-forward-on-expand nil
|
|
treemacs-no-png-images nil
|
|
treemacs-no-delete-other-windows t
|
|
treemacs-project-follow-cleanup nil
|
|
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
|
|
treemacs-position 'left
|
|
treemacs-read-string-input 'from-child-frame
|
|
treemacs-recenter-distance 0.1
|
|
treemacs-recenter-after-file-follow nil
|
|
treemacs-recenter-after-tag-follow nil
|
|
treemacs-recenter-after-project-jump 'always
|
|
treemacs-recenter-after-project-expand 'on-distance
|
|
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
|
|
treemacs-project-follow-into-home nil
|
|
treemacs-show-cursor nil
|
|
treemacs-show-hidden-files t
|
|
treemacs-silent-filewatch nil
|
|
treemacs-silent-refresh nil
|
|
treemacs-sorting 'alphabetic-asc
|
|
treemacs-select-when-already-in-treemacs 'move-back
|
|
treemacs-space-between-root-nodes t
|
|
treemacs-tag-follow-cleanup t
|
|
treemacs-tag-follow-delay 1.5
|
|
treemacs-text-scale nil
|
|
treemacs-user-mode-line-format nil
|
|
treemacs-user-header-line-format nil
|
|
treemacs-wide-toggle-width 70
|
|
treemacs-width 35
|
|
treemacs-width-increment 1
|
|
treemacs-width-is-initially-locked t
|
|
treemacs-workspace-switch-cleanup nil)
|
|
|
|
;; The default width and height of the icons is 22 pixels. If you are
|
|
;; using a Hi-DPI display, uncomment this to double the icon size.
|
|
;;(treemacs-resize-icons 44)
|
|
|
|
(treemacs-follow-mode t)
|
|
(treemacs-filewatch-mode t)
|
|
(treemacs-fringe-indicator-mode 'always)
|
|
(when treemacs-python-executable
|
|
(treemacs-git-commit-diff-mode t))
|
|
|
|
(pcase (cons (not (null (executable-find "git")))
|
|
(not (null treemacs-python-executable)))
|
|
(`(t . t)
|
|
(treemacs-git-mode 'deferred))
|
|
(`(t . _)
|
|
(treemacs-git-mode 'simple)))
|
|
|
|
(treemacs-hide-gitignored-files-mode nil))
|
|
:bind
|
|
(:map global-map
|
|
("M-0" . treemacs-select-window)
|
|
("C-x t 1" . treemacs-delete-other-windows)
|
|
([f8] . treemacs)
|
|
("C-x t d" . treemacs-select-directory)
|
|
("C-x t B" . treemacs-bookmark)
|
|
("C-x t C-t" . treemacs-find-file)
|
|
("C-x t M-t" . treemacs-find-tag)))
|
|
|
|
(use-package treemacs-projectile
|
|
:after (treemacs projectile)
|
|
:ensure t)
|
|
|
|
(use-package treemacs-icons-dired
|
|
:hook (dired-mode . treemacs-icons-dired-enable-once)
|
|
:ensure t)
|
|
|
|
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
|
|
:after (treemacs persp-mode) ;;or perspective vs. persp-mode
|
|
:ensure t
|
|
:config (treemacs-set-scope-type 'Perspectives))
|
|
|
|
(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode
|
|
:after (treemacs)
|
|
:ensure t
|
|
:config (treemacs-set-scope-type 'Tabs))
|
|
|
|
(use-package treemacs-all-the-icons)
|
|
(treemacs-load-all-the-icons-with-workaround-font "Hermit")
|
|
|
|
(use-package dired
|
|
:ensure nil
|
|
:hook (dired-mode . dired-omit-mode)
|
|
:bind (:map dired-mode-map
|
|
( "." . dired-omit-mode)
|
|
( "RET" . dired-find-alternate-file))
|
|
:custom (dired-omit-files (rx (seq bol "."))))
|
|
|
|
(use-package projectile) ; project management
|
|
(projectile-mode +1)
|
|
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
|
|
|
|
;; (use-package dirvish) ; modern Dired
|
|
|
|
(use-package magit)
|
|
|
|
;; ;; Ivy (the thing that pops up for `C-s' and `M-x')
|
|
(use-package ivy
|
|
:ensure t
|
|
:diminish
|
|
:bind (("C-s" . swiper)
|
|
("C-x /" . swiper)
|
|
:map ivy-minibuffer-map
|
|
("TAB" . ivy-alt-done)
|
|
("C-l" . ivy-alt-done)
|
|
("C-j" . ivy-next-line)
|
|
("C-k" . ivy-previous-line)
|
|
:map ivy-switch-buffer-map
|
|
("C-k" . ivy-previous-line)
|
|
("C-l" . ivy-done)
|
|
("C-d" . ivy-switch-buffer-kill)
|
|
:map ivy-reverse-i-search-map
|
|
("C-n" . ivy-previous-line)
|
|
("C-d" . ivy-reverse-i-search-kill))
|
|
:config)
|
|
(ivy-mode 1)
|
|
|
|
(use-package swiper
|
|
:ensure t)
|
|
|
|
(use-package counsel)
|
|
|
|
;; (use-package vertico
|
|
;; :ensure t)
|
|
;; (vertico-mode 1)
|
|
|
|
;; (use-package consult)
|
|
;; (global-set-key (kbd "C-s") 'consult-line)
|
|
|
|
;; (use-package orderless
|
|
;; :ensure t
|
|
;; :custom
|
|
;; (completion-styles '(orderless basic))
|
|
;; (completion-category-overrides '((file (styles basic partial-completion)))))
|
|
|
|
|
|
;; Theme
|
|
(use-package ef-themes)
|
|
(use-package kaolin-themes)
|
|
(use-package modus-themes)
|
|
|
|
(define-advice doom-themes--prepare-facelist-1 (:override (specs))
|
|
(dolist (spec specs specs)
|
|
(when spec
|
|
(setcar (cdr spec)
|
|
(cl-loop for (classes plist . rest) in (cadr spec)
|
|
collect
|
|
(cons classes
|
|
(cons (cl-loop for (key val) on plist by #'cddr
|
|
append (list key (or val 'unspecified)))
|
|
rest)))))))
|
|
|
|
(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-outrun-electric t)
|
|
|
|
;; or for treemacs users
|
|
(setq doom-themes-treemacs-theme "doom-outrun-electric") ; use "doom-colors" for less minimal icon theme
|
|
(doom-themes-treemacs-config)
|
|
;; Corrects (and improves) org-mode's native fontification.
|
|
(doom-themes-org-config))
|
|
|
|
(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 and Fira Code ligatures in programming modes
|
|
(ligature-set-ligatures 'prog-mode
|
|
'(;; == === ==== => =| =>>=>=|=>==>> ==< =/=//=// =~
|
|
;; =:= =!=
|
|
("=" (rx (+ (or ">" "<" "|" "/" "~" ":" "!" "="))))
|
|
;; ;; ;;;
|
|
(";" (rx (+ ";")))
|
|
;; && &&&
|
|
("&" (rx (+ "&")))
|
|
;; !! !!! !. !: !!. != !== !~
|
|
("!" (rx (+ (or "=" "!" "\." ":" "~"))))
|
|
;; ?? ??? ?: ?= ?.
|
|
("?" (rx (or ":" "=" "\." (+ "?"))))
|
|
;; %% %%%
|
|
("%" (rx (+ "%")))
|
|
;; |> ||> |||> ||||> |] |} || ||| |-> ||-||
|
|
;; |->>-||-<<-| |- |== ||=||
|
|
;; |==>>==<<==<=>==//==/=!==:===>
|
|
("|" (rx (+ (or ">" "<" "|" "/" ":" "!" "}" "\]"
|
|
"-" "=" ))))
|
|
;; \\ \\\ \/
|
|
("\\" (rx (or "/" (+ "\\"))))
|
|
;; ++ +++ ++++ +>
|
|
("+" (rx (or ">" (+ "+"))))
|
|
;; :: ::: :::: :> :< := ::=
|
|
(":" (rx (or ">" "<" "=" ":=" (+ ":"))))
|
|
;; /\ /* /> /===:===!=//===>>==>==/
|
|
("/" (rx (+ (or ">" "<" "|" "\\" "\*" ":" "!"
|
|
"="))))
|
|
;; .. ... .... .= .- .? ..= ..<
|
|
("\." (rx (or "=" "-" "\?" "\.=" "\.<" (+ "\."))))
|
|
;; -- --- ---- -~ -> ->> -| -|->-->>->--<<-|
|
|
("-" (rx (+ (or ">" "<" "|" "~" "-"))))
|
|
;; *> */ *) ** *** ****
|
|
("*" (rx (or ">" "/" ")" (+ "*"))))
|
|
;; <> <!-- <|> <: <~ <~> <~~ <+ <* <$ </ <+> <*>
|
|
;; <$> </> <| <|| <||| <|||| <- <-| <-<<-|-> <->>
|
|
;; <<-> <= <=> <<==<<==>=|=>==/==//=!==:=>
|
|
;; << <<< <<<<
|
|
("<" (rx (+ (or "\+" "\*" "\$" "<" ">" ":" "~" "!"
|
|
"-" "/" "|" "="))))
|
|
;; >: >- >>- >--|-> >>-|-> >= >== >>== >=|=:=>>
|
|
;; >> >>> >>>>
|
|
(">" (rx (+ (or ">" "<" "|" "/" ":" "=" "-"))))
|
|
;; #: #= #! #( #? #[ #{ #_ #_( ## ### #####
|
|
("#" (rx (or ":" "=" "!" "(" "\?" "\[" "{" "_(" "_"
|
|
(+ "#"))))
|
|
;; ~~ ~~~ ~= ~- ~@ ~> ~~>
|
|
("~" (rx (or ">" "=" "-" "@" "~>" (+ "~"))))
|
|
;; __ ___ ____ _|_ __|____|_
|
|
("_" (rx (+ (or "_" "|"))))
|
|
;; Fira code: 0xFF 0x12
|
|
("0" (rx (and "x" (+ (in "A-F" "a-f" "0-9")))))
|
|
;; Fira code:
|
|
"Fl" "Tl" "fi" "fj" "fl" "ft"
|
|
;; The few not covered by the regexps.
|
|
"{|" "[|" "]#" "(*" "}#" "$>" "^="))
|
|
(ligature-set-ligatures 'ansi-term-mode
|
|
'(;; == === ==== => =| =>>=>=|=>==>> ==< =/=//=// =~
|
|
;; =:= =!=
|
|
("=" (rx (+ (or ">" "<" "|" "/" "~" ":" "!" "="))))
|
|
;; ;; ;;;
|
|
(";" (rx (+ ";")))
|
|
;; && &&&
|
|
("&" (rx (+ "&")))
|
|
;; !! !!! !. !: !!. != !== !~
|
|
("!" (rx (+ (or "=" "!" "\." ":" "~"))))
|
|
;; ?? ??? ?: ?= ?.
|
|
("?" (rx (or ":" "=" "\." (+ "?"))))
|
|
;; %% %%%
|
|
("%" (rx (+ "%")))
|
|
;; |> ||> |||> ||||> |] |} || ||| |-> ||-||
|
|
;; |->>-||-<<-| |- |== ||=||
|
|
;; |==>>==<<==<=>==//==/=!==:===>
|
|
("|" (rx (+ (or ">" "<" "|" "/" ":" "!" "}" "\]"
|
|
"-" "=" ))))
|
|
;; \\ \\\ \/
|
|
("\\" (rx (or "/" (+ "\\"))))
|
|
;; ++ +++ ++++ +>
|
|
("+" (rx (or ">" (+ "+"))))
|
|
;; :: ::: :::: :> :< := :// ::=
|
|
(":" (rx (or ">" "<" "=" "//" ":=" (+ ":"))))
|
|
;; /\ /* /> /===:===!=//===>>==>==/
|
|
("/" (rx (+ (or ">" "<" "|" "\\" "\*" ":" "!"
|
|
"="))))
|
|
;; .. ... .... .= .- .? ..= ..<
|
|
("\." (rx (or "=" "-" "\?" "\.=" "\.<" (+ "\."))))
|
|
;; -- --- ---- -~ -> ->> -| -|->-->>->--<<-|
|
|
("-" (rx (+ (or ">" "<" "|" "~" "-"))))
|
|
;; *> */ *) ** *** ****
|
|
("*" (rx (or ">" "/" ")" (+ "*"))))
|
|
;; <> <!-- <|> <: <~ <~> <~~ <+ <* <$ </ <+> <*>
|
|
;; <$> </> <| <|| <||| <|||| <- <-| <-<<-|-> <->>
|
|
;; <<-> <= <=> <<==<<==>=|=>==/==//=!==:=>
|
|
;; << <<< <<<<
|
|
("<" (rx (+ (or "\+" "\*" "\$" "<" ">" ":" "~" "!"
|
|
"-" "/" "|" "="))))
|
|
;; >: >- >>- >--|-> >>-|-> >= >== >>== >=|=:=>>
|
|
;; >> >>> >>>>
|
|
(">" (rx (+ (or ">" "<" "|" "/" ":" "=" "-"))))
|
|
;; #: #= #! #( #? #[ #{ #_ #_( ## ### #####
|
|
("#" (rx (or ":" "=" "!" "(" "\?" "\[" "{" "_(" "_"
|
|
(+ "#"))))
|
|
;; ~~ ~~~ ~= ~- ~@ ~> ~~>
|
|
("~" (rx (or ">" "=" "-" "@" "~>" (+ "~"))))
|
|
;; __ ___ ____ _|_ __|____|_
|
|
("_" (rx (+ (or "_" "|"))))
|
|
;; Fira code: 0xFF 0x12
|
|
("0" (rx (and "x" (+ (in "A-F" "a-f" "0-9")))))
|
|
;; Fira code:
|
|
"Fl" "Tl" "fi" "fj" "fl" "ft"
|
|
;; The few not covered by the regexps.
|
|
"{|" "[|" "]#" "(*" "}#" "$>" "^="))
|
|
;; Enables ligature checks globally in all buffers. You can also do it
|
|
;; per mode with `ligature-mode'.
|
|
(global-ligature-mode t))
|
|
|
|
(add-to-list 'default-frame-alist '(font . "Fira Code Nerd Font Mono"))
|
|
(set-face-attribute 'default t :font "Fira Code Nerd Font Mono")
|
|
(set-face-attribute 'default nil :height 120)
|
|
|
|
(use-package all-the-icons
|
|
:ensure t
|
|
:init
|
|
(unless (member "all-the-icons" (font-family-list))
|
|
(all-the-icons-install-fonts t)))
|
|
|
|
;; Code completion
|
|
;; (use-package company
|
|
;; :ensure t
|
|
;; :custom
|
|
;; (company-idle-delay 0)
|
|
;; :bind
|
|
;; (:map company-active-map
|
|
;; ("TAB" . company-complete-selection)
|
|
;; ("<tab>" . company-complete-selection)
|
|
;; ("<backtab>" . company-select-previous)
|
|
;; ("M-<" . company-select-first)
|
|
;; ("M->" . company-select-last)
|
|
;; ("<return>" . nil)
|
|
;; ("RET" . nil))
|
|
;; (:map company-mode-map
|
|
;; ("C-<tab>" . company-indent-or-complete-common)
|
|
;; ("C-TAB" . company-indent-or-complete-common)))
|
|
;; (global-company-mode 1)
|
|
|
|
;; (use-package company-quickhelp
|
|
;; :ensure t
|
|
;; :init
|
|
;; (company-quickhelp-mode 1)
|
|
;; (use-package pos-tip
|
|
;; :ensure t))
|
|
|
|
(use-package corfu
|
|
:custom
|
|
(corfu-cycle t)
|
|
:hook ((prog-mode . corfu-mode)
|
|
(shell-mode . corfu-mode)
|
|
(eshell-mode . corfu-mode)
|
|
(web-mode . corfu-mode)
|
|
(circe-mode . corfu-mode))
|
|
:init
|
|
(global-corfu-mode 1))
|
|
(use-package nerd-icons-corfu)
|
|
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)
|
|
|
|
(use-package emacs
|
|
:ensure nil
|
|
:custom
|
|
;; TAB cycle if there are only few candidates
|
|
;; (completion-cycle-threshold 3)
|
|
|
|
;; Enable indentation+completion using the TAB key.
|
|
;; `completion-at-point' is often bound to M-TAB.
|
|
(tab-always-indent 'complete)
|
|
|
|
;; Emacs 30 and newer: Disable Ispell completion function.
|
|
;; Try `cape-dict' as an alternative.
|
|
(text-mode-ispell-word-completion nil)
|
|
|
|
;; Hide commands in M-x which do not apply to the current mode. Corfu
|
|
;; commands are hidden, since they are not used via M-x. This setting is
|
|
;; useful beyond Corfu.
|
|
(read-extended-command-predicate #'command-completion-default-include-p))
|
|
|
|
(use-package yasnippet)
|
|
(yas-global-mode 1)
|
|
(use-package ivy-yasnippet)
|
|
(use-package yasnippet-snippets)
|
|
|
|
;; LSP
|
|
(use-package lsp-mode
|
|
:init
|
|
(setq lsp-keymap-prefix "C-c l")
|
|
:hook (
|
|
(c-mode . lsp)
|
|
(c++-mode . lsp)
|
|
(lsp-mode . lsp-enable-which-key-integration))
|
|
:commands lsp)
|
|
|
|
(use-package lsp-ui :commands lsp-ui-mode)
|
|
|
|
(use-package lsp-ivy :commands lsp-ivy-workspace-symbol)
|
|
|
|
(use-package which-key
|
|
:config
|
|
(which-key-mode))
|
|
|
|
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
|
(add-hook 'web-mode-hook 'display-line-numbers-mode)
|
|
(add-hook 'conf-mode-hook 'display-line-numbers-mode)
|
|
|
|
(use-package outline-indent
|
|
:ensure t
|
|
:custom
|
|
(outline-indent-ellipsis " ▼ "))
|
|
|
|
(add-hook 'prog-mode-hook #'outline-indent-minor-mode)
|
|
|
|
(setq-default show-paren-mode nil)
|
|
|
|
;; Highlighting comments
|
|
(use-package hl-todo)
|
|
(setq hl-todo-keyword-faces
|
|
'(("TODO" . "#FF0000")
|
|
("FIXME" . "#FF0000")
|
|
("DEBUG" . "#A020F0")
|
|
("GOTCHA" . "#FF4500")
|
|
("STUB" . "#1E90FF")))
|
|
(keymap-set hl-todo-mode-map "C-c p" #'hl-todo-previous)
|
|
(keymap-set hl-todo-mode-map "C-c n" #'hl-todo-next)
|
|
(keymap-set hl-todo-mode-map "C-c o" #'hl-todo-occur)
|
|
(keymap-set hl-todo-mode-map "C-c i" #'hl-todo-insert)
|
|
(global-hl-todo-mode)
|
|
|
|
(use-package doom-modeline
|
|
:ensure t
|
|
:config
|
|
(setq doom-modeline-height 30)
|
|
(unless (directory-empty-p "/sys/class/power_supply/")
|
|
(display-battery-mode))
|
|
(setq doom-modeline-enable-word-count t)
|
|
(column-number-mode 1)
|
|
:init (doom-modeline-mode 1))
|
|
|
|
(use-package minions
|
|
:init (minions-mode))
|
|
|
|
(defun choose-theme (theme)
|
|
"Switch themes and unload previous.
|
|
THEME chooses the theme also shut up Flycheck"
|
|
(interactive
|
|
(list (intern (completing-read "Theme: "
|
|
(custom-available-themes) nil t))))
|
|
(dolist (theme custom-enabled-themes)
|
|
(disable-theme theme))
|
|
(load-theme theme))
|
|
|
|
;; Major modes
|
|
;; Configs
|
|
(use-package apache-mode)
|
|
(use-package caddyfile-mode)
|
|
(use-package cmake-mode)
|
|
(use-package crontab-mode)
|
|
(use-package crystal-mode)
|
|
(use-package csgo-conf-mode)
|
|
(use-package dotenv-mode)
|
|
(use-package dockerfile-mode)
|
|
(use-package hyprlang-ts-mode)
|
|
(use-package fvwm-mode)
|
|
(use-package git-modes)
|
|
(use-package ini-mode)
|
|
(use-package mutt-mode)
|
|
(use-package nginx-mode)
|
|
(use-package pip-requirements)
|
|
(use-package systemd)
|
|
(use-package tf2-conf-mode)
|
|
(use-package toml-mode)
|
|
(use-package tmux-mode)
|
|
(use-package yaml-mode)
|
|
(use-package yuck-mode)
|
|
|
|
;; Programming languages/markup/scripting/stylesheets
|
|
(use-package d-mode)
|
|
(use-package dart-mode)
|
|
(use-package elixir-mode)
|
|
(use-package fish-mode)
|
|
(use-package fsharp-mode)
|
|
(use-package go-mode)
|
|
(use-package gemtext-mode)
|
|
(use-package haxe-mode)
|
|
(use-package jinja2-mode)
|
|
(use-package julia-mode)
|
|
(use-package json-mode)
|
|
(use-package kotlin-mode)
|
|
(use-package lua-mode)
|
|
(use-package nasm-mode)
|
|
(use-package nim-mode)
|
|
(use-package nushell-mode)
|
|
(use-package php-mode)
|
|
(use-package rust-mode)
|
|
(use-package sass-mode)
|
|
(use-package scala-mode)
|
|
(use-package swift-mode)
|
|
(use-package typescript-mode)
|
|
(use-package v-mode)
|
|
(use-package vimscript-ts-mode)
|
|
(use-package zig-mode)
|
|
|
|
(use-package web-mode
|
|
:ensure t
|
|
:mode
|
|
(("\\.phtml\\'" . web-mode)
|
|
("\\.php\\'" . web-mode)
|
|
("\\.tpl\\'" . web-mode)
|
|
("\\.[agj]sp\\'" . web-mode)
|
|
("\\.as[cp]x\\'" . web-mode)
|
|
("\\.erb\\'" . web-mode)
|
|
("\\.mustache\\'" . web-mode)
|
|
("\\.djhtml\\'" . web-mode)
|
|
("\\.xhtml\\'" . web-mode)
|
|
("\\.xht\\'" . web-mode)
|
|
("\\.css\\'" . web-mode)))
|
|
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
|
|
|
|
(setq nxml-child-indent 'tab-width)
|
|
|
|
;; C and C++
|
|
;; (use-package irony)
|
|
;; (add-hook 'c++-mode-hook 'irony-mode)
|
|
;; (add-hook 'c-mode-hook 'irony-mode)
|
|
;; (add-hook 'objc-mode-hook 'irony-mode)
|
|
;; (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
|
|
(setq c-basic-offset 4) ; (4)
|
|
|
|
;; Common Lisp
|
|
(use-package slime)
|
|
(setq inferior-lisp-program "sbcl") ; change if you use another compiler
|
|
;; Terminal
|
|
(use-package vterm
|
|
:ensure t)
|
|
|
|
;; Code checking. Intentionally left off so it can be opened when needed.
|
|
;; Having a checker on your code at all times is REALLY distracting to me.
|
|
(use-package flycheck
|
|
:ensure t)
|
|
(global-flycheck-mode -1) ; SHUT THE FUCK UP!!!
|
|
|
|
;; Internet
|
|
(use-package elfeed ; Newsfeeds
|
|
:bind ("C-x w" . 'elfeed)) ; install cURL if possible.
|
|
(setf elfeed-curl-extra-arguments '("-x" "socks5h://127.0.0.1:9050")) ; Tor SOCKS5 proxy
|
|
(setq browse-url-browser-function 'eww-browse-url) ; I want to stay in Emacs!
|
|
(use-package elfeed-org)
|
|
(unless (file-exists-p "~/.emacs.d/elfeed.org")
|
|
(make-empty-file "~/.emacs.d/elfeed.org"))
|
|
(elfeed-org)
|
|
(setq rmh-elfeed-org-files (list "~/.emacs.d/elfeed.org"))
|
|
|
|
(use-package circe)
|
|
|
|
(use-package elpher) ; Gemini and Gopher client
|
|
|
|
;; Multimedia
|
|
(use-package emms)
|
|
(emms-all)
|
|
(setq emms-player-list '(emms-player-vlc)
|
|
emms-info-functions '(emms-info-native))
|
|
(use-package ivy-emms)
|
|
(use-package empv)
|
|
|
|
;; Misc tools
|
|
(use-package fireplace) ; does what it says
|
|
(use-package osm) ; OpenStreetMap
|
|
(use-package biome) ; weather from Open-Meteo
|
|
(use-package nhexl-mode) ; better hex editing
|
|
(use-package ipcalc) ; IPv4 subnet calculations
|
|
(use-package disk-usage)
|
|
(use-package dionysos
|
|
:config
|
|
(setq dionysos-backend 'vlc)) ; Music player
|
|
|
|
;; for ebooks
|
|
(use-package nov
|
|
:bind (:map nov-mode-map
|
|
("<mouse-9>" . nov-next-document)
|
|
("<mouse-8>" . nov-previous-document))) ; needs libxml2 support
|
|
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
|
|
|
(use-package edraw-org
|
|
:ensure t
|
|
:after org
|
|
:vc (:url "https://github.com/misohena/el-easydraw"
|
|
:branch master)
|
|
:config
|
|
(edraw-org-setup-default))
|
|
|
|
;; Org-mode
|
|
(unless (file-directory-p "~/Documents/org")
|
|
(make-directory "~/Documents/org"))
|
|
|
|
|
|
(unless (file-directory-p "~/Documents/org/agenda")
|
|
(make-directory "~/Documents/org/agenda"))
|
|
(setq org-directory "~/Documents/org")
|
|
(setq org-agenda-files (directory-files-recursively "~/Documents/org/agenda/" ".*\.org$"))
|
|
|
|
(use-package org-noter)
|
|
|
|
(use-package org-modern)
|
|
(setq
|
|
;; Edit settings
|
|
org-auto-align-tags nil
|
|
org-tags-column 0
|
|
org-catch-invisible-edits 'show-and-error
|
|
org-special-ctrl-a/e t
|
|
org-insert-heading-respect-content t
|
|
|
|
;; Org styling, hide markup etc.
|
|
org-hide-emphasis-markers t
|
|
org-pretty-entities t
|
|
org-agenda-tags-column 0
|
|
org-modern-fold-stars '(("●" . "●") ( "◉" . "◉" ) ("◍" . "◍") ("○" . "○") ("⊛" . "⊛"))
|
|
)
|
|
|
|
;; Ellipsis styling
|
|
(setq org-ellipsis "…")
|
|
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
|
;; yes, I know you're not supposed to do this, but it doesn't indent properly without it
|
|
;; and looks REALLY ugly otherwise so I'll leave it there for now
|
|
(add-to-list 'org-mode-hook 'org-indent-mode)
|
|
(global-org-modern-mode)
|
|
|
|
(use-package org-dashboard)
|
|
(defun my/org-dashboard-filter (entry)
|
|
(and (> (plist-get entry :progress-percent) 0)
|
|
(< (plist-get entry :progress-percent) 100)
|
|
(not (member "archive" (plist-get entry :tags)))))
|
|
(setq org-dashboard-filter 'my/org-dashboard-filter)
|
|
|
|
(use-package ox-gemini)
|
|
|
|
(unless (file-directory-p "~/Documents/org/roam")
|
|
(make-directory "~/Documents/org/roam"))
|
|
|
|
(use-package emacsql)
|
|
(use-package org-roam
|
|
:ensure t
|
|
:custom
|
|
(org-roam-directory (file-truename "~/Documents/org/roam"))
|
|
:bind (("C-c n l" . org-roam-buffer-toggle)
|
|
("C-c n f" . org-roam-node-find)
|
|
("C-c n g" . org-roam-graph)
|
|
("C-c n i" . org-roam-node-insert)
|
|
("C-c n c" . org-roam-capture)
|
|
;; Dailies
|
|
("C-c n j" . org-roam-dailies-capture-today))
|
|
:config
|
|
;; If you're using a vertical completion framework, you might want a more informative completion interface
|
|
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
|
|
(org-roam-db-autosync-mode))
|
|
|
|
(use-package org-noter)
|
|
|
|
;; this thing converts each frame to an image lmfao, don't actually use it it's just here for the funny
|
|
(use-package ffmpeg-player)
|
|
|
|
;; Games and general distractions
|
|
(use-package 2048-game)
|
|
(use-package sudoku)
|
|
|
|
;; Below lies what came out of weeks of fighting with Emacs to make it not copy everything I mass delete.
|
|
(defun backward-delete-word (arg) ; C-backspace
|
|
"Delete characters backward until encountering the beginning of a word.
|
|
With argument ARG, do this that many times."
|
|
(interactive "p")
|
|
(delete-region (point) (progn (backward-word arg) (point))))
|
|
(global-set-key [C-backspace] 'backward-delete-word)
|
|
|
|
(defun delete-active-region (&optional killp)
|
|
(delete-region (point) (mark)) t)
|
|
|
|
(defun delete-line-no-kill ()
|
|
"STOP COPYING TO MY CLIPBOARD."
|
|
(interactive)
|
|
(delete-region
|
|
(point)
|
|
(save-excursion (move-end-of-line 1) (point)))
|
|
(delete-char 1))
|
|
(global-set-key (kbd "C-k") 'delete-line-no-kill)
|
|
|
|
(use-package undo-fu
|
|
:config
|
|
(global-unset-key (kbd "C-z"))
|
|
(global-set-key (kbd "C-x u") 'undo-fu-only-undo)
|
|
(global-set-key (kbd "C-M-_") 'undo-fu-only-redo))
|
|
|
|
;; Get those custom autogenerated sections to go away
|
|
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
|
(if (not (file-exists-p custom-file))
|
|
(make-empty-file custom-file))
|
|
(load custom-file)
|
|
|
|
(put 'dired-find-alternate-file 'disabled nil)
|