• Stars
    star
    181
  • Rank 207,268 (Top 5 %)
  • Language QML
  • License
    GNU General Publi...
  • Created almost 2 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Easy window layout management for KDE Plasma

✨ Exquisite

A KWin script that allows you to tile windows in pre-defined places using a graphical interface!

KDE Store link | Widget KDE Store link

If you like this KWin script and want to support me, consider getting me a coffe! :D

ko-fi


screenshot_0 screenshot_1

Installation

You can download Exquisite from the KDE Store (System Settings > Window Management > KWin Scripts > Get New Scripts...). For development, you can clone the repo and run ./install.sh. KWin needs to be restarted on every install (either log out and log back in or run kwin_x11 --replace, use kwin_wayland if you're on a Wayland session).

Usage

The default shortcut is Ctrl + Alt + D but it can be configured from System Settings > Shortcuts > KWin > Exquisite. Click on a window and click a layout box on the Exquisite window to place that window in that layout. You can do this for multiple windows and close the Exquisite window when you're done (by the close button on the top right or by pressing the shortcut keys).

showcase.mp4

There is also a widget companion available if you want to toggle Exquisite visually. You can get it from the KDE Store via Right Click on Desktop > Add Widget > Get New Widgets. The widget source code lives under the widget directory.

screenshot_widget

Configuration

Exquisite can be configured from System Settings > Window Management > KWin Scripts. Current configuration options include:

  • Column count for the main window
  • Main window position (Top, Center or Bottom)
  • Main window header visibility
  • Whether to hide when a window is tiled
  • Whether to hide when a layout is tiled (all windows in the layout has been clicked)
  • Whether to maximize the window or not when the background button on a layout is clicked, the default behaviour might annoy some people

Keep in mind, KWin needs to be restarted for the settings to apply.

Troubleshooting

Doesn't Work on Older Plasma/Distribution Versions

If you don't have an up to date system (e.g older Debian or Ubuntu versions), Exquisite may not work out of the box. In order to resolve this, you need to make the following changes:

  • In the file ~/.local/share/kwin/scripts/exquisite/contents/ui/main.qml, find the following line (depends on the current version of Exquisite but should be around line 90):
source: fileUrl

and change it to:

source: fileURL
  • In the file ~/.local/share/kwin/scripts/exquisite/contents/ui/lib/WindowLayout.qml, find the following lines (they should be around line 13):
implicitWidth: 160*1.2 * PlasmaCore.Units.devicePixelRatio
implicitHeight: 90*1.2 * PlasmaCore.Units.devicePixelRatio

and change them to:

implicitWidth: 120
implicitHeight: 70

If you have further troubles, please open an issue.

Modifying and Creating Layouts

Exquisite layouts are stored in ~/.local/share/kwin/scripts/exquisite/contents/layouts/. You can freely change them, remove the ones you don't need or add new ones. They're named by numbers so if you're going to add a new one, look at the last one's number and name your file one up that number. Let's take a look at an existing one (0.qml) to understand how they are structured:

import QtQuick 2.6

Item {
    property string name: "Two Vertical Split"
    property var windows: [
        {
            row: 0,
            rowSpan: 6,
            column: 0,
            columnSpan: 12
        },
        {
            row: 0,
            rowSpan: 6,
            column: 6,
            columnSpan: 12
        }
    ]
}

The import statement and Item declaration are boilerplate, what we really need to understand are the two properties: name and windows. name is pretty self-explanatory, it's the name of the layout. The names aren't currently used but they might be in the future, better to write something explanatory rather than not.

The windows parameter is an array of JS objects. Each object represents a window and has 4 entries: row, rowSpan, column and columnSpan. These entries describe how the window is laid out in the layout, let's take a look at each one in detail:

  • row: The row that the top left corner of the window will be placed at. Rows start from the left side of a grid so you can think of this parameter as like the y position of the window.
  • rowSpan: The amount of grid cells that the window is going to span inside a row. This includes the origin cell which is row. You can think of this as like the width of the window.
  • column: The column that the top left corner of the window will be placed at. Columns start from the upper side of the grid so you can think of this as like the x position of the window.
  • columnSpan: The amount of grid cells that the window is going to span inside a column. This includes the origin cell which is column. You can think of this as like the height of the window.

The grid that the layout windows are placed in is 12x12 (choose 12 since it's a relatively small number and can be divided by 2, 3 and 4). For row and column, the minimum value is 0 and the maximum 11. For rowSpan and columnSpan, the minimum is 1 and the maximum is 12.

Here is an image for better explanation:

screenshot_1

The window in this image would be:

{
    row: 2,
    rowSpan: 7,
    column: 1,
    columnSpan: 9
}

More Repositories

1

qpaperOS

Smartwatch firmware for the LILYGO T-Wrist E-Paper ESP32 development board
C
451
star
2

leaf-kde

A forest green dark & light theme for the KDE Plasma desktop
Ruby
64
star
3

ClearClock

A simple and clean date/time plasmoid for your KDE desktop
QML
41
star
4

qlock-os

Smartwatch firmware for LILYGO T-Display-S3
C
16
star
5

qewer33.github.io

My personal website built with Svelte and p5.js
Svelte
13
star
6

image-collage-filter

A python script to make images that consist of more images!
Python
11
star
7

WickedRPS

A battlefield of rocks, papers and scissors
JavaScript
10
star
8

cloudflare-url-shortener

A very simple URL shortener built with Rust and Cloudflare Workers
Rust
8
star
9

simple-plasmoid-template

A simple KDE Plasma plasmoid (widget) template
QML
7
star
10

Fonky

A Google Fonts frontend for the KDE Plasma desktop
QML
6
star
11

sus_runner

sus game
Rust
4
star
12

neovim-config

My personal Neovim configuration files
Lua
3
star
13

generatory

A unique tool to aid game developers and designers on creating generative assets
GDScript
3
star
14

BashNotes

A simple bash script for managing notes
Shell
3
star
15

ascii_table_creator_3000

an interactive Ruby script that helps you create text tables right in your terminal!
Ruby
3
star
16

cli-ssic-games

My implementations of some classic games such as minesweeper or snake for the CLI in Ruby
Ruby
3
star
17

qewer33-blog

My personal blog
Astro
2
star
18

QDev-Boards

A series of development boards that are inexpensive, simple and easy to order and assemble for beginner hobbyists
HTML
2
star
19

VClicker

A simple, cross-platform mouse clicking utility made with Python and Qt Quick.
QML
2
star
20

Sorus-Website

CSS
2
star
21

Sorus-Installer

Java
1
star
22

personal-website

My personal portfolio website made with p5.js and TypeScript
HTML
1
star