exwm-arch-install/README.md

3.8 KiB

uses https://github.com/rexim/dotfiles for configuration and in a proxmox vm; my settings: 2 sockets 5 cores 100GB disk size 12GB mem default everything else (seabios, i440fx)

part 1 arch install:

archlinux-2026.03.01-x86_64.iso

updated before running archinstall

    sudo pacman -Sy archinstall

in archinstall; disk: ext4 bootloader: grub network: network manager user: create with sudo profile: minimal audio: pipewire

post archinstall;

sudo pacman -S xorg-server xorg-xinit emacs dmenu git zsh rxvt-unicode tmux
# zsh,rvxt,tmux from tsoding dotfiles https://github.com/rexim/dotfiles

clone dotfiles;

git clone https://github.com/rexim/dotfiles ~/dotfiles
cd ~/dotfiles
bash deploy.sh MANIFEST.linux

setup launch;

emacs

M-x package-install exwm

real launch;

startx

should launch the gui version of exwm/emacs.

part 2 emacs/exwm setup

C-x C-f (ctrl-x ctrl-f) find-file >~/.xinitrc

exec emacs

the official exwm wiki says for arch users to NOT use dbus. i consulted the all knowing orb and it said if apps (web browsers..etc) complain about dbus to use a modern replacement: dbus-run-session. this is untested (will hopefully remove once tested)

C-x C-f again to ~/.emacs


(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) 
(package-initialize)

(unless (package-installed-p 'exwm)
  (package-refresh-contents)
  (package-install 'exwm))

(require 'exwm)
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)

(exwm-input-set-key (kbd "M-<return>")
                    (lambda () (interactive) (start-process "" nil "urxvt")))
(exwm-input-set-key (kbd "M-w") #'exwm-workspace-switch)
(exwm-input-set-key (kbd "M-r") #'exwm-reset) 

(dotimes (i 10)
  (exwm-input-set-key (kbd (format "M-%d" i))
                      `(lambda () (interactive (exwm-workspace-switch-create ,i))))

(exwm-wm-mode)

exwm-enable is outdated, when used user is instructed to change it to exwm-wm-mode

post-setup installing;

sudo pacman -S firefox ttf-dejavu noto-fonts xclip scrot xf86-video-qxl
sudo pacman -S pipewire pipewire-pulse wireplumber 

systemctl --user enable pipewire pipewire-pulse wireplumber
systemctl --user start pipewire pipewire-pulse wireplumber

launching applications (example);

startx and launch firefox from EXWM with M-Return to open urxvt, then type firefox &

Or bind a key in ~/.emacs:

(exwm-input-set-key (kbd "M-f")
  (lambda () (interactive) (start-process "" nil "firefox")))

workspaces are numbered 0-9. M-0 through M-9 switches to or creates that workspace. M-w opens an interactive switcher. To move a window to another workspace:

M-x exwm-workspace-move-window

navigation

M-0 through M-9 # switch/create workspace
M-w # interactive workspace switcher
M-r # reset/refresh window (use if a window gets stuck)
C-x o # cycle between open Emacs buffers/windows
C-x b # switch buffer by name
C-x k # kill (close) current buffer

launching things

M-Return # open urxvt terminal
M-e # open eshell
M-f # open firefox (if you add the bind)
M-x # run any Emacs command by name

files

C-x C-f # open/find file
C-x C-s # save file
C-x C-w # save file as
C-x C-c # quit Emacs (closes everything)

windows/splits

C-x 2 # split horizontally
C-x 3 # split vertically
C-x 1 # close all splits, keep current
C-x 0 # close current split

inside urxvt/eshell

M-x exwm-workspace-move-window # move current X window to another workspace
in urxvt: Ctrl+Shift+C/V # copy/paste

EXWM window modes EXWM windows have two modes:

line mode (default): Emacs keybinds work, good for reading char mode: all input goes to the X app (e.g. typing in browser). Toggle with M-r or i to enter char mode, M-r to exit back to line mode