Skip to content
Snippets Groups Projects
README.md 7.16 KiB
Newer Older
esjeon's avatar
esjeon committed
Kröhnkite
=========

esjeon's avatar
esjeon committed
[![AUR-git](https://img.shields.io/aur/version/kwin-scripts-krohnkite-git.svg?label=AUR-git)](https://aur.archlinux.org/packages/kwin-scripts-krohnkite-git/)

esjeon's avatar
esjeon committed
A dynamic tiling extension for KWin.

esjeon's avatar
esjeon committed
Kröhnkite is mainly inspired by [dwm][] from suckless folks, and aims to
provide rock solid stability while fully integrating into KWin.

The name of the script is from mineral [Kröhnkite][wikipedia]; it starts with
K and looks cool.

[dwm]: https://dwm.suckless.org/
esjeon's avatar
esjeon committed
[wikipedia]: https://en.wikipedia.org/wiki/Kr%C3%B6hnkite
esjeon's avatar
esjeon committed
![screenshot](img/screenshot.png)
esjeon's avatar
esjeon committed

esjeon's avatar
esjeon committed
Features
esjeon's avatar
esjeon committed
--------
esjeon's avatar
esjeon committed
 * DWM-like window tiling
    - Dynamically tile windows, rather than manually placing each.
    - Floating windows
esjeon's avatar
esjeon committed
 * Fully integrates into KWin features, including:
    - **Multi-screen**
    - **Activities & Virtual desktop**
    - Basic window management (minimize, fullscreen, switching, etc)
esjeon's avatar
esjeon committed
 * Multiple Layout Support
    - Tiling layout
    - Monocle layout
    - Desktop-friendly layouts (Spread, Stair)

Development Requirement
-----------------------
esjeon's avatar
esjeon committed

 * Typescript (tested w/ 3.1.x)
 * GNU Make
 * p7zip (7z)


esjeon's avatar
esjeon committed
Installation
------------

You can install Kröhnkite in multiple ways.

### Using .kwinscript package file ###

You can download `krohnkite-x.x.kwinscript` file, and install it through
*System Settings*.

 1. Download the kwinscript file
esjeon's avatar
esjeon committed
 2. Open `System Settings` > `Window Management` > `KWin Scripts`
 3. Press `Import KWin script...` on the top-right corner
 4. Select the downloaded file

esjeon's avatar
esjeon committed
Alternatively, through command-line:
esjeon's avatar
esjeon committed
    plasmapkg2 -t kwinscript -i krohnkite.kwinscript # installing new script
    plasmapkg2 -t kwinscript -u krohnkite.kwinscript # upgrading existing script

To uninstall the package:

    plasmapkg2 -t kwinscript -r krohnkite

### Installing from Git repository ###

The simplest method would be:

    make install
esjeon's avatar
esjeon committed
    make uninstall # to uninstall the script

This will automatically build and install kwinscript package.

You can also manually build package file using:

    make package
esjeon's avatar
esjeon committed
The generated package file can be imported from "KWin Script" dialog.
### Simply Trying Out ###

esjeon's avatar
esjeon committed
Krohnkite can be temporarily loaded without installing the script:
    make run
    make stop
esjeon's avatar
esjeon committed
Note that Krohnkite can destroy itself completely once it is disabled, so no
restart is required to deactivated it.
### Enabling User-Configuration ###

esjeon's avatar
esjeon committed
[It is reported][kwinconf] that a manual step is required to enable user
configuration of KWin scripts. This is a limitation of KWin scripting.

To enable configuration, you must perform the following in command-line:

    mkdir -p ~/.local/share/kservices5/
    ln -s ~/.local/share/kwin/scripts/krohnkite/metadata.desktop ~/.local/share/kservices5/krohnkite.desktop

A configuration button will appear in `KWin Scripts` in `System Settings`.

![config button shown](img/conf.png)

esjeon's avatar
esjeon committed
To make changes effective, **the script must be reactivate**:
  1) On `KWin Scripts` dialog, untick Krohnkite
  2) `Apply`
  3) tick Krohnkite
  4) `Apply`

[kwinconf]: https://github.com/faho/kwin-tiling/issues/79#issuecomment-311465357


Default Key Bindings
--------------------

