dotfiles/home-manager/modules/emacs/.emacs.d/org/base.org

363 lines
9.8 KiB
Org Mode
Raw Normal View History

# 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