Port upstream user-facing defaults: chromium extensions, XCompose, voxtype/tensaku state, audio tunings, screensaver terminal configs, agent skills, branding art
swadhinbiswas committed 2 months ago
fb90631
1 parent 3c98dd1
commit fb90631
34 files changed
+1481 -0
Showing 34 changed files+1481-0
default/agents/skills/diagnose-crash/SKILL.mddefault/agents/skills/diagnose-crash/reporting.mddefault/agents/skills/omarchy/SKILL.mddefault/agents/skills/omarchy/capture.mddefault/agents/skills/omarchy/contributing.mddefault/agents/skills/omarchy/hooks.mddefault/agents/skills/omarchy/hyprland.mddefault/agents/skills/omarchy/plugins.mddefault/agents/skills/omarchy/theming.mddefault/alacritty/Alacritty.desktopdefault/alacritty/screensaver.tomldefault/audio/filter-chain-host.confdefault/audio/tunings/dell-xps-2026/filter-chain.confdefault/audio/tunings/dell-xps-2026/tuning.confdefault/chromium/extensions/copy-url/background-4.jsdefault/chromium/extensions/copy-url/icon.pngdefault/chromium/extensions/copy-url/manifest.jsondefault/chromium/extensions/whatsapp-slim/manifest.jsondefault/chromium/extensions/whatsapp-slim/system-theme.jsdefault/chromium/extensions/whatsapp-slim/whatsapp.cssdefault/chromium/extensions/yt-dlp/background.jsdefault/chromium/extensions/yt-dlp/download-video.svgdefault/chromium/extensions/yt-dlp/icon.pngdefault/chromium/extensions/yt-dlp/manifest.jsondefault/chromium/native-messaging-hosts/com.omarchy.copy_url.jsondefault/chromium/native-messaging-hosts/com.omarchy.ytdlp.jsondefault/foot/screensaver.inidefault/ghostty/screensaverdefault/tensaku/state.tomldefault/voxtype/config.tomldefault/xcomposedefault/xdg-terminal-exec/hyprland-xdg-terminals.listicon.txtlogo.txt
βΌdefault/agents/skills/diagnose-crash/SKILL.md
+97-0
| @@ -0,0 +1,97 @@ | ||
1 | +--- | |
2 | +name: diagnose-crash | |
3 | +description: > | |
4 | + Diagnose why a program crashed on this machine, from a systemd-coredump core dump. | |
5 | + Use when a process has segfaulted, aborted, or otherwise dumped core, when asked | |
6 | + why an application crashed or disappeared, or when a "Process crashed:" desktop | |
7 | + notification is acted on. Triggers: crash, segfault, SIGSEGV, SIGABRT, core dump, | |
8 | + coredumpctl, "why did X crash", "X keeps crashing", backtrace symbolization. | |
9 | + Covers reporting a confirmed Omarchy bug upstream β see reporting.md. | |
10 | +--- | |
11 | + | |
12 | +# Diagnosing a Crash | |
13 | + | |
14 | +Work from evidence. The goal is an honest account of what happened, not a | |
15 | +plausible-sounding story. | |
16 | + | |
17 | +## Establish the facts | |
18 | + | |
19 | +`coredumpctl info <pid>` is the starting point. Beyond the backtrace, note the | |
20 | +**command line** the process was started with β it usually reveals what the | |
21 | +program was working on when it died, which is often the whole answer. | |
22 | + | |
23 | +`coredumpctl list` shows whether this crash is a one-off or a pattern. Repeated | |
24 | +crashes of the same program, or several programs dying together, point somewhere | |
25 | +different than a single failure does. | |
26 | + | |
27 | +## Rule out the boring causes first | |
28 | + | |
29 | +Check resource exhaustion before blaming the program: `free -h`, and the journal | |
30 | +for OOM kills. A process killed by the OOM killer is not a bug in that process. | |
31 | + | |
32 | +## Correlate against the timeline | |
33 | + | |
34 | +The crash timestamp is the most underused piece of evidence. Compare it against: | |
35 | + | |
36 | +- **Filesystem mtimes.** A directory or file whose mtime lands on the same second | |
37 | + as the crash strongly suggests what triggered it. | |
38 | +- **The journal** around that moment, for related warnings from the same or | |
39 | + neighbouring processes. | |
40 | +- **Recent package updates.** A crash that starts right after an update points at | |
41 | + the update. | |
42 | + | |
43 | +## Read the whole core, not just frame 0 | |
44 | + | |
45 | +Thread stacks other than the crashing one show what work was **in flight** β | |
46 | +thumbnailers, image loaders, IPC readers, GPU queues. That context often explains | |
47 | +the trigger even when the crashing frame itself cannot be symbolized. | |
48 | + | |
49 | +Note any third-party code in the address space: file-manager or browser | |
50 | +extensions, plugins, out-of-tree drivers. In-process third-party code is a common | |
51 | +crash source and worth flagging β but do not pin blame on it without evidence | |
52 | +that it is actually implicated. | |
53 | + | |
54 | +## Symbolize when you can | |
55 | + | |
56 | +This is Arch, which runs a public debuginfod server: | |
57 | + | |
58 | +```bash | |
59 | +core=$(mktemp -t crash-XXXXXX.core) | |
60 | +trap 'rm -f "$core"' EXIT | |
61 | +coredumpctl dump <pid> --output="$core" | |
62 | +DEBUGINFOD_URLS="https://debuginfod.archlinux.org" \ | |
63 | + gdb -q <executable> "$core" \ | |
64 | + -batch -ex 'set debuginfod enabled on' -ex 'bt' | |
65 | +``` | |
66 | + | |
67 | +A core is a verbatim copy of the process's memory and can hold passwords, tokens, | |
68 | +and private documents. Write it to a fresh `mktemp` path rather than a predictable | |
69 | +shared one, and delete it when you are done β never leave it lying in `/tmp`. | |
70 | + | |
71 | +Many packages publish no debug symbols. When frames stay unresolved, say so β | |
72 | +never invent function names to fill the gap. An unsymbolized stack still has | |
73 | +shape: which library each frame belongs to, and whether the crash came from a | |
74 | +signal handler, a main loop, or a worker thread. | |
75 | + | |
76 | +## Report | |
77 | + | |
78 | +1. What crashed, and what it was doing at the time. | |
79 | +2. The most likely mechanism β separating clearly what the evidence **proves** | |
80 | + from what you are **inferring**. | |
81 | +3. Whether any user data was lost, and where it can be recovered from. Check the | |
82 | + trash before concluding anything is gone. | |
83 | +4. Whether it is likely to recur, and what would avoid or fix it. | |
84 | + | |
85 | +Be straight about the limits of the evidence. If the cause is genuinely | |
86 | +ambiguous, say so rather than assembling confidence out of guesswork. | |
87 | + | |
88 | +**Leave the system as you found it.** Diagnosis reads; it does not fix, tidy, or | |
89 | +reconfigure. The one thing to clean up is your own: delete the core you extracted | |
90 | +above, which is a copy of the crashed process's memory. | |
91 | + | |
92 | +## If it is an Omarchy bug | |
93 | + | |
94 | +Most application crashes are upstream bugs in those applications, not Omarchy's | |
95 | +doing. In the minority of cases where the cause really does sit within Omarchy's | |
96 | +sphere of control, read [`reporting.md`](reporting.md) before offering to file | |
97 | +anything. | |
0 | 98 | |
βΌdefault/agents/skills/diagnose-crash/reporting.md
+104-0
| @@ -0,0 +1,104 @@ | ||
1 | +# Reporting a Crash Upstream to Omarchy | |
2 | + | |
3 | +Read this only after concluding that a crash is genuinely Omarchy's to fix. | |
4 | + | |
5 | +## Is it even Omarchy's bug? | |
6 | + | |
7 | +Be strict here. Omarchy is a configuration layer over Arch Linux, so a crash | |
8 | +inside a third-party application β a file manager, a browser, a GNOME or Qt | |
9 | +library β is almost always an upstream bug in **that** project, not in Omarchy. | |
10 | + | |
11 | +Omarchy's sphere of control is roughly: | |
12 | + | |
13 | +- the `omarchy-*` commands | |
14 | +- the Quickshell shell and its plugins | |
15 | +- the Hyprland and terminal configuration it ships | |
16 | +- its themes | |
17 | +- its install and migration scripts | |
18 | +- how it packages and configures what it installs | |
19 | + | |
20 | +A crash in a program Omarchy merely installs is **not** an Omarchy bug unless | |
21 | +Omarchy's own packaging or configuration is implicated. | |
22 | + | |
23 | +If it is not Omarchy's, say so and stop. Suggesting the right upstream project is | |
24 | +useful; filing there yourself is not part of this. | |
25 | + | |
26 | +## Three conditions, all required | |
27 | + | |
28 | +1. **It is a verified bug in Omarchy's sphere**, established on evidence. Issues | |
29 | + are for verified bugs only. An "is this even a bug?" belongs on the Discord at | |
30 | + <https://omarchy.org/discord>; a feature idea belongs in GitHub Discussions | |
31 | + under Suggestions. | |
32 | +2. **The user has explicitly agreed.** Show them the exact title and body you | |
33 | + propose, and wait for a yes. Never file unprompted. | |
34 | +3. **The machine can file it** β `gh auth status` must succeed. If `gh` is missing | |
35 | + or unauthenticated, do not install or authenticate it. Say so, and hand the | |
36 | + user the finished text to submit themselves. | |
37 | + | |
38 | +## Search before filing | |
39 | + | |
40 | +A duplicate issue costs a maintainer more time than no report at all. | |
41 | + | |
42 | +```bash | |
43 | +gh search issues --repo basecamp/omarchy "<program> crash" | |
44 | +gh issue list --repo basecamp/omarchy --state all --search "<signal> <program>" | |
45 | +``` | |
46 | + | |
47 | +Search on the crashing program, the signal, and distinctive symbols from the | |
48 | +backtrace β not on the wording of the title you were about to write. | |
49 | + | |
50 | +`gh search issues` accepts only `open` or `closed` for `--state`, and errors on | |
51 | +anything else. Leaving it off searches both, which is what you want here. | |
52 | + | |
53 | +Include **closed** issues. A matching issue closed as fixed, when the crash still | |
54 | +reproduces on a current system, is a regression β and reporting that is worth far | |
55 | +more than another duplicate. | |
56 | + | |
57 | +## Adding to an existing report | |
58 | + | |
59 | +If a plausible match comes back, read it properly first: | |
60 | + | |
61 | +```bash | |
62 | +gh issue view <number> --repo basecamp/omarchy --comments | |
63 | +``` | |
64 | + | |
65 | +Confirm it is genuinely the same failure. The same program crashing is not the | |
66 | +same bug if the trigger or the stack differs. | |
67 | + | |
68 | +If it is the same, add to that issue rather than opening a new one β but only | |
69 | +when you have something the thread does not already contain: a different | |
70 | +reproduction, a symbolized stack where it has none, a narrower trigger, a version | |
71 | +where it regressed. | |
72 | + | |
73 | +A comment that only says the bug happens to you too is noise. If that is all you | |
74 | +have, tell the user so and file nothing. | |
75 | + | |
76 | +```bash | |
77 | +gh issue comment <number> --repo basecamp/omarchy --body "..." | |
78 | +``` | |
79 | + | |
80 | +## Filing a new issue | |
81 | + | |
82 | +Only when the search turns up nothing that matches: | |
83 | + | |
84 | +```bash | |
85 | +gh issue create --repo basecamp/omarchy --title "..." --body "..." | |
86 | +``` | |
87 | + | |
88 | +Include what happened, what was expected, steps to reproduce, system details from | |
89 | +`omarchy version`, and diagnostics from `omarchy debug --no-sudo --print` (which | |
90 | +also writes `/tmp/omarchy-debug.log`; the interactive `omarchy debug` can upload | |
91 | +it and print a shareable URL worth including). | |
92 | + | |
93 | +`gh` cannot attach media. If a screenshot would help, save one and give the user | |
94 | +the path to drag into the web form. | |
95 | + | |
96 | +## Signing | |
97 | + | |
98 | +End the issue or comment with a line naming the model and agent harness that | |
99 | +produced it, so a human reader knows it was machine-authored: | |
100 | + | |
101 | +> Filed by \<model name\> via \<agent harness\>. | |
102 | + | |
103 | +Use your actual model and harness names. If you are not certain of them, say so | |
104 | +plainly rather than inventing a version string. | |
0 | 105 | |
βΌdefault/agents/skills/omarchy/SKILL.md
+294-0
| @@ -0,0 +1,294 @@ | ||
1 | +--- | |
2 | +name: omarchy | |
3 | +description: > | |
4 | + REQUIRED for end-user customization of Linux desktop, window manager, or system config. | |
5 | + Use when editing ~/.config/hypr/, ~/.config/omarchy/, | |
6 | + ~/.config/alacritty/, ~/.config/foot/, ~/.config/kitty/, or ~/.config/ghostty/. | |
7 | + Triggers: Hyprland, window rules, animations, keybindings, monitors, gaps, borders, | |
8 | + blur, opacity, omarchy-shell, bar, terminal config, themes, background, | |
9 | + night light, idle, lock screen, screenshots, reminders, layer rules, workspace | |
10 | + settings, display config, and user-facing omarchy commands. Excludes Omarchy | |
11 | + source development through `omarchy dev link` workflows. | |
12 | +--- | |
13 | + | |
14 | +# Omarchy Skill | |
15 | + | |
16 | +Manage [Omarchy](https://omarchy.org/) Linux systems - a beautiful, modern, opinionated Arch Linux distribution with Hyprland. | |
17 | + | |
18 | +This skill is for end-user customization on installed systems. | |
19 | +It is not for contributing to Omarchy source code. | |
20 | + | |
21 | +## When This Skill MUST Be Used | |
22 | + | |
23 | +**ALWAYS invoke this skill for end-user requests involving ANY of these:** | |
24 | + | |
25 | +- Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.) | |
26 | +- Editing `~/.config/omarchy/shell.json` (status bar layout, widgets) | |
27 | +- Editing terminal configs (alacritty, foot, kitty, ghostty) | |
28 | +- Editing ANY file in `~/.config/omarchy/` | |
29 | +- Window behavior, animations, opacity, blur, gaps, borders | |
30 | +- Layer rules, workspace settings, display/monitor configuration | |
31 | +- Themes, backgrounds, fonts, appearance changes | |
32 | +- User-facing `omarchy` commands (`omarchy theme ...`, `omarchy refresh ...`, `omarchy restart ...`, etc.) | |
33 | +- Screenshots, screen recording, reminders, night light, idle behavior, lock screen | |
34 | + | |
35 | +**If you're about to edit a config file in ~/.config/ on this system, STOP and use this skill first.** | |
36 | + | |
37 | +**Do NOT use this skill for Omarchy development tasks** (editing the Omarchy source tree, creating migrations, or running `omarchy dev ...` workflows). | |
38 | + | |
39 | +## Topic Guides | |
40 | + | |
41 | +Deeper instructions for common areas live next to this file. Read the | |
42 | +matching guide before starting: | |
43 | + | |
44 | +- [`hyprland.md`](hyprland.md) - keybindings, monitors, window rules, and other Hyprland config | |
45 | +- [`plugins.md`](plugins.md) - the Omarchy shell: bar layout, widgets, plugins, idle behavior | |
46 | +- [`theming.md`](theming.md) - themes, backgrounds, and fonts | |
47 | +- [`hooks.md`](hooks.md) - automation hooks that run on system events | |
48 | +- [`capture.md`](capture.md) - screenshots, screen recordings, OCR text capture, and file sharing | |
49 | +- [`contributing.md`](contributing.md) - reporting Omarchy bugs and submitting fixes upstream | |
50 | + | |
51 | +## Critical Safety Rules | |
52 | + | |
53 | +For privileged commands, follow the Privilege Escalation rules below: `sudo` when a terminal is available for the password prompt, `pkexec` when it is not. Do not wrap commands that already manage privilege elevation themselves. | |
54 | + | |
55 | +**For end-user customization tasks, NEVER modify anything in `/usr/share/de-omarchy/`** - but READING is safe and encouraged. | |
56 | + | |
57 | +This directory is owned by the omarchy package. Any local changes will be | |
58 | +overwritten on the next `omarchy update`. | |
59 | + | |
60 | +``` | |
61 | +/usr/share/de-omarchy/ # READ-ONLY - NEVER EDIT (reading is OK) | |
62 | +βββ bin/ # Command source (packaged binaries are on PATH) | |
63 | +βββ config/ # Default config templates | |
64 | +βββ themes/ # Stock themes | |
65 | +βββ default/ # System defaults | |
66 | +βββ shell/ # Omarchy shell source and defaults | |
67 | +βββ migrations/ # Update migrations | |
68 | +βββ install/ # Installation scripts | |
69 | +``` | |
70 | + | |
71 | +**Reading `/usr/share/de-omarchy/` is SAFE and useful** - do it freely to: | |
72 | +- Understand how omarchy commands work: `omarchy theme set --help` or `cat $(which omarchy-theme-set)` | |
73 | +- See default configs before customizing: `cat "$OMARCHY_PATH/config/omarchy/shell.json"` | |
74 | +- Check stock theme files to copy for customization | |
75 | +- Reference default hyprland settings: `cat /usr/share/de-omarchy/default/hypr/*` | |
76 | + | |
77 | +**Always use these safe locations instead:** | |
78 | +- `~/.config/` - User configuration (safe to edit) | |
79 | +- `~/.config/omarchy/themes/<custom-name>/` - Custom themes | |
80 | +- `~/.config/omarchy/hooks/` - Custom automation hooks | |
81 | + | |
82 | +If the request is to develop Omarchy itself, this skill is out of scope. Follow repository development instructions instead of this skill. | |
83 | + | |
84 | +## Privilege Escalation | |
85 | + | |
86 | +For an interactive script or command run in a visible terminal, use `sudo` for | |
87 | +privileged work. Omarchy may grant passwordless `sudo` access to particular | |
88 | +commands, and the terminal is the appropriate place to request a password | |
89 | +when one is needed. | |
90 | + | |
91 | +Use `pkexec` only when the caller cannot interact with a terminal or cannot | |
92 | +enter a password there, such as a command launched by an agent or a graphical | |
93 | +background process. Do not replace `sudo` with `pkexec` merely because a | |
94 | +command changes system state. | |
95 | + | |
96 | +## System Architecture | |
97 | + | |
98 | +Omarchy is built on: | |
99 | + | |
100 | +| Component | Purpose | Config Location | | |
101 | +|-----------|---------|-----------------| | |
102 | +| **Arch Linux** | Base OS | `/etc/`, `~/.config/` | | |
103 | +| **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` | | |
104 | +| **Omarchy shell** | Status bar + notifications (Quickshell) | `~/.config/omarchy/shell.json` | | |
105 | +| **Launcher/menus** | Quickshell menu | `~/.config/omarchy/extensions/omarchy-menu.jsonc` | | |
106 | +| **Alacritty/Foot/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` | | |
107 | +| **Omarchy OSD** | On-screen display | Quickshell plugin | | |
108 | + | |
109 | +## Command Discovery | |
110 | + | |
111 | +Omarchy ships a single `omarchy` CLI that dispatches to all `omarchy-*` binaries via `omarchy <group> <action>`. Always prefer this form β it is self-documenting and stable. The underlying `omarchy-*` binaries still exist on `PATH` and remain safe to read for source. | |
112 | + | |
113 | +```bash | |
114 | +# List every documented command and its summary (--all includes hidden commands) | |
115 | +omarchy commands | |
116 | + | |
117 | +# Show the commands inside a group | |
118 | +omarchy theme --help | |
119 | +omarchy refresh --help | |
120 | +omarchy restart --help | |
121 | + | |
122 | +# Show help for a specific command (does not execute it) | |
123 | +omarchy theme set --help | |
124 | + | |
125 | +# Machine-readable listing (binary, route, summary, args, aliases) | |
126 | +omarchy commands --json | |
127 | + | |
128 | +# Read a command's source to understand it | |
129 | +cat $(which omarchy-theme-set) | |
130 | +``` | |
131 | + | |
132 | +### Command Groups | |
133 | + | |
134 | +Run `omarchy --help` for the full list. The most common groups: | |
135 | + | |
136 | +| Group | Purpose | Example | | |
137 | +|-------|---------|---------| | |
138 | +| `omarchy refresh` | Reset config to defaults (backs up first) | `omarchy refresh shell` | | |
139 | +| `omarchy restart` | Restart a service/app | `omarchy restart shell` | | |
140 | +| `omarchy toggle` | Toggle feature on/off | `omarchy toggle nightlight` | | |
141 | +| `omarchy theme` | Theme management | `omarchy theme set <name>` | | |
142 | +| `omarchy bar` | Bar layout and widgets | `omarchy bar move omarchy.clock --section right` | | |
143 | +| `omarchy plugin` | Manage/clone shell plugins | `omarchy plugin clone omarchy.clock` | | |
144 | +| `omarchy hook` | Install automation hooks | `omarchy hook install theme-set <script>` | | |
145 | +| `omarchy install` | Install optional software / packages | `omarchy install docker dbs` | | |
146 | +| `omarchy launch` | Launch apps | `omarchy launch browser` | | |
147 | +| `omarchy capture` | Screenshots and recordings | `omarchy capture screenshot` | | |
148 | +| `omarchy reminder` | Desktop notification reminders | `omarchy reminder 15 "Pickup Jack"` | | |
149 | +| `omarchy pkg` | Package management | `omarchy pkg add <pkg>` | | |
150 | +| `omarchy setup` | Interactive setup wizards | `omarchy setup security fingerprint` | | |
151 | +| `omarchy update` | System updates | `omarchy update` | | |
152 | + | |
153 | +## Configuration Locations | |
154 | + | |
155 | +Hyprland config lives in `~/.config/hypr/` β see [`hyprland.md`](hyprland.md). | |
156 | +The Omarchy shell (bar, notifications, plugins, idle) is configured in | |
157 | +`~/.config/omarchy/shell.json` β see [`plugins.md`](plugins.md). | |
158 | + | |
159 | +### Terminals | |
160 | + | |
161 | +``` | |
162 | +~/.config/alacritty/alacritty.toml | |
163 | +~/.config/foot/foot.ini | |
164 | +~/.config/kitty/kitty.conf | |
165 | +~/.config/ghostty/config | |
166 | +``` | |
167 | + | |
168 | +**Command:** `omarchy restart terminal` | |
169 | + | |
170 | +### Other Configs | |
171 | + | |
172 | +| App | Location | | |
173 | +|-----|----------| | |
174 | +| btop | `~/.config/btop/btop.conf` | | |
175 | +| fastfetch | `/etc/fastfetch/config.jsonc` default; `~/.config/fastfetch/config.jsonc` user override | | |
176 | +| lazygit | `~/.config/lazygit/config.yml` | | |
177 | +| starship | `~/.config/starship.toml` | | |
178 | +| git | `~/.config/git/config` | | |
179 | + | |
180 | +## Safe Customization Patterns | |
181 | + | |
182 | +### Edit User Config Directly | |
183 | + | |
184 | +For simple changes, edit files in `~/.config/`: | |
185 | + | |
186 | +```bash | |
187 | +# 1. Read current config | |
188 | +cat ~/.config/hypr/bindings.lua | |
189 | + | |
190 | +# 2. Backup before changes | |
191 | +cp ~/.config/hypr/bindings.lua ~/.config/hypr/bindings.lua.bak.$(date +%s) | |
192 | + | |
193 | +# 3. Make changes with Edit tool | |
194 | + | |
195 | +# 4. Apply changes | |
196 | +# - Hyprland: auto-reloads on save, but MUST validate with `hyprctl reload` and `hyprctl configerrors` | |
197 | +# - Omarchy shell: shell.json and user plugin code under ~/.config/omarchy/plugins/ hot-reload on save | |
198 | +# - Menus/launcher: ~/.config/omarchy/extensions/omarchy-menu.jsonc hot-reloads on save | |
199 | +# - Terminals: apply with `omarchy restart terminal` (reloads running terminals; foot picks changes up in new windows) | |
200 | +``` | |
201 | + | |
202 | +### Reset to Defaults -- ALWAYS SEEK USER CONFIRMATION BEFORE RUNNING | |
203 | + | |
204 | +When customizations go wrong: | |
205 | + | |
206 | +```bash | |
207 | +# Reset specific config (creates backup automatically) | |
208 | +omarchy refresh shell | |
209 | +omarchy refresh hyprland | |
210 | + | |
211 | +# The refresh command: | |
212 | +# 1. Backs up current config with timestamp | |
213 | +# 2. Copies default from $OMARCHY_PATH/config/ | |
214 | +# 3. Restarts the component where the refresh needs it (e.g. `refresh shell`) | |
215 | +``` | |
216 | + | |
217 | +## System Commands | |
218 | + | |
219 | +```bash | |
220 | +omarchy update # Full system update | |
221 | +omarchy version # Show Omarchy version | |
222 | +omarchy debug --no-sudo --print # Debug info (ALWAYS use these flags) | |
223 | +omarchy system lock # Lock screen | |
224 | +omarchy system shutdown # Shutdown | |
225 | +omarchy system reboot # Reboot | |
226 | +``` | |
227 | + | |
228 | +**IMPORTANT:** Always run `omarchy debug` with `--no-sudo --print` flags to avoid interactive sudo prompts that will hang the terminal. | |
229 | + | |
230 | +## Troubleshooting | |
231 | + | |
232 | +```bash | |
233 | +# Get debug information (ALWAYS use these flags to avoid interactive prompts) | |
234 | +omarchy debug --no-sudo --print | |
235 | + | |
236 | +# Reset specific config to defaults | |
237 | +omarchy refresh <app> | |
238 | + | |
239 | +# Refresh specific config file | |
240 | +# config-file path is relative to ~/.config/ | |
241 | +# eg. `omarchy refresh config hypr/hyprland.lua` will refresh ~/.config/hypr/hyprland.lua | |
242 | +omarchy refresh config <config-file> | |
243 | + | |
244 | +# Full reinstall of configs (nuclear option) | |
245 | +omarchy reinstall | |
246 | +``` | |
247 | + | |
248 | +## Decision Framework | |
249 | + | |
250 | +When user requests system changes: | |
251 | + | |
252 | +1. **Is it a stock omarchy command?** Use it directly | |
253 | +2. **Is it a config edit?** Edit in `~/.config/`, never `/usr/share/de-omarchy/` | |
254 | +3. **Is it a theme customization?** Follow [`theming.md`](theming.md); create a NEW custom theme directory | |
255 | +4. **Is it automation?** Follow [`hooks.md`](hooks.md); use `omarchy hook install` and the hook `.d` directories | |
256 | +5. **Is it a package install?** Use `omarchy pkg add <pkgs...>` (or `omarchy pkg aur add <pkgs...>` for AUR-only packages) | |
257 | +6. **Is it built-in shell/plugin code?** Follow [`plugins.md`](plugins.md); clone it with `omarchy plugin clone`, never edit the packaged copy | |
258 | +7. **Unsure if command exists?** Run `omarchy commands` (or `omarchy <group> --help` for one group) | |
259 | + | |
260 | +### Reminder Requests | |
261 | + | |
262 | +When the user asks to set a reminder, use `omarchy reminder <minutes> [message]` directly. Convert natural language durations to minutes and title-case short reminder labels when appropriate. | |
263 | + | |
264 | +```bash | |
265 | +omarchy reminder 15 "Pickup Jack" | |
266 | +omarchy reminder 60 "Check laundry" | |
267 | +omarchy reminder show | |
268 | +omarchy reminder clear | |
269 | +``` | |
270 | + | |
271 | +## Out of Scope | |
272 | + | |
273 | +This skill intentionally does not cover Omarchy source development. Do not use this skill for: | |
274 | +- Editing files in `/usr/share/de-omarchy/` (`bin/`, `config/`, `default/`, `shell/`, `themes/`, `migrations/`, etc.) | |
275 | +- Creating or editing migrations | |
276 | +- Running `omarchy dev ...` commands | |
277 | + | |
278 | +## Example Requests | |
279 | + | |
280 | +- "Change my theme to catppuccin" -> `omarchy theme set catppuccin` | |
281 | +- "Add a keybinding for Super+E to open file manager" -> Check existing bindings first, call `hl.unbind` if needed, then `o.bind` in `~/.config/hypr/bindings.lua` | |
282 | +- "Configure my external monitor" -> Edit `~/.config/hypr/monitors.lua` | |
283 | +- "Make the window gaps smaller" -> Edit `~/.config/hypr/looknfeel.lua` | |
284 | +- "Turn on night light" -> `omarchy toggle nightlight` (for time-based schedules, edit `~/.config/hypr/hyprsunset.conf` profiles, then `omarchy restart hyprsunset`) | |
285 | +- "Set a reminder to pickup jack in 15 minutes" -> `omarchy reminder 15 "Pickup Jack"` | |
286 | +- "Show my reminders" -> `omarchy reminder show` | |
287 | +- "Clear all reminders" -> `omarchy reminder clear` | |
288 | +- "Customize the catppuccin theme colors" -> Overlay: put an edited `colors.toml` in `~/.config/omarchy/themes/catppuccin/`, then re-apply the theme (see `theming.md`) | |
289 | +- "Run a script every time I change themes" -> Install it with `omarchy hook install theme-set <script>` | |
290 | +- "Change how workspace labels are rendered" -> Clone `omarchy.workspaces`, which switches the bar to `<username>.workspaces`, then edit the clone | |
291 | +- "Lock after ten minutes" -> Set `idle.lock` to `600` in `~/.config/omarchy/shell.json` | |
292 | +- "Reset shell/bar to defaults" -> `omarchy refresh shell` | |
293 | +- "Record my screen" -> `omarchy screenrecord --fullscreen`, then `omarchy screenrecord --stop-recording` (see `capture.md`) | |
294 | +- "Report this bug to Omarchy" -> Gather diagnostics and a capture of the problem, then file it (see `contributing.md`) | |
0 | 295 | |
βΌdefault/agents/skills/omarchy/capture.md
+60-0
| @@ -0,0 +1,60 @@ | ||
1 | +# Capture and Sharing | |
2 | + | |
3 | +Read this before taking screenshots or screen recordings, extracting text from | |
4 | +the screen, or sharing files with other machines. | |
5 | + | |
6 | +## Screenshots | |
7 | + | |
8 | +```bash | |
9 | +omarchy screenshot # Interactive smart-region flow | |
10 | +omarchy capture screenshot region # Select a region | |
11 | +omarchy capture screenshot windows # Pick a window | |
12 | +omarchy capture screenshot fullscreen save # Full screen, straight to disk (no editor) | |
13 | +``` | |
14 | + | |
15 | +The first argument picks the mode (`smart|region|windows|fullscreen`), the | |
16 | +second what happens with it (`slurp|copy|save`). `save` skips the annotation | |
17 | +editor and prints the saved path. Screenshots land in the configured Pictures | |
18 | +directory (override with `OMARCHY_SCREENSHOT_DIR`). | |
19 | + | |
20 | +## Screen Recording | |
21 | + | |
22 | +```bash | |
23 | +omarchy screenrecord --fullscreen # Start recording the full screen | |
24 | +# ...exercise whatever you want on film... | |
25 | +omarchy screenrecord --stop-recording # Stop; prints the saved path | |
26 | +``` | |
27 | + | |
28 | +Optional flags: `--with-desktop-audio`, `--with-microphone-audio`, | |
29 | +`--with-webcam` (plus `--webcam-device=` and `--webcam-size=`), and | |
30 | +`--resolution=<size>`. Without `--fullscreen` a region picker opens first. | |
31 | +Recordings land in the configured Videos directory (override with | |
32 | +`OMARCHY_SCREENRECORD_DIR`). Resize a live webcam overlay with | |
33 | +`omarchy capture webcam resize <smaller|larger|reset|small|medium|large>`. | |
34 | + | |
35 | +If recording fails to start, rerun with `OMARCHY_SCREENRECORD_DEBUG=true` to | |
36 | +collect a log at `/tmp/omarchy-screenrecord.log` worth attaching to a bug | |
37 | +report. | |
38 | + | |
39 | +## Text Capture (OCR) | |
40 | + | |
41 | +```bash | |
42 | +omarchy capture text # Select a region; extracted text goes to the clipboard | |
43 | +``` | |
44 | + | |
45 | +## Sharing Files | |
46 | + | |
47 | +```bash | |
48 | +omarchy share clipboard # Share the clipboard via LocalSend | |
49 | +omarchy share file <path...> # Share files with nearby devices | |
50 | +omarchy share folder <path> # Share a folder | |
51 | + | |
52 | +omarchy tailscale send <machine> <file...> # Taildrop to a tailnet machine | |
53 | +omarchy tailscale receive [directory] # Save incoming Taildrop files | |
54 | +``` | |
55 | + | |
56 | +Shrink large captures before sharing them: | |
57 | + | |
58 | +```bash | |
59 | +omarchy transcode <input> [format] [resolution] # Re-encode pictures/videos for sharing | |
60 | +``` | |
0 | 61 | |
βΌdefault/agents/skills/omarchy/contributing.md
+65-0
| @@ -0,0 +1,65 @@ | ||
1 | +# Reporting Issues and Submitting PRs | |
2 | + | |
3 | +Read this when the user wants to report an Omarchy bug, suggest a feature, or | |
4 | +contribute a fix upstream. | |
5 | + | |
6 | +Omarchy lives at https://github.com/basecamp/omarchy. Route requests to the | |
7 | +right place: | |
8 | + | |
9 | +- **Verified bugs** -> GitHub issues. Issues are for validated bugs only, not | |
10 | + support requests. | |
11 | +- **Feature ideas and suggestions** -> | |
12 | + https://github.com/basecamp/omarchy/discussions/categories/suggestions | |
13 | +- **Support and "is this a bug?" questions** -> the Discord community at | |
14 | + https://omarchy.org/discord. Start here when the problem isn't clearly a bug | |
15 | + in Omarchy itself. | |
16 | + | |
17 | +## Filing a Good Bug Report | |
18 | + | |
19 | +The bug template asks for system details (CPU, GPU, Omarchy version), a | |
20 | +description with steps to reproduce, and diagnostics. Gather them: | |
21 | + | |
22 | +```bash | |
23 | +omarchy version | |
24 | + | |
25 | +# Generate the diagnostic log (also written to /tmp/omarchy-debug.log) | |
26 | +omarchy debug --no-sudo --print | |
27 | + | |
28 | +# Interactive variant: `omarchy debug` offers to upload the log to | |
29 | +# logs.omarchy.org (expires after 24h) and prints a shareable URL to | |
30 | +# include in the issue. | |
31 | +``` | |
32 | + | |
33 | +**Capture the problem on screen.** A screenshot or short recording of the bug | |
34 | +is often worth more than the description β see [`capture.md`](capture.md) for | |
35 | +`omarchy capture screenshot` and `omarchy screenrecord`. Keep recordings short | |
36 | +and focused on the misbehavior. GitHub issue attachments are added by | |
37 | +drag-and-drop in the web form, so save the capture and hand the user the file | |
38 | +path to attach (`gh` cannot upload media). | |
39 | + | |
40 | +For screen-recording failures specifically, rerun with | |
41 | +`OMARCHY_SCREENRECORD_DEBUG=true` and attach `/tmp/omarchy-screenrecord.log`. | |
42 | + | |
43 | +File the issue with `gh` when available: | |
44 | + | |
45 | +```bash | |
46 | +gh issue create --repo basecamp/omarchy --title "..." --body "..." | |
47 | +``` | |
48 | + | |
49 | +Include: what happened, what was expected, steps to reproduce, system details, | |
50 | +the debug log URL (or attached log), and the capture. | |
51 | + | |
52 | +## Submitting a PR | |
53 | + | |
54 | +Never develop against `/usr/share/de-omarchy`. Clone a working copy instead: | |
55 | + | |
56 | +```bash | |
57 | +gh repo fork basecamp/omarchy --clone | |
58 | +cd omarchy | |
59 | +``` | |
60 | + | |
61 | +Follow the repository's own `AGENTS.md` for style, testing, and commit | |
62 | +conventions β it is the authority on contributions. Keep commits atomic, run | |
63 | +`./test/all` before pushing, and open the PR with `gh pr create`. A PR that | |
64 | +fixes a visual problem should include before/after captures (again, see | |
65 | +[`capture.md`](capture.md)). | |
0 | 66 | |
βΌdefault/agents/skills/omarchy/hooks.md
+28-0
| @@ -0,0 +1,28 @@ | ||
1 | +# Automation Hooks | |
2 | + | |
3 | +Read this before setting up scripts that run on system events (theme changes, | |
4 | +updates, boot, low battery, etc.). | |
5 | + | |
6 | +Hooks live in `~/.config/omarchy/hooks/<name>.d/` β one directory per event, | |
7 | +holding any number of independent scripts. Install with | |
8 | +`omarchy hook install <name> <script>` (copies the script in and makes it | |
9 | +executable). The runner also executes a flat `~/.config/omarchy/hooks/<name>` | |
10 | +file first, if one exists. | |
11 | + | |
12 | +``` | |
13 | +~/.config/omarchy/hooks/ | |
14 | +βββ battery-low.d/ # Low battery (percentage in $1) | |
15 | +βββ font-set.d/ # After font change (font name in $1) | |
16 | +βββ post-boot.d/ # After the desktop starts | |
17 | +βββ post-update.d/ # During `omarchy update`, after system packages and migrations | |
18 | +βββ pre-refresh-pacman.d/ # Before `omarchy refresh pacman` re-syncs packages | |
19 | +βββ theme-set.d/ # After theme change (theme slug in $1) | |
20 | +``` | |
21 | + | |
22 | +Example hook script: | |
23 | +```bash | |
24 | +#!/bin/bash | |
25 | +THEME_NAME=$1 | |
26 | +echo "Theme changed to: $THEME_NAME" | |
27 | +# Add custom actions here | |
28 | +``` | |
0 | 29 | |
βΌdefault/agents/skills/omarchy/hyprland.md
+78-0
| @@ -0,0 +1,78 @@ | ||
1 | +# Hyprland Configuration | |
2 | + | |
3 | +Read this before changing keybindings, monitors, window rules, or any other | |
4 | +Hyprland (window manager) configuration. | |
5 | + | |
6 | +Omarchy configures Hyprland in Lua. User files are loaded after Omarchy's | |
7 | +defaults, so overrides go here: | |
8 | + | |
9 | +``` | |
10 | +~/.config/hypr/ | |
11 | +βββ hyprland.lua # Main config (loads Omarchy defaults, then user files) | |
12 | +βββ bindings.lua # Keybindings | |
13 | +βββ monitors.lua # Display configuration | |
14 | +βββ input.lua # Keyboard/mouse settings | |
15 | +βββ looknfeel.lua # Appearance (gaps, borders, animations) | |
16 | +βββ autostart.lua # Startup applications | |
17 | +βββ hyprsunset.conf # Night light / blue light filter | |
18 | +βββ xdph.conf # Screen sharing / desktop portal | |
19 | +``` | |
20 | + | |
21 | +**Key behaviors (the `.lua` files):** | |
22 | +- Hyprland auto-reloads on config save (no restart needed for most changes) | |
23 | +- Use `hyprctl reload` to force reload | |
24 | +- After ANY Hyprland Lua config change, validate with `hyprctl reload` followed by `hyprctl configerrors` | |
25 | +- If `hyprctl configerrors` reports errors, address them and rerun validation until clean or until a real blocker is identified | |
26 | +- Use `omarchy refresh hyprland` to reset the Lua config files to defaults | |
27 | + | |
28 | +The two `.conf` files are read by separate processes, so `hyprctl` neither | |
29 | +applies nor validates them: | |
30 | +- `hyprsunset.conf` (night light): apply changes with `omarchy restart hyprsunset`; reset with `omarchy refresh hyprsunset` | |
31 | +- `xdph.conf` (screen-sharing portal): applies when the portal restarts, e.g. on next login | |
32 | + | |
33 | +## Keybindings | |
34 | + | |
35 | +Edit `~/.config/hypr/bindings.lua`. Format: | |
36 | +```lua | |
37 | +o.bind("SUPER + SHIFT + R", "SSH", "alacritty -e ssh your-server") | |
38 | +o.bind("SUPER + B", "Browser", { launch = "chromium" }) -- launch wraps with uwsm-app | |
39 | +``` | |
40 | + | |
41 | +View current bindings: `omarchy menu keybindings --print` | |
42 | + | |
43 | +**IMPORTANT: When re-binding an existing key:** | |
44 | + | |
45 | +1. First check existing bindings: `omarchy menu keybindings --print` | |
46 | +2. If the key is already bound, you MUST call `hl.unbind(...)` BEFORE the new `o.bind(...)` | |
47 | +3. Inform the user what the key was previously bound to | |
48 | + | |
49 | +Example - rebinding SUPER+F (which is bound to fullscreen by default): | |
50 | +```lua | |
51 | +-- Unbind existing SUPER+F (was: fullscreen) | |
52 | +hl.unbind("SUPER + F") | |
53 | +-- New binding for file manager | |
54 | +o.bind("SUPER + F", "File manager", { launch = "nautilus" }) | |
55 | +``` | |
56 | + | |
57 | +Always tell the user: "Note: SUPER+F was previously bound to fullscreen. I've added an unbind to override it." | |
58 | + | |
59 | +## Display/Monitors | |
60 | + | |
61 | +Edit `~/.config/hypr/monitors.lua`. Format: | |
62 | +```lua | |
63 | +hl.monitor({ output = "eDP-1", mode = "1920x1080@60", position = "0x0", scale = 1 }) | |
64 | +hl.monitor({ output = "HDMI-A-1", mode = "2560x1440@144", position = "1920x0", scale = 1 }) | |
65 | +``` | |
66 | + | |
67 | +List monitors and supported modes: `hyprctl monitors all` | |
68 | + | |
69 | +## Window Rules | |
70 | + | |
71 | +**CRITICAL: Hyprland window rules syntax changes frequently between versions.** | |
72 | + | |
73 | +Before writing ANY window rules, you MUST fetch the current documentation from the official Hyprland wiki: | |
74 | +- https://wiki.hypr.land/Configuring/Basics/Window-Rules/ | |
75 | + | |
76 | +DO NOT rely on cached or memorized window rule syntax. The format has changed multiple times and using outdated syntax will cause errors or unexpected behavior. | |
77 | + | |
78 | +Window rules go in `~/.config/hypr/hyprland.lua` or a required Lua module. Prefer Omarchy's `o.window(match, rules)` helper β see examples in `$OMARCHY_PATH/default/hypr/windows.lua`. | |
0 | 79 | |
βΌdefault/agents/skills/omarchy/plugins.md
+52-0
| @@ -0,0 +1,52 @@ | ||
1 | +# Omarchy Shell: Bar, Plugins, and Idle | |
2 | + | |
3 | +Read this before changing the status bar, notifications, shell plugins, | |
4 | +widgets, or idle/lock behavior. | |
5 | + | |
6 | +The bar, notification daemon, settings panel, and assorted overlays all run | |
7 | +inside a single long-running Quickshell process (`omarchy-shell`). | |
8 | + | |
9 | +``` | |
10 | +~/.config/omarchy/shell.json # User overrides: bar, plugins, idle | |
11 | +~/.config/omarchy/plugins/<plugin-id>/ # User-owned shell plugins | |
12 | +$OMARCHY_PATH/config/omarchy/shell.json # Canonical defaults | |
13 | +``` | |
14 | + | |
15 | +The shell hot-reloads `shell.json` on save β no restart needed for layout | |
16 | +changes. `idle.screensaver` and `idle.lock` are seconds since user idle began. | |
17 | + | |
18 | +**Commands:** `omarchy restart shell`, `omarchy refresh shell` | |
19 | + | |
20 | +## Bar Layout | |
21 | + | |
22 | +Use the `omarchy bar` group to move and manage widgets: | |
23 | + | |
24 | +```bash | |
25 | +omarchy bar move omarchy.clock --section right | |
26 | +``` | |
27 | + | |
28 | +For layout edits beyond what the commands cover, edit the bar configuration | |
29 | +in `~/.config/omarchy/shell.json`; it hot-reloads on save. | |
30 | + | |
31 | +## Customizing Built-In Plugins and Widgets | |
32 | + | |
33 | +To customize a built-in bar widget, never edit `$OMARCHY_PATH/shell/plugins/`. | |
34 | +Clone it into the user plugin directory instead: | |
35 | + | |
36 | +```bash | |
37 | +omarchy plugin clone omarchy.workspaces | |
38 | +# Edit ~/.config/omarchy/plugins/<username>.workspaces/; saved changes reload automatically. | |
39 | +``` | |
40 | + | |
41 | +Cloning switches the bar to the cloned copy (e.g. `<username>.workspaces`), | |
42 | +which is yours to edit and survives updates. | |
43 | + | |
44 | +Saving a file anywhere under `~/.config/omarchy/plugins/` reloads plugin code | |
45 | +automatically. If a change somehow fails to apply, force a reload with | |
46 | +`omarchy-shell shell rescanPlugins`. | |
47 | + | |
48 | +## Idle and Lock | |
49 | + | |
50 | +Set `idle.screensaver` and `idle.lock` in `~/.config/omarchy/shell.json`, | |
51 | +in seconds since user idle began. Example: "lock after ten minutes" means | |
52 | +setting `idle.lock` to `600`. | |
0 | 53 | |
βΌdefault/agents/skills/omarchy/theming.md
+56-0
| @@ -0,0 +1,56 @@ | ||
1 | +# Themes, Backgrounds, and Fonts | |
2 | + | |
3 | +Read this before changing themes, backgrounds, fonts, or theme colors. | |
4 | + | |
5 | +## Theme Commands | |
6 | + | |
7 | +```bash | |
8 | +omarchy theme list # Show available themes | |
9 | +omarchy theme current # Show current theme | |
10 | +omarchy theme set <name> # Apply theme ("Tokyo Night" and "tokyo-night" both work) | |
11 | +omarchy theme bg next # Cycle background | |
12 | +omarchy theme install <url> # Install from git repo | |
13 | +``` | |
14 | + | |
15 | +## Making a New Theme | |
16 | + | |
17 | +1. Create a directory under `~/.config/omarchy/themes`. | |
18 | +2. See how an existing theme is done via `/usr/share/de-omarchy/themes/catppuccin`. | |
19 | +3. Download a matching background (or several) from the internet and put them in `~/.config/omarchy/themes/<name-of-new-theme>/backgrounds/`. | |
20 | +4. When done with the theme, run `omarchy theme set "Name of new theme"`. | |
21 | + | |
22 | +Additional user backgrounds for any theme (stock or custom) go in | |
23 | +`~/.config/omarchy/backgrounds/<theme-slug>/`. | |
24 | + | |
25 | +## Customizing a Stock Theme | |
26 | + | |
27 | +Never edit stock themes under `/usr/share/de-omarchy/themes/` β changes are lost | |
28 | +on update. Two safe options: | |
29 | + | |
30 | +**Overlay (preferred for small tweaks):** create a user theme directory with | |
31 | +the SAME slug containing only the files you want to change. When the theme is | |
32 | +applied, the stock theme is copied first and your files win on top: | |
33 | + | |
34 | +```bash | |
35 | +mkdir -p ~/.config/omarchy/themes/catppuccin | |
36 | +cp /usr/share/de-omarchy/themes/catppuccin/colors.toml ~/.config/omarchy/themes/catppuccin/ | |
37 | +# Edit the copied colors.toml, then re-apply: | |
38 | +omarchy theme set catppuccin | |
39 | +``` | |
40 | + | |
41 | +**Fork:** copy the whole stock theme under a new name for a fully independent | |
42 | +variant: | |
43 | + | |
44 | +```bash | |
45 | +cp -r /usr/share/de-omarchy/themes/catppuccin ~/.config/omarchy/themes/catppuccin-custom | |
46 | +# Edit ~/.config/omarchy/themes/catppuccin-custom/, then: | |
47 | +omarchy theme set catppuccin-custom | |
48 | +``` | |
49 | + | |
50 | +## Fonts | |
51 | + | |
52 | +```bash | |
53 | +omarchy font list # Available fonts | |
54 | +omarchy font current # Current font | |
55 | +omarchy font set <name> # Change font | |
56 | +``` | |
0 | 57 | |
βΌdefault/alacritty/Alacritty.desktop
+21-0
| @@ -0,0 +1,21 @@ | ||
1 | +[Desktop Entry] | |
2 | +Type=Application | |
3 | +TryExec=alacritty | |
4 | +Exec=alacritty | |
5 | +Icon=Alacritty | |
6 | +Terminal=false | |
7 | +Categories=System;TerminalEmulator; | |
8 | +Name=Alacritty | |
9 | +GenericName=Terminal | |
10 | +Comment=A fast, cross-platform, OpenGL terminal emulator | |
11 | +StartupNotify=true | |
12 | +StartupWMClass=Alacritty | |
13 | +Actions=New; | |
14 | +X-TerminalArgExec=-e | |
15 | +X-TerminalArgAppId=--class= | |
16 | +X-TerminalArgTitle=--title= | |
17 | +X-TerminalArgDir=--working-directory= | |
18 | + | |
19 | +[Desktop Action New] | |
20 | +Name=New Terminal | |
21 | +Exec=alacritty | |
0 | 22 | |
βΌdefault/alacritty/screensaver.toml
+11-0
| @@ -0,0 +1,11 @@ | ||
1 | +[colors.primary] | |
2 | +background = "0x000000" | |
3 | + | |
4 | +[colors.cursor] | |
5 | +cursor = "0x000000" | |
6 | + | |
7 | +[font] | |
8 | +size = 18.0 | |
9 | + | |
10 | +[window] | |
11 | +opacity = 1.0 | |
0 | 12 | |
βΌdefault/audio/filter-chain-host.conf
+40-0
| @@ -0,0 +1,40 @@ | ||
1 | +# Host config for the Omarchy speaker tuning. | |
2 | +# | |
3 | +# This exists so the tuning gets its own PipeWire client rather than sharing | |
4 | +# PipeWire's stock filter-chain.conf. That config merges every fragment in | |
5 | +# ~/.config/pipewire/filter-chain.conf.d/, so hosting the tuning there would load | |
6 | +# any unrelated filter a user keeps in that directory -- duplicating filters | |
7 | +# already hosted elsewhere, and stopping them all when the tuning is switched off. | |
8 | +# | |
9 | +# Installed as ~/.config/pipewire/omarchy-speaker-tuning.conf with the tuning | |
10 | +# graph merged from omarchy-speaker-tuning.conf.d/, and run with | |
11 | +# pipewire -c omarchy-speaker-tuning.conf | |
12 | +# | |
13 | +# The contents are the minimum a filter-hosting client needs, taken from | |
14 | +# /usr/share/pipewire/filter-chain.conf. | |
15 | + | |
16 | +context.properties = { | |
17 | + log.level = 0 | |
18 | +} | |
19 | + | |
20 | +context.spa-libs = { | |
21 | + audio.convert.* = audioconvert/libspa-audioconvert | |
22 | + support.* = support/libspa-support | |
23 | +} | |
24 | + | |
25 | +context.modules = [ | |
26 | + # Boost the audio thread priority. | |
27 | + { name = libpipewire-module-rt | |
28 | + args = { } | |
29 | + flags = [ ifexists nofail ] | |
30 | + } | |
31 | + | |
32 | + # The native communication protocol. | |
33 | + { name = libpipewire-module-protocol-native } | |
34 | + | |
35 | + # Lets this process provide nodes to PipeWire. | |
36 | + { name = libpipewire-module-client-node } | |
37 | + | |
38 | + # Wraps nodes in an adapter with a converter and resampler. | |
39 | + { name = libpipewire-module-adapter } | |
40 | +] | |
0 | 41 | |
βΌdefault/audio/tunings/dell-xps-2026/filter-chain.conf
+140-0
| @@ -0,0 +1,140 @@ | ||
1 | +# Dell XPS 14 / XPS 16 (2026) speaker tuning. | |
2 | +# | |
3 | +# Biquad chain fitted to the measured response of the xps-audio-linux EasyEffects | |
4 | +# profile under a dense pink-weighted multitone of 104 bin-aligned tones, | |
5 | +# followed by a lookahead limiter. Measures 1.24 dB RMS against that reference | |
6 | +# (0.97 dB weighted over the fit's own error metric). | |
7 | +# | |
8 | +# Fitted and measured on the XPS 14 (SKU 0DB9); the XPS 16 (0DBA) is covered on | |
9 | +# report that the same profile suits it. See tuning.conf. | |
10 | +# | |
11 | +# Q below 200 Hz is capped at 1.8 on purpose. A closer magnitude fit is possible | |
12 | +# with high-Q sections, but the reference produces its narrow bass features by | |
13 | +# convolution, and reproducing them with high-Q biquads swung group delay 31 ms | |
14 | +# across 63-80 Hz, which smears bass transients. The cap costs 0.33 dB and | |
15 | +# halves the swing. | |
16 | +# | |
17 | +# This is a plain filter-chain sink rather than a WirePlumber smart filter. A | |
18 | +# smart filter is the better shape -- it would leave the real device as the | |
19 | +# default output instead of adding a second one -- but on PipeWire 1.6.8 / | |
20 | +# WirePlumber 0.5.15 this graph loads and links correctly as a smart filter and | |
21 | +# then passes audio through unprocessed: its controls are present and | |
22 | +# mpv -> filter -> sink links are made, yet the filter's input monitor and the | |
23 | +# speaker sink's monitor measure identically. Revisit when that is understood. | |
24 | +# | |
25 | +# Channels are wired explicitly because the limiter is a stereo plugin; a mono | |
26 | +# graph is duplicated per channel and would limit each side independently, | |
27 | +# shifting the stereo image on bass transients. | |
28 | + | |
29 | +context.modules = [ | |
30 | + { name = libpipewire-module-filter-chain | |
31 | + args = { | |
32 | + node.description = "Laptop Speakers" | |
33 | + media.name = "Laptop Speakers" | |
34 | + | |
35 | + filter.graph = { | |
36 | + nodes = [ | |
37 | + { type = builtin name = s0_l label = bq_highpass control = { "Freq" = 60.9 "Q" = 1.0 } } | |
38 | + { type = builtin name = s1_l label = bq_highpass control = { "Freq" = 60.9 "Q" = 1.0 } } | |
39 | + { type = builtin name = s2_l label = bq_peaking control = { "Freq" = 83.4 "Q" = 1.8 "Gain" = -8.0 } } | |
40 | + { type = builtin name = s3_l label = bq_peaking control = { "Freq" = 100.4 "Q" = 1.59 "Gain" = 7.47 } } | |
41 | + { type = builtin name = s4_l label = bq_peaking control = { "Freq" = 250.5 "Q" = 2.966 "Gain" = -4.7 } } | |
42 | + { type = builtin name = s5_l label = bq_peaking control = { "Freq" = 419.8 "Q" = 3.0 "Gain" = -5.83 } } | |
43 | + { type = builtin name = s6_l label = bq_peaking control = { "Freq" = 631.3 "Q" = 2.515 "Gain" = -10.33 } } | |
44 | + { type = builtin name = s7_l label = bq_peaking control = { "Freq" = 894.4 "Q" = 4.0 "Gain" = -2.42 } } | |
45 | + { type = builtin name = s8_l label = bq_peaking control = { "Freq" = 1355.7 "Q" = 2.884 "Gain" = 6.92 } } | |
46 | + { type = builtin name = s9_l label = bq_peaking control = { "Freq" = 1707.2 "Q" = 1.311 "Gain" = -6.54 } } | |
47 | + { type = builtin name = s10_l label = bq_peaking control = { "Freq" = 3100.0 "Q" = 0.5 "Gain" = -10.09 } } | |
48 | + { type = builtin name = s11_l label = bq_peaking control = { "Freq" = 3200.0 "Q" = 1.048 "Gain" = 3.09 } } | |
49 | + { type = builtin name = s12_l label = bq_highshelf control = { "Freq" = 6015.2 "Q" = 1.5 "Gain" = -1.34 } } | |
50 | + | |
51 | + { type = builtin name = s0_r label = bq_highpass control = { "Freq" = 60.9 "Q" = 1.0 } } | |
52 | + { type = builtin name = s1_r label = bq_highpass control = { "Freq" = 60.9 "Q" = 1.0 } } | |
53 | + { type = builtin name = s2_r label = bq_peaking control = { "Freq" = 83.4 "Q" = 1.8 "Gain" = -8.0 } } | |
54 | + { type = builtin name = s3_r label = bq_peaking control = { "Freq" = 100.4 "Q" = 1.59 "Gain" = 7.47 } } | |
55 | + { type = builtin name = s4_r label = bq_peaking control = { "Freq" = 250.5 "Q" = 2.966 "Gain" = -4.7 } } | |
56 | + { type = builtin name = s5_r label = bq_peaking control = { "Freq" = 419.8 "Q" = 3.0 "Gain" = -5.83 } } | |
57 | + { type = builtin name = s6_r label = bq_peaking control = { "Freq" = 631.3 "Q" = 2.515 "Gain" = -10.33 } } | |
58 | + { type = builtin name = s7_r label = bq_peaking control = { "Freq" = 894.4 "Q" = 4.0 "Gain" = -2.42 } } | |
59 | + { type = builtin name = s8_r label = bq_peaking control = { "Freq" = 1355.7 "Q" = 2.884 "Gain" = 6.92 } } | |
60 | + { type = builtin name = s9_r label = bq_peaking control = { "Freq" = 1707.2 "Q" = 1.311 "Gain" = -6.54 } } | |
61 | + { type = builtin name = s10_r label = bq_peaking control = { "Freq" = 3100.0 "Q" = 0.5 "Gain" = -10.09 } } | |
62 | + { type = builtin name = s11_r label = bq_peaking control = { "Freq" = 3200.0 "Q" = 1.048 "Gain" = 3.09 } } | |
63 | + { type = builtin name = s12_r label = bq_highshelf control = { "Freq" = 6015.2 "Q" = 1.5 "Gain" = -1.34 } } | |
64 | + { type = lv2 | |
65 | + name = limiter | |
66 | + plugin = "http://lsp-plug.in/plugins/lv2/limiter_stereo" | |
67 | + control = { | |
68 | + # Both default to enabled: "alr" regulates level toward the | |
69 | + # threshold and "boost" normalises the threshold up to full | |
70 | + # scale. A fixed tuning must switch them off or its tone drifts | |
71 | + # with programme level. | |
72 | + "alr" = 0 | |
73 | + "boost" = 0 | |
74 | + "g_in" = 0.5456 | |
75 | + "th" = 0.891 | |
76 | + } | |
77 | + } | |
78 | + ] | |
79 | + | |
80 | + links = [ | |
81 | + { output = "s0_l:Out" input = "s1_l:In" } | |
82 | + { output = "s1_l:Out" input = "s2_l:In" } | |
83 | + { output = "s2_l:Out" input = "s3_l:In" } | |
84 | + { output = "s3_l:Out" input = "s4_l:In" } | |
85 | + { output = "s4_l:Out" input = "s5_l:In" } | |
86 | + { output = "s5_l:Out" input = "s6_l:In" } | |
87 | + { output = "s6_l:Out" input = "s7_l:In" } | |
88 | + { output = "s7_l:Out" input = "s8_l:In" } | |
89 | + { output = "s8_l:Out" input = "s9_l:In" } | |
90 | + { output = "s9_l:Out" input = "s10_l:In" } | |
91 | + { output = "s10_l:Out" input = "s11_l:In" } | |
92 | + { output = "s11_l:Out" input = "s12_l:In" } | |
93 | + { output = "s12_l:Out" input = "limiter:in_l" } | |
94 | + { output = "s0_r:Out" input = "s1_r:In" } | |
95 | + { output = "s1_r:Out" input = "s2_r:In" } | |
96 | + { output = "s2_r:Out" input = "s3_r:In" } | |
97 | + { output = "s3_r:Out" input = "s4_r:In" } | |
98 | + { output = "s4_r:Out" input = "s5_r:In" } | |
99 | + { output = "s5_r:Out" input = "s6_r:In" } | |
100 | + { output = "s6_r:Out" input = "s7_r:In" } | |
101 | + { output = "s7_r:Out" input = "s8_r:In" } | |
102 | + { output = "s8_r:Out" input = "s9_r:In" } | |
103 | + { output = "s9_r:Out" input = "s10_r:In" } | |
104 | + { output = "s10_r:Out" input = "s11_r:In" } | |
105 | + { output = "s11_r:Out" input = "s12_r:In" } | |
106 | + { output = "s12_r:Out" input = "limiter:in_r" } | |
107 | + ] | |
108 | + | |
109 | + inputs = [ "s0_l:In" "s0_r:In" ] | |
110 | + outputs = [ "limiter:out_l" "limiter:out_r" ] | |
111 | + } | |
112 | + | |
113 | + audio.channels = 2 | |
114 | + audio.position = [ FL FR ] | |
115 | + | |
116 | + capture.props = { | |
117 | + node.name = "omarchy_speaker_tuning" | |
118 | + media.class = Audio/Sink | |
119 | + } | |
120 | + playback.props = { | |
121 | + node.name = "omarchy_speaker_tuning_output" | |
122 | + node.passive = true | |
123 | + target.object = "@SPEAKER_SINK@" | |
124 | + # This stream is the filter's output and is a movable sink input like any | |
125 | + # other, so anything that reroutes "all streams" to a newly selected | |
126 | + # output would drag the processing along with it -- onto headphones, or | |
127 | + # into the tuning's own sink, which is a cycle. Pin it. | |
128 | + node.dont-move = true | |
129 | + # If the speaker sink is not present yet -- the tuning host can start | |
130 | + # before the device is discovered -- WirePlumber would otherwise link this | |
131 | + # output to whatever default exists, quietly tuning the wrong device while | |
132 | + # the tuning sink still looks healthy. Wait for the named target instead. | |
133 | + # Both are needed: without linger, WirePlumber destroys the node rather | |
134 | + # than waiting (see its scripts/linking/find-defined-target.lua). | |
135 | + node.dont-fallback = true | |
136 | + node.linger = true | |
137 | + } | |
138 | + } | |
139 | + } | |
140 | +] | |
0 | 141 | |
βΌdefault/audio/tunings/dell-xps-2026/tuning.conf
+39-0
| @@ -0,0 +1,39 @@ | ||
1 | +## Dell XPS 14 / XPS 16 (2026) internal speakers. | |
2 | +## | |
3 | +## Thirteen biquads and a lookahead limiter, applied as a PipeWire filter-chain | |
4 | +## in front of the internal speaker sink. The stock Linux path already loads | |
5 | +## Dell's Cirrus smart-amplifier firmware; this adds the perceptual voicing the | |
6 | +## Windows Waves layer provides and Linux does not. | |
7 | + | |
8 | +description="Dell XPS 14/16 (2026) speakers" | |
9 | +## Matched on the DMI product SKU, which is what Dell keys the Cirrus speaker | |
10 | +## firmware on -- 10280db9 for the XPS 14 and 10280dba for the XPS 16 -- so it | |
11 | +## identifies the speaker hardware itself rather than a marketing name. Compared as | |
12 | +## whole values, so this cannot widen to the rest of the XPS line. | |
13 | +## | |
14 | +## 0DB9 XPS 14 -- measured here, see below | |
15 | +## 0DBA XPS 16 -- included on report that this profile suits it, not measured | |
16 | +match_sku=("0DB9" "0DBA") | |
17 | +## Unescaped dots: this is passed to awk as a string, where a backslash escape | |
18 | +## would be consumed before the regex sees it. | |
19 | +sink_pattern='^alsa_output.*sof_sdw.*HiFi__Speaker__sink$' | |
20 | + | |
21 | +## Provenance. Derived by measuring the response of the xps-clone EasyEffects | |
22 | +## profile from https://github.com/spencerbull/xps-audio-linux (MIT) and fitting | |
23 | +## a biquad chain to it. No upstream asset is redistributed: the convolution | |
24 | +## impulse response is not carried, so this tuning has no binary blob and is | |
25 | +## sample-rate agnostic. | |
26 | +derived_from="xps-audio-linux xps-clone (MIT, spencerbull)" | |
27 | +validated_by="dhh" | |
28 | +validated_on="2026-07-24" | |
29 | +## The measurements below were taken on the XPS 14 (0DB9). The XPS 16 (0DBA) is | |
30 | +## covered on report rather than measurement; re-measure there before treating | |
31 | +## these figures as describing it. | |
32 | +validated_hardware="XPS 14 DA14260 (0DB9)" | |
33 | + | |
34 | +## Measured against that reference under a dense pink-weighted multitone of 104 | |
35 | +## bin-aligned tones. See docs/audio-tuning.md for how to reproduce these. | |
36 | +magnitude_rms_db="1.24" | |
37 | +bass_group_delay_swing_ms="13.2" | |
38 | +limiter_headroom_db="1.6" ## worst-case peak on a hot master vs -1 dBFS | |
39 | +dynamic_range_delta_lu="0.1" | |
0 | 40 | |
βΌdefault/chromium/extensions/copy-url/background-4.js
+23-0
| @@ -0,0 +1,23 @@ | ||
1 | +// Keep this filename versioned. Chromium caches service workers for extensions | |
2 | +// loaded via --load-extension, so a new URL forces registration of new code. | |
3 | + | |
4 | +function copyUrl(url) { | |
5 | + if (!url) return; | |
6 | + | |
7 | + // The native host owns both the Wayland clipboard and confirmation toast. | |
8 | + chrome.runtime.sendNativeMessage('com.omarchy.copy_url', { url }, () => { | |
9 | + void chrome.runtime.lastError; | |
10 | + }); | |
11 | +} | |
12 | + | |
13 | +chrome.commands.onCommand.addListener((command) => { | |
14 | + if (command !== 'copy-url') return; | |
15 | + | |
16 | + chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { | |
17 | + copyUrl(tabs[0] && tabs[0].url); | |
18 | + }); | |
19 | +}); | |
20 | + | |
21 | +chrome.action.onClicked.addListener((tab) => { | |
22 | + copyUrl(tab && tab.url); | |
23 | +}); | |
0 | 24 | |
βΌdefault/chromium/extensions/copy-url/icon.png
+1-0
| @@ -0,0 +1 @@ | ||
1 | +../../../../icon.png | |
0 | 2 | |
βΌdefault/chromium/extensions/copy-url/manifest.json
+21-0
| @@ -0,0 +1,21 @@ | ||
1 | +{ | |
2 | + "manifest_version": 3, | |
3 | + "name": "Copy URL", | |
4 | + "version": "1.5", | |
5 | + "description": "Copy current URL to clipboard, this extension is installed by Omarchy", | |
6 | + "action": { "default_title": "Copy URL" }, | |
7 | + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxbOMKgGcG20uelP6lx5OnuafGP9gNR1ajzURuQ45tv/Is5sc1tn9ii9PsKxpzDzPL9Z5lAqrTFgEcKHyTJnZXAGOMIruB0odJ0BW6eoQ3rxaQ/fBK2yGN7FZAfygPOWHj+Fdrh2eYQ7Ap92Dmlz8x0ceGyais415KmeevVcPwS7jjHFd1bGBp17cEMOBQcOx/3zCnko1hGtCzSdyZQl3cNMebW/FGvmxlPUMLVfWhysfFUuzxMRRf58+/j0mo/9iKQ0uTuxbQ8+W64OmYOVR87IXYNgbo+hEtORjiQhVg1KzaBx1bZ6clQMv96W/xYy1cIzUA5yI9y7lNr7n9zKijwIDAQAB", | |
8 | + "permissions": ["activeTab", "nativeMessaging"], | |
9 | + "icons": { | |
10 | + "16": "icon.png", | |
11 | + "48": "icon.png", | |
12 | + "128": "icon.png" | |
13 | + }, | |
14 | + "commands": { | |
15 | + "copy-url": { | |
16 | + "suggested_key": {"default": "Alt+Shift+L"}, | |
17 | + "description": "Copy URL" | |
18 | + } | |
19 | + }, | |
20 | + "background": {"service_worker": "background-4.js"} | |
21 | +} | |
0 | 22 | |
βΌdefault/chromium/extensions/whatsapp-slim/manifest.json
+21-0
| @@ -0,0 +1,21 @@ | ||
1 | +{ | |
2 | + "manifest_version": 3, | |
3 | + "name": "WhatsApp Slim", | |
4 | + "version": "1.1", | |
5 | + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAszLhFYxjvKqx1VAORt3M6b0H1Kz03cmQ1MrUjJZ8gj3nhRcvufk6PS17yUIjEdKKmuj+1HuFVwOaHJQsACGJXwn2TeKQqZmZx/83yd7ydgabHXTsJbhy5O+Yunv+VA1B2IX/phcXpkH9bPv2PuC/bQ13nmmAvT2b+EMyq8EPQHOoSWhE4M4kIhLDczTmxfJX5X3tTxH66952DYuQWvGpIXLAUXkvIgap0qemW68/LymPaWzcg6g3oE/nZ7C0j7JE5bnqLFxqXNlA9Jt+Ss/1Y33QL3OSD9EEsrpgueS0bbqtkmFQ9/jGlruIL+qj0xe+CAtqbJ5ty9H/sqi01kjfyQIDAQAB", | |
6 | + "description": "Make WhatsApp Web follow the system theme and collapse its chat list in narrow windows, this extension is installed by Omarchy", | |
7 | + "content_scripts": [ | |
8 | + { | |
9 | + "matches": [ | |
10 | + "https://web.whatsapp.com/*" | |
11 | + ], | |
12 | + "css": [ | |
13 | + "whatsapp.css" | |
14 | + ], | |
15 | + "js": [ | |
16 | + "system-theme.js" | |
17 | + ], | |
18 | + "run_at": "document_start" | |
19 | + } | |
20 | + ] | |
21 | +} | |
0 | 22 | |
βΌdefault/chromium/extensions/whatsapp-slim/system-theme.js
+4-0
| @@ -0,0 +1,4 @@ | ||
1 | +if (localStorage.getItem("system-theme-mode") !== "true") { | |
2 | + localStorage.setItem("system-theme-mode", "true"); | |
3 | + location.reload(); | |
4 | +} | |
0 | 5 | |
βΌdefault/chromium/extensions/whatsapp-slim/whatsapp.css
+64-0
| @@ -0,0 +1,64 @@ | ||
1 | +/* Collapse WhatsApp Web's chat list to a Signal-style avatar rail when the | |
2 | + * window is too narrow to show both the full list and the conversation. | |
3 | + * Leans on WhatsApp's stable structural ids (#side, #main, #pane-side) and | |
4 | + * data-testid hooks rather than its obfuscated, frequently-churning class | |
5 | + * names. */ | |
6 | + | |
7 | +@media (max-width: 1100px) { | |
8 | + /* The chat-list column (title header + #side) becomes an avatar rail */ | |
9 | + div:has(> div#side) { | |
10 | + flex: 0 0 90px !important; | |
11 | + min-width: 90px !important; | |
12 | + max-width: 90px !important; | |
13 | + } | |
14 | + | |
15 | + /* Chat-list title bar, search, filter chips, and banner don't fit. | |
16 | + * Scoped to the column wrapper: the left icon nav rail confusingly | |
17 | + * shares the same chatlist-header testid and must survive. */ | |
18 | + div:has(> div#side) > header, | |
19 | + #side > div:first-child, | |
20 | + #side [role="tablist"], | |
21 | + #side span[data-testid="chat-butterbar"] { | |
22 | + display: none !important; | |
23 | + } | |
24 | + | |
25 | + /* The rail doesn't need a visible scrollbar, and horizontal overflow | |
26 | + * from the collapsed rows must not wiggle */ | |
27 | + #pane-side { | |
28 | + overflow-x: hidden !important; | |
29 | + scrollbar-width: none !important; | |
30 | + } | |
31 | + | |
32 | + /* Chat rows: keep the avatar column, collapse the text/preview columns | |
33 | + * without display:none so the unread badge can be resurrected */ | |
34 | + [data-testid="cell-frame-container"] { | |
35 | + position: relative !important; | |
36 | + } | |
37 | + | |
38 | + [data-testid="cell-frame-container"] > div:not(:first-child) { | |
39 | + visibility: hidden !important; | |
40 | + width: 0 !important; | |
41 | + min-width: 0 !important; | |
42 | + overflow: hidden !important; | |
43 | + } | |
44 | + | |
45 | + /* Float the unread badge over the avatar's top-right corner */ | |
46 | + [data-testid="cell-frame-container"] span[aria-label*="unread"] { | |
47 | + visibility: visible !important; | |
48 | + position: absolute !important; | |
49 | + top: 2px !important; | |
50 | + left: 50px !important; | |
51 | + } | |
52 | + | |
53 | + /* The empty drawer overlay keeps the stock chat-list width, which | |
54 | + * strands its divider border in the middle of the conversation */ | |
55 | + [data-testid="drawer-middle"] { | |
56 | + border-left: none !important; | |
57 | + } | |
58 | + | |
59 | + /* Let the app shrink below WhatsApp's default minimum width */ | |
60 | + #app, | |
61 | + #app .two { | |
62 | + min-width: 0 !important; | |
63 | + } | |
64 | +} | |
0 | 65 | |
βΌdefault/chromium/extensions/yt-dlp/background.js
+41-0
| @@ -0,0 +1,41 @@ | ||
1 | +function sendUrl(url) { | |
2 | + if (!url || !/^https?:/i.test(url)) return; | |
3 | + | |
4 | + // The native messaging host runs yt-dlp and owns all the desktop | |
5 | + // notifications, so we just hand off the URL and ignore the reply. | |
6 | + chrome.runtime.sendNativeMessage('com.omarchy.ytdlp', { url }, () => { | |
7 | + void chrome.runtime.lastError; | |
8 | + }); | |
9 | +} | |
10 | + | |
11 | +function triggerDownload(tab) { | |
12 | + if (!tab) return; | |
13 | + | |
14 | + // The activeTab permission exposes tab.url whenever the user invokes the | |
15 | + // extension β both via the toolbar click and the keyboard shortcut. | |
16 | + if (tab.url) { | |
17 | + sendUrl(tab.url); | |
18 | + return; | |
19 | + } | |
20 | + | |
21 | + // Fallback: read the URL straight from the page. | |
22 | + if (tab.id === undefined) return; | |
23 | + chrome.scripting | |
24 | + .executeScript({ target: { tabId: tab.id }, func: () => location.href }) | |
25 | + .then((results) => sendUrl(results && results[0] && results[0].result)) | |
26 | + .catch(() => {}); | |
27 | +} | |
28 | + | |
29 | +// Keyboard shortcut (Alt+Shift+D). | |
30 | +chrome.commands.onCommand.addListener((command) => { | |
31 | + if (command === 'download-video') { | |
32 | + chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { | |
33 | + triggerDownload(tabs[0]); | |
34 | + }); | |
35 | + } | |
36 | +}); | |
37 | + | |
38 | +// Clicking the extension's toolbar icon. | |
39 | +chrome.action.onClicked.addListener((tab) => { | |
40 | + triggerDownload(tab); | |
41 | +}); | |
0 | 42 | |
βΌdefault/chromium/extensions/yt-dlp/download-video.svg
+1-0
| @@ -0,0 +1 @@ | ||
1 | +<svg xmlns="http://www.w3.org/2000/svg" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 512 468.553"><path fill-rule="nonzero" d="M97.632 0h316.736c26.861 0 51.272 10.989 68.953 28.673C501.017 46.363 512 70.787 512 97.632v273.293c0 26.841-10.995 51.255-28.682 68.945-17.691 17.691-42.112 28.683-68.95 28.683H97.632c-26.845 0-51.269-10.986-68.959-28.676C10.989 422.193 0 397.785 0 370.925V97.632c0-26.867 10.983-51.281 28.667-68.965C46.351 10.983 70.765 0 97.632 0zm140.509 314.599l-3.333-105.58 36.408-1.151 3.276 103.999 42.188-43.498 26.112 25.404-87.819 90.577-85.765-88.532 26.125-25.404 42.808 44.188v-.003zM28.619 122.962H88.37l36.214-92.199c.286-.726.62-1.441.999-2.144H97.632c-18.963 0-36.218 7.77-48.731 20.282-12.512 12.513-20.282 29.768-20.282 48.731v25.33zm122.084-94.343l-37.057 94.343h108.69l36.129-91.983c.315-.798.687-1.587 1.116-2.36H150.703zm133.744 0l-37.054 94.343h105.793l36.215-92.199c.286-.726.62-1.441.998-2.144H284.447zm131.067.009l-37.051 94.334h104.918v-25.33c0-18.947-7.776-36.205-20.295-48.724-12.258-12.261-29.068-19.974-47.572-20.28zm67.867 122.947H28.619v219.35c0 18.956 7.776 36.204 20.289 48.717 12.519 12.518 29.777 20.292 48.724 20.292h316.736c18.941 0 36.196-7.78 48.715-20.299 12.518-12.518 20.298-29.773 20.298-48.71v-219.35z"/></svg> | |
0 | 2 | |
βΌdefault/chromium/extensions/yt-dlp/icon.png
+0-0
Binary file not shown.
βΌdefault/chromium/extensions/yt-dlp/manifest.json
+23-0
| @@ -0,0 +1,23 @@ | ||
1 | +{ | |
2 | + "manifest_version": 3, | |
3 | + "name": "Download Video", | |
4 | + "version": "1.0", | |
5 | + "description": "Download the current page's video, this extension is installed by Omarchy", | |
6 | + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4fww2jejSazrS0dpOBYyx8IfWRkRmek213PnIOaqzAuLK1jE1T+rR+SqBaKnC9j311O6sGrQ+MZJHotJfZyXoKBvSlfiay2z3NU0+Qv1Xa2VaRDuFoHzpfc4OcPvN1B/dGutLCxcLjvSBWEomGVSV1RpK+fgcOeJPFOjKLVrajedv9RnV3JE/Mz3VqBIpkzCUBtsM2eEpZZYWOWuyyk+h6RlbGkHXwudzizf7uJ7bA6RzZKF92wqnbgKDvGji0TwolzAJKALFTul44JzYNiU3Cy7FJXv/aXAKXwAf1VOXXMKie6udXv/M0E1vZAIWHv1sGhkxZZFxZ3C33svlXfg7wIDAQAB", | |
7 | + "permissions": ["activeTab", "scripting", "nativeMessaging"], | |
8 | + "icons": { | |
9 | + "16": "icon.png", | |
10 | + "48": "icon.png", | |
11 | + "128": "icon.png" | |
12 | + }, | |
13 | + "action": { | |
14 | + "default_title": "Download Video" | |
15 | + }, | |
16 | + "commands": { | |
17 | + "download-video": { | |
18 | + "suggested_key": {"default": "Alt+Shift+D"}, | |
19 | + "description": "Download Video" | |
20 | + } | |
21 | + }, | |
22 | + "background": {"service_worker": "background.js"} | |
23 | +} | |
0 | 24 | |
βΌdefault/chromium/native-messaging-hosts/com.omarchy.copy_url.json
+9-0
| @@ -0,0 +1,9 @@ | ||
1 | +{ | |
2 | + "name": "com.omarchy.copy_url", | |
3 | + "description": "Omarchy Copy URL clipboard host", | |
4 | + "path": "__HOST_PATH__", | |
5 | + "type": "stdio", | |
6 | + "allowed_origins": [ | |
7 | + "chrome-extension://bgpiichlckmfanooecilcjemknkcpngb/" | |
8 | + ] | |
9 | +} | |
0 | 10 | |
βΌdefault/chromium/native-messaging-hosts/com.omarchy.ytdlp.json
+9-0
| @@ -0,0 +1,9 @@ | ||
1 | +{ | |
2 | + "name": "com.omarchy.ytdlp", | |
3 | + "description": "Omarchy yt-dlp download host", | |
4 | + "path": "__HOST_PATH__", | |
5 | + "type": "stdio", | |
6 | + "allowed_origins": [ | |
7 | + "chrome-extension://dedjgknigfeelejglamclffonmophnfl/" | |
8 | + ] | |
9 | +} | |
0 | 10 | |
βΌdefault/foot/screensaver.ini
+7-0
| @@ -0,0 +1,7 @@ | ||
1 | +[main] | |
2 | +font=JetBrainsMono Nerd Font:size=18 | |
3 | +pad=0x0 | |
4 | + | |
5 | +[colors-dark] | |
6 | +background=000000 | |
7 | +foreground=ffffff | |
0 | 8 | |
βΌdefault/ghostty/screensaver
+3-0
| @@ -0,0 +1,3 @@ | ||
1 | +window-padding-x = 0 | |
2 | +window-padding-y = 0 | |
3 | +window-padding-color = "extend-always" | |
0 | 4 | |
βΌdefault/tensaku/state.toml
+1-0
| @@ -0,0 +1 @@ | ||
1 | +annotation-size-factor = 2.0 | |
0 | 2 | |
βΌdefault/voxtype/config.toml
+100-0
| @@ -0,0 +1,100 @@ | ||
1 | +# Voxtype Configuration | |
2 | +# | |
3 | +# Location: ~/.config/voxtype/config.toml | |
4 | +# All settings can be overridden via CLI flags | |
5 | +# | |
6 | +# State file for external integrations (Waybar, polybar, etc.) | |
7 | +# Use "auto" for default location ($XDG_RUNTIME_DIR/voxtype/state), | |
8 | +# a custom path, or "disabled" to turn off. The daemon writes state | |
9 | +# ("idle", "recording", "transcribing") to this file whenever it changes. | |
10 | +# Required for `voxtype record toggle` and `voxtype status` commands. | |
11 | +state_file = "auto" | |
12 | + | |
13 | +[hotkey] | |
14 | +# Hotkey is configured in Hyprland. Default is Super + Ctrl + X | |
15 | +enabled = false | |
16 | + | |
17 | +[audio] | |
18 | +# Audio input device ("default" uses system default) | |
19 | +# List devices with: pactl list sources short | |
20 | +device = "default" | |
21 | + | |
22 | +# Sample rate in Hz (whisper expects 16000) | |
23 | +sample_rate = 16000 | |
24 | + | |
25 | +# Maximum recording duration in seconds (safety limit) | |
26 | +max_duration_secs = 60 | |
27 | + | |
28 | +# Pause MPRIS media players during recording | |
29 | +pause_media = true | |
30 | + | |
31 | +# [audio.feedback] | |
32 | +# Enable audio feedback sounds (beeps when recording starts/stops) | |
33 | +# enabled = true | |
34 | +# | |
35 | +# Sound theme: "default", "subtle", "mechanical", or path to custom theme directory | |
36 | +# theme = "default" | |
37 | +# | |
38 | +# Volume level (0.0 to 1.0) | |
39 | +# volume = 0.7 | |
40 | + | |
41 | +[whisper] | |
42 | +# Model to use for transcription | |
43 | +# Options: tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v3, large-v3-turbo | |
44 | +# .en models are English-only but faster and more accurate for English | |
45 | +# large-v3-turbo is faster than large-v3 with minimal accuracy loss (recommended for GPU) | |
46 | +# Or provide absolute path to a custom .bin model file | |
47 | +model = "base.en" | |
48 | + | |
49 | +# Language for transcription | |
50 | +# Use "en" for English, "auto" for auto-detection | |
51 | +# See: https://github.com/openai/whisper#available-models-and-languages | |
52 | +language = "en" | |
53 | + | |
54 | +# Translate non-English speech to English | |
55 | +translate = false | |
56 | + | |
57 | +# Number of CPU threads for inference (omit for auto-detection) | |
58 | +# threads = 4 | |
59 | + | |
60 | +[output] | |
61 | +# Primary output mode: "type" or "clipboard" | |
62 | +# - type: Simulates keyboard input at cursor position (requires ydotool) | |
63 | +# - clipboard: Copies text to clipboard (requires wl-copy) | |
64 | +mode = "type" | |
65 | + | |
66 | +# Fall back to clipboard if typing fails | |
67 | +fallback_to_clipboard = true | |
68 | + | |
69 | +# Delay between typed characters in milliseconds | |
70 | +# 0 = fastest possible, increase if characters are dropped | |
71 | +type_delay_ms = 1 | |
72 | + | |
73 | +# Post-processing command (optional) | |
74 | +# Pipe transcribed text through an external command for cleanup before output. | |
75 | +# The command receives text on stdin and outputs processed text on stdout. | |
76 | +# Useful for LLM-based text cleanup, grammar correction, filler word removal. | |
77 | +# On any failure (timeout, error), falls back to original transcription. | |
78 | +# | |
79 | +# [output.post_process] | |
80 | +# command = "ollama run llama3.2:1b 'Clean up this dictation. Fix grammar, remove filler words. Output only the cleaned text:'" | |
81 | +# timeout_ms = 30000 # 30 second timeout (generous for LLM) | |
82 | + | |
83 | +[output.notification] | |
84 | +# Show notification when recording starts (hotkey pressed) | |
85 | +on_recording_start = false | |
86 | + | |
87 | +# Show notification when recording stops (transcription beginning) | |
88 | +on_recording_stop = false | |
89 | + | |
90 | +# Show notification with transcribed text after transcription completes | |
91 | +on_transcription = false | |
92 | + | |
93 | +# [text] | |
94 | +# Text processing options (word replacements, spoken punctuation) | |
95 | +# | |
96 | +# Enable spoken punctuation conversion (e.g., say "period" to get ".") | |
97 | +# spoken_punctuation = false | |
98 | +# | |
99 | +# Custom word replacements (case-insensitive) | |
100 | +# replacements = { "hyperwhisper" = "hyprwhspr" } | |
0 | 101 | |
βΌdefault/xcompose
+29-0
| @@ -0,0 +1,29 @@ | ||
1 | +include "%L" | |
2 | + | |
3 | +# Emoji | |
4 | +<Multi_key> <m> <s> : "π" # smile | |
5 | +<Multi_key> <m> <c> : "π" # cry | |
6 | +<Multi_key> <m> <l> : "π" # love | |
7 | +<Multi_key> <m> <v> : "βοΈ" # victory | |
8 | +<Multi_key> <m> <h> : "β€οΈ" # heart | |
9 | +<Multi_key> <m> <y> : "π" # yes | |
10 | +<Multi_key> <m> <n> : "π" # no | |
11 | +<Multi_key> <m> <f> : "π" # fuck | |
12 | +<Multi_key> <m> <w> : "π€" # wish | |
13 | +<Multi_key> <m> <r> : "π€" # rock | |
14 | +<Multi_key> <m> <k> : "π" # kiss | |
15 | +<Multi_key> <m> <e> : "π" # eyeroll | |
16 | +<Multi_key> <m> <d> : "π€€" # droll | |
17 | +<Multi_key> <m> <m> : "π°" # money | |
18 | +<Multi_key> <m> <x> : "π" # xellebrate | |
19 | +<Multi_key> <m> <1> : "π―" # 100% | |
20 | +<Multi_key> <m> <t> : "π₯" # toast | |
21 | +<Multi_key> <m> <p> : "π" # pray | |
22 | +<Multi_key> <m> <i> : "π" # wink | |
23 | +<Multi_key> <m> <o> : "π" # OK | |
24 | +<Multi_key> <m> <g> : "π" # greeting | |
25 | +<Multi_key> <m> <a> : "πͺ" # arm | |
26 | +<Multi_key> <m> <b> : "π€―" # blowing | |
27 | + | |
28 | +# Typography | |
29 | +<Multi_key> <space> <space> : "β" | |
0 | 30 | |
βΌdefault/xdg-terminal-exec/hyprland-xdg-terminals.list
+3-0
| @@ -0,0 +1,3 @@ | ||
1 | +# Terminal emulator preference order for xdg-terminal-exec | |
2 | +# The first found and valid terminal will be used | |
3 | +foot.desktop | |
0 | 4 | |
βΌicon.txt
+26-0
| @@ -0,0 +1,26 @@ | ||
1 | +ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
2 | +ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
3 | +ββββ ββββ ββββ | |
4 | +ββββ ββββ ββββ | |
5 | +ββββ βββββββββββββββββββββ ββββββββ ββββ | |
6 | +ββββ βββββββββββββββββββββ ββββββββ ββββ | |
7 | +ββββ ββββ ββββ ββββ | |
8 | +ββββ ββββ ββββ ββββ | |
9 | +ββββ ββββ ββββ ββββ | |
10 | +ββββ ββββ ββββ ββββ | |
11 | +ββββ ββββ ββββ ββββ | |
12 | +ββββ ββββ ββββ ββββ | |
13 | +ββββββββββββ ββββ ββββ | |
14 | +ββββββββββββ ββββ ββββ | |
15 | +ββββ ββββ ββββ ββββ | |
16 | +ββββ ββββ ββββ ββββ | |
17 | +ββββ ββββ ββββ ββββ | |
18 | +ββββ ββββ ββββ ββββ | |
19 | +ββββ ββββ ββββ ββββ | |
20 | +ββββ ββββ ββββ ββββ | |
21 | +ββββ ββββββββββββββββββββββββββββββββββββββ ββββ | |
22 | +ββββ ββββββββββββββββββββββββββββββββββββββ ββββ | |
23 | +ββββ ββββ ββββ | |
24 | +ββββ ββββ ββββ | |
25 | +βββββββββββββββββββββββββββββ ββββββββββββββββββββ | |
26 | +βββββββββββββββββββββββββββββ ββββββββββββββββββββ | |
0 | 27 | |
βΌlogo.txt
+10-0
| @@ -0,0 +1,10 @@ | ||
1 | + βββ | |
2 | + βββββββ βββββββββββββ ββββββββ ββββββββ ββββββββ ββ ββ ββ ββ | |
3 | +βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ | |
4 | +βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ ββ βββ βββ βββ βββ | |
5 | +βββ βββ βββ βββ βββ ββββββββββ ββββββββββ βββ βββββββββββ βββββββββ | |
6 | +βββ βββ βββ βββ βββ ββββββββββ ββββββββ βββ βββββββββββ βββββββββ | |
7 | +βββ βββ βββ βββ βββ βββ βββ ββββββββββ βββ ββ βββ βββ βββ βββ | |
8 | +βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ βββ β ββ βββ βββ βββ | |
9 | + βββββββ ββ βββ ββ βββ ββ βββ βββ ββββββββ βββ ββ βββββββ | |
10 | + βββ ββ | |
0 | 11 | |