| Key               | Action                         |
| ----------------- | ------------------------------ |
| Meta + J          | Focus Down/Next                |
| Meta + K          | Focus Up/Previous              |
| Meta + H          | Left                           |
| Meta + L          | Right                          |
|                   |                                |
| Meta + Shift + J  | Move Down/Next                 |
| Meta + Shift + K  | Move Up/Previous               |
| Meta + Shift + H  | Move Left                      |
| Meta + Shift + L  | Move Right                     |
|                   |                                |
| Meta + I          | Increase                       |
| Meta + D          | Decrease                       |
| Meta + F          | Toggle Floating                |
| Meta + \          | Cycle Layout                   |
| Meta + Return     | Set as Master                  |
|                   |                                |
| Meta + T          | Use Tile Layout                |
| Meta + M          | Use Monocle Layout             |
| *unbound*         | Use Spread Layout              |
| *unbound*         | Use Stair Layout               |
esjeon's avatar
esjeon committed
### Setting Up for Multi-Screen ###

Krohnkite supports multi-screen setup, but KWin has to be configured to unlock
the full potential of the script.

1. Enable `Separate Screen Focus` under `Window Management` > 
   `Window Behavior` > `Multiscreen Behaviour`
2. Bind keys for global shortcut `Switch to Next/Previous Screen`
   (Recommend: `Meta + ,` / `Meta + .`)
3. Bind keys for global shortcut `Window to Next/Previous Screen`
   (Recommend: `Meta + <` / `Meta + >`)

Note: `Separate Screen Focus` appears only when multiple monitors are present.

### Removing Title Bars ###

esjeon's avatar
esjeon committed
Breeze window decoration can be configured to completely remove title bars from
all windows:

1. `System Setting` > `Application Style` > `Window Decorations`
esjeon's avatar
esjeon committed
2. Click `Configure Breeze` inside the decoration preview.
3. `Window-Specific Overrides` tab > `Add` button
esjeon's avatar
esjeon committed
4. Enter the followings, and press `Ok`:
   - `Regular expression to match`: `.*`
esjeon's avatar
esjeon committed
   - Tick `Hide window title bar`

### Changing Border Colors ###

esjeon's avatar
esjeon committed
Changing the border color makes it easier to identify current window. This is
convinient if title bars are removed.
esjeon's avatar
esjeon committed
1. Open `~/.config/kdeglobals` with your favorite editor
2. Scroll down and find `[WM]` section
esjeon's avatar
esjeon committed
3. Append the followings to the section:
    - `frame=61,174,233`: set the border color of active window to *RGB(61,174,233)*
    - `inactiveFrame=239,240,241`: set the border color of inactive window to *RGB(239,240,241)*

   Here's a nice 2-liner that'll do it for you:

        kwriteconfig5 --file ~/.config/kdeglobals --group WM --key frame 61,174,233
        kwriteconfig5 --file ~/.config/kdeglobals --group WM --key inactiveFrame  239,240,241
4. You must **restart** your session to see changes. (i.e. re-login, reboot)

esjeon's avatar
esjeon committed
(Note: the RGB values presented here are for the default Breeze theme)
Useful Development Resources
----------------------------
 * [KWin Scripting Tutorial](https://techbase.kde.org/Development/Tutorials/KWin/Scripting)
 * [KWin Scripting API 4.9 Reference](https://techbase.kde.org/Development/Tutorials/KWin/Scripting/API_4.9)
 * KDE API Reference
    - [KWin::Workspace Class](https://api.kde.org/4.x-api/kde-workspace-apidocs/kwin/html/classKWin_1_1Workspace.html)
    - [KWin::Toplevel Class](https://api.kde.org/4.x-api/kde-workspace-apidocs/kwin/html/classKWin_1_1Toplevel.html)
    - [KWin::Client Class](https://api.kde.org/4.x-api/kde-workspace-apidocs/kwin/html/classKWin_1_1Client.html)
 * Adding configuration dialog
    - [Development/Tutorials/Plasma/JavaScript/ConfigDialog](https://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/ConfigDialog)
    - [Development/Tutorials/Using KConfig XT](https://techbase.kde.org/Development/Tutorials/Using_KConfig_XT)
 * `*.ui` files can be edited with [Qt Designer](http://doc.qt.io/qt-5/qtdesigner-manual.html).
   It's very straight-forward if you're used to UI programming.