mirror of
https://github.com/celesrenata/end-4-flakes.git
synced 2026-06-06 10:49:26 -05:00
210 lines
7.5 KiB
QML
210 lines
7.5 KiB
QML
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.Services.SystemdUser
|
|
|
|
// Transparency and Blur Settings Module
|
|
// Based on AGS configuration from ~/.config/ags/modules/sideright/centermodules/configure.js
|
|
|
|
Rectangle {
|
|
id: transparencySettings
|
|
|
|
property bool globalTransparency: false
|
|
property int terminalOpacity: 100
|
|
property bool blurEnabled: false
|
|
property bool blurXray: true
|
|
property int blurSize: 8
|
|
property int blurPasses: 4
|
|
|
|
// Storage paths (matching AGS structure)
|
|
property string colorModeFile: StandardPaths.writableLocation(StandardPaths.CacheLocation) + "/ags/user/colormode.txt"
|
|
property string terminalTransparencyFile: StandardPaths.writableLocation(StandardPaths.CacheLocation) + "/ags/user/generated/terminal/transparency"
|
|
|
|
color: "transparent"
|
|
|
|
Component.onCompleted: {
|
|
loadSettings()
|
|
}
|
|
|
|
// Load settings from files (AGS compatibility)
|
|
function loadSettings() {
|
|
// Load global transparency mode
|
|
Process.exec("bash", ["-c", `mkdir -p $(dirname "${colorModeFile}")`])
|
|
let colorModeResult = Process.exec("bash", ["-c", `sed -n '2p' "${colorModeFile}" 2>/dev/null || echo "opaque"`])
|
|
globalTransparency = (colorModeResult.stdout.trim() === "transparent")
|
|
|
|
// Load terminal opacity
|
|
Process.exec("bash", ["-c", `mkdir -p $(dirname "${terminalTransparencyFile}")`])
|
|
let termOpacityResult = Process.exec("bash", ["-c", `cat "${terminalTransparencyFile}" 2>/dev/null || echo "100"`])
|
|
terminalOpacity = parseInt(termOpacityResult.stdout.trim()) || 100
|
|
|
|
// Load Hyprland blur settings
|
|
loadHyprlandSettings()
|
|
}
|
|
|
|
function loadHyprlandSettings() {
|
|
// Load blur enabled
|
|
let blurResult = Process.exec("hyprctl", ["getoption", "-j", "decoration:blur:enabled"])
|
|
try {
|
|
let blurData = JSON.parse(blurResult.stdout)
|
|
blurEnabled = blurData.int !== 0
|
|
} catch (e) {
|
|
console.log("Failed to load blur enabled setting:", e)
|
|
}
|
|
|
|
// Load blur xray
|
|
let xrayResult = Process.exec("hyprctl", ["getoption", "-j", "decoration:blur:xray"])
|
|
try {
|
|
let xrayData = JSON.parse(xrayResult.stdout)
|
|
blurXray = xrayData.int !== 0
|
|
} catch (e) {
|
|
console.log("Failed to load blur xray setting:", e)
|
|
}
|
|
|
|
// Load blur size
|
|
let sizeResult = Process.exec("hyprctl", ["getoption", "-j", "decoration:blur:size"])
|
|
try {
|
|
let sizeData = JSON.parse(sizeResult.stdout)
|
|
blurSize = sizeData.int
|
|
} catch (e) {
|
|
console.log("Failed to load blur size setting:", e)
|
|
}
|
|
|
|
// Load blur passes
|
|
let passesResult = Process.exec("hyprctl", ["getoption", "-j", "decoration:blur:passes"])
|
|
try {
|
|
let passesData = JSON.parse(passesResult.stdout)
|
|
blurPasses = passesData.int
|
|
} catch (e) {
|
|
console.log("Failed to load blur passes setting:", e)
|
|
}
|
|
}
|
|
|
|
// Save and apply global transparency
|
|
function setGlobalTransparency(enabled) {
|
|
globalTransparency = enabled
|
|
let mode = enabled ? "transparent" : "opaque"
|
|
|
|
// Save to colormode.txt (line 2)
|
|
Process.exec("bash", ["-c", `mkdir -p $(dirname "${colorModeFile}")
|
|
if [ ! -f "${colorModeFile}" ]; then
|
|
echo "dark" > "${colorModeFile}"
|
|
echo "${mode}" >> "${colorModeFile}"
|
|
else
|
|
sed -i "2s/.*/${mode}/" "${colorModeFile}"
|
|
fi`])
|
|
|
|
// Apply color changes (equivalent to AGS switchcolor.sh)
|
|
applyColorChanges()
|
|
}
|
|
|
|
// Save and apply terminal opacity
|
|
function setTerminalOpacity(opacity) {
|
|
terminalOpacity = opacity
|
|
|
|
// Save to terminal transparency file
|
|
Process.exec("bash", ["-c", `mkdir -p $(dirname "${terminalTransparencyFile}")
|
|
echo "${opacity}" > "${terminalTransparencyFile}"`])
|
|
|
|
// Apply terminal colors (equivalent to AGS applycolor.sh term)
|
|
applyTerminalColors()
|
|
}
|
|
|
|
// Apply Hyprland blur settings
|
|
function setBlurEnabled(enabled) {
|
|
blurEnabled = enabled
|
|
Process.exec("hyprctl", ["keyword", "decoration:blur:enabled", enabled ? "1" : "0"])
|
|
}
|
|
|
|
function setBlurXray(enabled) {
|
|
blurXray = enabled
|
|
Process.exec("hyprctl", ["keyword", "decoration:blur:xray", enabled ? "1" : "0"])
|
|
}
|
|
|
|
function setBlurSize(size) {
|
|
blurSize = size
|
|
Process.exec("hyprctl", ["keyword", "decoration:blur:size", size.toString()])
|
|
}
|
|
|
|
function setBlurPasses(passes) {
|
|
blurPasses = passes
|
|
Process.exec("hyprctl", ["keyword", "decoration:blur:passes", passes.toString()])
|
|
}
|
|
|
|
// Apply color changes (equivalent to AGS color generation)
|
|
function applyColorChanges() {
|
|
// This would call the equivalent of AGS color generation scripts
|
|
Process.exec("bash", ["-c", `
|
|
# Apply transparency mode to all shell elements
|
|
# This is where we'd integrate with the quickshell theming system
|
|
echo "Applying transparency mode: ${globalTransparency ? 'transparent' : 'opaque'}"
|
|
|
|
# Reload quickshell to apply changes
|
|
quickshell ipc call settings reload || true
|
|
`])
|
|
}
|
|
|
|
// Apply terminal colors (equivalent to AGS applycolor.sh term)
|
|
function applyTerminalColors() {
|
|
let alpha = terminalOpacity / 100.0
|
|
|
|
Process.exec("bash", ["-c", `
|
|
# Update foot terminal configuration with new opacity
|
|
FOOT_CONFIG="$HOME/.config/foot/foot.ini"
|
|
if [ -f "$FOOT_CONFIG" ]; then
|
|
# Update alpha value in foot.ini
|
|
sed -i "s/^alpha=.*/alpha=${alpha}/" "$FOOT_CONFIG" || echo "alpha=${alpha}" >> "$FOOT_CONFIG"
|
|
fi
|
|
|
|
# Send terminal escape sequence to update running terminals
|
|
# This matches the AGS terminal sequences functionality
|
|
echo "Applied terminal opacity: ${terminalOpacity}%"
|
|
`])
|
|
}
|
|
|
|
// IPC Handler for external control
|
|
IpcHandler {
|
|
target: "transparencySettings"
|
|
|
|
function setTransparency(enabled) {
|
|
transparencySettings.setGlobalTransparency(enabled)
|
|
}
|
|
|
|
function setTerminalOpacity(opacity) {
|
|
transparencySettings.setTerminalOpacity(opacity)
|
|
}
|
|
|
|
function setBlur(enabled) {
|
|
transparencySettings.setBlurEnabled(enabled)
|
|
}
|
|
|
|
function setBlurXray(enabled) {
|
|
transparencySettings.setBlurXray(enabled)
|
|
}
|
|
|
|
function setBlurSize(size) {
|
|
transparencySettings.setBlurSize(size)
|
|
}
|
|
|
|
function setBlurPasses(passes) {
|
|
transparencySettings.setBlurPasses(passes)
|
|
}
|
|
|
|
function getSettings() {
|
|
return {
|
|
globalTransparency: transparencySettings.globalTransparency,
|
|
terminalOpacity: transparencySettings.terminalOpacity,
|
|
blurEnabled: transparencySettings.blurEnabled,
|
|
blurXray: transparencySettings.blurXray,
|
|
blurSize: transparencySettings.blurSize,
|
|
blurPasses: transparencySettings.blurPasses
|
|
}
|
|
}
|
|
|
|
function reload() {
|
|
transparencySettings.loadSettings()
|
|
}
|
|
}
|
|
}
|