TalksVideosBlogSnippetsSocials
GitHubLinkedInEmail

© 2026 Milind Mishra.

Untitled Gist
README.mdMarkdownapply.shShellhyprlock.conflooknfeel.luaLua

README.md

Omarchy / Hyprland squircle corners

<img width="2560" height="1600" alt="image" src="https://gist.github.com/user-attachments/assets/c7d41fd3-929d-4727-958b-89be9e0f6305" /> <img width="1920" height="1080" alt="image" src="https://gist.github.com/user-attachments/assets/f5559d0c-8636-4517-b269-468870682b71" />

This bundle records the user-level corner customization applied on an Omarchy desktop.

Changes

  1. ~/.config/hypr/looknfeel.lua
    • Sets Hyprland window radius to 8.
    • Sets Hyprland rounding_power to 4.0, which Hyprland documents as a squircle.
  2. ~/.config/hypr/hyprlock.conf
    • Sets the lock-screen password field radius to 8.

No files under /usr/share/omarchy/ were modified.

Apply

From a graphical Omarchy session:

./apply.sh

The script creates timestamped .bak.* backups before changing either existing file. It is idempotent and reloads Hyprland plus the Omarchy shell after applying the settings.

Verify

hyprctl configerrors
hyprctl getoption decoration:rounding
hyprctl getoption decoration:rounding_power

Expected values:

int: 8
float: 4.000000

Scope limitation

Hyprland can render squircle-shaped compositor window corners with rounding_power. The Omarchy shell, GTK, Qt, and individual applications use their own widget renderers. The web CSS corner-shape: squircle property is experimental and is not a system-wide Linux theme API, so this bundle does not claim to convert every application widget.

References:

  • https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/corner-shape-value
  • https://wiki.hypr.land/Configuring/Basics/Variables/

apply.sh

#!/usr/bin/env bash
set -euo pipefail

CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
LOOKNFEEL="$CONFIG_HOME/hypr/looknfeel.lua"
HYPRLOCK="$CONFIG_HOME/hypr/hyprlock.conf"

[[ -f "$LOOKNFEEL" ]] || { echo "Missing $LOOKNFEEL" >&2; exit 1; }
[[ -f "$HYPRLOCK" ]] || { echo "Missing $HYPRLOCK" >&2; exit 1; }

python3 - "$LOOKNFEEL" "$HYPRLOCK" <<'PY'
from datetime import datetime
from pathlib import Path
import re
import shutil
import sys

looknfeel = Path(sys.argv[1])
hyprlock = Path(sys.argv[2])
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")


def backup(path: Path) -> None:
    target = path.with_name(f"{path.name}.bak.{timestamp}")
    shutil.copy2(path, target)
    print(f"Backup: {target}")


def write_if_changed(path: Path, old: str, new: str) -> None:
    if old == new:
        print(f"Unchanged: {path}")
        return
    backup(path)
    path.write_text(new, encoding="utf-8")
    print(f"Updated: {path}")


# Append a marked block when no equivalent setting exists. Re-running the
# script does not add another block.
look_text = looknfeel.read_text(encoding="utf-8")
look_block = """-- BEGIN OMARCHY SQUIRCLE\nhl.config({\n  decoration = {\n    rounding = 8,\n    rounding_power = 4.0,\n  },\n})\n-- END OMARCHY SQUIRCLE\n"""
if "rounding_power = 4.0" not in look_text:
    separator = "" if look_text.endswith("\n") else "\n"
    look_text = look_text + separator + "\n" + look_block
write_if_changed(looknfeel, looknfeel.read_text(encoding="utf-8"), look_text)

# Change only the input-field block, not unrelated future rounding settings.
lock_before = hyprlock.read_text(encoding="utf-8")
match = re.search(r"(?ms)^input-field\s*\{.*?^\}", lock_before)
if not match:
    raise SystemExit(f"Could not find input-field block in {hyprlock}")

input_block = match.group(0)
if re.search(r"(?m)^\s*rounding\s*=", input_block):
    input_block = re.sub(r"(?m)^(\s*)rounding\s*=.*$", r"\1rounding = 8", input_block, count=1)
else:
    input_block = re.sub(r"(?m)^(\s*)shadow_passes\s*=", r"\1rounding = 8\n\1shadow_passes =", input_block, count=1)

lock_after = lock_before[:match.start()] + input_block + lock_before[match.end():]
write_if_changed(hyprlock, lock_before, lock_after)
PY

hyprctl reload
omarchy restart shell

printf '\nActive Hyprland values:\n'
hyprctl configerrors
hyprctl getoption decoration:rounding
hyprctl getoption decoration:rounding_power
printf '\nLock-screen setting is read on the next hyprlock start.\n'

hyprlock.conf

# Add this inside the input-field { ... } block in ~/.config/hypr/hyprlock.conf.
# Hyprlock exposes radius but not Hyprland's rounding_power.
rounding = 8

looknfeel.lua

-- Add this to ~/.config/hypr/looknfeel.lua.
-- Hyprland documents rounding_power = 4.0 as a squircle curve.
hl.config({
  decoration = {
    rounding = 8,
    rounding_power = 4.0,
  },
})
Updated: 8/24/2026