Tree


.gitignorecommits | blame
LICENSE.mdcommits | blame
Makefilecommits | blame
README.mdcommits | blame
bxwm.1commits | blame
bxwm.ccommits | blame
config.def.hcommits | blame

README.md

# 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
```