summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2025-10-07 02:40:28 +0200
committercashmere <cashmere@autistici.org>2025-10-07 02:40:28 +0200
commitc65919a81839f4d9da6cdc5492ed264a8ce9b639 (patch)
tree6cad2d22bc8f37f6fc0737049fd97235c196c574
parent366ac1cbdd9716228e6c45ec33f2e9b7cd1ab575 (diff)
downloademacs-c65919a81839f4d9da6cdc5492ed264a8ce9b639.tar.gz
sync
-rw-r--r--config.el633
-rw-r--r--config.org966
2 files changed, 1069 insertions, 530 deletions
diff --git a/config.el b/config.el
index 5e0de60..c156703 100644
--- a/config.el
+++ b/config.el
@@ -3,7 +3,37 @@
(setq read-process-output-max (* 1024 1024 4))
-(setq package-enable-at-startup nil)
+(setq package-enable-at-startup nil)
+(when (boundp 'pgtk-wait-for-event-timeout)
+ (setq pgtk-wait-for-event-timeout 0.001))
+
+(setq which-func-update-delay 1.0)
+(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
+(set-language-environment "UTF-8")
+(setq locale-coding-system 'utf-8)
+(prefer-coding-system 'utf-8)
+(set-default-coding-systems 'utf-8)
+(set-terminal-coding-system 'utf-8)
+(set-keyboard-coding-system 'utf-8)
+(set-selection-coding-system 'utf-8)
+
+(setq create-lockfiles nil)
+(setq make-backup-files nil)
+
+(setq backup-directory-alist
+ `(("." . ,(expand-file-name "backup" user-emacs-directory))))
+(setq tramp-backup-directory-alist backup-directory-alist)
+
+(setq backup-by-copying-when-linked t)
+(setq backup-by-copying t) ; Backup by copying rather renaming
+(setq delete-old-versions t) ; Delete excess backup versions silently
+(setq version-control t) ; Use version numbers for backup files
+(setq kept-new-versions 5)
+(setq kept-old-versions 5)
+
+(add-to-list 'default-frame-alist '(alpha-background . 90))
+
+;; (add-to-list 'default-frame-alist '(internal-border-width . 16))
(setq straight-check-for-modifications nil)
(defvar bootstrap-version)
@@ -44,7 +74,7 @@
(initial-scratch-message "") ;; Clear the initial message in the *scratch* buffer.
(ispell-dictionary "en_US") ;; Set the default dictionary for spell checking.
(make-backup-files nil) ;; Disable creation of backup files.
- (pixel-scroll-precision-mode t) ;; Enable precise pixel scrolling.
+ ;; (pixel-scroll-precision-mode t) ;; Enable precise pixel scrolling.
(pixel-scroll-precision-use-momentum nil) ;; Disable momentum scrolling for pixel precision.
(ring-bell-function 'ignore) ;; Disable the audible bell.
(split-width-threshold 300) ;; Prevent automatic window splitting if the window width exceeds 300 pixels.
@@ -247,6 +277,8 @@
(260 . "#89b4fa")
(280 . "#b4befe"))))
+
+
(use-package smerge-mode
:straight nil
:ensure nil ;; This is built-in, no need to fetch it.
@@ -279,34 +311,86 @@
(note "»" compilation-info))))
(use-package org
-:straight nil
- :ensure nil ;; This is built-in, no need to fetch it.
+ :straight nil
+ :ensure nil
:defer t
- :config
- (require 'org-tempo))
+ :config
+ (require 'org-tempo)
+ (custom-set-faces
+ '(org-document-title ((t (:height 1.6))))
+ '(outline-1 ((t (:height 1.25))))
+ '(outline-2 ((t (:height 1.2))))
+ '(outline-3 ((t (:height 1.2))))
+ '(outline-4 ((t (:height 1.2))))
+ '(outline-5 ((t (:height 1.2))))
+ '(outline-6 ((t (:height 1.2))))
+ '(outline-7 ((t (:height 1.2))))
+ '(outline-8 ((t (:height 1.2))))
+ '(outline-9 ((t (:height 1.2)))))
+ (org-indent-mode -1)
+ (setq org-startup-folded 'content)
+ (setq org-adapt-indentation t
+ org-hide-leading-stars t
+ org-pretty-entities t
+ org-ellipsis " ")
+ (setq org-src-fontify-natively t
+ org-src-tab-acts-natively t
+ org-edit-src-content-indentation 0)
+ (setq org-log-done t
+ org-auto-align-tags t
+ org-tags-column -80
+ org-fold-catch-invisible-edits 'show-and-error
+ org-special-ctrl-a/e t
+ org-insert-heading-respect-content t)
+
+;; (my-local-leader
+;; )
+
+ (add-hook 'org-mode-hook 'variable-pitch-mode)
+ (add-to-list 'font-lock-extra-managed-props 'display)
+ (font-lock-add-keywords 'org-mode
+ `(("^.*?\( \)\(:[[:alnum:]_@#%:]+:\)$"
+ (1 `(face nil
+ display (space :align-to (- right ,(org-string-width (match-string 2)) 3)))
+ prepend))) t)
+ (setq org-blank-before-new-entry '((heading . nil)
+ (plain-list-item . nil))))
+
+(use-package org-appear
+ :commands (org-appear-mode)
+ :hook (org-mode . org-appear-mode)
+ :config
+ (setq org-hide-emphasis-markers t) ;; Must be activated for org-appear to work
+ (setq org-appear-autoemphasis t ;; Show bold, italics, verbatim, etc.
+ org-appear-autolinks t ;; Show links
+ org-appear-autosubmarkers t)) ;; Show sub- and superscripts
(use-package which-key
-:straight nil
- :ensure nil ;; This is built-in, no need to fetch it.
- :defer t ;; Defer loading Which-Key until after init.
- :hook
- (after-init . which-key-mode)) ;; Enable which-key mode after initialization.
+ :straight nil
+ :ensure nil
+ :defer t
+ :hook
+ (after-init . which-key-mode)
+ :custom
+ (which-key-idle-delay 0.3))
- (setq which-key-idle-delay 0.001)
+(use-package gcmh
+ :config
+ (gcmh-mode 1))
(use-package vertico
:ensure t
:straight t
:hook
- (after-init . vertico-mode) ;; Enable vertico after Emacs has initialized.
+ (after-init . vertico-mode)
:custom
- (vertico-count 10) ;; Number of candidates to display in the completion list.
- (vertico-resize nil) ;; Disable resizing of the vertico minibuffer.
- (vertico-cycle nil) ;; Do not cycle through candidates when reaching the end of the list.
+ (vertico-count 10)
+ (vertico-resize nil)
+ (vertico-cycle nil)
+ :bind (:map vertico-map
+ ("C-j" . vertico-next)
+ ("C-k" . vertico-previous))
:config
- ;; Customize the display of the current candidate in the completion list.
- ;; This will prefix the current candidate with “» ” to make it stand out.
- ;; Reference: https://github.com/minad/vertico/wiki#prefix-current-candidate-with-arrow
(advice-add #'vertico--format-candidate :around
(lambda (orig cand prefix suffix index _start)
(setq cand (funcall orig cand prefix suffix index _start))
@@ -316,6 +400,19 @@
" ")
cand))))
+(use-package vertico-posframe
+ :init
+ (setq vertico-posframe-parameters '((left-fringe . 12) ;; Fringes
+ (right-fringe . 12)
+ (undecorated . nil))) ;; Rounded frame
+ :config
+ (vertico-posframe-mode 1)
+ (setq vertico-posframe-width 96 ;; Narrow frame
+ vertico-posframe-height vertico-count ;; Default height
+ ;; Don't create posframe for these commands
+ vertico-multiform-commands '((consult-line (:not posframe))
+ (consult-ripgrep (:not posframe)))))
+
;;; CONSULT
;; Consult provides powerful completion and narrowing commands for Emacs.
;; It integrates well with other completion frameworks like Vertico, enabling
@@ -326,12 +423,27 @@
:straight t
:defer t
:init
- ;; Enhance register preview with thin lines and no mode line.
(advice-add #'register-preview :override #'consult-register-window)
- ;; Use Consult for xref locations with a preview feature.
(setq xref-show-xrefs-function #'consult-xref
- xref-show-definitions-function #'consult-xref))
+ xref-show-definitions-function #'consult-xref)
+
+ :config
+ (setq consult-buffer-filter
+ '("\\` "
+ "\\`\\*Messages\\*\\'"
+ "\\`\\*Warnings\\*\\'"
+ "\\`\\*Compile-Log\\*\\'"
+ "\\`\\*Backtrace\\*\\'"
+ "\\`\\*Help\\*\\'"
+ "\\`\\*scratch\\*\\'"
+ "\\`\\*Completions\\*\\'"
+ "\\`\\*Flymake"
+ "\\`\\*lsp-help\\*\\'"
+ "\\`\\*eldoc"
+ "\\`\\*straight-process\\*\\'"
+ "\\`\\*Native-compile-Log\\*\\'"
+ "\\`\\*Async-native-compile-log\\*\\'")))
;;; MARKDOWN-MODE
;; Markdown Mode provides support for editing Markdown files in Emacs,
@@ -463,20 +575,23 @@
(lsp-enable-xref t) ;; Enable cross-references.
(lsp-auto-configure t) ;; Automatically configure LSP.
(lsp-enable-links nil) ;; Disable links.
- (lsp-eldoc-enable-hover t) ;; Enable ElDoc hover.
+ (lsp-eldoc-enable-hover nil) ;; Enable ElDoc hover.
+ (lsp-modeline-diagnostics-enable nil)
+ (lsp-signature-auto-activate nil)
+ (lsp-signature-render-documentation nil)
(lsp-enable-file-watchers nil) ;; Disable file watchers.
(lsp-enable-folding nil) ;; Disable folding.
(lsp-enable-imenu t) ;; Enable Imenu support.
(lsp-enable-indentation nil) ;; Disable indentation.
(lsp-enable-on-type-formatting nil) ;; Disable on-type formatting.
(lsp-enable-suggest-server-download t) ;; Enable server download suggestion.
- (lsp-enable-symbol-highlighting t) ;; Enable symbol highlighting.
+ (lsp-enable-symbol-highlighting nil) ;; Enable symbol highlighting.
(lsp-enable-text-document-color t) ;; Enable text document color.
;; Modeline settings
(lsp-modeline-code-actions-enable nil) ;; Keep modeline clean.
(lsp-modeline-diagnostics-enable nil) ;; Use `flymake' instead.
(lsp-modeline-workspace-status-enable t) ;; Display "LSP" in the modeline when enabled.
- (lsp-signature-doc-lines 1) ;; Limit echo area to one line.
+ (lsp-signature-doc-lines nil) ;; Limit echo area to one line.
(lsp-eldoc-render-all t) ;; Render all ElDoc messages.
;; Completion settings
(lsp-completion-enable t) ;; Enable completion.
@@ -486,7 +601,7 @@
;; Lens settings
(lsp-lens-enable t) ;; Enable lens support.
;; Headerline settings
- (lsp-headerline-breadcrumb-enable-symbol-numbers t) ;; Enable symbol numbers in the headerline.
+ (lsp-headerline-breadcrumb-enable-symbol-numbers nil) ;; Enable symbol numbers in the headerline.
(lsp-headerline-arrow "▶") ;; Set arrow for headerline.
(lsp-headerline-breadcrumb-enable-diagnostics nil) ;; Disable diagnostics in headerline.
(lsp-headerline-breadcrumb-icons-enable nil) ;; Disable icons in breadcrumb.
@@ -509,6 +624,10 @@
:init
(setq lsp-tailwindcss-add-on-mode t))
+
+
+
+
(use-package eldoc-box
:ensure t
:straight t
@@ -584,143 +703,65 @@
(use-package evil
:ensure t
:straight t
+ :after general
:init
(setq evil-want-integration t
evil-want-keybinding nil
evil-want-C-u-scroll t
- evil-want-C-u-delete t)
+ evil-want-C-u-delete t
+ evil-want-C-i-jump nil)
+
:config
(evil-set-undo-system 'undo-tree)
(setq evil-leader/in-all-states t
evil-want-fine-undo t)
- (my-leader
- "sp" 'consult-ripgrep
- "/" 'consult-line
- "." 'find-file
- "," 'consult-buffer
- "SPC" 'consult-buffer
- ":" (lambda () (interactive) (execute-extended-command nil))
-
- "f" '(:ignore t :wk "file")
- "fd" 'dired
- "fD" 'dired-jump
- "fr" 'consult-buffer
- "ff" 'find-file
- "fs" 'save-buffer
-
- "b" '(:ignore t :wk "buffer")
- "bb" 'consult-buffer
- "bi" 'ibuffer
- "bd" 'kill-current-buffer
- "bk" 'kill-current-buffer
- "bx" 'kill-current-buffer
- "bs" 'save-buffer
-
- "p" '(:ignore t :wk "project")
- "pb" 'consult-project-buffer
- "pp" 'project-switch-project
- "pf" 'project-find-file
- "ps" 'project-find-regexp
- "pk" 'project-kill-buffers
- "pd" 'project-dired
-
- "g" '(:ignore t :wk "git")
- "gg" 'magit-status
- "gl" 'magit-log-current
- "gd" 'magit-diff-buffer-file
- "gs" 'magit-status
- "gb" 'vc-annotate
-
- "o" '(:ignore t :wk "open")
- "op" 'neotree-toggle
- "oP" 'dired-jump
-
- "h" '(:ignore t :wk "help")
- "hm" 'describe-mode
- "hf" 'describe-function
- "hv" 'describe-variable
- "hk" 'describe-key
-
- "w" '(:ignore t :wk "window")
- "wv" 'split-window-right
- "ws" 'split-window-below
- "wd" 'delete-window
- "wo" 'delete-other-windows
-
- "c" '(:ignore t :wk "code")
-
- "m" '(:ignore t :wk "mode")
- "mp" (lambda ()
- (interactive)
- (shell-command (concat "prettier --write "
- (shell-quote-argument (buffer-file-name))))
- (revert-buffer t t t))
-
- "q" '(:ignore t :wk "quit")
- "qq" 'save-buffers-kill-terminal
-
- "a" 'embark-act
- "u" 'undo-tree-visualize
- "P" 'consult-yank-from-kill-ring)
+ (evil-mode 1)
- (general-def 'normal 'override
- "]d" 'flymake-goto-next-error
- "[d" 'flymake-goto-prev-error
- "]c" 'diff-hl-next-hunk
- "[c" 'diff-hl-previous-hunk
- "]b" 'switch-to-next-buffer
- "[b" 'switch-to-prev-buffer
- "]t" 'tab-next
- "[t" 'tab-previous
- "P" 'consult-yank-from-kill-ring
- "K" (if (>= emacs-major-version 31)
- #'eldoc-box-help-at-point
- #'ek/lsp-describe-and-jump)
- "gcc" (lambda ()
- (interactive)
- (unless (use-region-p)
- (comment-or-uncomment-region
- (line-beginning-position)
- (line-end-position)))))
+ (define-key evil-normal-state-map (kbd "SPC") nil)
+ (define-key evil-motion-state-map (kbd "SPC") nil)
+ (define-key evil-normal-state-map (kbd ",") nil)
+ (define-key evil-visual-state-map (kbd ",") nil)
+ (define-key evil-motion-state-map (kbd ",") nil)
- (general-def 'visual 'override
- "gc" (lambda ()
- (interactive)
- (when (use-region-p)
- (comment-or-uncomment-region
- (region-beginning)
- (region-end)))))
+ (setq evil-kill-on-visual-paste nil)
+
+ (defun my/evil-no-kill-ring (orig-fn beg end &optional type register yank-handler)
+ (let ((register (or register ?_)))
+ (funcall orig-fn beg end type register yank-handler)))
+
+ (advice-add 'evil-yank :around #'my/evil-no-kill-ring)
+ (advice-add 'evil-delete :around #'my/evil-no-kill-ring)
+ (advice-add 'evil-change :around #'my/evil-no-kill-ring)
(defun ek/lsp-describe-and-jump ()
(interactive)
(lsp-describe-thing-at-point)
(let ((help-buffer "*lsp-help*"))
(when (get-buffer help-buffer)
- (switch-to-buffer-other-window help-buffer))))
-
- (evil-mode 1))
-(define-key minibuffer-local-map [escape] 'abort-recursive-edit)
-(define-key minibuffer-local-ns-map [escape] 'abort-recursive-edit)
-(define-key minibuffer-local-completion-map [escape] 'abort-recursive-edit)
-(define-key minibuffer-local-must-match-map [escape] 'abort-recursive-edit)
-(define-key minibuffer-local-isearch-map [escape] 'abort-recursive-edit)
+ (switch-to-buffer-other-window help-buffer)))))
(use-package avy
- :ensure t
- :straight t
- :after evil
- :general
- (my-local-leader
- "d" 'dirvish)
+ :ensure t
+ :straight t
+ :after evil
+ :general
+
+ :config
+ (setq avy-all-windows t
+ avy-all-windows-alt t
+ avy-background t
+ avy-case-fold-search t
+ avy-timeout-seconds 0.3
+ avy-style 'at-full
+ avy-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?q ?w ?e ?r ?t ?y ?u ?i ?o ?p)))
- (general-def 'normal 'override
- "s" 'avy-goto-char-timer)
+;; (defun avy-action-exchange (pt)
+;; "Exchange sexp at PT with the one at point."
+;; (set-mark pt)
+;; (transpose-sexps 0))
- :config
- (setq avy-all-windows t
- avy-case-fold-search t
- avy-timeout-seconds 0.39))
+;; (add-to-list 'avy-dispatch-alist '(?e . avy-action-exchange))
(use-package evil-collection
:defer t
@@ -839,18 +880,18 @@
;; The `neotree' package provides a file tree explorer for Emacs, allowing easy navigation
;; through directories and files. It presents a visual representation of the file system
;; and integrates with version control to show file states.
-(use-package neotree
- :ensure t
- :straight t
- :custom
- (neo-show-hidden-files t) ;; By default shows hidden files (toggle with H)
- (neo-theme 'nerd) ;; Set the default theme for Neotree to 'nerd' for a visually appealing look.
- (neo-vc-integration '(face char)) ;; Enable VC integration to display file states with faces (color coding) and characters (icons).
- :defer t ;; Load the package only when needed to improve startup time.
- :config
- (if ek-use-nerd-fonts ;; Check if nerd fonts are being used.
- (setq neo-theme 'nerd-icons) ;; Set the theme to 'nerd-icons' if nerd fonts are available.
- (setq neo-theme 'nerd))) ;; Otherwise, fall back to the 'nerd' theme.
+;; (use-package neotree
+;; :ensure t
+;; :straight t
+;; :custom
+;; (neo-show-hidden-files t) ;; By default shows hidden files (toggle with H)
+;; (neo-theme 'nerd) ;; Set the default theme for Neotree to 'nerd' for a visually appealing look.
+;; (neo-vc-integration '(face char)) ;; Enable VC integration to display file states with faces (color coding) and characters (icons).
+;; :defer t ;; Load the package only when needed to improve startup time.
+;; :config
+;; (if ek-use-nerd-fonts ;; Check if nerd fonts are being used.
+;; (setq neo-theme 'nerd-icons) ;; Set the theme to 'nerd-icons' if nerd fonts are available.
+;; (setq neo-theme 'nerd))) ;; Otherwise, fall back to the 'nerd' theme.
;;; NERD ICONS
;; The `nerd-icons' package provides a set of icons for use in Emacs. These icons can
@@ -1152,8 +1193,6 @@
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
-(add-to-list 'default-frame-alist '(alpha-background . 90))
-
(use-package dirvish
:straight t
:init
@@ -1179,57 +1218,241 @@
:config
(setq dired-dwim-target t)
(setq delete-by-moving-to-trash t)
- (setq dired-mouse-drag-files t)
+ (setq dired-mouse-drag-files t))
+
+(use-package nix-mode
+ :ensure t
+ :mode "\\.nix\\'")
+
+(use-package olivetti
+ :defer t)
+
+(setq-default olivetti-body-width 95)
+(define-globalized-minor-mode my-global-olivetti-mode olivetti-mode
+ (lambda () (olivetti-mode 1)))
+(my-global-olivetti-mode)
+
+(setq ibuffer-never-show-predicates
+ '(;; System buffers
+ "^\\*Messages\\*$"
+ "^\\*scratch\\*$"
+ "^\\*Completions\\*$"
+ "^\\*Help\\*$"
+ "^\\*Apropos\\*$"
+ "^\\*info\\*$"
+ "^\\*Async-native-compile-log\\*$"
+
+ ;; LSP Buffers
+ "^\\*lsp-log\\*$"
+ "^\\*clojure-lsp\\*$"
+ "^\\*clojure-lsp::stderr\\*$"
+ "^\\*ts-ls\\*$"
+ "^\\*ts-ls::stderr\\*$"))
+
+(use-package eat
+ :ensure t
+ :defer t
+ :config
+ (when (fboundp 'eat-global-mode)
+ (eat-global-mode)
+ (setq eat-kill-buffer-on-exit t)))
+
+(use-package projectile
+ :ensure t
+ :straight t
+ :demand t
+ :config
+ (projectile-mode +1)
+ (setq projectile-completion-system 'default
+ projectile-enable-caching t
+ projectile-indexing-method 'alien
+ projectile-sort-order 'recentf
+ projectile-require-project-root nil))
+
+(use-package consult-projectile
+ :ensure t
+ :straight t
+ :after (consult projectile)
+ :config
+ (setq consult-project-function #'projectile-project-root))
+
+(my-leader
+ "sp" '(consult-ripgrep :wk "search project")
+ "/" '(consult-line :wk "search buffer")
+ "." '(find-file :wk "find file")
+ "," '(consult-buffer :wk "switch buffer")
+ "SPC" '(consult-buffer :wk "switch buffer")
+ ":" (lambda () (interactive) (execute-extended-command nil))
+
+ "f" '(:ignore t :wk "files")
+ "fd" '(dired :wk "dired")
+ "fD" '(dired-jump :wk "dired jump")
+ "fr" '(consult-recent-file :wk "recent files")
+ "ff" '(find-file :wk "find file")
+ "fs" '(save-buffer :wk "save file")
- (general-define-key
- :states 'normal
- :keymaps 'dirvish-mode-map
- "?" 'dirvish-dispatch
- "q" 'dirvish-quit
- "b" 'dirvish-quick-access
- "f" 'dirvish-file-info-menu
- "p" 'dirvish-yank
- "S" 'dirvish-quicksort
- "F" 'dirvish-layout-toggle
- "z" 'dirvish-history-jump
- "gh" 'dirvish-subtree-up
- "gl" 'dirvish-subtree-toggle
- "h" 'dired-up-directory
- "l" 'dired-find-file
- "TAB" 'dirvish-subtree-toggle)
+ "b" '(:ignore t :wk "buffers")
+ "bb" '(consult-buffer :wk "switch buffer")
+ "bi" '(ibuffer :wk "ibuffer")
+ "bd" '(kill-current-buffer :wk "kill buffer")
+ "bk" '(kill-current-buffer :wk "kill buffer")
+ "bs" '(save-buffer :wk "save buffer")
- (general-define-key
- :states '(normal visual motion)
- :keymaps 'dirvish-mode-map
- "[h" 'dirvish-history-go-backward
- "]h" 'dirvish-history-go-forward
- "[e" 'dirvish-emerge-next-group
- "]e" 'dirvish-emerge-previous-group
- "M-b" 'dirvish-history-go-backward
- "M-f" 'dirvish-history-go-forward
- "M-n" 'dirvish-narrow
- "M-m" 'dirvish-mark-menu
- "M-s" 'dirvish-setup-menu
- "M-e" 'dirvish-emerge-menu)
+ "p" '(:ignore t :wk "project")
+ "pp" '(projectile-switch-project :wk "switch project")
+ "pf" '(projectile-find-file :wk "find file")
+ "ps" '(consult-ripgrep :wk "search")
+ "pb" '(consult-projectile-buffer :wk "buffers")
+ "pk" '(projectile-kill-buffers :wk "kill buffers")
+ "pd" '(projectile-dired :wk "root dir")
+ "pr" '(projectile-recentf :wk "recent files")
+ "pa" '(projectile-add-known-project :wk "add project")
+ "pc" '(projectile-compile-project :wk "compile")
+ "pt" '(projectile-test-project :wk "test")
+ "pi" '(projectile-invalidate-cache :wk "invalidate cache")
- (general-define-key
- :states 'normal
- :keymaps 'dirvish-mode-map
- :prefix "y"
- "l" 'dirvish-copy-file-true-path
- "n" 'dirvish-copy-file-name
- "p" 'dirvish-copy-file-path
- "r" 'dirvish-copy-remote-path
- "y" 'dired-do-copy)
+ "g" '(:ignore t :wk "git")
+ "gg" '(magit-status :wk "status")
+ "gl" '(magit-log-current :wk "log")
+ "gd" '(magit-diff-buffer-file :wk "diff file")
+ "gs" '(magit-status :wk "status")
+ "gb" '(vc-annotate :wk "blame")
- (general-define-key
- :states 'normal
- :keymaps 'dirvish-mode-map
- :prefix "s"
- "s" 'dirvish-symlink
- "S" 'dirvish-relative-symlink
- "h" 'dirvish-hardlink))
+ "o" '(:ignore t :wk "open")
+ "op" '(neotree-toggle :wk "neotree")
+ "oP" '(dired-jump :wk "dired")
+ "od" '(dirvish :wk "dirvish")
+
+ "h" '(:ignore t :wk "help")
+ "hm" '(describe-mode :wk "mode")
+ "hf" '(describe-function :wk "function")
+ "hv" '(describe-variable :wk "variable")
+ "hk" '(describe-key :wk "key")
+ "y" '(:ignore t :wk "yank to kill-ring")
-(use-package nix-mode
- :ensure t
- :mode "\\.nix\\'")
+"yy" (lambda ()
+ (interactive)
+ (kill-new (buffer-substring (line-beginning-position) (line-end-position)))
+ (message "Yanked line to kill-ring"))
+"yw" (lambda ()
+ (interactive)
+ (kill-new (thing-at-point 'word))
+ (message "Yanked word to kill-ring"))
+
+ "w" '(:ignore t :wk "windows")
+ "wv" '(split-window-right :wk "split right")
+ "ws" '(split-window-below :wk "split below")
+ "wd" '(delete-window :wk "delete")
+ "wo" '(delete-other-windows :wk "delete others")
+
+ "c" '(:ignore t :wk "code")
+
+ "m" '(:ignore t :wk "mode")
+ "mp" (list (lambda ()
+ (interactive)
+ (shell-command (concat "prettier --write "
+ (shell-quote-argument (buffer-file-name))))
+ (revert-buffer t t t))
+ :wk "format prettier")
+
+ "q" '(:ignore t :wk "quit")
+ "qq" '(save-buffers-kill-terminal :wk "quit emacs")
+ "qr" '(restart-emacs :wk "restart")
+
+ "a" '(embark-act :wk "embark")
+ "u" '(undo-tree-visualize :wk "undo tree")
+"P" '(consult-yank-from-kill-ring :wk "paste history")
+
+"y" '(:ignore t :wk "yank to kill-ring")
+"yy" (lambda ()
+ (interactive)
+ (kill-new (buffer-substring (line-beginning-position) (line-end-position)))
+ (message "Yanked line to kill-ring"))
+"yw" (lambda ()
+ (interactive)
+ (kill-new (thing-at-point 'word))
+ (message "Yanked word to kill-ring"))
+
+
+ )
+
+(my-local-leader
+ "t" '(eat :wk "terminal"))
+
+(general-def 'normal 'override
+ "]d" 'flymake-goto-next-error
+ "[d" 'flymake-goto-prev-error
+ "]c" 'diff-hl-next-hunk
+ "[c" 'diff-hl-previous-hunk
+ "]b" 'switch-to-next-buffer
+ "[b" 'switch-to-prev-buffer
+ "]t" 'tab-next
+ "[t" 'tab-previous
+ "P" 'consult-yank-from-kill-ring
+ "K" (if (>= emacs-major-version 31)
+ #'eldoc-box-help-at-point
+ #'ek/lsp-describe-and-jump)
+ "gcc" (lambda ()
+ (interactive)
+ (unless (use-region-p)
+ (comment-or-uncomment-region
+ (line-beginning-position)
+ (line-end-position))))
+ )
+
+(general-def 'visual 'override
+ "gc" (lambda ()
+ (interactive)
+ (when (use-region-p)
+ (comment-or-uncomment-region
+ (region-beginning)
+ (region-end)))))
+
+(general-def '(normal visual) 'override
+ "s" (lambda ()
+ (interactive)
+ (let ((avy-all-windows t)
+ (avy-background t)
+ (scroll-margin 0)
+ (maximum-scroll-margin 0))
+ (call-interactively 'avy-goto-char-timer))))
+
+(general-def 'normal dirvish-mode-map
+ "?" 'dirvish-dispatch
+ "q" 'dirvish-quit
+ "b" 'dirvish-quick-access
+ "f" 'dirvish-file-info-menu
+ "p" 'dirvish-yank
+ "S" 'dirvish-quicksort
+ "F" 'dirvish-layout-toggle
+ "z" 'dirvish-history-jump
+ "gh" 'dirvish-subtree-up
+ "gl" 'dirvish-subtree-toggle
+ "h" 'dired-up-directory
+ "l" 'dired-find-file
+ "TAB" 'dirvish-subtree-toggle
+ "[h" 'dirvish-history-go-backward
+ "]h" 'dirvish-history-go-forward)
+
+(general-def '(normal visual) dirvish-mode-map
+ :prefix "y"
+ "l" 'dirvish-copy-file-true-path
+ "n" 'dirvish-copy-file-name
+ "p" 'dirvish-copy-file-path
+ "y" 'dired-do-copy)
+
+(general-def 'normal dirvish-mode-map
+ :prefix "s"
+ "s" 'dirvish-symlink
+ "S" 'dirvish-relative-symlink
+ "h" 'dirvish-hardlink)
+
+(my-local-leader
+ :keymaps 'org-mode-map
+ "h" '(consult-org-heading :wk "search headings"))
+
+(define-key minibuffer-local-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-ns-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-completion-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-must-match-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-isearch-map [escape] 'abort-recursive-edit)
diff --git a/config.org b/config.org
index 7df7b0a..197e505 100644
--- a/config.org
+++ b/config.org
@@ -10,8 +10,54 @@
(setq read-process-output-max (* 1024 1024 4))
(setq package-enable-at-startup nil)
+(when (boundp 'pgtk-wait-for-event-timeout)
+ (setq pgtk-wait-for-event-timeout 0.001))
+
+(setq which-func-update-delay 1.0)
+(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
+(set-language-environment "UTF-8")
+(setq locale-coding-system 'utf-8)
+(prefer-coding-system 'utf-8)
+(set-default-coding-systems 'utf-8)
+(set-terminal-coding-system 'utf-8)
+(set-keyboard-coding-system 'utf-8)
+(set-selection-coding-system 'utf-8)
+
+(setq create-lockfiles nil)
+(setq make-backup-files nil)
+
+(setq backup-directory-alist
+ `(("." . ,(expand-file-name "backup" user-emacs-directory))))
+(setq tramp-backup-directory-alist backup-directory-alist)
+
+(setq backup-by-copying-when-linked t)
+(setq backup-by-copying t) ; Backup by copying rather renaming
+(setq delete-old-versions t) ; Delete excess backup versions silently
+(setq version-control t) ; Use version numbers for backup files
+(setq kept-new-versions 5)
+(setq kept-old-versions 5)
#+end_src
+* Visual Optimizations
+
+ Let's define some visual optimizations to change the appearnce of Emacs.
+
+** Opacity
+
+ To change the appearance of Emacs, lets start with the opacity. Setting it to 90% changes Emacs to a whole new level, as the colors of your theme and your background image harmonize with each other.
+
+ #+begin_src emacs-lisp
+
+ (add-to-list 'default-frame-alist '(alpha-background . 90))
+
+ #+end_src
+
+* Small frame border
+
+ #+begin_src emacs-lisp
+ ;; (add-to-list 'default-frame-alist '(internal-border-width . 16))
+ #+end_src
+
* straight.el
#+begin_src emacs-lisp
@@ -59,7 +105,7 @@
(initial-scratch-message "") ;; Clear the initial message in the *scratch* buffer.
(ispell-dictionary "en_US") ;; Set the default dictionary for spell checking.
(make-backup-files nil) ;; Disable creation of backup files.
- (pixel-scroll-precision-mode t) ;; Enable precise pixel scrolling.
+ ;; (pixel-scroll-precision-mode t) ;; Enable precise pixel scrolling.
(pixel-scroll-precision-use-momentum nil) ;; Disable momentum scrolling for pixel precision.
(ring-bell-function 'ignore) ;; Disable the audible bell.
(split-width-threshold 300) ;; Prevent automatic window splitting if the window width exceeds 300 pixels.
@@ -264,7 +310,6 @@
* vc
#+begin_src emacs-lisp
-
(use-package vc
:straight nil
:ensure nil ;; This is built-in, no need to fetch it.
@@ -293,6 +338,10 @@
(280 . "#b4befe"))))
#+end_src
+#+begin_src emacs-lisp
+
+#+end_src
+
* smerge
#+begin_src emacs-lisp
@@ -307,7 +356,7 @@
("C-c ^ p" . smerge-previous))) ;; Move to the previous conflict.
#+end_src
-* fsf
+* eldoc
#+begin_src emacs-lisp
(use-package eldoc
@@ -338,47 +387,106 @@
* org mode
-#+begin_src emacs-lisp
-
-(use-package org
-:straight nil
- :ensure nil ;; This is built-in, no need to fetch it.
- :defer t
+ #+begin_src emacs-lisp
+ (use-package org
+ :straight nil
+ :ensure nil
+ :defer t
:config
- (require 'org-tempo))
-#+end_src
+ (require 'org-tempo)
+ (custom-set-faces
+ '(org-document-title ((t (:height 1.6))))
+ '(outline-1 ((t (:height 1.25))))
+ '(outline-2 ((t (:height 1.2))))
+ '(outline-3 ((t (:height 1.2))))
+ '(outline-4 ((t (:height 1.2))))
+ '(outline-5 ((t (:height 1.2))))
+ '(outline-6 ((t (:height 1.2))))
+ '(outline-7 ((t (:height 1.2))))
+ '(outline-8 ((t (:height 1.2))))
+ '(outline-9 ((t (:height 1.2)))))
+ (org-indent-mode -1)
+ (setq org-startup-folded 'content)
+ (setq org-adapt-indentation t
+ org-hide-leading-stars t
+ org-pretty-entities t
+ org-ellipsis " ")
+ (setq org-src-fontify-natively t
+ org-src-tab-acts-natively t
+ org-edit-src-content-indentation 0)
+ (setq org-log-done t
+ org-auto-align-tags t
+ org-tags-column -80
+ org-fold-catch-invisible-edits 'show-and-error
+ org-special-ctrl-a/e t
+ org-insert-heading-respect-content t)
+
+ ;; (my-local-leader
+ ;; )
+
+ (add-hook 'org-mode-hook 'variable-pitch-mode)
+ (add-to-list 'font-lock-extra-managed-props 'display)
+ (font-lock-add-keywords 'org-mode
+ `(("^.*?\( \)\(:[[:alnum:]_@#%:]+:\)$"
+ (1 `(face nil
+ display (space :align-to (- right ,(org-string-width (match-string 2)) 3)))
+ prepend))) t)
+ (setq org-blank-before-new-entry '((heading . nil)
+ (plain-list-item . nil))))
+ #+end_src
+
+** org-appear
+
+ #+begin_src emacs-lisp
+(use-package org-appear
+ :commands (org-appear-mode)
+ :hook (org-mode . org-appear-mode)
+ :config
+ (setq org-hide-emphasis-markers t) ;; Must be activated for org-appear to work
+ (setq org-appear-autoemphasis t ;; Show bold, italics, verbatim, etc.
+ org-appear-autolinks t ;; Show links
+ org-appear-autosubmarkers t)) ;; Show sub- and superscripts
+ #+end_src
* which-key
#+begin_src emacs-lisp
(use-package which-key
-:straight nil
- :ensure nil ;; This is built-in, no need to fetch it.
- :defer t ;; Defer loading Which-Key until after init.
- :hook
- (after-init . which-key-mode)) ;; Enable which-key mode after initialization.
-
- (setq which-key-idle-delay 0.001)
+ :straight nil
+ :ensure nil
+ :defer t
+ :hook
+ (after-init . which-key-mode)
+ :custom
+ (which-key-idle-delay 0.3))
#+end_src
+* gcmh
+ gcmh is for garbage collection
+
+ #+begin_src emacs-lisp
+(use-package gcmh
+ :config
+ (gcmh-mode 1))
+ #+end_src
+
* vertico
#+begin_src emacs-lisp
-
(use-package vertico
:ensure t
:straight t
:hook
- (after-init . vertico-mode) ;; Enable vertico after Emacs has initialized.
+ (after-init . vertico-mode)
:custom
- (vertico-count 10) ;; Number of candidates to display in the completion list.
- (vertico-resize nil) ;; Disable resizing of the vertico minibuffer.
- (vertico-cycle nil) ;; Do not cycle through candidates when reaching the end of the list.
+ (vertico-count 10)
+ (vertico-resize nil)
+ (vertico-cycle nil)
+ :bind (:map vertico-map
+ ("C-j" . vertico-next)
+ ("C-k" . vertico-previous))
:config
- ;; Customize the display of the current candidate in the completion list.
- ;; This will prefix the current candidate with “» ” to make it stand out.
- ;; Reference: https://github.com/minad/vertico/wiki#prefix-current-candidate-with-arrow
(advice-add #'vertico--format-candidate :around
(lambda (orig cand prefix suffix index _start)
(setq cand (funcall orig cand prefix suffix index _start))
@@ -389,7 +497,24 @@
cand))))
#+end_src
-* missed packages
+** vertico-posframe
+
+ #+begin_src emacs-lisp
+(use-package vertico-posframe
+ :init
+ (setq vertico-posframe-parameters '((left-fringe . 12) ;; Fringes
+ (right-fringe . 12)
+ (undecorated . nil))) ;; Rounded frame
+ :config
+ (vertico-posframe-mode 1)
+ (setq vertico-posframe-width 96 ;; Narrow frame
+ vertico-posframe-height vertico-count ;; Default height
+ ;; Don't create posframe for these commands
+ vertico-multiform-commands '((consult-line (:not posframe))
+ (consult-ripgrep (:not posframe)))))
+ #+end_src
+
+* consult
#+begin_src emacs-lisp
;;; CONSULT
@@ -402,12 +527,27 @@
:straight t
:defer t
:init
- ;; Enhance register preview with thin lines and no mode line.
(advice-add #'register-preview :override #'consult-register-window)
- ;; Use Consult for xref locations with a preview feature.
(setq xref-show-xrefs-function #'consult-xref
- xref-show-definitions-function #'consult-xref))
+ xref-show-definitions-function #'consult-xref)
+
+ :config
+ (setq consult-buffer-filter
+ '("\\` "
+ "\\`\\*Messages\\*\\'"
+ "\\`\\*Warnings\\*\\'"
+ "\\`\\*Compile-Log\\*\\'"
+ "\\`\\*Backtrace\\*\\'"
+ "\\`\\*Help\\*\\'"
+ "\\`\\*scratch\\*\\'"
+ "\\`\\*Completions\\*\\'"
+ "\\`\\*Flymake"
+ "\\`\\*lsp-help\\*\\'"
+ "\\`\\*eldoc"
+ "\\`\\*straight-process\\*\\'"
+ "\\`\\*Native-compile-Log\\*\\'"
+ "\\`\\*Async-native-compile-log\\*\\'")))
#+end_src
* markdown-mode
@@ -426,7 +566,7 @@
:init (setq markdown-command "multimarkdown")) ;; Set the Markdown processing command.
#+end_src
-* fsdf
+* consult
#+begin_src emacs-lisp
(use-package corfu
@@ -544,84 +684,95 @@
* lsp
#+begin_src emacs-lisp
- (use-package lsp-mode
- :ensure t
- :straight t
- :defer t
- :hook (;; Replace XXX-mode with concrete major mode (e.g. python-mode)
- (lsp-mode . lsp-enable-which-key-integration) ;; Integrate with Which Key
- ((js-mode ;; Enable LSP for JavaScript
- tsx-ts-mode ;; Enable LSP for TSX
- typescript-ts-base-mode ;; Enable LSP for TypeScript
- css-mode ;; Enable LSP for CSS
- go-ts-mode ;; Enable LSP for Go
- js-ts-mode ;; Enable LSP for JavaScript (TS mode)
- prisma-mode ;; Enable LSP for Prisma
- python-base-mode ;; Enable LSP for Python
- ruby-base-mode ;; Enable LSP for Ruby
- rust-ts-mode ;; Enable LSP for Rust
- nix-mode
- web-mode) . lsp-deferred)) ;; Enable LSP for Web (HTML)
- :commands lsp
- :custom
- (lsp-keymap-prefix "C-c l") ;; Set the prefix for LSP commands.
- (lsp-inlay-hint-enable nil) ;; Usage of inlay hints.
- (lsp-completion-provider :none) ;; Disable the default completion provider.
- (lsp-session-file (locate-user-emacs-file ".lsp-session")) ;; Specify session file location.
- (lsp-log-io nil) ;; Disable IO logging for speed.
- (lsp-idle-delay 0.5) ;; Set the delay for LSP to 0 (debouncing).
- (lsp-keep-workspace-alive nil) ;; Disable keeping the workspace alive.
- ;; Core settings
- (lsp-enable-xref t) ;; Enable cross-references.
- (lsp-auto-configure t) ;; Automatically configure LSP.
- (lsp-enable-links nil) ;; Disable links.
- (lsp-eldoc-enable-hover t) ;; Enable ElDoc hover.
- (lsp-enable-file-watchers nil) ;; Disable file watchers.
- (lsp-enable-folding nil) ;; Disable folding.
- (lsp-enable-imenu t) ;; Enable Imenu support.
- (lsp-enable-indentation nil) ;; Disable indentation.
- (lsp-enable-on-type-formatting nil) ;; Disable on-type formatting.
- (lsp-enable-suggest-server-download t) ;; Enable server download suggestion.
- (lsp-enable-symbol-highlighting t) ;; Enable symbol highlighting.
- (lsp-enable-text-document-color t) ;; Enable text document color.
- ;; Modeline settings
- (lsp-modeline-code-actions-enable nil) ;; Keep modeline clean.
- (lsp-modeline-diagnostics-enable nil) ;; Use `flymake' instead.
- (lsp-modeline-workspace-status-enable t) ;; Display "LSP" in the modeline when enabled.
- (lsp-signature-doc-lines 1) ;; Limit echo area to one line.
- (lsp-eldoc-render-all t) ;; Render all ElDoc messages.
- ;; Completion settings
- (lsp-completion-enable t) ;; Enable completion.
- (lsp-completion-enable-additional-text-edit t) ;; Enable additional text edits for completions.
- (lsp-enable-snippet nil) ;; Disable snippets
- (lsp-completion-show-kind t) ;; Show kind in completions.
- ;; Lens settings
- (lsp-lens-enable t) ;; Enable lens support.
- ;; Headerline settings
- (lsp-headerline-breadcrumb-enable-symbol-numbers t) ;; Enable symbol numbers in the headerline.
- (lsp-headerline-arrow "▶") ;; Set arrow for headerline.
- (lsp-headerline-breadcrumb-enable-diagnostics nil) ;; Disable diagnostics in headerline.
- (lsp-headerline-breadcrumb-icons-enable nil) ;; Disable icons in breadcrumb.
- ;; Semantic settings
- (lsp-semantic-tokens-enable nil)) ;; Disable semantic tokens.
+(use-package lsp-mode
+ :ensure t
+ :straight t
+ :defer t
+ :hook (;; Replace XXX-mode with concrete major mode (e.g. python-mode)
+ (lsp-mode . lsp-enable-which-key-integration) ;; Integrate with Which Key
+ ((js-mode ;; Enable LSP for JavaScript
+ tsx-ts-mode ;; Enable LSP for TSX
+ typescript-ts-base-mode ;; Enable LSP for TypeScript
+ css-mode ;; Enable LSP for CSS
+ go-ts-mode ;; Enable LSP for Go
+ js-ts-mode ;; Enable LSP for JavaScript (TS mode)
+ prisma-mode ;; Enable LSP for Prisma
+ python-base-mode ;; Enable LSP for Python
+ ruby-base-mode ;; Enable LSP for Ruby
+ rust-ts-mode ;; Enable LSP for Rust
+ nix-mode
+ web-mode) . lsp-deferred)) ;; Enable LSP for Web (HTML)
+ :commands lsp
+ :custom
+ (lsp-keymap-prefix "C-c l") ;; Set the prefix for LSP commands.
+ (lsp-inlay-hint-enable nil) ;; Usage of inlay hints.
+ (lsp-completion-provider :none) ;; Disable the default completion provider.
+ (lsp-session-file (locate-user-emacs-file ".lsp-session")) ;; Specify session file location.
+ (lsp-log-io nil) ;; Disable IO logging for speed.
+ (lsp-idle-delay 0.5) ;; Set the delay for LSP to 0 (debouncing).
+ (lsp-keep-workspace-alive nil) ;; Disable keeping the workspace alive.
+ ;; Core settings
+ (lsp-enable-xref t) ;; Enable cross-references.
+ (lsp-auto-configure t) ;; Automatically configure LSP.
+ (lsp-enable-links nil) ;; Disable links.
+ (lsp-eldoc-enable-hover nil) ;; Enable ElDoc hover.
+ (lsp-modeline-diagnostics-enable nil)
+ (lsp-signature-auto-activate nil)
+ (lsp-signature-render-documentation nil)
+ (lsp-enable-file-watchers nil) ;; Disable file watchers.
+ (lsp-enable-folding nil) ;; Disable folding.
+ (lsp-enable-imenu t) ;; Enable Imenu support.
+ (lsp-enable-indentation nil) ;; Disable indentation.
+ (lsp-enable-on-type-formatting nil) ;; Disable on-type formatting.
+ (lsp-enable-suggest-server-download t) ;; Enable server download suggestion.
+ (lsp-enable-symbol-highlighting nil) ;; Enable symbol highlighting.
+ (lsp-enable-text-document-color t) ;; Enable text document color.
+ ;; Modeline settings
+ (lsp-modeline-code-actions-enable nil) ;; Keep modeline clean.
+ (lsp-modeline-diagnostics-enable nil) ;; Use `flymake' instead.
+ (lsp-modeline-workspace-status-enable t) ;; Display "LSP" in the modeline when enabled.
+ (lsp-signature-doc-lines nil) ;; Limit echo area to one line.
+ (lsp-eldoc-render-all t) ;; Render all ElDoc messages.
+ ;; Completion settings
+ (lsp-completion-enable t) ;; Enable completion.
+ (lsp-completion-enable-additional-text-edit t) ;; Enable additional text edits for completions.
+ (lsp-enable-snippet nil) ;; Disable snippets
+ (lsp-completion-show-kind t) ;; Show kind in completions.
+ ;; Lens settings
+ (lsp-lens-enable t) ;; Enable lens support.
+ ;; Headerline settings
+ (lsp-headerline-breadcrumb-enable-symbol-numbers nil) ;; Enable symbol numbers in the headerline.
+ (lsp-headerline-arrow "▶") ;; Set arrow for headerline.
+ (lsp-headerline-breadcrumb-enable-diagnostics nil) ;; Disable diagnostics in headerline.
+ (lsp-headerline-breadcrumb-icons-enable nil) ;; Disable icons in breadcrumb.
+ ;; Semantic settings
+ (lsp-semantic-tokens-enable nil)) ;; Disable semantic tokens.
- ;;; LSP Additional Servers
- ;; You can extend `lsp-mode' by integrating additional language servers for specific
- ;; technologies. For example, `lsp-tailwindcss' provides support for Tailwind CSS
- ;; classes within your HTML files. By using various LSP packages, you can connect
- ;; multiple LSP servers simultaneously, enhancing your coding experience across
- ;; different languages and frameworks.
- (use-package lsp-tailwindcss
- :ensure t
- :straight t
- :defer t
- :config
- (add-to-list 'lsp-language-id-configuration '(".*\\.erb$" . "html")) ;; Associate ERB files with HTML.
- :init
- (setq lsp-tailwindcss-add-on-mode t))
+ ;;; LSP Additional Servers
+ ;; You can extend `lsp-mode' by integrating additional language servers for specific
+ ;; technologies. For example, `lsp-tailwindcss' provides support for Tailwind CSS
+ ;; classes within your HTML files. By using various LSP packages, you can connect
+ ;; multiple LSP servers simultaneously, enhancing your coding experience across
+ ;; different languages and frameworks.
+ (use-package lsp-tailwindcss
+ :ensure t
+ :straight t
+ :defer t
+ :config
+ (add-to-list 'lsp-language-id-configuration '(".*\\.erb$" . "html")) ;; Associate ERB files with HTML.
+ :init
+ (setq lsp-tailwindcss-add-on-mode t))
#+end_src
+** emacs-lsp-booster
+
+ #+begin_src emacs-lisp
+ #+end_src
+
+ #+begin_src emacs-lisp
+ #+end_src
+
* eldoc
#+begin_src emacs-lisp
@@ -725,152 +876,80 @@
* evil
#+begin_src emacs-lisp
+(use-package evil
+ :ensure t
+ :straight t
+ :after general
+ :init
+ (setq evil-want-integration t
+ evil-want-keybinding nil
+ evil-want-C-u-scroll t
+ evil-want-C-u-delete t
+ evil-want-C-i-jump nil)
+
+ :config
+ (evil-set-undo-system 'undo-tree)
+ (setq evil-leader/in-all-states t
+ evil-want-fine-undo t)
+
+ (evil-mode 1)
+
+ (define-key evil-normal-state-map (kbd "SPC") nil)
+ (define-key evil-motion-state-map (kbd "SPC") nil)
+ (define-key evil-normal-state-map (kbd ",") nil)
+ (define-key evil-visual-state-map (kbd ",") nil)
+ (define-key evil-motion-state-map (kbd ",") nil)
+
+ (setq evil-kill-on-visual-paste nil)
+
+ (defun my/evil-no-kill-ring (orig-fn beg end &optional type register yank-handler)
+ (let ((register (or register ?_)))
+ (funcall orig-fn beg end type register yank-handler)))
- (use-package evil
- :ensure t
- :straight t
- :init
- (setq evil-want-integration t
- evil-want-keybinding nil
- evil-want-C-u-scroll t
- evil-want-C-u-delete t)
- :config
- (evil-set-undo-system 'undo-tree)
- (setq evil-leader/in-all-states t
- evil-want-fine-undo t)
-
- (my-leader
- "sp" 'consult-ripgrep
- "/" 'consult-line
- "." 'find-file
- "," 'consult-buffer
- "SPC" 'consult-buffer
- ":" (lambda () (interactive) (execute-extended-command nil))
-
- "f" '(:ignore t :wk "file")
- "fd" 'dired
- "fD" 'dired-jump
- "fr" 'consult-buffer
- "ff" 'find-file
- "fs" 'save-buffer
-
- "b" '(:ignore t :wk "buffer")
- "bb" 'consult-buffer
- "bi" 'ibuffer
- "bd" 'kill-current-buffer
- "bk" 'kill-current-buffer
- "bx" 'kill-current-buffer
- "bs" 'save-buffer
-
- "p" '(:ignore t :wk "project")
- "pb" 'consult-project-buffer
- "pp" 'project-switch-project
- "pf" 'project-find-file
- "ps" 'project-find-regexp
- "pk" 'project-kill-buffers
- "pd" 'project-dired
-
- "g" '(:ignore t :wk "git")
- "gg" 'magit-status
- "gl" 'magit-log-current
- "gd" 'magit-diff-buffer-file
- "gs" 'magit-status
- "gb" 'vc-annotate
-
- "o" '(:ignore t :wk "open")
- "op" 'neotree-toggle
- "oP" 'dired-jump
-
- "h" '(:ignore t :wk "help")
- "hm" 'describe-mode
- "hf" 'describe-function
- "hv" 'describe-variable
- "hk" 'describe-key
-
- "w" '(:ignore t :wk "window")
- "wv" 'split-window-right
- "ws" 'split-window-below
- "wd" 'delete-window
- "wo" 'delete-other-windows
-
- "c" '(:ignore t :wk "code")
-
- "m" '(:ignore t :wk "mode")
- "mp" (lambda ()
- (interactive)
- (shell-command (concat "prettier --write "
- (shell-quote-argument (buffer-file-name))))
- (revert-buffer t t t))
-
- "q" '(:ignore t :wk "quit")
- "qq" 'save-buffers-kill-terminal
-
- "a" 'embark-act
- "u" 'undo-tree-visualize
- "P" 'consult-yank-from-kill-ring)
-
- (general-def 'normal 'override
- "]d" 'flymake-goto-next-error
- "[d" 'flymake-goto-prev-error
- "]c" 'diff-hl-next-hunk
- "[c" 'diff-hl-previous-hunk
- "]b" 'switch-to-next-buffer
- "[b" 'switch-to-prev-buffer
- "]t" 'tab-next
- "[t" 'tab-previous
- "P" 'consult-yank-from-kill-ring
- "K" (if (>= emacs-major-version 31)
- #'eldoc-box-help-at-point
- #'ek/lsp-describe-and-jump)
- "gcc" (lambda ()
- (interactive)
- (unless (use-region-p)
- (comment-or-uncomment-region
- (line-beginning-position)
- (line-end-position)))))
-
- (general-def 'visual 'override
- "gc" (lambda ()
- (interactive)
- (when (use-region-p)
- (comment-or-uncomment-region
- (region-beginning)
- (region-end)))))
-
- (defun ek/lsp-describe-and-jump ()
- (interactive)
- (lsp-describe-thing-at-point)
- (let ((help-buffer "*lsp-help*"))
- (when (get-buffer help-buffer)
- (switch-to-buffer-other-window help-buffer))))
-
- (evil-mode 1))
- (define-key minibuffer-local-map [escape] 'abort-recursive-edit)
- (define-key minibuffer-local-ns-map [escape] 'abort-recursive-edit)
- (define-key minibuffer-local-completion-map [escape] 'abort-recursive-edit)
- (define-key minibuffer-local-must-match-map [escape] 'abort-recursive-edit)
- (define-key minibuffer-local-isearch-map [escape] 'abort-recursive-edit)
+ (advice-add 'evil-yank :around #'my/evil-no-kill-ring)
+ (advice-add 'evil-delete :around #'my/evil-no-kill-ring)
+ (advice-add 'evil-change :around #'my/evil-no-kill-ring)
+
+ (defun ek/lsp-describe-and-jump ()
+ (interactive)
+ (lsp-describe-thing-at-point)
+ (let ((help-buffer "*lsp-help*"))
+ (when (get-buffer help-buffer)
+ (switch-to-buffer-other-window help-buffer)))))
#+end_src
* avy
#+begin_src emacs-lisp
- (use-package avy
- :ensure t
- :straight t
- :after evil
- :general
- (my-local-leader
- "d" 'dirvish)
+(use-package avy
+ :ensure t
+ :straight t
+ :after evil
+ :general
+
+ :config
+ (setq avy-all-windows t
+ avy-all-windows-alt t
+ avy-background t
+ avy-case-fold-search t
+ avy-timeout-seconds 0.3
+ avy-style 'at-full
+ avy-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?q ?w ?e ?r ?t ?y ?u ?i ?o ?p)))
+#+end_src
- (general-def 'normal 'override
- "s" 'avy-goto-char-timer)
- :config
- (setq avy-all-windows t
- avy-case-fold-search t
- avy-timeout-seconds 0.39))
-#+end_src
+
+** avy flash behaviour
+
+ #+begin_src emacs-lisp
+ ;; (defun avy-action-exchange (pt)
+ ;; "Exchange sexp at PT with the one at point."
+ ;; (set-mark pt)
+ ;; (transpose-sexps 0))
+
+ ;; (add-to-list 'avy-dispatch-alist '(?e . avy-action-exchange))
+
+ #+end_src
* evil packages
@@ -929,7 +1008,7 @@
(setq undo-tree-history-directory-alist '(("." . "~/.emacs.d/.cache/undo"))))
#+end_src
-* f
+* Rainbow Delimiter
#+begin_src emacs-lisp
(use-package rainbow-delimiters
@@ -951,7 +1030,7 @@
:config)
#+end_src
-* TODO pulsar
+* pulsar /disabled/
#+begin_src emacs-lisp
(use-package pulsar
@@ -978,7 +1057,8 @@
(add-to-list 'pulsar-pulse-functions 'diff-hl-previous-hunk))
#+end_src
-* TODO doom modeline
+
+* doom modeline /disabled/
#+begin_src emacs-lisp
;;; DOOM MODELINE
@@ -1018,22 +1098,22 @@
* TODO Neotree
#+begin_src emacs-lisp
- ;;; NEOTREE
- ;; The `neotree' package provides a file tree explorer for Emacs, allowing easy navigation
- ;; through directories and files. It presents a visual representation of the file system
- ;; and integrates with version control to show file states.
- (use-package neotree
- :ensure t
- :straight t
- :custom
- (neo-show-hidden-files t) ;; By default shows hidden files (toggle with H)
- (neo-theme 'nerd) ;; Set the default theme for Neotree to 'nerd' for a visually appealing look.
- (neo-vc-integration '(face char)) ;; Enable VC integration to display file states with faces (color coding) and characters (icons).
- :defer t ;; Load the package only when needed to improve startup time.
- :config
- (if ek-use-nerd-fonts ;; Check if nerd fonts are being used.
- (setq neo-theme 'nerd-icons) ;; Set the theme to 'nerd-icons' if nerd fonts are available.
- (setq neo-theme 'nerd))) ;; Otherwise, fall back to the 'nerd' theme.
+;;; NEOTREE
+;; The `neotree' package provides a file tree explorer for Emacs, allowing easy navigation
+;; through directories and files. It presents a visual representation of the file system
+;; and integrates with version control to show file states.
+;; (use-package neotree
+;; :ensure t
+;; :straight t
+;; :custom
+;; (neo-show-hidden-files t) ;; By default shows hidden files (toggle with H)
+;; (neo-theme 'nerd) ;; Set the default theme for Neotree to 'nerd' for a visually appealing look.
+;; (neo-vc-integration '(face char)) ;; Enable VC integration to display file states with faces (color coding) and characters (icons).
+;; :defer t ;; Load the package only when needed to improve startup time.
+;; :config
+;; (if ek-use-nerd-fonts ;; Check if nerd fonts are being used.
+;; (setq neo-theme 'nerd-icons) ;; Set the theme to 'nerd-icons' if nerd fonts are available.
+;; (setq neo-theme 'nerd))) ;; Otherwise, fall back to the 'nerd' theme.
#+end_src
* nerd-icons
@@ -1380,9 +1460,7 @@ The Modeline itself with Battery and Time on the right, Line:Column after VC on
(LaTeX-mode . mixed-pitch-mode)))
#+end_src
-**
-
-* evil-org
+* autothemer
#+begin_src emacs-lisp
(use-package autothemer
@@ -1390,7 +1468,7 @@ The Modeline itself with Battery and Time on the right, Line:Column after VC on
:defer t)
#+end_src
-** themes
+* doom-themes
#+begin_src emacs-lisp
(use-package doom-themes
@@ -1415,15 +1493,7 @@ The Modeline itself with Battery and Time on the right, Line:Column after VC on
(doom-themes-org-config))
#+end_src
-** opacity
-
-#+begin_src emacs-lisp
-
-(add-to-list 'default-frame-alist '(alpha-background . 90))
-
-#+end_src
-
-** dirvish
+* dirvish
#+begin_src emacs-lisp
(use-package dirvish
@@ -1451,62 +1521,308 @@ The Modeline itself with Battery and Time on the right, Line:Column after VC on
:config
(setq dired-dwim-target t)
(setq delete-by-moving-to-trash t)
- (setq dired-mouse-drag-files t)
+ (setq dired-mouse-drag-files t))
+#+end_src
+
+* nix-mode
+
+#+begin_src emacs-lisp
+ (use-package nix-mode
+ :ensure t
+ :mode "\\.nix\\'")
+#+end_src
+
+** olivetti
+
+#+begin_src emacs-lisp
+ (use-package olivetti
+ :defer t)
+#+end_src
+
+* olivetti global mode
+
+#+begin_src emacs-lisp :tangle yes
+(setq-default olivetti-body-width 95)
+(define-globalized-minor-mode my-global-olivetti-mode olivetti-mode
+ (lambda () (olivetti-mode 1)))
+(my-global-olivetti-mode)
+#+end_src
+
+* declutter
+
+** ibuffer
+
+ #+begin_src emacs-lisp
+(setq ibuffer-never-show-predicates
+ '(;; System buffers
+ "^\\*Messages\\*$"
+ "^\\*scratch\\*$"
+ "^\\*Completions\\*$"
+ "^\\*Help\\*$"
+ "^\\*Apropos\\*$"
+ "^\\*info\\*$"
+ "^\\*Async-native-compile-log\\*$"
+
+ ;; LSP Buffers
+ "^\\*lsp-log\\*$"
+ "^\\*clojure-lsp\\*$"
+ "^\\*clojure-lsp::stderr\\*$"
+ "^\\*ts-ls\\*$"
+ "^\\*ts-ls::stderr\\*$"))
+ #+end_src
+
+* eat
+
+ #+begin_src emacs-lisp
+ (use-package eat
+ :ensure t
+ :defer t
+ :config
+ (when (fboundp 'eat-global-mode)
+ (eat-global-mode)
+ (setq eat-kill-buffer-on-exit t)))
+ #+end_src
+
+* projectile
+
+ #+begin_src emacs-lisp
+(use-package projectile
+ :ensure t
+ :straight t
+ :demand t
+ :config
+ (projectile-mode +1)
+ (setq projectile-completion-system 'default
+ projectile-enable-caching t
+ projectile-indexing-method 'alien
+ projectile-sort-order 'recentf
+ projectile-require-project-root nil))
+ #+end_src
+
+** consult-projectile
+
+ #+begin_src emacs-lisp
+(use-package consult-projectile
+ :ensure t
+ :straight t
+ :after (consult projectile)
+ :config
+ (setq consult-project-function #'projectile-project-root))
+ #+end_src
+
+* keybindings
- (general-define-key
- :states 'normal
- :keymaps 'dirvish-mode-map
- "?" 'dirvish-dispatch
- "q" 'dirvish-quit
- "b" 'dirvish-quick-access
- "f" 'dirvish-file-info-menu
- "p" 'dirvish-yank
- "S" 'dirvish-quicksort
- "F" 'dirvish-layout-toggle
- "z" 'dirvish-history-jump
- "gh" 'dirvish-subtree-up
- "gl" 'dirvish-subtree-toggle
- "h" 'dired-up-directory
- "l" 'dired-find-file
- "TAB" 'dirvish-subtree-toggle)
+** global leader (SPC)
+
+#+begin_src emacs-lisp
+(my-leader
+ "sp" '(consult-ripgrep :wk "search project")
+ "/" '(consult-line :wk "search buffer")
+ "." '(find-file :wk "find file")
+ "," '(consult-buffer :wk "switch buffer")
+ "SPC" '(consult-buffer :wk "switch buffer")
+ ":" (lambda () (interactive) (execute-extended-command nil))
+
+ "f" '(:ignore t :wk "files")
+ "fd" '(dired :wk "dired")
+ "fD" '(dired-jump :wk "dired jump")
+ "fr" '(consult-recent-file :wk "recent files")
+ "ff" '(find-file :wk "find file")
+ "fs" '(save-buffer :wk "save file")
+
+ "b" '(:ignore t :wk "buffers")
+ "bb" '(consult-buffer :wk "switch buffer")
+ "bi" '(ibuffer :wk "ibuffer")
+ "bd" '(kill-current-buffer :wk "kill buffer")
+ "bk" '(kill-current-buffer :wk "kill buffer")
+ "bs" '(save-buffer :wk "save buffer")
+
+ "p" '(:ignore t :wk "project")
+ "pp" '(projectile-switch-project :wk "switch project")
+ "pf" '(projectile-find-file :wk "find file")
+ "ps" '(consult-ripgrep :wk "search")
+ "pb" '(consult-projectile-buffer :wk "buffers")
+ "pk" '(projectile-kill-buffers :wk "kill buffers")
+ "pd" '(projectile-dired :wk "root dir")
+ "pr" '(projectile-recentf :wk "recent files")
+ "pa" '(projectile-add-known-project :wk "add project")
+ "pc" '(projectile-compile-project :wk "compile")
+ "pt" '(projectile-test-project :wk "test")
+ "pi" '(projectile-invalidate-cache :wk "invalidate cache")
+
+ "g" '(:ignore t :wk "git")
+ "gg" '(magit-status :wk "status")
+ "gl" '(magit-log-current :wk "log")
+ "gd" '(magit-diff-buffer-file :wk "diff file")
+ "gs" '(magit-status :wk "status")
+ "gb" '(vc-annotate :wk "blame")
+
+ "o" '(:ignore t :wk "open")
+ "op" '(neotree-toggle :wk "neotree")
+ "oP" '(dired-jump :wk "dired")
+ "od" '(dirvish :wk "dirvish")
- (general-define-key
- :states '(normal visual motion)
- :keymaps 'dirvish-mode-map
- "[h" 'dirvish-history-go-backward
- "]h" 'dirvish-history-go-forward
- "[e" 'dirvish-emerge-next-group
- "]e" 'dirvish-emerge-previous-group
- "M-b" 'dirvish-history-go-backward
- "M-f" 'dirvish-history-go-forward
- "M-n" 'dirvish-narrow
- "M-m" 'dirvish-mark-menu
- "M-s" 'dirvish-setup-menu
- "M-e" 'dirvish-emerge-menu)
+ "h" '(:ignore t :wk "help")
+ "hm" '(describe-mode :wk "mode")
+ "hf" '(describe-function :wk "function")
+ "hv" '(describe-variable :wk "variable")
+ "hk" '(describe-key :wk "key")
+ "y" '(:ignore t :wk "yank to kill-ring")
+
+"yy" (lambda ()
+ (interactive)
+ (kill-new (buffer-substring (line-beginning-position) (line-end-position)))
+ (message "Yanked line to kill-ring"))
+"yw" (lambda ()
+ (interactive)
+ (kill-new (thing-at-point 'word))
+ (message "Yanked word to kill-ring"))
+
+ "w" '(:ignore t :wk "windows")
+ "wv" '(split-window-right :wk "split right")
+ "ws" '(split-window-below :wk "split below")
+ "wd" '(delete-window :wk "delete")
+ "wo" '(delete-other-windows :wk "delete others")
+
+ "c" '(:ignore t :wk "code")
- (general-define-key
- :states 'normal
- :keymaps 'dirvish-mode-map
- :prefix "y"
- "l" 'dirvish-copy-file-true-path
- "n" 'dirvish-copy-file-name
- "p" 'dirvish-copy-file-path
- "r" 'dirvish-copy-remote-path
- "y" 'dired-do-copy)
+ "m" '(:ignore t :wk "mode")
+ "mp" (list (lambda ()
+ (interactive)
+ (shell-command (concat "prettier --write "
+ (shell-quote-argument (buffer-file-name))))
+ (revert-buffer t t t))
+ :wk "format prettier")
- (general-define-key
- :states 'normal
- :keymaps 'dirvish-mode-map
- :prefix "s"
- "s" 'dirvish-symlink
- "S" 'dirvish-relative-symlink
- "h" 'dirvish-hardlink))
+ "q" '(:ignore t :wk "quit")
+ "qq" '(save-buffers-kill-terminal :wk "quit emacs")
+ "qr" '(restart-emacs :wk "restart")
+
+ "a" '(embark-act :wk "embark")
+ "u" '(undo-tree-visualize :wk "undo tree")
+"P" '(consult-yank-from-kill-ring :wk "paste history")
+
+"y" '(:ignore t :wk "yank to kill-ring")
+"yy" (lambda ()
+ (interactive)
+ (kill-new (buffer-substring (line-beginning-position) (line-end-position)))
+ (message "Yanked line to kill-ring"))
+"yw" (lambda ()
+ (interactive)
+ (kill-new (thing-at-point 'word))
+ (message "Yanked word to kill-ring"))
+
+
+ )
#+end_src
-** nix-mode
+** local leader (,)
#+begin_src emacs-lisp
- (use-package nix-mode
- :ensure t
- :mode "\\.nix\\'")
+(my-local-leader
+ "t" '(eat :wk "terminal"))
#+end_src
+
+** normal state
+
+#+begin_src emacs-lisp
+(general-def 'normal 'override
+ "]d" 'flymake-goto-next-error
+ "[d" 'flymake-goto-prev-error
+ "]c" 'diff-hl-next-hunk
+ "[c" 'diff-hl-previous-hunk
+ "]b" 'switch-to-next-buffer
+ "[b" 'switch-to-prev-buffer
+ "]t" 'tab-next
+ "[t" 'tab-previous
+ "P" 'consult-yank-from-kill-ring
+ "K" (if (>= emacs-major-version 31)
+ #'eldoc-box-help-at-point
+ #'ek/lsp-describe-and-jump)
+ "gcc" (lambda ()
+ (interactive)
+ (unless (use-region-p)
+ (comment-or-uncomment-region
+ (line-beginning-position)
+ (line-end-position))))
+ )
+#+end_src
+
+** visual state
+
+#+begin_src emacs-lisp
+(general-def 'visual 'override
+ "gc" (lambda ()
+ (interactive)
+ (when (use-region-p)
+ (comment-or-uncomment-region
+ (region-beginning)
+ (region-end)))))
+#+end_src
+
+** avy
+
+#+begin_src emacs-lisp
+(general-def '(normal visual) 'override
+ "s" (lambda ()
+ (interactive)
+ (let ((avy-all-windows t)
+ (avy-background t)
+ (scroll-margin 0)
+ (maximum-scroll-margin 0))
+ (call-interactively 'avy-goto-char-timer))))
+#+end_src
+
+** dirvish
+
+#+begin_src emacs-lisp
+(general-def 'normal dirvish-mode-map
+ "?" 'dirvish-dispatch
+ "q" 'dirvish-quit
+ "b" 'dirvish-quick-access
+ "f" 'dirvish-file-info-menu
+ "p" 'dirvish-yank
+ "S" 'dirvish-quicksort
+ "F" 'dirvish-layout-toggle
+ "z" 'dirvish-history-jump
+ "gh" 'dirvish-subtree-up
+ "gl" 'dirvish-subtree-toggle
+ "h" 'dired-up-directory
+ "l" 'dired-find-file
+ "TAB" 'dirvish-subtree-toggle
+ "[h" 'dirvish-history-go-backward
+ "]h" 'dirvish-history-go-forward)
+
+(general-def '(normal visual) dirvish-mode-map
+ :prefix "y"
+ "l" 'dirvish-copy-file-true-path
+ "n" 'dirvish-copy-file-name
+ "p" 'dirvish-copy-file-path
+ "y" 'dired-do-copy)
+
+(general-def 'normal dirvish-mode-map
+ :prefix "s"
+ "s" 'dirvish-symlink
+ "S" 'dirvish-relative-symlink
+ "h" 'dirvish-hardlink)
+#+end_src
+
+** org-mode
+
+#+begin_src emacs-lisp
+(my-local-leader
+ :keymaps 'org-mode-map
+ "h" '(consult-org-heading :wk "search headings"))
+#+end_src
+
+** minibuffer
+
+#+begin_src emacs-lisp
+(define-key minibuffer-local-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-ns-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-completion-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-must-match-map [escape] 'abort-recursive-edit)
+(define-key minibuffer-local-isearch-map [escape] 'abort-recursive-edit)
+#+end_src
+
+