looked through emacs-bedrock and emacs better-defaults and added approprate stuff

This commit is contained in:
2026-03-24 02:13:41 +01:00
parent de4848dda5
commit 5e46231fbc
4 changed files with 321 additions and 37 deletions

309
init.el
View File

@@ -1,19 +1,310 @@
;; add melpa
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)
;; remove menu bar, tool bar, scroll bar
(menu-bar-mode 0)
(tool-bar-mode 0)
(column-number-mode 1)
(scroll-bar-mode 0)
;; highlight parens when on them
(show-paren-mode 1)
;; better line numbers
(global-display-line-numbers-mode)
(setq display-line-numbers 'relative)
;; (message (mapconcat 'identity (list "b" "asdf") "/"))
;; y or n instead of yes or no
(setopt use-short-answers t)
(message (replace-regexp-in-string "/[^/]+$" "/custom.el" user-init-file))
;; dynamic loading of file in init dir to put custom
(setq custom-file (replace-regexp-in-string "/[^/]+$" "/custom.el" user-init-file))
(load custom-file)
;; (setq custom-file "~/.emacs.d/custom.el")
;; (load custom-file)
;; initially wanted to load theme through custom, i think below is cleaner though
(use-package dracula-theme :ensure t :config (load-theme 'dracula t))
;; enable dracula theme
(use-package dracula-theme :ensure t :config (load-theme 'dracula))
;; stopped at 34:00
;; https://youtu.be/81MdyDYqB-A?si=-4pP_hQlBVvFRF2W&t=2040
;; add time in modeline
(setopt display-time-format "%a %d %T")
(setopt display-time-interval 1)
(display-time-mode)
;; add column number in modeline
(column-number-mode 1)
;; add which key
(use-package which-key :ensure t :hook after-init)
(which-key-mode)
;; install and add hook(s) for paredit mode
(use-package paredit :ensure t :hook after-init)
(defun turn-on-paredit ()
(interactive)
(paredit-mode))
(add-hook 'emacs-lisp-mode-hook 'turn-on-paredit)
(use-package emacs-everywhere :ensure t :defer t :hook after-init)
;; --- from better-defaults ---
;; ibuffer as default buffer list
(global-set-key (kbd "C-x C-b") 'ibuffer)
;; regex isearches as default
(global-set-key (kbd "C-s") 'isearch-forward-regexp)
(global-set-key (kbd "C-r") 'isearch-backward-regexp)
(global-set-key (kbd "C-M-s") 'isearch-forward)
(global-set-key (kbd "C-M-r") 'isearch-backward)
;; apropos?
(setq apropos-do-all t)
;; ignore case for file name, buffer name, competion
(setq read-file-name-completion-ignore-case t)
(setq read-buffer-completion-ignore-case t)
(setq completion-ignore-case t)
;; --- from emacs bedrock ---
;; Automatically reread from disk if the underlying file changes
(setopt auto-revert-avoid-polling t)
;; Some systems don't do file notifications well; see
;; https://todo.sr.ht/~ashton314/emacs-bedrock/11
(setopt auto-revert-interval 5)
(setopt auto-revert-check-vc-info t)
(global-auto-revert-mode)
;; Move through windows with Ctrl-<arrow keys>
(windmove-default-keybindings 'control) ; You can use other modifiers here
;; Fix archaic defaults
(setopt sentence-end-double-space nil)
;; magit <3
(use-package magit
:ensure t
:bind (("C-x g" . magit-status)))
;; (add-hook 'prog-mode 'electric-pair-mode)
;; completion stuff
;; Vertico: better vertical completion for minibuffer commands
(use-package vertico
:ensure t
:init
;; You'll want to make sure that e.g. fido-mode isn't enabled
(vertico-mode))
(use-package vertico-directory
:ensure nil
:after vertico
:bind (:map vertico-map
("M-DEL" . vertico-directory-delete-word)))
(use-package consult
:ensure t
:bind (
;; Drop-in replacements
("C-x b" . consult-buffer) ; orig. switch-to-buffer
("M-y" . consult-yank-pop) ; orig. yank-pop
;; Searching
("M-s r" . consult-ripgrep)
("M-s l" . consult-line) ; Alternative: rebind C-s to use
("M-s s" . consult-line) ; consult-line instead of isearch, bind
("M-s L" . consult-line-multi) ; isearch to M-s s
("M-s o" . consult-outline)
;; Isearch integration
:map isearch-mode-map
("M-e" . consult-isearch-history) ; orig. isearch-edit-string
("M-s e" . consult-isearch-history) ; orig. isearch-edit-string
("M-s l" . consult-line) ; needed by consult-line to detect isearch
("M-s L" . consult-line-multi) ; needed by consult-line to detect isearch
)
:config
;; Narrowing lets you restrict results to certain groups of candidates
(setq consult-narrow-key "<"))
;; Vertico: better vertical completion for minibuffer commands
(use-package vertico
:ensure t
:init
;; You'll want to make sure that e.g. fido-mode isn't enabled
(vertico-mode))
(use-package vertico-directory
:ensure nil
:after vertico
:bind (:map vertico-map
("M-DEL" . vertico-directory-delete-word)))
;; Marginalia: annotations for minibuffer
(use-package marginalia
:ensure t
:config
(marginalia-mode))
;; Corfu: Popup completion-at-point
(use-package corfu
:ensure t
:init
(global-corfu-mode)
:bind
(:map corfu-map
("SPC" . corfu-insert-separator)
("C-n" . corfu-next)
("C-p" . corfu-previous)))
;; Part of corfu
(use-package corfu-popupinfo
:after corfu
:ensure nil
:hook (corfu-mode . corfu-popupinfo-mode)
:custom
(corfu-popupinfo-delay '(0.25 . 0.1))
(corfu-popupinfo-hide nil)
:config
(corfu-popupinfo-mode))
;; Make corfu popup come up in terminal overlay
(use-package corfu-terminal
:if (not (display-graphic-p))
:ensure t
:config
(corfu-terminal-mode))
;; Fancy completion-at-point functions; there's too much in the cape package to
;; configure here; dive in when you're comfortable!
(use-package cape
:ensure t
:init
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
(add-to-list 'completion-at-point-functions #'cape-file))
;; Pretty icons for corfu
(use-package kind-icon
:if (display-graphic-p)
:ensure t
:after corfu
:config
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
;; Orderless: powerful completion style
(use-package orderless
:ensure t
:config
(setq completion-styles '(orderless)))
;; highlight todo
(use-package hl-todo :ensure t :defer t :hook (prog-mode . hl-todo-mode))
(setq hl-todo-keyword-faces
'(("TODO" . "#FF0000")
("FIXME" . "#FF0000")
("DEBUG" . "#A020F0")
("GOTCHA" . "#FF4500")
("STUB" . "#1E90FF")))
(add-hook 'after-init-hook 'hl-todo-mode)
;; with magit
(with-eval-after-load 'magit
(add-hook 'magit-log-wash-summary-hook
#'hl-todo-search-and-highlight t)
(add-hook 'magit-revision-wash-message-hook
#'hl-todo-search-and-highlight t))
;; make color codes be highlighted in their color
(use-package rainbow-mode :ensure t :defer t :hook (prog-mode . rainbow-mode))
(add-hook 'after-init-hook 'rainbow-mode)
;; doesnt work yet?
;; it should only do these when ispell is loaded
;; idk
;; (eval-after-load "ispell"
;; '(progn
;; (setq ispell-really-hunspell)
;; (setq ispell-program-name "hunspell")
;; (setq ispell-dictionary "en_US,de_DE")
;; (ispell-set-spellchecker-params)
;; (ispell-hunspell-add-multi-dic "en_US,de_DE")))
(use-package flycheck :ensure t :defer t :hook after-init)
;; (use-package flycheck-languagetool
;; :ensure t
;; :hook (text-mode . flycheck-languagetool-setup)
;; :init
;; (setq flycheck-languagetool-server-jar "~/.languagetool-server.jar"))
(use-package company :ensure t :defer t :hook after-init)
(add-hook 'after-init-hook 'global-company-mode)
;;; multiple cursors
(use-package multiple-cursors
:ensure t
:defer t
:hook after-init
:bind (
( "C-S-c" . mc/edit-lines)
( "C->" . mc/mark-next-like-this)
( "C-<" . mc/mark-previous-like-this)
( "C-c C-<" . mc/mark-all-like-this)
( "C-\"" . mc/skip-to-next-like-this)
( "C-:" . mc/skip-to-previous-like-this)
)
)
;; make emacs remember last session
(setq save-place-file (concat user-emacs-directory ".saveplace"))
;; (setq desktop-dirname (concat user-emacs-directory ".desktop.d"))
;; (setq-default save-place t)
;; (require 'saveplace)
(save-place-mode 1)
(desktop-save-mode 1)
(setq recentf-save-file (concat user-emacs-directory ".recentf"))
;; Save history of minibuffer
(savehist-mode)
(setq savehist-file (concat user-emacs-directory ".history"))
;; Helpful resources:
;;
;; - https://www.masteringemacs.org/article/seamlessly-merge-multiple-documentation-sources-eldoc
(use-package eglot
;; no :ensure t here because it's built-in
;; Configure hooks to automatically turn-on eglot for selected modes
; :hook
; (((python-mode ruby-mode elixir-mode) . eglot-ensure))
:custom
(eglot-send-changes-idle-time 0.1)
(eglot-extend-to-xref t) ; activate Eglot in referenced non-project files
:config
(fset #'jsonrpc--log-event #'ignore) ; massive perf boost---don't log every event
;; Sometimes you need to tell Eglot where to find the language server
; (add-to-list 'eglot-server-programs
; '(haskell-mode . ("haskell-language-server-wrapper" "--lsp")))
)
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'(text-mode . ("harper-ls" "--stdio"))
'(markdown-mode . ("harper-ls" "--stdio"))
))
;; flycheck told me to do this:
(provide 'init)
;;; init.el ends here