(use-feature exwm-input
:demand
- :after exwm-workspace
+ :after exwm
:config
(defun b/exwm-ws-prev-index ()
"Return the index for the previous EXWM workspace, wrapping
;; shorten 'C-c C-q' to 'C-q'
(define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key)
- (setq exwm-input-global-keys
+ (setq exwm-workspace-number 4
+ exwm-input-global-keys
`(([?\s-R] . exwm-reset)
([?\s-\\] . exwm-workspace-switch)
- ([?\s-\s] . (lambda (command)
- (interactive
- (list (read-shell-command "➜ ")))
- (start-process-shell-command
- command nil command)))
+ ([?\s-\s] . dmenu)
+ ([?\S-\s-\s] . (lambda (command)
+ (interactive
+ (list (read-shell-command "➜ ")))
+ (start-process-shell-command
+ command nil command)))
([s-return] . (lambda ()
(interactive)
(start-process "" nil "urxvt")))
(interactive)
(start-process-shell-command
"rofi-pass" nil "rofi-pass")))
+ ([?\s-h] . windmove-left)
+ ([?\s-j] . windmove-down)
+ ([?\s-k] . windmove-up)
+ ([?\s-l] . windmove-right)
+ ([?\s-H] . windmove-swap-states-left)
+ ([?\s-J] . windmove-swap-states-down)
+ ([?\s-K] . windmove-swap-states-up)
+ ([?\s-L] . windmove-swap-states-right)
+ ([?\M-\s-h] . shrink-window-horizontally)
+ ([?\M-\s-l] . enlarge-window-horizontally)
+ ([?\M-\s-k] . shrink-window)
+ ([?\M-\s-j] . enlarge-window)
([?\s-\[] . (lambda ()
(interactive)
(exwm-workspace-switch-create
(number-sequence 0 (1- exwm-workspace-number)))
([?\s-t] . exwm-floating-toggle-floating)
([?\s-f] . exwm-layout-toggle-fullscreen)
- ([?\s-w] . (lambda ()
+ ([?\s-W] . (lambda ()
(interactive)
(kill-buffer (current-buffer))))
- ([?\s-q] . (lambda ()
+ ([?\s-Q] . (lambda ()
(interactive)
(exwm-manage--kill-client)))
([?\s-\'] . (lambda ()
([XF86ScreenSaver] .
(lambda ()
(interactive)
- (start-process "" nil "dm-tool" "lock")))))
+ (start-process "" nil "dm-tool" "lock")))
+ ([\s-XF86Back] . previous-buffer)
+ ([\s-XF86Forward] . next-buffer)))
;; Line-editing shortcuts
(setq exwm-input-simulation-keys
([?\C-y] . [?\C-v])
([?\M-d] . [C-S-right ?\C-x])
([?\M-\d] . [C-S-left ?\C-x])
- ;; search
+ ;; window
+ ([?\s-w] . [?\C-w])
+ ([?\s-q] . [?\C-q])
+ ;; misc
([?\C-s] . [?\C-f])
- ;; escape
+ ([?\s-s] . [?\C-s])
([?\C-g] . [escape]))))
(use-feature exwm-manage
(exwm-manage-finish . (lambda ()
(when exwm-class-name
(cond
- ((string= exwm-class-name "URxvt")
- (exwm-input-set-local-simulation-keys
- nil))
((string= exwm-class-name "Abrowser")
(exwm-input-set-local-simulation-keys
`(,@exwm-input-simulation-keys
- ([?\C-\S-d] . [?\C-d])
- ([?\C-q] . [?\C-w])
- ([?\s-q] . [?\C-q])))))))))
+ ([?\C-\S-d] . [?\C-d]))))
+ ((string= exwm-class-name "URxvt")
+ (exwm-input-set-local-simulation-keys
+ '(([?\C-c ?\C-c] . [?\C-c])
+ ([?\C-c ?\C-u] . [?\C-u]))))
+ ((string= exwm-class-name "Zathura")
+ (exwm-input-set-local-simulation-keys
+ '(([?\C-p] . [C-up])
+ ([?\C-n] . [C-down])))))))))
(use-feature exwm-randr
:demand
:config
(exwm-systemtray-enable))
-(use-feature exwm-workspace
+(use-feature exwm-workspace)
+
+(use-package exwm-edit
:demand
- :after exwm
- :custom
- (exwm-workspace-number 4))
+ :after exwm)
;; use the org-plus-contrib package to get the whole deal
(use-package org-plus-contrib)
:hook ((tex-mode . auto-fill-mode)
(tex-mode . flyspell-mode)))
+(use-feature george-mode
+ :straight (:host nil :repo "https://git.shemshak.org/amin/george-mode")
+ :mode "\\.grg\\'")
+
\f
;;; Theme
(load-theme 'tangomod t)
(use-package smart-mode-line
+ :disabled
:commands (sml/apply-theme)
:demand
:config
(use-package doom-themes)
+(use-package solarized-theme
+ :disabled
+ :config
+ (load-theme 'solarized-light t))
+
+(use-package moody
+ :demand
+ :config
+ (setq x-underline-at-descent-line t)
+ (let ((line (face-attribute 'mode-line :underline)))
+ (set-face-attribute 'mode-line nil :overline line)
+ (set-face-attribute 'mode-line-inactive nil :overline line)
+ (set-face-attribute 'mode-line-inactive nil :underline line)
+ (set-face-attribute 'mode-line nil :box nil)
+ (set-face-attribute 'mode-line-inactive nil :box nil)
+ (set-face-attribute 'mode-line-inactive nil :background "#eeeeee")) ; d3d7cf
+ (moody-replace-mode-line-buffer-identification)
+ (moody-replace-vc-mode))
+
(defvar b/org-mode-font-lock-keywords
'(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)"
(1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive
(3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind
- (4 '(:foreground "#c5c8c6") t)))) ; title
+ (4 '(:foreground "#c5c8c6") t))) ; title
+ "For use with the `doom-tomorrow-night' theme.")
(defun b/lights-on ()
"Enable my favourite light theme."
(interactive)
(mapc #'disable-theme custom-enabled-themes)
(load-theme 'tangomod t)
- (sml/apply-theme 'automatic)
+ ;; (sml/apply-theme 'automatic)
(font-lock-remove-keywords
'org-mode b/org-mode-font-lock-keywords)
(exwm-systemtray--refresh))
"Go dark."
(interactive)
(mapc #'disable-theme custom-enabled-themes)
- (load-theme 'doom-tomorrow-night t)
- (sml/apply-theme 'automatic)
+ (load-theme 'doom-one t)
+ ;; (sml/apply-theme 'automatic)
(font-lock-add-keywords
'org-mode b/org-mode-font-lock-keywords t)
(exwm-systemtray--refresh))
:config (minions-mode))
(use-package dmenu
- :disabled
:custom
- (dmenu-history-size 0)
(dmenu-prompt-string "run: ")
(dmenu-save-file (b/var "dmenu-items")))
+(use-package eosd
+ ;; TODO: fix build by properly building the eosd-pixbuf.c module
+ ;; e.g. see https://github.com/raxod502/straight.el/issues/386
+ :disabled
+ :straight (:host github :repo "clarete/eosd")
+ :demand
+ :after exwm
+ :config
+ (eosd-start))
+
\f
;;; Email (with Gnus)
;; (: gnus-group-split-fancy "INBOX" t "INBOX")
;; gnu
(list ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1")
- ;; *@lists.sr.ht, omitting one dot if present
- ;; add more \\.?\\([^.@]*\\) if needed
- (list ".*<~\\(.*\\)/\\([^.@]*\\)\\.?\\([^.@]*\\)@lists.sr.ht>.*" "l.~\\1.\\2\\3")
+ ;; *.lists.sr.ht, omitting one dot if present
+ ;; add more \\.?\\([^.]*\\) if needed
+ (list ".*<~\\(.*\\)/\\([^.]*\\)\\.?\\([^.]*\\)\\.lists.sr.ht>.*" "l.~\\1.\\2\\3")
;; webmasters
(from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters")
;; other
(add-to-list 'erc-modules 'notifications)
(add-to-list 'erc-modules 'spelling)
(add-to-list 'erc-modules 'scrolltoplace)
- (erc-update-modules)
-
- (when (and (version<= "24.4" emacs-version)
- (version< emacs-version "27"))
- ;; fix erc-lurker bug
- ;; patch submitted: https://bugs.gnu.org/36843#10
- ;; TODO: remove when patch is merged and emacs 27 is released
- (defvar erc-message-parsed)
- (defun erc-display-message (parsed type buffer msg &rest args)
- "Display MSG in BUFFER.
-
-ARGS, PARSED, and TYPE are used to format MSG sensibly.
-
-See also `erc-format-message' and `erc-display-line'."
- (let ((string (if (symbolp msg)
- (apply #'erc-format-message msg args)
- msg))
- (erc-message-parsed parsed))
- (setq string
- (cond
- ((null type)
- string)
- ((listp type)
- (mapc (lambda (type)
- (setq string
- (erc-display-message-highlight type string)))
- type)
- string)
- ((symbolp type)
- (erc-display-message-highlight type string))))
-
- (if (not (erc-response-p parsed))
- (erc-display-line string buffer)
- (unless (erc-hide-current-message-p parsed)
- (erc-put-text-property 0 (length string) 'erc-parsed parsed string)
- (erc-put-text-property 0 (length string) 'rear-sticky t string)
- (when (erc-response.tags parsed)
- (erc-put-text-property 0 (length string) 'tags (erc-response.tags parsed)
- string))
- (erc-display-line string buffer)))))
-
- (defun erc-lurker-update-status (_message)
- "Update `erc-lurker-state' if necessary.
-
-This function is called from `erc-insert-pre-hook'. If the
-current message is a PRIVMSG, update `erc-lurker-state' to
-reflect the fact that its sender has issued a PRIVMSG at the
-current time. Otherwise, take no action.
-
-This function depends on the fact that `erc-display-message'
-lexically binds `erc-message-parsed', which is used to check if
-the current message is a PRIVMSG and to determine its sender.
-See also `erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'.
-
-In order to limit memory consumption, this function also calls
-`erc-lurker-cleanup' once every `erc-lurker-cleanup-interval'
-updates of `erc-lurker-state'."
- (when (and (boundp 'erc-message-parsed)
- (erc-response-p erc-message-parsed))
- (let* ((command (erc-response.command erc-message-parsed))
- (sender
- (erc-lurker-maybe-trim
- (car (erc-parse-user (erc-response.sender erc-message-parsed)))))
- (server
- (erc-canonicalize-server-name erc-server-announced-name)))
- (when (equal command "PRIVMSG")
- (when (>= (cl-incf erc-lurker-cleanup-count)
- erc-lurker-cleanup-interval)
- (setq erc-lurker-cleanup-count 0)
- (erc-lurker-cleanup))
- (unless (gethash server erc-lurker-state)
- (puthash server (make-hash-table :test 'equal) erc-lurker-state))
- (puthash sender (current-time)
- (gethash server erc-lurker-state))))))))
+ (erc-update-modules))
(use-feature erc-fill
:after erc
(erc-track-enable-keybindings nil)
(erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT"
"324" "329" "332" "333" "353" "477"))
+ (erc-track-position-in-mode-line t)
(erc-track-priority-faces-only 'all)
(erc-track-shorten-function nil))