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
β–Όdefault/agents/skills/diagnose-crash/SKILL.md
+97-0
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1
+../../../../icon.png
0
2
β–Όdefault/chromium/extensions/copy-url/manifest.json
+21-0
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
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
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
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
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
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
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
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
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
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
1
+window-padding-x = 0
2
+window-padding-y = 0
3
+window-padding-color = "extend-always"
0
4
β–Όdefault/tensaku/state.toml
+1-0
1
+annotation-size-factor = 2.0
0
2
β–Όdefault/voxtype/config.toml
+100-0
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
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
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
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
1
+ β–„β–„β–„
2
+ β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–„ β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–„ β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–„β–ˆ β–ˆβ–„ β–„β–ˆ β–ˆβ–„
3
+β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ
4
+β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–€ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ
5
+β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–„β–ˆβ–ˆβ–ˆβ–„β–„β–„β–ˆβ–ˆβ–ˆ β–„β–ˆβ–ˆβ–ˆβ–„β–„β–„β–ˆβ–ˆβ–€ β–ˆβ–ˆβ–ˆ β–„β–ˆβ–ˆβ–ˆβ–„β–„β–„β–ˆβ–ˆβ–ˆβ–„ β–ˆβ–ˆβ–ˆβ–„β–„β–„β–ˆβ–ˆβ–ˆ
6
+β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–€β–ˆβ–ˆβ–ˆβ–€β–€β–€β–ˆβ–ˆβ–ˆ β–€β–ˆβ–ˆβ–ˆβ–€β–€β–€β–€ β–ˆβ–ˆβ–ˆ β–€β–€β–ˆβ–ˆβ–ˆβ–€β–€β–€β–ˆβ–ˆβ–ˆ β–€β–€β–€β–€β–€β–€β–ˆβ–ˆβ–ˆ
7
+β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–„ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–„β–ˆβ–ˆ β–ˆβ–ˆβ–ˆ
8
+β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ
9
+ β–€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–€ β–€β–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–€ β–ˆβ–ˆβ–ˆ β–ˆβ–€ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–€ β–ˆβ–ˆβ–ˆ β–ˆβ–€ β–€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–€
10
+ β–ˆβ–ˆβ–ˆ β–ˆβ–€
0
11