X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/3fffeb0a2e296a0df296ac7080b974e4082ade84..24e1e73e5492b8b8a072bd080ce446ee5697a3fd:/.emacs.d/init.el diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 21d175d..ccd55d2 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -395,16 +395,20 @@ For disabling the behaviour for certain buffers and/or modes." (global-auto-revert-non-file-buffers nil)) ;; time and battery in mode-line -(comment - (use-feature time - :init - (setq display-time-default-load-average nil) - :config - (display-time-mode)) +(use-feature time + :demand + :config + (display-time-mode) + :custom + (display-time-default-load-average nil) + (display-time-format "%a %b %-e, %-l:%M%P")) - (use-feature battery - :config - (display-battery-mode))) +(use-feature battery + :demand + :config + (display-battery-mode) + :custom + (battery-mode-line-format " %p%% %t")) (use-feature fringe :demand @@ -559,35 +563,76 @@ For disabling the behaviour for certain buffers and/or modes." ;;; Essential packages (use-package exwm - :disabled :demand :config (require 'exwm-config) - ;; Set the initial workspace number. - (setq exwm-workspace-number 4) + (setq + exwm-workspace-number 4 + exwm-workspace-index-map (lambda (i) (number-to-string (1+ i)))) - ;; Make class name the buffer name, truncating beyond 50 characters + ;; Make class name the buffer name, truncating beyond 60 characters (defun exwm-rename-buffer () (interactive) (exwm-workspace-rename-buffer (concat exwm-class-name ":" - (if (<= (length exwm-title) 50) exwm-title - (concat (substring exwm-title 0 49) "..."))))) + (if (<= (length exwm-title) 60) exwm-title + (concat (substring exwm-title 0 59) "..."))))) (add-hook 'exwm-update-class-hook 'exwm-rename-buffer) (add-hook 'exwm-update-title-hook 'exwm-rename-buffer) + (defun b/exwm-ws-prev-index () + "Return the index for the previous EXWM workspace, wrapping +around if needed." + (if (= exwm-workspace-current-index 0) + (1- exwm-workspace-number) + (1- exwm-workspace-current-index))) + + (defun b/exwm-ws-next-index () + "Return the index for the next EXWM workspace, wrapping +around if needed." + (if (= exwm-workspace-current-index + (1- exwm-workspace-number)) + 0 + (1+ exwm-workspace-current-index))) + ;; 's-R': Reset (exwm-input-set-key (kbd "s-R") #'exwm-reset) ;; 's-\': Switch workspace (exwm-input-set-key (kbd "s-\\") #'exwm-workspace-switch) ;; 's-N': Switch to certain workspace - (dotimes (i 10) + (dotimes (i exwm-workspace-number) (exwm-input-set-key (kbd (format "s-%d" i)) (lambda () (interactive) - (exwm-workspace-switch-create i)))) + (exwm-workspace-switch-create (1- i))))) + ;; 's-[': Switch to previous workspace + (defun b/exwm-ws-prev () + "Switch to previous EXWM workspace, wrapping around if needed." + (interactive) + (exwm-workspace-switch-create (b/exwm-ws-prev-index))) + (exwm-input-set-key (kbd "s-[") #'b/exwm-ws-prev) + ;; 's-]': Switch to next workspace + (defun b/exwm-ws-next () + "Switch to next EXWM workspace, wrapping around if needed." + (interactive) + (exwm-workspace-switch-create (b/exwm-ws-next-index))) + (exwm-input-set-key (kbd "s-]") #'b/exwm-ws-next) + ;; 's-{': Move window to previous workspace + (defun b/exwm-move-window-to-prev-ws () + "Move window to previous EXWM workspace, wrapping around if +needed." + (interactive) + (exwm-workspace-move-window (b/exwm-ws-prev-index))) + (exwm-input-set-key (kbd "s-{") #'b/exwm-move-window-to-prev-ws) + ;; 's-}': Move window to next workspace + (defun b/exwm-move-window-to-next-ws () + "Move window to next EXWM workspace, wrapping around if +needed." + (interactive) + (exwm-workspace-move-window (b/exwm-ws-next-index))) + (exwm-input-set-key (kbd "s-}") #'b/exwm-move-window-to-next-ws) ;; 's-SPC': Launch application ;; (exwm-input-set-key ;; (kbd "s-SPC") @@ -597,47 +642,34 @@ For disabling the behaviour for certain buffers and/or modes." (exwm-input-set-key (kbd "M-s-SPC") #'counsel-linux-app) - ;; Shorten 'C-c C-q' to 'C-q' - (define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key) - - ;; Line-editing shortcuts - (setq exwm-input-simulation-keys - '(;; movement - ([?\C-b] . [left]) - ([?\M-b] . [C-left]) - ([?\C-f] . [right]) - ([?\M-f] . [C-right]) - ([?\C-p] . [up]) - ([?\C-n] . [down]) - ([?\C-a] . [home]) - ([?\C-e] . [end]) - ([?\M-v] . [prior]) - ([?\C-v] . [next]) - ([?\C-d] . [delete]) - ([?\C-k] . [S-end delete]) - ;; cut/copy/paste - ;; ([?\C-w] . [?\C-x]) - ([?\M-w] . [?\C-c]) - ([?\C-y] . [?\C-v]) - ;; search - ([?\C-s] . [?\C-f]))) - - ;; Enable EXWM - (exwm-enable) + (exwm-input-set-key + (kbd "s-") (lambda () + (interactive) + (b/start-process "urxvt"))) - (add-hook 'exwm-init-hook #'exwm-config--fix/ido-buffer-window-other-frame) + (exwm-input-set-key + (kbd "s-t") + (lambda () + (interactive) + (exwm-floating-toggle-floating))) - (require 'exwm-systemtray) - (exwm-systemtray-enable) + (exwm-input-set-key + (kbd "s-f") + (lambda () + (interactive) + (exwm-layout-toggle-fullscreen))) - (require 'exwm-randr) - (exwm-randr-enable) + (exwm-input-set-key + (kbd "s-w") + (lambda () + (interactive) + (kill-buffer (current-buffer)))) - ;; (exwm-input-set-key - ;; (kbd "s-") - ;; (lambda () - ;; (interactive) - ;; (start-process "urxvt" nil "urxvt"))) + (exwm-input-set-key + (kbd "s-q") + (lambda () + (interactive) + (exwm-manage--kill-client))) ;; (exwm-input-set-key ;; (kbd "s-SPC") ;; rofi doesn't properly launch programs when started from emacs @@ -657,76 +689,81 @@ For disabling the behaviour for certain buffers and/or modes." ;; (interactive) ;; (start-process "rofi-pass" nil "rofi-pass"))) - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --toggle-mute"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --allow-boost --decrease 5"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --allow-boost --increase 5"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpc toggle"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpc prev"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpv next"))) - - (defun b/exwm-pasystray () - "A command used to start pasystray." - (interactive) - (if (executable-find "pasystray") - (progn - (message "EXWM: starting pasystray ...") - (start-process-shell-command "pasystray" nil "pasystray --notify=all")) - (message "EXWM: pasystray is not installed, abort!"))) + (exwm-input-set-key + (kbd "") + (lambda () + (interactive) + (start-process-shell-command "pamixer" nil "pamixer --toggle-mute"))) - (add-hook 'exwm-init-hook #'b/exwm-pasystray) + (exwm-input-set-key + (kbd "") + (lambda () + (interactive) + (start-process-shell-command "pamixer" nil "pamixer --allow-boost --decrease 5"))) (exwm-input-set-key - (kbd "s-t") + (kbd "") (lambda () (interactive) - (exwm-floating-toggle-floating))) + (start-process-shell-command "pamixer" nil "pamixer --allow-boost --increase 5"))) (exwm-input-set-key - (kbd "s-f") + (kbd "") (lambda () (interactive) - (exwm-layout-toggle-fullscreen))) + (start-process-shell-command "mpc" nil "mpc toggle"))) (exwm-input-set-key - (kbd "s-w") + (kbd "") (lambda () (interactive) - (kill-buffer (current-buffer)))) + (start-process-shell-command "mpc" nil "mpc prev"))) (exwm-input-set-key - (kbd "s-q") + (kbd "") (lambda () (interactive) - (exwm-manage--kill-client)))) + (start-process-shell-command "mpc" nil "mpc next"))) + + ;; Shorten 'C-c C-q' to 'C-q' + (define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key) + + ;; Line-editing shortcuts + (setq exwm-input-simulation-keys + '(;; movement + ([?\C-b] . [left]) + ([?\M-b] . [C-left]) + ([?\C-f] . [right]) + ([?\M-f] . [C-right]) + ([?\C-p] . [up]) + ([?\C-n] . [down]) + ([?\C-a] . [home]) + ([?\C-e] . [end]) + ([?\M-v] . [prior]) + ([?\C-v] . [next]) + ([?\C-d] . [delete]) + ([?\C-k] . [S-end ?\C-x]) + ;; cut/copy/paste + ([?\C-w] . [?\C-x]) + ([?\M-w] . [?\C-c]) + ([?\C-y] . [?\C-v]) + ([?\M-d] . [C-S-right ?\C-x]) + ([?\M-\d] . [C-S-left ?\C-x]) + ;; search + ([?\C-s] . [?\C-f]) + ;; escape + ([?\C-g] . [escape]))) + + ;; Enable EXWM + (exwm-enable) + + (add-hook 'exwm-init-hook #'exwm-config--fix/ido-buffer-window-other-frame) + + (require 'exwm-systemtray) + (exwm-systemtray-enable) + + (require 'exwm-randr) + (exwm-randr-enable)) ;; use the org-plus-contrib package to get the whole deal (use-package org-plus-contrib) @@ -1031,10 +1068,11 @@ This function is intended for use with `ivy-ignore-buffers'." (or (name . "^\\*scratch\\*$") (name . "^\\*Messages\\*$"))) + ("exwm" (mode . exwm-mode)) ("erc" (mode . erc-mode))))) (ibuffer-formats '((mark modified read-only locked " " - (name 18 18 :left :elide) + (name 72 72 :left :elide) " " (size-h 9 -1 :right) " " @@ -1279,7 +1317,6 @@ This function is intended for use with `ivy-ignore-buffers'." (use-feature elisp-mode :delight (emacs-lisp-mode "Elisp" :major)) - (use-package alloy-mode :straight (:host github :repo "dwwmmn/alloy-mode") :mode "\\.als\\'"