mirror of
https://git.sr.ht/~magic_rb/dotfiles
synced 2024-11-29 19:46:17 +01:00
363 lines
9.8 KiB
Org Mode
363 lines
9.8 KiB
Org Mode
|
# SPDX-FileCopyrightText: 2022 Richard Brežák <richard@brezak.sk>
|
||
|
#
|
||
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||
|
|
||
|
#+STARTUP: content
|
||
|
#+TITLE: Magic_RB's Emacs configuration
|
||
|
|
||
|
* Stuff That Needs Work
|
||
|
** TODO Spell checking
|
||
|
** TODO Calc mode
|
||
|
** TODO Org Agenda
|
||
|
*** Make it work on my phone
|
||
|
** TODO Org Roam
|
||
|
** TODO org-evil moving stuff, left, right with M-j M-; instead of M-h M-l
|
||
|
** Org Web Tools
|
||
|
https://github.com/alphapapa/org-web-tools
|
||
|
* Stuff
|
||
|
|
||
|
#+NAME: base
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package pdf-tools
|
||
|
:straight t
|
||
|
:hook (('TeX-mode-hook . visual-line-mode))
|
||
|
:config
|
||
|
;; initialise
|
||
|
(pdf-tools-install)
|
||
|
(setq TeX-PDF-mode 1)
|
||
|
;; open pdfs scaled to fit page
|
||
|
(setq-default pdf-view-display-size 'fit-page)
|
||
|
;; automatically annotate highlights
|
||
|
(setq pdf-annot-activate-created-annotations t))
|
||
|
#+END_SRC
|
||
|
|
||
|
Enable =all-the-icons=, it's used by =treemacs= and =doom-modeline=.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package all-the-icons
|
||
|
:straight t)
|
||
|
#+END_SRC
|
||
|
|
||
|
Set ispell program to hunspell, this is very much a TODO, since the spelling configuration is rather minimal at this
|
||
|
point in time.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq ispell-program-name "hunspell")
|
||
|
#+END_SRC
|
||
|
|
||
|
Fetch the ~SSH_AUTH_PATH~ from ~.profile~.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setenv "SSH_AUTH_SOCK" (shell-command-to-string ". ~/.profile && printf $SSH_AUTH_SOCK"))
|
||
|
#+END_SRC
|
||
|
|
||
|
* Language
|
||
|
** SCAD Programming Language
|
||
|
|
||
|
Enable ~scad-mode~
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package scad-mode
|
||
|
:straight t)
|
||
|
#+END_SRC
|
||
|
|
||
|
** Rust Programming Language
|
||
|
|
||
|
Enable ~rustic~ and more feature-full alternative to ~rust-mode~, actually a rather distant fork of it.
|
||
|
Also hook ~lsp-mode~ on it.
|
||
|
|
||
|
#+NAME: rust
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package rustic
|
||
|
:straight t
|
||
|
:hook (rustic-mode . lsp-mode)
|
||
|
:mode ("\\.rs\\'" . rustic-mode))
|
||
|
#+END_SRC
|
||
|
* LSP
|
||
|
** envrc
|
||
|
|
||
|
Enable ~envrc~, which changes ENVs on a per buffer basis.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package envrc
|
||
|
:straight t
|
||
|
:init
|
||
|
(envrc-global-mode))
|
||
|
#+END_SRC
|
||
|
|
||
|
** lsp-mode
|
||
|
|
||
|
Increase GC threshold to avoid random freezes on garbage collection.
|
||
|
|
||
|
#+NAME: gc-cons-threshold
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq gc-cons-threshold 100000000)
|
||
|
#+END_SRC
|
||
|
|
||
|
Increase the amount of data Emacs reads from a process in one go, default is 4KB, but some LSP servers produce responses up to 3MB.
|
||
|
|
||
|
#+NAME: read-process-output-max
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq read-process-output-max (* (* 1024 1024) 3))
|
||
|
#+END_SRC
|
||
|
|
||
|
Switch completion provider to =capf=, even though it should be the default, but just to make sure it. =company-lsp=
|
||
|
is what =lsp-mode= switched away from.
|
||
|
|
||
|
#+NAME: lsp-completion-provider
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq lsp-completion-provider :capf)
|
||
|
#+END_SRC
|
||
|
|
||
|
Set the minimum delay between LSP refreshes, should help with performance when typing really fast.
|
||
|
|
||
|
#+NAME: lsp-idle-delay
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq lsp-idle-delay 0.500) ;; adjust me
|
||
|
#+END_SRC
|
||
|
|
||
|
Setup rustic to prefer ~rust-analyzer~ instead of ~rls~ and also don't format on save, it's really annoying.
|
||
|
|
||
|
#+NAME: lsp-rustic
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq rustic-lsp-server 'rust-analyzer)
|
||
|
(setq rustic-compile-command "cargo build")
|
||
|
(setq rustic-format-trigger nil);'on-save
|
||
|
#+END_SRC
|
||
|
|
||
|
Enable inline type hints and disable chaining and parameter hints for Rust.
|
||
|
|
||
|
#+NAME: lsp-rust-analyzer
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq lsp-rust-analyzer-display-chaining-hints nil)
|
||
|
(setq lsp-rust-analyzer-display-parameter-hints nil)
|
||
|
(setq lsp-rust-analyzer-server-display-inlay-hints t)
|
||
|
#+END_SRC
|
||
|
|
||
|
Finally enable ~lsp-mode~.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp :noweb yes
|
||
|
(use-package lsp-mode
|
||
|
:straight t
|
||
|
:after (envrc)
|
||
|
:config
|
||
|
(setq lsp-prefer-flymake nil)
|
||
|
(setq lsp-ui-doc-enable nil)
|
||
|
:config
|
||
|
<<lsp-rustic>>
|
||
|
;; <<lsp-rust-analyzer>>
|
||
|
|
||
|
<<gc-cons-threshold>>
|
||
|
<<read-process-output-max>>
|
||
|
<<lsp-completion-provider>>
|
||
|
;; <<lsp-idle-delay>>
|
||
|
<<lsp-typescript-tramp>>
|
||
|
<<lsp-scala-tramp>>)
|
||
|
#+END_SRC
|
||
|
|
||
|
** lsp-pyright
|
||
|
|
||
|
Enable ~lsp-pyright~, the best Python language server, all of them are a bit lackluster, this one is the best
|
||
|
option.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package lsp-pyright
|
||
|
:straight t
|
||
|
:hook (python-mode . lsp))
|
||
|
#+END_SRC
|
||
|
|
||
|
** lsp-ui
|
||
|
|
||
|
Enable ~lsp-ui~, it adds doc frames, code actions at the side and other cool things, some of them are annoying and
|
||
|
need disabling.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package lsp-ui
|
||
|
:straight t
|
||
|
:after (company-box)
|
||
|
:config
|
||
|
;; disable focus on mouse over
|
||
|
(push '(no-accept-focus . t) lsp-ui-doc-frame-parameters)
|
||
|
(push '(no-accept-focus . t) company-box-frame-parameters)
|
||
|
|
||
|
(add-to-list 'lsp-ui-doc-frame-parameters '(no-accept-focus . t))
|
||
|
(add-to-list 'company-box-frame-parameters '(no-accept-focus . t))
|
||
|
(setq mouse-autoselect-window nil))
|
||
|
#+END_SRC
|
||
|
|
||
|
** flycheck
|
||
|
|
||
|
Enable ~flycheck~ for in-buffer hints and errors and warning and things.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package flycheck
|
||
|
:straight t
|
||
|
:init (global-flycheck-mode))
|
||
|
#+END_SRC
|
||
|
|
||
|
** origami
|
||
|
|
||
|
Enable ~origami~. It allows one to fold and unfold a section with =zc= and =zo= in ~evil-mode~. Hook it on both ~conf-mode~ and ~prog-mode~;
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package origami
|
||
|
:straight t
|
||
|
:hook ((prog-mode . origami-mode)
|
||
|
(conf-mode . origami-mode)))
|
||
|
#+END_SRC
|
||
|
|
||
|
Enable ~origami-lsp~. Some LSP servers specify these folding ranges and this package makes ~origami~ understand that
|
||
|
and work with it.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package lsp-origami
|
||
|
:straight t
|
||
|
:hook (lsp-after-open-hook lsp-origami-try-enable))
|
||
|
#+END_SRC
|
||
|
|
||
|
* hledger
|
||
|
|
||
|
For hledger, it's possible to use =ledger-mode= instead of =hledger-mode=. We'll see how it goes. It does require some convincing though.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package ledger-mode
|
||
|
:straight t
|
||
|
:config
|
||
|
(setq ledger-binary-path "hledger")
|
||
|
(setq ledger-mode-should-check-version nil)
|
||
|
(add-to-list 'auto-mode-alist '("\\.\\(h?ledger\\|journal\\|j\\)$" . ledger-mode))
|
||
|
(setq ledger-report-balance
|
||
|
(list "bal" (concat ledger-binary-path " --strict -f %(ledger-file) bal")))
|
||
|
|
||
|
(setq ledger-report-reg
|
||
|
(list "reg" (concat ledger-binary-path " --strict -f %(ledger-file) reg")))
|
||
|
|
||
|
(setq ledger-report-payee
|
||
|
(list "payee" (concat ledger-binary-path " --strict -f %(ledger-file) reg @%(payee)")))
|
||
|
|
||
|
(setq ledger-report-account
|
||
|
(list "account" (concat ledger-binary-path " --strict -f %(ledger-file) reg %(account)")))
|
||
|
|
||
|
(setq ledger-reports
|
||
|
(list ledger-report-balance
|
||
|
ledger-report-reg
|
||
|
ledger-report-payee
|
||
|
ledger-report-account)))
|
||
|
#+END_SRC
|
||
|
|
||
|
* Projectile
|
||
|
|
||
|
Enable ~projectile~.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(use-package projectile
|
||
|
:straight t
|
||
|
:config
|
||
|
(projectile-mode +1)
|
||
|
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map))
|
||
|
#+END_SRC
|
||
|
|
||
|
* Random Bits and Bobs
|
||
|
|
||
|
Set keystrokes echo to something really low, it's useful to know what you're typing.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq echo-keystrokes 0.01)
|
||
|
#+END_SRC
|
||
|
|
||
|
Set default major mode to org mode, it's much more useful than fundamental.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq-default major-mode 'org-mode)
|
||
|
#+END_SRC
|
||
|
|
||
|
Delete files by moving to trash.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq-default delete-by-moving-to-trash t)
|
||
|
#+END_SRC
|
||
|
|
||
|
Equalize windows after split.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq-default window-combination-resize t)
|
||
|
#+END_SRC
|
||
|
|
||
|
Increase undo limit to 80MB and enable fine undo, Evil will no longer chunk all edits in =INSERT= mode into one big
|
||
|
undo blob.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq undo-limit 80000000
|
||
|
evil-want-fine-undo t)
|
||
|
#+END_SRC
|
||
|
|
||
|
For now, don't autosave. Because editing on remote disks, not TRAMP, but just NFS or CIFS, becomes extremely painful.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp :tangle no
|
||
|
(setq auto-save-default t)
|
||
|
#+END_SRC
|
||
|
|
||
|
Enable line numbers for both programming buffers (Rust, C, and such) and configuration buffers (Nix, Yaml, Json, and
|
||
|
such) and Org mode.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(add-hook 'conf-mode-hook 'display-line-numbers-mode)
|
||
|
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
||
|
#+END_SRC
|
||
|
|
||
|
Improve scrolling by:
|
||
|
1. disabling acceleration
|
||
|
2. making it so that the window under the pointer is scroller no matter the focused window
|
||
|
3. changing default scroll amount to 5 lines and 1 when shift is pressed
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq mouse-wheel-scroll-amount '(5 ((shift) . 1)))
|
||
|
(setq mouse-wheel-progressive-speed nil)
|
||
|
(setq mouse-wheel-follow-mouse 't)
|
||
|
#+END_SRC
|
||
|
|
||
|
Enable perentheses highlighting and pairing.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(show-paren-mode 1)
|
||
|
(electric-pair-mode)
|
||
|
#+END_SRC
|
||
|
|
||
|
Set fill colum, horizontal indicator, for both =fill-paragraph=(=M-q=) and the visual horizontal indicator.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq-default display-fill-column-indicator-column 120
|
||
|
fill-column 120)
|
||
|
#+END_SRC
|
||
|
|
||
|
Start Emacs server, unless it's already running. Starting a new Emacs instance while debugging and getting an error
|
||
|
about a server already running can be a bit annoying.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(load "server")
|
||
|
(unless (server-running-p) (server-start))
|
||
|
#+END_SRC
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(setq backup-directory-alist
|
||
|
`(("." . ,(concat user-emacs-directory "backups"))))
|
||
|
#+END_SRC
|
||
|
|
||
|
** Windows
|
||
|
|
||
|
As [[https://github.com/tecosaur/][tecosaur]] has it in his [[https://tecosaur.github.io/emacs-config/config.html#windows][configuration]], I was to be asked which window to should be brought up when I split a
|
||
|
window in Emacs. So create a new advice which will run after evil split commands and brings up the buffer selector.
|
||
|
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(defadvice evil-window-vsplit (after activate compile)
|
||
|
(counsel-switch-buffer))
|
||
|
(defadvice evil-window-split (after activate compile)
|
||
|
(counsel-switch-buffer))
|
||
|
#+END_SRC
|
||
|
|
||
|
** PGTK neo2 fix
|
||
|
#+BEGIN_SRC emacs-lisp
|
||
|
(put 'none 'modifier-value 0)
|
||
|
(setq x-hyper-keysym 'none)
|
||
|
#+END_SRC
|