Compare commits

...

32 Commits

Author SHA1 Message Date
Ryan Hughes
616f8abae3 Merge pull request #1869 from bdbch/enhancement/add-lutris-to-gaming-menu
Add missing icon to Lutris installation
2025-09-22 10:38:22 -04:00
bdbch
e336341ae1 Merge branch 'gaming-improvements' into enhancement/add-lutris-to-gaming-menu 2025-09-22 14:47:11 +03:00
bdbch
65230ffd55 Merge branch 'master' of github.com:bdbch/omarchy into enhancement/add-lutris-to-gaming-menu 2025-09-22 09:51:52 +02:00
bdbch
2a4c20df30 add missing nerdfont icon for lutris installation 2025-09-22 09:50:37 +02:00
Ryan Hughes
9b02c9f651 Fixes 2025-09-21 23:56:08 -04:00
Ryan Hughes
d3edcfc282 Add gamescope and proton-ge to the setup 2025-09-21 23:34:20 -04:00
Ryan Hughes
1a35c22de2 Create gaming confs 2025-09-21 23:06:18 -04:00
Ryan Hughes
0a2c106a41 Add gaming helper 2025-09-21 23:01:41 -04:00
Ryan Hughes
be6614b2b1 Use stable instead 2025-09-21 20:29:23 -04:00
Ryan Hughes
1124929173 Merge pull request #1843 from bdbch/enhancement/add-lutris-to-gaming-menu
Add Lutris to Gaming installation menu
2025-09-21 20:28:47 -04:00
David Heinemeier Hansson
c4d8ef6a15 Merge branch 'master' into dev 2025-09-21 07:57:07 -04:00
Kostas
2df8c5f7e0 Install libyaml before attempting to install ruby (#1835)
* Install libyaml before attempting to install ruby

* Use omarchy helper

And unsafe -Sy

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-09-21 07:56:56 -04:00
David Heinemeier Hansson
a820b72da9 Revert "Ensure libyaml is available for installs made before that was on the ISO"
This reverts commit ad01082a86.
2025-09-21 07:55:52 -04:00
David Heinemeier Hansson
39c27939f3 No longer used
Closes #1815
2025-09-21 07:51:04 -04:00
Ryan Hughes
0123cf7917 Merge pull request #1774 from John-Lin/patch-1
fix: ghostty config typos
2025-09-21 03:39:27 -04:00
bdbch
3f738fd57e Add Lutris to Gaming installation menu 2025-09-21 07:18:43 +02:00
Ryan Hughes
a746812504 Limit pattern to prevent incorrect matches 2025-09-19 20:39:20 -04:00
David Heinemeier Hansson
ad01082a86 Ensure libyaml is available for installs made before that was on the ISO 2025-09-19 18:44:36 -04:00
David Heinemeier Hansson
ba743c623d Give output on what's intended to happen 2025-09-19 17:44:13 -04:00
David Heinemeier Hansson
779c1b9ecc Add Update > Hardware > Audio for restarting pipewire service 2025-09-19 17:44:03 -04:00
David Heinemeier Hansson
e4ab5bee14 Catch obsidian vault dialog too 2025-09-19 17:31:20 -04:00
Taha
f60b9d1cb4 Fix Matte Black theme ghostty and vscode configs (#1801)
* Update Matte Black ghostty.conf with more color settings

* Rename theme from 'MatteBlack' to 'Matte Black'
2025-09-19 15:41:52 -04:00
Johan Sørensen
70661d5d5b Hide hyperland cursor while typing (#1812) 2025-09-19 15:40:54 -04:00
David Heinemeier Hansson
ad155b2545 Ghostty needs a very different scrollfactor than Alacritty and Kitty
cc @mitchellh
2025-09-19 05:32:47 -05:00
Omar Skalli
206930def8 Improve theme-set-vscode to support jsonc and respect symlinks (#1756) 2025-09-18 16:43:01 -05:00
Che-Wei Lin
a965a333ea fix: ghostty config typos 2025-09-18 23:18:51 +08:00
David Heinemeier Hansson
ed3b723c7f Merge branch 'master' into dev 2025-09-17 23:02:32 +02:00
David Heinemeier Hansson
83ab85799b Fix permissions 2025-09-17 23:02:23 +02:00
David Heinemeier Hansson
ffe7cd5099 Fix osaka jade theme for ghostty 2025-09-17 21:03:52 +02:00
David Heinemeier Hansson
28c4814f5a Fix osaka jade theme for ghostty 2025-09-17 21:03:44 +02:00
David Heinemeier Hansson
cf41ecaaa5 Merge pull request #1568 from basecamp/dev
Omarchy 3.0
2025-09-17 20:47:41 +02:00
David Heinemeier Hansson
9aef0ffab6 Use conditional theme file instead and send correct signal 2025-09-17 20:45:02 +02:00
26 changed files with 290 additions and 41 deletions

View File

@@ -47,6 +47,7 @@ install_node() {
case "$1" in
ruby)
echo -e "Installing Ruby on Rails...\n"
omarchy-pkg-add libyaml
mise use --global ruby@latest
mise settings add idiomatic_version_file_enable_tools ruby
mise x ruby -- gem install rails --no-document

View File

@@ -7,7 +7,7 @@ fi
WINDOW_PATTERN="$1"
LAUNCH_COMMAND="${2:-"uwsm app -- $WINDOW_PATTERN"}"
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class+" "+.title)|test($p;"i"))|.address' | head -n1)
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
if [[ -n $WINDOW_ADDRESS ]]; then
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"

View File

@@ -299,10 +299,13 @@ show_install_ai_menu() {
}
show_install_gaming_menu() {
case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft") in
case $(menu "Install" "Omarchy Gaming Helper\n Steam\n RetroArch [AUR]\n󰍳 Minecraft\n Heroic Launcher\n󰮂 Lutris") in
*Omarchy*) present_terminal omarchy-setup-gaming ;;
*Steam*) present_terminal omarchy-install-steam ;;
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
*Minecraft*) aur_install_and_launch "Minecraft [AUR]" "minecraft-launcher" "minecraft-launcher" ;;
*Heroic*) aur_install_and_launch "Heroic Launcher" "heroic-games-launcher-bin" "heroic" ;;
*Lutris*) aur_install_and_launch "Lutris" "lutris" "lutris" ;;
*) show_install_menu ;;
esac
}
@@ -430,7 +433,8 @@ show_update_config_menu() {
}
show_update_hardware_menu() {
case $(menu "Restart" "󱚾 Wi-Fi\n󰂯 Bluetooth") in
case $(menu "Restart" " Audio\n󱚾 Wi-Fi\n󰂯 Bluetooth") in
*Audio*) present_terminal omarchy-restart-pipewire ;;
*Wi-Fi*) present_terminal omarchy-restart-wifi ;;
*Bluetooth*) present_terminal omarchy-restart-bluetooth ;;
*) show_update_menu ;;

