#+TITLE: EXWM layer

#+TAGS: layer|tool

[[file:img/exwm.jpg]]

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#install][Install]]
  - [[#system-tray-integratios][System Tray Integratios]]
  - [[#xdg-autostart][XDG Autostart]]
- [[#key-bindings][Key bindings]]

* Description
Thanks to @ch11ng and his [[https://github.com/ch11ng/exwm][EXWM]] project we can now use Emacs as our window
manager, that means that you can spawn a Browser Window, or your music player,
or anything.

** Features:
- Support for using Emacs as window manager

* Install
To use =exwm= layer, add it to your =~/.spacemacs=.

The default layer variables are:

#+BEGIN_SRC emacs-lisp
  (setq-default dotspacemacs-configuration-layers
                '((exwm :variables exwm-enable-systray nil
                                   exwm-autostart-xdg-applications nil
                                   exwm-terminal-command "xterm"
                                   exwm-locking-command nil
                                   exwm-hide-tiling-modeline nil
                                   exwm-workspace-switch-wrap t
                                   exwm-randr-command nil)))
#+END_SRC

Please refer to [[https://github.com/ch11ng/exwm/wiki][EXWM Wiki]] for setting up display manager.

** System Tray Integratios
To enable system tray integration, set =exwm-enable-systray= to =t=.

** XDG Autostart
If =exwm-autostart-xdg-applications= is non-nil, =.desktop= files in
=$XDG_CONFIG_HOME/autostart= and =XDG_CONFIG_DIRS= will be used to run applications at
startup. (See [[https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html][Desktop Application Autostart Specification]] for details).

For the purpose of controlling whether an entry should be run under Emacs,
the =OnlyShowIn= and =NotShotIn= keys are checked for the string =EXWM=.

This is disabled per default.

* Key bindings
As other window managers the ~s~ or *Super* key (Windows Key) is the one that
is the prefix to every action. We'll use a lot of ~s~.

Some emacs key bindings are disabled in X Window, for example ~C-x~ and ~C-c~ are
disabled so that they can be used for Cutting and Copying text.

| Key binding           | Description                            |
|-----------------------+----------------------------------------|
| ~M-m~                 | Spacemacs Leader Key                   |
| ~C-q~                 | Send next key pressed to the X window  |
| ~s-i~                 | Toggle between line mode and char mode |
| ~s-l~                 | Lock Screen                            |
| ~s-r~                 | Reset window state                     |
| ~s-w~                 | Workspace Switch Menu                  |
| ~s-[1 2 3 ... 8 9 0]~ | Switch to workspace [1 2 3 ... 8 9 10] |
| ~s-TAB~               | Switch to last workspace               |
| ~s-[~ / ~s-]~         | Switch to prev,next workspace          |
| ~s-SPC~               | App Launcher                           |
| ~s-RET~               | Spawn terminal                         |
| ~s-:~ and ~s-;~       | Helm M-x (same as ~SPC :~)             |
| ~s-u,U~               | Undo, Redo window configurations       |
| ~s-b~                 | Show all opened buffers                |
| ~s-[h j k l]~         | Switch to window in the direction      |
| ~s-[H J K L]~         | Move window to the direction           |
| ~M-s-[h j k l]~       | Resize window toward the direction     |
