dotfiles/home-manager/modules/emacs/.emacs.d/org/base.org
Magic_RB 40a264ecd5 Clean out more from base.org
Signed-off-by: Magic_RB <magic_rb@redalder.org>
2023-06-16 16:08:09 +02:00

9.8 KiB

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

Stuff

  (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))

Enable all-the-icons, it's used by treemacs and doom-modeline.

  (use-package all-the-icons
    :straight t)

Set ispell program to hunspell, this is very much a TODO, since the spelling configuration is rather minimal at this point in time.

  (setq ispell-program-name "hunspell")

Fetch the SSH_AUTH_PATH from .profile.

  (setenv "SSH_AUTH_SOCK" (shell-command-to-string ". ~/.profile && printf $SSH_AUTH_SOCK"))

Language

SCAD Programming Language

Enable scad-mode

  (use-package scad-mode
    :straight t)

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.

  (use-package rustic
    :straight t
    :hook (rustic-mode . lsp-mode)
    :mode ("\\.rs\\'" . rustic-mode))

LSP

envrc

Enable envrc, which changes ENVs on a per buffer basis.

  (use-package envrc
    :straight t
    :init
    (envrc-global-mode))

lsp-mode

Increase GC threshold to avoid random freezes on garbage collection.

  (setq gc-cons-threshold 100000000)

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.

  (setq read-process-output-max (* (* 1024 1024) 3))

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.

  (setq lsp-completion-provider :capf)

Set the minimum delay between LSP refreshes, should help with performance when typing really fast.

  (setq lsp-idle-delay 0.500) ;; adjust me

Setup rustic to prefer rust-analyzer instead of rls and also don't format on save, it's really annoying.

  (setq rustic-lsp-server 'rust-analyzer)
  (setq rustic-compile-command "cargo build")
  (setq rustic-format-trigger nil);'on-save

Enable inline type hints and disable chaining and parameter hints for Rust.

  (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)

Finally enable lsp-mode.

  (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>>)

lsp-pyright

Enable lsp-pyright, the best Python language server, all of them are a bit lackluster, this one is the best option.

  (use-package lsp-pyright
    :straight t
    :hook (python-mode . lsp))

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.

  (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))

flycheck

Enable flycheck for in-buffer hints and errors and warning and things.

  (use-package flycheck
    :straight t
    :init (global-flycheck-mode))

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;

  (use-package origami
    :straight t
    :hook ((prog-mode . origami-mode)
           (conf-mode . origami-mode)))

Enable origami-lsp. Some LSP servers specify these folding ranges and this package makes origami understand that and work with it.

  (use-package lsp-origami
    :straight t
    :hook (lsp-after-open-hook lsp-origami-try-enable))

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.

  (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)))

Projectile

Enable projectile.

  (use-package projectile
    :straight t
    :config
    (projectile-mode +1)
    (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map))

Random Bits and Bobs

Set keystrokes echo to something really low, it's useful to know what you're typing.

  (setq echo-keystrokes 0.01)

Set default major mode to org mode, it's much more useful than fundamental.

  (setq-default major-mode 'org-mode)

Delete files by moving to trash.

  (setq-default delete-by-moving-to-trash t)

Equalize windows after split.

  (setq-default window-combination-resize t)

Increase undo limit to 80MB and enable fine undo, Evil will no longer chunk all edits in INSERT mode into one big undo blob.

  (setq undo-limit 80000000
        evil-want-fine-undo t)

For now, don't autosave. Because editing on remote disks, not TRAMP, but just NFS or CIFS, becomes extremely painful.

  (setq auto-save-default t)

Enable line numbers for both programming buffers (Rust, C, and such) and configuration buffers (Nix, Yaml, Json, and such) and Org mode.

  (add-hook 'conf-mode-hook 'display-line-numbers-mode)
  (add-hook 'prog-mode-hook 'display-line-numbers-mode)

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

      (setq mouse-wheel-scroll-amount '(5 ((shift) . 1)))
      (setq mouse-wheel-progressive-speed nil)
      (setq mouse-wheel-follow-mouse 't)

    Enable perentheses highlighting and pairing.

      (show-paren-mode 1)
      (electric-pair-mode)

    Set fill colum, horizontal indicator, for both fill-paragraph=(=M-q) and the visual horizontal indicator.

      (setq-default display-fill-column-indicator-column 120
                    fill-column 120)

    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.

      (load "server")
      (unless (server-running-p) (server-start))
      (setq backup-directory-alist
            `(("." . ,(concat user-emacs-directory "backups"))))

Windows

As tecosaur has it in his 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.

  (defadvice evil-window-vsplit (after activate compile)
    (counsel-switch-buffer))
  (defadvice evil-window-split (after activate compile)
    (counsel-switch-buffer))

PGTK neo2 fix

  (put 'none 'modifier-value 0)
  (setq x-hyper-keysym 'none)