View File

@@ -1,4 +1,5 @@
#!/bin/bash
echo -e "Unblocking bluetooth...\n"
rfkill unblock bluetooth
rfkill list bluetooth

4
bin/omarchy-restart-pipewire Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
echo -e "Restarting pirewire audio service...\n"
systemctl --user restart pipewire.service

View File

@@ -1,4 +1,5 @@
#!/bin/bash
echo -e "Unblocking wifi...\n"
rfkill unblock wifi
rfkill list wifi

27
bin/omarchy-setup-gaming Executable file
View File

@@ -0,0 +1,27 @@
#!/bin/bash
yay -S --noconfirm gamescope proton-ge-custom-bin
mkdir -p ~/.config/systemd/user/
cat > ~/.config/systemd/user/omarchy-gaming-helper.service << EOF
[Unit]
Description=Omarchy Gaming Helper
After=graphical-session.target
[Service]
Type=simple
ExecStart=$OMARCHY_PATH/default/hypr/scripts/omarchy-gaming-helper.sh
Restart=always
RestartSec=5
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable omarchy-gaming-helper.service
systemctl --user start omarchy-gaming-helper.service
echo "Omarchy Gaming Helper service has been installed and started."

View File

@@ -3,12 +3,5 @@
case "$TERMINAL" in
"alacritty") touch ~/.config/alacritty/alacritty.toml ;;
"kitty") killall -SIGUSR1 kitty ;;
"ghostty")
# Use a default theme if none exists
if [[ ! -f ~/.config/omarchy/current/theme/ghostty.conf ]]; then
echo "theme = Spacegray" >~/.config/omarchy/current/theme/ghostty.conf
fi
killall -USRSIG2 ghostty
;;
"ghostty") killall -SIGUSR2 ghostty ;;
esac

