If it is not run as a sub-shell, using open and then subsequently closing the app will pollute the existing terminal with messages like:
[1] 287915
[1]+ Done xdg-open "$@" > /dev/null 2>&1
Making it a subshell removes this noise and keeps it more like the open command in macOS.
* Add missing icons to Development remove menus
The Install > Development menu shows icons for each language, but the
Remove > Development menu was missing them (only Ruby on Rails had its
icon). This adds the matching icons to:
- show_remove_development_menu
- show_remove_javascript_menu
- show_remove_php_menu
- show_remove_elixir_menu
---------
Co-authored-by: incpo <nixusnekit>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
* Toggle hybrid GPU mode via supergfxctl
Very useful for Asus G14 and other laptops with NVIDIA + AMD iGPU
combos.
* Use correct exit
* Simplify
* Wording
* Revise switching process
* Spacing
* These are sudo actions
* Make it exe
* No need for extensions
Matches existing style
* Relying on the new config should be enough since we are restarting anyway
* Prevent race condition
* Reminder to add to OPR
- Add --webcam-device argument to omarchy-cmd-screenrecord
- Auto-detect first available webcam if none specified
- Add webcam selection UI in omarchy-menu when multiple cameras available
- Skip selection UI when only one webcam is detected
The current 5-second sleep is not enough for all hardware. On my PC (and
likely many others), Windows takes longer to initialize. If the script
tries to connect via RDP before Windows is fully ready, the connection
fails or hangs.
I replaced the fixed sleep with a dynamic loop that checks the Docker
logs for the "Windows started successfully" message. This ensures the
RDP client only starts once Windows has confirmed it's ready, making the
launch process much more reliable across different hardware specs.
Fixes#2599
* Replace yq with pure bash for TOML parsing
The yq-based parsing only worked with jq/yq v3 and broke with go-yq v4.
This change removes the yq and uses bash for parsing. Some additional improvments:
- Handles single and double quoted values
- Strips inline comments (e.g. "#hex" #comment)
* Remove the no-longer-needed yq packages
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
The sed expression for converting scrolltouchpad syntax to Hyprland 0.53
format was broken across two lines, causing the second substitution
pattern to fail silently. Split into separate sed commands to ensure
both class:(pattern) and class:pattern formats are migrated correctly.
Redirect hyprctl output in exit_screensaver() to prevent SIGABRT crash
when the screensaver window is closed externally (via keybind or lock screen).
The crash occurs because hyprctl's std::println() throws when writing to
a broken stdout after the terminal is killed.
Voxtype v0.4.9 adds a --no-post-install flag that suppresses the
"Next steps" instructions after downloading the model. Since Omarchy
handles systemd setup, hotkey configuration, and displays its own
success notification, these generic instructions are redundant and
potentially confusing to users.
The flag still shows download progress, just suppresses the
post-download instructions.
* Add option to enable/disable hibernation
* Actually do it
* Match hibernation toggle words
* Both enable and disable
* Match the tense
* Match options
* Remove excess CR
* Try with voxtype
* Update delay to prevent skipped characters
* Add removal of voxtype
* Use -bin package
* Fix for yay
* Nerdicons!
* Use new, subtle nerdfont glyphs instead of standard icons
* Do this in the waybar config instead
* Make voxtype a permanent fixture so it is not lost on waybar resets
* Record purpose
* Add Dictation hotkeys
* Tweak wording and point to config
* Reuse the same help
* Better communication
* Anticipate moving the package to OPR
* Clarify where the packages are coming from
* input group not needed when using hyprland hotkey
* Explain hotkey off
* Allow for changing of the model on right click
* Allow config on right click
* Be more specific
* Focus on config editing with waybar clicks
---------
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
* Attempt to templaterize the theme specific files
* Cleanup
* Slim down
* Combine render into -set
* Pull out the dynamic template rendering again, but simpler
* Fix vars
* Variables are lowercase
* Better presentation
* Fix missing colors
* Provide stripped values too
* Fix colors for regular hex format
* Bring back explicit btop themes
They're too involved to derive from a basic color set
* Make an atomic swap of the theme directories
* No longer used by walker to cancel
* Explain why
* Remove redundant const
* Consistent const naming
* No longe have $THEMES_DIR
* Correct the blue
* Set opencode colors too
* Fix colors for readability
* Move the templates together with the others in default
* Split user themes and default themes
* Fix paths
* Look for both user themes and default themes
Plus speed things up
* Migrate to the new setup where default themes live inside omarchy
* Explicitly store the name of the current theme
* Cleanup
* No longer need omarchy-theme-next since themes are now fully rendered, not symlinks
* Get current theme name from the new theme.name file
* Look for user background images in dedicated directory
* Need yq for toml
* Need yq to parse colors.toml
* Look for backgrounds matching the new theme.name
We no longer have symlinks
* Migrate existing user backgrounds to the new proper location
* Install user backgrounds in the correct path
* Fix quoting
* Just rely on the system theme for opencode and get ready for USRSIG2 being available to live reload
* Fix template generation for rgb colors
* Add github-copilot-cli to the AI install menu
* Mark the copilot package as coming from AUR
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* fix: stop paging git diff output when running omarchy-update
* Keep option list similar between the two
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Also, move waybar-less information notifications to Super + Ctrl + Alt +
T/B to make room. These are very specialized and probably not broadly
used.
Closes#3909
Co-authored-by: @ddVital
This was done in a migration in 0588cc8e5b but the menu entry was never updated. So, installs after the migration will get the outdated version.
Added a new migration as well for those that installed after the
previous one.
Screensaver launch is broken when Walker is open: It will fail to go fullscreen and exits right after input read's first iteration, due to the screensaver_in_focus() check. See https://github.com/basecamp/omarchy/issues/2992 for an example report.
This addition will silently quit an opened Walker menu before launching the screensaver terminal. It is mildly intrusive, alas, as a return from screensaver will not present the pre-screensaver state exactly.
The following options are no longer recognized by Kitty and caused warnings during startup:
window_padding_height
show_window_resize_notification
single_instance
They have been removed to keep the configuration compatible with current Kitty versions.
Updated the `omarchy-cmd-screensaver` script to allow screensaver effects to run independently on each monitor in multi-display configurations.
Previously, the effect loop waited for all animations on all monitors to finish before starting the next effect. With this change, each monitor handles its own effect cycle independently, improving smoothness and responsiveness in multi-monitor setups.
Turns out there are control codes for tracking mouse actions in xterm-compatible terminal emulators (mind blown).
This patch adds mouse action awareness to our beloved screensaver setup:
- on setup it sends the respective control codes for movement and click detection
- in the main loop it opens up the input reader to read raw bytes and, thus, enable to detect even so much as a mouse's squeak
Personally, I love swiping my trackpad to exit screensaver. But the explicit pressing-a-key to exit is nice, also.
And I don't know if many people have jitter issues with their mouses or trackpads. Reckon, if they had they wouldn't get to see the glory that TTE is anyway, ever :)
This is tested and working in Ghostty. Sorry for the low-effort testing.
* feat: silently move active window to target workspace
Adds a quality-of-life keybind:
SUPER + ALT + SHIFT + [1-9, 0]
This silently moves the active window from the active workspace to the
chosen destination workspace. The destination workspace re-tiles
correctly upon receiving the window.
The currently active workspace remains active, and the moved window
retains focus throughout the operation (no workspace switch, no
animation, no extra UI noise).
Why:
- Provides fast, silent window reshuffling during multitasking.
- Avoids disruptive workspace switching.
- Matches Omarchy’s focus on efficient Hyprland ergonomics.
- Keeps the user anchored to their current workflow while reorganizing.
Testing:
1. Open multiple windows across several workspaces.
2. Focus a window on the active workspace.
3. Press SUPER + ALT + [1–9, 0].
4. Verify the window appears on the target workspace and re-tiles.
5. Confirm the **source workspace stays active**.
6. Confirm **focus remains on the moved window**.
7. Repeat with multiple applications and workspace combinations.
* We've frozen this old tiling config
* Put on Super + Shift + Alt
This is an alternative version of an existing move
* Fix description
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Update version
* feat: show link to changelog in update confirm window
* Link to scrollable changelog
You may be updating more than one version at the time.
---------
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Exec=$TERMINAL the omarchy-tui-remove wont find newly created TUI-Apps. This fixes it and ensures backwards compability.
Co-authored-by: Gerrit Dolderer <gerrit.dolderer@hey.com>
* feat: fullscreen for ghostty/kitty screensaver
* feat: add ghostty screensaver config
* Remove the extra two bottom lines as well
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Use desktop portal capture option which allows capturing monitors
connected to external gpus (common on laptops with dedicated gpus)
and supports capturing properly when hdr is enabled.
Desktop portal capture allows selecting capture of a window, monitor
or screen region.
Add -fallback-cpu-encoding yes to use cpu encoding if the system
doesn't support gpu encoding. Ideally omarchy should install vaapi
drivers which would fix this issue for most users, but some users
have a gpu that dont support gpu encoding at all so this option is still
needed.
Use pgrep with ^ as is done in waybar indicator screen-recording.sh
to only grep for gpu-screen-recorder program.
Update omarchy-menu to reflect not selecting region/display capture
and instead allow capturing only desktop audio or desktop + microphone
audio.
Fixes#3367 and #3303
* Update style.css
Fixes the uneven spacing between icons on waybar by updating styling.css with Propo font family.
However, Propo introduces a small issue as the volume icons don't have the same with. As a consequence, icons left of volume will move based on the displayed volume icon. To solve this, I added a non-Propo font to the pipewire module as well - this way the volume icons have fixed length but eats a bit into the spacing towards the CPU icon. But I see this as the best trade-off.
* Update waybar config.jsonc
* Update tray spacing in waybar config
* Modify margins in style.css
Adjusted margins for various elements.
* Update waybar css for even spacing
* Update Waybar config tray spacing
* Change expand-icon format character
* Adjust margin-right for custom-expand-icon
* added optional argument for floating a window
* added sample comment
* Style
* This file isn't meant to be changed so not a good place for commented out recommendations
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Add theme Ethereal
* Update to follow the Omarchy hot reload
* Add aether to all themes
* Add a vscode theme
* Revert "Add aether to all themes"
This reverts commit 421f467e21.
* Format the kitty file
* Make available to all via migration
* Fix
* Add hot reload
* Change the background image to something of higher quality
This looks a lot better on a 6K monitor
* Highlight border color should be brighter than inactive color
* Add preview.png for new visual theme selector
* Add the ethereal nvim variant of aehter
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Add a new theme called hackerman
* Update to follow the Omarchy hot reload
* Add high res wallpapers
* Add an initial vscode color scheme
* Excess CR
* Set the colorscheme name to aether
* Change the nvim plugin name back to aether
* Add hot reload
* Use a variant of aether
* Swap the starting background
* Add migration
* Add preview.png
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Add bluetui integration and launch script
- Add omarchy-launch-bluetooth script to launch bluetui TUI
- Create migration scripts for bluetui installation
- Update omarchy-menu and waybar configuration for bluetui support
- Add bluetui to base packages
* Move unblock into launchers and reuse existing launch or focus setup
* Fix installer to remove blueberry and be more surgical with waybar changes
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Add optional xpadneo driver prompt to Steam installer
Prompts users during Steam installation to optionally install the xpadneo driver, which fixes common Xbox/Bluetooth controller issues including detection problems and missing rumble support.
* Install xpadneo controller driver by default
* Add idempotency checks and relaunch state
* Remove Steam launch since relaunch required
* Extract xbox controller installer into separate step
* Bring back launch
* Force reinstall
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* improve: uniquely identify btop when launched from waybar.
* align btop app id
* add migration to uniquely identify btop
* also add unique app ids to lazydocker and terminal editor
* introduce new omarchy-launch-tui that sets class.
* align all the tuis and behaviour in waybar
* update migration accordingly
* fixes
* separate terminal from tui
* fix: double setsid uswm-app --
* Standardize namespace on org.omarchy and lowercase
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Add new script for themes menu
* remove icons from the themes menu
* Make theme titles human readable and add spacing at the end
* Migrate to using a link for the new menu generator
* Retain consistent width
But we still do have movement when filtering the menu down to a
shorter-than-longest name. Should try to stabilize that.
* Update all previews to 2K resolution and same dimensions
* Update script to use first bg file if theme preview file doesn't exist
* Add padding to preview box instead of spaces to theme name
* Consistent formatting/indenting
* Prevent height jump
* Revert padding change and remove background color
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* hypr: Adding xdph token default of true
The `allow_token_by_default` configuration option under `screencopy` within
`xdg-dektop-portal-hyprland` (xdph) enables the "Allow restore token" checkbox
by default in the screen sharing section dialog. Enabling it to `true` ensures
the checkbox is pre-ticked, which can help avoid repeated selection prompts
during screen sharing sessions, such as those reported with Slack, Google Meet,
Zoom, etc. on Hyprland.
Signed-off-by: Larry Dewey <larry.j.dewey@gmail.com>
* Enable the XDPH config on existing installations
---------
Signed-off-by: Larry Dewey <larry.j.dewey@gmail.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
In basecamp@4c97a31, a migration was added to fix this option on
existing installs, but I think the default config was never updated with
the new option.
* Revert "improve: add image/video share and run share commands silently (#3330)"
This reverts commit 03cbbd2f7f.
* Refactor share menu to remove terminal command
* Fix: Jetbrains popup dialog would not get focus automatically
The config shipped with omarchy misbehaves with popups. Opening a popup
would not shift the focus automatically to it, requiring manual click on
it to start typing into it.
You can reproduce with by trying to open any popup dialog (for example
CTRL+T on Rider, or CTRL+SHIFT+F)
This config with `-Dawt.toolkit.name=WLToolkit` in the custom VM options
fixes all the issues I have with jetbrains. I am also making a dedicated
workspace which float all windows just for jetbrains.
* Use existing formatting conventions
* More tweaks
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* improve: add image/video share and run share commands silently
- Added 'image' and 'video' modes to omarchy-cmd-share to quickly send
the most recent screenshot or video without selecting manually.
- Updated show_share_menu to run share commands in the background using
'nohup' to avoid opening a terminal window.
- Comments added to explain each section for clarity and maintainability.
* Match names with folders
* Correct here too
* Don't need to keep this around
* Fix these up for what's needed only
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
AAC provides better cross-platform compatibility compared to Opus when
using MP4 containers. While Opus is supported in MP4, compatibility
varies across different media players and platforms.
In testing, screen recordings with Opus codec sent to Windows users
played without audio in Windows Media Player, while recordings with
AAC codec worked immediately without issues. AAC ensures recordings
are playable out-of-the-box across all platforms without requiring
users to install additional codecs or use alternative media players.
This additional bind lets the user follow the default action of a notification with a keystroke in the same position `,` as the other notification binds.
Replace hardcoded --class flag with xdg-terminal-exec --app-id to properly
support kitty and other terminals. This aligns with the rest of the codebase
and ensures floating window rules work correctly across different terminals.
Solves the issue from ae10133b5e the right
way using the actual xdg-terminal-exec package and provides resillient
fallbacks no matter what the user might do.
This also removes the need to restart after changing terminals at all.
fixes#2198fixes#2329fixes#2673fixes#1754
Because of [hardcoded terminals in
glib](https://gitlab.gnome.org/GNOME/glib/-/blob/main/gio/gdesktopappinfo.c#L2755)
the previous fix still doesn't work well with Alacritty and Kitty.
Using our `omarchy-launch-terminal` aliased to `xdg-terminal-exec` does
the trick and doesn't introduce any new dependencies or rely on a lib
that isn't stable.
* Apply Omarchy theme; Install Neovim extension (automatically scoops up LazyVim config).
* Just set the Omarchy theme
Removed installation of Neovim extension from script.
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* fix(jetbrains.conf): allow focus for Android Studio’s first dialog by unsetting nofocus rules for empty-title windows
* Refactor window rules for JetBrains apps
Updated window rules for JetBrains applications to allow focus and interaction with dialogs.
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Ghostty will only use the last `shell-integration-features` line found
in the config, so multiple options need to be presented as a
comma-separated list. Including them on separate lines meant that only
the `ssh-env` option was getting set, causing the `no-cursor` option to
be ignored. This prevented the cursor from going into the `block` style.
Moving to symlink fixes the following issues:
- App removes from launchers if you uninstall Nvim
- Nvim launches in the correct terminal without invalid desktop entry
Symlink setup moved to omarchy-nvim-setup (Ref:
bb7a0f4c1f)
* Fix auto-generated everforest obsidian theme
* Update `--text-muted` and `--text-faint` to be readable against
background color
* Add contrast detection and color correction logic
* Remove dedicated Obsidian CSS file
* Add dedicated text color variables to obsidian theme generation
* Replace closest color logic with generated color for code bg in Obsidian
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* imv: add default Ctrl+P binding to print current image via CUPS
* Add imv config migration with backup
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
* Add bindings for scratchpad support
This is great for hiding windows temporarily and bringing them up when
needed in an overlay, I'm using it to hide away my webcam control in
meetings. ;)
* Change shortcut to move window to scratchpad
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Some applications (e.g. Aether) use xdg-desktop-portal-gtk to open folder chooser dialogs titled "Choose Export Directory" or similar. These were not matched by the previous floating-window regex, causing them to tile instead of float.
This change expands the title regex to include "Choose …" patterns, ensuring these dialogs float and center properly in Hyprland
Derives the list of required modules for the installer from Chris
McLeod's manual installation steps. His instructions say to use the
surface-linux kernel however the default kernel has the right set
of modules already (as noted by the fact that the right modules are
loaded for the keyboard to work during the install and after the LUKS
unlock screen).
I only have a Surface Laptop 3 to test this on but based on the guide
where Chris is using a newer laptop and the only difference is the
pinctrl module which I attempt to autodetect I think it should "just"
work for others but definitely "use at your own risk".
* New window replaces the current fullscreen or maximized window
Currently if we are in fullscreen or full-width mode and either
start a new application OR
create a new window of an existing application. Like an incognito window
Then those new windows/apps start in the background. There is no indication that something new has been created.
IMHO, if I am opening an application then I want to switch to it. I cannot think of any common use case for having new applications open in the background.
This change will cause new application to replace current application as the fullscreen / fullwidth window
Please see docs: https://wiki.hypr.land/Configuring/Variables/#misc
Option:
new_window_takes_over_fullscreen
Desc:
if there is a fullscreen or maximized window, decide whether a new tiled window opened should replace it, stay behind or disable the fullscreen/maximized state. 0 - behind, 1 - takes over, 2 - unfullscreen/unmaxize [0/1/2]
Type:
int
Default:
0
* fix the setting name
* fix(hyprland): match Brave portal dialogs in floating-window rule
Brave on Wayland uses xdg-desktop-portal-gtk for permission and file dialogs.
These windows use website-based titles (e.g. "chatgpt.com wants to open")
instead of "Open File" or "Save File", so they were not matched by the
floating-window rule. This commit expands the title regex to include those
patterns, ensuring Brave dialogs float properly.
* Shrink scope
---------
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Corrected a typo and fixed grammar in the comment regarding web app URLs. (changed hyperland to hyprland and fixed grammar in the same line)
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
adding /sound and /microphone to omarchy-windows-vm
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Turn a fresh Arch installation into a fully-configured, beautiful, and modern web development system based on Hyprland by running a single command. That's the one-line pitch for Omarchy (like it was for Omakub). No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omarchy is an opinionated take on what Linux can be at its best.
Omarchy is a beautiful, modern & opinionated Linux distribution by DHH.
Read more at [omarchy.org](https://omarchy.org).
## License
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
# Launch a floating terminal with the Omarchy logo presentation, then execute the command passed in, and finally end with the omarchy-show-done presentation.
# Overwrite the package configuration for /etc/pacman with the Omarchy default of using its dedicated mirrors and repositories, then update all packages.
# This is used after switching between Omarchy release channels to ensure the right packages for the right channel are available.
# Overwrite the user configs for swayosd (controls on-screen feedback for changing volume/songs etc) with the Omarchy defaults and restart the service.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.