Files
dotfiles/quickshell/shell.qml
T
nvrl 35048ae283 feat(quickshell): replace fuzzel with an in-process launcher
fuzzel could only answer "which app", so launching Brave at a URL meant
picking the app, waiting for it, then typing the address somewhere else.
The launcher now takes a verb and an object in one line: type
`gitlab.enqs.de` and every app that can open it sorts to the top, default
browser first, ready for Enter — or arrow/hjkl down to Brave's New
Incognito Window, which is offered as a peer of Brave itself rather than
hidden behind a submenu.

services/Apps.qml is the brain and holds no UI: it flattens desktop
entries and their actions into one index, classifies the typed argument
(url / mail / path), ranks by fuzzy match plus handler affinity plus
frecency, and launches. Launching through `uwsm app` keeps each app in its
own scope; entries whose Exec declares no field code (Brave's
`--incognito` action, among others) are launched by tokenising Exec per
the Desktop Entry spec and appending the argument, never via `sh -c`.

Four prefixes reuse the same window, so there is one picker and one set of
keys: `>` runs a command, `=` evaluates arithmetic, `:` is clipboard
history (cliphist, which had been a second fuzzel invocation), and a
dmenu mode is driven over IPC.

quickshell/scripts/takemi-dmenu is the bridge for that last one — a
`fuzzel --dmenu` drop-in for scripts that want a picker, symlinked into
~/.local/bin. fluxo's bt menu now goes through it.

Living in the Quickshell process means the window is on screen on the
frame the bind fires, with no process to spawn.

Removes fuzzel entirely: its config, its theme submodule, the package,
and the last consumers (the bar sigil, fluxo's menu_command). Also drops
hypr/scripts/powermenu.sh, which was fuzzel-based and bound to nothing.
2026-09-16 15:46:51 +02:00

74 lines
1.6 KiB
QML

import QtQuick
import Quickshell
import "root:/config"
import "root:/services"
import "root:/bar"
import "root:/launcher"
import "root:/overlays"
import "root:/lock"
// Takemi — a Persona 5 flavoured Quickshell desktop.
//
// bar/ the top bar and its modules
// popouts/ hover panels hanging off bar modules
// launcher/ the application launcher
// overlays/ power menu, notification toasts, OSD
// lock/ session lock
// services/ data sources (fluxo, pipewire, bluez, upower, mpris, …)
// config/ palette, type, geometry, motion
ShellRoot {
// Services are lazily constructed on first use. The shell wants several of
// them warm from the start — polling, the notification server, the audio
// OSD — so touch them here rather than waiting for a hover.
Component.onCompleted: {
void Sys.cpuUsage;
void Audio.ready;
void Battery.available;
void Brightness.percent;
void Notifs.count;
void Media.hasPlayer;
void Net.wifiEnabled;
void Bt.available;
void Actions.powerMenuOpen;
void Apps.index;
}
Variants {
model: Quickshell.screens
Bar {}
}
Variants {
model: Quickshell.screens
Rail {}
}
Variants {
model: Quickshell.screens
Launcher {}
}
Variants {
model: Quickshell.screens
PowerMenu {}
}
Variants {
model: Quickshell.screens
Toasts {}
}
Variants {
model: Quickshell.screens
Osd {}
}
Lock {}
}