#+begin_src emacs-lisp
(add-to-list 'initial-frame-alist '(fullscreen . fullboth))
- (set-face-font 'default "Iosevka-13")
-
- (set-face-attribute 'variable-pitch nil
- :inherit 'default
- :family "Iosevka Etoile")
+ (set-face-attribute 'default nil
+ :height 130
+ :family "Iosevka")
(set-face-attribute 'fixed-pitch nil
- :inherit 'default
:family "Iosevka")
+ (set-face-attribute 'variable-pitch nil
+ :family "Iosevka Etoile")
+
(setq ef-themes-mixed-fonts t
ef-themes-variable-pitch-ui t
- ef-themes-to-toggle '(ef-day ef-bio))
+ ef-themes-to-toggle '(ef-bio ef-day))
(mapc #'disable-theme custom-enabled-themes)
- (load-theme 'ef-day :no-confirm)
+ (load-theme 'ef-bio :no-confirm)
(tool-bar-mode -1)
(set-scroll-bar-mode nil)
(show-paren-mode)
- (put 'narrow-to-region 'disabled nil)
- (put 'narrow-to-page 'disabled nil)
- (put 'suspend-frame 'disabled t)
-
(global-hl-line-mode)
(require 'lin)
(keymap-global-set "C-c l" #'org-store-link)
(keymap-global-set "C-c a" #'org-agenda)
(keymap-global-set "C-c !" #'consult-flymake)
- (keymap-global-set "C-c f" #'fontaine-set-preset)
(keymap-global-set "C-c E" #'elfeed)
(keymap-global-set "C-c G" #'gnus)
(keymap-global-set "C-c M" #'mastodon)
"Pulse current line."
(interactive)
(pulse-momentary-highlight-one-line))
-
- ; (add-to-list 'window-state-change-functions #'esy/pulse-line)
-
#+end_src
** Misc. keybindings
:END:
#+begin_src emacs-lisp
- (defun esy/customize-global-keymap ()
- "Configure the global keymap."
- (require 'consult)
- (require 'consult-imenu)
- (require 'avy)
- (require 'move-dup)
- (require 'embark)
- (keymap-global-unset "s-a")
- (keymap-global-unset "s-d")
- (keymap-global-unset "s-e")
- (keymap-global-unset "s-f")
- (keymap-global-unset "s-g")
- (keymap-global-unset "s-h")
- (keymap-global-unset "s-j")
- (keymap-global-unset "s-k")
- (keymap-global-unset "s-l")
- (keymap-global-unset "s-m")
- (keymap-global-unset "s-o")
- (keymap-global-unset "s-q")
- (keymap-global-unset "s-s")
- (keymap-global-unset "s-t")
- (keymap-global-unset "s-u")
- (keymap-global-unset "s-w")
- (keymap-global-unset "s-x")
- (keymap-global-unset "s-y")
- (keymap-global-unset "s-z")
- (global-set-key [remap kill-region] #'esy/kill-dwim)
- (global-set-key [remap goto-line] #'consult-goto-line)
- (global-set-key [remap suspend-frame] #'zap-up-to-char)
- (global-set-key [remap imenu] #'consult-imenu)
- (global-set-key [remap make-frame] #'move-dup-duplicate-down)
- (global-set-key [remap ns-print-buffer] #'move-dup-duplicate-up)
- ;; (global-set-key (kbd "M-p") #'move-dup-move-lines-up)
- ;; (global-set-key (kbd "M-n") #'move-dup-move-lines-down)
- (global-set-key (kbd "M-#") #'define-word-at-point)
- (global-set-key (kbd "M-o") #'previous-buffer)
- (global-set-key (kbd "M-O") #'next-buffer)
- (global-set-key (kbd "C-,") #'backward-delete-char)
- (global-set-key (kbd "C-.") #'embark-act)
- (global-set-key (kbd "C-;") #'avy-goto-char-timer)
- (global-set-key (kbd "C-s-p") #'esy/present-buffer)
- (global-set-key (kbd "C-s-f") #'toggle-frame-fullscreen)
- (global-set-key (kbd "C-s-l") #'esy/pulse-line))
-
- (add-hook 'after-init-hook #'esy/customize-global-keymap)
+ (keymap-global-unset "s-a")
+ (keymap-global-unset "s-d")
+ (keymap-global-unset "s-e")
+ (keymap-global-unset "s-f")
+ (keymap-global-unset "s-g")
+ (keymap-global-unset "s-h")
+ (keymap-global-unset "s-j")
+ (keymap-global-unset "s-k")
+ (keymap-global-unset "s-l")
+ (keymap-global-unset "s-m")
+ (keymap-global-unset "s-o")
+ (keymap-global-unset "s-q")
+ (keymap-global-unset "s-s")
+ (keymap-global-unset "s-t")
+ (keymap-global-unset "s-u")
+ (keymap-global-unset "s-w")
+ (keymap-global-unset "s-x")
+ (keymap-global-unset "s-y")
+ (keymap-global-unset "s-z")
+ (global-set-key [remap kill-region] #'esy/kill-dwim)
+ (global-set-key [remap goto-line] #'consult-goto-line)
+ (global-set-key [remap suspend-frame] #'zap-up-to-char)
+ (global-set-key [remap imenu] #'consult-imenu)
+ (global-set-key [remap make-frame] #'move-dup-duplicate-down)
+ (global-set-key [remap ns-print-buffer] #'move-dup-duplicate-up)
+ (global-set-key (kbd "M-#") #'define-word-at-point)
+ (global-set-key (kbd "M-o") #'previous-buffer)
+ (global-set-key (kbd "M-O") #'next-buffer)
+ (global-set-key (kbd "C-,") #'backward-delete-char)
+ (global-set-key (kbd "C-.") #'embark-act)
+ (global-set-key (kbd "C-;") #'avy-goto-char-timer)
+ (global-set-key (kbd "C-s-p") #'esy/present-buffer)
+ (global-set-key (kbd "C-s-f") #'toggle-frame-fullscreen)
+ (global-set-key (kbd "C-s-l") #'esy/pulse-line)
#+end_src
** =C-x= keybindings
:END:
#+begin_src emacs-lisp
- (defun esy/customize-ctl-x-map ()
- "Configure the `ctrl-x-map' keymap."
- (keymap-set ctl-x-map "b" #'consult-buffer)
- (keymap-set ctl-x-4-map "b" #'consult-buffer-other-window)
- (keymap-set ctl-x-map "C-b" #'ibuffer)
- (put 'set-goal-column 'disabled nil))
+ (keymap-set ctl-x-map "b" #'consult-buffer)
+ (keymap-set ctl-x-4-map "b" #'consult-buffer-other-window)
+ (keymap-set ctl-x-map "C-b" #'ibuffer)
- (add-hook 'after-init-hook #'esy/customize-ctl-x-map)
- ;; (add-hook 'after-init-hook #'swsw-mode)
+ (put 'set-goal-column 'disabled nil)
+ (put 'narrow-to-region 'disabled nil)
+ (put 'narrow-to-page 'disabled nil)
+ (put 'suspend-frame 'disabled t)
#+end_src
** =M-s= keybindings
:END:
#+begin_src emacs-lisp
- (defun esy/customize-search-map ()
- "Configure the `search-map' keymap."
- (keymap-set search-map "r" #'rg)
- (keymap-set search-map "l" #'rg-literal)
- (keymap-set search-map "b" #'some-button))
-
- (add-hook 'after-init-hook #'esy/customize-search-map)
+ (keymap-set search-map "r" #'rg)
+ (keymap-set search-map "l" #'rg-literal)
+ (keymap-set search-map "b" #'some-button)
#+end_src
* Applications
(vterm arg)))
(with-eval-after-load 'vterm
- (setq vterm-shell "/bin/bash")
- (setq vterm-use-vterm-prompt-detection-method nil)
+ (setq vterm-shell "/bin/zsh"
+ vterm-max-scrollback 2048
+ vterm-kill-buffer-on-exit nil
+ vterm-use-vterm-prompt-detection-method t)
+ (add-to-list 'vterm-tramp-shells '("kubernetes" "/bin/bash"))
(add-hook 'vterm-mode-hook #'esy/vterm-mode-hook-function))
#+end_src
(setq elfeed-feeds
'(
"https://ajroach42.com/feed.xml"
+ "https://emacs.dyerdwelling.family/index.xml"
+ "https://www.typetheoryforall.com/episodes.mp3.rss"
+ "https://www.fsf.org/static/fsforg/rss/news.xml"
"https://amodernist.com/all.atom"
"https://arcology.garden/updates.xml"
"https://atthis.link/rss.xml"
"https://lwn.net/headlines/rss"
"https://maggieappleton.com/rss.xml"
"https://matt-rickard.com/rss"
+ "https://node2.feed43.com/7487052648530856.xml"
"https://njoseph.me/shaarli/feed/atom?"
"https://nullprogram.com/feed/"
"https://olddeuteronomy.github.io/index.xml"
"https://writer13.neocities.org/rss.xml"
"https://www.draketo.de/rss-feed.xml"
"https://www.haskellforall.com/feeds/posts/default"
+ "https://cce.whatthefuck.computer/updates.xml"
"https://xkcd.com/rss.xml"
+ "https://bitspook.in/blog/feed.xml"
+ "https://flower.codes/feed.xml"
)))
#+end_src
:END:
#+begin_src emacs-lisp
- (defun esy/setup-recursive-minibuffers ()
- "Setup recursive minibuffers."
- (require 'mb-depth)
- (setq enable-recursive-minibuffers t)
- (minibuffer-depth-indicate-mode))
-
- (add-hook 'after-init-hook #'esy/setup-recursive-minibuffers)
+ (setq enable-recursive-minibuffers t)
+ (minibuffer-depth-indicate-mode)
#+end_src
** Completions
" ")))
('dabbrev (lambda (_) "… "))))
- (defun esy/setup-completion-at-point ()
- "Setup `completion-at-point'."
- (require 'corfu)
- (require 'corfu-indexed)
- (setq corfu-cycle t
- corfu-margin-formatters '(esy/margin-formatter)
- corfu-indexed-start 1)
- (global-corfu-mode)
- (corfu-indexed-mode 1)
- ;; (global-fancy-dabbrev-mode)
- (add-to-list 'completion-at-point-functions #'esy/dabbrev-capf)
- (add-to-list 'completion-at-point-functions #'esy/file-capf))
-
- (add-hook 'after-init-hook #'esy/setup-completion-at-point)
+ (setq corfu-cycle t
+ corfu-margin-formatters '(esy/margin-formatter)
+ corfu-indexed-start 1)
+ (global-corfu-mode)
+ (corfu-indexed-mode 1)
+ (add-to-list 'completion-at-point-functions #'esy/dabbrev-capf)
+ (add-to-list 'completion-at-point-functions #'esy/file-capf)
#+end_src
*** Minibuffer-based completions
:END:
#+begin_src emacs-lisp
- (defun esy/setup-minibuffer ()
- "setup minibuffer and completions."
- (require 'marginalia)
- (require 'orderless)
- (require 'all-the-icons)
- (require 'all-the-icons-completion)
- (setq read-extended-command-predicate #'command-completion-default-include-p
- completions-format 'one-column
- completion-auto-select nil
- completions-detailed nil
- completion-styles '(orderless partial-completion basic)
- completion-show-help nil
- completions-header-format (propertize "%s candidates:\n"
- 'face 'shadow)
- completion-auto-help 'visual
- completions-max-height 16
- completion-auto-wrap t)
- (define-key minibuffer-local-completion-map
- [remap previous-line]
- #'minibuffer-previous-completion)
- (define-key minibuffer-local-completion-map
- [remap next-line]
- #'minibuffer-next-completion)
- (add-hook 'marginalia-mode-hook
- #'all-the-icons-completion-marginalia-setup)
- (marginalia-mode)
- (add-to-list 'display-buffer-alist
- '("\\*Completions\\*"
- (display-buffer-reuse-window display-buffer-at-bottom)
- (window-parameters . ((mode-line-format . none)))))
- (add-to-list 'all-the-icons-extension-icon-alist
- '("pl" all-the-icons-alltheicon "prolog"
- :height 1.1 :face all-the-icons-lmaroon)))
-
- (add-hook 'after-init-hook #'esy/setup-minibuffer)
+ (setq read-extended-command-predicate #'command-completion-default-include-p
+ completions-format 'one-column
+ completion-auto-select nil
+ completions-detailed nil
+ completion-styles '(orderless partial-completion basic)
+ completion-show-help nil
+ completions-header-format (propertize "%s candidates:\n"
+ 'face 'shadow)
+ completion-auto-help 'visual
+ completions-max-height 16
+ completion-auto-wrap t)
+ (define-key minibuffer-local-completion-map
+ [remap previous-line]
+ #'minibuffer-previous-completion)
+ (define-key minibuffer-local-completion-map
+ [remap next-line]
+ #'minibuffer-next-completion)
+ (add-hook 'marginalia-mode-hook
+ #'all-the-icons-completion-marginalia-setup)
+ (marginalia-mode)
+ (add-to-list 'display-buffer-alist
+ '("\\*Completions\\*"
+ (display-buffer-reuse-window display-buffer-at-bottom)
+ (window-parameters . ((mode-line-format . none)))))
+ (add-to-list 'all-the-icons-extension-icon-alist
+ '("pl" all-the-icons-alltheicon "prolog"
+ :height 1.1 :face all-the-icons-lmaroon))
#+end_src
* Mode-line customizations
:END:
#+begin_src emacs-lisp
- (defvar esy/ping-target "1.1.1.1"
- "Target host to ping with `esy/ping'.")
-
- (defvar esy/ping-buffer "*ping*"
- "Output buffer used by `esy/ping'.")
-
- (defvar esy/ping-count 1
- "Number of pings to emit in `esy/ping'.")
-
- (defvar esy/ping-wait-duration 1
- "Number of seconds to wait for each ping in `esy/ping'.")
-
- (defvar esy/ping-timeout-duration 1
- "Number of seconds to be used as a timeout in `esy/ping'.")
-
- (defvar esy/ping-program-options
- `("-n" "-q"
- "-c" ,(number-to-string esy/ping-count)
- "-i" ,(number-to-string esy/ping-wait-duration)
- "-t" ,(number-to-string esy/ping-timeout-duration))
- "Command line options used in `esy/ping'.")
-
- (defvar esy/ping-program "ping"
- "Command used in `esy/ping'.")
-
- (defvar esy/ping-rtt 0
- "Last ping RTT.")
-
- (defvar esy/ping-start-time 0
- "Last ping RTT.")
-
- (defvar esy/ping-interval 60
- "Interval in seconds to wait between `esy/ping' runs.")
-
- (defun esy/ping-update (proc rtt)
- "Update results of ping process PROC yielding RTT."
- (save-excursion
- (with-current-buffer (process-buffer proc)
- (goto-char (point-max))
- (if rtt
- (insert (format "%d %d" (- (float-time) esy/ping-start-time) rtt))
- (insert (format "%d %d" (- (float-time) esy/ping-start-time) (* 1000 esy/ping-timeout-duration))))
- (newline)))
- (setq esy/ping-rtt rtt)
- (force-mode-line-update t))
-
- (defun esy/ping (&optional report)
- "Ping `esy/ping-target'.
- If REPORT in non-nil, print a message in the echo area with the
- resulting ping RTT."
- (interactive "p")
- (make-process
- :name "Ping"
- :noquery t
- :connection-type 'pipe
- :command `(,esy/ping-program ,esy/ping-target . ,esy/ping-program-options)
- :buffer esy/ping-buffer
- :filter (lambda (proc output)
- (when (string-match "/\\([0-9]+\.[0-9]*\\)/" output)
- (let ((rtt (string-to-number (match-string 1 output))))
- (when report
- (message (format "Ping RTT: %d." rtt)))
- (esy/ping-update proc rtt))))
- :sentinel (lambda (proc event)
- (when (not (string= event "finished\n"))
- (esy/ping-update proc nil)
- (message "Ping failed.")))))
-
- (defun esy/ping-plot ()
- "Plot ping RTT history with gnuplot."
- (interactive)
- (require 'gnuplot)
- (gnuplot-send-string-to-gnuplot "set term dumb\n" 'line)
- (let ((temp (expand-file-name (format "ping_%d" (float-time)) temporary-file-directory))
- (buff (generate-new-buffer esy/ping-buffer)))
- (with-current-buffer esy/ping-buffer
- (copy-to-buffer buff (point-min) (point-max)))
- (with-current-buffer buff
- (write-file temp))
- (gnuplot-send-string-to-gnuplot (format "plot \"%s\"\n" temp) 'line)
- (delete-file temp)))
-
- (defvar esy/ping-mode-line-string-format "RTT: %d"
- "Format string for the modeline to be interpolated the last RTT.")
-
- (defvar esy/ping-timeout-mode-line-string "Ping failed!"
- "String shown in the modeline whenever ping fails.")
-
- (defconst esy/ping-mode-line-local-map
- (make-mode-line-mouse-map 'mouse-1 'esy/ping-plot)
- "Keymap for modeline integration.")
-
- (define-minor-mode esy/ping-mode
- "Toggle background pinging on and off."
- :global t :group 'mode-line
- (setq esy/ping-start-time (float-time))
- (run-with-timer 0 esy/ping-interval #'esy/ping)
- (add-to-list 'global-mode-string '((:eval (propertize
- (if esy/ping-rtt
- (format esy/ping-mode-line-string-format esy/ping-rtt)
- esy/ping-timeout-mode-line-string)
- 'mouse-face
- 'mode-line-highlight
- 'local-map esy/ping-mode-line-local-map))
- " ")))
- (setq display-time-mail-function
- (lambda () nil))
-
+ (setq display-time-mail-function (lambda () nil))
(display-time-mode)
(column-number-mode)
-
- (add-hook 'after-init-hook #'esy/ping-mode)
-#+end_src
-
-** Display battery status in the modeline
-:PROPERTIES:
-:CUSTOM_ID: battery
-:END:
-
-#+begin_src emacs-lisp
- (add-hook 'after-init-hook #'display-battery-mode)
-#+end_src
+ (display-battery-mode)
+ #+end_src
* Text mode and derivatives
:PROPERTIES:
:END:
#+begin_src emacs-lisp
- (defun esy/pdf-tools-install ()
- "Install PDF-Tools on demand."
- (interactive)
- (require 'tex)
- (require 'pdf-tools)
- (require 'pdf-view)
- (pdf-tools-install t)
- (add-hook 'pdf-view-mode-hook #'pdf-view-midnight-minor-mode)
- (setq TeX-view-program-selection '((output-pdf "PDF Tools"))
- TeX-source-correlate-start-server t)
- (add-to-list 'revert-without-query "\\.pdf\\'")
- (add-hook 'TeX-after-compilation-finished-functions
- #'TeX-revert-document-buffer)
- (add-to-list 'auto-mode-alist '("\\.pdf\\'" . pdf-view-mode)))
-
- (add-hook 'after-init-hook #'esy/pdf-tools-install)
+ (pdf-tools-install t)
+ (add-hook 'pdf-view-mode-hook #'pdf-view-midnight-minor-mode)
+ (setq TeX-view-program-selection '((output-pdf "PDF Tools"))
+ TeX-source-correlate-start-server t)
+ (add-to-list 'revert-without-query "\\.pdf\\'")
+ (add-hook 'TeX-after-compilation-finished-functions
+ #'TeX-revert-document-buffer)
+ (add-to-list 'auto-mode-alist '("\\.pdf\\'" . pdf-view-mode))
#+end_src
* Programming
(add-to-list 'rg-custom-type-aliases '("Prolog" . "*.pl *.plt *.pro *.prolog")))
#+end_src
+** Terraform
+:PROPERTIES:
+:CUSTOM_ID: terraform
+:END:
+
+#+begin_src emacs-lisp
+ (use-package terraform-mode
+ :config
+ (setq terraform--resource-name-face font-lock-function-name-face
+ terraform--resource-type-face font-lock-type-face))
+#+end_src
+
* =vc= customizations
:PROPERTIES:
:CUSTOM_ID: vc-follow-symlinks-t
(define-key project-prefix-map "m" #'magit-project-status)))
#+end_src
-* Presentation mode
-:PROPERTIES:
-:CUSTOM_ID: presentation-mode
-:END:
-
-** Minor mode for moving between Org headings in a narrowed buffer
-:PROPERTIES:
-:CUSTOM_ID: org-present
-:END:
-#+begin_src emacs-lisp
- (defun org-present-forward-heading-same-level (arg)
- "Widen, move forward ARG headings, and narrow to subtree."
- (interactive "p" org-mode)
- (org-present-widen-and-narrow #'org-forward-heading-same-level
- `(,arg t)))
-
- (defun org-present-backward-heading-same-level (arg)
- "Widen, move backward ARG headings, and narrow to subtree."
- (interactive "p" org-mode)
- (org-present-widen-and-narrow #'org-backward-heading-same-level
- `(,arg t)))
-
- (defun org-present-next-visible-heading (arg)
- "Widen, move to the next ARG'th heading, and narrow to subtree."
- (interactive "p" org-mode)
- (org-present-widen-and-narrow #'org-next-visible-heading
- `(,arg)))
-
- (defun org-present-previous-visible-heading (arg)
- "Widen, move to the previous ARG'th heading, and narrow to subtree."
- (interactive "p" org-mode)
- (org-present-widen-and-narrow #'org-previous-visible-heading
- `(,arg)))
-
- (defun org-present-up-heading (arg)
- "Widen, move up ARG headings, and narrow to subtree."
- (interactive "p" org-mode)
- (org-present-widen-and-narrow #'outline-up-heading
- `(,arg t)))
-
- (defun org-present-widen-and-narrow (f args)
- "Widen, apply F to ARGS, narrow to subtree and adjust visibility."
- (widen)
- (apply f args)
- (org-narrow-to-subtree)
- (outline-hide-subtree)
- (outline-show-branches)
- (org-show-entry)
- (org-show-children))
-
- (define-minor-mode org-present-mode
- "Minor mode for seamlessly widening and narrowing in `org-mode'.
- When `org-present-mode' is enabled is a buffer, it remaps several
- keybindings which normally invoke common commands that move point
- from one heading to another to, invoke equivalent commands with
- the sole change of widening before applying the command, and
- narrowing to the target subtree after it. This allows for
- presenting Org mode files one heading at a time, by narrowing and
- moving freely between headings like presentation slides, without
- the need to explicitly use `\\[widen]' followed by
- '\\[org-narrow-to-subtree]' in another heading.
-
- The commands currenlty remapped by `org-present-mode' are
- `\\[org-forward-heading-same-level]',
- `\\[org-backward-heading-same-level]',
- `\\[org-next-visible-heading]',
- `\\[org-previous-visible-heading]' and `\\[outline-up-heading]'."
- :init-value nil
- :keymap '(([ remap org-forward-heading-same-level ]
- . org-present-forward-heading-same-level )
- ([ remap org-backward-heading-same-level ]
- . org-present-backward-heading-same-level)
- ([ remap org-next-visible-heading ]
- . org-present-next-visible-heading )
- ([ remap outline-next-visible-heading ]
- . org-present-next-visible-heading )
- ([ remap org-previous-visible-heading ]
- . org-present-previous-visible-heading )
- ([ remap outline-previous-visible-heading ]
- . org-present-previous-visible-heading )
- ([ remap outline-up-heading ]
- . org-present-up-heading )))
-#+end_src
-
* =shell= customizations
:PROPERTIES:
:CUSTOM_ID: shell
(with-eval-after-load 'comint
(keymap-set comint-mode-map "C-c C-q" #'esy/log-buffer))
-
#+end_src
* Misc. settings
:END:
#+begin_src emacs-lisp
- (defun esy/setup-misc ()
- "Catch-all for miscellaneous settings that can wait for `after-init-hook'."
- (require 'autorevert)
- (require 'whitespace-cleanup-mode)
- (setq global-auto-revert-non-file-buffers t
- auto-revert-verbose nil
- query-about-changed-file t)
- (global-auto-revert-mode)
- (global-whitespace-cleanup-mode 1))
-
- (add-hook 'after-init-hook #'esy/setup-misc)
+ (setq global-auto-revert-non-file-buffers t
+ auto-revert-verbose nil
+ query-about-changed-file t)
+ (global-auto-revert-mode)
+ (global-whitespace-cleanup-mode 1)
#+end_src
** Enable ~embark-consult~
:PROPERTIES:
:CUSTOM_ID: repeat-transpose-lines
:END:
+
#+begin_src emacs-lisp
(defvar-keymap transpose-lines-repeat-map
:doc "Repeat map for \\[transpose-lines]"
:PROPERTIES:
:CUSTOM_ID: consult-xref
:END:
+
#+begin_src emacs-lisp
(with-eval-after-load 'xref
(setq xref-show-definitions-function #'consult-xref