# bxhkd
A very basix X hotkey daemon, a.k.a Brett's X hotkey daemon.
## Doing One Thing and Doing It Well
Modern window managers, even popular _minimalist_ ones, have bloat in
in their codebases from bundling extraneous features into a single
binary. Just my opinion.
I chose a different path. __bxhkd__ is an independent, modular
companion to my primary window manager, __bxwm__. By offloading key
handling management, I ensure that both the window manager and the
hotkey daemon remain focused, llightweight, and easily maintainable.
__bxhkd__ isn't just about managing keys. This hotkey daemon
is another project I am using for transitioning from writing shell
scripts for automating workflow to writing robust C that prioritizes
minimal runtime overhead, adherence to the Unix philosophy, and clean,
readable API design.
## Build
Compile __bxhkd__ 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
__bxhkd__ is configured at compile-time by editing config.def.h. After
making changes, the program must be recompiled and reinstalled. See
bxhkd(1) for details.
## Design & Functionality
__bxhkd__ operates as a background daemon that interfaces directly with
the X11 window system.
- Input Processing
- Maps X11 key-events to command strings defined in config.def.h
- Open a New Window
- Open a window running st, simple terminal
- Open a window running the author's launcher script
- Users should change these per their own preferences
- Focus, Move, and Resize A Window
- Centered horizontally, full height
- Left half
- Right half
- Maximized
- Small, centered horizontally and vertically
- Workspaces
- Move windows to a specific workspace
- Navigate to a specific workspace
- Close Focused Window
Add the following lines to `~/.xinitrc` to start __bxhkd__.
```
exec bxhkd 2> ~/.local/var/log/bxhkd.log &
```