From d19103f83f37b9e18673ded8b8b52f64562526d6 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Mon, 24 Jul 2023 23:58:40 +0200 Subject: [PATCH] Things --- init.el | 565 ++++++++++++++++++------------------------ packages/packages.nix | 17 +- 2 files changed, 242 insertions(+), 340 deletions(-) diff --git a/init.el b/init.el index 81cceea..daf3e65 100644 --- a/init.el +++ b/init.el @@ -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 (("" . scroll-down-line) + ("" . 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 "") 'scroll-down-line) - (global-set-key (kbd "") '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 " #'windmove-up - "C-c w " #'windmove-right - "C-c w " #'windmove-down - "C-c w " #'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) '("" . 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 " . windmove-up) + ("C-c w " . windmove-right) + ("C-c w " . windmove-down) + ("C-c w " . 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 diff --git a/packages/packages.nix b/packages/packages.nix index bef060c..6386fb4 100644 --- a/packages/packages.nix +++ b/packages/packages.nix @@ -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 ]