Commit Briefs

c1c5f0b481 Brett Fisher

README.md: Edit Design & Functionality section. (main)


ef5d5241cd Brett Fisher

bxwm.1: Edit for consistency with bx suite.


cf3d902940 Brett Fisher

README.md: Some more edits.


3f753c589e Brett Fisher

README.md: Edit introduction.


82109e7b99 Brett Fisher

Makefile: Edit heading comment.


64e848a226 Brett Fisher

bxwm.c, config.def.h: Decouple status bar from window manager.

- Remove spawn() logic and STATUSBAR macro to achieve full independence. - Add XSync() in setup() to ensure proper root window initialization. - Rely on .xinitrc for session orchestration, adhering to the Unix philosophy of modularity.


410f763ac3 Brett Fisher

config.def.h: Update per refactor of bxbar, basic X status bar.

- Edit STATUSBAR - Display info in status bar piped in from Lua script.


b8690a64b1 Brett Fisher

bxwm.c: Clear _NET_ACTIVE_WINDOW when workspace has no focus.

- Update focus_next() and focus_prev() to reset the _NET_ACTIVE_WINDOW atom when transitioning to a workspace without clients. - Ensures consistent state display in status bars and external monitors.


c9f5f76d54 Brett Fisher

bxwm.c: Correct error in main().


787957df3c Brett Fisher

bxwm.c: Standardize error handling with die() function.

- Add die() function matching bxnotify pattern for consistent error handling across the suite. - Replace fprintf/exit/cleanup call sites with die(). - Fix shadowing bug in socket_init() where local variables masked globals, preventing proper cleanup.


Branches

Tags

This repository contains no tags

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