From f30eee421503b203254cddb300c6cba3c8c98eb3 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 21 Sep 2026 16:34:26 -0400 Subject: [PATCH] feat(config): enhance scratchpad toggles, add workspace rules, adjust opacity and font size --- dot_config/hypr/bindings.lua | 46 +++++++++++++++++--------- dot_config/hypr/hyprland.lua | 33 ++++++++++++++---- dot_config/hypr/input.lua | 16 +++++++++ dot_config/hypr/looknfeel.lua | 9 ++--- dot_config/kitty/kitty.conf | 2 ++ dot_omp/private_agent/private_mcp.json | 7 ++++ 6 files changed, 88 insertions(+), 25 deletions(-) diff --git a/dot_config/hypr/bindings.lua b/dot_config/hypr/bindings.lua index b678e21..58f43e0 100644 --- a/dot_config/hypr/bindings.lua +++ b/dot_config/hypr/bindings.lua @@ -111,18 +111,22 @@ hl.unbind("SUPER + CTRL + K") -- was: Herdr keybindings o.bind("SUPER + CTRL + J", "Next workspace", hl.dsp.focus({ workspace = "e+1" })) o.bind("SUPER + CTRL + K", "Previous workspace", hl.dsp.focus({ workspace = "e-1" })) --- Scratchpad. Omarchy's SUPER + S is taken by the region screenshot below, so --- the special-workspace toggle lands here. SUPER + ALT + S (send window to --- the scratchpad) is still the Omarchy default and needs no line. +-- Scratch workspaces. Omarchy's SUPER + S is taken by the region screenshot +-- below, so the main toggle lands on SUPER + CTRL + S, with SUPER + A (free +-- in Omarchy) as the home-row alias. SUPER + ALT + S (send window to the +-- scratchpad) is still the Omarchy default and needs no line. +-- +-- All of them go through ~/.local/bin/omarchy-toggle-scratch rather than the +-- raw special-workspace toggle: it opens each workspace on its home monitor +-- (the raw toggle uses the focused one), and on reveal it starts whichever +-- resident is missing instead of sliding an empty workspace into view. The +-- residents are pinned to their workspaces by window rules in +-- hypr/hyprland.lua. Fastmail, Beeper and YouTube have their own scratch +-- workspaces under SUPER + CTRL + ALT + E / M / Y in the Applications block +-- below. hl.unbind("SUPER + CTRL + S") -- was: share menu -o.bind("SUPER + CTRL + S", "Toggle scratchpad", hl.dsp.workspace.toggle_special("scratchpad")) - --- Mod+A is the scratch terminal: the same scratchpad toggle, except an empty --- scratchpad starts kitty with ~/.config/kitty/herdr.conf (class kitty-herdr, --- pinned to the scratchpad by the window rule in hypr/hyprland.lua) instead of --- sliding an empty workspace into view. SUPER + A is free in Omarchy. --- Needs ~/.local/bin/omarchy-toggle-scratch. -o.bind("SUPER + A", "Toggle scratch terminal", "omarchy-toggle-scratch") +o.bind("SUPER + CTRL + S", "Toggle scratch workspace", "omarchy-toggle-scratch scratchpad") +o.bind("SUPER + A", "Toggle scratch workspace", "omarchy-toggle-scratch scratchpad") -- Workspaces 1 to 5 on the home row of the left half: ALT to focus, -- ALT + SHIFT to send the window there. No Omarchy default uses ALT with a @@ -179,14 +183,22 @@ o.bind("SUPER + CTRL + ALT + H", "AI apps", "omarchy-cycle ai") o.bind("SUPER + CTRL + ALT + J", "Terminals", "omarchy-cycle-terminal") o.bind("SUPER + CTRL + ALT + K", "Browsers", "omarchy-cycle-browser") o.bind("SUPER + CTRL + ALT + G", "Ghostty", "omarchy-cycle ghostty") -o.bind("SUPER + CTRL + ALT + Y", "Web apps", "omarchy-cycle webapp") o.bind("SUPER + CTRL + ALT + O", "Obsidian", "omarchy-cycle obsidian") o.bind("SUPER + CTRL + ALT + F", "File manager", "omarchy-launch-or-focus nautilus \"gtk-launch org.gnome.Nautilus\"") -o.bind("SUPER + CTRL + ALT + E", "Fastmail", "omarchy-launch-or-focus fastmail \"gtk-launch fastmail\"") -o.bind("SUPER + CTRL + ALT + M", "Beeper", "omarchy-launch-or-focus beeper \"gtk-launch beeper\"") +-- Fastmail, Beeper and the YouTube web app each live on their own scratch +-- workspace (window rules in hypr/hyprland.lua); the toggle reveals it on the +-- focused monitor and starts the app only when no window of it exists -- +-- the web-app launcher would otherwise open a second window every time. +o.bind("SUPER + CTRL + ALT + E", "Fastmail", "omarchy-toggle-scratch fastmail") +o.bind("SUPER + CTRL + ALT + M", "Beeper", "omarchy-toggle-scratch beeper") +o.bind("SUPER + CTRL + ALT + Y", "YouTube", "omarchy-toggle-scratch youtube") -- was: web apps cycle +hl.unbind("SUPER + SHIFT + Y") -- was: YouTube via the desktop entry (new window every press) +o.bind("SUPER + SHIFT + Y", "YouTube", "omarchy-toggle-scratch youtube") hl.unbind("SUPER + CTRL + ALT + T") -- was: show time -o.bind("SUPER + CTRL + ALT + T", "Todoist", "omarchy-launch-or-focus todoist \"gtk-launch todoist\"") +-- Pattern is the exact class from `hyprctl clients`; the window rule in +-- hypr/hyprland.lua sends it to workspace 5 on eDP-1 fullscreen. +o.bind("SUPER + CTRL + ALT + T", "tldraw offline", "omarchy-launch-or-focus tldraw-offline \"gtk-launch tldraw-offline\"") hl.unbind("SUPER + CTRL + ALT + W") -- was: toggle weather -- gtk-launch takes the desktop-entry id: TLDraw.desktop, not tldraw_offline, @@ -272,3 +284,7 @@ o.bind("SUPER + SHIFT + F", "File manager", { launch = 'flea --gui' }) hl.unbind("SUPER + ALT + SHIFT + F") o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)", { launch = 'flea --gui "$(omarchy-cmd-terminal-cwd)"' }) -- flea --default: end. + +-- flea --picker: begin. Written by `flea --picker`; `flea --picker off` removes the block whole. +o.window("com.thisisgm.flea.picker", { tag = "+floating-window" }) +-- flea --picker: end. diff --git a/dot_config/hypr/hyprland.lua b/dot_config/hypr/hyprland.lua index 286a8f4..6d6ac60 100644 --- a/dot_config/hypr/hyprland.lua +++ b/dot_config/hypr/hyprland.lua @@ -32,18 +32,39 @@ require("default.hypr.toggles") -- display so it survives landing on a different DP connector after re-docking. hl.workspace_rule({ workspace = "3", monitor = "desc:Apple Computer Inc StudioDisplay 0x984262A7" }) hl.workspace_rule({ workspace = "4", monitor = "eDP-1" }) +hl.workspace_rule({ workspace = "5", monitor = "eDP-1" }) -- Always open these apps on a fixed workspace and follow them there. Classes -- come from `hyprctl clients` -- the desktop files' StartupWMClass hints -- disagree with reality for Beeper (claims BeeperTexts, actually reports -- Beeper). Add " silent" to a workspace prop to place a window without -- switching the view to it. -o.window([[^brave-youtube\.com__-Default$]], { workspace = "1" }) o.window([[^brave-www\.tldraw\.com__-Default$]], { workspace = "3" }) -o.window([[^com\.fastmail\.Fastmail$]], { workspace = "4" }) -o.window([[^Beeper$]], { workspace = "4" }) --- The SUPER + A scratch terminal (kitty --config ~/.config/kitty/herdr.conf). --- Pinning it here means it lands on the scratchpad no matter who starts it; --- "silent" leaves the reveal to omarchy-toggle-scratch. +-- tldraw-offline gets workspace 5 to itself on the laptop panel, fullscreen. +o.window([[^tldraw-offline$]], { workspace = "5", fullscreen = true }) + +-- Scratch workspaces, toggled by ~/.local/bin/omarchy-toggle-scratch, which +-- also starts any resident that is missing and picks the monitor. Pinning +-- the residents here means they land on their workspace no matter who starts +-- them; "silent" leaves the reveal to the script. Under the master layout the +-- first window to appear takes the master slot; the rest stack beside it. +-- +-- SUPER + A / SUPER + CTRL + S: Claude Desktop + kitty/herdr, Studio Display. +o.window([[^com\.anthropic\.Claude$]], { workspace = "special:scratchpad silent" }) o.window([[^kitty-herdr$]], { workspace = "special:scratchpad silent" }) +-- SUPER + CTRL + ALT + E / M: Fastmail and Beeper, each alone on the +-- focused monitor. +o.window([[^com\.fastmail\.Fastmail$]], { workspace = "special:fastmail silent" }) +o.window([[^Beeper$]], { workspace = "special:beeper silent" }) +-- SUPER + CTRL + ALT + Y / SUPER + SHIFT + Y: the YouTube web app. Chromium +-- derives the class from the app URL and the host spelling has varied +-- (youtube.com vs www.youtube.com) once a video plays, so match the family. +-- Its picture-in-picture overlay shares the class; the "negative:" title +-- match keeps it out so Omarchy's pip rule (float + pin) still applies. +-- Rule regexes are RE2 full matches: no lookahead, and a pattern must cover +-- the whole string. +o.window( + { class = [[brave-(www\.)?youtube\.com__.*]], title = [[negative:.*Picture.?in.?[Pp]icture.*]] }, + { workspace = "special:youtube silent" } +) diff --git a/dot_config/hypr/input.lua b/dot_config/hypr/input.lua index b2666a2..cbbbc29 100644 --- a/dot_config/hypr/input.lua +++ b/dot_config/hypr/input.lua @@ -83,7 +83,23 @@ hl.config({ -- Device names come from `hyprctl devices` (the "Tablet" entry, not "Tablet Pad"). -- Built-in digitizer of the Flow Z13: it physically *is* the laptop panel. +-- Pen and finger are separate devices; the finger one is the "Touch" entry. hl.device({ name = "elan9008:00-04f3:43c7-stylus", output = "eDP-1" }) +-- Unbound, Hyprland maps a touch onto whichever monitor is *focused* +-- (onTouchDown falls back to the focused monitor when the device has no +-- output), so a tap on the panel landed on the Studio Display. Bound, the tap +-- focuses eDP-1 and then the window under the finger. +hl.device({ name = "elan9008:00-04f3:43c7", output = "eDP-1" }) +-- +-- Palm rejection while writing is libinput's job, not Hyprland's: with the +-- pen in proximity it drops touches on the paired touchscreen (same +-- LIBINPUT_DEVICE_GROUP) -- *all* of them only if the pen reports no tilt; +-- with tilt it drops just a 200x250mm rectangle whose side is guessed from +-- the tilt sign, and this pen reports ABS_TILT_X/Y, so a resting palm kept +-- landing as taps and scrolls. /etc/libinput/local-overrides.quirks (not +-- chezmoi-managed; the Flow Z13 stylus section) strips the tilt axes, which +-- flips arbitration to ignore-all. Cost: no tilt in drawing apps. The 90ms +-- re-enable after the pen leaves proximity is hard-coded in libinput. -- Wacom Intuos BT S: pinned to the Studio Display, matched on EDID description -- so it survives a different DP connector after re-docking. With that display diff --git a/dot_config/hypr/looknfeel.lua b/dot_config/hypr/looknfeel.lua index c425ac2..5522959 100644 --- a/dot_config/hypr/looknfeel.lua +++ b/dot_config/hypr/looknfeel.lua @@ -59,10 +59,11 @@ hl.config({ }) -- Omarchy tags every mapped window `default-opacity` and fades it to --- 0.985 / 0.96; themes deepen that (Cyberdream used 0.98 / 0.92). Rules are --- last-match-wins, so this pins every window opaque and blur-free. An opaque --- window has nothing visible behind it, so the pass above never runs for it. -o.window({ tag = "default-opacity" }, { opacity = "1.0 1.0", no_blur = true }) +-- 0.985 / 0.96 ($OMARCHY_PATH/default/hypr/windows.lua); that stock fade is +-- kept. Rules are last-match-wins, so this only opts every window out of the +-- blur enabled above -- the few percent of wallpaper that shows through an +-- inactive window is the same as stock, where blur is off entirely. +o.window({ tag = "default-opacity" }, { no_blur = true }) -- The exception: terminals carry their own alpha (kitty's -- `background_opacity`, 0.9 in ~/.config/kitty/kitty.conf), so they are the one diff --git a/dot_config/kitty/kitty.conf b/dot_config/kitty/kitty.conf index 3f42f67..5ae26d7 100644 --- a/dot_config/kitty/kitty.conf +++ b/dot_config/kitty/kitty.conf @@ -114,3 +114,5 @@ bold_italic_font auto # (~/.config/omarchy/themes//kitty.conf). Last include wins, so keep this # at the bottom. include ~/.local/state/omarchy/current/theme/kitty.conf + +font_size 9.0 diff --git a/dot_omp/private_agent/private_mcp.json b/dot_omp/private_agent/private_mcp.json index bb2c74d..44b0fca 100644 --- a/dot_omp/private_agent/private_mcp.json +++ b/dot_omp/private_agent/private_mcp.json @@ -18,6 +18,13 @@ "oauth": { "clientId": "TOBx2IoGZW-gU-f_" } + }, + "github": { + "type": "http", + "url": "https://api.githubcopilot.com/mcp/", + "headers": { + "Authorization": "!printf 'Bearer %s' \"$(gh auth token)\"" + } } } } \ No newline at end of file