921 lines
34 KiB
Org Mode
921 lines
34 KiB
Org Mode
#+title Ian's Emacs Config
|
||
#+PROPERTY: header-args:emacs-lisp :tangle ./init.el
|
||
|
||
* Literate Config Setup
|
||
To get started, run =C-c C-v t=
|
||
#+begin_src emacs-lisp
|
||
(defun dotfiles/org-babel-tangle-config ()
|
||
(when (string-equal (buffer-file-name)
|
||
(expand-file-name "~/dotfiles/guix/init.org"))
|
||
(let ((org-confirm-babel-evaluate nil))
|
||
(org-babel-tangle))))
|
||
|
||
(add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'dotfiles/org-babel-tangle-config)))
|
||
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
| (lambda nil (add-hook 'after-save-hook #'dotfiles/org-babel-tangle-config)) | org-tempo-setup | #[0 \300\301\302\303\304$\207 [add-hook change-major-mode-hook org-fold-show-all append local] 5] | #[0 \300\301\302\303\304$\207 [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] | org-babel-result-hide-spec | org-babel-hide-all-hashes | #[0 \301\211\207 [imenu-create-index-function org-imenu-get-tree] 2] | (lambda nil (display-line-numbers-mode 0)) |
|
||
|
||
* Global variables
|
||
* Secrets
|
||
#+begin_src emacs-lisp
|
||
(use-package pinentry)
|
||
(use-package pass)
|
||
(use-package password-store)
|
||
(pinentry start)
|
||
(setq gptel-api-key (password-store-get "self/openai-alt"))
|
||
#+end_src
|
||
* AI
|
||
#+begin_src emacs-lisp
|
||
(use-package gptel)
|
||
(setq gptl-default-mode 'org-mode)
|
||
#+end_src
|
||
* Full Config
|
||
I need to move this all over first before I do any organizing to make sure tangle works.
|
||
#+begin_src emacs-lisp
|
||
|
||
(setq user-init-file (expand-file-name "~/dotfiles/guix/init.el"))
|
||
|
||
(defun reload-config ()
|
||
"Reload the Emacs configuration."
|
||
(interactive)
|
||
(load-file user-init-file))
|
||
|
||
(setq inhibit-startup-message t)
|
||
|
||
(menu-bar-mode -1)
|
||
(tool-bar-mode -1)
|
||
(scroll-bar-mode -1)
|
||
|
||
|
||
(recentf-mode 1)
|
||
(savehist-mode 1) ; remember previous commands in minibuffer
|
||
(save-place-mode 1) ; put cursor in last place when opening a file
|
||
|
||
;; Avoid customization UI auto-variables in init.el
|
||
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
|
||
(load custom-file 'noerror 'nomessage)
|
||
|
||
;; Don't show popup UI when prompting
|
||
(setq use-dialog-box nil)
|
||
|
||
;; Update files when changed on disk
|
||
(global-auto-revert-mode 1)
|
||
|
||
(set-frame-font "DejaVu Sans Mono 14")
|
||
|
||
;; Initialize Package Sources
|
||
(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))
|
||
|
||
;; Initialize use-package on non-linux platforms
|
||
(unless (package-installed-p 'use-package)
|
||
(package-install 'use-package))
|
||
|
||
(require 'use-package)
|
||
(setq use-package-always-ensure t)
|
||
|
||
;; Persist history over Emacs restarts. Vertico sorts by history position.
|
||
(use-package savehist
|
||
:init
|
||
(savehist-mode))
|
||
;; Enable vertico
|
||
(use-package vertico
|
||
:init
|
||
(vertico-mode)
|
||
|
||
;; Different scroll margin
|
||
;; (setq vertico-scroll-margin 0)
|
||
|
||
;; Show more candidates
|
||
;; (setq vertico-count 20)
|
||
|
||
;; Grow and shrink the Vertico minibuffer
|
||
;; (setq vertico-resize t)
|
||
|
||
;; Optionally enable cycling for `vertico-next' and `vertico-previous'.
|
||
;; (setq vertico-cycle t)
|
||
)
|
||
|
||
; For getting vertico history in shell buffer
|
||
(use-package consult
|
||
:bind (:map minibuffer-local-map ("C-r" . consult-history)))
|
||
|
||
|
||
|
||
;; A few more useful configurations...
|
||
(use-package emacs
|
||
:init
|
||
;; Add prompt indicator to `completing-read-multiple'.
|
||
;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
|
||
(defun crm-indicator (args)
|
||
(cons (format "[CRM%s] %s"
|
||
(replace-regexp-in-string
|
||
"\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
|
||
crm-separator)
|
||
(car args))
|
||
(cdr args)))
|
||
(advice-add #'completing-read-multiple :filter-args #'crm-indicator)
|
||
|
||
;; Do not allow the cursor in the minibuffer prompt
|
||
(setq minibuffer-prompt-properties
|
||
'(read-only t cursor-intangible t face minibuffer-prompt))
|
||
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
|
||
|
||
;; Emacs 28: Hide commands in M-x which do not work in the current mode.
|
||
;; Vertico commands are hidden in normal buffers.
|
||
;; (setq read-extended-command-predicate
|
||
;; #'command-completion-default-include-p)
|
||
|
||
;; Enable recursive minibuffers
|
||
(setq enable-recursive-minibuffers t))
|
||
|
||
;; todo: evaluate this
|
||
;; Optionally use the `orderless' completion style.
|
||
(use-package orderless
|
||
:init
|
||
;; Configure a custom style dispatcher (see the Consult wiki)
|
||
;; (setq orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch)
|
||
;; orderless-component-separator #'orderless-escapable-split-on-space)
|
||
(setq completion-styles '(orderless basic)
|
||
completion-category-defaults nil
|
||
completion-category-overrides '((file (styles partial-completion)))))
|
||
|
||
(setq completion-styles '(basic substring partial-completion flex))
|
||
|
||
;; Enable rich annotations using the Marginalia package
|
||
(use-package marginalia
|
||
;; Bind `marginalia-cycle' locally in the minibuffer. To make the binding
|
||
;; available in the *Completions* buffer, add it to the
|
||
;; `completion-list-mode-map'.
|
||
:bind (:map minibuffer-local-map
|
||
("M-A" . marginalia-cycle))
|
||
|
||
;; The :init section is always executed.
|
||
:init
|
||
|
||
;; Marginalia must be activated in the :init section of use-package such that
|
||
;; the mode gets enabled right away. Note that this forces loading the
|
||
;; package.
|
||
(marginalia-mode))
|
||
(custom-set-variables
|
||
;; custom-set-variables was added by Custom.
|
||
;; If you edit it by hand, you could mess it up, so be careful.
|
||
;; Your init file should contain only one such instance.
|
||
;; If there is more than one, they won't work right.
|
||
'(package-selected-packages '(counsel ivy)))
|
||
|
||
(use-package simple-modeline
|
||
:hook (after-init . simple-modeline-mode))
|
||
|
||
(use-package base16-theme)
|
||
(load-theme 'base16-oceanicnext t)
|
||
|
||
(global-display-line-numbers-mode t)
|
||
(dolist (mode
|
||
'(org-mode-hook
|
||
term-mode-hook
|
||
eshell-mode-hook))
|
||
(add-hook mode (lambda () (display-line-numbers-mode 0))))
|
||
(column-number-mode)
|
||
|
||
(use-package rainbow-delimiters
|
||
:hook (prog-mode . rainbow-delimiters-mode))
|
||
|
||
(use-package which-key
|
||
:init (which-key-mode)
|
||
:diminish which-key-mode
|
||
:config(setq which-key-idle-delay 0.3))
|
||
|
||
(use-package helpful)
|
||
;; Note that the built-in `describe-function' includes both functions
|
||
;; and macros. `helpful-function' is functions only, so we provide
|
||
;; `helpful-callable' as a drop-in replacement.
|
||
(global-set-key (kbd "C-h f") #'helpful-callable)
|
||
|
||
(global-set-key (kbd "C-h v") #'helpful-variable)
|
||
(global-set-key (kbd "C-h k") #'helpful-key)
|
||
(global-set-key (kbd "C-h x") #'helpful-command)
|
||
|
||
;; Lookup the current symbol at point. C-c C-d is a common keybinding
|
||
;; for this in lisp modes.
|
||
(global-set-key (kbd "C-c C-d") #'helpful-at-point)
|
||
|
||
;; Look up *F*unctions (excludes macros).
|
||
;;
|
||
;; By default, C-h F is bound to `Info-goto-emacs-command-node'. Helpful
|
||
;; already links to the manual, if a function is referenced there.
|
||
(global-set-key (kbd "C-h F") #'helpful-function)
|
||
|
||
(defconst IS-MAC (eq system-type 'darwin))
|
||
|
||
(when IS-MAC
|
||
;; mac specific settings
|
||
)
|
||
|
||
;; General Emacs keybindings
|
||
(which-key-add-key-based-replacements
|
||
"C-x" "Ctrl-X-prefix"
|
||
"C-c" "Ctrl-C-prefix"
|
||
"C-h" "Help"
|
||
"M-x" "M-x-commands"
|
||
"C-x r" "Rectangles/Registers"
|
||
"C-x 4" "Other-window"
|
||
"C-x 5" "Frames"
|
||
"C-x 8" "Unicode"
|
||
"C-x @" "Event-modifiers"
|
||
"C-x a" "Abbreviations"
|
||
"C-x n" "Narrowing"
|
||
"C-x g" "Magit-status"
|
||
"C-c M-g" "Magit-file-dispatch"
|
||
"C-x v" "Version-Control"
|
||
"C-x X" "Font/Encoding"
|
||
"C-x p" "Project/Buffer"
|
||
"C-x t" "Tabs/Terminal"
|
||
"C-x w" "Windows/Workspaces"
|
||
"C-x x" "Text/Rectangle"
|
||
"C-x C-a" "Emacs-Lisp-Debug"
|
||
"C-x RET" "Coding-system")
|
||
|
||
;; Emacs major modes and related prefixes
|
||
(which-key-add-key-based-replacements
|
||
"C-c m" "Major-mode-cmds"
|
||
"C-c p" "Projectile"
|
||
"C-c g" "Magit"
|
||
"C-c l" "Lisp"
|
||
"C-c @" "HS-minor-mode"
|
||
"C-c t" "Toggle"
|
||
"C-c /" "Comment")
|
||
|
||
;; Org mode specific bindings
|
||
(which-key-add-key-based-replacements
|
||
"C-c C-x" "Org-mode-C-c-C-x"
|
||
"C-c C-w" "Org-refile"
|
||
"C-c [" "Org-agenda")
|
||
|
||
|
||
(defun split-and-follow-horizontally ()
|
||
(interactive)
|
||
(split-window-below)
|
||
(balance-windows)
|
||
(other-window 1))
|
||
|
||
(defun split-and-follow-vertically ()
|
||
(interactive)
|
||
(split-window-right)
|
||
(balance-windows)
|
||
(other-window 1))
|
||
|
||
(global-set-key (kbd "s-c") 'delete-window)
|
||
(global-set-key (kbd "s-h") 'windmove-left)
|
||
(global-set-key (kbd "s-j") 'windmove-down)
|
||
(global-set-key (kbd "s-k") 'windmove-up)
|
||
(global-set-key (kbd "s-l") 'windmove-right)
|
||
; (define-key evil-normal-state-map (kbd "s-d") 'kill-this-buffer)
|
||
(define-key evil-normal-state-map (kbd "s-n") 'projectile-next-project-buffer)
|
||
(define-key evil-normal-state-map (kbd "s-p") 'projectile-previous-project-buffer)
|
||
; (define-key evil-normal-state-map (kbd "s-J") 'split-and-follow-horizontally)
|
||
; (define-key evil-normal-state-map (kbd "s-L") 'split-and-follow-vertically)
|
||
; (define-key evil-normal-state-map (kbd "s-b") 'buffer-menu)
|
||
; (define-key evil-normal-state-map (kbd "s-x") 'execute-extended-command)
|
||
(global-set-key (kbd "s-SPC") 'tab-next)
|
||
|
||
(use-package magit)
|
||
(use-package treemacs)
|
||
(use-package org)
|
||
(use-package projectile)
|
||
|
||
(use-package lsp-mode
|
||
:commands (lsp lsp-deferred)
|
||
:init
|
||
(setq lsp-keymap-prefix "C-c l")
|
||
:config
|
||
(lsp-enable-which-key-integration t)
|
||
:hook (terraform-mode . lsp-deferred)
|
||
:hook (rust-mode . lsp-deferred))
|
||
|
||
(use-package lsp-ui)
|
||
(use-package lsp-treemacs)
|
||
(use-package flycheck
|
||
:ensure t
|
||
:init (global-flycheck-mode))
|
||
|
||
(use-package terraform-mode
|
||
:ensure t)
|
||
|
||
|
||
|
||
;; (setq deft-directory "~/notes/deft"
|
||
;; deft-extensions '("org" "txt")
|
||
;; deft-recursive t)
|
||
|
||
;; (setq org-roam-directory "~/notes/roam")
|
||
|
||
(setq projectile-project-search-path '("~/code/"))
|
||
|
||
;; (setq company-minimum-prefix-length 100)
|
||
;; (map! :i "S-o" #'company-complete)
|
||
|
||
|
||
|
||
(setq tab-always-indent 'complete)
|
||
(setq tab-first-completion 'word)
|
||
|
||
(use-package company
|
||
:ensure t
|
||
:hook (prog-mode . company-mode)
|
||
:diminish
|
||
:bind (:map company-active-map
|
||
("<tab>" . company-select-next)
|
||
("TAB" . company-select-next)
|
||
("<backtab>" . company-select-previous)
|
||
("<S-tab>" . company-select-previous))
|
||
(:map lsp-mode-map ; more general mode than this?
|
||
("<tab>" . company-indent-or-complete-common))
|
||
:config
|
||
(global-company-mode 1)
|
||
:init
|
||
(setq company-idle-delay nil))
|
||
|
||
(use-package rust-mode
|
||
:ensure t
|
||
:mode "\\.rs\\'"
|
||
:config
|
||
(setq rust-format-on-save t)) ; Automatically format rust files on save
|
||
|
||
(use-package cargo
|
||
:ensure t
|
||
:hook (rust-mode . cargo-minor-mode))
|
||
|
||
(use-package eshell)
|
||
(use-package vterm)
|
||
(use-package treemacs-projectile)
|
||
;(use-package treemacs-nerd-icons
|
||
; :config
|
||
; (treemacs-load-theme "nerd-icons"))
|
||
|
||
(setq ring-bell-function 'ignore)
|
||
(setq dired-listing-switches "-al")
|
||
|
||
(setq backup-directory-alist `(("." . "~/.config/emacs/backups/")))
|
||
(setq auto-save-file-name-transforms
|
||
`((".*" "~/.config/emacs/autosaves/" t)))
|
||
|
||
(setq dired-dwim-target t) ; opening 'other window' on a subdir enters 2 window dired mode for copy/paste
|
||
(use-package dired-single)
|
||
|
||
(defun my-dired-init ()
|
||
"Bunch of stuff to run for dired, either immediately or when it's
|
||
loaded."
|
||
;; <add other stuff here>
|
||
(define-key dired-mode-map [remap dired-find-file]
|
||
'dired-single-buffer)
|
||
(define-key dired-mode-map [remap dired-mouse-find-file-other-window]
|
||
'dired-single-buffer-mouse)
|
||
(define-key dired-mode-map [remap dired-up-directory]
|
||
'dired-single-up-directory))
|
||
|
||
;; if dired's already loaded, then the keymap will be bound
|
||
(if (boundp 'dired-mode-map)
|
||
;; we're good to go; just add our bindings
|
||
(my-dired-init)
|
||
;; it's not loaded yet, so add our bindings to the load-hook
|
||
(add-hook 'dired-load-hook 'my-dired-init))
|
||
|
||
(use-package dired-open
|
||
:config
|
||
(setq dired-open-extensions '(("png" . "sxiv")
|
||
("mkv" . "mpv")
|
||
("avi" . "mpv"))))
|
||
|
||
(use-package all-the-icons-dired
|
||
:hook (dired-mode . all-the-icons-dired-mode))
|
||
|
||
(use-package treemacs-all-the-icons)
|
||
|
||
(org-babel-do-load-languages
|
||
'org-babel-load-languages
|
||
'((emacs-lisp . t)
|
||
(python . t)))
|
||
|
||
(setq org-confirm-babel-evaluate nil)
|
||
|
||
;; (use-package org-tempo)
|
||
|
||
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
|
||
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
|
||
(add-to-list 'org-structure-template-alist '("py" . "src python"))
|
||
|
||
(use-package embark-consult)
|
||
#+end_src
|
||
|
||
* Meow
|
||
#+begin_src emacs-lisp
|
||
; (use-package 'meow)
|
||
; (defun meow-setup ()
|
||
; (setq meow-cheatsheet-layout meow-cheatsheet-layout-colemak)
|
||
; (meow-motion-overwrite-define-key
|
||
; ;; Use e to move up, n to move down.
|
||
; ;; Since special modes usually use n to move down, we only overwrite e here.
|
||
; '("e" . meow-prev)
|
||
; '("<escape>" . ignore))
|
||
; (meow-leader-define-key
|
||
; '("?" . meow-cheatsheet)
|
||
; ;; To execute the originally e in MOTION state, use SPC e.
|
||
; '("e" . "H-e")
|
||
; '("1" . meow-digit-argument)
|
||
; '("2" . meow-digit-argument)
|
||
; '("3" . meow-digit-argument)
|
||
; '("4" . meow-digit-argument)
|
||
; '("5" . meow-digit-argument)
|
||
; '("6" . meow-digit-argument)
|
||
; '("7" . meow-digit-argument)
|
||
; '("8" . meow-digit-argument)
|
||
; '("9" . meow-digit-argument)
|
||
; '("0" . meow-digit-argument))
|
||
; (meow-normal-define-key
|
||
; '("0" . meow-expand-0)
|
||
; '("1" . meow-expand-1)
|
||
; '("2" . meow-expand-2)
|
||
; '("3" . meow-expand-3)
|
||
; '("4" . meow-expand-4)
|
||
; '("5" . meow-expand-5)
|
||
; '("6" . meow-expand-6)
|
||
; '("7" . meow-expand-7)
|
||
; '("8" . meow-expand-8)
|
||
; '("9" . meow-expand-9)
|
||
; '("-" . negative-argument)
|
||
; '(";" . meow-reverse)
|
||
; '("," . meow-inner-of-thing)
|
||
; '("." . meow-bounds-of-thing)
|
||
; '("[" . meow-beginning-of-thing)
|
||
; '("]" . meow-end-of-thing)
|
||
; '("/" . meow-visit)
|
||
; '("a" . meow-append)
|
||
; '("A" . meow-open-below)
|
||
; '("b" . meow-back-word)
|
||
; '("B" . meow-back-symbol)
|
||
; '("c" . meow-change)
|
||
; '("d" . meow-delete)
|
||
; '("e" . meow-prev)
|
||
; '("E" . meow-prev-expand)
|
||
; '("f" . meow-find)
|
||
; '("g" . meow-cancel-selection)
|
||
; '("G" . meow-grab)
|
||
; '("m" . meow-left)
|
||
; '("M" . meow-left-expand)
|
||
; '("i" . meow-right)
|
||
; '("I" . meow-right-expand)
|
||
; '("j" . meow-join)
|
||
; '("k" . meow-kill)
|
||
; '("l" . meow-line)
|
||
; '("L" . meow-goto-line)
|
||
; '("h" . meow-mark-word)
|
||
; '("H" . meow-mark-symbol)
|
||
; '("n" . meow-next)
|
||
; '("N" . meow-next-expand)
|
||
; '("o" . meow-block)
|
||
; '("O" . meow-to-block)
|
||
; '("p" . meow-yank)
|
||
; '("q" . meow-quit)
|
||
; '("r" . meow-replace)
|
||
; '("s" . meow-insert)
|
||
; '("S" . meow-open-above)
|
||
; '("t" . meow-till)
|
||
; '("u" . meow-undo)
|
||
; '("U" . meow-undo-in-selection)
|
||
; '("v" . meow-search)
|
||
; '("w" . meow-next-word)
|
||
; '("W" . meow-next-symbol)
|
||
; '("x" . meow-delete)
|
||
; '("X" . meow-backward-delete)
|
||
; '("y" . meow-save)
|
||
; '("z" . meow-pop-selection)
|
||
; '("'" . repeat)
|
||
; '("<escape>" . ignore)))
|
||
;
|
||
; (require 'meow)
|
||
; (meow-setup)
|
||
; (meow-global-mode 1)
|
||
#+end_src
|
||
* Evil
|
||
#+begin_src emacs-lisp
|
||
;(unless (package-installed-p 'evil)
|
||
; (package-install 'evil))
|
||
; (evil-mode 1)
|
||
; (setq evil-undo-system 'undo-tree)
|
||
(use-package undo-tree
|
||
:ensure t
|
||
:after evil
|
||
:diminish
|
||
:config
|
||
(evil-set-undo-system 'undo-tree)
|
||
(global-undo-tree-mode 1))
|
||
(use-package evil
|
||
:ensure t
|
||
:config
|
||
(evil-mode 1))
|
||
#+end_src
|
||
* Mode-Specific Commands
|
||
#+begin_src emacs-lisp
|
||
(defun custom/conditional-imenu ()
|
||
"Call `consult-org-heading` in Org mode, otherwise `consult-imenu`."
|
||
(interactive)
|
||
(if (eq major-mode 'org-mode)
|
||
(consult-org-heading)
|
||
(consult-imenu)))
|
||
#+end_src
|
||
* Web browsing and youtube
|
||
#+begin_src emacs-lisp
|
||
;; Using straight:
|
||
;;(use-package empv
|
||
;; :straight (:host github :repo "isamert/empv.el"))
|
||
|
||
(use-package empv)
|
||
|
||
(setq empv-radio-channels
|
||
'(("SomaFM - Groove Salad" . "http://www.somafm.com/groovesalad.pls")
|
||
("SomaFM - Drone Zone" . "http://www.somafm.com/dronezone.pls")
|
||
("SomaFM - Sonic Universe" . "https://somafm.com/sonicuniverse.pls")
|
||
("SomaFM - Metal" . "https://somafm.com/metal.pls")
|
||
("SomaFM - Vaporwaves" . "https://somafm.com/vaporwaves.pls")
|
||
("ADHD 1" . "https://www.youtube.com/watch?v=CmMrm4BpQHU")
|
||
("WREK FM" . "http://streaming.wrek.org:8000/wrek_live-128kb.m3u")
|
||
))
|
||
;; Todo: lainchan? adhd music stream from youtube? wuog? wrekFM? does freeside have streaming radio?
|
||
(with-eval-after-load 'embark (empv-embark-initialize-extra-actions))
|
||
(add-to-list 'empv-mpv-args "--ytdl-format=best")
|
||
(add-to-list 'empv-mpv-args "--save-position-on-quit")
|
||
(add-hook 'empv-init-hook #'empv-override-quit-key)
|
||
#+end_src
|
||
* General
|
||
#+begin_src emacs-lisp
|
||
(use-package general
|
||
:ensure t
|
||
:config
|
||
|
||
(general-create-definer general-definition
|
||
:keymaps '(normal insert visual emacs)
|
||
:prefix "SPC"
|
||
:global-prefix "C-SPC")
|
||
|
||
(general-definition
|
||
|
||
;; Top level bindings
|
||
"SPC" '(projectile-find-file :which-key "Find project file")
|
||
"<backspace>" '(treemacs-find-file :which-key "Find current file in sidebar")
|
||
"," '(+ivy/switch-workspace-buffer :which-key "Buffers (workspace)")
|
||
"/" '(consult-ripgrep :which-key "Search project")
|
||
":" '(execute-extended-command :which-key "M-x")
|
||
";" '(eval-expression :which-key "Eval")
|
||
"<" '(consult-buffer :which-key "Buffers (all)")
|
||
"x" '(scratch-buffer :which-key "Scratch popup")
|
||
"-" '(dired :which-key "Find Directory")
|
||
"*" '(counsel-locate :which-key "Fuzzy find file") ;; find-file? consult-locate?
|
||
"d" '(docker :which-key "Docker")
|
||
"i" '(custom/conditional-imenu :which-key "Imenu") ;; consult-outline?
|
||
|
||
;; Agenda
|
||
"a" '(:ignore t :which-key "Agenda")
|
||
"aa" '(org-agenda :which-key "Open Agenda")
|
||
"a/" '(consult-org-agenda :which-key "Search agenda headlines")
|
||
|
||
"ac" '(:ignore t :which-key "Clock")
|
||
"acc" '(org-clock-goto :which-key "Active clock")
|
||
"ack" '(org-clock-cancel :which-key "Cancel current clock")
|
||
"act" '(+org/toggle-last-clock :which-key "Toggle last clock")
|
||
|
||
|
||
;; Buffers / bookmarks
|
||
"b" '(:ignore t :which-key "Buffers")
|
||
"bb" '(counsel-bookmark :which-key "Goto Bookmark") ;; consult-bookmark
|
||
"bk" '(kill-current-buffer :which-key "Kill buffer")
|
||
"bm" '(bookmark-set :which-key "Set bookmark")
|
||
"bM" '(bookmark-delete :which-key "Delete bookmark")
|
||
;; "bo" '(NEEDS CUSTOM FUNCTION :which-key "Kill other buffers")
|
||
"br" '(revert-buffer :which-key "Revert buffer")
|
||
"bR" '(rename-buffer :which-key "Rename buffer")
|
||
"bz" '(bury-buffer :which-key "Bury buffer")
|
||
;; "bZ" '(NEEDS CUSTOM FUNCTION :which-key "Kill buried buffers")
|
||
"bj" '(+ivy/jump-list :which-key "Jump list")
|
||
"bu" '(vundo :which-key "Undo history")
|
||
|
||
;; Code
|
||
"c" '(:ignore t :which-key "Code")
|
||
"cc" '(compile :which-key "Compile")
|
||
"cC" '(recompile :which-key "Recompile")
|
||
"cd" '(+lookup/definition :which-key "Goto definition")
|
||
"cr" '(+lookup/references :which-key "Goto references")
|
||
"ce" '(+eval/buffer-or-region :which-key "Eval buffer/region")
|
||
;; "cf" '(NOT A COMMAND (re-do) :which-key "Format buffer/region")
|
||
"ci" '(+lookup/implementations :which-key "Find implementations")
|
||
"cj" '(lsp-ivy-workspace-symbol :which-key "Goto symbol (curr. workspace)")
|
||
"cJ" '(lsp-ivy-global-workspace-symbol :which-key "Goto symbol (any workspace)")
|
||
"ck" '(+lookup/documentation :which-key "Jump to documentation")
|
||
"cl" '(+default/lsp-command-map :which-key "LSP")
|
||
"co" '(lsp-organize-imports :which-key "LSP organize imports")
|
||
"cR" '(lsp-rename :which-key "LSP rename")
|
||
"cs" '(+eval/send-region-to-repl :which-key "Send to repl")
|
||
"ct" '(+lookup/type-definition :which-key "Find type definition")
|
||
"cw" '(delete-trailing-whitespace :which-key "Delete trailing whitespace")
|
||
;; "cn" '(doom/delete-trailing-newlines :which-key "Delete trailing newlines")
|
||
"cx" '(+default/diagnostics :which-key "List errors")
|
||
|
||
;; File
|
||
"f" '(:ignore t :which-key "File")
|
||
;; "fp" '(doom/open-private-config :which-key "Browse private config")
|
||
"fr" '(counsel-recentf :which-key "Recent files")
|
||
"fR" '(reload-config :which-key "Recent files")
|
||
;; "fm" '(doom/move-this-file :which-key "Move/rename file")
|
||
;; "fS" '(doom/sudo-find-file :which-key "Sudo find file")
|
||
;; "fs" '(doom/sudo-this-file :which-key "Sudo this file")
|
||
"fy" '(+default/yank-buffer-path :which-key "yank file path")
|
||
"fY" '(+default/yank-buffer-path-relative-to-project :which-key "Yank file path from project")
|
||
|
||
;; Git
|
||
"g" '(:ignore t :which-key "git")
|
||
"gb" '(magit-branch-checkout :which-key "magit switch branch")
|
||
"gB" '(magit-blame-addition :which-key "magit blame")
|
||
"gF" '(magit-fetch :which-key "magit fetch")
|
||
"gg" '(magit-status :which-key "magit status")
|
||
"gG" '(magit-status-here :which-key "magit status here")
|
||
"gL" '(magit-log-buffer-file :which-key "magit buffer log")
|
||
"gt" '(git-timemachine-toggle :which-key "git time machine")
|
||
|
||
"gd" '(:ignore t :which-key "dispatch")
|
||
"gdF" '(forge-dispatch :which-key "Forge dispatch")
|
||
"gdd" '(magit-dispatch :which-key "Magit dispatch")
|
||
"gdf" '(magit-file-dispatch :which-key "Magit file dispatch")
|
||
|
||
"gf" '(:ignore t :which-key "find")
|
||
"gfc" '(magit-show-commit :which-key "find commit")
|
||
"gff" '(magit-find-file :which-key "find file")
|
||
"gfg" '(magit-find-git-config-file :which-key "find gitconfig file")
|
||
"gfi" '(forge-visit-issue :which-key "find issue")
|
||
"gfp" '(forge-visit-pullreq :which-key "find pull request")
|
||
|
||
"gh" '(:ignore t :which-key "hunk")
|
||
|
||
"ghn" '(+vc-gutter/previous-hunk :which-key "jump to previous hunk")
|
||
"ghp" '(+vc-gutter/next-hunk :which-key "jump to next hunk")
|
||
"ghr" '(+vc-gutter/revert-hunk :which-key "revert hunk at point")
|
||
"ghs" '(+vc-gutter/stage-hunk :which-key "stage hunk at point")
|
||
|
||
"gl" '(:ignore t :which-key "list")
|
||
"gli" '(forge-list-issues :which-key "list issues")
|
||
"gln" '(forge-list-notifications :which-key "list notifications")
|
||
"glp" '(forge-list-pullreqs :which-key "list pull requests")
|
||
"glr" '(forge-list-issues :which-key "list repositories")
|
||
"gls" '(magit-list-submodules :which-key "list submodules")
|
||
|
||
"go" '(:ignore t :which-key "open")
|
||
"goI" '(forge-browse-issues :which-key "Browse issues")
|
||
"goP" '(forge-browse-pullreqs :which-key "Browse pull requests")
|
||
"goc" '(forge-browse-commit :which-key "Browse commit")
|
||
"goh" '(+vc/browse-at-remote-homepage :which-key "Browse homepage")
|
||
"goi" '(forge-browse-issue :which-key "Browse an issue")
|
||
"goo" '(+vc/browse-at-remote :which-key "Browse file or region")
|
||
"gop" '(forge-browse-pullreq :which-key "Browse a pull request")
|
||
"gor" '(forge-browse-remote :which-key "Browse remote")
|
||
|
||
;; Help
|
||
"h" '(:ignore t :which-key "help")
|
||
"h<return>" '(info-emacs-manual :which-key "Emacs manual")
|
||
"h'" '(describe-char :which-key "Describe character")
|
||
"ha" '(counsel-apropos :which-key "Apropos")
|
||
"hb" '(counsel-descbinds :which-key "Describe bindings")
|
||
"he" '(view-echo-area-messages :which-key "View echo area messages")
|
||
"hf" '(counsel-describe-function :which-key "Describe function")
|
||
"hi" '(info :which-key "Info")
|
||
"hk" '(helpful-key :which-key "Describe key")
|
||
"hl" '(view-lossage :which-key "View actions log")
|
||
"hm" '(describe-mode :which-key "Describe mode")
|
||
"ho" '(counsel-describe-symbol :which-key "Describe symbol")
|
||
"hx" '(helpful-command :which-key "Describe command")
|
||
"hA" '(apropos-documentation :which-key "Apropos(documentation)")
|
||
"hF" '(counsel-faces :which-key "Describe Face")
|
||
"hM" '(popwin:messages :which-key "View system messages")
|
||
|
||
"hw" '(:ignore t :which-key "which-key")
|
||
"hwf" '(which-key-show-full-keymap :which-key "Full keymap")
|
||
"hwi" '(which-key-show-minor-mode-keymap :which-key "Minor mode keymap")
|
||
"hwk" '(which-key-show-keymap :which-key "Show keymap")
|
||
"hwm" '(which-key-show-major-mode :which-key "Show major mode")
|
||
"hwt" '(which-key-show-top-level :which-key "Show top-level")
|
||
|
||
;; Notes
|
||
"nd" '(deft :which-key "Deft")
|
||
"nt" '(org-todo-list :which-key "Todo list")
|
||
"nf" '(org-roam-node-find :which-key "Find node")
|
||
"ng" '(org-roam-graph :which-key "Show graph")
|
||
"nr" '(org-roam-buffer-toggle :which-key "Toggle roam buffer")
|
||
"nb" '(org-roam-buffer-display-dedicated :which-key "Launch roam buffer")
|
||
"ns" '(org-roam-db-sync :which-key "Sync database")
|
||
"nc" '(org-roam-capture :which-key "Capture to node")
|
||
|
||
;; Org mode
|
||
"o" '(:ignore t :which-key "org")
|
||
"ol" '(org-store-link :which-key "Org store link")
|
||
"oc" '(org-capture :which-key "Org Capture")
|
||
"oC" '(org-capture-goto-target :which-key "Goto Capture")
|
||
"ot" '(org-babel-tangle-file :which-key "Org Tangle")
|
||
"oy" '(+org/export-to-clipboard :which-key "Org export to clipboard")
|
||
"oY" '(+org/export-to-clipboard-as-rich-text :which-key "Org export to clipboard (rich)")
|
||
"oe" '(:ignore t :which-key "export")
|
||
"oeh" '(org-html-export-to-html :which-key "Export Org to HTML")
|
||
"oa" '(:ignore t :which-key "attach")
|
||
"oaa" '(org-attach :which-key "Attach")
|
||
"oac" '(org-download-clipboard :which-key "Org download clipboard")
|
||
"oad" '(org-attach-delete-one :which-key "Delete one attachment")
|
||
"oaD" '(org-attach-delete-all :which-key "Delete all attachments")
|
||
"oas" '(org-attach-sync :which-key "Sync attachments")
|
||
"oay" '(org-download-yank :which-key "Org download yank")
|
||
|
||
;; Project
|
||
"p" '(:ignore t :which-key "project")
|
||
"ps" '(+neotree/open :which-key "Open project sidebar")
|
||
"pa" '(projectile-add-known-project :which-key "Add new project")
|
||
"pc" '(+ivy/project-compile :which-key "Compile in project")
|
||
"pd" '(projectile-remove-known-project :which-key "Remove known project")
|
||
"ps" '(counsel-projectile-switch-project :which-key "Switch projects")
|
||
"pC" '(projectile-configure-project :which-key "Configure project")
|
||
"pr" '(projectile-run-project :which-key "Run project")
|
||
"pt" '(magit-todos-list :which-key "List project todos")
|
||
"pT" '(projectile-test-project :which-key "Test project")
|
||
"pz" '(+taskrunner/project-tasks :which-key "List project tasks")
|
||
|
||
;; Shell
|
||
"s" '(:ignore t :which-key "shell")
|
||
"se" '(+eshell/toggle :which-key "Toggle eshell popup")
|
||
"sE" '(+eshell/here :which-key "Open eshell here")
|
||
"sr" '(+eval/open-repl-other-window :which-key "Repl")
|
||
"st" '(+vterm/toggle :which-key "Toggle vterm popup")
|
||
"sT" '(+vterm/here :which-key "Open vterm here")
|
||
|
||
;; Toggle
|
||
"t" '(:ignore t :which-key "toggle")
|
||
"tc" '(global-display-fill-column-indicator-mode :which-key "Fill Column Indicator")
|
||
"tf" '(flycheck-mode :which-key "Flycheck")
|
||
"tm" '(consult-minor-mode-menu :which-key "Minor modes")
|
||
"tp" '(org-tree-slide-mode :which-key "Org-tree-slide-mode")
|
||
"tw" '(+word-wrap-mode :which-key "Soft line wrapping")
|
||
"tz" '(+zen/toggle :which-key "Zen mode")
|
||
;; "tl" '(doom/toggle-line-numbers :which-key "Line numbers")
|
||
|
||
;; Visual / appearance
|
||
"v" '(:ignore t :which-key "visual/appearance")
|
||
"vt" '(counsel-load-theme :which-key "load theme")
|
||
|
||
;; Workspaces
|
||
"TAB TAB" '(+workspace/display :which-key "Display tab bar")
|
||
"TAB d" '(+workspace/delete :which-key "Delete this workspace")
|
||
"TAB l" '(+workspace/load :which-key "Load workspace from file")
|
||
"TAB n" '(+workspace/new :which-key "New workspace")
|
||
"TAB N" '(+workspace/new-named :which-key "New named workspace")
|
||
"TAB r" '(+workspace/rename :which-key "Rename workspace")
|
||
"TAB R" '(+workspace/restore-last-session :which-key "Restore last session")
|
||
"TAB s" '(+workspace/save :which-key "Save workspace")
|
||
"TAB x" '(+workspace/kill-session :which-key "Delete session")
|
||
))
|
||
|
||
#+end_src
|
||
|
||
* Todo
|
||
** General
|
||
- Refactor to use use-package more effectively
|
||
|
||
** Terminals
|
||
- More terminals
|
||
- emacs-fish-completions
|
||
- setup terminals to complete to vertico
|
||
- starship prompts
|
||
|
||
** New functions
|
||
- Git-time-machine-or-vc-region-history
|
||
** Screen management
|
||
- perspective
|
||
- workspaces?
|
||
|
||
** Note taking
|
||
- deft
|
||
- org : roam2, hugo, pretty, dragndrop, bullet
|
||
|
||
** Lisp stuff
|
||
- paredit
|
||
- lispy
|
||
|
||
** One-offs
|
||
- hl-todo
|
||
- gitgutter
|
||
- persistent undo
|
||
- commentary
|
||
- highlight tabs and newlines
|
||
- [[https://youtu.be/UtqE-lR2HCA?t=5027][Vertico backwards delete]]
|
||
- alphabetical keybindings
|
||
- brighter modeline
|
||
- surpress global minor modes
|
||
- Undo-Tree, company, flycheck, which-key
|
||
- always follow new buffers
|
||
- ignore case in imenu
|
||
- improve which-key visibility
|
||
- Fix escape in minibuffer
|
||
- Open buffers in same window
|
||
|
||
** LSP stuff
|
||
- look into treemacs integrations
|
||
- consider eglot
|
||
- dap-mode
|
||
|
||
** Completion
|
||
- dabbrev-expand or company on c-n c-p
|
||
- c-N c-P for expand full line
|
||
- yasnippet
|
||
- company-mode to corfu (or vertico completions? or cofu-in-vertico?)
|
||
- get vertico as completion box
|
||
|
||
** Keybindings
|
||
- map hyper bindings for buffer nav and jumping
|
||
- evil-org
|
||
- map alignment functions in 'code'section
|
||
- define global meow-left and vim-left, swich contextually
|
||
- fix c-u in evil mode
|
||
- fix tab key
|
||
- window size functions
|
||
- empv
|
||
- map
|
||
- empv-play-radio
|
||
- empv-play-random-channel
|
||
- empv-log-current-radio-song-name
|
||
- empv-youtube
|
||
- empv-play
|
||
- empv-play-{file,audio,video,directory,radio,random-channel}
|
||
- empv-playlist-{select,next,prev,clear,shuffle}
|
||
- empv-display-current
|
||
- empv-toggle
|
||
- empv-toggle-video
|
||
- empv-youtube
|
||
- empv-volume-{down,up}
|
||
- empv-chapter-{prev,next,select}
|
||
- empv-exit
|
||
- configure
|
||
- empv-radio-log-file
|
||
- empv-radio-log-format
|
||
- spc m y(outube)
|
||
- spc m l(ocal)
|
||
- spc m r(adio)
|
||
- empv-video-dir empv-audio-dir?
|
||
- empv-play-file
|
||
|
||
|
||
selected radio (See empv-radio-log-file and empv-radio-log-format
|
||
variables and their documentations).
|
||
|
||
** New plugins
|
||
- tramp
|
||
- k8s
|
||
- docker
|
||
- terraform
|
||
- straight?
|
||
- eaf-browser
|
||
- embark?
|
||
- emms, emms-play-url binding (youtube view)
|
||
- [[https://youtu.be/UtqE-lR2HCA?t=5134][consult-lsp]] (better for errors than treemacs integrations probably)
|
||
- workspaces / persp mode
|
||
- srht.el
|
||
- orderless
|
||
- affe
|
||
- gnus
|
||
- evil-org
|
||
|
||
** Appearance switches
|
||
- fonts
|
||
- random theme
|
||
- org mode bullets / pretty / etc
|
||
|
||
** Research
|
||
- What does C-d do when in a minibuffer for vertico?
|
||
|
||
** System crafters videos
|
||
- [[https://www.youtube.com/watch?v=CUkuyW6hr18][5 Hacks to improve org roam]]
|
||
- [[https://www.youtube.com/watch?v=C1kwStlEick][Improving the IRC experience]]
|
||
- [[https://www.youtube.com/watch?v=J0OaRy85MOo][Stremlined completions with vertico]]
|
||
- [[https://www.youtube.com/watch?v=XZjyJG-sFZI][Keeping your folders clean while using emacs]]
|
||
- [[https://www.youtube.com/watch?v=zMzkorlfqLA][Static site generator from org mode]]
|
||
- [[https://www.youtube.com/watch?v=za99DwdZEyg][Automated website publishing w/ org and sourcehut]]
|
||
- [[https://www.youtube.com/watch?v=SCPoF1PTZpI][Emacs presentations]]
|
||
- [[https://www.youtube.com/watch?v=0C16LLHGYzk&t=1882s][Converting a literate config to guix home]]
|
||
- [[https://www.youtube.com/watch?v=zWIByv8JOrg][Do we really need use-package]]
|
||
- [[https://www.youtube.com/playlist?list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ][Emacs mail playlist]]
|
||
- [[https://www.youtube.com/watch?v=qk2Is_sC8Lk][Embark]]
|
||
|
||
** Clean up Org Roam
|
||
- Major mode notes master node
|