This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+window-management/exwm/packages.el

165 lines
6.1 KiB
EmacsLisp

;;; packages.el --- EXWM Layer packages File for Spacemacs
;;
;; Copyright (c) 2012-2021 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(defconst exwm-packages
'((xdg :location built-in)
desktop-environment
(helm-exwm :toggle (configuration-layer/package-used-p 'helm))
(evil-exwm-state :toggle (configuration-layer/package-used-p 'evil)
:location (recipe :fetcher github
:repo "domenzain/evil-exwm-state"))
(xelb :location (recipe :fetcher github
:repo "ch11ng/xelb")
:step pre)
(exwm :location (recipe :fetcher github
:repo "ch11ng/exwm")
:step pre)))
(defun exwm/init-xdg ()
(use-package xdg
:defer t
:commands (xdg-config-dirs xdg-config-home xdg-desktop-read-file)))
(defun exwm/init-desktop-environment ()
(use-package desktop-environment
:after exwm
:spacediminish t
:defer t
:init (spacemacs|add-toggle desktop-environment
:mode desktop-environment-mode
:documentation "Keybindings for Desktop Environment functionality."
:evil-leader "TD")
:config
(progn
(setq desktop-environment-update-exwm-global-keys :prefix)
(define-key desktop-environment-mode-map (kbd "s-l") nil)
;; If we don't enable this, exwm/switch-to-buffer-or-run won't move an X window to the current frame
(setq exwm-layout-show-all-buffers t))))
(defun exwm/init-helm-exwm ()
;; when helm is used activate extra EXWM features
(use-package helm-exwm
:config
(progn
;; Add EXWM buffers to a specific section in helm mini
(setq exwm-helm-exwm-emacs-buffers-source (helm-exwm-build-emacs-buffers-source))
(setq exwm-helm-exwm-source (helm-exwm-build-source))
(setq helm-mini-default-sources `(exwm-helm-exwm-emacs-buffers-source
exwm-helm-exwm-source
helm-source-recentf
helm-source-buffer-not-found))
;; Add a prefix command to choose among EXWM buffers only
(spacemacs/set-leader-keys "WW" 'helm-exwm))))
(defun exwm/init-evil-exwm-state ()
(use-package evil-exwm-state
:config
(progn
(spacemacs/define-evil-state-face "exwm" "firebrick1")
(spacemacs/define-evil-state-face "exwm-insert" "chartreuse3"))))
(defun exwm/init-xelb ()
(use-package xelb))
(defun exwm/init-exwm ()
(use-package exwm-systemtray)
(use-package exwm
:custom
(use-dialog-box nil "Disable dialog boxes since they are unusable in EXWM")
(exwm-input-line-mode-passthrough t "Pass all keypresses to emacs in line mode.")
:init
(progn
(require 'exwm-config)
;; "Number of workspaces. Defaults to the number of connected displays."
(unless exwm-workspace-number
(custom-set-variables '(exwm-workspace-number (/ (length exwm--randr-displays) 2))))
(exwm//randr-setup)
(exwm//systray-setup))
:config
(progn
;; You may want Emacs to show you the time
(display-time-mode t)
(when exwm-hide-tiling-modeline
(exwm-layout-hide-mode-line))
(add-hook 'exwm-update-title-hook
(lambda ()
(exwm-workspace-rename-buffer exwm-title)))
;; Remove ALL bindings
(define-key exwm-mode-map "\C-c\C-f" nil)
(define-key exwm-mode-map "\C-c\C-h" nil)
(define-key exwm-mode-map "\C-c\C-k" nil)
(define-key exwm-mode-map "\C-c\C-m" nil)
(define-key exwm-mode-map "\C-c\C-q" nil)
(define-key exwm-mode-map "\C-c\C-t\C-f" nil)
(define-key exwm-mode-map "\C-c\C-t\C-m" nil)
;; `exwm-input-set-key' allows you to set a global key binding (available in
;; any case). Following are a few examples.
(exwm-input-set-key (kbd "M-m") 'spacemacs-cmds)
(exwm-input-set-key (kbd "C-q") #'exwm-input-send-next-key)
(exwm-input-set-key (kbd "s-i") #'exwm-input-toggle-keyboard)
(exwm-input-set-key (kbd "s-l") #'exwm/exwm-lock)
(exwm-input-set-key (kbd "s-r") #'exwm-reset)
(exwm-input-set-key (kbd "s-w") #'exwm-workspace-switch)
(exwm-input-set-key (kbd "s-TAB") #'exwm/jump-to-last-exwm)
(exwm-input-set-key (kbd "s-SPC") #'exwm/exwm-app-launcher)
(exwm-input-set-key (kbd "s-RET") #'exwm-terminal-command)
;; set up evil escape
(when (configuration-layer/package-used-p 'evil-escape)
(exwm-input-set-key [escape] 'evil-escape))
;; Bindings available everywhere
(spacemacs/declare-prefix "W" "EXWM")
(spacemacs/set-leader-keys
"Wp" 'exwm/exwm-workspace-prev
"Wn" 'exwm/exwm-workspace-next
"WA" 'exwm-workspace-add
"Wd" 'exwm-workspace-delete
"Wr" 'exwm-restart
"Wl" 'exwm/exwm-lock
"Wa" 'exwm/exwm-app-launcher)
;; Bindings for use only on EXWM buffers
(spacemacs/declare-prefix-for-mode 'exwm-mode
"mT" "toggle")
(spacemacs/set-leader-keys-for-major-mode 'exwm-mode
"r" 'exwm-reset
"Tf" 'exwm-layout-toggle-fullscreen
"Tt" 'exwm-floating-toggle-floating
"Tm" 'exwm-layout-toggle-mode-line)
;; autostart
(when exwm-autostart-xdg-applications
(add-hook 'exwm-init-hook 'exwm//autostart-xdg-applications t))
(exwm-init)
(server-start))))