View File

@@ -1,5 +1,8 @@
#!/bin/bash
# Note: We cannot use `jq` to update settings.json because its JSONC (allows comments),
# which jq doesnt support.
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
VS_CODE_SETTINGS="$HOME/.config/Code/User/settings.json"
VS_CODE_SKIP_FLAG="$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes"
@@ -15,12 +18,29 @@ if omarchy-cmd-present code && [[ ! -f "$VS_CODE_SKIP_FLAG" ]]; then
code --install-extension "$extension" >/dev/null
fi
# Update theme in settings.json
jq -n --arg t "$theme_name" '(input? // {}) | .["workbench.colorTheme"] = $t' "$VS_CODE_SETTINGS" >"${VS_CODE_SETTINGS}.new"
else
# Remove theme from settings.json when the theme doesn't have vscode support
jq 'del(.["workbench.colorTheme"])' "$VS_CODE_SETTINGS" >"${VS_CODE_SETTINGS}.new"
# Create config file if there isn't already one
mkdir -p "$(dirname "$VS_CODE_SETTINGS")"
if [[ ! -f "$VS_CODE_SETTINGS" ]]; then
printf '{\n}\n' > "$VS_CODE_SETTINGS"
fi
mv "${VS_CODE_SETTINGS}.new" "$VS_CODE_SETTINGS"
# Create a `workbench.colorTheme` entry in settings.
if ! grep -q '"workbench.colorTheme"' "$VS_CODE_SETTINGS"; then
# Insert `"workbench.colorTheme": "",` immediately after the first `{`
# Use sed's first-match range (0,/{/) to only replace the first `{`
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\
"workbench.colorTheme": "",/}' "$VS_CODE_SETTINGS"
fi
# Update theme
sed -i --follow-symlinks -E \
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
"$VS_CODE_SETTINGS"
else
# Remove theme from settings.json when the theme doesn't have vscode support
if [[ -f "$VS_CODE_SETTINGS" ]]; then
sed -i --follow-symlinks -E '/"workbench\.colorTheme"[[:space:]]*:[^,}]*,?/d' "$VS_CODE_SETTINGS"
fi
fi
fi

View File

@@ -1,5 +1,5 @@
# Dynamic theme colors
config-file = "~/.config/omarchy/current/theme/ghostty.conf"
config-file = ?"~/.config/omarchy/current/theme/ghostty.conf"
# Font
font-family = "CaskaydiaMono Nerd Font"
@@ -12,7 +12,7 @@ window-padding-y = 14
confirm-close-surface=false
resize-overlay = never
# Cursor stlying
# Cursor styling
cursor-style = "block"
cursor-style-blink = false
shell-integration-features = no-cursor

View File

@@ -27,8 +27,9 @@ input {
}
}
# Scroll faster in the terminal
windowrule = scrolltouchpad 1.5, tag:terminal
# Scroll nicely in the terminal
windowrule = scrolltouchpad 1.5, class:(Alacritty|kitty)
windowrule = scrolltouchpad 0.2, class:com.mitchellh.ghostty
# Enable touchpad gestures for changing workspaces
# See https://wiki.hyprland.org/Configuring/Gestures/

View File

@@ -7,8 +7,6 @@ source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf
source = ~/.local/share/omarchy/default/hypr/apps/localsend.conf
source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf
source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf
source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf

View File

@@ -4,7 +4,7 @@ windowrule = center, tag:floating-window
windowrule = size 800 600, tag:floating-window
windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float)
windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open Folder|Save.*Files?|Save.*As|Save|All Files)
windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files)
# Fullscreen screensaver
windowrule = fullscreen, class:Screensaver

5
default/hypr/gaming.conf Normal file
View File

