From f4a7cc1d80325f057ed7ac55d1eccb4240cbee92 Mon Sep 17 00:00:00 2001 From: Alexander Rosenberg Date: Wed, 20 Sep 2023 00:50:34 -0700 Subject: [PATCH] Update init.el --- init.el | 179 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 143 insertions(+), 36 deletions(-) diff --git a/init.el b/init.el index 874f50e..ee743eb 100644 --- a/init.el +++ b/init.el @@ -7,7 +7,7 @@ ;; Use melpa (require 'package) -(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) +(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize) ;; Ensure use-package is installed @@ -33,14 +33,21 @@ ;; basic stuff (use-package emacs - :hook (emacs-lisp-mode . (lambda () - (setq-local evil-lookup-func - #'my/describe-symbol-at-point))) + :hook ((emacs-lisp-mode . my/-emacs-lisp-mode-setup-evil-lookup) + (prog-mode . my/enable-electric-pair-mode)) :init + (defun my/-emacs-lisp-mode-setup-evil-lookup () + (setq-local evil-lookup-func + #'my/describe-symbol-at-point)) + (defun my/enable-electric-pair-mode () + (electric-pair-local-mode 1)) (defun my/describe-symbol-at-point () "Calls `describe-symbol' on the return value of `form-at-point'." (interactive) - (describe-symbol (form-at-point))) + (let ((form (form-at-point))) + (if (consp form) + (describe-symbol (cadr form)) + (describe-symbol form)))) ;; Make show paren instant (setq show-paren-delay 0) @@ -58,9 +65,8 @@ ;; Disable startup screen (setq inhibit-startup-screen t) - ;; rainbow-delimiters - (use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) + ;; show column numbers + (column-number-mode 1) ;; Disable the menu and tool bars (menu-bar-mode -1) @@ -72,10 +78,24 @@ ;; Set fonts (add-to-list 'default-frame-alist '(font . "FiraCode Nerd Font Mono-12")) + ;; Some settings for programming + (setq-default indent-tabs-mode nil + tab-width 4 + c-basic-offset 4 + indent-line-function 'insert-tab) + ;; Tree sitter download locations (setq treesit-language-source-alist - '((c "https://github.com/tree-sitter/tree-sitter-c") - (cpp "https://github.com/tree-sitter/tree-sitter-cpp")))) + '((c "https://github.com/tree-sitter/tree-sitter-c") + (cpp "https://github.com/tree-sitter/tree-sitter-cpp") + (java "https://github.com/tree-sitter/tree-sitter-java") + (python "https://github.com/tree-sitter/tree-sitter-python") + (rust "https://github.com/tree-sitter/tree-sitter-rust"))) + ;; Tree sitter major mode conversions + (setq major-mode-remap-alist + '((c-mode . c-ts-mode) + (java-mode . java-ts-mode) + (rust-mode . rust-ts-mode)))) (use-package recentf :config @@ -110,16 +130,21 @@ ;; avy (use-package avy - :bind ("C-c C-j" . avy-resume) + :bind (("C-c C-j" . avy-resume) + ("M-s s" . evil-avy-goto-char-2) + ("M-s S" . evil-avy-goto-line)) :init (define-minor-mode my/evil-avy-mode - "Minor mode to define avy motions for evil" - :global t + "A minor mode for binding avy commands to s and S in evil's normal and +visual states." :keymap (make-sparse-keymap)) (evil-define-key '(normal visual operator motion) my/evil-avy-mode-map "s" #'evil-avy-goto-char-2 "S" #'evil-avy-goto-line) - (my/evil-avy-mode 1) + (define-globalized-minor-mode my/evil-avy-global-mode my/evil-avy-mode + (lambda () (my/evil-avy-mode 1)) + :predicate '((not magit-mode dired-mode proced-mode) t)) + (my/evil-avy-global-mode 1) :config (avy-setup-default)) @@ -139,9 +164,12 @@ ;; vertico (use-package vertico :bind (:map vertico-map - ("C-S-k" . kill-line) - ("C-k" . vertico-previous) - ("C-j" . vertico-next)) + ("C-S-k" . kill-line) + ("C-k" . vertico-previous) + ("C-j" . vertico-next) + ("RET" . vertico-directory-enter) + ("DEL" . vertico-directory-delete-char) + ("M-DEL" . vertico-directory-delete-word)) :init (setq vertico-cycle t enable-recursive-minibuffers t @@ -155,7 +183,10 @@ ;; orderless (use-package orderless :autoload orderless-define-completion-style + :hook (text-mode . my/-setup-text-mode-completion-styles) :init + (defun my/-setup-text-mode-completion-styles () + (setq-local completion-styles '(basic))) (orderless-define-completion-style my/orderless-with-initialism (orderless-matching-styles '(orderless-initialism orderless-literal @@ -163,9 +194,11 @@ (setq completion-styles '(orderless basic) completion-category-defaults nil completion-category-overrides '((file - (styles basic partial-completion)) + (styles basic partial-completion)) (command - (my/orderless-with-initialism basic))))) + (my/orderless-with-initialism basic)) + (eglot + (orderless basic))))) ;; marginalia (use-package marginalia @@ -176,9 +209,14 @@ ;; embark (use-package embark - :bind (("M-e" . embark-act) - :map minibuffer-local-map - ("M-E" . embark-collect))) + :bind (("C-." . embark-act) + ("C-;" . embark-dwim)) + :init + (setq embark-quit-after-action nil) + (add-to-list 'display-buffer-alist + '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*" + nil + (window-parameters (mode-line-format . none))))) ;; consult (use-package consult @@ -193,8 +231,9 @@ ("C-x c f" . consult-focus-lines) ("C-x c r" . consult-recent-file) ("C-x c b" . consult-bookmark) - :map flymake-mode-map - ("C-c e" . consult-flymake)) + ("M-g i" . consult-imenu) + ("M-g I" . consult-imenu-multi) + ("M-g r" . consult-imenu-multi)) :init (defun my/consult-emacs-info () "`consult-info' for emacs specific pages." @@ -208,13 +247,39 @@ ;; corfu (autocomplete) (use-package corfu - :bind ("M-" . corfu-complete) + :bind (("M-" . completion-at-point) + :map corfu-map + ("M-SPC" . corfu-insert-separator) + ("M-m" . my/corfu-move-to-minibuffer)) :init + (defun my/corfu-move-to-minibuffer () + (interactive) + (when completion-in-region--data + (let ((completion-extra-properties corfu--extra) + completion-cycle-threshold completion-cycling) + (apply #'consult-completion-in-region completion-in-region--data)))) (setq corfu-cycle t - corfu-auto t - corfu-on-exact-match nil - completion-cycle-threshold 3) - (global-corfu-mode 1)) + corfu-auto t + corfu-on-exact-match nil + completion-cycle-threshold 3) + (global-corfu-mode 1) + (corfu-popupinfo-mode 1) + :config + (add-to-list 'corfu-continue-commands #'corfu-move-to-minibuffer)) +(use-package corfu-terminal + :init + (corfu-terminal-mode 1)) + +;; cape (a bunch of capfs!) +(use-package cape + :bind (("M-p" . cape-dabbrev) + ("M-P" . cape-line)) + :hook (text-mode . my/-cape-setup-text-mode) + :init + (defun my/-cape-setup-text-mode () + (setq-local completion-at-point-functions + '(cape-dict cape-dabbrev))) + (add-to-list 'completion-at-point-functions #'cape-file)) ;; xref (use-package xref @@ -226,8 +291,24 @@ ;; flymake (use-package flymake + :bind (:map flymake-mode-map + ("C-c e" . my/flymake-show-diagnostic-at-point) + ("C-c E" . consult-flymake)) + :hook (emacs-lisp-mode . my/enable-flymake-mode) :init - (flymake-mode 1)) + (defun my/flymake-show-diagnostic-at-point () + (interactive) + (if-let ((pos (point)) + (diag (and flymake-mode + (get-char-property pos 'flymake-diagnostic))) + (message (flymake--diag-text diag))) + (progn + ;; show the frame + ))) + (defun my/-flymake-show-diagnostic-hide-frame () + (make-frame-invisible my/-flymake-show-diagnostic-frame)) + (defun my/enable-flymake-mode () + (flymake-mode 1))) ;; eldoc (use-package eldoc @@ -235,19 +316,36 @@ :init (set eldoc-echo-area-use-multiline-p nil)) +;; eglot +(use-package eglot + :hook (((c-ts-mode c++-ts-mode java-ts-mode rust-ts-mode + python-ts-mode) . eglot-ensure) + (eglot-managed-mode . my/-eglot-setup-eldoc)) + :init + (defun my/-eglot-setup-eldoc () + "Setup eldoc variables for `eglot-managed-mode-hook'." + (setq-local eldoc-echo-area-use-multiline-p + nil)) + (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) + (setq eglot-autoshutdown t + eglot-ignored-server-capabilities '(:inlayHintProvider))) + +;; rust +(use-package rust-mode) + +;; json +(use-package json-mode) + ;; vterm (use-package vterm - :bind ("M-RET" . vterm)) + :bind ("C-x C-a" . vterm)) ;; proced (use-package proced :bind ("C-x o" . proced) :init - (evil-define-key '(normal visual motion) proced-mode-map - "zf" #'proced-filter-interactive - "zF" #'proced-format-interactive) (setq proced-auto-update-flag t - proced-auto-update-interval 1)) + proced-auto-update-interval 1)) ;; dired (use-package dired @@ -261,7 +359,16 @@ "U" #'dired-unmark-all-marks)) ;; magit -(use-package magit) +(use-package magit + :bind ("C-x C-m" . magit) + :init + (evil-define-key '(normal visual motion) magit-mode-map + "s" #'magit-stage-file + "S" #'magit-stage-modified)) + +;; rainbow-delimiters +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) ;; Theme (doom-themes) (use-package doom-themes