141 lines
3.2 KiB
Markdown
141 lines
3.2 KiB
Markdown
# exwm-arch
|
||
|
||
Arch Linux + [EXWM](https://github.com/ch11ng/exwm) install script for a Proxmox VM, using [tsoding's dotfiles](https://github.com/rexim/dotfiles).
|
||
|
||
## VM settings
|
||
|
||
| setting | value |
|
||
|------------|--------------------------|
|
||
| sockets | 2 |
|
||
| cores | 5 |
|
||
| memory | 12 GB |
|
||
| disk | 100 GB (ext4) |
|
||
| bios | SeaBIOS |
|
||
| machine | i440FX |
|
||
| display | qxl (`xf86-video-qxl`) |
|
||
|
||
## Arch install (manual, pre-script)
|
||
|
||
Boot `archlinux-2026.03.01-x86_64.iso` (or current), update archinstall, then run it:
|
||
|
||
```bash
|
||
sudo pacman -Sy archinstall
|
||
archinstall
|
||
```
|
||
|
||
archinstall settings:
|
||
|
||
- **disk:** ext4
|
||
- **mirror:** united states
|
||
- **bootloader:** grub
|
||
- **network:** networkmanager
|
||
- **user:** create with sudo
|
||
- **profile:** minimal
|
||
- **audio:** pipewire
|
||
|
||
Reboot when done, then log in as your sudo user.
|
||
|
||
## Usage
|
||
|
||
```bash
|
||
git clone https://github.com/phantomoffrags/exwm-arch-install
|
||
cd exwm-arch-install
|
||
chmod +x install.sh
|
||
./install.sh
|
||
```
|
||
|
||
When it finishes:
|
||
|
||
```bash
|
||
startx
|
||
```
|
||
|
||
> **dbus note:** if apps like Firefox complain about dbus, try `dbus-run-session startx` instead.
|
||
|
||
---
|
||
|
||
## What the script does
|
||
|
||
| step | action |
|
||
|------|--------|
|
||
| 1 | installs xorg, emacs, dmenu, zsh, urxvt, tmux, git, nano |
|
||
| 2 | clones and deploys tsoding dotfiles (`MANIFEST.linux`) |
|
||
| 3 | writes `~/.xinitrc` → `exec emacs` |
|
||
| 4 | installs pipewire + wireplumber, enables user services |
|
||
| 5 | installs firefox, fonts, xclip, scrot, xf86-video-qxl |
|
||
| 6 | writes `~/.emacs` with EXWM config |
|
||
| 7 | installs the EXWM package via `emacs --batch` |
|
||
|
||
---
|
||
|
||
## Key bindings
|
||
|
||
### navigation
|
||
|
||
| key | action |
|
||
|-----|--------|
|
||
| `M-0` – `M-9` | switch / create workspace |
|
||
| `M-w` | interactive workspace switcher |
|
||
| `M-r` | reset / refresh window (unstick a window) |
|
||
| `C-x o` | cycle between emacs buffers/windows |
|
||
| `C-x b` | switch buffer by name |
|
||
| `C-x k` | kill (close) current buffer |
|
||
|
||
### launching things
|
||
|
||
| key | action |
|
||
|-----|--------|
|
||
| `M-Return` | open urxvt terminal |
|
||
| `M-x` | run any emacs command by name |
|
||
|
||
To add a Firefox shortcut, uncomment the `M-f` bind in `~/.emacs`.
|
||
|
||
### files
|
||
|
||
| key | action |
|
||
|-----|--------|
|
||
| `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) |
|
||
|
||
### window splits
|
||
|
||
| key | action |
|
||
|-----|--------|
|
||
| `C-x 2` | split horizontally |
|
||
| `C-x 3` | split vertically |
|
||
| `C-x 1` | close all splits, keep current |
|
||
| `C-x 0` | close current split |
|
||
|
||
### 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 a browser). Press `i` to enter char mode, `M-r` to exit back to line mode.
|
||
|
||
### moving windows between workspaces
|
||
|
||
```
|
||
M-x exwm-workspace-move-window
|
||
```
|
||
|
||
### copy/paste in urxvt
|
||
|
||
```
|
||
Ctrl+Shift+C copy
|
||
Ctrl+Shift+V paste
|
||
```
|
||
|
||
---
|
||
|
||
## Launching apps
|
||
|
||
From a urxvt terminal (`M-Return`):
|
||
|
||
```bash
|
||
firefox &
|
||
```
|
||
|
||
The `&` sends it to the background; the terminal returns immediately. Close with `Ctrl+q` (Firefox) or `C-x k` (emacs buffer). |