# LukeSmithxyz/st: A Suckless Terminal With Vim-Style Controls

> LukeSmithxyz/st extends the suckless simple terminal with dmenu URL actions, vim-style scrolling, Xresources colors, transparency, font resizing, and installed helper programs. It suits X11 users who want a compact terminal with keyboard-driven operations, but it excludes Wayland-only workflows.

**LukeSmithxyz/st** — Luke's fork of the suckless simple terminal (st) with vim bindings and Xresource compatibility.

- Repository: https://github.com/LukeSmithxyz/st
- Stars: 1,685 · Forks: 1,002
- Language: C
- License: MIT
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/lukesmithxyz-st

## Why LukeSmithxyz/st Extends the Suckless Terminal

LukeSmithxyz/st targets users of the suckless simple terminal, or `st`, who want more interaction without adopting a full desktop terminal feature set. It is written primarily in C and retains the small, patch-oriented character of the original project. The repository includes the terminal itself and two installed helpers, `st-copyout` and `st-urlhandler`, which support the URL and command-output actions described in the README.

The central addition is keyboard access to operations that otherwise require more interaction. With dmenu, `alt-l` follows a URL, `alt-y` copies a URL, and `alt-o` copies command output. Selection is tied to dmenu, so that dependency is part of the practical feature set even though the installation section focuses on build libraries. Users without dmenu should not expect these three bindings to provide the documented workflow.

The project is aimed at an X11 desktop rather than a Wayland-only environment. X11 features are central: `libX11`, `libXft`, `Xresources`, `xrdb`, `fontconfig`, and a composite manager for transparency all appear in its requirements. Its audience is therefore narrower than the audience for terminal emulators that are distributed as prebuilt Wayland applications.

## The C Build and st Binary Layout

Based on the repository layout and `Makefile`, installation produces three executable files: `st`, `st-copyout`, and `st-urlhandler`. The main terminal is compiled from `st.c`, `x.c`, `boxdraw.c`, and `hb.c`. The build links these objects into the `st` executable, while `config.h`, `st.h`, `win.h`, `arg.h`, and `hb.h` provide declarations and settings used during compilation.

The `Makefile` reads its compiler and linker settings from `config.mk`. Its default `all` target first prints the configured `CFLAGS`, `LDFLAGS`, and `CC` through the `options` target, then compiles the program. This makes the local build configuration visible before compilation, which is useful when diagnosing a library or compiler problem.

The `install` target creates the configured binary and manual directories. It copies all three programs into `$(PREFIX)/bin`, makes them executable, generates the `st.1` manual page by replacing `VERSION`, and compiles the supplied terminfo entry through `tic -sx st.info`. The README directs readers to its note about the terminfo entry.

## Installing st on X11 and Adding Your First Configuration

The README's installation route is a source build. Before compiling, install the Xlib headers, HarfBuzz build files, `make`, `fontconfig`, `libX11`, and `libXft`. The default font lookup asks `fontconfig` for the system monospace font, so omitting those components can prevent a clean build.

Clone the repository, enter its directory, and install the compiled programs and supporting files:

```bash
git clone https://github.com/LukeSmithxyz/st
cd st
sudo make install
```

The Makefile's `install` target depends on `st`, so this command builds the terminal before copying it and its helpers. It also installs the manual page and processes the terminfo source. A first real use begins with the installed `st` terminal and its documented key controls, especially `alt-k` and `alt-j` for history movement or `alt-home` to restore the default font size.

OpenBSD needs one documented adjustment before building:

```text
config.mk
```

Edit that file and remove `-lrt` from `$LIBS`, as specified by the README. This is a platform-specific source adjustment rather than something handled automatically by the documented `make install` path.

## Keyboard Scrolling, Font Resizing, Clipboard Commands

LukeSmithxyz/st offers two documented approaches to history movement. The first uses `alt-↑/↓` or `alt-pageup/down`, and `shift` can be held while scrolling with the mouse. The second follows vim-style navigation: `alt-k` and `alt-j` move through history, while `alt-u` and `alt-d` move faster.

The same navigation model changes font size when `shift` is also held. `alt-home` returns the terminal to its default font size. This is a useful fit for people who prefer staying at the keyboard, because normal scrolling and text resizing do not require opening a separate configuration interface.

