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
|
||||
(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'.
|
||||
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
|
||||
Version 2015-08-22"
|
||||
(interactive)
|
||||
(if (use-region-p)
|
||||
(progn
|
||||
(kill-new (buffer-substring (region-beginning) (region-end)))
|
||||
(message "Text selection copied."))
|
||||
(progn
|
||||
(kill-new (buffer-string))
|
||||
(message "Buffer content copied."))))
|
||||
(interactive)
|
||||
(if (use-region-p)
|
||||
(progn
|
||||
(kill-new (buffer-substring (region-beginning) (region-end)))
|
||||
(message "Text selection copied."))
|
||||
(progn
|
||||
(kill-new (buffer-string))
|
||||
(message "Buffer content copied."))))
|
||||
|
||||
;; Cut all or text selection
|
||||
(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'.
|
||||
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
|
||||
Version 2015-08-22"
|
||||
(interactive)
|
||||
(if (use-region-p)
|
||||
(progn
|
||||
(kill-new (buffer-substring (region-beginning) (region-end)))
|
||||
(delete-region (region-beginning) (region-end)))
|
||||
(progn
|
||||
(kill-new (buffer-string))
|
||||
(delete-region (point-min) (point-max)))))
|
||||
(interactive)
|
||||
(if (use-region-p)
|
||||
(progn
|
||||
(kill-new (buffer-substring (region-beginning) (region-end)))
|
||||
(delete-region (region-beginning) (region-end)))
|
||||
(progn
|
||||
(kill-new (buffer-string))
|
||||
(delete-region (point-min) (point-max)))))
|
||||
|
||||
;; open URL in Firefox
|
||||
(defun browse-host-firefox (url &rest ignored)
|
||||
"Browse URL with the host's Firefox using distrobox-exec."
|
||||
(interactive "sURL: ")
|
||||
(shell-command (concat "firefox " url)))
|
||||
;; open URL in Firefox/LibreWolf
|
||||
(defun browse-host-web (url &rest ignored)
|
||||
"Browse URL with Firefox/LibreWolf"
|
||||
(interactive "sURL: ")
|
||||
(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
|
||||
(setq select-enable-clipboard t)
|
||||
@ -147,23 +147,23 @@ Version 2015-08-22"
|
||||
|
||||
;; Smart home key
|
||||
(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.
|
||||
If point was already at that position, move point to beginning of line."
|
||||
(interactive "^")
|
||||
(let ((oldpos (point)))
|
||||
(back-to-indentation)
|
||||
(and (= oldpos (point))
|
||||
(beginning-of-line))))
|
||||
(interactive "^")
|
||||
(let ((oldpos (point)))
|
||||
(back-to-indentation)
|
||||
(and (= oldpos (point))
|
||||
(beginning-of-line))))
|
||||
|
||||
(global-set-key (kbd "<home>") 'smart-beginning-of-line)
|
||||
(global-set-key (kbd "<end>") 'end-of-line)
|
||||
|
||||
;; Autoformat on save
|
||||
(setq +format-on-save-enabled-modes
|
||||
'(emacs-lisp-mode
|
||||
python-mode))
|
||||
'(emacs-lisp-mode
|
||||
python-mode))
|
||||
|
||||
;; 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
|
||||
(setq org-tag-alist (quote (("@archiving" .?a)
|
||||
("@calendar" .?d)
|
||||
("@calendar" .?t)
|
||||
("@config" . ?c)
|
||||
("@devel" . ?d)
|
||||
("@errand" . ?e)
|
||||
("@fedora" . ?f)
|
||||
("@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
|
||||
(add-hook! python-mode-hook
|
||||
(setq python-shell-interpreter "bpython"))
|
||||
(setq python-shell-interpreter "bpython"))
|
||||
|
||||
;; enable elpy
|
||||
(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)
|
||||
|
||||
(defun centaur-tabs-buffer-groups ()
|
||||
"`centaur-tabs-buffer-groups' control buffers' group rules.
|
||||
(defun my-centaur-tabs-buffer-groups ()
|
||||
"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'
|
||||
`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))))))
|
||||
(setq centaur-tabs-buffer-groups-function 'my-centaur-tabs-buffer-groups)
|
||||
|
||||
;; prevent access to specified buffers
|
||||
(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 "*help" name)
|
||||
(string-prefix-p "*Help" name)
|
||||
(string-prefix-p "*vterminal" name)
|
||||
|
||||
;; Buffer is not a magit buffer.
|
||||
(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))
|
||||
(elfeed-protocol-enable)
|
||||
(setq elfeed-protocol-fever-update-unread-only t)
|
||||
(setq elfeed-feeds (list
|
||||
(list "fever+https://hyperreal@rss.hyperreal.coffee"
|
||||
:api-url "https://rss.hyperreal.coffee/api/fever.php"
|
||||
:password (shell-command-output-string "pass show freshrss/hyperreal"))))
|
||||
(setq elfeed-protocol-feeds '(("fever+https://admin@rss.hyperreal.coffee"
|
||||
:api-url "https://rss.hyperreal.coffee/fever/"
|
||||
:password (shell-command-output-string "pass show miniflux/admin"))))
|
||||
|
||||
|
||||
;; ;; 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
|
||||
;; use 'M-x doom/reload'.
|
||||
|
||||
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;(package! some-package)
|
||||
(package! artbollocks-mode :recipe
|
||||
(:host nil :repo "https://github.com/sachac/artbollocks-mode"))
|
||||
;(package! some-package)
|
||||
(package! artbollocks-mode
|
||||
:recipe (:host github :repo "sachac/artbollocks-mode"))
|
||||
(package! autothemer)
|
||||
(package! catppuccin-theme)
|
||||
(package! elfeed)
|
||||
@ -27,6 +26,7 @@
|
||||
(package! just-mode)
|
||||
(package! justl)
|
||||
(package! license-templates)
|
||||
(package! multi-vterm)
|
||||
(package! nov)
|
||||
(package! org-roam)
|
||||
(package! org-superstar)
|
||||
|
Loading…
Reference in New Issue
Block a user