emacs/init.el

212 lines
7.0 KiB
EmacsLisp
Raw Normal View History

2022-11-25 23:05:07 +00:00
;;;; Appearance
2022-11-28 23:38:20 +00:00
(defun apply-appearance ()
;; Set theme
(load-theme 'my-theme +1)
;; Hide GTK scroll bar
(toggle-scroll-bar -1))
(apply-appearance)
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(apply-appearance))))
;; Hide ribbon, menu bar
2022-11-25 23:05:07 +00:00
(menu-bar-mode -1)
(tool-bar-mode -1)
;; Show colum number in status bar
(column-number-mode +1)
;; Show line numbers
(global-display-line-numbers-mode +1)
;; Highlight current line
2022-11-29 08:55:04 +00:00
(global-hl-line-mode +1)
2022-11-25 23:05:07 +00:00
;; Replace yes/no prompts with y/n prompts
(fset #'yes-or-no-p #'y-or-n-p)
;; Fix jumpy scrolling
(setq mouse-wheel-scroll-amount '(3 ((shift) . 1))
mouse-wheel-progressive-speed nil
mouse-wheel-follow-mouse +1
scroll-step 1) ;; C-n C-p scroll step
;; Tabs
2022-11-28 22:12:01 +00:00
(setq custom-tab-width 2)
(defun disable-tabs ()
(indent-tabs-mode -1))
(defun enable-tabs ()
(local-set-key (kbd "TAB") 'tab-to-tab-stop)
(indent-tabs-mode +1)
(setq tab-width custom-tab-width))
(add-hook 'prog-mode-hook 'enable-tabs)
(add-hook 'lisp-mode-hook 'disable-tabs)
(add-hook 'emacs-lisp-mode-hook 'disable-tabs)
2022-11-25 23:05:07 +00:00
;;;; Packages (straight.el)
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 6))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; Use-Package
(straight-use-package 'use-package)
2022-11-29 08:55:04 +00:00
(setq straight-use-package-by-default t)
2022-11-25 23:05:07 +00:00
;; Avy (jump to char)
2022-11-25 23:22:16 +00:00
(use-package avy
:bind (("C-;" . avy-goto-char)
("C-:" . avy-goto-word-1)
("M-g g" . avy-goto-line)))
2022-11-25 23:05:07 +00:00
;; Magit (git frontend)
(use-package magit)
2022-11-28 22:12:01 +00:00
;; Rainbow-Mode (show hex strings in color)
(use-package rainbow-mode)
2022-11-29 08:55:04 +00:00
;; Editorconfig support
(use-package editorconfig
:config
(editorconfig-mode 1))
;; Treesitter
(use-package tree-sitter
:config
(use-package tree-sitter-langs
:config
(tree-sitter-require 'rust)
(tree-sitter-require 'java))
(global-tree-sitter-mode +1))
;; Rust support
(use-package rustic)
2022-11-29 08:55:04 +00:00
;; Evil (Vim Emulation)
2022-11-30 01:29:53 +00:00
(use-package evil
:init
(setq evil-want-C-u-scroll t)
2022-11-30 01:29:53 +00:00
(setq evil-mode-beyond-eol t)
(setq evil-mode-fine-undo t)
(setq evil-default-state 'emacs)
:config
(evil-set-initial-state 'prog-mode 'normal)
(evil-mode +1))
;; Treesitter based navigation
(use-package evil-textobj-tree-sitter
:config
(let ((define-scope (lambda (key outer inner)
(define-key evil-outer-text-objects-map key outer)
(define-key evil-inner-text-objects-map key inner)))
(define-jumps (lambda (key name)
(let ((key key) (name name))
(define-key evil-normal-state-map (kbd (concat "]" key))
`(lambda () (interactive)
(evil-textobj-tree-sitter-goto-textobj (concat ',name ".outer"))))
(define-key evil-normal-state-map (kbd (concat "[" key))
`(lambda () (interactive)
(evil-textobj-tree-sitter-goto-textobj (concat ',name ".outer") t)))
(define-key evil-normal-state-map (kbd (concat "]" (upcase key)))
`(lambda () (interactive)
(evil-textobj-tree-sitter-goto-textobj (concat ',name ".outer") nil t)))
(define-key evil-normal-state-map (kbd (concat "[" (upcase key)))
`(lambda () (interactive)
(evil-textobj-tree-sitter-goto-textobj (concat ',name ".outer") t t)))))
))
;; Define new scope symbols for use with i and a
(funcall define-scope "c"
(evil-textobj-tree-sitter-get-textobj "class.outer")
(evil-textobj-tree-sitter-get-textobj "class.inner"))
(funcall define-scope "f"
(evil-textobj-tree-sitter-get-textobj "function.outer")
(evil-textobj-tree-sitter-get-textobj "function.inner"))
;; Define jumps with ] and [
(funcall define-jumps "c" "class")
(funcall define-jumps "f" "function")))
2022-12-01 10:40:05 +00:00
;; Highlight operations
(use-package evil-goggles
:init
(setq evil-goggles-duration 0.15)
:config
(evil-goggles-mode))
;; Explanations for keybindings
(use-package which-key
:config
(which-key-mode +1))
;; On the fly syntax checking
(use-package flycheck)
;; Completions
(use-package company
:init
(setq company-minimum-prefix-length 1)
(setq company-idle-delay 0)
(setq company-selection-wrap-around t)
(setq company-tooltip-align-annotations t)
(setq company-tooltip-flip-when-above t)
(setq company-tooltip-margin 0)
(setq company-show-quick-access 'right)
:config
(setq company-transformers '(delete-consecutive-dups
company-sort-prefer-same-case-prefix
company-sort-by-backend-importance
company-sort-by-occurrence))
(define-key company-active-map (kbd "M-`") #'company-complete-selection)
(define-key company-active-map (kbd "M-n") #'company-select-next)
(define-key company-active-map (kbd "M-p") #'company-select-previous)
(define-key company-active-map (kbd "M-j") #'company-select-next)
(define-key company-active-map (kbd "M-k") #'company-select-previous)
(global-company-mode +1))
;; Fuzzy forawrd search in completions
(setq completion-styles '(flex basic))
;; Lsp
(use-package lsp-mode
:init
(setq lsp-headerline-breadcrumb-enable nil)
(setq lsp-signature-auto-activate nil)
(setq lsp-signature-doc-lines 0)
:config
(evil-define-key 'normal lsp-mode-map (kbd "SPC l") lsp-command-map)
(add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration)
(add-hook 'evil-insert-state-entry-hook #'lsp-signature-activate)
(add-hook 'evil-insert-state-exit-hook #'lsp-signature-stop))
(use-package lsp-ui
:init
(setq lsp-ui-doc-show-with-cursor t)
(setq lsp-ui-doc-position 'top)
(setq lsp-ui-doc-delay 0.5)
:config
(define-key lsp-ui-mode-map [remap xref-find-definitions] #'lsp-ui-peek-find-definitions)
(define-key lsp-ui-mode-map [remap xref-find-references] #'lsp-ui-peek-find-references)
(define-key evil-normal-state-map (kbd "SPC d") #'lsp-ui-peek-find-definitions)
(define-key evil-normal-state-map (kbd "SPC r") #'lsp-ui-peek-find-references)
;; Controls inside references popup
(define-key lsp-ui-peek-mode-map (kbd "j") #'lsp-ui-peek--select-next)
(define-key lsp-ui-peek-mode-map (kbd "k") #'lsp-ui-peek--select-prev)
(define-key lsp-ui-peek-mode-map (kbd "J") #'lsp-ui-peek--select-next-file)
(define-key lsp-ui-peek-mode-map (kbd "K") #'lsp-ui-peek--select-prev-file)
(define-key lsp-ui-peek-mode-map (kbd "o") #'lsp-ui-peek--goto-xref))
(setq gc-cons-threshold (* 1024 1024 100))
(setq read-process-output-max (* 1024 1024))