quickshell and hyprland additions

This commit is contained in:
2026-03-15 13:56:00 +02:00
parent c9c27d1554
commit 1ad06b82a6
509 changed files with 68371 additions and 19 deletions

View File

@@ -0,0 +1,106 @@
import Quickshell
import Quickshell.Io
pragma Singleton
Singleton {
id: root
function resolveIcon(className) {
if (!className || className.length === 0)
return "";
const original = className;
const normalized = className.toLowerCase();
// 1. Exact icon name
if (Quickshell.iconPath(original, true).length > 0)
return original;
// 2. Normalized guess
if (Quickshell.iconPath(normalized, true).length > 0)
return normalized;
// 3. Dashed guess
const dashed = normalized.replace(/\s+/g, "-");
if (Quickshell.iconPath(dashed, true).length > 0)
return dashed;
// 4. Extension guess
const ext = original.split(".").pop().toLowerCase();
if (Quickshell.iconPath(ext, true).length > 0)
return ext;
return "";
}
function trimFileProtocol(str) {
let s = str;
if (typeof s !== "string")
s = str.toString();
// Convert to string if it's an url or whatever
return s.startsWith("file://") ? s.slice(7) : s;
}
function isVideo(path) {
if (!path)
return false;
// Convert QUrl → string if needed
let p = path.toString ? path.toString() : path;
// Strip file://
if (p.startsWith("file://"))
p = p.replace("file://", "");
const ext = p.split(".").pop().toLowerCase();
return ["mp4", "mkv", "webm", "mov", "avi", "m4v"].includes(ext);
}
function createFile(filePath, callback) {
if (!filePath)
return ;
let p = Qt.createQmlObject('import QtQuick; import Quickshell.Io; Process {}', root);
p.command = ["touch", filePath];
p.onExited.connect(function() {
console.debug("Created file:", filePath, "exit code:", p.exitCode);
p.destroy();
if (callback)
callback(true);
});
p.running = true;
}
function removeFile(filePath, callback) {
if (!filePath)
return ;
let p = Qt.createQmlObject('import QtQuick; import Quickshell.Io; Process {}', root);
p.command = ["rm", "-f", filePath];
p.onExited.connect(function() {
console.debug("Removed file:", filePath, "exit code:", p.exitCode);
p.destroy();
if (callback)
callback(true);
});
p.running = true;
}
function renameFile(oldPath, newPath, callback) {
if (!oldPath || !newPath || oldPath === newPath)
return ;
let p = Qt.createQmlObject('import QtQuick; import Quickshell.Io; Process {}', root);
p.command = ["mv", oldPath, newPath];
p.onExited.connect(function() {
console.debug("Renamed file:", oldPath, "→", newPath, "exit code:", p.exitCode);
p.destroy();
if (callback)
callback(true);
});
p.running = true;
}
}