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.
74 lines
1.6 KiB
QML
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 {}
|
|
}
|