(require 'exwm) (require 'exwm-systemtray) (require 'edwina) (exwm-systemtray-enable) (display-battery-mode 1) (display-time-mode 1) (defun discord () (interactive) (start-process "discord" nil "discord")) ;; TODO: if running, switch focus, otherwise start (defun firefox () (interactive) (start-process "firefox" nil "firefox")) (setq exwm-input-global-keys `((,(kbd "s-E") . exwm-exit) (,(kbd "s-Q") . evil-quit) (,(kbd "s-w") . exwm-workspace-switch) ;; Windowing (,(kbd "s-h") . edwina-dec-mfact) (,(kbd "s-j") . edwina-select-next-window) (,(kbd "s-k") . edwina-select-previous-window) (,(kbd "s-l") . edwina-inc-mfact) (,(kbd "s-J") . edwina-swap-next-window) (,(kbd "s-K") . edwina-swap-previous-window) (,(kbd "s-r") . exwm-reset) (,(kbd "s-f") . exwm-layout-set-fullscreen) ;; Applications (,(kbd "s-") . firefox) (,(kbd "s-") . vterm) ;; Workspaces ,@(mapcar (lambda (i) `(,(kbd (format "s-%d" i)) . (lambda () (interactive) (exwm-workspace-switch-create ,i)))) (number-sequence 0 9)))) (add-hook 'exwm-update-class-hook (lambda () (exwm-workspace-rename-buffer exwm-class-name))) (edwina-mode) (add-hook 'after-make-frame-functions 'edwina-arrange) (add-hook 'delete-frame-functions 'edwina-arrange) (setq exwm-manage-force-tiling 1) (exwm-init)