Clipboard operations also have direct bindings. `alt-c` copies selected text, while `alt-v` or `shift-insert` pastes. These controls coexist with the dmenu actions rather than replacing one another: `alt-l`, `alt-y`, and `alt-o` concern URLs and command output, while `alt-c` and `alt-v` handle ordinary clipboard input and output.

The README lists these bindings but does not document mouse-selection portability, modifier remapping, or a graphical configuration file for changing them. Based on the repository layout, keyboard behavior is likely defined in the C source, particularly `config.h`, but the README does not provide a procedure for safely changing defaults.

## Xresources, gruvbox, pywal, and Transparency Precedence

Dynamic appearance is handled through X resource settings loaded from `~/.Xdefaults` or `~/.Xresources`. The file must be processed with `xrdb`; editing either file alone does not establish that the values are loaded into the running X session.

A documented configuration example begins like this:

```text
*.font:	Liberation Mono:pixelsize=12:antialias=true:autohint=true;
*.alpha: 0.9
*.color0: #111
```

The README's actual font line uses `antialias=true:autohint=true`, which is reproduced in the first code block in the project documentation. The alpha value ranges from `0` for transparent to `1` for opaque. Transparency also requires a composite manager such as `xcompmgr` or `picom`; installing st alone does not supply one.

Color precedence has three levels. Gruvbox supplies the default and fallback colors. Xresources color definitions override those defaults. If `wal` has run in the session, its colors take priority over both. The README also states that `wal` negates the transparency of existing windows, while new windows continue with the previously defined transparency. That behavior can make alpha appear inconsistent after a color change until a new terminal window is opened.

## Boxdraw, Ligatures, font2, and Upstream st

The README identifies box drawing support, ligatures, and `font2` as other incorporated patches. It also states that the source is updated to `st` version 0.8.5. These details distinguish this repository from an untouched package, but the README does not document how to enable or disable each patch, nor does it provide compatibility notes for particular fonts.

Upstream suckless `st` is the relevant alternative when the added workflows are unnecessary. Both are small C terminal emulators, while LukeSmithxyz/st layers dmenu integrations, vim-style navigation, Xresources-driven appearance, pywal support, and extra key bindings onto that base. An engineer who wants the upstream implementation without this fork's additional behavior can therefore assess upstream `st` as the narrower choice.

This fork also has a real boundary for upgrades. It has no GitHub releases, so there is no documented release channel for migration notes. The last repository push was on 2026-04-10. Consumers track the default `master` branch directly and must inspect commits or source changes themselves when upgrading. The MIT license permits use and modification under its terms, but redistribution still requires compliance with the license text.

## Conclusion

Adopt LukeSmithxyz/st if you use X11, prefer keyboard-driven terminal workflows, and want its dmenu helpers, Xresources integration, gruvbox defaults, and font controls. Do not choose it for a Wayland session, or when packaged dependencies and manual build steps are unacceptable. Before replacing an existing terminal, verify the build against your installed X11 libraries, confirm that dmenu is available for the URL bindings, and load any `Xresources` changes with `xrdb`.

## FAQ

### How do I install LukeSmithxyz/st on an X11 system?

Install the documented build dependencies, clone the repository, enter its directory, and run `sudo make install`. OpenBSD users must first remove `-lrt` from `$LIBS` in `config.mk`.

### Which keyboard shortcuts control scrolling and font size in LukeSmithxyz/st?

Use `alt-k` and `alt-j` for history movement, with `alt-u` and `alt-d` for faster movement. Add `shift` for font resizing, and press `alt-home` to return to the default font size.

### How do Xresources colors and pywal interact in LukeSmithxyz/st?

Gruvbox is the fallback, Xresources colors override it, and colors from `wal` take priority when `wal` has run. The README notes that `wal` negates transparency on existing windows, while new windows retain the previously defined transparency.

## Sources

- [Issues](https://github.com/LukeSmithxyz/st/issues)
- [License: MIT](https://github.com/LukeSmithxyz/st/blob/master/LICENSE)
- [LukeSmithxyz/st on GitHub](https://github.com/LukeSmithxyz/st)
- [README](https://github.com/LukeSmithxyz/st/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/lukesmithxyz-st