@@ -0,0 +1,5 @@
# Gaming-specific tweaks
source = ~/.local/share/omarchy/default/hypr/gaming/general-gaming.conf
source = ~/.local/share/omarchy/default/hypr/gaming/blizzard.conf
source = ~/.local/share/omarchy/default/hypr/gaming/retroarch.conf
source = ~/.local/share/omarchy/default/hypr/gaming/steam.conf

View File

@@ -0,0 +1,6 @@
windowrule = tag +game, title:Hearthstone
windowrule = tag +game, title:Overwatch
windowrule = tag +game, title:.*Warcraft.*
windowrule = tag -game, title:Battle.net.*
windowrule = tag +game-launcher, title:Battle.net.*

View File

@@ -0,0 +1,20 @@
windowrule = float, tag:game-launcher
windowrule = center, tag:game-launcher
windowrule = size 60% 60%, tag:game-launcher
windowrule = immediate, tag:game
windowrule = idleinhibit fullscreen, tag:game
windowrule = opacity 1 1, tag:game
windowrule = noshadow, tag:game
windowrule = noborder, tag:game
windowrule = noblur, tag:game
windowrule = noborder, class:Xdg-desktop-portal-gtk
windowrule = noblur, class:Xdg-desktop-portal-gtk
windowrule = noshadow, class:Xdg-desktop-portal-gtk
windowrule = tag +game, class:(steam_app.*|lutris|heroic|gamescope)
# Fix positioning for steam games
# windowrule = center, class:steam_app.*
# windowrule = stayfocused, class:steam_app.*

View File

@@ -1,6 +1,6 @@
# Float Steam, fullscreen RetroArch
windowrule = float, class:steam
windowrule = center, class:steam, title:Steam
# windowrule = float, class:steam
# windowrule = center, class:steam, title:Steam
windowrule = opacity 1 1, class:steam
windowrule = size 1100 700, class:steam, title:Steam
windowrule = size 460 800, class:steam, title:Friends List

View File

@@ -87,3 +87,8 @@ misc {
disable_splash_rendering = true
focus_on_activate = true
}
# https://wiki.hypr.land/Configuring/Variables/#cursor
cursor {
hide_on_key_press = true
}

View File

@@ -0,0 +1,143 @@
#!/bin/bash
# Gaming Helper for Hyprland
# Runs as a service in the background to perform tasks that can't be accomplished with only
# hyprland rules
# Usage: omarchy-gaming-helper.sh [--debug]
DEBUG_MODE=0
[[ "$1" == "--debug" ]] && DEBUG_MODE=1
# Track if we have active games
GAMES_ACTIVE=0
log_debug() {
[[ $DEBUG_MODE -eq 1 ]] && gum log --level debug "$@"
}
log_info() {
gum log --level info "$@"
}
# Monitor Management
apply_gaming_scale() {
log_info "Applying integer scaling for gaming"
# Get all monitors and apply integer scaling
hyprctl monitors -j | jq -r '.[] | "\(.name) \(.width) \(.height) \(.refreshRate) \(.x) \(.y) \(.scale)"' | \
while read -r name width height refresh x y scale; do
# Round scale to nearest integer
integer_scale=$(awk "BEGIN {printf \"%.0f\", $scale}")
log_info "Setting $name from scale $scale to $integer_scale"
hyprctl keyword monitor "$name,${width}x${height}@${refresh},${x}x${y},$integer_scale"
done
}
restore_monitor_settings() {
log_info "Restoring monitor settings"
hyprctl reload
}
# Game Detection
is_steam_game() {
local class="$1"
[[ "$class" == steam_app_* ]]
}
count_active_games() {
hyprctl clients -j | jq -r '[.[] | select(.class | startswith("steam_app_"))] | length'
}
# Event Handlers
handle_window_open() {
local event="$1"
# Parse: openwindow>>address,workspace,class,title
IFS=',' read -r address workspace class title <<< "${event#openwindow>>}"
if is_steam_game "$class"; then
log_info "Steam game opened: $title ($class)"
# Apply scaling on first game
if [[ $GAMES_ACTIVE -eq 0 ]]; then
apply_gaming_scale
fi
GAMES_ACTIVE=$((GAMES_ACTIVE + 1))
# Apply fullscreen
hyprctl dispatch fullscreenstate 2 2 "address:$address"
fi
}
handle_title_change() {
local event="$1"
# Parse: windowtitlev2>>address,title
IFS=',' read -r address title <<< "${event#windowtitlev2>>}"
address="${address#0x}"
# Get window class and tags
local window_info=$(hyprctl clients -j | jq -r --arg addr "0x$address" \
'.[] | select(.address == $addr) | "\(.class) \(.tags)"')
if [[ -z "$window_info" ]]; then
return
fi
read -r class tags <<< "$window_info"
# Handle gamescope windows (Battle.net, etc)
if [[ "$class" == "gamescope" ]]; then
if [[ "$tags" == *"game"* ]] && [[ "$tags" != *"game-launcher"* ]]; then
log_info "Gamescope game detected: $title"
hyprctl dispatch fullscreenstate 2 2 "address:0x$address"
elif [[ "$tags" == *"game-launcher"* ]]; then
log_info "Gamescope launcher detected: $title"
hyprctl dispatch fullscreenstate 0 0 "address:0x$address"
fi
fi
}
handle_window_close() {
local event="$1"
local address="${event#closewindow>>}"
# Count remaining games
local remaining_games=$(count_active_games)
log_debug "Window closed, remaining games: $remaining_games"
# Restore settings when last game closes
if [[ "$remaining_games" -eq 0 ]] && [[ $GAMES_ACTIVE -gt 0 ]]; then
log_info "No games remain, restoring settings"
restore_monitor_settings
GAMES_ACTIVE=0
else
GAMES_ACTIVE="$remaining_games"
fi
}
# Main Event Loop
main() {
log_info "Gaming helper started (debug=$DEBUG_MODE)"
socat -U - UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | \
while read -r event; do
log_debug "Event: ${event:0:80}..."
case "$event" in
openwindow*)
handle_window_open "$event"
;;
windowtitlev2*)
handle_title_change "$event"
;;
closewindow*)
handle_window_close "$event"
;;
esac
done
}
# Start
main

