This commit is contained in:
Andrea Ciceri 2023-07-24 23:58:40 +02:00
parent 07fe428594
commit b77ffa4fe3
No known key found for this signature in database
2 changed files with 242 additions and 340 deletions

565
init.el
View file

@ -1,4 +1,4 @@
;; package --- Summary
;; package --- My Emacs config
;;; Commentary:
;; TODO
;; - use-package is part of vim now, let's use it instead of setup.el!
@ -11,310 +11,83 @@
;;; Code:
(require 'setup)
(setup eglot
(:with-mode eglot--managed-mode (:hook flymake-mode)))
(setup flymake
(push `(before-string . ,(propertize "E" 'display '((margin left-margin) "E"))) (get :error 'flymake-overlay-control))
(use-package flymake
:config
(push `(bzefore-string . ,(propertize "E" 'display '((margin left-margin) "E"))) (get :error 'flymake-overlay-control))
(push `(before-string . ,(propertize "W" 'display '((margin left-margin) "W"))) (get :warning 'flymake-overlay-control))
(push `(before-string . ,(propertize "N" 'display '((margin left-margin) "N"))) (get :note 'flymake-overlay-control))
(push '(priority . 1098) (get :error 'flymake-overlay-control))
(push '(priority . 1099) (get :warning 'flymake-overlay-control))
(push '(priority . 1100) (get :note 'flymake-overlay-control))
(:hook-into prog-mode))
:hook prog-mode)
(setup sideline
(:with-mode flymake-mode (:hook sideline-mode))
(:option sideline-flymake-display-mode 'line
sideline-backends-right '(sideline-flymake)))
(setup emacs
(:option use-dialog-box nil
use-short-answers t
native-comp-async-report-warnings-errors nil
inhibit-startup-message t
visible-bell t
scroll-conservatively 101 ;; more than 100 => redisplay doesn't recenter point
scroll-margin 3
temporary-file-directory "~/.emacs-saves/"
backup-directory-alist `(("." . ,temporary-file-directory))
auto-save-files-name-transforms `((".*" ,temporary-file-directory t))
backup-by-copying t)
(use-package emacs
:bind (("<mouse-4>" . scroll-down-line)
("<mouse-5>" . scroll-up-line))
:hook (server-after-make-frame . (lambda () (xterm-mouse-mode +1))) ;; FIXME why is this needed?
:custom
(use-dialog-box nil)
(use-short-answers t)
(native-comp-async-report-warnings-errors nil)
(inhibit-startup-message t)
(visible-bell t)
(scroll-conservatively 101) ;; more than 100 => redisplay doesn't recenter point)
(scroll-margin 3)
(temporary-file-directory "~/.emacs-saves/")
(backup-directory-alist `(("." . ,temporary-file-directory)))
(auto-save-files-name-transforms `((".*" ,temporary-file-directory t)))
(backup-by-copying t)
:config
(set-face-background 'vertical-border (face-background 'default))
;;(meow--prepare-face)
(set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?┃))
(menu-bar-mode -1)
(xterm-mouse-mode 1)
;;(scroll-bar-mode -1)
(xterm-mouse-mode +1)
(tool-bar-mode -1)
(global-hl-line-mode -1)
(global-auto-revert-mode t)
(show-paren-mode 1)
(column-number-mode 1)
;; (defun reset-terminal () (send-string-to-terminal "\033c"))
;; (add-hook 'kill-emacs-hook #'reset-terminal)
(global-set-key (kbd "<mouse-4>") 'scroll-down-line)
(global-set-key (kbd "<mouse-5>") 'scroll-up-line)
(add-hook 'server-after-make-frame-hook #'meow--prepare-face)
(load-theme 'dracula t)
(show-paren-mode +1)
(column-number-mode +1)
(defun ccr/reload-emacs ()
(interactive)
(load-file "~/.config/emacs/init.el"))
)
(defun ccr/run-in-vterm-kill (process event)
"A process sentinel. Kills PROCESS's buffer if it is live."
(let ((b (process-buffer process)))
(and (buffer-live-p b)
(kill-buffer b))))
(use-package dracula-theme
:init
(require 'ansi-color)
(let ((colors '("black" "red" "green" "yellow" "blue" "magenta" "cyan" "white")))
(dolist (color colors)
(set-face-attribute (intern (format "ansi-color-%s" color)) nil :foreground color :background color)))
(let ((colors '("red" "green" "yellow" "blue" "cyan")))
(dolist (color colors)
(set-face-attribute (intern (format "ansi-color-bright-%s" color)) nil :foreground (format "dark %s" color) :background (format "dark %s" color))))
;; TODO find better colors (bright white and bright black should be different!)
(set-face-attribute 'ansi-color-bright-white nil :foreground "grey" :background "grey")
(set-face-attribute 'ansi-color-bright-black nil :foreground "grey" :background "grey")
(set-face-attribute 'ansi-color-bright-magenta nil :foreground "magenta" :background "magenta")
:config
(load-theme 'dracula t))
(defun ccr/run-in-vterm (command &optional buffer-name)
"Run command in vterm"
(interactive)
(with-current-buffer (vterm (if buffer-name buffer-name (concat "*" command "*")))
(set-process-sentinel vterm--process #'ccr/run-in-vterm-kill)
(vterm-send-string command)
(vterm-send-return)))
(defun ccr/nixos-rebuild-test ()
"Run `nixos-rebuild test`"
(interactive)
(ccr/run-in-vterm
"sudo nixos-rebuild test --flake /home/ccr/fleet"
"*vterm-nixos-rebuild-test*"))
(defun ccr/nixos-rebuild-switch ()
"Run `nixos-rebuild switch`"
(interactive)
(ccr/run-in-vterm
"sudo nixos-rebuild switch --flake /home/ccr/fleet"
"*vterm-nixos-rebuild-switch*")))
(setup nerd-icons
(:require treemacs)
(:require treemacs-nerd-icons)
(use-package nerd-icons
:after (tremacs treemacs-nerd-icons marginalia consult)
:hook ((dired-mode-hook . nerd-icons-dired-mode)
(marginalia-mode-hook . nerd-icons-completion-marginalia-setup)
(ibuffer-mode . nerd-icons-completion-marginalia-se))
:config
(nerd-icons-completion-mode)
(nerd-icons-ibuffer-mode)
(nerd-icons-dired-mode)
(add-hook 'dired-mode-hook #'nerd-icons-dired-mode)
(add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup)
(add-hook 'ibuffer-mode-hook #'nerd-icons-ibuffer-mode)
(:option treemacs-show-cursor nil
treemacs-display-current-project-exclusively t
treemacs-project-follow-into-home nil)
(treemacs-load-theme "nerd-icons")
(treemacs-git-mode 'simple)
(setq treemacs-display-current-project-exclusively t)
)
:custom
(treemacs-show-cursor nil)
(treemacs-display-currenl-project-exclusively)
(treemacs-project-followlinto-home nil)
(treemacs-display-current-project-exclusively t))
(setup prog-mode (:hook display-line-numbers-mode hl-line-mode))
(setup which-key :option (which-key-mode))
(setup magit-mode (:hook magit-delta-mode))
(setup nix-mode (:hook
eglot-ensure
tree-sitter-hl-mode)
(global-nix-prettify-mode))
(setup haskell-mode (:hook eglot-ensure tree-sitter-hl-mode))
(setup purescript-mode)
(setup rustic-mode
(:hook eglot-ensure tree-sitter-hl-mode)
;;(push 'rustic-clippy flycheck-checkers)
(:option rustic-lsp-client 'eglot))
(setup terraform-mode (:hook eglot-ensure tree-sitter-hl-mode))
(setup yaml-mode (:hook tree-sitter-hl-mode))
(setup sh-mode (:hook tree-sitter-hl-mode))
(setup lisp
(:hook enable-paredit-mode)
(:with-mode emacs-lisp-mode (:hook enable-paredit-mode)))
(setup diff-hl
(global-diff-hl-mode 1)
(diff-hl-margin-mode 1))
(setup envrc
(require 'inheritenv)
(envrc-global-mode))
(setup windmove
(defcustom ccr/v-resize-amount 4
"How many rows move when calling `ccr/v-resize`"
:type 'integer)
(defcustom ccr/h-resize-amount 4
"How many columns move when calling `ccr/h-resize`"
:type 'integer) ;; (defcustom ccr/resize-rows 4)
(defun ccr/v-resize (key)
"Interactively vertically resize the window"
(interactive "cHit >/< to enlarge/shrink")
(cond ((eq key (string-to-char ">"))
(enlarge-window-horizontally ccr/v-resize-amount)
(call-interactively 'ccr/v-resize))
((eq key (string-to-char "<"))
(enlarge-window-horizontally (- ccr/v-resize-amount))
(call-interactively 'ccr/v-resize))
(t (push key unread-command-events))))
(defun ccr/h-resize (key)
"Interactively horizontally resize the window"
(interactive "cHit >/< to enlarge/shrink")
(cond ((eq key (string-to-char ">"))
(enlarge-window ccr/h-resize-amount)
(call-interactively 'ccr/h-resize))
((eq key (string-to-char "<"))
(enlarge-window (- ccr/h-resize-amount))
(call-interactively 'ccr/h-resize))
(t (push key unread-command-events))))
(:global "C-c w k" #'windmove-up
"C-c w l" #'windmove-right
"C-c w j" #'windmove-down
"C-c w h" #'windmove-left
"M-k" #'windmove-up
"M-l" #'windmove-right
"M-j" #'windmove-down
"M-h" #'windmove-left
"C-c w <up>" #'windmove-up
"C-c w <right>" #'windmove-right
"C-c w <down>" #'windmove-down
"C-c w <left>" #'windmove-left
"C-c w q" #'delete-window
"C-c w K" #'windmove-delete-up
"C-c w L" #'windmove-delete-right
"C-c w J" #'windmove-delete-down
"C-c w H" #'windmove-delete-left
"C-c w x" #'kill-buffer-and-window
"C-c w v" #'split-window-right
"C-c w s" #'split-window-below
"C-c w V" #'ccr/v-resize
"C-c w S" #'ccr/h-resize))
(setup (:package vertico marginalia consult orderless embark corfu)
;; Vertico
(:option vertico-mouse-mode t
vertico-reverse-mode t
vertico-count 8
vertico-resize t
vertico-cycle t
vertico-mode t)
(:bind-into vertico-map
"DEL" #'vertico-directory-delete-char
"C-DEL" #'vertico-directory-delete-word)
;; Marginalia
(:option marginalia-mode t
marginalia-aligh 'right)
(:bind-into minibuffer-local-map
"M-A" marginalia-cycle)
;; Consult
(:global [remap switch-to-buffer] #'consult-buffer
[remap goto-line] #'consult-goto-line
[remap imenu] #'consult-imenu
[remap project-switch-to-buffer] #'consult-project-buffer
"C-c b b" #'consult-project-buffer
"C-c b B" #'consult-buffer
"C-c g l" #'consult-goto-line
"C-c b i" #'consult-imenu
"C-c f f" #'consult-find
"C-c F" (if (executable-find "rg")
#'consult-ripgrep
#'consult-grep)
"C-c f" consult-find
"C-c l" consult-line
"C-c m" consult-mark
"C-c o T" treemacs
"C-c o o" consult-outline
"C-c e" #'consult-flymake)
(:option xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)
;; Orderless
(:option completion-styles '(orderless))
;; Embark
(:global "C-'" #'embark-act
"C-=" #'embark-dwim)
;; Corfu
(global-corfu-mode)
(unless (display-graphic-p) (corfu-terminal-mode))
(:option completion-cycle-threshold 3
tab-always-indent 'complete
kind-icon-default-face 'corfu-default)
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)
(:bind-into corfu-map
"M-d" #'corfu-doc-toggle
"M-l" #'corfu-show-location
"SPC" #'corfu-insert-separator)
;; Cape
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
(add-to-list 'completion-at-point-functions #'cape-file)
)
;; TODO configure corfu, cape, dabbrev, kind-icons
;; Work in progress:
(defun ccr/ignore-elisp-keywords (cand)
(or (not (keywordp cand))
(eq (char-after (car completion-in-region--data)) ?:)))
(defun ccr/setup-elisp ()
(setq-local completion-at-point-functions
`(,(cape-super-capf
(cape-capf-predicate
#'elisp-completion-at-point
;; #'my/ignore-elisp-keywords
)
#'cape-dabbrev)
cape-file)
cape-dabbrev-min-length 5))
(setup eshell
(:require projectile)
(:hook esh-autosuggest-mode)
(:with-mode eshell-load (:hook #'eat-eshell-mode #'eat-eshell-visual-command-mode))
(eshell-syntax-highlighting-global-mode +1)
(defun ccr/projectile-run-eat (&optional arg)
(interactive "P")
(let ((project (projectile-acquire-root)))
(projectile-with-default-dir project
(let ((eat-buffer-name (projectile-generate-process-name "eat" arg project)))
(eat)))))
(:global "C-c o e" #'projectile-run-eshell
"C-c o t" #'ccr/projectile-run-eat
"C-c o v" #'projectile-run-vterm))
(setup eat
(:option eat-kill-buffer-on-exit t))
(setup magit
(:global "C-c o g" magit))
(setup yaml-mode
(add-to-list 'auto-mode-alist '("\\.y(a?)ml\\'" . yaml-mode))
(add-hook 'yaml-mode-hook ;; TODO use a more idiomatic style according to setup.el
#'(lambda ()
(define-key yaml-mode-map "\C-m" 'newline-and-indent))))
(setup hl-todo (global-hl-todo-mode))
(setup projectile
(:option projectile-project-search-path '("~/projects/" "~/mlabs/"))
;; (:bind-into projectile-command-map
;; "DEL" #'vertico-directory-delete-char
;; "C-DEL" #'vertico-directory-delete-word)
)
(setup meow
(use-package meow
:hook (server-after-make-frame . (lambda () (meow--prepare-face)))
:init
(meow-global-mode 1)
(meow-motion-overwrite-define-key
'("j" . meow-next)
@ -403,58 +176,202 @@
'("'" . repeat)
'("<escape>" . ignore)))
(setup popper
(:option
popper-reference-buffers '("\*Messages\*"
(use-package windmove
:config
(windmove-mode +1)
(defcustom ccr/v-resize-amount 4
"How smany rows move when calling `ccr/v-resize`"
:type 'integer)
(defcustom ccr/h-resize-amount 4
"How many columns move when calling `ccr/h-resize`"
:type 'integer) ;; (defcustom ccr/resize-rows 4)
(defun ccr/v-resize (key)
"Interactively vertically resize the window"
(interactive "cHit >/< to enlarge/shrink")
(cond ((eq key (string-to-char ">"))
(enlarge-window-horizontally ccr/v-resize-amount)
(call-interactively 'ccr/v-resize))
((eq key (string-to-char "<"))
(enlarge-window-horizontally (- ccr/v-resize-amount))
(call-interactively 'ccr/v-resize))
(t (push key unread-command-events))))
(defun ccr/h-resize (key)
"Interactively horizontally resize the window"
(interactive "cHit >/< to enlarge/shrink")
(cond ((eq key (string-to-char ">"))
(enlarge-window ccr/h-resize-amount)
(call-interactively 'ccr/h-resize))
((eq key (string-to-char "<"))
(enlarge-window (- ccr/h-resize-amount))
(call-interactively 'ccr/h-resize))
(t (push key unread-command-events))))
:bind (("C-c w k" . windmove-up)
("C-c w l" . #'windmove-right)
("C-c w j" . windmove-down)
("C-c w h" . windmove-left)
("M-k" . windmove-up)
("M-l" . windmove-right)
("M-j" . windmove-down)
("M-h" . windmove-left)
("C-c w <up>" . windmove-up)
("C-c w <right>" . windmove-right)
("C-c w <down>" . windmove-down)
("C-c w <left>" . windmove-left)
("C-c w q" . delete-window)
("C-c w K" . windmove-delete-up)
("C-c w L" . windmove-delete-right)
("C-c w J" . windmove-delete-down)
("C-c w H" . windmove-delete-left)
("C-c w x" . kill-buffer-and-window)
("C-c w v" . split-window-right)
("C-c w s" . split-window-below)
("C-c w V" . ccr/v-resize)
("C-c w S" . ccr/h-resize)))
(use-package vertico
:custom
(vertico-mouse-mode t)
(vertico-reverse-mode t)
(vertico-count 12)
(vertico-resize t)
(vertico-cycle t)
(vertico-mode t)
:bind (:map vertico-map
(("DEL" . vertico-directory-delete-char)
("C-DEL" . vertico-directory-delete-word))))
(use-package marginalia
:custom
(marginalia-mode t)
(marginalia-aligh 'right))
(use-package consult
:bind (([remap switch-to-buffer] . consult-buffer)
([remap goto-line] . consult-goto-line)
([remazp imenu] . consult-imenu)
([remap project-switch-to-buffer] . consult-project-buffer)
("C-c b b" . consult-project-buffer)
("C-c b B" . consult-buffer)
("C-c g l" . consult-goto-line)
("C-c b i" . consult-imenu)
("C-c f f" . consult-find)
("C-c F" . consult-ripgrep)
("C-c f" . consult-find)
("C-c l" . consult-line)
("C-c m" . wconsult-mark)
("C-c o o" . consult-outline)
("C-c e" . consult-flymake))
:custom
(xref-show-xrefs-function #'consult-xref)
(xref-show-definitions-function #'consult-xref))
(use-package orderless
:custom
(completion-styles '(orderless)))
(use-package embark
:bind (("C-'" . embark-act)
("C-=" . embark-dwim)))
(use-package corfu
:config
(corfu-terminal-mode)
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)
:custom
(completion-cycle-threshold 3)
(tab-always-indent 'complete)
(kind-icon-default-face 'corfu-default)
:bind (:map corfu-map
(("M-d" . corfu-doc-toggle)
("M-l" . corfu-show-location)
("SPC" . corfu-insert-separator)))
:init
(global-corfu-mode))
(use-package cape
:config
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
(add-to-list 'completion-at-point-functions #'cape-file))
(use-package prog-mode
:hook ((prog-mode . hl-line-mode)
(prog-mode . display-line-numbers-mode)))
(use-package which-key :config (which-key-mode))
(use-package magit
:hook (magit-mode . magit-delta-mode)
:bind (("C-c o g" . magit)))
(use-package sideline
:hook (flymake-mode . sideline-mode)
:custom
(sideline-flymake-display-mode 'line)
(sideline-backends-right '(sideline-flymake)))
(use-package nix-mode
:hook ((nix-mode . eglot-ensure)
(nix-mode . tree-sitter-hl-mode))
:config
(global-nix-prettify-mode))
(use-package haskell-mode
:hook ((haskell-mode . eglot-ensure)
(haskell-mode . tree-sitter-hl-mode)))
(use-package terraform-mode
:hook ((terraform-mode . eglot-ensure)
(terraform-mode . tree-sitter-hl-mode)))
(use-package yaml-mode
:hook (yaml-mode . tree-sitter-hl-mode))
(use-package sh-mode
:hook (sh-mode . tree-sitter-hl-mode))
(use-package lisp
:hook ((lisp-mode . enable-paredit-mode)
(emacs-lisp-mode . enable-paredit-mode)))
(use-package diff-hl
:init
(global-diff-hl-mode 1)
(diff-hl-margin-mode 1))
(use-package envrc
:after (inheritenv)
(envrc-global-mode))
(use-package hl-todo
:init
(global-hl-todo-mode))
(use-package eat
:custom
(eat-kill-buffer-on-exit t)
:bind (("C-c o t" . eat-project)))
(use-package popper
:custom
(popper-reference-buffers '("\*Messages\*"
"Output\*$"
"\\*Async Shell Command\\*"
"\*nixos-rebuild-(test|switch)\*"
help-mode
compilation-mode
"^\\*eshell.*\\*$" eshell-mode ;eshell as a popup
"^\\*shell.*\\*$" shell-mode ;shell as a popup
"^\\*term.*\\*$" term-mode ;term as a popup
"^\\*eat.*\\*$" term-mode ;eat as a popup
"^\\*vterm.*\\*$" vterm-mode ;vterm as a popup
)
popper-echo-lines 1
popper-mode-line nil
)
))
(popper-echo-lines 1)
(popper-mode-line nil)
:init
(popper-mode 1)
(popper-echo-mode 1)
(:global "C-c t t" popper-toggle-latest
"C-c t c" popper-cycle
"C-c t p" popper-toggle-type))
(setup org-roam
(:option org-roam-directory "~/roam/"
org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
(:global "C-c n l" org-roam-buffer-toggle
"C-c n f" org-roam-node-find
"C-c n g" org-roam-graph
"C-c n i" org-roam-node-insert
"C-c n c" org-roam-capture
"C-c n j" org-roam-dailies-capture-today)
(org-roam-db-autosync-mode))
(setup dirvish
(dirvish-override-dired-mode)
(diredfl-global-mode)
(dirvish-peek-mode)
(dirvish-side-follow-mode)
(pdf-tools-install)
(:option dirvish-use-header-line nil
dirvish-attributes '(all-the-icons
file-time
file-size
collapse
subtree-state
vc-state
git-msg)
delete-by-moving-to-trash t
dired-listing-switches "-l --almost-all --human-readable --group-directories-first --no-group")
(:with-mode dirvish-directory-view-mode (:hook diredfl-mode)))
:bind (("C-c t t" . popper-toggle-latest)
("C-c t c" . popper-cycle)
("C-c t p" . popper-toggle-type)))
(provide 'init)
;;; init.el ends here

View file

@ -7,6 +7,7 @@ with epkgs; [
nerd-icons-ibuffer
nerd-icons-dired
treemacs-nerd-icons
auto-dim-other-buffers
sideline
sideline-flymake
delight
@ -17,7 +18,6 @@ with epkgs; [
embark
embark-consult
vterm
setup
magit
magit-delta
forge
@ -40,20 +40,5 @@ with epkgs; [
markdown-mode
haskell-mode
terraform-mode
org-roam-ui
org-roam
dirvish
diredfl
pdf-tools
ligature
esh-autosuggest
eshell-syntax-highlighting
projectile
consult-projectile
eat
rust-mode
rustic
purescript-mode
tide
solidity-mode
]