This commit is contained in:
Jeffrey Serio 2023-10-13 17:26:17 -05:00
parent e3106c1e70
commit d88b5ba312
2 changed files with 209 additions and 80 deletions

281
config.el
View File

@ -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))))

View File

@ -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)