summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/AppSearch.qml118
-rw-r--r--utils/CircularProgress.qml91
-rw-r--r--utils/IWindow.qml12
3 files changed, 0 insertions, 221 deletions
diff --git a/utils/AppSearch.qml b/utils/AppSearch.qml
deleted file mode 100644
index 6d1ad15..0000000
--- a/utils/AppSearch.qml
+++ /dev/null
@@ -1,118 +0,0 @@
-pragma Singleton
-
-import "fuzzysort.js" as Fuzzy
-import "levendist.js" as Levendist
-import Quickshell
-import Quickshell.Io
-import qs.config
-
-/**
- * - Eases fuzzy searching for applications by name
- * - Guesses icon name for window class name
- */
-Singleton {
- id: root
- property bool sloppySearch: General.sloppySearch ?? false
- property real scoreThreshold: 0.2
- property var substitutions: ({
- "code-url-handler": "visual-studio-code",
- "Code": "visual-studio-code",
- "gnome-tweaks": "org.gnome.tweaks",
- "pavucontrol-qt": "pavucontrol",
- "wps": "wps-office2019-kprometheus",
- "wpsoffice": "wps-office2019-kprometheus",
- "footclient": "foot",
- "zen": "zen-browser",
- "brave-browser": "brave-desktop"
- })
- property var regexSubstitutions: [
- {
- "regex": /^steam_app_(\d+)$/,
- "replace": "steam_icon_$1"
- },
- {
- "regex": /Minecraft.*/,
- "replace": "minecraft"
- },
- {
- "regex": /.*polkit.*/,
- "replace": "system-lock-screen"
- },
- {
- "regex": /gcr.prompter/,
- "replace": "system-lock-screen"
- }
- ]
-
- readonly property list<DesktopEntry> list: Array.from(DesktopEntries.applications.values).sort((a, b) => a.name.localeCompare(b.name))
-
- readonly property var preppedNames: list.map(a => ({
- name: Fuzzy.prepare(`${a.name} `),
- entry: a
- }))
-
- function fuzzyQuery(search: string): var { // Idk why list<DesktopEntry> doesn't work
- if (root.sloppySearch) {
- const results = list.map(obj => ({
- entry: obj,
- score: Levendist.computeScore(obj.name.toLowerCase(), search.toLowerCase())
- })).filter(item => item.score > root.scoreThreshold).sort((a, b) => b.score - a.score);
- return results.map(item => item.entry);
- }
-
- return Fuzzy.go(search, preppedNames, {
- all: true,
- key: "name"
- }).map(r => {
- return r.obj.entry;
- });
- }
-
- function iconExists(iconName) {
- if (!iconName || iconName.length == 0)
- return false;
- return (Quickshell.iconPath(iconName, true).length > 0) && !iconName.includes("image-missing");
- }
-
- function guessIcon(str) {
- if (!str || str.length == 0)
- return "image-missing";
-
- // Normal substitutions
- if (substitutions[str])
- return substitutions[str];
-
- // Regex substitutions
- for (let i = 0; i < regexSubstitutions.length; i++) {
- const substitution = regexSubstitutions[i];
- const replacedName = str.replace(substitution.regex, substitution.replace);
- if (replacedName != str)
- return replacedName;
- }
-
- // If it gets detected normally, no need to guess
- if (iconExists(str))
- return str;
-
- let guessStr = str;
- // Guess: Take only app name of reverse domain name notation
- guessStr = str.split('.').slice(-1)[0].toLowerCase();
- if (iconExists(guessStr))
- return guessStr;
- // Guess: normalize to kebab case
- guessStr = str.toLowerCase().replace(/\s+/g, "-");
- if (iconExists(guessStr))
- return guessStr;
- // Guess: First fuzzy desktop entry match
- const searchResults = root.fuzzyQuery(str);
- if (searchResults.length > 0) {
- const firstEntry = searchResults[0];
- guessStr = firstEntry.icon;
- if (iconExists(guessStr))
- return guessStr;
- }
-
- // Give up
- return str;
- }
-}
diff --git a/utils/CircularProgress.qml b/utils/CircularProgress.qml
deleted file mode 100644
index 240e520..0000000
--- a/utils/CircularProgress.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-// From https://github.com/rafzby/circular-progressbar with modifications
-// License: LGPL-3.0 - A copy can be found in `licenses` folder of repo
-
-import QtQuick
-
-/**
- * Material 3 circular progress. See https://m3.material.io/components/progress-indicators/specs
- */
-Item {
- id: root
-
- property int size: 30
- property int lineWidth: 2
- property real value: 0
- // property color primaryColor: Appearance.m3colors.m3onSecondaryContainer
- // property color secondaryColor: Appearance.colors.colSecondaryContainer
- property real gapAngle: Math.PI / 9
- property bool fill: false
- property int fillOverflow: 2
- property int animationDuration: 1000
- property var easingType: Easing.OutCubic
-
- width: size
- height: size
-
- signal animationFinished
-
- onValueChanged: {
- canvas.degree = value * 360;
- }
- // onPrimaryColorChanged: {
- // canvas.requestPaint();
- // }
- // onSecondaryColorChanged: {
- // canvas.requestPaint();
- // }
-
- Canvas {
- id: canvas
-
- property real degree: 0
-
- anchors.fill: parent
- antialiasing: true
-
- onDegreeChanged: {
- requestPaint();
- }
-
- onPaint: {
- var ctx = getContext("2d");
- var x = root.width / 2;
- var y = root.height / 2;
- var radius = root.size / 2 - root.lineWidth;
- var startAngle = (Math.PI / 180) * 270;
- var fullAngle = (Math.PI / 180) * (270 + 360);
- var progressAngle = (Math.PI / 180) * (270 + degree);
- var epsilon = 0.01; // Small angle in radians
-
- ctx.reset();
- if (root.fill) {
- // ctx.fillStyle = root.secondaryColor;
- ctx.beginPath();
- ctx.arc(x, y, radius + fillOverflow, startAngle, fullAngle);
- ctx.fill();
- }
- ctx.lineCap = 'round';
- ctx.lineWidth = root.lineWidth;
-
- // Secondary
- ctx.beginPath();
- ctx.arc(x, y, radius, progressAngle + gapAngle, fullAngle - gapAngle);
- // ctx.strokeStyle = root.secondaryColor;
- ctx.stroke();
-
- // Primary (value indication)
- var endAngle = progressAngle + (value > 0 ? 0 : epsilon);
- ctx.beginPath();
- ctx.arc(x, y, radius, startAngle, endAngle);
- // ctx.strokeStyle = root.primaryColor;
- ctx.stroke();
- }
-
- Behavior on degree {
- NumberAnimation {
- duration: root.animationDuration
- easing.type: root.easingType
- }
- }
- }
-}
diff --git a/utils/IWindow.qml b/utils/IWindow.qml
deleted file mode 100644
index 85f2205..0000000
--- a/utils/IWindow.qml
+++ /dev/null
@@ -1,12 +0,0 @@
-import Quickshell
-import Quickshell.Wayland
-
-PanelWindow {
- required property string name
- required property ShellScreen modelData
-
- screen: modelData
- WlrLayershell.namespace: `${name}`
- color: "transparent"
-}
-