1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-07 22:18:30 -04:00

feat(Xray): Automatic Xray blur effects for Niri & Hyprland layouts

- Utilizes include layout within niri configs & hyprland's layout layer rules for lua configs
This commit is contained in:
purian23
2026-07-01 16:15:02 -04:00
parent 38a03a4485
commit 7964b66827
7 changed files with 239 additions and 1 deletions
+25
View File
@@ -258,6 +258,14 @@ Singleton {
const gaps = (typeof SettingsData !== "undefined" && SettingsData.hyprlandLayoutGapsOverride >= 0) ? SettingsData.hyprlandLayoutGapsOverride : defaultGaps;
const borderSize = (typeof SettingsData !== "undefined" && SettingsData.hyprlandLayoutBorderSize >= 0) ? SettingsData.hyprlandLayoutBorderSize : defaultBorderSize;
const resizeOnBorder = (typeof SettingsData !== "undefined" && SettingsData.hyprlandResizeOnBorder) ? true : false;
const xrayEnabled = typeof SettingsData !== "undefined" && SettingsData.hyprlandLayoutXrayEnabled;
const barFrameXrayEnabled = typeof SettingsData === "undefined" || SettingsData.hyprlandLayoutBarXrayEnabled;
const frameEnabled = typeof SettingsData !== "undefined" && SettingsData.frameEnabled;
const frameConnectedMode = frameEnabled && SettingsData.frameMode === "connected";
// Hyprland's `xray = false` is still in early development, so unlike niri we never emit it (unset already
// samples real content) - we only force xray=true
const barFrameTargetNamespace = !frameEnabled ? "dms:bar" : (frameConnectedMode ? null : "dms:frame");
let content = `-- Auto-generated by DMS do not edit manually
@@ -274,6 +282,23 @@ hl.config({
})
`;
if (xrayEnabled) {
content += `
hl.layer_rule({
match = { namespace = "^dms:.*$" },
xray = true,
})
`;
}
if (barFrameXrayEnabled && barFrameTargetNamespace) {
content += `
hl.layer_rule({
match = { namespace = "^${barFrameTargetNamespace}$" },
xray = true,
})
`;
}
Proc.runCommand("hypr-write-layout", ["sh", "-c", `mkdir -p "${hyprDmsDir}" && cat > "${layoutPath}" << 'EOF'\n${content}EOF`], (output, exitCode) => {
if (exitCode !== 0) {
log.warn("Failed to write layout config:", output);