# SPDX-FileCopyrightText: 2022 Richard Brežák # # 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)) :init (set-variable 'pdf-info-epdfinfo-program (shell-command-to-string "printf ~/.emacs.d/profile/share/emacs/site-lisp/elpa/pdf-tools-*/epdfinfo")) ;; 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 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 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 <> ;; <> <> <> <>) #+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 * 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