summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/btrtile/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/btrtile/README.md')
-rw-r--r--dwl-patches/patches/btrtile/README.md103
1 files changed, 103 insertions, 0 deletions
diff --git a/dwl-patches/patches/btrtile/README.md b/dwl-patches/patches/btrtile/README.md
new file mode 100644
index 0000000..4766aa7
--- /dev/null
+++ b/dwl-patches/patches/btrtile/README.md
@@ -0,0 +1,103 @@
+### Description
+
+# btrtile — A Focus-Driven Tiling Layout
+
+It provides a focus-driven, mouse- and keyboard-friendly tiling layout that grants you granular control over how clients are placed and resized.
+
+![btrtile in action](https://github.com/julmajustus/dwl-patches/blob/main/demos/btrtiledemo.gif?raw=true)
+
+---
+
+# Why btrtile
+
+While dwl’s patches folder is full of different layouts, I couldn't find suitable layout that would work well with my workflow and single ultrawide monitor setup. btrtile aims to solve that by introducing a layout strategy that splits clients according to user focus and pointer position.
+
+---
+
+# Features
+
+- **Combined Tiling and Management**
+ Combines tiling layout and management of clients under one patchset.
+
+- **Focus-Driven Splits**
+ When you add a new client, btrtile checks where your pointer is relative to the focused client’s geometry.
+ - If the pointer is on the left half (for a horizontally large client), the new client spawns on the left side, and vice versa.
+ - By default, new splits are 50/50.
+
+- **Adaptive Splitting**
+ - If the area to be split is wider than its height, btrtile does a vertical split.
+ - Otherwise, it does a horizontal split.
+
+- **Keyboard and Mouse Driven**
+ - Supports keyboard-based commands for quick ratio adjustments and client swapping.
+ - Mouse-based resizing and moving are integrated for more intuitive manipulation.
+
+---
+
+# How It Works
+
+btrtile organizes clients using a binary tree data structure that represents splits either vertically or horizontally.
+
+When a new client appears:
+1. **Focused Client Detection**
+ btrtile checks your pointer location to find which client (if any) you’re interacting with.
+2. **Split Creation**
+ - If there’s a focused client, btrtile creates a split node around it, placing the new client on the side where your pointer is.
+
+3. **Ratio Management**
+ Each split node has a `split_ratio` (defaulting to 0.5). This ratio defines how much space is allocated to each child node. You can adjust this ratio using keyboard or mouse actions.
+
+---
+
+# What It Doesn’t Handle
+
+- **Suckless philosophy**
+ - Yea, it's a bloat. I tried to hide the suck inside a single file as much I could. While this approach is not ideal, it's how it's at least for now.
+
+---
+
+# Configuring btrtile
+
+btrtile adds couple variables to config.h to fine tune the mouse resizing of tiled clients.
+
+1. **resize_factor**
+ - A multiplier to transfer pointer movement to client weight ratio. Depends heavily on mouse sensivity.
+ Defaults to 0.0002f.
+
+2. **resize_interval_ms**
+ - A time based resize call limiter. Depends on framerate and screen refresh rate.
+ Defaults to 16ms. (~60 resize updates per second)
+
+Fine tune these values to find the best values for your setup, smoother resizing can significally increase cpu overhead.
+If mouse resizing feels sluggish, you can try compiling dwl with more aggressive optimization flags like -O2/-O3.
+
+---
+
+# Patch recommendations
+
+1. **Patches that I use with my btrtile**
+
+ - [focusdir](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/focusdir)
+ Great patch to move focus between clients.
+
+ - [rotatetags](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/rotatetags)
+ Good patch to rotate the view or shift clients between tags.
+
+ - [warpcursor](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/warpcursor)
+ Moves cursor location to focused client.
+
+ - [pertag](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/pertag)
+ Allows each tag to have individual layout setups.
+
+ - [gaps](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/gaps)
+ Add gaps between clients.
+
+---
+
+### Download
+- [git branch](https://codeberg.org/julmajustus/dwl/src/branch/btrtile-dev)
+- [0.7](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/btrtile/btrtile-v0.7.patch)
+- [0.7 WITH gaps](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/btrtile/btrtile-v0.7-gaps.patch)
+
+### Authors
+- [julmajustus](https://codeberg.org/julmajustus)