mirror of
https://codeberg.org/hyperreal/doom-emacs-config
synced 2024-11-25 11:53:42 +01:00
Update
This commit is contained in:
parent
e3106c1e70
commit
d88b5ba312
281
config.el
281
config.el
@ -100,41 +100,41 @@ Source: https://emacs.stackexchange.com/a/21906"
|
|||||||
|
|
||||||
;; Copy all or text selection
|
;; Copy all or text selection
|
||||||
(defun xah-copy-all-or-region ()
|
(defun xah-copy-all-or-region ()
|
||||||
"Put the whole buffer content to `kill-ring', or text selection if there's one.
|
"Put the whole buffer content to `kill-ring', or text selection if there's one.
|
||||||
Respects `narrow-to-region'.
|
Respects `narrow-to-region'.
|
||||||
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
|
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
|
||||||
Version 2015-08-22"
|
Version 2015-08-22"
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (use-region-p)
|
(if (use-region-p)
|
||||||
(progn
|
(progn
|
||||||
(kill-new (buffer-substring (region-beginning) (region-end)))
|
(kill-new (buffer-substring (region-beginning) (region-end)))
|
||||||
(message "Text selection copied."))
|
(message "Text selection copied."))
|
||||||
(progn
|
(progn
|
||||||
(kill-new (buffer-string))
|
(kill-new (buffer-string))
|
||||||
(message "Buffer content copied."))))
|
(message "Buffer content copied."))))
|
||||||
|
|
||||||
;; Cut all or text selection
|
;; Cut all or text selection
|
||||||
(defun xah-cut-all-or-region ()
|
(defun xah-cut-all-or-region ()
|
||||||
"Cut the whole buffer content to `kill-ring', or text selection if there's one.
|
"Cut the whole buffer content to `kill-ring', or text selection if there's one.
|
||||||
Respects `narrow-to-region'.
|
Respects `narrow-to-region'.
|
||||||
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
|
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
|
||||||
Version 2015-08-22"
|
Version 2015-08-22"
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (use-region-p)
|
(if (use-region-p)
|
||||||
(progn
|
(progn
|
||||||
(kill-new (buffer-substring (region-beginning) (region-end)))
|
(kill-new (buffer-substring (region-beginning) (region-end)))
|
||||||
(delete-region (region-beginning) (region-end)))
|
(delete-region (region-beginning) (region-end)))
|
||||||
(progn
|
(progn
|
||||||
(kill-new (buffer-string))
|
(kill-new (buffer-string))
|
||||||
(delete-region (point-min) (point-max)))))
|
(delete-region (point-min) (point-max)))))
|
||||||
|
|
||||||
;; open URL in Firefox
|
;; open URL in Firefox/LibreWolf
|
||||||
(defun browse-host-firefox (url &rest ignored)
|
(defun browse-host-web (url &rest ignored)
|
||||||
"Browse URL with the host's Firefox using distrobox-exec."
|
"Browse URL with Firefox/LibreWolf"
|
||||||
(interactive "sURL: ")
|
(interactive "sURL: ")
|
||||||
(shell-command (concat "firefox " url)))
|
(shell-command (concat "librewolf " url)))
|
||||||
|
|
||||||
(setq browse-url-browser-function 'browse-host-firefox)
|
(setq browse-url-browser-function 'browse-host-web)
|
||||||
|
|
||||||
;; after copy Ctrl+c in Linux X11, you can paste by `yank' in emacs
|
;; after copy Ctrl+c in Linux X11, you can paste by `yank' in emacs
|
||||||
(setq select-enable-clipboard t)
|
(setq select-enable-clipboard t)
|
||||||
@ -147,23 +147,23 @@ Version 2015-08-22"
|
|||||||
|
|
||||||
;; Smart home key
|
;; Smart home key
|
||||||
(defun smart-beginning-of-line ()
|
(defun smart-beginning-of-line ()
|
||||||
"Move point to first non-whitespace character or beginning-of-line.
|
"Move point to first non-whitespace character or beginning-of-line.
|
||||||
|
|
||||||
Move point to the first non-whitespace character on this line.
|
Move point to the first non-whitespace character on this line.
|
||||||
If point was already at that position, move point to beginning of line."
|
If point was already at that position, move point to beginning of line."
|
||||||
(interactive "^")
|
(interactive "^")
|
||||||
(let ((oldpos (point)))
|
(let ((oldpos (point)))
|
||||||
(back-to-indentation)
|
(back-to-indentation)
|
||||||
(and (= oldpos (point))
|
(and (= oldpos (point))
|
||||||
(beginning-of-line))))
|
(beginning-of-line))))
|
||||||
|
|
||||||
(global-set-key (kbd "<home>") 'smart-beginning-of-line)
|
(global-set-key (kbd "<home>") 'smart-beginning-of-line)
|
||||||
(global-set-key (kbd "<end>") 'end-of-line)
|
(global-set-key (kbd "<end>") 'end-of-line)
|
||||||
|
|
||||||
;; Autoformat on save
|
;; Autoformat on save
|
||||||
(setq +format-on-save-enabled-modes
|
(setq +format-on-save-enabled-modes
|
||||||
'(emacs-lisp-mode
|
'(emacs-lisp-mode
|
||||||
python-mode))
|
python-mode))
|
||||||
|
|
||||||
;; UTF-8
|
;; UTF-8
|
||||||
(prefer-coding-system 'utf-8)
|
(prefer-coding-system 'utf-8)
|
||||||
@ -231,8 +231,9 @@ If point was already at that position, move point to beginning of line."
|
|||||||
|
|
||||||
;; org-mode tags
|
;; org-mode tags
|
||||||
(setq org-tag-alist (quote (("@archiving" .?a)
|
(setq org-tag-alist (quote (("@archiving" .?a)
|
||||||
("@calendar" .?d)
|
("@calendar" .?t)
|
||||||
("@config" . ?c)
|
("@config" . ?c)
|
||||||
|
("@devel" . ?d)
|
||||||
("@errand" . ?e)
|
("@errand" . ?e)
|
||||||
("@fedora" . ?f)
|
("@fedora" . ?f)
|
||||||
("@homelab" . ?l)
|
("@homelab" . ?l)
|
||||||
@ -368,7 +369,7 @@ If point was already at that position, move point to beginning of line."
|
|||||||
|
|
||||||
;; set bpython as python shell interpreter
|
;; set bpython as python shell interpreter
|
||||||
(add-hook! python-mode-hook
|
(add-hook! python-mode-hook
|
||||||
(setq python-shell-interpreter "bpython"))
|
(setq python-shell-interpreter "bpython"))
|
||||||
|
|
||||||
;; enable elpy
|
;; enable elpy
|
||||||
(elpy-enable)
|
(elpy-enable)
|
||||||
@ -457,45 +458,32 @@ If point was already at that position, move point to beginning of line."
|
|||||||
|
|
||||||
(setq centaur-tabs-buffer-show-groups t)
|
(setq centaur-tabs-buffer-show-groups t)
|
||||||
|
|
||||||
(defun centaur-tabs-buffer-groups ()
|
(defun my-centaur-tabs-buffer-groups ()
|
||||||
"`centaur-tabs-buffer-groups' control buffers' group rules.
|
"Create centaur-tabs groups."
|
||||||
|
(cond
|
||||||
|
((string-equal "*" (substring (buffer-name) 0 1))
|
||||||
|
'("Emacs"))
|
||||||
|
((eq major-mode 'erc-mode)
|
||||||
|
'("ERC"))
|
||||||
|
((memq major-mode '(org-mode
|
||||||
|
org-agenda-clockreport-mode
|
||||||
|
org-src-mode
|
||||||
|
org-beamer-mode
|
||||||
|
org-indent-mode
|
||||||
|
org-bullets-mode
|
||||||
|
org-agenda-log-mode
|
||||||
|
diary-mode
|
||||||
|
org-roam-mode))
|
||||||
|
'("OrgMode"))
|
||||||
|
((memq major-mode '(dired-mode))
|
||||||
|
'("Dired"))
|
||||||
|
((memq major-mode '(helpful-mode
|
||||||
|
help-mode))
|
||||||
|
'("Help"))
|
||||||
|
((memq major-mode '(vterm-mode))
|
||||||
|
'("VTerm"))))
|
||||||
|
|
||||||
Group centaur-tabs with mode if buffer is derived from `eshell-mode'
|
(setq centaur-tabs-buffer-groups-function 'my-centaur-tabs-buffer-groups)
|
||||||
`emacs-lisp-mode' `dired-mode' `org-mode' `magit-mode'
|
|
||||||
All buffer names starting with * will group to \"Emacs\".
|
|
||||||
Other buffer groups by `centaur-tabs-get-group-name' wit project name."
|
|
||||||
(list
|
|
||||||
(cond
|
|
||||||
((or (string-equal "*" (substring (buffer-name) 0 1))
|
|
||||||
(memq major-mode '(magit-process-mode
|
|
||||||
magit-status-mode
|
|
||||||
magit-diff-mode
|
|
||||||
magit-log-mode
|
|
||||||
magit-file-mode
|
|
||||||
magit-blob-mode
|
|
||||||
magit-blame-mode
|
|
||||||
)))
|
|
||||||
"Emacs")
|
|
||||||
((derived-mode-p 'prog-mode)
|
|
||||||
"Editing")
|
|
||||||
((derived-mode-p 'dired-mode)
|
|
||||||
"Dired")
|
|
||||||
((memq major-mode '(helpful-mode
|
|
||||||
help-mode))
|
|
||||||
"Help")
|
|
||||||
((memq major-mode '(org-mode
|
|
||||||
org-agenda-clockreport-mode
|
|
||||||
org-src-mode
|
|
||||||
org-agenda-mode
|
|
||||||
org-beamer-mode
|
|
||||||
org-indent-mode
|
|
||||||
org-bullets-mode
|
|
||||||
org-agenda-log-mode
|
|
||||||
diary-mode
|
|
||||||
org-roam-mode))
|
|
||||||
"OrgMode")
|
|
||||||
(t
|
|
||||||
(centaur-tabs-get-group-name (current-buffer))))))
|
|
||||||
|
|
||||||
;; prevent access to specified buffers
|
;; prevent access to specified buffers
|
||||||
(defun centaur-tabs-hide-tab (x)
|
(defun centaur-tabs-hide-tab (x)
|
||||||
@ -512,6 +500,7 @@ Other buffer groups by `centaur-tabs-get-group-name' wit project name."
|
|||||||
(string-prefix-p "*tramp" name)
|
(string-prefix-p "*tramp" name)
|
||||||
(string-prefix-p "*help" name)
|
(string-prefix-p "*help" name)
|
||||||
(string-prefix-p "*Help" name)
|
(string-prefix-p "*Help" name)
|
||||||
|
(string-prefix-p "*vterminal" name)
|
||||||
|
|
||||||
;; Buffer is not a magit buffer.
|
;; Buffer is not a magit buffer.
|
||||||
(and (string-prefix-p "magit" name)
|
(and (string-prefix-p "magit" name)
|
||||||
@ -524,7 +513,147 @@ Other buffer groups by `centaur-tabs-get-group-name' wit project name."
|
|||||||
(setq elfeed-protocol-enabled-protocols '(fever))
|
(setq elfeed-protocol-enabled-protocols '(fever))
|
||||||
(elfeed-protocol-enable)
|
(elfeed-protocol-enable)
|
||||||
(setq elfeed-protocol-fever-update-unread-only t)
|
(setq elfeed-protocol-fever-update-unread-only t)
|
||||||
(setq elfeed-feeds (list
|
(setq elfeed-protocol-feeds '(("fever+https://admin@rss.hyperreal.coffee"
|
||||||
(list "fever+https://hyperreal@rss.hyperreal.coffee"
|
:api-url "https://rss.hyperreal.coffee/fever/"
|
||||||
:api-url "https://rss.hyperreal.coffee/api/fever.php"
|
:password (shell-command-output-string "pass show miniflux/admin"))))
|
||||||
:password (shell-command-output-string "pass show freshrss/hyperreal"))))
|
|
||||||
|
|
||||||
|
;; ;; elpher
|
||||||
|
|
||||||
|
(setq elpher-certificate-directory "~/sync/elpher/certs")
|
||||||
|
(setq elpher-default-url-type "gemini")
|
||||||
|
|
||||||
|
|
||||||
|
;;;; vterm
|
||||||
|
|
||||||
|
(setq vterm-kill-buffer-on-exit t)
|
||||||
|
(setq vterm-always-compile-module t)
|
||||||
|
(setq multi-vterm-buffer-name "localhost")
|
||||||
|
|
||||||
|
(defun hyperreal/create-mvterm-buffer ()
|
||||||
|
"Create new multi-vterm buffer and rename it to localhost<i>
|
||||||
|
and switch to it."
|
||||||
|
(interactive)
|
||||||
|
(let ((index 1)
|
||||||
|
(buffer-name "localhost"))
|
||||||
|
;; Find the next available index number
|
||||||
|
(while (get-buffer (format "%s<%d>" buffer-name index))
|
||||||
|
(setq index (1+ index)))
|
||||||
|
(multi-vterm)
|
||||||
|
(setq mvterm-buffer-name (format "%s<%d>" buffer-name index))
|
||||||
|
(rename-buffer mvterm-buffer-name)
|
||||||
|
(message "Created and started: %s" mvterm-buffer-name)
|
||||||
|
(switch-to-buffer mvterm-buffer-name)))
|
||||||
|
|
||||||
|
(defun hyperreal/setup-mvterm ()
|
||||||
|
"Create a set of vterm buffers for my terminal setup."
|
||||||
|
(interactive)
|
||||||
|
(require 'vterm)
|
||||||
|
(let ((buffer-command-pairs '(("journald" . "sudo journalctl -f")
|
||||||
|
("htop" . "htop")
|
||||||
|
("nexus" . "autossh -M 0 jas@nexus.local")
|
||||||
|
("apocrypha" . "autossh -M 0 jas@apocrypha.local")
|
||||||
|
("rockpro64" . "autossh -M 0 dietpi@rockpro64.local")
|
||||||
|
("orangepi5" . "autossh -M 0 dietpi@orangepi5.local"))))
|
||||||
|
(dolist (pair buffer-command-pairs)
|
||||||
|
(let ((buffer-name (car pair))
|
||||||
|
(command (cdr pair)))
|
||||||
|
;; Check if buffer exists
|
||||||
|
(unless (get-buffer buffer-name)
|
||||||
|
(multi-vterm)
|
||||||
|
(rename-buffer buffer-name)
|
||||||
|
;; Send the command to the vterm buffer
|
||||||
|
(vterm-send-string command)
|
||||||
|
(vterm-send-return)
|
||||||
|
(message "Created and started: %s" buffer-name))))
|
||||||
|
;; Create and switch to default buffer
|
||||||
|
(hyperreal/create-mvterm-buffer)
|
||||||
|
(centaur-tabs-mode)))
|
||||||
|
|
||||||
|
(defun hyperreal/kill-all-vterms ()
|
||||||
|
"Kill all vterm buffers (do not ask for confirmation)."
|
||||||
|
(interactive)
|
||||||
|
(let ((kill-buffer-query-functions nil))
|
||||||
|
(dolist (buffer (buffer-list))
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(when (eq major-mode 'vterm-mode)
|
||||||
|
(kill-buffer buffer)))))
|
||||||
|
(message "All vterm buffers killed."))
|
||||||
|
|
||||||
|
;;;; ERC
|
||||||
|
|
||||||
|
(setq erc-timestamp-format "[%H:%M:%S] ")
|
||||||
|
(setq erc-insert-timestamp-function 'erc-insert-timestamp-left)
|
||||||
|
(setq erc-fill-prefix " ")
|
||||||
|
(setq erc-fill-function 'erc-fill-static)
|
||||||
|
(setq erc-hide-list '("JOIN" "PART" "QUIT"))
|
||||||
|
|
||||||
|
(defun tilde-chat ()
|
||||||
|
"Connect to irc.tilde.chat."
|
||||||
|
(interactive)
|
||||||
|
(setq erc-email-userid "hyperreal/irc.tilde.chat")
|
||||||
|
(erc-tls :server "chat.sr.ht"
|
||||||
|
:port 6697
|
||||||
|
:nick "hyperreal"
|
||||||
|
:password (shell-command-output-string "pass show chat.sr.ht/hyperreal")
|
||||||
|
:full-name "Jeffrey Serio")
|
||||||
|
(centaur-tabs-mode))
|
||||||
|
|
||||||
|
(defun libera-chat ()
|
||||||
|
"Connect to irc.libera.chat."
|
||||||
|
(interactive)
|
||||||
|
(setq erc-email-userid "hyperreal/irc.libera.chat")
|
||||||
|
(erc-tls :server "chat.sr.ht"
|
||||||
|
:port 6697
|
||||||
|
:nick "hyperreal"
|
||||||
|
:password (shell-command-output-string "pass show chat.sr.ht/hyperreal")
|
||||||
|
:full-name "Jeffrey Serio")
|
||||||
|
(centaur-tabs-mode))
|
||||||
|
|
||||||
|
;; nickcolor funcs lifted from EmacsWiki
|
||||||
|
(defmacro unpack-color (color red green blue &rest body)
|
||||||
|
`(let ((,red (car ,color))
|
||||||
|
(,green (car (cdr ,color)))
|
||||||
|
(,blue (car (cdr (cdr ,color)))))
|
||||||
|
,@body))
|
||||||
|
|
||||||
|
(defun rgb-to-html (color)
|
||||||
|
(unpack-color color red green blue
|
||||||
|
(concat "#" (format "%02x%02x%02x" red green blue))))
|
||||||
|
|
||||||
|
(defun hexcolor-luminance (color)
|
||||||
|
(unpack-color color red green blue
|
||||||
|
(floor (+ (* 0.299 red) (* 0.587 green) (* 0.114 blue)))))
|
||||||
|
|
||||||
|
(defun invert-color (color)
|
||||||
|
(unpack-color color red green blue
|
||||||
|
`(,(- 255 red) ,(- 255 green) ,(- 255 blue))))
|
||||||
|
|
||||||
|
(defun erc-get-color-for-nick (nick dark)
|
||||||
|
(let* ((hash (md5 (downcase nick)))
|
||||||
|
(red (mod (string-to-number (substring hash 0 10) 16) 256))
|
||||||
|
(blue (mod (string-to-number (substring hash 10 20) 16) 256))
|
||||||
|
(green (mod (string-to-number (substring hash 20 30) 16) 256))
|
||||||
|
(color `(,red ,green ,blue)))
|
||||||
|
(rgb-to-html (if (if dark (< (hexcolor-luminance color) 85)
|
||||||
|
(> (hexcolor-luminance color) 170))
|
||||||
|
(invert-color color)
|
||||||
|
color))))
|
||||||
|
|
||||||
|
(defun erc-highlight-nicknames ()
|
||||||
|
(save-excursion
|
||||||
|
(goto-char (point-min))
|
||||||
|
(while (re-search-forward "\\w+" nil t)
|
||||||
|
(let* ((bounds (bounds-of-thing-at-point 'symbol))
|
||||||
|
(nick (buffer-substring-no-properties (car bounds) (cdr bounds))))
|
||||||
|
(when (erc-get-server-user nick)
|
||||||
|
(put-text-property
|
||||||
|
(car bounds) (cdr bounds) 'face
|
||||||
|
(cons 'foreground-color (erc-get-color-for-nick nick 't))))))))
|
||||||
|
|
||||||
|
(add-hook 'erc-insert-modify-hook 'erc-highlight-nicknames)
|
||||||
|
|
||||||
|
;; set the column width based on window width
|
||||||
|
(add-hook 'window-configuration-change-hook
|
||||||
|
#'(lambda ()
|
||||||
|
(setq erc-fill-column (- (window-width) 2))))
|
||||||
|
@ -5,11 +5,10 @@
|
|||||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
;; on the command line, then restart Emacs for the changes to take effect -- or
|
||||||
;; use 'M-x doom/reload'.
|
;; use 'M-x doom/reload'.
|
||||||
|
|
||||||
|
|
||||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||||
;(package! some-package)
|
;(package! some-package)
|
||||||
(package! artbollocks-mode :recipe
|
(package! artbollocks-mode
|
||||||
(:host nil :repo "https://github.com/sachac/artbollocks-mode"))
|
:recipe (:host github :repo "sachac/artbollocks-mode"))
|
||||||
(package! autothemer)
|
(package! autothemer)
|
||||||
(package! catppuccin-theme)
|
(package! catppuccin-theme)
|
||||||
(package! elfeed)
|
(package! elfeed)
|
||||||
@ -27,6 +26,7 @@
|
|||||||
(package! just-mode)
|
(package! just-mode)
|
||||||
(package! justl)
|
(package! justl)
|
||||||
(package! license-templates)
|
(package! license-templates)
|
||||||
|
(package! multi-vterm)
|
||||||
(package! nov)
|
(package! nov)
|
||||||
(package! org-roam)
|
(package! org-roam)
|
||||||
(package! org-superstar)
|
(package! org-superstar)
|
||||||
|
Loading…
Reference in New Issue
Block a user