View File

@@ -9,3 +9,4 @@ windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned
# App-specific tweaks
source = ~/.local/share/omarchy/default/hypr/apps.conf
source = ~/.local/share/omarchy/default/hypr/gaming.conf

View File

@@ -1,14 +0,0 @@
# Called by Omarchy ISO setup before starting configurator and archinstall
source "$OMARCHY_INSTALL/preflight/set-size-vars.sh"
source "$OMARCHY_INSTALL/helpers/logo.sh"
source "$OMARCHY_INSTALL/preflight/gum.sh"
source "$OMARCHY_INSTALL/helpers/tail-log-output.sh"
source "$OMARCHY_INSTALL/helpers/trap-errors.sh"
source $OMARCHY_INSTALL/helpers/chroot.sh
source $OMARCHY_INSTALL/helpers/logo.sh
source $OMARCHY_INSTALL/helpers/gum.sh
source $OMARCHY_INSTALL/helpers/errors.sh
source $OMARCHY_INSTALL/helpers/logging.sh
source $OMARCHY_INSTALL/helpers/layout.sh

0
migrations/1757021485.sh Executable file → Normal file
View File

View File

@@ -1,3 +1,12 @@
background = #121212
foreground = #BEBEBE
cursor-color = #EAEAEA
cursor-text = #121212
selection-background = #333333
selection-foreground = #EAEAEA
# normal colors
palette = 0=#333333
palette = 1=#D35F5F

View File

@@ -1,4 +1,4 @@
{
"name": "MatteBlack",
"name": "Matte Black",
"extension": "TahaYVR.matteblack"
}

View File

@@ -1 +1,25 @@
theme = TokyoNight
# primary
background = #111c18
foreground = #C1C497
cursor-color = #D7C995
cursor-text = #000000
# normal colors
palette = 0=#23372B
palette = 1=#FF5345
palette = 2=#549e6a
palette = 3=#459451
palette = 4=#509475
palette = 5=#D2689C
palette = 6=#2DD5B7
palette = 7=#F6F5DD
# bright colors
palette = 8=#53685B
palette = 9=#db9f9c
palette = 10=#143614
palette = 11=#E5C736
palette = 12=#ACD4CF
palette = 13=#75bbb3
palette = 14=#8CD3CB
palette = 15=#9eebb3