mirror of
https://github.imc.re/void-land/hyprland-void-dots
synced 2025-10-14 05:35:03 +02:00
82 lines
2 KiB
TypeScript
82 lines
2 KiB
TypeScript
import options from "options"
|
|
const { messageAsync } = await Service.import("hyprland")
|
|
|
|
const {
|
|
hyprland,
|
|
theme: {
|
|
spacing,
|
|
radius,
|
|
border: { width },
|
|
blur,
|
|
shadows,
|
|
dark: {
|
|
primary: { bg: darkActive },
|
|
},
|
|
light: {
|
|
primary: { bg: lightActive },
|
|
},
|
|
scheme,
|
|
},
|
|
} = options
|
|
|
|
const deps = [
|
|
"hyprland",
|
|
spacing.id,
|
|
radius.id,
|
|
blur.id,
|
|
width.id,
|
|
shadows.id,
|
|
darkActive.id,
|
|
lightActive.id,
|
|
scheme.id,
|
|
]
|
|
|
|
function primary() {
|
|
return scheme.value === "dark"
|
|
? darkActive.value
|
|
: lightActive.value
|
|
}
|
|
|
|
function rgba(color: string) {
|
|
return `rgba(${color}ff)`.replace("#", "")
|
|
}
|
|
|
|
function sendBatch(batch: string[]) {
|
|
const cmd = batch
|
|
.filter(x => !!x)
|
|
.map(x => `keyword ${x}`)
|
|
.join("; ")
|
|
|
|
return messageAsync(`[[BATCH]]/${cmd}`)
|
|
}
|
|
|
|
async function setupHyprland() {
|
|
const wm_gaps = Math.floor(hyprland.gaps.value * spacing.value)
|
|
|
|
sendBatch([
|
|
`general:border_size ${width}`,
|
|
`general:gaps_out ${wm_gaps}`,
|
|
`general:gaps_in ${Math.floor(wm_gaps / 2)}`,
|
|
`general:col.active_border ${rgba(primary())}`,
|
|
`general:col.inactive_border ${rgba(hyprland.inactiveBorder.value)}`,
|
|
`decoration:rounding ${radius}`,
|
|
`decoration:drop_shadow ${shadows.value ? "yes" : "no"}`,
|
|
`dwindle:no_gaps_when_only ${hyprland.gapsWhenOnly.value ? 0 : 1}`,
|
|
`master:no_gaps_when_only ${hyprland.gapsWhenOnly.value ? 0 : 1}`,
|
|
])
|
|
|
|
await sendBatch(App.windows.map(({ name }) => `layerrule unset, ${name}`))
|
|
|
|
if (blur.value > 0) {
|
|
sendBatch(App.windows.flatMap(({ name }) => [
|
|
`layerrule unset, ${name}`,
|
|
`layerrule blur, ${name}`,
|
|
`layerrule ignorealpha ${/* based on shadow color */.29}, ${name}`,
|
|
]))
|
|
}
|
|
}
|
|
|
|
export default function init() {
|
|
options.handler(deps, setupHyprland)
|
|
setupHyprland()
|
|
}
|