aboutsummaryrefslogtreecommitdiff
path: root/.config/ags/lib/hyprland.ts
diff options
context:
space:
mode:
Diffstat (limited to '.config/ags/lib/hyprland.ts')
-rw-r--r--.config/ags/lib/hyprland.ts80
1 files changed, 80 insertions, 0 deletions
diff --git a/.config/ags/lib/hyprland.ts b/.config/ags/lib/hyprland.ts
new file mode 100644
index 0000000..7f6a68c
--- /dev/null
+++ b/.config/ags/lib/hyprland.ts
@@ -0,0 +1,80 @@
+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 activeBorder() {
+ const color = scheme.value === "dark"
+ ? darkActive.value
+ : lightActive.value
+
+ return color.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(${activeBorder()}ff)`,
+ // `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()
+}