mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-06 21:48: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:
@@ -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);
|
||||
|
||||
@@ -1087,6 +1087,37 @@ Singleton {
|
||||
const cornerRadius = (typeof SettingsData !== "undefined" && SettingsData.niriLayoutRadiusOverride >= 0) ? SettingsData.niriLayoutRadiusOverride : defaultRadius;
|
||||
const gaps = (typeof SettingsData !== "undefined" && SettingsData.niriLayoutGapsOverride >= 0) ? SettingsData.niriLayoutGapsOverride : defaultGaps;
|
||||
const borderSize = (typeof SettingsData !== "undefined" && SettingsData.niriLayoutBorderSize >= 0) ? SettingsData.niriLayoutBorderSize : defaultBorderSize;
|
||||
const xrayEnabled = typeof SettingsData !== "undefined" && SettingsData.niriLayoutXrayEnabled;
|
||||
const barFrameXrayEnabled = typeof SettingsData === "undefined" || SettingsData.niriLayoutBarXrayEnabled;
|
||||
const frameEnabled = typeof SettingsData !== "undefined" && SettingsData.frameEnabled;
|
||||
const frameConnectedMode = frameEnabled && SettingsData.frameMode === "connected";
|
||||
|
||||
// The one wallpaper-flush surface to force xray=true on: bar (Frame off) or Frame's Separate-mode border
|
||||
const barFrameTargetNamespace = !frameEnabled ? "dms:bar" : (frameConnectedMode ? null : "dms:frame");
|
||||
|
||||
let xrayRules = "";
|
||||
if (!xrayEnabled) {
|
||||
let excludes = "";
|
||||
if (frameEnabled)
|
||||
excludes += `
|
||||
exclude namespace="^dms:bar$"`;
|
||||
xrayRules += `
|
||||
layer-rule {
|
||||
match namespace=".*"` + excludes + `
|
||||
background-effect {
|
||||
xray false
|
||||
}
|
||||
}`;
|
||||
}
|
||||
if (barFrameXrayEnabled && barFrameTargetNamespace) {
|
||||
xrayRules += `
|
||||
layer-rule {
|
||||
match namespace="^${barFrameTargetNamespace}$"
|
||||
background-effect {
|
||||
xray true
|
||||
}
|
||||
}`;
|
||||
}
|
||||
|
||||
const dmsWarning = `// ! DO NOT EDIT !
|
||||
// ! AUTO-GENERATED BY DMS !
|
||||
@@ -1111,7 +1142,7 @@ Singleton {
|
||||
clip-to-geometry true
|
||||
tiled-state true
|
||||
draw-border-with-background false
|
||||
}`;
|
||||
}` + xrayRules;
|
||||
|
||||
const alttabContent = dmsWarning + `recent-windows {
|
||||
highlight {
|
||||
|
||||
Reference in New Issue
Block a user