emacs.d/init.el

237 lines
7.6 KiB
EmacsLisp

;; Configure emacs packages.
(require 'package)
(setq package-archives
'(("org" . "https://orgmode.org/elpa/")
("gnu" . "https://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")))
(package-initialize)
;; (package-refresh-contents)
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
(setq inhibit-startup-screen t)
(savehist-mode 1)
(setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring))
(global-set-key (kbd "C-x C-e") 'eval-region)
;; yank at cursor point instead of mouse
(setq mouse-yank-at-point t)
(setq column-number-mode t)
(setq ido-use-filename-at-point nil)
(use-package undo-fu)
(use-package evil
:ensure t ;; install the evil package if not installed
:init ;; tweak evil's configuration before loading it
(setq evil-search-module 'evil-search)
(setq evil-ex-complete-emacs-commands nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(setq evil-shift-round nil)
(setq evil-want-C-u-scroll t)
(setq evil-undo-system 'undo-fu)
:config ;; tweak evil after loading it
(evil-mode)
;; example how to map a command in normal mode (called 'normal state' in evil)
(define-key evil-normal-state-map (kbd ", w") 'evil-window-vsplit))
(use-package rg
:config
(global-set-key (kbd "M-s g") 'rg)
(global-set-key (kbd "M-s d") 'rg-dwim))
(use-package rustic
:ensure
:bind (:map rustic-mode-map
("C-c C-c l" . flycheck-list-errors)
("C-c C-c a" . lsp-execute-code-action)
("C-c C-c r" . lsp-rename)
("C-c C-c q" . lsp-workspace-restart)
("C-c C-c Q" . lsp-workspace-shutdown)
("C-c C-c s" . lsp-rust-analyzer-status))
:config
(setq lsp-eldoc-hook nil)
(setq lsp-enable-symbol-highlighting nil)
(setq lsp-signature-auto-activate nil)
(setq rustic-flycheck-clippy-params "--message-format=json")
(setq rustic-format-on-save t)
(add-hook 'rustic-mode-hook 'rk/rustic-mode-hook))
(defun rk/rustic-mode-hook ()
;; so that run C-c C-c C-r works without having to confirm, but don't try to
;; save rust buffers that are not file visiting. Once
;; https://github.com/brotzeit/rustic/issues/253 has been resolved this should
;; no longer be necessary.
(when buffer-file-name
(setq-local buffer-save-without-query t)))
(use-package lsp-mode
:ensure
:commands lsp
:custom
;; what to use when checking on-save. "check" is default, I prefer clippy
(lsp-rust-analyzer-cargo-watch-command "clippy")
(lsp-eldoc-render-all t)
(lsp-idle-delay 0.6)
(lsp-rust-analyzer-server-display-inlay-hints t)
:config
(add-hook 'lsp-mode-hook 'lsp-ui-mode))
(use-package lsp-ui
:ensure
:commands lsp-ui-mode
:config (setq lsp-ui-peek-enable nil)
(setq lsp-ui-doc-enable nil)
(setq lsp-ui-doc-use-childframe nil)
(setq lsp-ui-doc-header nil)
(setq lsp-ui-doc-position 'top)
(setq lsp-ui-doc-use-webkit nil)
:custom (lsp-ui-peek-always-show t)
(lsp-ui-sideline-show-hover nil)
(lsp-ui-doc-enable nil)
:bind (:map lsp-ui-mode-map
("M-." . lsp-ui-peek-find-definitions)
("M-," . lsp-ui-peek-jump-backward)
("M-r" . lsp-ui-peek-find-references)
("M-h" . lsp-ui-doc-show)
("M-l" . lsp-ui-doc-hide)
("M-j" . lsp-ui-imenu)
("M-k" . lsp-ui-sideline-apply-code-actions)))
(use-package company
:ensure
:custom
(company-idle-delay 0.5) ;; how long to wait until popup
;; (company-begin-commands nil) ;; uncomment to disable popup
:bind
(:map company-active-map
("C-n". company-select-next)
("C-p". company-select-previous)
("M-<". company-select-first)
("M->". company-select-last))
(:map company-mode-map
("<tab>". tab-indent-or-complete)
("TAB". tab-indent-or-complete)))
(use-package magit
:init)
(use-package yasnippet
:ensure
:config
(yas-reload-all)
(add-hook 'prog-mode-hook 'yas-minor-mode)
(add-hook 'text-mode-hook 'yas-minor-mode))
(defun company-yasnippet-or-completion ()
(interactive)
(or (do-yas-expand)
(company-complete-common)))
(defun check-expansion ()
(save-excursion
(if (looking-at "\\_>") t
(backward-char 1)
(if (looking-at "\\.") t
(backward-char 1)
(if (looking-at "::") t nil)))))
(defun do-yas-expand ()
(let ((yas/fallback-behavior 'return-nil))
(yas/expand)))
(defun tab-indent-or-complete ()
(interactive)
(if (minibufferp)
(minibuffer-complete)
(if (or (not yas/minor-mode)
(null (do-yas-expand)))
(if (check-expansion)
(company-complete-common)
(indent-for-tab-command)))))
(use-package flycheck :ensure)
;; Please set your themes directory to 'custom-theme-load-path
(add-to-list 'custom-theme-load-path
(file-name-as-directory "~/.emacs.d/replace-colorthemes"))
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(load-theme 'vim-colors t t)
(enable-theme 'vim-colors)
;(use-package doom-themes
; :ensure t
; :config
; (load-theme 'doom-acario-light t))
(define-advice evil-ex-hl-match-hook (:around (fn hl) add-priority-reset-hook)
(or (funcall fn hl)
(lambda (_ ov)
(overlay-put ov 'priority 0))))
(set-face-attribute 'default nil :height 110)
;; Disable the menu.
(tool-bar-mode -1)
;; Enable transient mark mode.
(transient-mark-mode 1)
;; Highlight paired parentheses when cursor is over one.
(show-paren-mode 1)
(setq-default display-line-numbers-type 'absolute
display-line-numbers-current-absolute t
display-line-numbers-width 4
display-line-numbers-widen t)
(add-hook 'text-mode-hook #'display-line-numbers-mode)
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
(defun local/project-try-explicit (dir)
"Find a super-directory of DIR containing a root file."
(locate-dominating-file dir ".root"))
(defmethod project-root ((project string))
project)
(add-hook 'project-find-functions
#'local/project-try-explicit)
(use-package dired-sidebar
:bind (("C-x C-n" . dired-sidebar-toggle-sidebar))
:ensure t
:commands (dired-sidebar-toggle-sidebar)
:init
(add-hook 'dired-sidebar-mode-hook
(lambda ()
(unless (file-remote-p default-directory)
(auto-revert-mode))))
:config
(push 'toggle-window-split dired-sidebar-toggle-hidden-commands)
(push 'rotate-windows dired-sidebar-toggle-hidden-commands)
(setq dired-sidebar-subtree-line-prefix "__")
(setq dired-sidebar-theme 'vscode)
(setq dired-sidebar-use-term-integration t)
(setq dired-sidebar-use-custom-font t))
(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.
'(custom-safe-themes
'("d268b67e0935b9ebc427cad88ded41e875abfcc27abd409726a92e55459e0d01" default))
'(package-selected-packages
'(nord-theme yasnippet use-package undo-fu tommyh-theme rustic rg material-theme lsp-ui flycheck evil dired-sidebar company)))
(custom-set-faces
;; custom-set-faces 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.
)