mirror of https://codeberg.org/anemofilia/zero
radio: files: emacs: Major rework of init.el
parent
6a27ff84b6
commit
9198450a9f
|
@ -1,312 +1,514 @@
|
||||||
;; Who am I?
|
;;; -*- lexical-binding: t; origami-mode: t -*-
|
||||||
|
|
||||||
|
(use-package emacs
|
||||||
|
:custom ((indent-tabs-mode nil))
|
||||||
|
:config
|
||||||
|
;; who am I?
|
||||||
(setq user-full-name "Luis Guilherme Coelho"
|
(setq user-full-name "Luis Guilherme Coelho"
|
||||||
user-email-address "lgcoelho@disroot.org"
|
user-email-address "lgcoelho@disroot.org"
|
||||||
copyright-names-regexp (format "%s <%s>"
|
copyright-names-regexp (format "%s <%s>"
|
||||||
user-full-name
|
user-full-name
|
||||||
user-mail-address))
|
user-mail-address))
|
||||||
(load-file "~/projects/code/scm/guix/etc/copyright.el")
|
|
||||||
|
|
||||||
;; Emacs directories
|
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
|
||||||
(setq user-emacs-directory "~/.config/emacs")
|
(add-to-list 'default-frame-alist '(ns-appearance . dark))
|
||||||
|
|
||||||
;; Organizing backups
|
;; load-path
|
||||||
(setq backup-directory-alist
|
|
||||||
'(("." . "~/.local/share/emacs/saves")))
|
|
||||||
|
|
||||||
;; Emacs load path
|
|
||||||
(add-to-list 'load-path
|
(add-to-list 'load-path
|
||||||
"~/.guix-home/profile/share/emacs/site-lisp")
|
"~/.guix-home/profile/share/emacs/site-lisp")
|
||||||
(setq-default buffer-file-coding-system
|
|
||||||
'utf-8-unix)
|
|
||||||
|
|
||||||
;; Garbage collection
|
;; display-line-numbers variables
|
||||||
(setq gc-cons-threshold (* 50 1000 1000))
|
(setq display-line-numbers-current-absolute t
|
||||||
|
|
||||||
;; No more tabs
|
|
||||||
(setq-default indent-line-function 'insert-tab
|
|
||||||
indent-tabs-mode nil)
|
|
||||||
|
|
||||||
;; Profile emacs startup
|
|
||||||
(add-hook 'emacs-startup-hook
|
|
||||||
(lambda () (message
|
|
||||||
"*:** Emacs loaded in %s seconds with %d garbage collections."
|
|
||||||
(emacs-init-time "%.2f")
|
|
||||||
gcs-done)))
|
|
||||||
|
|
||||||
;; Disable compiler and large file warnings
|
|
||||||
(setq native-comp-async-report-warnings-errors nil
|
|
||||||
large-file-warning-threshold nil)
|
|
||||||
|
|
||||||
;; Remove start message and scratch message
|
|
||||||
(setq inhibit-startup-message t
|
|
||||||
initial-scratch-message nil)
|
|
||||||
|
|
||||||
;; Enable some minor modes globally
|
|
||||||
(dolist (mode '(server-mode ; Emacs server
|
|
||||||
savehist-mode ; Command history
|
|
||||||
column-number-mode ; Cursor column number
|
|
||||||
global-prettify-symbols-mode ; Pretty symbols
|
|
||||||
delete-selection-mode)) ; Normal selection behavior
|
|
||||||
(funcall mode 1))
|
|
||||||
|
|
||||||
;; Disable some minor modes globally
|
|
||||||
(dolist (mode '(tool-bar-mode menu-bar-mode ; Menus
|
|
||||||
scroll-bar-mode ; Scroll-bar
|
|
||||||
tooltip-mode ; Tooltip
|
|
||||||
indent-tabs-mode ; Tabs
|
|
||||||
blink-cursor-mode ; Cursor
|
|
||||||
fringe-mode)) ; Fringe
|
|
||||||
(funcall mode 0))
|
|
||||||
|
|
||||||
;; Line numbers settings
|
|
||||||
(setq display-line-numbers-type 'relative
|
|
||||||
display-line-numbers-current-absolute t
|
|
||||||
display-line-numbers-grow-only t
|
display-line-numbers-grow-only t
|
||||||
|
display-line-numbers-type 'relative
|
||||||
|
display-line-numbers-width 4
|
||||||
display-line-numbers-width-start t)
|
display-line-numbers-width-start t)
|
||||||
|
|
||||||
;; Display whitespaces
|
;; guix stuff
|
||||||
(setq-default fill-column 80)
|
(load-file "~/projects/code/scm/guix/etc/copyright.el")
|
||||||
(setq whitespace-display-mappings
|
|
||||||
'((space-mark ?\ [?⋅] [?.])
|
|
||||||
(space-mark ?\xA0 [?⋅] [?_])
|
|
||||||
(newline-mark ?\n [?¬ ?\n] [?$ ?\n])
|
|
||||||
(tab-mark ?\t [?» ?\t] [?\\ ?\t])))
|
|
||||||
(dolist (mode '(text-mode-hook
|
|
||||||
prog-mode-hook
|
|
||||||
conf-mode-hook))
|
|
||||||
(add-hook mode (lambda ()
|
|
||||||
(setq display-line-numbers-witdth
|
|
||||||
(length (format "%s" (count-lines (point-max)
|
|
||||||
(point-min)))))
|
|
||||||
(dolist (mode '(display-line-numbers-mode
|
|
||||||
rainbow-delimiters-mode
|
|
||||||
display-fill-column-indicator-mode
|
|
||||||
whitespace-mode))
|
|
||||||
(funcall mode 1)))))
|
|
||||||
(add-hook 'org-mode-hook
|
|
||||||
(lambda ()
|
|
||||||
(dolist (mode '(whitespace-mode
|
|
||||||
display-fill-column-indicator-mode))
|
|
||||||
(funcall mode 0))
|
|
||||||
(setq org-pretty-entities t)))
|
|
||||||
|
|
||||||
;; Aesthetics
|
;; keep ~/.config/emacs/ clean
|
||||||
(load-theme 'meimuna t)
|
(setq user-emacs-directory (expand-file-name "~/.cache/emacs/"))
|
||||||
(setq cursor-type 'box)
|
(setq url-history-file (expand-file-name "url/history"
|
||||||
|
user-emacs-directory))
|
||||||
|
|
||||||
;; Smooth scroll
|
;; keep customization settings in a temporary file
|
||||||
(setq scroll-step 1)
|
(setq custom-file
|
||||||
|
(if (boundp 'server-socket-dir)
|
||||||
|
(expand-file-name "custom.el" server-socket-dir)
|
||||||
|
(expand-file-name (format "emacs-custom-%s.el" (user-uid))
|
||||||
|
temporary-file-directory)))
|
||||||
|
(load custom-file t)
|
||||||
|
|
||||||
;; Please never show me a dialog box again
|
;; backups
|
||||||
|
(setq backup-directory-alist
|
||||||
|
`((".*" . ,(expand-file-name "backups" user-emacs-directory)))
|
||||||
|
auto-save-file-name-transforms
|
||||||
|
`((".*" ,(expand-file-name "autosave/" user-emacs-directory) t)))
|
||||||
|
(setq create-lockfiles nil
|
||||||
|
backup-by-copying t
|
||||||
|
version-control t
|
||||||
|
delete-old-versions t
|
||||||
|
vc-make-backup-files t
|
||||||
|
kept-old-versions 10
|
||||||
|
kept-new-versions 10)
|
||||||
|
|
||||||
|
;; dialog box
|
||||||
(setq use-dialog-box nil)
|
(setq use-dialog-box nil)
|
||||||
|
|
||||||
;; IRC
|
;; scrolling
|
||||||
(setq circe-nick "anemofilia")
|
(setq scroll-conservatively 101
|
||||||
(setq circe-channels
|
scroll-margin 2)
|
||||||
'("#emacs" "#gnu" "#guile" "#guix" "#libreboot" "#spritely"))
|
|
||||||
|
|
||||||
(require 'meow)
|
;; lmao?
|
||||||
(defun meow-setup ()
|
(setq enable-recursive-minibuffers t)
|
||||||
(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
|
|
||||||
(apply 'meow-motion-overwrite-define-key
|
|
||||||
'(("j" . meow-next)
|
|
||||||
("k" . meow-prev)
|
|
||||||
("<escape>" . ignore)))
|
|
||||||
(apply 'meow-leader-define-key
|
|
||||||
'(;; SPC j/k will run the original command in MOTION state.
|
|
||||||
("j" . "H-j")
|
|
||||||
("k" . "H-k")
|
|
||||||
;; Use SPC (0-9) for digit arguments.
|
|
||||||
("1" . meow-digit-argument)
|
|
||||||
("2" . meow-digit-argument)
|
|
||||||
("3" . meow-digit-argument)
|
|
||||||
("4" . meow-digit-argument)
|
|
||||||
("5" . meow-digit-argument)
|
|
||||||
("6" . meow-digit-argument)
|
|
||||||
("7" . meow-digit-argument)
|
|
||||||
("8" . meow-digit-argument)
|
|
||||||
("9" . meow-digit-argument)
|
|
||||||
("0" . meow-digit-argument)
|
|
||||||
("/" . meow-keypad-describe-key)
|
|
||||||
("?" . meow-cheatsheet)))
|
|
||||||
(apply 'meow-normal-define-key
|
|
||||||
'(("0" . meow-expand-0)
|
|
||||||
("9" . meow-expand-9)
|
|
||||||
("8" . meow-expand-8)
|
|
||||||
("7" . meow-expand-7)
|
|
||||||
("6" . meow-expand-6)
|
|
||||||
("5" . meow-expand-5)
|
|
||||||
("4" . meow-expand-4)
|
|
||||||
("3" . meow-expand-3)
|
|
||||||
("2" . meow-expand-2)
|
|
||||||
("1" . meow-expand-1)
|
|
||||||
("-" . negative-argument)
|
|
||||||
(";" . meow-reverse)
|
|
||||||
("," . meow-inner-of-thing)
|
|
||||||
("." . meow-bounds-of-thing)
|
|
||||||
("[" . meow-beginning-of-thing)
|
|
||||||
("]" . meow-end-of-thing)
|
|
||||||
("a" . meow-append)
|
|
||||||
("A" . meow-open-below)
|
|
||||||
("b" . meow-back-word)
|
|
||||||
("B" . meow-back-symbol)
|
|
||||||
("c" . meow-change)
|
|
||||||
("d" . meow-delete)
|
|
||||||
("D" . meow-backward-delete)
|
|
||||||
("e" . meow-next-word)
|
|
||||||
("E" . meow-next-symbol)
|
|
||||||
("f" . meow-find)
|
|
||||||
("g" . meow-cancel-selection)
|
|
||||||
("G" . meow-grab)
|
|
||||||
("h" . meow-left)
|
|
||||||
("H" . meow-left-expand)
|
|
||||||
("i" . meow-insert)
|
|
||||||
("I" . meow-open-above)
|
|
||||||
("j" . meow-next)
|
|
||||||
("J" . meow-next-expand)
|
|
||||||
("k" . meow-prev)
|
|
||||||
("K" . meow-prev-expand)
|
|
||||||
("l" . meow-right)
|
|
||||||
("L" . meow-right-expand)
|
|
||||||
("m" . meow-join)
|
|
||||||
("n" . meow-search)
|
|
||||||
("o" . meow-block)
|
|
||||||
("O" . meow-to-block)
|
|
||||||
("p" . meow-yank)
|
|
||||||
("q" . meow-quit)
|
|
||||||
("Q" . meow-goto-line)
|
|
||||||
("r" . meow-replace)
|
|
||||||
("R" . meow-swap-grab)
|
|
||||||
("s" . meow-kill)
|
|
||||||
("t" . meow-till)
|
|
||||||
("u" . meow-undo)
|
|
||||||
("U" . meow-undo-in-selection)
|
|
||||||
("v" . meow-visit)
|
|
||||||
("w" . meow-mark-word)
|
|
||||||
("W" . meow-mark-symbol)
|
|
||||||
("x" . meow-line)
|
|
||||||
("X" . meow-goto-line)
|
|
||||||
("y" . meow-save)
|
|
||||||
("Y" . meow-sync-grab)
|
|
||||||
("z" . meow-pop-selection)
|
|
||||||
("'" . repeat)
|
|
||||||
("<escape>" . ignore))))
|
|
||||||
(meow-setup)
|
|
||||||
(meow-global-mode)
|
|
||||||
|
|
||||||
;(require 'setup)
|
;; radix
|
||||||
;(setup-define :pkg
|
(defun radix (dir)
|
||||||
; (lambda (feature-or-package)
|
(lambda ()
|
||||||
; `(unless (locate-file ,(symbol-name feature-or-package)
|
(let* ((radix "~/areas/code/scm/radix")
|
||||||
; load-path
|
(default-directory (concat radix "/radix/" dir "/")))
|
||||||
; (get-load-suffixes))
|
(call-interactively 'find-file))))
|
||||||
; (:package ',feature-or-package)))
|
|
||||||
; :documentation "Install PACKAGE if it is not available locally.
|
|
||||||
;This macro can be used as NAME, and it will replace itself with
|
|
||||||
;the first PACKAGE."
|
|
||||||
; :repeatable t
|
|
||||||
; :shorthand #'cadr)
|
|
||||||
;
|
|
||||||
;(setup-define :disabled
|
|
||||||
; (lambda () `,(setup-quit))
|
|
||||||
; :documentation "Always stop evaluating the body.")
|
|
||||||
;
|
|
||||||
;(setup-define :load-after
|
|
||||||
; (lambda (features &rest body)
|
|
||||||
; (let ((body `(progn
|
|
||||||
; (require ',(setup-get 'feature))
|
|
||||||
; ,@body)))
|
|
||||||
; (dolist (feature (if (listp features)
|
|
||||||
; (nreverse features)
|
|
||||||
; (list features)))
|
|
||||||
; (setq body `(with-eval-after-load ',feature ,body)))
|
|
||||||
; body))
|
|
||||||
; :documentation "Load the current feature after FEATURES."
|
|
||||||
; :indent 1)
|
|
||||||
;
|
|
||||||
;(setup-define :file-match
|
|
||||||
; (lambda (regexp)
|
|
||||||
; `(add-to-list 'auto-mode-alist (cons ,regexp ',(setup-get 'mode))))
|
|
||||||
; :documentation "Associate the current mode with files that match REGEXP."
|
|
||||||
; :debug '(form)
|
|
||||||
; :repeatable t)
|
|
||||||
;
|
|
||||||
;(setup-define :leader
|
|
||||||
; (lambda (&rest args)
|
|
||||||
; `(with-eval-after-load 'general
|
|
||||||
; (general-define-key ,@args
|
|
||||||
; :states 'normal
|
|
||||||
; :keymaps 'override
|
|
||||||
; :prefix "SPC"
|
|
||||||
; :global-prefix "C-SPC")))
|
|
||||||
; :documentation "Define a leader keybind"
|
|
||||||
; :debug '(form)
|
|
||||||
; :indent 0)
|
|
||||||
;
|
|
||||||
;(setup-define :local-leader
|
|
||||||
; (lambda (&rest args)
|
|
||||||
; `(with-eval-after-load 'general
|
|
||||||
; (let ((map ',(setup-get 'map)))
|
|
||||||
; (general-define-key ,@args
|
|
||||||
; :states 'normal
|
|
||||||
; :keymaps map
|
|
||||||
; :prefix "SPC m"
|
|
||||||
; :global-prefix "C-SPC m"))))
|
|
||||||
; :documentation "Define a local leader keybind"
|
|
||||||
; :debug '(form)
|
|
||||||
; :indent 0)
|
|
||||||
;
|
|
||||||
;(setup-define :ignore-buffers
|
|
||||||
; (lambda (&rest buffers)
|
|
||||||
; `(setq ignored-buffers (append ignored-buffers ',buffers)))
|
|
||||||
; :documentation "Ignore buffers")
|
|
||||||
;
|
|
||||||
;(setup-define :display-rule
|
|
||||||
; (lambda (condition &rest actions)
|
|
||||||
; `(add-to-list 'display-buffer-alist '(,condition . ,actions)))
|
|
||||||
; :documentation "Add to display buffer alist")
|
|
||||||
;
|
|
||||||
;(setup (:pkg kakoune)
|
|
||||||
; (:option ryo-modal-cursor-type 'box
|
|
||||||
; ryo-modal-cursor-color "#8581E0")
|
|
||||||
; (:global "<escape>"
|
|
||||||
; (lambda ()
|
|
||||||
; (interactive)
|
|
||||||
; (if (minibufferp)
|
|
||||||
; (keyboard-escape-quit)
|
|
||||||
; (ryo-modal-mode))))
|
|
||||||
; (kakoune-setup-keybinds)
|
|
||||||
; (ryo-modal-keys
|
|
||||||
; ("M-s" mc/split-region)))
|
|
||||||
;:
|
|
||||||
;;; Use a real file manager
|
|
||||||
;(setup (:pkg dirvish)
|
|
||||||
; (:hook hl-line-mode)
|
|
||||||
; (:option dirvish-attributes nil
|
|
||||||
; dirvish-listing-switches '(--group-directories-first --classify))
|
|
||||||
; ;'(vc-state subtree-state all-the-icons collapse git-msg file-time file-size))
|
|
||||||
; (dirvish-override-dired-mode))
|
|
||||||
;
|
|
||||||
;(setup (:pkg org-bullets org-present org-roam org-modern))
|
|
||||||
;(setup (:pkg elfeed elfeed-org))
|
|
||||||
;(setup (:pkg geiser geiser-guile macrostep-geiser))
|
|
||||||
;(setup (:pkg cape corfu corfu-doc consult-lsp vertico orderless))
|
|
||||||
|
|
||||||
(custom-set-variables
|
(defun radix-packages ()
|
||||||
;; custom-set-variables was added by Custom.
|
(interactive)
|
||||||
;; If you edit it by hand, you could mess it up, so be careful.
|
(funcall (radix "packages")))
|
||||||
;; Your init file should contain only one such instance.
|
|
||||||
;; If there is more than one, they won't work right.
|
(defun radix-services ()
|
||||||
'(custom-enabled-themes '(meimuna))
|
(interactive)
|
||||||
'(custom-safe-themes
|
(funcall (radix "services")))
|
||||||
'("5df271e8c563dcd5b7be07ab5b5a615567b20a36b7c748475df0bb512332f0e1" "c202b7618764218b8ecb21a13c5dc9b318f0879f54105847fa5e1868afb19369" "044d60490c760e63bd39232445702271257a47ab384a3871649ea03a3d2b430a" "322a73057be183963dcd4fbfaa859e636fc8aa5f76f2a24f32a8ee5cc73be484" "671f76d55e2917bcae38168c2363fc21a335683583543b3fe49018cf5542908d" "f2db82bef0fb3e3922053605326d82b3e6494aed5c938440358710e9b78da7d9" "47263df55a6df473a5b9ba13107523f285db25dbbfd793ed5beaf47b7ec11c8e" "452da09d018e5f7bffa1e293c224c8711aa37dc9e7dd1dce24c9be6a0f6067c3" "f2c28b88fc49c9577269afcfdbf4630135c2bc2a4813f379c9a8a3979953e706" "38d107472028475f6d47938a91abf170587b718f4ca84f258ea8d72babe25201" "12bd9d840d3e0f54c607ca63acca59b083eca3cb18b9e5c7b34dfb6a400eaf4b" default))
|
|
||||||
'(package-selected-packages
|
(defun radix-home-services ()
|
||||||
'(eat mines setup kakoune magit-popup edit-indirect bui geiser-guile auctex))
|
(interactive)
|
||||||
'(whitespace-style
|
(funcall (radix "home/services")))
|
||||||
'(face trailing tabs spaces lines lines-tail lines-char newline missing-newline-at-eof empty indentation::tab indentation::space indentation big-indent space-after-tab::tab space-after-tab::space space-after-tab space-before-tab::tab space-before-tab::space space-before-tab space-mark tab-mark newline-mark)))
|
|
||||||
(custom-set-faces
|
(defun radix-system ()
|
||||||
;; custom-set-faces was added by Custom.
|
(interactive)
|
||||||
;; If you edit it by hand, you could mess it up, so be careful.
|
(funcall (radix "system")))
|
||||||
;; Your init file should contain only one such instance.
|
|
||||||
;; If there is more than one, they won't work right.
|
;; zero
|
||||||
'(whitespace-line ((t nil))))
|
(defun zero (dir)
|
||||||
|
(lambda ()
|
||||||
|
(interactive)
|
||||||
|
(let* ((zero "~/areas/code/scm/zero")
|
||||||
|
(default-directory (concat zero "/" dir "/")))
|
||||||
|
(call-interactively 'find-file))))
|
||||||
|
|
||||||
|
(defun home ()
|
||||||
|
(interactive)
|
||||||
|
(funcall (zero "home-environments")))
|
||||||
|
|
||||||
|
(defun system ()
|
||||||
|
(interactive)
|
||||||
|
(funcall (zero "operating-systems")))
|
||||||
|
|
||||||
|
(defun files ()
|
||||||
|
(interactive)
|
||||||
|
(funcall (zero "home-environments/radio/files")))
|
||||||
|
|
||||||
|
(defun config ()
|
||||||
|
(interactive)
|
||||||
|
(let* ((default-directory "~/.config/emacs"))
|
||||||
|
(call-interactively 'find-file)))
|
||||||
|
|
||||||
|
(defun radio-manifests ()
|
||||||
|
(interactive)
|
||||||
|
(funcall (zero "home-environments/radio/manifests")))
|
||||||
|
|
||||||
|
(defun radio-packages ()
|
||||||
|
(interactive)
|
||||||
|
(funcall (zero "home-environments/radio/packages")))
|
||||||
|
|
||||||
|
;; misc
|
||||||
|
(setq-default buffer-file-coding-system 'utf-8-unix)
|
||||||
|
|
||||||
|
:bind ();; unset some keys
|
||||||
|
;;("C-x C-b" . nil))
|
||||||
|
|
||||||
|
:hook (;; globally enabled modes
|
||||||
|
(after-init . column-number-mode)
|
||||||
|
(after-init . prettify-symbols-mode)
|
||||||
|
(after-init . save-place-mode)
|
||||||
|
(after-init . savehist-mode)
|
||||||
|
|
||||||
|
((text-mode prog-mode conf-mode) . display-line-numbers-mode)
|
||||||
|
((text-mode prog-mode conf-mode) . electric-pair-local-mode)
|
||||||
|
((text-mode prog-mode conf-mode) . whitespace-mode)))
|
||||||
|
|
||||||
|
;; server
|
||||||
|
(use-package server
|
||||||
|
:config (unless (server-running-p)
|
||||||
|
(server-start)))
|
||||||
|
|
||||||
|
;; diminish
|
||||||
|
(use-package diminish)
|
||||||
|
|
||||||
|
;; auto-revert
|
||||||
|
(use-package autorevert
|
||||||
|
:diminish auto-revert-mode
|
||||||
|
:hook ((text-mode prog-mode conf-mode) . auto-revert-mode))
|
||||||
|
|
||||||
|
;; rainbow-delimiters
|
||||||
|
(use-package rainbow-delimiters
|
||||||
|
:hook ((text-mode prog-mode conf-mode) . rainbow-delimiters-mode))
|
||||||
|
|
||||||
|
;; helpful
|
||||||
|
(use-package helpful
|
||||||
|
:custom (help-select-window t)
|
||||||
|
:bind (("C-h f" . helpful-callable)
|
||||||
|
("C-h v" . helpful-variable)
|
||||||
|
("C-h k" . helpful-key)
|
||||||
|
("C-h C-." . helpful-at-point)))
|
||||||
|
|
||||||
|
;; anzu-mode
|
||||||
|
(use-package anzu
|
||||||
|
:diminish anzu-mode
|
||||||
|
:bind
|
||||||
|
(([remap query-replace] . anzu-query-replace)
|
||||||
|
([remap query-replace-regexp] . anzu-query-replace-regexp)
|
||||||
|
:map isearch-mode-map
|
||||||
|
([remap isearch-query-replace] . anzu-isearch-query-replace)
|
||||||
|
([remap isearch-query-replace-regexp] . anzu-isearch-query-replace-regexp))
|
||||||
|
:init (global-anzu-mode))
|
||||||
|
|
||||||
|
;; dirvish
|
||||||
|
(use-package dirvish
|
||||||
|
:config
|
||||||
|
(defun dirvish-dotfiles-toggle ()
|
||||||
|
(interactive)
|
||||||
|
(setq-default dired-listing-switches
|
||||||
|
(let ((switches (split-string dired-listing-switches)))
|
||||||
|
(string-join (if (member "--almost-all" switches)
|
||||||
|
(remove "--almost-all" switches)
|
||||||
|
(cons "--almost-all" switches))
|
||||||
|
" ")))
|
||||||
|
(revert-buffer-quick))
|
||||||
|
:custom
|
||||||
|
((dired-recursive-deletes 'always)
|
||||||
|
(dired-recursive-copies 'always)
|
||||||
|
(dired-listing-switches
|
||||||
|
"-l --human-readable --group-directories-first --no-group")
|
||||||
|
(dirvish-quick-access-entries
|
||||||
|
'(("h" "~/" "~")
|
||||||
|
("c" "~/.config/" "~/.config")
|
||||||
|
("d" "~/media/downloads/" "~/media/downloads")
|
||||||
|
("m" "~/media/music/" "~/media/music")
|
||||||
|
("p" "~/media/pictures/" "~/media/pictures")
|
||||||
|
("v" "~/media/videos/" "~/media/videos")
|
||||||
|
("z" "~/areas/code/scm/zero/" "~/areas/code/scm/zero")))
|
||||||
|
(dirvish-header-line-format
|
||||||
|
'(:left (path) :right (free-space)))
|
||||||
|
(dirvish-mode-line-format
|
||||||
|
'(:left
|
||||||
|
(sort file-time " " file-size symlink)
|
||||||
|
:right
|
||||||
|
(omit yank index)))
|
||||||
|
(dirvish-attributes
|
||||||
|
'(all-the-icons git-msg file-size)))
|
||||||
|
:bind (("C-x d" . dirvish)
|
||||||
|
:map dirvish-mode-map
|
||||||
|
("h" . dired-up-directory)
|
||||||
|
("l" . dired-view-file)
|
||||||
|
("RET" . dired-view-file)
|
||||||
|
("C-z h" . dirvish-dotfiles-toggle))
|
||||||
|
:init (dirvish-override-dired-mode))
|
||||||
|
|
||||||
|
;; whitespace
|
||||||
|
(use-package whitespace
|
||||||
|
:diminish whitespace-mode
|
||||||
|
:custom ((whitespace-display-mappings
|
||||||
|
'((space-mark ?\ [?⋅])
|
||||||
|
;; fix strange behaviour with hl-fill-column-mode
|
||||||
|
;;(newline-mark ?\n [?↩ ?\n])
|
||||||
|
(tab-mark ?\t [?→ ?\t])))))
|
||||||
|
|
||||||
|
;; hl-fill-column
|
||||||
|
(use-package hl-fill-column
|
||||||
|
:config
|
||||||
|
(set-face-attribute
|
||||||
|
'hl-fill-column-face nil
|
||||||
|
:background (face-attribute 'fill-column-indicator :background)
|
||||||
|
:inverse-video nil)
|
||||||
|
(defun hl-fill-column ()
|
||||||
|
"Highlight all spaces in fill-column."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(goto-char (point-min))
|
||||||
|
(while (not (eobp))
|
||||||
|
(let ((line-end (line-end-position)))
|
||||||
|
(when (>= line-end)
|
||||||
|
(goto-char (+ (line-beginning-position)
|
||||||
|
(- fill-column 1)))
|
||||||
|
(overlay-put (make-overlay (- (point) 1) (point))
|
||||||
|
'font-lock-face
|
||||||
|
'(face :backgound "blue"))))
|
||||||
|
(forward-line 1)))
|
||||||
|
(font-lock-fontify-buffer))
|
||||||
|
:hook
|
||||||
|
;;((text-mode prog-mode conf-mode) . hl-fill-column-mode)
|
||||||
|
((text-mode prog-mode conf-mode) . hl-fill-column)
|
||||||
|
((text-mode prog-mode conf-mode) . display-fill-column-indicator-mode))
|
||||||
|
|
||||||
|
;; org
|
||||||
|
(use-package org
|
||||||
|
:custom ((org-pretty-entities t)
|
||||||
|
(org-hide-emphasis-markers t))
|
||||||
|
:hook (org-mode . (lambda ()
|
||||||
|
(interactive)
|
||||||
|
(whitespace-mode 0)
|
||||||
|
(display-fill-column-indicator-mode 0))))
|
||||||
|
|
||||||
|
;; irc
|
||||||
|
(use-package circe
|
||||||
|
:custom
|
||||||
|
(circe-nick "anemofilia")
|
||||||
|
(circe-channels '("#emacs" "#gnu" "#guile" "#guix" "#spritely"))
|
||||||
|
:hook (circe-mode . circe-server-mode))
|
||||||
|
|
||||||
|
;; haskell
|
||||||
|
(use-package haskell
|
||||||
|
:hook (haskell-mode . haskell-doc-mode))
|
||||||
|
|
||||||
|
;; mastodon
|
||||||
|
(use-package mastodon
|
||||||
|
:custom
|
||||||
|
(mastodon-instance-url "https://mathstodon.xyz")
|
||||||
|
(mastodon-active-user "anemofilia")
|
||||||
|
:hook (mastodon-mode . mastodon-async-mode))
|
||||||
|
|
||||||
|
;; no-littering
|
||||||
|
(use-package no-littering)
|
||||||
|
|
||||||
|
;; origami
|
||||||
|
(use-package origami)
|
||||||
|
|
||||||
|
;; eat
|
||||||
|
(use-package eat
|
||||||
|
:hook (eat-mode . meow-insert-mode))
|
||||||
|
|
||||||
|
;; keys
|
||||||
|
(use-package which-key
|
||||||
|
:diminish which-key-mode
|
||||||
|
:custom ((which-key-idle-delay 0.3)
|
||||||
|
(which-key-enable-extended-define-key nil))
|
||||||
|
:init (which-key-mode))
|
||||||
|
|
||||||
|
;; pdf-view
|
||||||
|
(use-package pdf-tools
|
||||||
|
:custom
|
||||||
|
(pdf-outline-imenu-use-flat-menus t)
|
||||||
|
(pdf-view-display-size 1.5)
|
||||||
|
:bind (:map pdf-view-mode-map
|
||||||
|
("r" . pdf-view-rotate)
|
||||||
|
("R" . pdf-view-themed-minor-mode)
|
||||||
|
("J" . pdf-view-next-page)
|
||||||
|
("K" . pdf-view-previous-page)
|
||||||
|
("<tab>" . imenu))
|
||||||
|
:hook
|
||||||
|
(doc-view-mode . pdf-view-mode)
|
||||||
|
(pdf-view-mode . pdf-outline-imenu-enable))
|
||||||
|
|
||||||
|
;; indent s-expr as you type
|
||||||
|
(use-package isayt
|
||||||
|
:diminish isayt
|
||||||
|
:hook ((lisp-mode
|
||||||
|
emacs-lisp-mode
|
||||||
|
ielm-mode
|
||||||
|
scheme-mode
|
||||||
|
racket-mode
|
||||||
|
hy-mode
|
||||||
|
lfe-mode
|
||||||
|
dune-mode
|
||||||
|
clojure-mode
|
||||||
|
fennel-mode)
|
||||||
|
. isayt-mode)
|
||||||
|
:commands (isayt-mode))
|
||||||
|
|
||||||
|
;; lispyville
|
||||||
|
(use-package lispyville
|
||||||
|
:diminish lispyville-mode
|
||||||
|
:custom (lispyville-key-theme
|
||||||
|
'(operators
|
||||||
|
slurp/barf-lispy
|
||||||
|
c-w
|
||||||
|
additional
|
||||||
|
text-objects
|
||||||
|
commentary))
|
||||||
|
:hook ((lisp-mode
|
||||||
|
emacs-lisp-mode
|
||||||
|
ielm-mode
|
||||||
|
scheme-mode
|
||||||
|
racket-mode
|
||||||
|
hy-mode
|
||||||
|
lfe-mode
|
||||||
|
dune-mode
|
||||||
|
clojure-mode
|
||||||
|
fennel-mode)
|
||||||
|
. lispyville-mode))
|
||||||
|
|
||||||
|
;; scheme
|
||||||
|
(use-package geiser
|
||||||
|
:hook ((scheme-mode . geiser-mode)
|
||||||
|
(geiser-mode . geiser)))
|
||||||
|
|
||||||
|
;; consult
|
||||||
|
(use-package consult
|
||||||
|
:bind (("C-x b" . consult-buffer)))
|
||||||
|
|
||||||
|
;; marginalia
|
||||||
|
(use-package marginalia
|
||||||
|
:init (marginalia-mode))
|
||||||
|
|
||||||
|
;; orderless
|
||||||
|
(use-package orderless
|
||||||
|
:custom
|
||||||
|
(orderless-matching-styles '(orderless-initialism orderless-flex))
|
||||||
|
(completion-styles '(orderless basic))
|
||||||
|
:config
|
||||||
|
(defun orderless-fast-dispatch (word index total)
|
||||||
|
(and (= index 0) (= total 1) (length< word 4)
|
||||||
|
(cons 'orderless-literal-prefix word)))
|
||||||
|
|
||||||
|
(orderless-define-completion-style orderless-fast
|
||||||
|
(orderless-style-dispatchers '())
|
||||||
|
(orderless-matching-styles '(orderless-flexg orderless-regexp))))
|
||||||
|
|
||||||
|
;; vertico
|
||||||
|
(use-package vertico
|
||||||
|
:custom
|
||||||
|
(vertico-multiform-commands
|
||||||
|
'((imenu buffer)))
|
||||||
|
(vertico-buffer-display-action
|
||||||
|
'(display-buffer-in-direction
|
||||||
|
(direction . left)
|
||||||
|
(window-width . 0.3)))
|
||||||
|
(vertico-buffer-hide-prompt t)
|
||||||
|
(vertico-cycle nil)
|
||||||
|
(vertico-scroll-margin 1)
|
||||||
|
(minibuffer-prompt-properties
|
||||||
|
(apply #'append '((read-only t)
|
||||||
|
(cursor-intangible t)
|
||||||
|
(face minibuffer-prompt))))
|
||||||
|
:preface
|
||||||
|
(defun my-minibuffer-backward-kill (arg)
|
||||||
|
"When minibuffer is completing a file name delete up to parent
|
||||||
|
folder, otherwise delete a word"
|
||||||
|
(interactive "p")
|
||||||
|
(if minibuffer-completing-file-name
|
||||||
|
(if (string-match-p "/." (minibuffer-contents))
|
||||||
|
(zap-up-to-char (- arg) ?/)
|
||||||
|
(delete-minibuffer-contents))
|
||||||
|
(kill-word (- arg))))
|
||||||
|
:hook
|
||||||
|
(after-init . vertico-multiform-mode)
|
||||||
|
(minibuffer-setup . cursor-intangible-mode)
|
||||||
|
:bind (:map vertico-map
|
||||||
|
("C-j" . vertico-next)
|
||||||
|
("C-k" . vertico-previous)
|
||||||
|
("C-f" . vertico-exit))
|
||||||
|
:bind (:map minibuffer-local-map
|
||||||
|
("C-<backspace>" . my-minibuffer-backward-kill))
|
||||||
|
|
||||||
|
:init
|
||||||
|
(vertico-mode))
|
||||||
|
|
||||||
|
;; corfu
|
||||||
|
(use-package corfu
|
||||||
|
:preface
|
||||||
|
(defun corfu-enable-in-minibuffer ()
|
||||||
|
"Enable Corfu in the minibuffer if `completion-at-point' is bound."
|
||||||
|
(when (where-is-internal #'completion-at-point
|
||||||
|
(list (current-local-map)))
|
||||||
|
(corfu-mode 1)))
|
||||||
|
:hook (((prog-mode eshell-mode) . corfu-mode)
|
||||||
|
(corfu-mode . corfu-popupinfo-mode)
|
||||||
|
(minibuffer-setup . corfu-enable-in-minibuffer))
|
||||||
|
:custom
|
||||||
|
(corfu-cycle nil)
|
||||||
|
(corfu-auto t)
|
||||||
|
(corfu-popupinfo-delay '(1.0 . 0.5))
|
||||||
|
(corfu-auto-delay 0.2)
|
||||||
|
(corfu-auto-prefix 2)
|
||||||
|
(corfu-quit-no-match 'separator)
|
||||||
|
(corfu-preselect 'valid)
|
||||||
|
(corfu-preview-current 'insert)
|
||||||
|
:bind (:map corfu-map
|
||||||
|
("C-s" . corfu-quit)
|
||||||
|
("<tab>" . corfu-next)
|
||||||
|
("<backtab>" . corfu-previous)))
|
||||||
|
|
||||||
|
;; cape
|
||||||
|
(use-package cape
|
||||||
|
:init
|
||||||
|
(add-hook 'completion-at-point-functions #'cape-file)
|
||||||
|
(add-hook 'completion-at-point-functions #'cape-tex)
|
||||||
|
(add-hook 'completion-at-point-functions #'cape-dabbrev)
|
||||||
|
(add-hook 'completion-at-point-functions #'cape-keyword)
|
||||||
|
(add-hook 'completion-at-point-functions #'cape-elisp-block)
|
||||||
|
(add-hook 'completion-at-point-functions #'cape-elisp-symbol))
|
||||||
|
|
||||||
|
;; (use-package kakoune
|
||||||
|
;; ;; Having a non-chord way to escape is important, since key-chords don't work in macros
|
||||||
|
;; :bind ("C-z" . ryo-modal-mode)
|
||||||
|
;; :hook (after-init . my/kakoune-setup)
|
||||||
|
;; :config
|
||||||
|
;; (defun ryo-enter () "Enter normal mode" (interactive) (ryo-modal-mode 1))
|
||||||
|
;; (defun my/kakoune-setup ()
|
||||||
|
;; "Call kakoune-setup-keybinds and then add some personal config."
|
||||||
|
;; (kakoune-setup-keybinds)
|
||||||
|
;; (setq ryo-modal-cursor-type 'box)
|
||||||
|
;; (add-hook 'prog-mode-hook #'ryo-enter)
|
||||||
|
;; (define-key ryo-modal-mode-map (kbd "SPC h") 'help-command)
|
||||||
|
;; ;; Access all C-x bindings easily
|
||||||
|
;; (define-key ryo-modal-mode-map (kbd "z") ctl-x-map)
|
||||||
|
;; (ryo-modal-keys
|
||||||
|
;; ("," save-buffer)
|
||||||
|
;; ("P" counsel-yank-pop)
|
||||||
|
;; ("m" mc/mark-next-like-this)
|
||||||
|
;; ("M" mc/skip-to-next-like-this)
|
||||||
|
;; ("n" mc/mark-previous-like-this)
|
||||||
|
;; ("N" mc/skip-to-previous-like-this)
|
||||||
|
;; ("M-m" mc/edit-lines)
|
||||||
|
;; ("*" mc/mark-all-like-this)
|
||||||
|
;; ("v" er/expand-region)
|
||||||
|
;; ("C-v" set-rectangular-region-anchor)
|
||||||
|
;; ("M-s" mc/split-region)
|
||||||
|
;; (";" (("q" delete-window)
|
||||||
|
;; ("v" split-window-horizontally)
|
||||||
|
;; ("s" split-window-vertically)))
|
||||||
|
;; ("C-h" windmove-left)
|
||||||
|
;; ("C-j" windmove-down)
|
||||||
|
;; ("C-k" windmove-up)
|
||||||
|
;; ("C-l" windmove-right)
|
||||||
|
;; ("C-u" scroll-down-command :first '(deactivate-mark))
|
||||||
|
;; ("C-d" scroll-up-command :first '(deactivate-mark)))))
|
||||||
|
|
||||||
|
(load-file "~/.config/emacs/meow.el")
|
||||||
|
;;(use-package ryo-modal
|
||||||
|
;; :custom (ryo-modal-cursor-color "#9688d9"))
|
||||||
|
|
||||||
|
;; This overrides the default mark-in-region with a prettier-looking one,
|
||||||
|
;; and provides a couple extra commands
|
||||||
|
;;(use-package visual-regexp
|
||||||
|
;; :ryo (("s" vr/mc-mark)
|
||||||
|
;; ("?" vr/replace)
|
||||||
|
;; ("M-/" vr/query-replace)))
|
||||||
|
;;
|
||||||
|
;; Emacs incremental search doesn't work with multiple cursors, but this fixes that
|
||||||
|
;;(use-package phi-search
|
||||||
|
;; :bind (("C-s" . phi-search)
|
||||||
|
;; ("C-r" . phi-search-backward)))
|
||||||
|
|
||||||
|
;; Probably the first thing you'd miss is undo and redo, which requires an extra package
|
||||||
|
;; to work like it does in kakoune (and almost every other editor).
|
||||||
|
;;(use-package undo-tree
|
||||||
|
;; :config
|
||||||
|
;; (global-undo-tree-mode)
|
||||||
|
;; :ryo (("u" undo-tree-undo)
|
||||||
|
;; ("U" undo-tree-redo)
|
||||||
|
;; ("SPC u" undo-tree-visualize))
|
||||||
|
;; :bind (:map undo-tree-visualizer-mode-map
|
||||||
|
;; ("h" . undo-tree-visualize-switch-branch-left)
|
||||||
|
;; ("j" . undo-tree-visualize-redo)
|
||||||
|
;; ("k" . undo-tree-visualize-undo)
|
||||||
|
;; ("l" . undo-tree-visualize-switch-branch-right)))
|
||||||
|
|
Loading…
Reference in New Issue