diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 0000000..8abe656
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,38 @@
+# AUR:
+
+We have packaged `swhkd-git`. `swhkd-bin` has been packaged separately by a user of swhkd.
+
+# Building:
+
+`swhkd` and `swhks` install to `/usr/local/bin/` by default. You can change this behaviour by editing the [Makefile](../Makefile) variable, `TARGET_DIR`.
+
+# Dependencies:
+
+**Runtime:**
+
+- Policy Kit Daemon ( polkit )
+- Uinput kernel module
+- Evdev kernel module
+
+**Compile time:**
+
+- git
+- scdoc (If present, man-pages will be generated)
+- make
+- rustup
+
+# Compiling:
+
+- `git clone https://github.com/waycrate/swhkd;cd swhkd`
+- `make setup`
+- `make clean`
+ - `make` for a musl compile.
+ - `make glibc` for a glibc compile.
+- `sudo make install`
+
+# Running:
+
+```
+swhks &
+pkexec swhkd
+```
diff --git a/com.github.sohkd.pkexec.policy b/com.github.sohkd.pkexec.policy
new file mode 100644
index 0000000..45e7d25
--- /dev/null
+++ b/com.github.sohkd.pkexec.policy
@@ -0,0 +1,13 @@
+
+
+
+
+ Authentication is required to run Simple Wayland Hotkey Daemon
+
+ no
+ no
+ yes
+
+ /usr/bin/sohkd
+
+
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
deleted file mode 100644
index 99dda2f..0000000
--- a/docs/INSTALL.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Install
-
-`sohkd` and `sohks` install to `/usr/local/bin/` by default. You can change this behaviour by editing the [Makefile](../Makefile) variable, `TARGET_DIR`.
-
-# Dependencies:
-
-## Runtime:
-
-* Policy Kit Daemon (polkit)
-
-## Compile time:
-
-* rustup
-* make
-
-# Compiling:
-
-* `git clone https://github.com/waycrate/sohkd;cd sohkd`
-* `make setup`
-* `make clean`
- * `make` for a musl compile.
- * `make glibc` for a glibc compile.
-* `sudo make install`
-
-# Running:
-
-`sohks`
-`pkexec sohkd`
diff --git a/docs/assets/swhkd-svg-bg.svg b/docs/assets/swhkd-svg-bg.svg
deleted file mode 100644
index 6e80e7b..0000000
--- a/docs/assets/swhkd-svg-bg.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/swhkd-svg.svg b/docs/assets/swhkd-svg.svg
deleted file mode 100644
index 10520ed..0000000
--- a/docs/assets/swhkd-svg.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/swhkd.png b/docs/assets/swhkd.png
deleted file mode 100644
index 526cba6..0000000
Binary files a/docs/assets/swhkd.png and /dev/null differ
diff --git a/docs/sohkdrc b/docs/sohkdrc
deleted file mode 100644
index 84d14fa..0000000
--- a/docs/sohkdrc
+++ /dev/null
@@ -1,26 +0,0 @@
-# This goes in /etc/sohkd/sohkdrc
-# ! = consume key
-# [XYZ] = only in mode XYZ; if not mode is specified, the hotkey is *always* used
-
-! + [browse] + h
- sohkctl "nextInTree" "role=Header"
-! + [browse] + k
- sohkctl "nextInTree" "role=Link"
-! + [browse] + b
- sohkctl "nextInTree" "role=Button"
-! + [browse] + t
- sohkctl "nextInTree" "role=Table"
-! + [browse] + Shift + h
- sohkctl "prevInTree" "role=Header"
-! + [browse] + Shift + k
- sohkctl "prevInTree" "role=Link"
-! + [browse] + Shift + b
- sohkctl "prevInTree" "role=Button"
-! + [browse] + Shift + t
- sohkctl "prevInTree" "role=Table"
-
-! + super + b
- sohkmc "browse" "browse mode"
-
-! + super + f
- sohkmc "focus" "focus mode"
diff --git a/docs/swhkd-keys.5.gz b/docs/swhkd-keys.5.gz
new file mode 100644
index 0000000..c185737
--- /dev/null
+++ b/docs/swhkd-keys.5.gz
@@ -0,0 +1,1435 @@
+.\" Generated by scdoc 1.11.2
+.\" Complete documentation for this program is not available as a GNU info page
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.nh
+.ad l
+.\" Begin generated content:
+.TH "swhkd" "5" "2022-08-14" "github.com/waycrate/swhkd" "File Formats Manual"
+.P
+.SH NAME
+.P
+swhkd - Hotkey daemon inspired by sxhkd written in rust
+.P
+.SH VALID MODIFIERS
+.P
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Ctrl
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Control
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Super
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Mod4
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Alt
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Mod1
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Shift
+
+.RE
+.P
+.RE
+.SH VALID KEYS
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+q
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+w
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+e
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+r
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+t
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+y
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+u
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+i
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+o
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+p
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+a
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+s
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+d
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+g
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+h
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+j
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+k
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+l
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+z
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+x
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+c
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+v
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+b
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+n
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+m
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+1
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+2
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+3
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+4
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+5
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+6
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+7
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+8
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+9
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+0
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+escape
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+backspace
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+capslock
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+return
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+enter
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+tab
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+space
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+plus
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp0
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp1
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp2
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp3
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp4
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp5
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp6
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp7
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp8
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kp9
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpasterisk
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpcomma
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpdot
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpenter
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpequal
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpjpcomma
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpleftparen
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpminus
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kpplusminus
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+kprightparen
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+minus
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+-
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+equal
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+=
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+grave
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+`
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+print
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+volumeup
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audioraisevolume
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+volumedown
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audiolowervolume
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+mute
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audiomute
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+brightnessup
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86monbrightnessup
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+brightnessdown
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audiomedia
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audiomicmute
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+micmute
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audionext
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audioplay
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audioprev
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86audiostop
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+xf86monbrightnessdown
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+,
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+comma
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\&.\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+dot
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+period
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+/
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+question
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+slash
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+backslash
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+leftbrace
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+[
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+bracketleft
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+rightbrace
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+]
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+bracketright
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+;
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+scroll_lock
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+semicolon
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\&'\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+apostrophe
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+left
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+right
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+up
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+down
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+pause
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+home
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+delete
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+insert
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+end
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+pause
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+prior
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+next
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+pagedown
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+pageup
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f1
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f2
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f3
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f4
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f5
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f6
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f7
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f8
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f9
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f10
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f11
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f12
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f13
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f14
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f15
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f16
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f17
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f18
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f19
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f20
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f21
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f22
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f23
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+f24
+
+.RE
+.P
+.RE
+.SH AUTHORS
+.P
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .\&
+For more information about development, see .\&
+.P
+.SH SEE ALSO
+.P
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd(1)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd(5)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhks(1)\fR
+.RE
diff --git a/docs/swhkd-keys.5.scd b/docs/swhkd-keys.5.scd
new file mode 100644
index 0000000..a5e0370
--- /dev/null
+++ b/docs/swhkd-keys.5.scd
@@ -0,0 +1,174 @@
+swhkd(5) "github.com/waycrate/swhkd" "File Formats Manual"
+
+# NAME
+
+swhkd - Hotkey daemon inspired by sxhkd written in rust
+
+# VALID MODIFIERS
+
+ - Ctrl
+ - Control
+ - Super
+ - Mod4
+ - Alt
+ - Mod1
+ - Shift
+
+# VALID KEYS
+ - q
+ - w
+ - e
+ - r
+ - t
+ - y
+ - u
+ - i
+ - o
+ - p
+ - a
+ - s
+ - d
+ - f
+ - g
+ - h
+ - j
+ - k
+ - l
+ - z
+ - x
+ - c
+ - v
+ - b
+ - n
+ - m
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 0
+ - escape
+ - backspace
+ - capslock
+ - return
+ - enter
+ - tab
+ - space
+ - plus
+ - kp0
+ - kp1
+ - kp2
+ - kp3
+ - kp4
+ - kp5
+ - kp6
+ - kp7
+ - kp8
+ - kp9
+ - kpasterisk
+ - kpcomma
+ - kpdot
+ - kpenter
+ - kpequal
+ - kpjpcomma
+ - kpleftparen
+ - kpminus
+ - kpplusminus
+ - kprightparen
+ - minus
+ - -
+ - equal
+ - =
+ - grave
+ - `
+ - print
+ - volumeup
+ - xf86audioraisevolume
+ - volumedown
+ - xf86audiolowervolume
+ - mute
+ - xf86audiomute
+ - brightnessup
+ - xf86monbrightnessup
+ - brightnessdown
+ - xf86audiomedia
+ - xf86audiomicmute
+ - micmute
+ - xf86audionext
+ - xf86audioplay
+ - xf86audioprev
+ - xf86audiostop
+ - xf86monbrightnessdown
+ - ,
+ - comma
+ - .
+ - dot
+ - period
+ - /
+ - question
+ - slash
+ - backslash
+ - leftbrace
+ - [
+ - bracketleft
+ - rightbrace
+ - ]
+ - bracketright
+ - ;
+ - scroll_lock
+ - semicolon
+ - '
+ - apostrophe
+ - left
+ - right
+ - up
+ - down
+ - pause
+ - home
+ - delete
+ - insert
+ - end
+ - pause
+ - prior
+ - next
+ - pagedown
+ - pageup
+ - f1
+ - f2
+ - f3
+ - f4
+ - f5
+ - f6
+ - f7
+ - f8
+ - f9
+ - f10
+ - f11
+ - f12
+ - f13
+ - f14
+ - f15
+ - f16
+ - f17
+ - f18
+ - f19
+ - f20
+ - f21
+ - f22
+ - f23
+ - f24
+
+# AUTHORS
+
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .
+For more information about development, see .
+
+# SEE ALSO
+
+- *swhkd(1)*
+- *swhkd(5)*
+- *swhks(1)*
diff --git a/docs/swhkd.1.gz b/docs/swhkd.1.gz
new file mode 100644
index 0000000..4370bb2
--- /dev/null
+++ b/docs/swhkd.1.gz
@@ -0,0 +1,157 @@
+.\" Generated by scdoc 1.11.2
+.\" Complete documentation for this program is not available as a GNU info page
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.nh
+.ad l
+.\" Begin generated content:
+.TH "swhkd" "1" "2022-08-14" "github.com/shinyzenith/swhkd" "General Commands Manual"
+.P
+.SH NAME
+.P
+swhkd - Hotkey daemon inspired by sxhkd written in rust
+.P
+.SH SYNOPSIS
+.P
+\fBpkexec swhkd\fR [\fIflags\fR]
+.P
+.SH CONFIG FILE
+.P
+The config file goes in \fB/etc/swhkd/swhkdrc\fR.\& Since swhkd is written with a pkexec privilege escalation model in mind, we can'\&t detect
+\fB$XDG_CONFIG_HOME\fR.\&
+.P
+This can be avoided as such:
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Using the \fBinclude\fR statement in your config file.\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Using the \fB-c\fR flag to mention a custom config file at runtime.\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Symlinking the config file from \fB~/.\&config/swhkd/swhkdrc\fR or any other directory of choice to \fB/etc/swhkd/swhkdrc\fR.\&
+
+.RE
+.P
+.RE
+More about the config file syntax in `swhkd(5)`
+.P
+.SH OPTIONS
+.P
+\fB-h\fR, \fB--help\fR
+.RS 4
+Print help message and quit.\&
+.P
+.RE
+\fB-V\fR, \fB--version\fR
+.RS 4
+Print version information.\&
+.P
+.RE
+\fB-c\fR, \fB--config\fR
+.RS 4
+Set a custom config file path.\&
+.P
+.RE
+\fB-C\fR, \fB--cooldown\fR
+.RS 4
+Set a custom repeat cooldown duration.\& Default is 250ms.\& Most wayland
+compositors handle this server side however, either way works.\&
+.P
+.RE
+\fB-d\fR, \fB--debug\fR
+.RS 4
+Enable debug mode.\&
+.P
+.RE
+\fB-D, --device\fR
+.RS 4
+Manually set the keyboard devices to use.\& Can occur multiple times.\&
+.P
+.RE
+.SH SIGNALS
+.P
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Reload config file: `sudo pkill -HUP swhkd`
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Pause Hotkey checking: `sudo pkill -USR1 swhkd`
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Resume key checking: `sudo pkill -USR2 swhkd`
+
+.RE
+.P
+.RE
+.SH AUTHORS
+.P
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .\&
+For more information about development, see .\&
+.P
+.SH SEE ALSO
+.P
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd(5)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd-keys(5)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhks(1)\fR
+.RE
diff --git a/docs/swhkd.1.scd b/docs/swhkd.1.scd
new file mode 100644
index 0000000..f83e712
--- /dev/null
+++ b/docs/swhkd.1.scd
@@ -0,0 +1,59 @@
+swhkd(1) "github.com/shinyzenith/swhkd" "General Commands Manual"
+
+# NAME
+
+swhkd - Hotkey daemon inspired by sxhkd written in rust
+
+# SYNOPSIS
+
+*pkexec swhkd* [_flags_]
+
+# CONFIG FILE
+
+The config file goes in */etc/swhkd/swhkdrc*. Since swhkd is written with a pkexec privilege escalation model in mind, we can't detect
+*$XDG_CONFIG_HOME*.
+
+This can be avoided as such:
+ - Using the *include* statement in your config file.
+ - Using the *-c* flag to mention a custom config file at runtime.
+ - Symlinking the config file from *~/.config/swhkd/swhkdrc* or any other directory of choice to */etc/swhkd/swhkdrc*.
+
+More about the config file syntax in `swhkd(5)`
+
+# OPTIONS
+
+*-h*, *--help*
+ Print help message and quit.
+
+*-V*, *--version*
+ Print version information.
+
+*-c*, *--config*
+ Set a custom config file path.
+
+*-C*, *--cooldown*
+ Set a custom repeat cooldown duration. Default is 250ms. Most wayland
+ compositors handle this server side however, either way works.
+
+*-d*, *--debug*
+ Enable debug mode.
+
+*-D, --device*
+ Manually set the keyboard devices to use. Can occur multiple times.
+
+# SIGNALS
+
+ - Reload config file: `sudo pkill -HUP swhkd`
+ - Pause Hotkey checking: `sudo pkill -USR1 swhkd`
+ - Resume key checking: `sudo pkill -USR2 swhkd`
+
+# AUTHORS
+
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .
+For more information about development, see .
+
+# SEE ALSO
+
+ - *swhkd(5)*
+ - *swhkd-keys(5)*
+ - *swhks(1)*
diff --git a/docs/swhkd.5.gz b/docs/swhkd.5.gz
new file mode 100644
index 0000000..bc9a8a9
--- /dev/null
+++ b/docs/swhkd.5.gz
@@ -0,0 +1,186 @@
+.\" Generated by scdoc 1.11.2
+.\" Complete documentation for this program is not available as a GNU info page
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.nh
+.ad l
+.\" Begin generated content:
+.TH "swhkd" "5" "2022-08-14" "github.com/waycrate/swhkd" "File Formats Manual"
+.P
+.SH NAME
+.P
+swhkd - Hotkey daemon inspired by sxhkd written in rust
+.P
+.SH CONFIG FILE
+.P
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+A global config can be defined in \fB/etc/swhkd/swhkdrc\fR.\& Swhkd attempts to look in your \fB$XDG_CONFIG_HOME\fR, failing which it defaults to \fB~/.\&config\fR.\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+A local config overrides the global one.\& Local configs should be placed in the root of the project.\&
+
+.RE
+.P
+.RE
+.SH SYNTAX
+.P
+Each line of the configuration file is interpreted as so:
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+If it is empty or starts with #, it is ignored.\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+If it starts with a space, it is read as a command.\&
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+Otherwise, it is read as a hotkey.\&
+
+.RE
+.P
+.RE
+For valid keys and modifiers, check \fBswhkd-keys(5)\fR
+.P
+.SH EXAMPLE
+.P
+.nf
+.RS 4
+# Import another configuration file\&.
+# NOTE: the path provided must be absolute and not relative such as `~`\&.
+include /home/YourUserName/\&.config/swhkd/swhkdrc
+
+ignore alt + print # globally ignore a key binding
+
+# terminal
+super + ReTuRn # case insensitive
+ alacritty
+
+super + shift + enter # enter = return
+ kitty
+
+# file manager
+super + shift + f
+ pcmanfm
+
+# web-browser
+super + w
+ firefox
+
+# bspwm
+super + {_,shift + }{h,j,k,l}
+ bspc node -{f,s} {west,south,north,east}
+
+super + ctrl + alt + {Left
+,Down
+,Up
+,Right}
+ n=10;
+ { d1=left; d2=right; dx=-$n; dy=0;
+ , d1=bottom; d2=top; dx=0; dy=$n;
+ , d1=top; d2=bottom; dx=0; dy=-$n;
+ , d1=right; d2=left; dx=$n; dy=0;
+ }
+ bspc node --resize $d1 $dx $dy || bspc node --resize $d2 $dx $dy
+
+super + {,, \&.}
+ bspc node -f {next\&.local,prev\&.local}
+
+# screenshot
+print
+ scrot
+
+any + print # any represent at least one of the valid modifiers
+ scrot -s
+
+# Append with @ to run on key-release\&.
+@super + shift + f
+ pcmanfm
+
+# Append with ~ to emit the hotkey after the command is triggered\&. Aka, don\&'t swallow the hotkey\&.
+~super + shift + f
+ pcmanfm
+
+super + m
+ # commands starting with @ are internal commands\&.
+ # internal commands can be combined with normal commands with \&'&&\&'\&.
+ # \&'@enter\&' pushes a mode into the mode stack and starts listening only the
+ # key bindings defined in that mode
+ @enter music && echo "music" > ~/\&.config/waybar/swhkd-mode
+
+mode music # use the mode statement to define a mode
+q
+ # \&'@escape\&' pops the current mode out of the mode stack
+ # the default mode is \&'normal mode\&', which is always on the bottom of the mode
+ # stack and can never be escaped
+ @escape && echo "normal" > ~/\&.config/waybar/swhkd-mode
+{n, p, space, r, z, y}
+ mpc {next, prev, toggle, repeat, random, single}
+endmode # use endmode if you want to set more key bindings for normal mode
+
+.fi
+.RE
+.SH AUTHORS
+.P
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .\&
+For more information about development, see .\&
+.P
+.SH SEE ALSO
+.P
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd(1)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd-keys(5)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhks(1)\fR
+.RE
diff --git a/docs/swhkd.5.scd b/docs/swhkd.5.scd
new file mode 100644
index 0000000..1579733
--- /dev/null
+++ b/docs/swhkd.5.scd
@@ -0,0 +1,106 @@
+swhkd(5) "github.com/waycrate/swhkd" "File Formats Manual"
+
+# NAME
+
+swhkd - Hotkey daemon inspired by sxhkd written in rust
+
+# CONFIG FILE
+
+ - A global config can be defined in */etc/swhkd/swhkdrc*. Swhkd attempts to look in your *$XDG_CONFIG_HOME*, failing which it defaults to *~/.config*.
+ - A local config overrides the global one. Local configs should be placed in the root of the project.
+
+# SYNTAX
+
+Each line of the configuration file is interpreted as so:
+ - If it is empty or starts with #, it is ignored.
+ - If it starts with a space, it is read as a command.
+ - Otherwise, it is read as a hotkey.
+
+For valid keys and modifiers, check *swhkd-keys(5)*
+
+# EXAMPLE
+
+```
+# Import another configuration file.
+# NOTE: the path provided must be absolute and not relative such as `~`.
+include /home/YourUserName/.config/swhkd/swhkdrc
+
+ignore alt + print # globally ignore a key binding
+
+# terminal
+super + ReTuRn # case insensitive
+ alacritty
+
+super + shift + enter # enter = return
+ kitty
+
+# file manager
+super + shift + f
+ pcmanfm
+
+# web-browser
+super + w
+ firefox
+
+# bspwm
+super + {_,shift + }{h,j,k,l}
+ bspc node -{f,s} {west,south,north,east}
+
+super + ctrl + alt + {Left\
+,Down\
+,Up\
+,Right}
+ n=10; \
+ { d1=left; d2=right; dx=-$n; dy=0; \
+ , d1=bottom; d2=top; dx=0; dy=$n; \
+ , d1=top; d2=bottom; dx=0; dy=-$n; \
+ , d1=right; d2=left; dx=$n; dy=0; \
+ } \
+ bspc node --resize $d1 $dx $dy || bspc node --resize $d2 $dx $dy
+
+super + {\,, .}
+ bspc node -f {next.local,prev.local}
+
+# screenshot
+print
+ scrot
+
+any + print # any represent at least one of the valid modifiers
+ scrot -s
+
+# Append with @ to run on key-release.
+@super + shift + f
+ pcmanfm
+
+# Append with ~ to emit the hotkey after the command is triggered. Aka, don't swallow the hotkey.
+~super + shift + f
+ pcmanfm
+
+super + m
+ # commands starting with @ are internal commands.
+ # internal commands can be combined with normal commands with '&&'.
+ # '@enter' pushes a mode into the mode stack and starts listening only the
+ # key bindings defined in that mode
+ @enter music && echo "music" > ~/.config/waybar/swhkd-mode
+
+mode music # use the mode statement to define a mode
+q
+ # '@escape' pops the current mode out of the mode stack
+ # the default mode is 'normal mode', which is always on the bottom of the mode
+ # stack and can never be escaped
+ @escape && echo "normal" > ~/.config/waybar/swhkd-mode
+{n, p, space, r, z, y}
+ mpc {next, prev, toggle, repeat, random, single}
+endmode # use endmode if you want to set more key bindings for normal mode
+
+```
+# AUTHORS
+
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .
+For more information about development, see .
+
+# SEE ALSO
+
+ - *swhkd(1)*
+ - *swhkd-keys(5)*
+ - *swhks(1)*
diff --git a/docs/swhks.1.gz b/docs/swhks.1.gz
new file mode 100644
index 0000000..02c76b3
--- /dev/null
+++ b/docs/swhks.1.gz
@@ -0,0 +1,52 @@
+.\" Generated by scdoc 1.11.2
+.\" Complete documentation for this program is not available as a GNU info page
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.nh
+.ad l
+.\" Begin generated content:
+.TH "swhks" "1" "2022-08-14" "github.com/shinyzenith/swhkd" "General Commands Manual"
+.P
+.SH NAME
+.P
+swhks - Server for swhkd, used to run user level commands over IPC.\&
+.P
+.SH SYNOPSIS
+.P
+\fBswhks\fR
+.P
+.SH AUTHORS
+.P
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .\&
+For more information about development, see .\&
+.P
+.SH SEE ALSO
+.P
+.RS 4
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd(1)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd(5)\fR
+.RE
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.IP \(bu 4
+.\}
+\fBswhkd-keys(5)\fR
+.RE
diff --git a/docs/swhks.1.scd b/docs/swhks.1.scd
new file mode 100644
index 0000000..7fded90
--- /dev/null
+++ b/docs/swhks.1.scd
@@ -0,0 +1,20 @@
+swhks(1) "github.com/shinyzenith/swhkd" "General Commands Manual"
+
+# NAME
+
+swhks - Server for swhkd, used to run user level commands over IPC.
+
+# SYNOPSIS
+
+*swhks*
+
+# AUTHORS
+
+Maintained by Shinyzenith , EdenQwQ , and Angelo Fallaria .
+For more information about development, see .
+
+# SEE ALSO
+
+ - *swhkd(1)*
+ - *swhkd(5)*
+ - *swhkd-keys(5)*
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
new file mode 100644
index 0000000..292fe49
--- /dev/null
+++ b/rust-toolchain.toml
@@ -0,0 +1,2 @@
+[toolchain]
+channel = "stable"