From 244bafc426222b58d66e57d5eef7d4e2bccfddf1 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Wed, 29 Jul 2026 23:00:29 -0400 Subject: neomacs yet again --- .config/emacs/completion-at-point.el | 16 +++++++ .config/emacs/file-management.el | 23 ---------- .config/emacs/files.el | 25 +++++++++++ .config/emacs/init.el | 81 ++++++++++++++++++++++-------------- .config/emacs/minibuffer.el | 29 +++++++++++++ .config/emacs/misc.el | 43 ++++++++++--------- .config/emacs/style.el | 71 +++++++++++++++++++++++++++++-- .config/emacs/text-editing.el | 19 ++++----- .config/emacs/ui.el | 57 ------------------------- 9 files changed, 218 insertions(+), 146 deletions(-) create mode 100644 .config/emacs/completion-at-point.el delete mode 100644 .config/emacs/file-management.el create mode 100644 .config/emacs/files.el create mode 100644 .config/emacs/minibuffer.el delete mode 100644 .config/emacs/ui.el diff --git a/.config/emacs/completion-at-point.el b/.config/emacs/completion-at-point.el new file mode 100644 index 0000000..7683dd2 --- /dev/null +++ b/.config/emacs/completion-at-point.el @@ -0,0 +1,16 @@ +(use-package corfu + :ensure t + :hook (after-init . global-corfu-mode) + :bind (:map corfu-map ("" . corfu-complete)) + :config + (setq tab-always-indent 'complete) + (setq corfu-preview-current nil) + (setq corfu-min-width 20) + + (setq corfu-popupinfo-delay '(1.25 . 0.5)) + (corfu-popupinfo-mode 1) ; shows documentation after `corfu-popupinfo-delay' + + ;; Sort by input history (no need to modify `corfu-sort-function'). + (with-eval-after-load 'savehist + (corfu-history-mode 1) + (add-to-list 'savehist-additional-variables 'corfu-history))) diff --git a/.config/emacs/file-management.el b/.config/emacs/file-management.el deleted file mode 100644 index 80165f7..0000000 --- a/.config/emacs/file-management.el +++ /dev/null @@ -1,23 +0,0 @@ -(use-package dired - :ensure nil - :commands (dired) - :hook - ((dired-mode . dired-hide-details-mode) - (dired-mode . hl-line-mode)) - :config - (setq dired-recursive-copies 'always) - (setq dired-recursive-deletes 'always) - (setq dired-dwim-target t) - (setq dired-kill-when-opening-new-dired-buffer t) - (setq dired-listing-switches "-alh --group-directories-first")) - -(use-package dired-subtree - :after dired - :bind - ( :map dired-mode-map - ("" . dired-subtree-toggle) - ("TAB" . dired-subtree-toggle) - ("" . dired-subtree-remove) - ("S-TAB" . dired-subtree-remove)) - :config - (setq dired-subtree-use-backgrounds nil)) diff --git a/.config/emacs/files.el b/.config/emacs/files.el new file mode 100644 index 0000000..0830ffc --- /dev/null +++ b/.config/emacs/files.el @@ -0,0 +1,25 @@ +(use-package dired + :commands (dired) + :hook ((dired-mode . dired-hide-details-mode) + (dired-mode . hl-line-mode) + (dired-mode . (lambda () (setq-local cursor-type nil)))) + :config + (setq dired-recursive-copies 'always) + (setq dired-recursive-deletes 'always) + (setq dired-dwim-target t) + (setq dired-kill-when-opening-new-dired-buffer t) + (setq dired-listing-switches "-alh --group-directories-first")) + +(use-package dired-subtree + :ensure t + :after dired + :bind + ( :map dired-mode-map + ("" . dired-subtree-toggle) + ("TAB" . dired-subtree-toggle) + ("" . dired-subtree-remove) + ("S-TAB" . dired-subtree-remove)) + :hook + (dired-subtree-after-insert . nerd-icons-dired--refresh) + :config + (setq dired-subtree-use-backgrounds nil)) diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 27b7828..f2486fa 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -1,4 +1,11 @@ -(require 'package) +;; add my lisp directory and its subdirectories to the load path +(defvar my-lisp-dir (concat (getenv "XDG_CONFIG_HOME") "/emacs/lisp")) +(add-to-list 'load-path my-lisp-dir) +(let ((default-directory my-lisp-dir)) + (normal-top-level-add-subdirs-to-load-path)) + +;; stop garbage files +(require 'no-littering) ;; improve garbage collection (defun my-minibuffer-setup-hook () @@ -12,22 +19,11 @@ (run-with-idle-timer 1.2 t 'garbage-collect)) (gc-idle-timer) -;; add my lisp directory and its subdirectories to the load path -(defvar my-lisp-dir (concat (getenv "XDG_CONFIG_HOME") "/emacs/lisp")) -(add-to-list 'load-path my-lisp-dir) -(let ((default-directory my-lisp-dir)) - (normal-top-level-add-subdirs-to-load-path)) - -;; greener emacs -(use-package no-littering - :ensure nil - :demand t) - -;; no custom and lockfiles +;; opt out of custom and lockfiles (setq custom-file (make-temp-file "emacs-custom-")) (setq create-lockfiles nil) -;; backups in one folder +;; backups in one directory (setq backup-directory-alist `((".*" . ,temporary-file-directory))) (setq auto-save-file-name-transforms @@ -35,32 +31,55 @@ ;; better meta behaviour (setq inhibit-startup-message t - vc-follow-symlinks t - use-short-answers t - enable-recursive-minibuffers t) + vc-follow-symlinks t + use-short-answers t + enable-recursive-minibuffers t) + +;; set up package managers +(require 'package) +(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) +(package-initialize) +(unless package-archive-contents + (package-refresh-contents)) + +;; don't complain about bytecomp errors in a window +(add-to-list 'display-buffer-alist + '("\\`\\*\\(Warnings\\|Compile-Log\\)\\*\\'" + (display-buffer-no-window) + (allow-no-window . t))) -;; saveplace mode +;; saves last place in file (use-package saveplace - :ensure nil :config (save-place-mode)) -;; savehist mode -(use-package savehist - :ensure nil - :init - (savehist-mode)) +;; better C-g dwim +(defun keyboard-quit-dwim () + (interactive) + (cond + ((region-active-p) + (keyboard-quit)) + ((derived-mode-p 'completion-list-mode) + (delete-completion-window)) + ((> (minibuffer-depth) 0) + (abort-recursive-edit)) + (t + (keyboard-quit)))) +(define-key global-map (kbd "C-g") #'keyboard-quit-dwim) ;; load my config files -(defun loadc (file) (load (expand-file-name file user-emacs-directory))) -(loadc "ui.el") +(defun loadc (file) (load (locate-user-emacs-file file))) +(loadc "style.el") (loadc "text-editing.el") +(loadc "minibuffer.el") +(loadc "completion-at-point.el") +(loadc "files.el") (loadc "misc.el") -(loadc "style.el") -(loadc "file-management.el") (context-menu-mode t) -(loadc "ide.el") -(loadc "evil.el") -(loadc "lang.el") +;; (loadc "ide.el") +;; (loadc "evil.el") +;; (loadc "lang.el") + +(find-file user-init-file) ;; skipped: diminish, improved C-g, evil nerd commenter, ansi color and rainbow ;; delimiters, evil, rainbow, diff --git a/.config/emacs/minibuffer.el b/.config/emacs/minibuffer.el new file mode 100644 index 0000000..678a13b --- /dev/null +++ b/.config/emacs/minibuffer.el @@ -0,0 +1,29 @@ +(use-package vertico + :ensure t + :hook (after-init . vertico-mode)) + +(use-package vertico-directory + :ensure t + :after vertico + ;; More convenient directory navigation commands + :bind (:map vertico-map + ("RET" . vertico-directory-enter) + ("DEL" . vertico-directory-delete-char) + ("M-DEL" . vertico-directory-delete-word)) + :config + (setq read-extended-command-predicate #'command-completion-default-include-p + minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))) + +(use-package marginalia + :ensure t + :hook (after-init . marginalia-mode)) + +(use-package orderless + :ensure t + :config + (setq completion-styles '(orderless basic)) + (setq completion-category-defaults nil) + (setq completion-category-overrides nil)) + +(use-package savehist + :hook (after-init . savehist-mode)) diff --git a/.config/emacs/misc.el b/.config/emacs/misc.el index 9239f64..b6d9a26 100644 --- a/.config/emacs/misc.el +++ b/.config/emacs/misc.el @@ -5,40 +5,43 @@ ;; magit (use-package magit - :demand t + :ensure t :bind (("C-x g" . magit-status)) + :config + (setq vc-handled-backends (delq 'Git vc-handled-backends)) :custom (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) ;; consult (use-package consult + :ensure t :custom (consult-preview-key nil) :bind (("M-y" . 'consult-yank-pop) ;; Paste by selecting the kill-ring - ("M-s" . 'consult-line) ;; Search current buffer, like swiper - ("C-c i" . 'consult-imenu) ;; Search the imenu - )) - -;; proj -(use-package proj - :demand t - :config - (global-set-key (kbd "C-x b") `proj-switch-to-buffer) - (global-set-key (kbd "C-c b") `switch-to-buffer) - (global-set-key (kbd "C-x k") `proj-kill-buffer) - (global-set-key (kbd "C-c k") `kill-buffer) - (setq proj-locations '(("~/development/" . 1) ("~/opt/" . 1) ("~/dotfiles/" . 0) ("~/dotfiles/.config/emacs/lisp/" . 1)) - proj-grep-function 'consult-ripgrep)) - -;; editorconfig mode -(editorconfig-mode 1) -(add-hook 'prog-mode 'editorconfig-apply) + ("M-s" . 'consult-line) ;; Search current buffer swiper + ("C-c i" . 'consult-imenu))) ;; Search the imenu ;; helpful (use-package helpful - :ensure nil + :ensure t :bind ([remap describe-command] . helpful-command) ([remap describe-function] . helpful-callable) ([remap describe-variable] . helpful-variable) ([remap describe-key] . helpful-key)) + +;; editorconfig mode +(editorconfig-mode 1) +(add-hook 'prog-mode 'editorconfig-apply) + +;; proj +;; (use-package proj +;; :demand t +;; :config +;; (global-set-key (kbd "C-x b") `proj-switch-to-buffer) +;; (global-set-key (kbd "C-c b") `switch-to-buffer) +;; (global-set-key (kbd "C-x k") `proj-kill-buffer) +;; (global-set-key (kbd "C-c k") `kill-buffer) +;; (setq proj-locations '(("~/development/" . 1) ("~/opt/" . 1) ("~/dotfiles/" . 0) ("~/dotfiles/.config/emacs/lisp/" . 1)) +;; proj-grep-function 'consult-ripgrep)) + diff --git a/.config/emacs/style.el b/.config/emacs/style.el index 9ae5ea9..b4071a8 100644 --- a/.config/emacs/style.el +++ b/.config/emacs/style.el @@ -1,7 +1,70 @@ +;; get rid of ui +(menu-bar-mode -1) +(scroll-bar-mode -1) +(tool-bar-mode -1) + +;; fonts +(let ((mono-spaced-font "DejaVuSansMono") + (proportionately-spaced-font "DejaVuSans")) + (set-face-attribute 'default nil :family mono-spaced-font :height 100) + (set-face-attribute 'fixed-pitch nil :family mono-spaced-font :height 1.0) + (set-face-attribute 'variable-pitch nil :family proportionately-spaced-font :height 1.0)) + ;; theme -(use-package doom-themes + +(load-theme 'wombat) + + +(custom-set-faces + '(default ((t (:inherit nil :stipple nil :background "#222323" :foreground "#f6f3e8" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 115 :width normal :family "Monaco")))) + '(highlight ((t (:underline nil)))) + '(fringe ((t (:background "#222323")))) + '(vertical-border ((t (:foreground "#303030")))) + '(success ((t (:inherit (quote font-lock-keyword-face) :weight normal)))) + '(font-lock-keyword-face ((t (:foreground "#86b7dd")))) + '(font-lock-string-face ((t (:foreground "#98dc5f")))) + ) + + ;; (custom-set-faces + ;; '(highlight ((t (:underline nil))))) + ;; '(dired-directory ((t (:inherit (quote font-lock-keyword-face))))) + ;; '(dired-header ((t (:inherit (quote font-lock-comment-face))))) + ;; '(font-lock-keyword-face ((t (:foreground "#86b7dd")))) + ;; '(font-lock-string-face ((t (:foreground "#98dc5f")))) + ;; '(fringe ((t (:background "#222323")))) + ;; '(ido-first-match ((t (:inherit (quote font-lock-comment-face))))) + ;; '(ido-only-match ((t (:inherit (quote font-lock-comment-face))))) + ;; '(ido-subdir ((t (:inherit (quote font-lock-keyword-face))))) + ;; '(linum ((t (:inherit (shadow default) :background "#191919" :foreground "#505050")))) + ;; '(success ((t (:inherit (quote font-lock-keyword-face) :weight normal)))) + ;; '(vertical-border ((t (:foreground "#303030")))) + ;; '(company-scrollbar-bg ((t (:background "#303030")))) + ;; '(company-scrollbar-fg ((t (:background "#99968b")))) + ;; '(company-tooltip ((t (:background "#303030")))) + ;; '(company-tooltip-annotation ((t (:inherit (quote font-lock-comment-face))))) + ;; '(company-tooltip-common ((t (:inherit (quote font-lock-comment-face))))) + ;; '(company-tooltip-common-selection ((t (:inherit (quote font-lock-keyword-face) :weight normal)))) + ;; '(company-tooltip-mouse ((t (:inherit (quote font-lock-keyword-face) :weight normal)))) + ;; '(company-tooltip-selection ((t (:inherit (quote font-lock-keyword-face) :weight normal)))) + +;; icons + +(use-package nerd-icons + :ensure t) + +(use-package nerd-icons-completion + :ensure t + :after marginalia + :config + (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup)) + +(use-package nerd-icons-corfu + :ensure t + :after corfu :config - (load-theme 'doom-one t)) + (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)) -;; font -(add-to-list 'default-frame-alist '(font . "ComicMono-12")) +(use-package nerd-icons-dired + :ensure t + :hook + (dired-mode . nerd-icons-dired-mode)) diff --git a/.config/emacs/text-editing.el b/.config/emacs/text-editing.el index 392f1d9..f6a0147 100644 --- a/.config/emacs/text-editing.el +++ b/.config/emacs/text-editing.el @@ -1,7 +1,3 @@ -;; tabs instead of spaces -(setq-default tab-width 4) -(setq backward-delete-char-untabify-method "hungry") - ;; scrolling (setq scroll-up-aggressively nil scroll-down-aggressively nil @@ -9,22 +5,23 @@ (setq scroll-step 1) (setq scroll-margin 8) +;; columns +(setq-default fill-column 80) +(setq-default truncate-lines t) + ;; mwim (use-package mwim - :ensure nil :bind (("C-a" . mwim-beginning) ("C-e" . mwim-end-of-line))) ;; expand keybind (use-package expand-region - :ensure nil :bind ("C-=" . er/expand-region)) -;; delete marked text when typing start -(use-package delsel - :ensure nil - :hook (after-init . delete-selection-mode)) - ;; better comment keybind (use-package evil-nerd-commenter :bind ("M-;" . evilnc-comment-or-uncomment-lines)) + +;; delete selected region when you type new text +(use-package delsel + :hook (after-init . delete-selection-mode)) diff --git a/.config/emacs/ui.el b/.config/emacs/ui.el deleted file mode 100644 index e8c547e..0000000 --- a/.config/emacs/ui.el +++ /dev/null @@ -1,57 +0,0 @@ -;; disable bs -(scroll-bar-mode -1) -(tool-bar-mode -1) -(tooltip-mode -1) -(menu-bar-mode -1) - -;; columns and truncation -(column-number-mode +1) -(setq-default fill-column 80) -(setq-default truncate-lines t) - -;; line numbers in prog mode -(defun my/prog-mode-hook () - (display-line-numbers-mode t) - (setq display-line-numbers-width-start t - display-line-numbers-type t)) -(add-hook 'prog-mode-hook 'my/prog-mode-hook) - -;; vertico minibuffer completion - -(use-package vertico - :demand t - :ensure nil - :custom - (vertico-count 15) - :bind (:map vertico-map - ("C-n" . vertico-next) - ("C-p" . vertico-previous)) - :config - (vertico-mode t)) - -(use-package vertico-directory - :ensure nil - :after vertico - ;; More convenient directory navigation commands - :bind (:map vertico-map - ("RET" . vertico-directory-enter) - ("DEL" . vertico-directory-delete-char) - ("M-DEL" . vertico-directory-delete-word)) - :config - (setq read-extended-command-predicate #'command-completion-default-include-p - minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))) - -(use-package marginalia - :ensure nil - :demand t - :config - (marginalia-mode) - :bind (:map minibuffer-local-map - ("M-A" . marginalia-cycle))) - -(use-package orderless - :ensure nil - :custom - (completion-styles '(orderless partial-completion basic)) - (completion-category-defaults nil) - (completion-category-overrides '((file (styles orderless partial-completion))))) -- cgit v1.2.3