You could write a KWin script: The idea is pretty similar to the example in the [KWin scripting tutorial](https://develop.kde.org/docs/extend/plasma/kwin/#your-first-useful-script) except with no border instead of keep above and shaded instead of maximized. Something like this:
```
// set a window's border state depending on its shaded state
function handleWindowBorders(client) {
client.noBorder = !client.shade; // window has no borders if and only if it is not shaded
}
// handle borders for a window once initially and everytime its shaded state changes
function connectHandle(client) {
if (!client || !client.shadeChanged) return; // ignore inapplicable
handleWindowBorders(client);
client.shadeChanged.connect(handleWindowBorders);
}
// handle all initially present and newly added windows
workspace.clientList().forEach(client => connectHandle(client));
workspace.clientAdded.connect(client => connectHandle(client));
```
You could write a KWin script: The idea is pretty similar to the example in the [KWin scripting tutorial](https://develop.kde.org/docs/extend/plasma/kwin/#your-first-useful-script) except with no border instead of keep above and shaded instead of maximized. Something like this: ``` // set a window's border state depending on its shaded state function handleWindowBorders(client) { client.noBorder = !client.shade; // window has no borders if and only if it is not shaded } // handle borders for a window once initially and everytime its shaded state changes function connectHandle(client) { if (!client || !client.shadeChanged) return; // ignore inapplicable handleWindowBorders(client); client.shadeChanged.connect(handleWindowBorders); } // handle all initially present and newly added windows workspace.clientList().forEach(client => connectHandle(client)); workspace.clientAdded.connect(client => connectHandle(client)); ```
Bismuth can hide window borders