# bxwm
A very basic X window manager.
## Yet Another Window Manager
Over the years, I have made use of a number of minimalist window
managers. dwm](https://dwm.suckless.org/) was a mainstay for a long
time. I tried out both [i3](https://i3wm.org/) and [bspwm](https://github.com/baskerville/bspwm). [cwm](https://cvsweb.openbsd.org/xenocara/app/cwm/) was my choice the last few years.
Each has some great design principles and features, and each had
things that I tried to tweak or patch or script or hack my way
around. What if there were a window manager that did nothing more
nor nothing less than what I needed a window manager to do? That
matched my worflow without the work arounds?
These questions led to looking up the source code of a number of
minimalist window managers, followed by starting to learn to read C
code, then designing, then roadmapping, then stumbling along writing
C code, then a lot of trial and error. And voilĂ .
Here is yet another window manager. My window manager. A stacking
window manager that is purposely opinionated regarding window
placement and sizing, that provides a straight forward work
environment, and that prefers simplicity and tranquility.
In addition to being the window manager I use every day, __bxwm__
also serves as my primary project for transitioning from writing
shell scripts for automating workflow to writing robust, maintainable
C programs that adhere to my values of minimalism, the Unix
philosophy, and clean, readable API design.
## Dependencies
- Xlib
- A C compiler compliant with the C11 standard.
- bxhkd, basic X hotkey daemon (required for managing key commands).
## Build
Compile __bxwm__ from source.
```
make
```
## Install
Install the binary and man page. Note that root privileges are not
required as the default desination is `~/.local/`.
```
make install
```
## Uninstall
Remove the binary and man page.
```
make uninstall
```
## Configuration
__bxwm__ is configured in config.def.h. User customizations should be
made in config.h after the initial compile. After making changes, the
program must be recompiled and reinstalled. See bxwm(1) for details.
## Design & Functionality
__bxwm__ is built around a set of opinionated primitives:
- Window Sizing & Placement
- New windows are opened
- small, centered on the screen, and,
- at a golden ratio dimension.
- Windows can be moved and resized to
- centered half the width of the screen and full height,
- right half of the screen and full height,
- left half of the screen and full height,
- maximized to full screen height and width, and,
- back to a small screen centered.
- Stacking
- Windows are maintained in a stack.
- Window focus follows stack order.
- Windows are navigated via key command
- next window and
- previous window.
- Workspaces
- 10 workspaces available.
- Windows can be moved between workspaces via key commands.
- Workspaces are navigated via key command.
Window and workspace management and navigation commands via hotkeys
are sent to __bxwm__ from __bxhkd__.
Add the following to `~/.xinitrc` to start __bxwm__.
```
exec bxwm 2> ~/.local/var/log/bxwm.log
```