Merge branch 'dev' into quickshell-omarchy-menu

This commit is contained in:
David Heinemeier Hansson
2026-05-15 18:06:12 +02:00
96 changed files with 865 additions and 708 deletions
+2 -2
View File
@@ -21,7 +21,7 @@ time_remaining=$(omarchy-battery-remaining-time)
capacity=$(omarchy-battery-capacity)
if [[ $state == "charging" ]]; then
echo "󰁹 Battery ${percentage}% · ${time_remaining} to full ·  ${power_rate}W / ${capacity}Wh"
echo "Battery ${percentage}% · ${time_remaining} to full ·  ${power_rate}W / ${capacity}Wh"
else
echo "󰁹 Battery ${percentage}% · ${time_remaining} left ·  ${power_rate}W / ${capacity}Wh"
echo "Battery ${percentage}% · ${time_remaining} left ·  ${power_rate}W / ${capacity}Wh"
fi
-5
View File
@@ -44,11 +44,6 @@ if grep -Fq "$SWAP_FILE" /etc/fstab; then
sudo sed -i '/^# Btrfs swapfile for system hibernation$/d' /etc/fstab
fi
# Remove suspend-then-hibernate configuration
echo "Removing suspend-then-hibernate configuration"
sudo rm -f /etc/systemd/logind.conf.d/lid.conf
sudo rm -f /etc/systemd/sleep.conf.d/hibernate.conf
# Remove mkinitcpio resume hook
echo "Removing resume hook"
sudo rm "$MKINITCPIO_CONF"
+92
View File
@@ -0,0 +1,92 @@
#!/bin/bash
# omarchy:summary=Install Sunshine and open Moonlight streaming ports for LAN and Tailscale.
# omarchy:requires-sudo=true
set -e
TCP_PORTS=(47984 47989 48010)
UDP_PORTS=(5353 47998 47999 48000 48002 48010)
PRIVATE_CIDRS=(10.0.0.0/8 172.16.0.0/12 192.168.0.0/16)
UFW_COMMENT="omarchy-sunshine"
SUNSHINE_ADMIN_APP="Sunshine Admin"
SUNSHINE_ADMIN_URL="https://localhost:47990"
SUNSHINE_ADMIN_EXEC="omarchy-launch-webapp $SUNSHINE_ADMIN_URL --ignore-certificate-errors"
SUNSHINE_ICON_SOURCE="/usr/share/sunshine/web/images/logo-sunshine-45.png"
SUNSHINE_ICON_NAME="Sunshine Admin.png"
WEBAPP_ICON_DIR="$HOME/.local/share/applications/icons"
HYPR_AUTOSTART_FILE="$HOME/.config/hypr/autostart.lua"
HYPR_AUTOSTART_ENTRY='o.launch_on_start("sunshine")'
open_ufw_port_for_private_lans() {
local proto="$1"
local port="$2"
local cidr
for cidr in "${PRIVATE_CIDRS[@]}"; do
sudo ufw allow in proto "$proto" from "$cidr" to any port "$port" comment "$UFW_COMMENT"
done
}
open_ufw_port_for_tailscale() {
local proto="$1"
local port="$2"
if ip link show tailscale0 >/dev/null 2>&1; then
sudo ufw allow in on tailscale0 to any port "$port" proto "$proto" comment "$UFW_COMMENT"
fi
}
open_ufw_ports() {
local port
if omarchy-cmd-missing ufw; then
echo "UFW is not installed; skipping Sunshine firewall rules."
return
fi
for port in "${TCP_PORTS[@]}"; do
open_ufw_port_for_private_lans tcp "$port"
open_ufw_port_for_tailscale tcp "$port"
done
for port in "${UDP_PORTS[@]}"; do
open_ufw_port_for_private_lans udp "$port"
open_ufw_port_for_tailscale udp "$port"
done
sudo ufw reload
}
install_admin_webapp() {
mkdir -p "$WEBAPP_ICON_DIR"
cp "$SUNSHINE_ICON_SOURCE" "$WEBAPP_ICON_DIR/$SUNSHINE_ICON_NAME"
omarchy-webapp-install "$SUNSHINE_ADMIN_APP" "$SUNSHINE_ADMIN_URL" "$SUNSHINE_ICON_NAME" "$SUNSHINE_ADMIN_EXEC"
omarchy-restart-walker
}
enable_hyprland_autostart() {
mkdir -p "$(dirname "$HYPR_AUTOSTART_FILE")"
touch "$HYPR_AUTOSTART_FILE"
if ! grep -Fxq "$HYPR_AUTOSTART_ENTRY" "$HYPR_AUTOSTART_FILE"; then
printf '\n%s\n' "$HYPR_AUTOSTART_ENTRY" >>"$HYPR_AUTOSTART_FILE"
fi
}
echo "Installing Sunshine..."
omarchy-pkg-add sunshine
systemctl --user enable --now sunshine
echo "Opening Sunshine firewall ports..."
open_ufw_ports
echo "Installing Sunshine admin web app..."
install_admin_webapp
$SUNSHINE_ADMIN_EXEC >/dev/null 2>&1 &
echo "Enabling Sunshine autostart..."
enable_hyprland_autostart
echo ""
echo "Sunshine has been installed and its Moonlight streaming ports are open for private LANs and Tailscale."
+2 -2
View File
@@ -30,10 +30,10 @@ if omarchy-pkg-add $package; then
# Copy custom desktop entries with X-TerminalArg* keys
if [[ $package == "alacritty" ]]; then
mkdir -p ~/.local/share/applications
cp "$OMARCHY_PATH/applications/$desktop_id" ~/.local/share/applications/
cp "$OMARCHY_PATH/default/alacritty/$desktop_id" ~/.local/share/applications/
elif [[ $package == "foot" ]]; then
mkdir -p ~/.local/share/applications
cp "$OMARCHY_PATH/default/foot/$desktop_id" ~/.local/share/applications/
cp "$OMARCHY_PATH/applications/$desktop_id" ~/.local/share/applications/
fi
# Copy default config for optional terminals when missing
+4 -2
View File
@@ -6,7 +6,7 @@
default_browser=$(xdg-settings get default-web-browser)
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
if $browser_exec --help | grep -q MOZ_LOG; then
if $browser_exec --help 2>/dev/null | grep -q MOZ_LOG; then
private_flag="--private-window"
elif [[ $browser_exec =~ edge ]]; then
private_flag="--inprivate"
@@ -14,4 +14,6 @@ else
private_flag="--incognito"
fi
exec setsid uwsm-app -- "$browser_exec" "${@/--private/$private_flag}"
systemd-run --user --quiet --collect --unit="omarchy-browser-$(date +%s%N)" \
--property=StandardOutput=null --property=StandardError=null \
uwsm-app -- "$browser_exec" "${@/--private/$private_flag}"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Launch Files
exec setsid uwsm-app -- nautilus --new-window
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Launch Files in the active terminal's current directory
exec setsid uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Launch a terminal in the active terminal's current directory
# omarchy:args=[command...]
exec setsid uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" "$@"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Launch or attach to the Work tmux session in a terminal
exec omarchy-launch-terminal bash -c "tmux attach || tmux new -s Work"
+2
View File
@@ -1001,9 +1001,11 @@ screenrecord | screenrecording | screen-record)
;;
esac
if [[ -z ${1:-} ]]; then
open_quickshell_menu root
exit $?
fi
target=$(route_target "${1:-}") || exit $?
+2 -2
View File
@@ -84,7 +84,7 @@ done_file=$(mktemp)
rm -f "$done_file"
trap 'rm -f "$selection_file" "$done_file"' EXIT
socket_path="${XDG_RUNTIME_DIR:-/run/user/$UID}/omarchy-image-selector.sock"
selector_qml="$OMARCHY_PATH/default/quickshell/background-switcher.qml"
selector_qml="$OMARCHY_PATH/default/quickshell/select-by-image.qml"
image_dirs_env=""
for dir in "${image_dirs[@]}"; do
@@ -216,7 +216,7 @@ fi
rows_payload=${rows//$'\t'/$'\f'}
rows_payload=${rows_payload//$'\n'/$'\v'}
colors_file=${colors_file:-$HOME/.config/omarchy/current/theme/background-switcher-colors.json}
colors_file=${colors_file:-$HOME/.config/omarchy/current/theme/quickshell.json}
colors_payload=""
if [[ -f $colors_file ]]; then
+1 -1
View File
@@ -187,7 +187,7 @@ hl = setmetatable({
end,
})
local config = (os.getenv("HOME") or "") .. "/.config/hypr/hyprland.lua"
local config = os.getenv("HOME") .. "/.config/hypr/hyprland.lua"
local file = io.open(config, "r")
if file then
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Show the current battery status notification
omarchy-notification-send -g 󰁹 -u low "$(omarchy-battery-status)"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Show the current time and date notification
omarchy-notification-send -g  -u low "$(date +"%A %H:%M · %d %B %Y · Week %V")"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Show the current weather notification
omarchy-notification-send -g $(omarchy-weather-icon) -u low "$(omarchy-weather-status)"
+2 -2
View File
@@ -11,8 +11,8 @@ mkdir -p ~/.local/share/applications
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
if omarchy-cmd-present foot; then
cp ~/.local/share/omarchy/default/foot/foot.desktop ~/.local/share/applications/
if omarchy-cmd-present alacritty; then
cp ~/.local/share/omarchy/default/alacritty/alacritty.desktop ~/.local/share/applications/
fi
# Refresh the webapps, TUIs, and npx wrappers
+1
View File
@@ -9,4 +9,5 @@ omarchy-refresh-config hypr/input.lua
omarchy-refresh-config hypr/looknfeel.lua
omarchy-refresh-config hypr/hyprland.lua
omarchy-refresh-config hypr/monitors.lua
bash "$OMARCHY_PATH/install/config/omarchy-toggles.sh"
bash "$OMARCHY_PATH/install/config/detect-keyboard-layout.sh"
+1 -1
View File
@@ -6,6 +6,6 @@ set -e
# Reinstall the Omarchy configuration directory from the git source.
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
git clone --depth=1 --branch master "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
mv $OMARCHY_PATH ~/.local/share/omarchy-old
mv ~/.local/share/omarchy-new $OMARCHY_PATH
+69
View File
@@ -0,0 +1,69 @@
#!/bin/bash
# omarchy:summary=Remove Sunshine and close Omarchy-managed Moonlight streaming ports.
# omarchy:requires-sudo=true
set -e
TCP_PORTS=(47984 47989 48010)
UDP_PORTS=(5353 47998 47999 48000 48002 48010)
PRIVATE_CIDRS=(10.0.0.0/8 172.16.0.0/12 192.168.0.0/16)
SUNSHINE_ADMIN_APP="Sunshine Admin"
HYPR_AUTOSTART_FILE="$HOME/.config/hypr/autostart.lua"
HYPR_AUTOSTART_ENTRY='o.launch_on_start("sunshine")'
delete_ufw_rule() {
sudo ufw --force delete "$@" 2>/dev/null || true
}
close_ufw_port_for_private_lans() {
local proto="$1"
local port="$2"
local cidr
for cidr in "${PRIVATE_CIDRS[@]}"; do
delete_ufw_rule allow in proto "$proto" from "$cidr" to any port "$port"
done
}
close_ufw_port_for_tailscale() {
local proto="$1"
local port="$2"
delete_ufw_rule allow in on tailscale0 to any port "$port" proto "$proto"
}
close_ufw_ports() {
local port
if omarchy-cmd-missing ufw; then
return
fi
for port in "${TCP_PORTS[@]}"; do
close_ufw_port_for_private_lans tcp "$port"
close_ufw_port_for_tailscale tcp "$port"
done
for port in "${UDP_PORTS[@]}"; do
close_ufw_port_for_private_lans udp "$port"
close_ufw_port_for_tailscale udp "$port"
done
sudo ufw reload
}
disable_hyprland_autostart() {
if [[ -f $HYPR_AUTOSTART_FILE ]]; then
sed -i "\|^$HYPR_AUTOSTART_ENTRY$|d" "$HYPR_AUTOSTART_FILE"
fi
}
systemctl --user disable --now sunshine 2>/dev/null || true
omarchy-pkg-drop sunshine
omarchy-webapp-remove "$SUNSHINE_ADMIN_APP" 2>/dev/null || true
disable_hyprland_autostart
close_ufw_ports
echo ""
echo "Sunshine has been removed and its Omarchy-managed Moonlight streaming ports have been closed."
+1 -1
View File
@@ -12,4 +12,4 @@ progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
omarchy-swayosd-client \
--custom-icon display-brightness-symbolic \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
--custom-progress-text "$(printf '%3d%%' "$percent")"
+2 -1
View File
@@ -9,7 +9,8 @@ echo -e "\e[32mUpdate Omarchy\e[0m"
omarchy-update-time
# Suppress Hyprland config errors while git updates default config files mid-pull
hyprctl eval 'hl.config({ debug = { suppress_errors = true } })' &>/dev/null || hyprctl keyword debug:suppress_errors true &>/dev/null || true
hyprctl keyword debug:suppress_errors true &>/dev/null || true
hyprctl eval 'hl.config({ debug = { suppress_errors = true } })' &>/dev/null || true
git -C $OMARCHY_PATH pull --autostash
git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge
+7 -3
View File
@@ -4,6 +4,10 @@
echo
confirm_reboot() {
gum confirm "$1" && { omarchy-system-reboot; exit 0; }
}
running_kernel=$(uname -r)
kernel_updated=true
@@ -19,14 +23,14 @@ for kernel in /usr/lib/modules/*/vmlinuz; do
done
if [[ $kernel_updated == "true" ]]; then
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-system-reboot
confirm_reboot "Linux kernel has been updated. Reboot?"
elif [[ -f $HOME/.local/state/omarchy/reboot-required ]]; then
gum confirm "Updates require reboot. Ready?" && omarchy-system-reboot
confirm_reboot "Updates require reboot. Ready?"
fi
running_hyprland=$(readlink /proc/$(pgrep -x Hyprland)/exe 2>/dev/null)
if [[ $running_hyprland == *"(deleted)"* ]]; then
gum confirm "Hyprland has been updated. Reboot?" && omarchy-system-reboot
confirm_reboot "Hyprland has been updated. Reboot?"
fi
for file in "$HOME"/.local/state/omarchy/restart-*-required; do
+2 -3
View File
@@ -11,12 +11,11 @@ if omarchy-cmd-present voxtype; then
echo "Uninstall Voxtype to remove dictation."
# Remove services
systemctl --user stop voxtype.service 2>/dev/null || true
rm -f ~/.config/systemd/user/voxtype*
systemctl --user disable --now voxtype.service 2>/dev/null || true
systemctl --user daemon-reload
# Remove packages and configs
omarchy-pkg-drop wtype voxtype-bin
omarchy-pkg-drop voxtype-bin
rm -rf ~/.config/voxtype
rm -rf ~/.local/share/voxtype
else
+1 -1
View File
@@ -14,4 +14,4 @@ place=${place%%,*}
place=${place^}
temperature=${temperature#+}
echo "$(omarchy-weather-icon) $place · Temp $temperature · Wind $wind"
echo "$place · Temp $temperature · Wind $wind"
+1 -1
View File
@@ -6,6 +6,6 @@
"checkThirdParty": false
},
"diagnostics": {
"globals": ["hl"]
"globals": ["hl", "o"]
}
}
+1 -3
View File
@@ -1,4 +1,2 @@
-- Extra autostart processes.
-- hl.on("hyprland.start", function()
-- hl.exec_cmd("uwsm-app -- my-service")
-- end)
-- o.launch_on_start("my-service")
+31 -30
View File
@@ -1,40 +1,41 @@
-- Application bindings.
hl.bind("SUPER + RETURN", hl.dsp.exec_cmd([[uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)"]]), { description = "Terminal" })
hl.bind("SUPER + ALT + RETURN", hl.dsp.exec_cmd([[uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" bash -c "tmux attach || tmux new -s Work"]]), { description = "Tmux" })
hl.bind("SUPER + SHIFT + RETURN", hl.dsp.exec_cmd("omarchy-launch-browser"), { description = "Browser" })
hl.bind("SUPER + SHIFT + F", hl.dsp.exec_cmd("uwsm-app -- nautilus --new-window"), { description = "File manager" })
hl.bind("SUPER + ALT + SHIFT + F", hl.dsp.exec_cmd([[uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"]]), { description = "File manager (cwd)" })
hl.bind("SUPER + SHIFT + B", hl.dsp.exec_cmd("omarchy-launch-browser"), { description = "Browser" })
hl.bind("SUPER + SHIFT + ALT + B", hl.dsp.exec_cmd("omarchy-launch-browser --private"), { description = "Browser (private)" })
hl.bind("SUPER + SHIFT + M", hl.dsp.exec_cmd("omarchy-launch-or-focus spotify"), { description = "Music" })
hl.bind("SUPER + SHIFT + ALT + M", hl.dsp.exec_cmd("omarchy-launch-or-focus-tui cliamp"), { description = "Music TUI" })
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("omarchy-launch-editor"), { description = "Editor" })
hl.bind("SUPER + SHIFT + D", hl.dsp.exec_cmd("omarchy-launch-tui lazydocker"), { description = "Docker" })
hl.bind("SUPER + SHIFT + G", hl.dsp.exec_cmd([[omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"]]), { description = "Signal" })
hl.bind("SUPER + SHIFT + O", hl.dsp.exec_cmd([[omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian"]]), { description = "Obsidian" })
hl.bind("SUPER + SHIFT + W", hl.dsp.exec_cmd("uwsm-app -- typora --enable-wayland-ime"), { description = "Typora" })
hl.bind("SUPER + SHIFT + SLASH", hl.dsp.exec_cmd("uwsm-app -- 1password"), { description = "Passwords" })
o.bind("SUPER + RETURN", "Terminal", { omarchy = "terminal" })
o.bind("SUPER + ALT + RETURN", "Tmux", { omarchy = "terminal-tmux" })
o.bind("SUPER + SHIFT + RETURN", "Browser", { omarchy = "browser" })
o.bind("SUPER + SHIFT + F", "File manager", { omarchy = "nautilus" })
o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)", { omarchy = "nautilus-cwd" })
o.bind("SUPER + SHIFT + B", "Browser", { omarchy = "browser" })
o.bind("SUPER + SHIFT + ALT + B", "Browser (private)", { omarchy = "browser --private" })
o.bind("SUPER + SHIFT + M", "Music", { omarchy = "or-focus spotify" })
o.bind("SUPER + SHIFT + ALT + M", "Music TUI", { tui = "cliamp", focus = true })
o.bind("SUPER + SHIFT + N", "Editor", { omarchy = "editor" })
o.bind("SUPER + SHIFT + D", "Docker", { tui = "lazydocker" })
o.bind("SUPER + SHIFT + G", "Signal", { launch = "signal-desktop", focus = "^signal$" })
o.bind("SUPER + SHIFT + O", "Obsidian", { launch = "obsidian", focus = "^obsidian$" })
o.bind("SUPER + SHIFT + W", "Typora", { launch = "typora --enable-wayland-ime" })
o.bind("SUPER + SHIFT + SLASH", "Passwords", { launch = "1password" })
-- Web app bindings.
hl.bind("SUPER + SHIFT + A", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://chatgpt.com"]]), { description = "ChatGPT" })
hl.bind("SUPER + SHIFT + ALT + A", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://grok.com"]]), { description = "Grok" })
hl.bind("SUPER + SHIFT + C", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"]]), { description = "Calendar" })
hl.bind("SUPER + SHIFT + E", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://app.hey.com"]]), { description = "Email" })
hl.bind("SUPER + SHIFT + Y", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://youtube.com/"]]), { description = "YouTube" })
hl.bind("SUPER + SHIFT + ALT + G", hl.dsp.exec_cmd([[omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"]]), { description = "WhatsApp" })
hl.bind("SUPER + SHIFT + CTRL + G", hl.dsp.exec_cmd([[omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"]]), { description = "Google Messages" })
hl.bind("SUPER + SHIFT + P", hl.dsp.exec_cmd([[omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"]]), { description = "Google Photos" })
hl.bind("SUPER + SHIFT + X", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://x.com/"]]), { description = "X" })
hl.bind("SUPER + SHIFT + ALT + X", hl.dsp.exec_cmd([[omarchy-launch-webapp "https://x.com/compose/post"]]), { description = "X Post" })
o.bind("SUPER + SHIFT + A", "ChatGPT", { webapp = "https://chatgpt.com" })
o.bind("SUPER + SHIFT + ALT + A", "Grok", { webapp = "https://grok.com" })
o.bind("SUPER + SHIFT + C", "Calendar", { webapp = "https://app.hey.com/calendar/weeks/" })
o.bind("SUPER + SHIFT + E", "Email", { webapp = "https://app.hey.com" })
o.bind("SUPER + SHIFT + Y", "YouTube", { webapp = "https://youtube.com/" })
o.bind("SUPER + SHIFT + ALT + G", "WhatsApp", { webapp = "https://web.whatsapp.com/", focus = true })
o.bind("SUPER + SHIFT + CTRL + G", "Google Messages", { webapp = "https://messages.google.com/web/conversations", focus = true })
o.bind("SUPER + SHIFT + P", "Google Photos", { webapp = "https://photos.google.com/", focus = true })
o.bind("SUPER + SHIFT + S", "Google Maps", { webapp = "https://maps.google.com/", focus = true })
o.bind("SUPER + SHIFT + X", "X", { webapp = "https://x.com/" })
o.bind("SUPER + SHIFT + ALT + X", "X Post", { webapp = "https://x.com/compose/post" })
-- Add extra bindings below.
-- hl.bind("SUPER + SHIFT + R", hl.dsp.exec_cmd("alacritty -e ssh your-server"), { description = "SSH" })
-- o.bind("SUPER + SHIFT + R", "SSH", "alacritty -e ssh your-server")
-- Overwrite existing bindings with hl.unbind() first if needed.
-- hl.unbind("SUPER + SPACE")
-- hl.bind("SUPER + SPACE", hl.dsp.exec_cmd("omarchy-menu"), { description = "Omarchy menu" })
-- o.bind("SUPER + SPACE", "Omarchy menu", "omarchy-menu")
-- Logitech MX Keys examples:
-- hl.bind("SUPER + SHIFT + S", hl.dsp.exec_cmd("omarchy-capture-screenshot"))
-- hl.bind("SUPER + H", hl.dsp.exec_cmd("voxtype record toggle"))
-- hl.bind("SUPER + PERIOD", hl.dsp.exec_cmd("omarchy-launch-walker -m symbols"))
-- o.bind("SUPER + SHIFT + S", nil, "omarchy-capture-screenshot")
-- o.bind("SUPER + H", nil, "voxtype record toggle")
-- o.bind("SUPER + PERIOD", nil, { omarchy = "walker -m symbols" })
+9 -27
View File
@@ -1,32 +1,14 @@
-- Learn how to configure Hyprland: https://wiki.hypr.land/Configuring/Start/
local home = os.getenv("HOME") or ""
-- Load user modules from ~/.config and Omarchy defaults from $OMARCHY_PATH.
package.path = os.getenv("HOME")
.. "/.config/?.lua;"
.. (os.getenv("OMARCHY_PATH") or (os.getenv("HOME") .. "/.local/share/omarchy"))
.. "/?.lua;"
.. package.path
-- Hyprland recommends require() for split Lua configs. These two roots let us
-- load user modules from ~/.config and Omarchy defaults from $OMARCHY_PATH.
package.path = home .. "/.config/?.lua;" .. (os.getenv("OMARCHY_PATH") or (home .. "/.local/share/omarchy")) .. "/?.lua;" .. package.path
local paths = require("default.hypr.paths")
-- Use Omarchy defaults, but don't edit these directly.
require("default.hypr.autostart")
require("default.hypr.bindings.media")
require("default.hypr.bindings.clipboard")
require("default.hypr.bindings.tiling-v2")
require("default.hypr.bindings.utilities")
require("default.hypr.envs")
require("default.hypr.looknfeel")
require("default.hypr.input")
require("default.hypr.windows")
-- Current theme overrides.
do
local theme = io.open(paths.config_home .. "/omarchy/current/theme/hyprland.lua", "r")
if theme then
theme:close()
require("omarchy.current.theme.hyprland")
end
end
-- All Omarchy default setups
require("default.hypr.omarchy")
-- Change your own setup in these files and override defaults.
require("hypr.monitors")
@@ -39,4 +21,4 @@ require("hypr.autostart")
require("default.hypr.toggles")
-- Add any other personal Hyprland configuration below.
-- hl.window_rule({ match = { class = "qemu" }, workspace = "5" })
-- o.window("qemu", { workspace = "5" })
+2 -2
View File
@@ -43,8 +43,8 @@ hl.config({
})
-- Scroll nicely in the terminal.
hl.window_rule({ match = { class = "(Alacritty|kitty|foot)" }, scroll_touchpad = 1.5 })
hl.window_rule({ match = { class = "com.mitchellh.ghostty" }, scroll_touchpad = 0.2 })
o.window("(Alacritty|kitty|foot)", { scroll_touchpad = 1.5 })
o.window("com.mitchellh.ghostty", { scroll_touchpad = 0.2 })
-- Enable touchpad gestures for changing workspaces.
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Gestures/
+4
View File
@@ -13,6 +13,10 @@ bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-selection-and-cancel
# Pane Controls
bind -n M-Enter split-window -v -c "#{pane_current_path}"
bind -n M-S-Enter split-window -h -c "#{pane_current_path}"
bind -n M-Escape kill-pane
bind h split-window -v -c "#{pane_current_path}"
bind v split-window -h -c "#{pane_current_path}"
bind x kill-pane
+3
View File
@@ -3,6 +3,9 @@
# Install other terminals via Install > Terminal
export TERMINAL=xdg-terminal-exec
# Used by terminal programs (like gh) to open URLs detached from the terminal process tree
export BROWSER=omarchy-launch-browser
# Use code for VSCode
export EDITOR=nvim
+1 -2
View File
@@ -1,2 +1 @@
hl.window_rule({ match = { class = "^(1[p|P]assword)$" }, no_screen_share = true })
hl.window_rule({ match = { class = "^(1[p|P]assword)$" }, tag = "+floating-window" })
o.window("^(1[p|P]assword)$", { no_screen_share = true, tag = "+floating-window" })
+5 -5
View File
@@ -1,6 +1,6 @@
hl.window_rule({ match = { class = "^(Bitwarden)$" }, no_screen_share = true })
hl.window_rule({ match = { class = "^(Bitwarden)$" }, tag = "+floating-window" })
o.window("^(Bitwarden)$", { no_screen_share = true, tag = "+floating-window" })
-- Bitwarden Chrome Extension.
hl.window_rule({ match = { class = "chrome-nngceckbapebfimnlniiiahkandclblb-Default" }, no_screen_share = true })
hl.window_rule({ match = { class = "chrome-nngceckbapebfimnlniiiahkandclblb-Default" }, tag = "+floating-window" })
o.window("chrome-nngceckbapebfimnlniiiahkandclblb-Default", {
no_screen_share = true,
tag = "+floating-window",
})
+9 -16
View File
@@ -1,19 +1,12 @@
-- Browser types.
hl.window_rule({ match = { class = "((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)" }, tag = "+chromium-based-browser" })
hl.window_rule({ match = { class = "([fF]irefox|zen|librewolf)" }, tag = "+firefox-based-browser" })
hl.window_rule({ match = { tag = "chromium-based-browser" }, tag = "-default-opacity" })
hl.window_rule({ match = { tag = "firefox-based-browser" }, tag = "-default-opacity" })
-- Browser tags and styling.
o.window("((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)", { tag = "+chromium-based-browser" })
o.window("([fF]irefox|zen|librewolf)", { tag = "+firefox-based-browser" })
o.window({ tag = "chromium-based-browser" }, { tag = "-default-opacity", tile = true, opacity = "1.0 0.97" })
o.window({ tag = "firefox-based-browser" }, { tag = "-default-opacity", opacity = "1.0 0.97" })
-- Video apps: remove chromium browser tag so they don't get opacity applied.
hl.window_rule({ match = { class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)" }, tag = "-chromium-based-browser" })
hl.window_rule({ match = { class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)" }, tag = "-default-opacity" })
o.window("(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)", { tag = "-chromium-based-browser" })
o.window("(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)", { tag = "-default-opacity" })
-- Force chromium-based browsers into a tile to deal with --app bug.
hl.window_rule({ match = { tag = "chromium-based-browser" }, tile = true })
-- Only a subtle opacity change, but not for video sites.
hl.window_rule({ match = { tag = "chromium-based-browser" }, opacity = "1.0 0.97" })
hl.window_rule({ match = { tag = "firefox-based-browser" }, opacity = "1.0 0.97" })
-- Hide the screen-sharing notification bar (the "Hide" button on it is broken on Wayland).
hl.window_rule({ match = { title = ".*is sharing.*" }, workspace = "special silent" })
-- Hide screen sharing notification windows.
o.window({ title = ".*is sharing.*" }, { workspace = "special silent" })
+2 -2
View File
@@ -1,2 +1,2 @@
-- Focus floating DaVinci Resolve dialog windows.
hl.window_rule({ match = { class = ".*[Rr]esolve.*", float = true }, stay_focused = true })
-- DaVinci Resolve dialog focus handling.
o.window(".*[Rr]esolve.*", { float = true, stay_focused = true })
+1 -5
View File
@@ -1,5 +1 @@
hl.window_rule({
name = "geforce",
match = { class = "GeForceNOW" },
idle_inhibit = "fullscreen",
})
o.window("GeForceNOW", { idle_inhibit = "fullscreen" })
+1 -5
View File
@@ -1,6 +1,2 @@
-- Disable mouse focus (see https://github.com/basecamp/omarchy/pull/5183#issuecomment-4189299971).
hl.window_rule({
name = "jetbrains-focus",
match = { class = "^(jetbrains-.*)$" },
no_follow_mouse = true,
})
o.window("^(jetbrains-.*)$", { no_follow_mouse = true })
+2 -3
View File
@@ -1,4 +1,3 @@
-- Float LocalSend and fzf file picker.
hl.window_rule({ match = { class = "(Share|localsend)" }, float = true })
hl.window_rule({ match = { class = "(Share|localsend)" }, center = true })
hl.window_rule({ match = { class = "localsend" }, size = { 1100, 700 } })
o.window("(Share|localsend)", { float = true, center = true })
o.window("localsend", { size = { 1100, 700 } })
+1 -6
View File
@@ -1,6 +1 @@
hl.window_rule({
name = "moonlight",
match = { class = "com.moonlight_stream.Moonlight" },
fullscreen = true,
idle_inhibit = "fullscreen",
})
o.window("com.moonlight_stream.Moonlight", { fullscreen = true, idle_inhibit = "fullscreen" })
+11 -9
View File
@@ -1,10 +1,12 @@
-- Picture-in-picture overlays.
hl.window_rule({ match = { title = "(Picture.?in.?[Pp]icture)" }, tag = "+pip" })
hl.window_rule({ match = { tag = "pip" }, tag = "-default-opacity" })
hl.window_rule({ match = { tag = "pip" }, float = true })
hl.window_rule({ match = { tag = "pip" }, pin = true })
hl.window_rule({ match = { tag = "pip" }, size = { 600, 338 } })
hl.window_rule({ match = { tag = "pip" }, keep_aspect_ratio = true })
hl.window_rule({ match = { tag = "pip" }, border_size = 0 })
hl.window_rule({ match = { tag = "pip" }, opacity = "1 1" })
hl.window_rule({ match = { tag = "pip" }, move = { "(monitor_w-window_w-40)", "(monitor_h*0.04)" } })
o.window({ title = "(Picture.?in.?[Pp]icture)" }, { tag = "+pip" })
o.window({ tag = "pip" }, {
tag = "-default-opacity",
float = true,
pin = true,
size = { 600, 338 },
keep_aspect_ratio = true,
border_size = 0,
opacity = "1 1",
move = { "(monitor_w-window_w-40)", "(monitor_h*0.04)" },
})
+1 -2
View File
@@ -1,2 +1 @@
hl.window_rule({ match = { class = "qemu" }, tag = "-default-opacity" })
hl.window_rule({ match = { class = "qemu" }, opacity = "1 1" })
o.window("qemu", { tag = "-default-opacity", opacity = "1 1" })
+6 -4
View File
@@ -1,4 +1,6 @@
hl.window_rule({ match = { class = "com.libretro.RetroArch" }, fullscreen = true })
hl.window_rule({ match = { class = "com.libretro.RetroArch" }, tag = "-default-opacity" })
hl.window_rule({ match = { class = "com.libretro.RetroArch" }, opacity = "1 1" })
hl.window_rule({ match = { class = "com.libretro.RetroArch" }, idle_inhibit = "fullscreen" })
o.window("com.libretro.RetroArch", {
fullscreen = true,
tag = "-default-opacity",
opacity = "1 1",
idle_inhibit = "fullscreen",
})
+4 -8
View File
@@ -1,8 +1,4 @@
-- Float Steam.
hl.window_rule({ match = { class = "steam" }, float = true })
hl.window_rule({ match = { class = "steam", title = "Steam" }, center = true })
hl.window_rule({ match = { class = "steam.*" }, tag = "-default-opacity" })
hl.window_rule({ match = { class = "steam.*" }, opacity = "1 1" })
hl.window_rule({ match = { class = "steam", title = "Steam" }, size = { 1100, 700 } })
hl.window_rule({ match = { class = "steam", title = "Friends List" }, size = { 460, 800 } })
hl.window_rule({ match = { class = "steam" }, idle_inhibit = "fullscreen" })
o.window("steam", { float = true, idle_inhibit = "fullscreen" })
o.window({ class = "steam", title = "Steam" }, { center = true, size = { 1100, 700 } })
o.window("steam.*", { tag = "-default-opacity", opacity = "1 1" })
o.window({ class = "steam", title = "Friends List" }, { size = { 460, 800 } })
+12 -20
View File
@@ -1,26 +1,18 @@
-- Floating windows.
hl.window_rule({ match = { tag = "floating-window" }, float = true })
hl.window_rule({ match = { tag = "floating-window" }, center = true })
hl.window_rule({ match = { tag = "floating-window" }, size = { 875, 600 } })
o.window({ tag = "floating-window" }, { float = true, center = true, size = { 875, 600 } })
hl.window_rule({ match = { class = "(org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.codeberg.dnkl.foot|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv)" }, tag = "+floating-window" })
hl.window_rule({ match = { 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|.*wants to [open|save].*|[C|c]hoose.*)" }, tag = "+floating-window" })
hl.window_rule({ match = { class = "org.gnome.Calculator" }, float = true })
o.window("(org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.codeberg.dnkl.foot|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv)", { tag = "+floating-window" })
o.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|.*wants to [open|save].*|[C|c]hoose.*)" }, { tag = "+floating-window" })
o.window("org.gnome.Calculator", { float = true })
-- Fullscreen screensaver.
hl.window_rule({ match = { class = "org.omarchy.screensaver" }, fullscreen = true })
hl.window_rule({ match = { class = "org.omarchy.screensaver" }, float = true })
hl.window_rule({ match = { class = "org.omarchy.screensaver" }, animation = "slide" })
-- Screen saver should always cover the screen and not be tiled.
o.window("org.omarchy.screensaver", { fullscreen = true, float = true, animation = "slide" })
-- No transparency on media windows.
hl.window_rule({ match = { class = "^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$" }, tag = "-default-opacity" })
hl.window_rule({ match = { class = "^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$" }, opacity = "1 1" })
-- Media/image/video apps should be opaque.
o.window("^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$", { tag = "-default-opacity", opacity = "1 1" })
-- Popped window rounding.
hl.window_rule({ match = { tag = "pop" }, rounding = 8 })
-- Common app-controlled tags.
o.window({ tag = "pop" }, { rounding = 8 })
o.window({ tag = "noidle" }, { idle_inhibit = "always" })
-- Prevent idle while open.
hl.window_rule({ match = { tag = "noidle" }, idle_inhibit = "always" })
-- Image selector.
-- Disable animations for image selector overlay.
hl.layer_rule({ match = { namespace = "omarchy-image-selector" }, no_anim = true, animation = "none" })
+1 -1
View File
@@ -1,2 +1,2 @@
-- Prevent Telegram from stealing focus on new messages.
hl.window_rule({ match = { class = "org.telegram.desktop" }, focus_on_activate = false })
o.window("org.telegram.desktop", { focus_on_activate = false })
+2 -3
View File
@@ -1,4 +1,3 @@
-- Define terminal tag to style them uniformly.
hl.window_rule({ match = { class = "(Alacritty|kitty|com.mitchellh.ghostty|foot)" }, tag = "+terminal" })
hl.window_rule({ match = { tag = "terminal" }, tag = "-default-opacity" })
hl.window_rule({ match = { tag = "terminal" }, opacity = "0.97 0.9" })
o.window("(Alacritty|kitty|com.mitchellh.ghostty|foot)", { tag = "+terminal" })
o.window({ tag = "terminal" }, { tag = "-default-opacity", opacity = "0.97 0.9" })
+2 -2
View File
@@ -1,2 +1,2 @@
-- Float Typora print dialog.
hl.window_rule({ match = { class = "^Typora$", title = "^Print$" }, float = true, center = true })
-- Typora print dialog.
o.window({ class = "^Typora$", title = "^Print$" }, { float = true, center = true })
+8 -6
View File
@@ -1,6 +1,8 @@
-- Webcam overlay for screen recording.
hl.window_rule({ match = { title = "WebcamOverlay" }, float = true })
hl.window_rule({ match = { title = "WebcamOverlay" }, pin = true })
hl.window_rule({ match = { title = "WebcamOverlay" }, no_initial_focus = true })
hl.window_rule({ match = { title = "WebcamOverlay" }, no_dim = true })
hl.window_rule({ match = { title = "WebcamOverlay" }, move = { "(monitor_w-window_w-40)", "(monitor_h-window_h-40)" } })
-- Webcam overlay window.
o.window({ title = "WebcamOverlay" }, {
float = true,
pin = true,
no_initial_focus = true,
no_dim = true,
move = { "(monitor_w-window_w-40)", "(monitor_h-window_h-40)" },
})
+14 -16
View File
@@ -1,18 +1,16 @@
hl.on("hyprland.start", function()
hl.exec_cmd("uwsm-app -- hypridle")
hl.exec_cmd("uwsm-app -- mako")
hl.exec_cmd("! omarchy-toggle-enabled waybar-off && uwsm-app -- waybar")
hl.exec_cmd("uwsm-app -- fcitx5 --disable notificationitem")
hl.exec_cmd("uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill")
hl.exec_cmd("/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1")
hl.exec_cmd("omarchy-first-run")
hl.exec_cmd("omarchy-powerprofiles-init")
hl.exec_cmd("uwsm-app -- omarchy-hyprland-monitor-watch")
o.launch_on_start("hypridle")
o.launch_on_start("mako")
o.exec_on_start("! omarchy-toggle-enabled waybar-off && " .. o.launch("waybar"))
o.launch_on_start("fcitx5 --disable notificationitem")
o.launch_on_start("swaybg -i ~/.config/omarchy/current/background -m fill")
o.exec_on_start("/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1")
o.exec_on_start("omarchy-first-run")
o.exec_on_start("omarchy-powerprofiles-init")
o.launch_on_start("omarchy-hyprland-monitor-watch")
-- Slow app launch fix -- set systemd vars.
hl.exec_cmd("systemctl --user import-environment $(env | cut -d'=' -f 1)")
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
-- Slow app launch fix -- set systemd vars.
o.exec_on_start("systemctl --user import-environment $(env | cut -d'=' -f 1)")
o.exec_on_start("dbus-update-activation-environment --systemd --all")
-- Run post-boot hooks after startup config has loaded.
hl.exec_cmd("sleep 2 && omarchy-hook post-boot")
end)
-- Run post-boot hooks after startup config has loaded.
o.exec_on_start("sleep 2 && omarchy-hook post-boot")
+4 -4
View File
@@ -10,7 +10,7 @@ local function send_shortcut_once(mods, key)
end
end
hl.bind("SUPER + C", send_shortcut_once("CTRL", "Insert"), { description = "Universal copy" })
hl.bind("SUPER + V", send_shortcut_once("SHIFT", "Insert"), { description = "Universal paste" })
hl.bind("SUPER + X", send_shortcut_once("CTRL", "X"), { description = "Universal cut" })
hl.bind("SUPER + CTRL + V", hl.dsp.exec_cmd("omarchy-launch-walker -m clipboard"), { description = "Clipboard manager" })
o.bind("SUPER + C", "Universal copy", send_shortcut_once("CTRL", "Insert"))
o.bind("SUPER + V", "Universal paste", send_shortcut_once("SHIFT", "Insert"))
o.bind("SUPER + X", "Universal cut", send_shortcut_once("CTRL", "X"))
o.bind("SUPER + CTRL + V", "Clipboard manager", { omarchy = "walker -m clipboard" })
+23 -23
View File
@@ -1,29 +1,29 @@
-- Volume, brightness, keyboard backlight, and touchpad controls.
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("omarchy-swayosd-client --output-volume raise"), { locked = true, repeating = true, description = "Volume up" })
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("omarchy-swayosd-client --output-volume lower"), { locked = true, repeating = true, description = "Volume down" })
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("omarchy-swayosd-client --output-volume mute-toggle"), { locked = true, repeating = true, description = "Mute" })
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("omarchy-audio-input-mute"), { locked = true, repeating = true, description = "Mute microphone" })
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("omarchy-brightness-display +5%"), { locked = true, repeating = true, description = "Brightness up" })
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("omarchy-brightness-display 5%-"), { locked = true, repeating = true, description = "Brightness down" })
hl.bind("SHIFT + XF86MonBrightnessUp", hl.dsp.exec_cmd("omarchy-brightness-display 100%"), { locked = true, repeating = true, description = "Brightness maximum" })
hl.bind("SHIFT + XF86MonBrightnessDown", hl.dsp.exec_cmd("omarchy-brightness-display 1%"), { locked = true, repeating = true, description = "Brightness minimum" })
hl.bind("XF86KbdBrightnessUp", hl.dsp.exec_cmd("omarchy-brightness-keyboard up"), { locked = true, repeating = true, description = "Keyboard brightness up" })
hl.bind("XF86KbdBrightnessDown", hl.dsp.exec_cmd("omarchy-brightness-keyboard down"), { locked = true, repeating = true, description = "Keyboard brightness down" })
hl.bind("XF86KbdLightOnOff", hl.dsp.exec_cmd("omarchy-brightness-keyboard cycle"), { locked = true, description = "Keyboard backlight cycle" })
hl.bind("XF86TouchpadToggle", hl.dsp.exec_cmd("omarchy-toggle-touchpad"), { locked = true, description = "Toggle touchpad" })
hl.bind("XF86TouchpadOn", hl.dsp.exec_cmd("omarchy-toggle-touchpad on"), { locked = true, description = "Enable touchpad" })
hl.bind("XF86TouchpadOff", hl.dsp.exec_cmd("omarchy-toggle-touchpad off"), { locked = true, description = "Disable touchpad" })
o.bind("XF86AudioRaiseVolume", "Volume up", "omarchy-swayosd-client --output-volume raise", { locked = true, repeating = true })
o.bind("XF86AudioLowerVolume", "Volume down", "omarchy-swayosd-client --output-volume lower", { locked = true, repeating = true })
o.bind("XF86AudioMute", "Mute", "omarchy-swayosd-client --output-volume mute-toggle", { locked = true, repeating = true })
o.bind("XF86AudioMicMute", "Mute microphone", "omarchy-audio-input-mute", { locked = true, repeating = true })
o.bind("XF86MonBrightnessUp", "Brightness up", "omarchy-brightness-display +5%", { locked = true, repeating = true })
o.bind("XF86MonBrightnessDown", "Brightness down", "omarchy-brightness-display 5%-", { locked = true, repeating = true })
o.bind("SHIFT + XF86MonBrightnessUp", "Brightness maximum", "omarchy-brightness-display 100%", { locked = true, repeating = true })
o.bind("SHIFT + XF86MonBrightnessDown", "Brightness minimum", "omarchy-brightness-display 1%", { locked = true, repeating = true })
o.bind("XF86KbdBrightnessUp", "Keyboard brightness up", "omarchy-brightness-keyboard up", { locked = true, repeating = true })
o.bind("XF86KbdBrightnessDown", "Keyboard brightness down", "omarchy-brightness-keyboard down", { locked = true, repeating = true })
o.bind("XF86KbdLightOnOff", "Keyboard backlight cycle", "omarchy-brightness-keyboard cycle", { locked = true })
o.bind("XF86TouchpadToggle", "Toggle touchpad", "omarchy-toggle-touchpad", { locked = true })
o.bind("XF86TouchpadOn", "Enable touchpad", "omarchy-toggle-touchpad on", { locked = true })
o.bind("XF86TouchpadOff", "Disable touchpad", "omarchy-toggle-touchpad off", { locked = true })
-- Precise volume and brightness controls.
hl.bind("ALT + XF86AudioRaiseVolume", hl.dsp.exec_cmd("omarchy-swayosd-client --output-volume +1"), { locked = true, repeating = true, description = "Volume up precise" })
hl.bind("ALT + XF86AudioLowerVolume", hl.dsp.exec_cmd("omarchy-swayosd-client --output-volume -1"), { locked = true, repeating = true, description = "Volume down precise" })
hl.bind("ALT + XF86MonBrightnessUp", hl.dsp.exec_cmd("omarchy-brightness-display +1%"), { locked = true, repeating = true, description = "Brightness up precise" })
hl.bind("ALT + XF86MonBrightnessDown", hl.dsp.exec_cmd("omarchy-brightness-display 1%-"), { locked = true, repeating = true, description = "Brightness down precise" })
o.bind("ALT + XF86AudioRaiseVolume", "Volume up precise", "omarchy-swayosd-client --output-volume +1", { locked = true, repeating = true })
o.bind("ALT + XF86AudioLowerVolume", "Volume down precise", "omarchy-swayosd-client --output-volume -1", { locked = true, repeating = true })
o.bind("ALT + XF86MonBrightnessUp", "Brightness up precise", "omarchy-brightness-display +1%", { locked = true, repeating = true })
o.bind("ALT + XF86MonBrightnessDown", "Brightness down precise", "omarchy-brightness-display 1%-", { locked = true, repeating = true })
-- Media controls.
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("omarchy-swayosd-client --playerctl next"), { locked = true, description = "Next track" })
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("omarchy-swayosd-client --playerctl play-pause"), { locked = true, description = "Pause" })
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("omarchy-swayosd-client --playerctl play-pause"), { locked = true, description = "Play" })
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("omarchy-swayosd-client --playerctl previous"), { locked = true, description = "Previous track" })
o.bind("XF86AudioNext", "Next track", "omarchy-swayosd-client --playerctl next", { locked = true })
o.bind("XF86AudioPause", "Pause", "omarchy-swayosd-client --playerctl play-pause", { locked = true })
o.bind("XF86AudioPlay", "Play", "omarchy-swayosd-client --playerctl play-pause", { locked = true })
o.bind("XF86AudioPrev", "Previous track", "omarchy-swayosd-client --playerctl previous", { locked = true })
hl.bind("SUPER + XF86AudioMute", hl.dsp.exec_cmd("omarchy-audio-output-switch"), { locked = true, description = "Switch audio output" })
o.bind("SUPER + XF86AudioMute", "Switch audio output", "omarchy-audio-output-switch", { locked = true })
+67 -67
View File
@@ -1,93 +1,93 @@
hl.bind("SUPER + W", hl.dsp.window.close(), { description = "Close window" })
hl.bind("CTRL + ALT + DELETE", hl.dsp.exec_cmd("omarchy-hyprland-window-close-all"), { description = "Close all windows" })
o.bind("SUPER + W", "Close window", hl.dsp.window.close())
o.bind("CTRL + ALT + DELETE", "Close all windows", "omarchy-hyprland-window-close-all")
hl.bind("SUPER + J", hl.dsp.layout("togglesplit"), { description = "Toggle window split" })
hl.bind("SUPER + P", hl.dsp.window.pseudo(), { description = "Pseudo window" })
hl.bind("SUPER + T", hl.dsp.window.float({ action = "toggle" }), { description = "Toggle window floating/tiling" })
hl.bind("SUPER + F", hl.dsp.window.fullscreen({ mode = "fullscreen" }), { description = "Full screen" })
hl.bind("SUPER + CTRL + F", hl.dsp.window.fullscreen_state({ internal = 0, client = 2 }), { description = "Tiled full screen" })
hl.bind("SUPER + ALT + F", hl.dsp.window.fullscreen({ mode = "maximized" }), { description = "Full width" })
hl.bind("SUPER + O", hl.dsp.exec_cmd("omarchy-hyprland-window-pop"), { description = "Pop window out (float & pin)" })
hl.bind("SUPER + L", hl.dsp.exec_cmd("omarchy-hyprland-workspace-layout-toggle"), { description = "Toggle workspace layout" })
o.bind("SUPER + J", "Toggle window split", hl.dsp.layout("togglesplit"))
o.bind("SUPER + P", "Pseudo window", hl.dsp.window.pseudo())
o.bind("SUPER + T", "Toggle window floating/tiling", hl.dsp.window.float({ action = "toggle" }))
o.bind("SUPER + F", "Full screen", hl.dsp.window.fullscreen({ mode = "fullscreen" }))
o.bind("SUPER + CTRL + F", "Tiled full screen", hl.dsp.window.fullscreen_state({ internal = 0, client = 2 }))
o.bind("SUPER + ALT + F", "Full width", hl.dsp.window.fullscreen({ mode = "maximized" }))
o.bind("SUPER + O", "Pop window out (float & pin)", "omarchy-hyprland-window-pop")
o.bind("SUPER + L", "Toggle workspace layout", "omarchy-hyprland-workspace-layout-toggle")
hl.bind("SUPER + LEFT", hl.dsp.focus({ direction = "l" }), { description = "Focus on left window" })
hl.bind("SUPER + RIGHT", hl.dsp.focus({ direction = "r" }), { description = "Focus on right window" })
hl.bind("SUPER + UP", hl.dsp.focus({ direction = "u" }), { description = "Focus on above window" })
hl.bind("SUPER + DOWN", hl.dsp.focus({ direction = "d" }), { description = "Focus on below window" })
o.bind("SUPER + LEFT", "Focus on left window", hl.dsp.focus({ direction = "l" }))
o.bind("SUPER + RIGHT", "Focus on right window", hl.dsp.focus({ direction = "r" }))
o.bind("SUPER + UP", "Focus on above window", hl.dsp.focus({ direction = "u" }))
o.bind("SUPER + DOWN", "Focus on below window", hl.dsp.focus({ direction = "d" }))
for workspace = 1, 10 do
local key = "code:" .. tostring(workspace + 9)
hl.bind("SUPER + " .. key, hl.dsp.focus({ workspace = tostring(workspace) }), { description = "Switch to workspace " .. workspace })
hl.bind("SUPER + SHIFT + " .. key, hl.dsp.window.move({ workspace = tostring(workspace) }), { description = "Move window to workspace " .. workspace })
hl.bind("SUPER + SHIFT + ALT + " .. key, hl.dsp.window.move({ workspace = tostring(workspace), follow = false }), { description = "Move window silently to workspace " .. workspace })
o.bind("SUPER + " .. key, "Switch to workspace " .. workspace, hl.dsp.focus({ workspace = tostring(workspace) }))
o.bind("SUPER + SHIFT + " .. key, "Move window to workspace " .. workspace, hl.dsp.window.move({ workspace = tostring(workspace) }))
o.bind("SUPER + SHIFT + ALT + " .. key, "Move window silently to workspace " .. workspace, hl.dsp.window.move({ workspace = tostring(workspace), follow = false }))
end
hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("scratchpad"), { description = "Toggle scratchpad" })
hl.bind("SUPER + ALT + S", hl.dsp.window.move({ workspace = "special:scratchpad", follow = false }), { description = "Move window to scratchpad" })
o.bind("SUPER + S", "Toggle scratchpad", hl.dsp.workspace.toggle_special("scratchpad"))
o.bind("SUPER + ALT + S", "Move window to scratchpad", hl.dsp.window.move({ workspace = "special:scratchpad", follow = false }))
hl.bind("SUPER + TAB", hl.dsp.focus({ workspace = "e+1" }), { description = "Next workspace" })
hl.bind("SUPER + SHIFT + TAB", hl.dsp.focus({ workspace = "e-1" }), { description = "Previous workspace" })
hl.bind("SUPER + CTRL + TAB", hl.dsp.focus({ workspace = "previous" }), { description = "Former workspace" })
o.bind("SUPER + TAB", "Next workspace", hl.dsp.focus({ workspace = "e+1" }))
o.bind("SUPER + SHIFT + TAB", "Previous workspace", hl.dsp.focus({ workspace = "e-1" }))
o.bind("SUPER + CTRL + TAB", "Former workspace", hl.dsp.focus({ workspace = "previous" }))
hl.bind("SUPER + SHIFT + ALT + LEFT", hl.dsp.workspace.move({ monitor = "l" }), { description = "Move workspace to left monitor" })
hl.bind("SUPER + SHIFT + ALT + RIGHT", hl.dsp.workspace.move({ monitor = "r" }), { description = "Move workspace to right monitor" })
hl.bind("SUPER + SHIFT + ALT + UP", hl.dsp.workspace.move({ monitor = "u" }), { description = "Move workspace to up monitor" })
hl.bind("SUPER + SHIFT + ALT + DOWN", hl.dsp.workspace.move({ monitor = "d" }), { description = "Move workspace to down monitor" })
o.bind("SUPER + SHIFT + ALT + LEFT", "Move workspace to left monitor", hl.dsp.workspace.move({ monitor = "l" }))
o.bind("SUPER + SHIFT + ALT + RIGHT", "Move workspace to right monitor", hl.dsp.workspace.move({ monitor = "r" }))
o.bind("SUPER + SHIFT + ALT + UP", "Move workspace to up monitor", hl.dsp.workspace.move({ monitor = "u" }))
o.bind("SUPER + SHIFT + ALT + DOWN", "Move workspace to down monitor", hl.dsp.workspace.move({ monitor = "d" }))
hl.bind("SUPER + SHIFT + LEFT", hl.dsp.window.swap({ direction = "l" }), { description = "Swap window to the left" })
hl.bind("SUPER + SHIFT + RIGHT", hl.dsp.window.swap({ direction = "r" }), { description = "Swap window to the right" })
hl.bind("SUPER + SHIFT + UP", hl.dsp.window.swap({ direction = "u" }), { description = "Swap window up" })
hl.bind("SUPER + SHIFT + DOWN", hl.dsp.window.swap({ direction = "d" }), { description = "Swap window down" })
o.bind("SUPER + SHIFT + LEFT", "Swap window to the left", hl.dsp.window.swap({ direction = "l" }))
o.bind("SUPER + SHIFT + RIGHT", "Swap window to the right", hl.dsp.window.swap({ direction = "r" }))
o.bind("SUPER + SHIFT + UP", "Swap window up", hl.dsp.window.swap({ direction = "u" }))
o.bind("SUPER + SHIFT + DOWN", "Swap window down", hl.dsp.window.swap({ direction = "d" }))
hl.bind("ALT + TAB", hl.dsp.window.cycle_next(), { description = "Focus on next window" })
hl.bind("ALT + SHIFT + TAB", hl.dsp.window.cycle_next({ next = false }), { description = "Focus on previous window" })
hl.bind("ALT + TAB", hl.dsp.window.bring_to_top(), { description = "Reveal active window on top" })
hl.bind("ALT + SHIFT + TAB", hl.dsp.window.bring_to_top(), { description = "Reveal active window on top" })
o.bind("ALT + TAB", "Focus on next window", hl.dsp.window.cycle_next())
o.bind("ALT + SHIFT + TAB", "Focus on previous window", hl.dsp.window.cycle_next({ next = false }))
o.bind("ALT + TAB", "Reveal active window on top", hl.dsp.window.bring_to_top())
o.bind("ALT + SHIFT + TAB", "Reveal active window on top", hl.dsp.window.bring_to_top())
hl.bind("CTRL + ALT + TAB", hl.dsp.focus({ monitor = "+1" }), { description = "Focus on next monitor" })
hl.bind("CTRL + ALT + SHIFT + TAB", hl.dsp.focus({ monitor = "-1" }), { description = "Focus on previous monitor" })
o.bind("CTRL + ALT + TAB", "Focus on next monitor", hl.dsp.focus({ monitor = "+1" }))
o.bind("CTRL + ALT + SHIFT + TAB", "Focus on previous monitor", hl.dsp.focus({ monitor = "-1" }))
hl.bind("SUPER + code:20", hl.dsp.window.resize({ x = -100, y = 0, relative = true }), { description = "Expand window left" })
hl.bind("SUPER + code:21", hl.dsp.window.resize({ x = 100, y = 0, relative = true }), { description = "Shrink window left" })
hl.bind("SUPER + SHIFT + code:20", hl.dsp.window.resize({ x = 0, y = -100, relative = true }), { description = "Shrink window up" })
hl.bind("SUPER + SHIFT + code:21", hl.dsp.window.resize({ x = 0, y = 100, relative = true }), { description = "Expand window down" })
o.bind("SUPER + code:20", "Expand window left", hl.dsp.window.resize({ x = -100, y = 0, relative = true }))
o.bind("SUPER + code:21", "Shrink window left", hl.dsp.window.resize({ x = 100, y = 0, relative = true }))
o.bind("SUPER + SHIFT + code:20", "Shrink window up", hl.dsp.window.resize({ x = 0, y = -100, relative = true }))
o.bind("SUPER + SHIFT + code:21", "Expand window down", hl.dsp.window.resize({ x = 0, y = 100, relative = true }))
hl.bind("SUPER + ALT + code:20", hl.dsp.window.resize({ x = -25, y = 0, relative = true }), { description = "Expand window left a little" })
hl.bind("SUPER + ALT + code:21", hl.dsp.window.resize({ x = 25, y = 0, relative = true }), { description = "Shrink window left a little" })
hl.bind("SUPER + SHIFT + ALT + code:20", hl.dsp.window.resize({ x = 0, y = -25, relative = true }), { description = "Shrink window up a little" })
hl.bind("SUPER + SHIFT + ALT + code:21", hl.dsp.window.resize({ x = 0, y = 25, relative = true }), { description = "Expand window down a little" })
o.bind("SUPER + ALT + code:20", "Expand window left a little", hl.dsp.window.resize({ x = -25, y = 0, relative = true }))
o.bind("SUPER + ALT + code:21", "Shrink window left a little", hl.dsp.window.resize({ x = 25, y = 0, relative = true }))
o.bind("SUPER + SHIFT + ALT + code:20", "Shrink window up a little", hl.dsp.window.resize({ x = 0, y = -25, relative = true }))
o.bind("SUPER + SHIFT + ALT + code:21", "Expand window down a little", hl.dsp.window.resize({ x = 0, y = 25, relative = true }))
hl.bind("SUPER + CTRL + code:20", hl.dsp.window.resize({ x = -300, y = 0, relative = true }), { description = "Expand window left a lot" })
hl.bind("SUPER + CTRL + code:21", hl.dsp.window.resize({ x = 300, y = 0, relative = true }), { description = "Shrink window left a lot" })
hl.bind("SUPER + CTRL + SHIFT + code:20", hl.dsp.window.resize({ x = 0, y = -300, relative = true }), { description = "Shrink window up a lot" })
hl.bind("SUPER + CTRL + SHIFT + code:21", hl.dsp.window.resize({ x = 0, y = 300, relative = true }), { description = "Expand window down a lot" })
o.bind("SUPER + CTRL + code:20", "Expand window left a lot", hl.dsp.window.resize({ x = -300, y = 0, relative = true }))
o.bind("SUPER + CTRL + code:21", "Shrink window left a lot", hl.dsp.window.resize({ x = 300, y = 0, relative = true }))
o.bind("SUPER + CTRL + SHIFT + code:20", "Shrink window up a lot", hl.dsp.window.resize({ x = 0, y = -300, relative = true }))
o.bind("SUPER + CTRL + SHIFT + code:21", "Expand window down a lot", hl.dsp.window.resize({ x = 0, y = 300, relative = true }))
hl.bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e+1" }), { description = "Scroll active workspace forward" })
hl.bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e-1" }), { description = "Scroll active workspace backward" })
o.bind("SUPER + mouse_down", "Scroll active workspace forward", hl.dsp.focus({ workspace = "e+1" }))
o.bind("SUPER + mouse_up", "Scroll active workspace backward", hl.dsp.focus({ workspace = "e-1" }))
hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true, description = "Move window" })
hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true, description = "Resize window" })
o.bind("SUPER + mouse:272", "Move window", hl.dsp.window.drag(), { mouse = true })
o.bind("SUPER + mouse:273", "Resize window", hl.dsp.window.resize(), { mouse = true })
hl.bind("SUPER + G", hl.dsp.group.toggle(), { description = "Toggle window grouping" })
hl.bind("SUPER + ALT + G", hl.dsp.window.move({ out_of_group = true }), { description = "Move active window out of group" })
o.bind("SUPER + G", "Toggle window grouping", hl.dsp.group.toggle())
o.bind("SUPER + ALT + G", "Move active window out of group", hl.dsp.window.move({ out_of_group = true }))
hl.bind("SUPER + ALT + LEFT", hl.dsp.window.move({ into_group = "l" }), { description = "Move window to group on left" })
hl.bind("SUPER + ALT + RIGHT", hl.dsp.window.move({ into_group = "r" }), { description = "Move window to group on right" })
hl.bind("SUPER + ALT + UP", hl.dsp.window.move({ into_group = "u" }), { description = "Move window to group on top" })
hl.bind("SUPER + ALT + DOWN", hl.dsp.window.move({ into_group = "d" }), { description = "Move window to group on bottom" })
o.bind("SUPER + ALT + LEFT", "Move window to group on left", hl.dsp.window.move({ into_group = "l" }))
o.bind("SUPER + ALT + RIGHT", "Move window to group on right", hl.dsp.window.move({ into_group = "r" }))
o.bind("SUPER + ALT + UP", "Move window to group on top", hl.dsp.window.move({ into_group = "u" }))
o.bind("SUPER + ALT + DOWN", "Move window to group on bottom", hl.dsp.window.move({ into_group = "d" }))
hl.bind("SUPER + ALT + TAB", hl.dsp.group.next(), { description = "Next window in group" })
hl.bind("SUPER + ALT + SHIFT + TAB", hl.dsp.group.prev(), { description = "Previous window in group" })
o.bind("SUPER + ALT + TAB", "Next window in group", hl.dsp.group.next())
o.bind("SUPER + ALT + SHIFT + TAB", "Previous window in group", hl.dsp.group.prev())
hl.bind("SUPER + CTRL + LEFT", hl.dsp.group.prev(), { description = "Move grouped window focus left" })
hl.bind("SUPER + CTRL + RIGHT", hl.dsp.group.next(), { description = "Move grouped window focus right" })
o.bind("SUPER + CTRL + LEFT", "Move grouped window focus left", hl.dsp.group.prev())
o.bind("SUPER + CTRL + RIGHT", "Move grouped window focus right", hl.dsp.group.next())
hl.bind("SUPER + ALT + mouse_down", hl.dsp.group.next(), { description = "Next window in group" })
hl.bind("SUPER + ALT + mouse_up", hl.dsp.group.prev(), { description = "Previous window in group" })
o.bind("SUPER + ALT + mouse_down", "Next window in group", hl.dsp.group.next())
o.bind("SUPER + ALT + mouse_up", "Previous window in group", hl.dsp.group.prev())
for index = 1, 5 do
hl.bind("SUPER + ALT + code:" .. tostring(index + 9), hl.dsp.group.active({ index = index }), { description = "Switch to group window " .. index })
o.bind("SUPER + ALT + code:" .. tostring(index + 9), "Switch to group window " .. index, hl.dsp.group.active({ index = index }))
end
hl.bind("SUPER + code:61", hl.dsp.exec_cmd("omarchy-hyprland-monitor-scaling-cycle"), { description = "Cycle monitor scaling" })
hl.bind("SUPER + ALT + code:61", hl.dsp.exec_cmd("omarchy-hyprland-monitor-scaling-cycle --reverse"), { description = "Cycle monitor scaling backwards" })
o.bind("SUPER + code:61", "Cycle monitor scaling", "omarchy-hyprland-monitor-scaling-cycle")
o.bind("SUPER + ALT + code:61", "Cycle monitor scaling backwards", "omarchy-hyprland-monitor-scaling-cycle --reverse")
+57 -57
View File
@@ -1,73 +1,73 @@
hl.bind("SUPER + SPACE", hl.dsp.exec_cmd("omarchy-launch-walker"), { description = "Launch apps" })
hl.bind("SUPER + CTRL + E", hl.dsp.exec_cmd("omarchy-launch-walker -m symbols"), { description = "Emoji picker" })
hl.bind("SUPER + CTRL + C", hl.dsp.exec_cmd("omarchy-menu capture"), { description = "Capture menu" })
hl.bind("SUPER + CTRL + O", hl.dsp.exec_cmd("omarchy-menu toggle"), { description = "Toggle menu" })
hl.bind("SUPER + CTRL + H", hl.dsp.exec_cmd("omarchy-menu hardware"), { description = "Hardware menu" })
hl.bind("SUPER + ALT + SPACE", hl.dsp.exec_cmd("omarchy-menu"), { description = "Omarchy menu" })
hl.bind("SUPER + SHIFT + code:201", hl.dsp.exec_cmd("omarchy-menu"), { description = "Omarchy menu" })
hl.bind("SUPER + ESCAPE", hl.dsp.exec_cmd("omarchy-menu system"), { description = "System menu" })
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("omarchy-menu system"), { locked = true, description = "Power menu" })
hl.bind("SUPER + K", hl.dsp.exec_cmd("omarchy-menu-keybindings"), { description = "Show key bindings" })
hl.bind("SUPER + ALT + K", hl.dsp.exec_cmd("omarchy-menu-tmux-keybindings"), { description = "Show Tmux key bindings" })
hl.bind("XF86Calculator", hl.dsp.exec_cmd("gnome-calculator"), { description = "Calculator" })
o.bind("SUPER + SPACE", "Launch apps", { omarchy = "walker" })
o.bind("SUPER + CTRL + E", "Emoji picker", { omarchy = "walker -m symbols" })
o.bind_menu("SUPER + CTRL + C", "Capture menu", "capture")
o.bind_menu("SUPER + CTRL + O", "Toggle menu", "toggle")
o.bind_menu("SUPER + CTRL + H", "Hardware menu", "hardware")
o.bind_menu("SUPER + ALT + SPACE", "Omarchy menu", nil)
o.bind_menu("SUPER + SHIFT + code:201", "Omarchy menu", nil)
o.bind_menu("SUPER + ESCAPE", "System menu", "system")
o.bind_menu("XF86PowerOff", "Power menu", "system", { locked = true })
o.bind("SUPER + K", "Show key bindings", "omarchy-menu-keybindings")
o.bind("SUPER + ALT + K", "Show Tmux key bindings", "omarchy-menu-tmux-keybindings")
o.bind("XF86Calculator", "Calculator", "gnome-calculator")
hl.bind("SUPER + SHIFT + SPACE", hl.dsp.exec_cmd("omarchy-toggle-waybar"), { description = "Toggle top bar" })
hl.bind("SUPER + SHIFT + CTRL + UP", hl.dsp.exec_cmd("omarchy-style-waybar-position top"), { description = "Move Waybar to top" })
hl.bind("SUPER + SHIFT + CTRL + DOWN", hl.dsp.exec_cmd("omarchy-style-waybar-position bottom"), { description = "Move Waybar to bottom" })
hl.bind("SUPER + SHIFT + CTRL + LEFT", hl.dsp.exec_cmd("omarchy-style-waybar-position left"), { description = "Move Waybar to left" })
hl.bind("SUPER + SHIFT + CTRL + RIGHT", hl.dsp.exec_cmd("omarchy-style-waybar-position right"), { description = "Move Waybar to right" })
hl.bind("SUPER + CTRL + SPACE", hl.dsp.exec_cmd("omarchy-menu background"), { description = "Background switcher" })
hl.bind("SUPER + SHIFT + CTRL + SPACE", hl.dsp.exec_cmd("omarchy-menu theme"), { description = "Theme menu" })
hl.bind("SUPER + BACKSPACE", hl.dsp.exec_cmd("omarchy-hyprland-window-transparency-toggle"), { description = "Toggle window transparency" })
hl.bind("SUPER + SHIFT + BACKSPACE", hl.dsp.exec_cmd("omarchy-hyprland-window-gaps-toggle"), { description = "Toggle window gaps" })
hl.bind("SUPER + CTRL + BACKSPACE", hl.dsp.exec_cmd("omarchy-hyprland-window-single-square-aspect-toggle"), { description = "Toggle single-window square aspect" })
o.bind("SUPER + SHIFT + SPACE", "Toggle top bar", "omarchy-toggle-waybar")
o.bind("SUPER + SHIFT + CTRL + UP", "Move Waybar to top", "omarchy-style-waybar-position top")
o.bind("SUPER + SHIFT + CTRL + DOWN", "Move Waybar to bottom", "omarchy-style-waybar-position bottom")
o.bind("SUPER + SHIFT + CTRL + LEFT", "Move Waybar to left", "omarchy-style-waybar-position left")
o.bind("SUPER + SHIFT + CTRL + RIGHT", "Move Waybar to right", "omarchy-style-waybar-position right")
o.bind_menu("SUPER + CTRL + SPACE", "Background switcher", "background")
o.bind_menu("SUPER + SHIFT + CTRL + SPACE", "Theme menu", "theme")
o.bind("SUPER + BACKSPACE", "Toggle window transparency", "omarchy-hyprland-window-transparency-toggle")
o.bind("SUPER + SHIFT + BACKSPACE", "Toggle window gaps", "omarchy-hyprland-window-gaps-toggle")
o.bind("SUPER + CTRL + BACKSPACE", "Toggle single-window square aspect", "omarchy-hyprland-window-single-square-aspect-toggle")
hl.bind("SUPER + COMMA", hl.dsp.exec_cmd("makoctl dismiss"), { description = "Dismiss last notification" })
hl.bind("SUPER + SHIFT + COMMA", hl.dsp.exec_cmd("makoctl dismiss --all"), { description = "Dismiss all notifications" })
hl.bind("SUPER + CTRL + COMMA", hl.dsp.exec_cmd("omarchy-toggle-notification-silencing"), { description = "Toggle silencing notifications" })
hl.bind("SUPER + ALT + COMMA", hl.dsp.exec_cmd("makoctl invoke"), { description = "Invoke last notification" })
hl.bind("SUPER + SHIFT + ALT + COMMA", hl.dsp.exec_cmd("makoctl restore"), { description = "Restore last notification" })
o.bind("SUPER + COMMA", "Dismiss last notification", "makoctl dismiss")
o.bind("SUPER + SHIFT + COMMA", "Dismiss all notifications", "makoctl dismiss --all")
o.bind("SUPER + CTRL + COMMA", "Toggle silencing notifications", "omarchy-toggle-notification-silencing")
o.bind("SUPER + ALT + COMMA", "Invoke last notification", "makoctl invoke")
o.bind("SUPER + SHIFT + ALT + COMMA", "Restore last notification", "makoctl restore")
hl.bind("SUPER + CTRL + I", hl.dsp.exec_cmd("omarchy-toggle-idle"), { description = "Toggle locking on idle" })
hl.bind("SUPER + CTRL + N", hl.dsp.exec_cmd("omarchy-toggle-nightlight"), { description = "Toggle nightlight" })
hl.bind("SUPER + CTRL + Delete", hl.dsp.exec_cmd("omarchy-hyprland-monitor-internal toggle"), { description = "Toggle laptop display" })
hl.bind("SUPER + CTRL + ALT + Delete", hl.dsp.exec_cmd("omarchy-hyprland-monitor-internal-mirror toggle"), { description = "Toggle laptop display mirroring" })
hl.bind("switch:on:Lid Switch", hl.dsp.exec_cmd("omarchy-hw-external-monitors && omarchy-hyprland-monitor-internal off"), { locked = true })
hl.bind("switch:off:Lid Switch", hl.dsp.exec_cmd("omarchy-hyprland-monitor-internal on"), { locked = true })
o.bind_toggle("SUPER + CTRL + I", "Toggle locking on idle", "idle")
o.bind_toggle("SUPER + CTRL + N", "Toggle nightlight", "nightlight")
o.bind("SUPER + CTRL + Delete", "Toggle laptop display", "omarchy-hyprland-monitor-internal toggle")
o.bind("SUPER + CTRL + ALT + Delete", "Toggle laptop display mirroring", "omarchy-hyprland-monitor-internal-mirror toggle")
o.bind("switch:on:Lid Switch", nil, "omarchy-hw-external-monitors && omarchy-hyprland-monitor-internal off", { locked = true })
o.bind("switch:off:Lid Switch", nil, "omarchy-hyprland-monitor-internal on", { locked = true })
hl.bind("PRINT", hl.dsp.exec_cmd("omarchy-capture-screenshot"), { description = "Screenshot" })
hl.bind("ALT + PRINT", hl.dsp.exec_cmd("omarchy-menu screenrecord"), { description = "Screenrecording" })
hl.bind("SUPER + PRINT", hl.dsp.exec_cmd("pkill hyprpicker || hyprpicker -a"), { description = "Color picker" })
hl.bind("SUPER + CTRL + PRINT", hl.dsp.exec_cmd("omarchy-capture-text-extraction"), { description = "Extract text (OCR) from screenshot" })
o.bind("PRINT", "Screenshot", "omarchy-capture-screenshot")
o.bind_menu("ALT + PRINT", "Screenrecording", "screenrecord")
o.bind("SUPER + PRINT", "Color picker", "pkill hyprpicker || hyprpicker -a")
o.bind("SUPER + CTRL + PRINT", "Extract text (OCR) from screenshot", "omarchy-capture-text-extraction")
hl.bind("SUPER + CTRL + S", hl.dsp.exec_cmd("omarchy-menu share"), { description = "Share" })
o.bind_menu("SUPER + CTRL + S", "Share", "share")
hl.bind("SUPER + CTRL + PERIOD", hl.dsp.exec_cmd("omarchy-transcode"), { description = "Transcode" })
o.bind("SUPER + CTRL + PERIOD", "Transcode", "omarchy-transcode")
hl.bind("SUPER + CTRL + R", hl.dsp.exec_cmd("omarchy-menu reminder-set"), { description = "Set reminder" })
hl.bind("SUPER + CTRL + ALT + R", hl.dsp.exec_cmd("omarchy-reminder show"), { description = "Show reminders" })
hl.bind("SUPER + SHIFT + CTRL + R", hl.dsp.exec_cmd("omarchy-reminder clear"), { description = "Clear reminders" })
o.bind_menu("SUPER + CTRL + R", "Set reminder", "reminder-set")
o.bind("SUPER + CTRL + ALT + R", "Show reminders", "omarchy-reminder show")
o.bind("SUPER + SHIFT + CTRL + R", "Clear reminders", "omarchy-reminder clear")
hl.bind("SUPER + CTRL + ALT + T", hl.dsp.exec_cmd([[notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")"]]), { description = "Show time" })
hl.bind("SUPER + CTRL + ALT + B", hl.dsp.exec_cmd([[notify-send -u low "$(omarchy-battery-status)"]]), { description = "Show battery remaining" })
hl.bind("SUPER + CTRL + ALT + W", hl.dsp.exec_cmd([[notify-send -u low "$(omarchy-weather-status)"]]), { description = "Show weather" })
o.bind("SUPER + CTRL + ALT + T", "Show time", "omarchy-notification-time")
o.bind("SUPER + CTRL + ALT + B", "Show battery remaining", "omarchy-notification-battery")
o.bind("SUPER + CTRL + ALT + W", "Show weather", "omarchy-notification-weather")
hl.bind("SUPER + CTRL + A", hl.dsp.exec_cmd("omarchy-launch-audio"), { description = "Audio controls" })
hl.bind("SUPER + CTRL + B", hl.dsp.exec_cmd("omarchy-launch-bluetooth"), { description = "Bluetooth controls" })
hl.bind("SUPER + CTRL + W", hl.dsp.exec_cmd("omarchy-launch-wifi"), { description = "Wifi controls" })
hl.bind("SUPER + CTRL + T", hl.dsp.exec_cmd("omarchy-launch-tui btop"), { description = "Activity" })
o.bind("SUPER + CTRL + A", "Audio controls", { omarchy = "audio" })
o.bind("SUPER + CTRL + B", "Bluetooth controls", { omarchy = "bluetooth" })
o.bind("SUPER + CTRL + W", "Wifi controls", { omarchy = "wifi" })
o.bind("SUPER + CTRL + T", "Activity", { tui = "btop" })
hl.bind("SUPER + CTRL + X", hl.dsp.exec_cmd("voxtype record toggle"), { description = "Toggle dictation" })
hl.bind("F9", hl.dsp.exec_cmd("voxtype record start"), { description = "Start dictation (push-to-talk)" })
hl.bind("F9", hl.dsp.exec_cmd("voxtype record stop"), { release = true, description = "Stop dictation (push-to-talk)" })
o.bind("SUPER + CTRL + X", "Toggle dictation", "voxtype record toggle")
o.bind("F9", "Start dictation (push-to-talk)", "voxtype record start")
o.bind("F9", "Stop dictation (push-to-talk)", "voxtype record stop", { release = true })
hl.bind("SUPER + CTRL + Z", function()
o.bind("SUPER + CTRL + Z", "Zoom in", function()
local zoom = hl.get_config("cursor.zoom_factor") or 1
hl.config({ cursor = { zoom_factor = zoom + 1 } })
end, { description = "Zoom in" })
end)
hl.bind("SUPER + CTRL + ALT + Z", function()
o.bind("SUPER + CTRL + ALT + Z", "Reset zoom", function()
hl.config({ cursor = { zoom_factor = 1 } })
end, { description = "Reset zoom" })
end)
hl.bind("SUPER + CTRL + L", hl.dsp.exec_cmd("omarchy-system-lock"), { description = "Lock system" })
o.bind("SUPER + CTRL + L", "Lock system", "omarchy-system-lock")
+103
View File
@@ -0,0 +1,103 @@
-- Shared helpers for Hyprland Lua configuration.
o = o or {}
local function shell_quote(value)
return "'" .. tostring(value):gsub("'", "'\\''") .. "'"
end
local function command_from(value, description)
if type(value) ~= "table" then
return value
end
if value.omarchy then
return "omarchy-launch-" .. value.omarchy
elseif value.focus and value.launch then
return o.launch_sole(value.focus, value.launch)
elseif value.launch then
return o.launch(value.launch)
elseif value.webapp then
if value.focus then
return o.launch_webapp_sole(description, value.webapp)
else
return o.launch_webapp(value.webapp)
end
elseif value.tui then
if value.focus then
return "omarchy-launch-or-focus-tui " .. shell_quote(value.tui)
else
return "omarchy-launch-tui " .. shell_quote(value.tui)
end
end
return value
end
function o.bind(keys, description, dispatcher, options)
local opts = options or {}
if description then
opts.description = description
end
dispatcher = command_from(dispatcher, description)
if type(dispatcher) == "string" then
dispatcher = hl.dsp.exec_cmd(dispatcher)
end
hl.bind(keys, dispatcher, opts)
end
function o.launch(command)
return "uwsm-app -- " .. command
end
function o.exec_on_start(command)
hl.on("hyprland.start", function()
hl.exec_cmd(command)
end)
end
function o.launch_on_start(command)
o.exec_on_start(o.launch(command))
end
function o.launch_webapp(url)
return "omarchy-launch-webapp " .. shell_quote(url)
end
function o.launch_webapp_sole(name, url)
return "omarchy-launch-or-focus-webapp " .. shell_quote(name) .. " " .. shell_quote(url)
end
function o.launch_sole(match, command)
return "omarchy-launch-or-focus " .. shell_quote(match) .. " " .. shell_quote(o.launch(command))
end
function o.bind_menu(keys, description, menu, options)
o.bind(keys, description, menu and ("omarchy-menu " .. menu) or "omarchy-menu", options)
end
function o.bind_toggle(keys, description, toggle, options)
o.bind(keys, description, "omarchy-toggle-" .. toggle, options)
end
function o.notify(message)
return "notify-send -u low " .. shell_quote(message)
end
function o.window(match, rules)
rules.match = rules.match or {}
if type(match) == "string" then
rules.match.class = match
else
for key, value in pairs(match) do
rules.match[key] = value
end
end
hl.window_rule(rules)
end
+24
View File
@@ -0,0 +1,24 @@
-- Omarchy Hyprland setup: helpers, defaults, and current theme overrides.
require("default.hypr.helpers")
-- Use Omarchy defaults, but don't edit these directly.
require("default.hypr.autostart")
require("default.hypr.bindings.media")
require("default.hypr.bindings.clipboard")
require("default.hypr.bindings.tiling-v2")
require("default.hypr.bindings.utilities")
require("default.hypr.envs")
require("default.hypr.looknfeel")
require("default.hypr.input")
require("default.hypr.windows")
-- Current theme overrides.
do
local paths = require("default.hypr.paths")
local theme = io.open(paths.config_home .. "/omarchy/current/theme/hyprland.lua", "r")
if theme then
theme:close()
require("omarchy.current.theme.hyprland")
end
end
+1 -1
View File
@@ -2,7 +2,7 @@
-- Lua files loaded with require() have separate local scopes, so modules that
-- need these paths import this table instead of repeating os.getenv() lookups.
local home = os.getenv("HOME") or ""
local home = os.getenv("HOME")
return {
home = home,
+7 -7
View File
@@ -4,10 +4,10 @@ require("default.hypr.bindings.tiling-v2")
require("default.hypr.bindings.utilities")
-- Application bindings without Omarchy's preinstalled web apps, TUIs, or desktop apps.
hl.bind("SUPER + RETURN", hl.dsp.exec_cmd([[uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)"]]), { description = "Terminal" })
hl.bind("SUPER + SHIFT + RETURN", hl.dsp.exec_cmd("omarchy-launch-browser"), { description = "Browser" })
hl.bind("SUPER + SHIFT + F", hl.dsp.exec_cmd("uwsm-app -- nautilus --new-window"), { description = "File manager" })
hl.bind("SUPER + ALT + SHIFT + F", hl.dsp.exec_cmd([[uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"]]), { description = "File manager (cwd)" })
hl.bind("SUPER + SHIFT + B", hl.dsp.exec_cmd("omarchy-launch-browser"), { description = "Browser" })
hl.bind("SUPER + SHIFT + ALT + B", hl.dsp.exec_cmd("omarchy-launch-browser --private"), { description = "Browser (private)" })
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("omarchy-launch-editor"), { description = "Editor" })
o.bind("SUPER + RETURN", "Terminal", { omarchy = "terminal" })
o.bind("SUPER + SHIFT + RETURN", "Browser", { omarchy = "browser" })
o.bind("SUPER + SHIFT + F", "File manager", { omarchy = "nautilus" })
o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)", { omarchy = "nautilus-cwd" })
o.bind("SUPER + SHIFT + B", "Browser", { omarchy = "browser" })
o.bind("SUPER + SHIFT + ALT + B", "Browser (private)", { omarchy = "browser --private" })
o.bind("SUPER + SHIFT + N", "Editor", { omarchy = "editor" })
+3 -3
View File
@@ -1,9 +1,9 @@
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
hl.window_rule({ match = { class = ".*" }, suppress_event = "maximize" })
o.window(".*", { suppress_event = "maximize" })
-- Tag all windows for default opacity (apps can override with -default-opacity tag).
hl.window_rule({ match = { class = ".*" }, tag = "+default-opacity" })
o.window(".*", { tag = "+default-opacity" })
-- Fix some dragging issues with XWayland.
hl.window_rule({
@@ -22,4 +22,4 @@ hl.window_rule({
require("default.hypr.apps")
-- Apply default opacity after apps have had a chance to opt out.
hl.window_rule({ match = { tag = "default-opacity" }, opacity = "0.97 0.9" })
o.window({ tag = "default-opacity" }, { opacity = "0.97 0.9" })
@@ -12,7 +12,7 @@ ShellRoot {
property string imageRows: ""
property string selectionFile: Quickshell.env("OMARCHY_IMAGE_SELECTOR_SELECTION_FILE") || Quickshell.env("OMARCHY_BACKGROUND_SELECTION_FILE")
property string selectedImage: Quickshell.env("OMARCHY_IMAGE_SELECTOR_SELECTED")
property string colorsFile: Quickshell.env("OMARCHY_IMAGE_SELECTOR_COLORS_FILE") || (Quickshell.env("HOME") + "/.config/omarchy/current/theme/background-switcher-colors.json")
property string colorsFile: Quickshell.env("OMARCHY_IMAGE_SELECTOR_COLORS_FILE") || (Quickshell.env("HOME") + "/.config/omarchy/current/theme/quickshell.json")
property int selectedIndex: 0
property bool imagesLoaded: false
property bool opened: false
@@ -29,11 +29,12 @@ ShellRoot {
property color background: "#101315"
property color foreground: "#cacccc"
property int expandedWidth: 768
property int expandedHeight: 475
property int sliceWidth: 108
property int sliceHeight: 432
property int sliceSpacing: -30
property int skewOffset: 28
property int bottomChromeHeight: showLabels ? (filterable ? 104 : 74) : 30
property int bottomChromeHeight: showLabels ? (filterable ? 104 : 74) : (filterable ? 60 : 30)
function fileUrl(path) {
return "file://" + path.split("/").map(encodeURIComponent).join("/")
@@ -52,8 +53,8 @@ ShellRoot {
}
function currentPath() {
if (imageModel.count === 0 || !itemMatches(selectedIndex)) return ""
return imageModel.get(selectedIndex).filePath
if (imageArray.length === 0 || !itemMatches(selectedIndex)) return ""
return imageArray[selectedIndex].filePath
}
function nameForPath(path) {
@@ -72,19 +73,19 @@ ShellRoot {
}
function itemMatches(index) {
if (index < 0 || index >= imageModel.count) return false
if (index < 0 || index >= imageArray.length) return false
if (!filterText) return true
var path = imageModel.get(index).filePath
var path = imageArray[index].filePath
var needle = filterText.toLowerCase()
return nameForPath(path).toLowerCase().indexOf(needle) !== -1 || labelForPath(path).toLowerCase().indexOf(needle) !== -1
}
function matchingCount() {
if (!filterText) return imageModel.count
if (!filterText) return imageArray.length
var count = 0
for (var i = 0; i < imageModel.count; i++) {
for (var i = 0; i < imageArray.length; i++) {
if (itemMatches(i)) count++
}
@@ -92,7 +93,7 @@ ShellRoot {
}
function firstMatchingIndex() {
for (var i = 0; i < imageModel.count; i++) {
for (var i = 0; i < imageArray.length; i++) {
if (itemMatches(i)) return i
}
@@ -117,9 +118,9 @@ ShellRoot {
}
function select(index, immediate) {
if (imageModel.count === 0) return
if (imageArray.length === 0) return
if (index < 0) index = 0
else if (index >= imageModel.count) index = imageModel.count - 1
else if (index >= imageArray.length) index = imageArray.length - 1
if (!itemMatches(index)) return
if (index === selectedIndex && immediate !== true) return
@@ -127,19 +128,16 @@ ShellRoot {
}
function selectAdjacent(direction) {
if (!filterText) {
select(selectedIndex + direction)
return
}
var count = imageArray.length
if (count === 0) return
var index = selectedIndex + direction
while (index >= 0 && index < imageModel.count) {
var index = selectedIndex
for (var i = 0; i < count; i++) {
index = (index + direction + count) % count
if (itemMatches(index)) {
select(index)
return
}
index += direction
}
}
@@ -211,15 +209,27 @@ ShellRoot {
}
function loadRows(rows) {
var newImages = []
var seen = {}
var paths = rows.split("\n")
for (var i = 0; i < paths.length; i++) {
var row = paths[i]
if (!row) continue
var columns = row.split("\t")
root.addImage(columns[0], columns[1])
var path = columns[0]
if (!path) continue
var fileName = path.split("/").pop()
if (seen[fileName]) continue
seen[fileName] = true
newImages.push({
filePath: path,
fileName: fileName,
thumbnailPath: columns[1] || path
})
}
root.imageArray = newImages
root.select(root.selectedImageIndex(), true)
root.imagesLoaded = true
root.opened = true
@@ -241,10 +251,10 @@ ShellRoot {
showLabels = nextShowLabels === true || nextShowLabels === "true"
filterable = nextFilterable === true || nextFilterable === "true"
filterText = ""
colorsFile = nextColorsFile || (Quickshell.env("HOME") + "/.config/omarchy/current/theme/background-switcher-colors.json")
colorsFile = nextColorsFile || (Quickshell.env("HOME") + "/.config/omarchy/current/theme/quickshell.json")
if (nextColorsRaw)
loadColors(nextColorsRaw)
imageModel.clear()
imageArray = []
selectedIndex = 0
imagesLoaded = false
opened = false
@@ -256,23 +266,11 @@ ShellRoot {
}
}
ListModel { id: imageModel }
function addImage(path, thumbnailPath) {
if (!path) return
var fileName = path.split("/").pop()
for (var i = imageModel.count - 1; i >= 0; i--) {
if (imageModel.get(i).fileName === fileName)
imageModel.remove(i)
}
imageModel.append({ filePath: path, fileName: fileName, thumbnailPath: thumbnailPath || path })
}
property var imageArray: []
function selectedImageIndex() {
for (var i = 0; i < imageModel.count; i++) {
if (imageModel.get(i).filePath === selectedImage)
for (var i = 0; i < imageArray.length; i++) {
if (imageArray[i].filePath === selectedImage)
return i
}
@@ -380,7 +378,7 @@ ShellRoot {
Item {
id: card
width: Math.min(parent.width - 80, root.expandedWidth + 13 * (root.sliceWidth + root.sliceSpacing) + 40)
height: root.sliceHeight + 30 + root.bottomChromeHeight
height: root.expandedHeight + 30 + root.bottomChromeHeight
anchors.centerIn: parent
MouseArea { anchors.fill: parent; onClicked: {} }
@@ -415,10 +413,10 @@ ShellRoot {
if (root.filterText.length > 0)
root.updateFilter(root.filterText.slice(0, -1))
event.accepted = true
} else if (event.key === Qt.Key_Left) {
} else if (event.key === Qt.Key_Left || (event.key === Qt.Key_Tab && event.modifiers & Qt.ShiftModifier) || event.key === Qt.Key_Backtab) {
root.selectAdjacent(-1)
event.accepted = true
} else if (event.key === Qt.Key_Right) {
} else if (event.key === Qt.Key_Right || event.key === Qt.Key_Tab) {
root.selectAdjacent(1)
event.accepted = true
} else if (root.filterable && event.text && event.text.length === 1 && event.text.charCodeAt(0) >= 32 && event.text.charCodeAt(0) !== 127 && (event.modifiers === Qt.NoModifier || event.modifiers === Qt.ShiftModifier)) {
@@ -430,14 +428,16 @@ ShellRoot {
Component.onCompleted: forceActiveFocus()
Repeater {
model: imageModel
model: root.imageArray.length
delegate: Item {
id: item
required property int index
required property string filePath
required property string fileName
required property string thumbnailPath
readonly property var imageData: root.imageArray[index]
readonly property string filePath: imageData ? imageData.filePath : ""
readonly property string fileName: imageData ? imageData.fileName : ""
readonly property string thumbnailPath: imageData ? imageData.thumbnailPath : ""
readonly property bool matched: root.itemMatches(index)
readonly property int relativeIndex: root.filteredPosition(index) - root.selectedFilteredPosition()
@@ -447,7 +447,8 @@ ShellRoot {
visible: nearby
x: selected ? carousel.previewX : (relativeIndex < 0 ? carousel.previewX + relativeIndex * carousel.itemStep : carousel.previewX + root.expandedWidth + root.sliceSpacing + (relativeIndex - 1) * carousel.itemStep)
width: selected ? root.expandedWidth : root.sliceWidth
height: carousel.height
height: selected ? root.expandedHeight : root.sliceHeight
y: selected ? 0 : (root.expandedHeight - root.sliceHeight) / 2
z: selected ? 100 : 50 - Math.min(Math.abs(relativeIndex), 40)
readonly property real skAbs: Math.abs(root.skewOffset)
@@ -478,25 +479,6 @@ ShellRoot {
}
}
Shape {
x: item.selected ? 4 : 2
y: item.selected ? 10 : 5
width: item.width
height: item.height
opacity: item.selected ? 0.5 : 0.32
antialiasing: true
preferredRendererType: Shape.CurveRenderer
ShapePath {
fillColor: root.background
strokeColor: "transparent"
startX: item.topLeft; startY: 0
PathLine { x: item.topRight; y: 0 }
PathLine { x: item.bottomRight; y: item.height }
PathLine { x: item.bottomLeft; y: item.height }
PathLine { x: item.topLeft; y: 0 }
}
}
Item {
anchors.fill: parent
layer.enabled: true
@@ -513,7 +495,7 @@ ShellRoot {
anchors.fill: parent
source: item.nearby ? root.fileUrl(item.thumbnailPath) : ""
fillMode: Image.PreserveAspectCrop
asynchronous: false
asynchronous: true
cache: true
smooth: true
}
@@ -521,7 +503,6 @@ ShellRoot {
Rectangle {
anchors.fill: parent
color: root.withAlpha(root.background, item.selected ? 0 : 0.42)
Behavior on color { ColorAnimation { duration: 120 } }
}
}
@@ -568,14 +549,14 @@ ShellRoot {
}
Text {
visible: root.filterable
visible: root.filterable && root.filterText
anchors.top: selectedLabel.bottom
anchors.topMargin: 8
anchors.horizontalCenter: carousel.horizontalCenter
width: root.expandedWidth
text: root.filterText ? ("Filter: " + root.filterText + " (" + root.matchingCount() + ")") : "Type to filter"
text: root.filterText
color: root.foreground
opacity: root.filterText ? 0.85 : 0.55
opacity: 0.85
style: Text.Outline
styleColor: root.withAlpha(root.background, 0.7)
font.pixelSize: 14
+116 -116
View File
@@ -1,137 +1,137 @@
-- Gum Style (generic) Variables
hl.env("FOREGROUND", "#{{ foreground }}")
hl.env("BACKGROUND", "#{{ background }}")
hl.env("BORDER_FOREGROUND", "#{{ accent }}")
hl.env("BORDER_BACKGROUND", "#{{ background }}")
hl.env("FOREGROUND", "{{ foreground }}")
hl.env("BACKGROUND", "{{ background }}")
hl.env("BORDER_FOREGROUND", "{{ accent }}")
hl.env("BORDER_BACKGROUND", "{{ background }}")
-- Gum Confirm Style Variables
hl.env("GUM_CONFIRM_PROMPT_FOREGROUND", "#{{ accent }}")
hl.env("GUM_CONFIRM_PROMPT_BACKGROUND", "#{{ background }}")
hl.env("GUM_CONFIRM_SELECTED_FOREGROUND", "#{{ selection_foreground }}")
hl.env("GUM_CONFIRM_SELECTED_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_CONFIRM_UNSELECTED_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_CONFIRM_UNSELECTED_BACKGROUND", "#{{ background }}")
hl.env("GUM_CONFIRM_PROMPT_FOREGROUND", "{{ accent }}")
hl.env("GUM_CONFIRM_PROMPT_BACKGROUND", "{{ background }}")
hl.env("GUM_CONFIRM_SELECTED_FOREGROUND", "{{ selection_foreground }}")
hl.env("GUM_CONFIRM_SELECTED_BACKGROUND", "{{ selection_background }}")
hl.env("GUM_CONFIRM_UNSELECTED_FOREGROUND", "{{ foreground }}")
hl.env("GUM_CONFIRM_UNSELECTED_BACKGROUND", "{{ background }}")
-- Gum Input Style Variables
hl.env("GUM_INPUT_PROMPT_FOREGROUND", "#{{ accent }}")
hl.env("GUM_INPUT_PROMPT_BACKGROUND", "#{{ background }}")
hl.env("GUM_INPUT_PLACEHOLDER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_INPUT_PLACEHOLDER_BACKGROUND", "#{{ background }}")
hl.env("GUM_INPUT_CURSOR_FOREGROUND", "#{{ cursor }}")
hl.env("GUM_INPUT_CURSOR_BACKGROUND", "#{{ background }}")
hl.env("GUM_INPUT_HEADER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_INPUT_HEADER_BACKGROUND", "#{{ background }}")
hl.env("GUM_INPUT_PROMPT_FOREGROUND", "{{ accent }}")
hl.env("GUM_INPUT_PROMPT_BACKGROUND", "{{ background }}")
hl.env("GUM_INPUT_PLACEHOLDER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_INPUT_PLACEHOLDER_BACKGROUND", "{{ background }}")
hl.env("GUM_INPUT_CURSOR_FOREGROUND", "{{ cursor }}")
hl.env("GUM_INPUT_CURSOR_BACKGROUND", "{{ background }}")
hl.env("GUM_INPUT_HEADER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_INPUT_HEADER_BACKGROUND", "{{ background }}")
-- Gum Choose Style Variables
hl.env("GUM_CHOOSE_CURSOR_FOREGROUND", "#{{ accent }}")
hl.env("GUM_CHOOSE_CURSOR_BACKGROUND", "#{{ background }}")
hl.env("GUM_CHOOSE_HEADER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_CHOOSE_HEADER_BACKGROUND", "#{{ background }}")
hl.env("GUM_CHOOSE_ITEM_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_CHOOSE_ITEM_BACKGROUND", "#{{ background }}")
hl.env("GUM_CHOOSE_SELECTED_FOREGROUND", "#{{ selection_foreground }}")
hl.env("GUM_CHOOSE_SELECTED_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_CHOOSE_CURSOR_FOREGROUND", "{{ accent }}")
hl.env("GUM_CHOOSE_CURSOR_BACKGROUND", "{{ background }}")
hl.env("GUM_CHOOSE_HEADER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_CHOOSE_HEADER_BACKGROUND", "{{ background }}")
hl.env("GUM_CHOOSE_ITEM_FOREGROUND", "{{ foreground }}")
hl.env("GUM_CHOOSE_ITEM_BACKGROUND", "{{ background }}")
hl.env("GUM_CHOOSE_SELECTED_FOREGROUND", "{{ selection_foreground }}")
hl.env("GUM_CHOOSE_SELECTED_BACKGROUND", "{{ selection_background }}")
-- Gum Filter Style Variables
hl.env("GUM_FILTER_PROMPT_FOREGROUND", "#{{ accent }}")
hl.env("GUM_FILTER_PROMPT_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_TEXT_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_FILTER_TEXT_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_MATCH_FOREGROUND", "#{{ accent }}")
hl.env("GUM_FILTER_CURSOR_TEXT_FOREGROUND", "#{{ cursor }}")
hl.env("GUM_FILTER_CURSOR_TEXT_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_SELECTED_FOREGROUND", "#{{ selection_foreground }}")
hl.env("GUM_FILTER_SELECTED_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_FILTER_INDICATOR_FOREGROUND", "#{{ accent }}")
hl.env("GUM_FILTER_HEADER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_FILTER_MATCH_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_HEADER_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_PLACEHOLDER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_FILTER_PLACEHOLDER_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_INDICATOR_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_SELECTED_PREFIX_FOREGROUND", "#{{ selection_foreground }}")
hl.env("GUM_FILTER_SELECTED_PREFIX_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_FILTER_UNSELECTED_PREFIX_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_FILTER_UNSELECTED_PREFIX_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILTER_PROMPT_FOREGROUND", "{{ accent }}")
hl.env("GUM_FILTER_PROMPT_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_TEXT_FOREGROUND", "{{ foreground }}")
hl.env("GUM_FILTER_TEXT_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_MATCH_FOREGROUND", "{{ accent }}")
hl.env("GUM_FILTER_CURSOR_TEXT_FOREGROUND", "{{ cursor }}")
hl.env("GUM_FILTER_CURSOR_TEXT_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_SELECTED_FOREGROUND", "{{ selection_foreground }}")
hl.env("GUM_FILTER_SELECTED_BACKGROUND", "{{ selection_background }}")
hl.env("GUM_FILTER_INDICATOR_FOREGROUND", "{{ accent }}")
hl.env("GUM_FILTER_HEADER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_FILTER_MATCH_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_HEADER_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_PLACEHOLDER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_FILTER_PLACEHOLDER_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_INDICATOR_BACKGROUND", "{{ background }}")
hl.env("GUM_FILTER_SELECTED_PREFIX_FOREGROUND", "{{ selection_foreground }}")
hl.env("GUM_FILTER_SELECTED_PREFIX_BACKGROUND", "{{ selection_background }}")
hl.env("GUM_FILTER_UNSELECTED_PREFIX_FOREGROUND", "{{ color8 }}")
hl.env("GUM_FILTER_UNSELECTED_PREFIX_BACKGROUND", "{{ background }}")
-- Gum Table Style Variables
hl.env("GUM_TABLE_HEADER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_TABLE_HEADER_BACKGROUND", "#{{ background }}")
hl.env("GUM_TABLE_CELL_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_TABLE_CELL_BACKGROUND", "#{{ background }}")
hl.env("GUM_TABLE_BORDER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_TABLE_BORDER_BACKGROUND", "#{{ background }}")
hl.env("GUM_TABLE_SELECTED_FOREGROUND", "#{{ selection_foreground }}")
hl.env("GUM_TABLE_SELECTED_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_TABLE_HEADER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_TABLE_HEADER_BACKGROUND", "{{ background }}")
hl.env("GUM_TABLE_CELL_FOREGROUND", "{{ foreground }}")
hl.env("GUM_TABLE_CELL_BACKGROUND", "{{ background }}")
hl.env("GUM_TABLE_BORDER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_TABLE_BORDER_BACKGROUND", "{{ background }}")
hl.env("GUM_TABLE_SELECTED_FOREGROUND", "{{ selection_foreground }}")
hl.env("GUM_TABLE_SELECTED_BACKGROUND", "{{ selection_background }}")
-- Gum Spin Style Variables
hl.env("GUM_SPIN_SPINNER_FOREGROUND", "#{{ accent }}")
hl.env("GUM_SPIN_SPINNER_BACKGROUND", "#{{ background }}")
hl.env("GUM_SPIN_TITLE_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_SPIN_TITLE_BACKGROUND", "#{{ background }}")
hl.env("GUM_SPIN_SPINNER_FOREGROUND", "{{ accent }}")
hl.env("GUM_SPIN_SPINNER_BACKGROUND", "{{ background }}")
hl.env("GUM_SPIN_TITLE_FOREGROUND", "{{ foreground }}")
hl.env("GUM_SPIN_TITLE_BACKGROUND", "{{ background }}")
-- Gum File Style Variables
hl.env("GUM_FILE_CURSOR_FOREGROUND", "#{{ cursor }}")
hl.env("GUM_FILE_CURSOR_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_SYMLINK_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_FILE_SYMLINK_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_DIRECTORY_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_FILE_DIRECTORY_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_FILE_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_FILE_FILE_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_PERMISSIONS_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_FILE_PERMISSIONS_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_SELECTED_FOREGROUND", "#{{ selection_foreground }}")
hl.env("GUM_FILE_SELECTED_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_FILE_FILE_SIZE_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_FILE_FILE_SIZE_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_HEADER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_FILE_HEADER_BACKGROUND", "#{{ background }}")
hl.env("GUM_FILE_CURSOR_FOREGROUND", "{{ cursor }}")
hl.env("GUM_FILE_CURSOR_BACKGROUND", "{{ background }}")
hl.env("GUM_FILE_SYMLINK_FOREGROUND", "{{ foreground }}")
hl.env("GUM_FILE_SYMLINK_BACKGROUND", "{{ background }}")
hl.env("GUM_FILE_DIRECTORY_FOREGROUND", "{{ foreground }}")
hl.env("GUM_FILE_DIRECTORY_BACKGROUND", "{{ background }}")
hl.env("GUM_FILE_FILE_FOREGROUND", "{{ foreground }}")
hl.env("GUM_FILE_FILE_BACKGROUND", "{{ background }}")
hl.env("GUM_FILE_PERMISSIONS_FOREGROUND", "{{ color8 }}")
hl.env("GUM_FILE_PERMISSIONS_BACKGROUND", "{{ background }}")
hl.env("GUM_FILE_SELECTED_FOREGROUND", "{{ selection_foreground }}")
hl.env("GUM_FILE_SELECTED_BACKGROUND", "{{ selection_background }}")
hl.env("GUM_FILE_FILE_SIZE_FOREGROUND", "{{ color8 }}")
hl.env("GUM_FILE_FILE_SIZE_BACKGROUND", "{{ background }}")
hl.env("GUM_FILE_HEADER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_FILE_HEADER_BACKGROUND", "{{ background }}")
-- Gum Pager Style Variables
hl.env("GUM_PAGER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_PAGER_BACKGROUND", "#{{ background }}")
hl.env("GUM_PAGER_LINE_NUMBER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_PAGER_LINE_NUMBER_BACKGROUND", "#{{ background }}")
hl.env("GUM_PAGER_MATCH_FOREGROUND", "#{{ accent }}")
hl.env("GUM_PAGER_MATCH_BACKGROUND", "#{{ background }}")
hl.env("GUM_PAGER_MATCH_HIGH_FOREGROUND", "#{{ accent }}")
hl.env("GUM_PAGER_MATCH_HIGH_BACKGROUND", "#{{ background }}")
hl.env("GUM_PAGER_HELP_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_PAGER_HELP_BACKGROUND", "#{{ background }}")
hl.env("GUM_PAGER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_PAGER_BACKGROUND", "{{ background }}")
hl.env("GUM_PAGER_LINE_NUMBER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_PAGER_LINE_NUMBER_BACKGROUND", "{{ background }}")
hl.env("GUM_PAGER_MATCH_FOREGROUND", "{{ accent }}")
hl.env("GUM_PAGER_MATCH_BACKGROUND", "{{ background }}")
hl.env("GUM_PAGER_MATCH_HIGH_FOREGROUND", "{{ accent }}")
hl.env("GUM_PAGER_MATCH_HIGH_BACKGROUND", "{{ background }}")
hl.env("GUM_PAGER_HELP_FOREGROUND", "{{ color8 }}")
hl.env("GUM_PAGER_HELP_BACKGROUND", "{{ background }}")
-- Gum Write Style Variables
hl.env("GUM_WRITE_BASE_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_WRITE_BASE_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_CURSOR_LINE_NUMBER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_WRITE_CURSOR_LINE_NUMBER_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_CURSOR_LINE_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_WRITE_CURSOR_LINE_BACKGROUND", "#{{ selection_background }}")
hl.env("GUM_WRITE_CURSOR_FOREGROUND", "#{{ cursor }}")
hl.env("GUM_WRITE_CURSOR_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_END_OF_BUFFER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_WRITE_END_OF_BUFFER_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_LINE_NUMBER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_WRITE_LINE_NUMBER_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_HEADER_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_WRITE_HEADER_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_PLACEHOLDER_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_WRITE_PLACEHOLDER_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_PROMPT_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_WRITE_PROMPT_BACKGROUND", "#{{ background }}")
hl.env("GUM_WRITE_BASE_FOREGROUND", "{{ foreground }}")
hl.env("GUM_WRITE_BASE_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_CURSOR_LINE_NUMBER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_WRITE_CURSOR_LINE_NUMBER_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_CURSOR_LINE_FOREGROUND", "{{ foreground }}")
hl.env("GUM_WRITE_CURSOR_LINE_BACKGROUND", "{{ selection_background }}")
hl.env("GUM_WRITE_CURSOR_FOREGROUND", "{{ cursor }}")
hl.env("GUM_WRITE_CURSOR_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_END_OF_BUFFER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_WRITE_END_OF_BUFFER_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_LINE_NUMBER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_WRITE_LINE_NUMBER_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_HEADER_FOREGROUND", "{{ foreground }}")
hl.env("GUM_WRITE_HEADER_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_PLACEHOLDER_FOREGROUND", "{{ color8 }}")
hl.env("GUM_WRITE_PLACEHOLDER_BACKGROUND", "{{ background }}")
hl.env("GUM_WRITE_PROMPT_FOREGROUND", "{{ foreground }}")
hl.env("GUM_WRITE_PROMPT_BACKGROUND", "{{ background }}")
-- Gum Log Style Variables
hl.env("GUM_LOG_LEVEL_FOREGROUND", "#{{ accent }}")
hl.env("GUM_LOG_LEVEL_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_TIME_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_LOG_TIME_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_PREFIX_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_LOG_PREFIX_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_MESSAGE_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_LOG_MESSAGE_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_KEY_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_LOG_KEY_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_VALUE_FOREGROUND", "#{{ foreground }}")
hl.env("GUM_LOG_VALUE_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_SEPARATOR_FOREGROUND", "#{{ color8 }}")
hl.env("GUM_LOG_SEPARATOR_BACKGROUND", "#{{ background }}")
hl.env("GUM_LOG_LEVEL_FOREGROUND", "{{ accent }}")
hl.env("GUM_LOG_LEVEL_BACKGROUND", "{{ background }}")
hl.env("GUM_LOG_TIME_FOREGROUND", "{{ color8 }}")
hl.env("GUM_LOG_TIME_BACKGROUND", "{{ background }}")
hl.env("GUM_LOG_PREFIX_FOREGROUND", "{{ foreground }}")
hl.env("GUM_LOG_PREFIX_BACKGROUND", "{{ background }}")
hl.env("GUM_LOG_MESSAGE_FOREGROUND", "{{ foreground }}")
hl.env("GUM_LOG_MESSAGE_BACKGROUND", "{{ background }}")
hl.env("GUM_LOG_KEY_FOREGROUND", "{{ foreground }}")
hl.env("GUM_LOG_KEY_BACKGROUND", "{{ background }}")
hl.env("GUM_LOG_VALUE_FOREGROUND", "{{ foreground }}")
hl.env("GUM_LOG_VALUE_BACKGROUND", "{{ background }}")
hl.env("GUM_LOG_SEPARATOR_FOREGROUND", "{{ color8 }}")
hl.env("GUM_LOG_SEPARATOR_BACKGROUND", "{{ background }}")
+1 -1
View File
@@ -4,7 +4,6 @@
1password-beta
1password-cli
aether
alacritty
alsa-utils
asdcontrol
avahi
@@ -39,6 +38,7 @@ fcitx5-qt
fd
ffmpegthumbnailer
fontconfig
foot
fzf
github-cli
gnome-calculator
-5
View File
@@ -1,5 +0,0 @@
echo "Add .config/brave-flags.conf by default to ensure Brave runs under Wayland"
if [[ ! -f ~/.config/brave-flags.conf ]]; then
cp $OMARCHY_PATH/config/brave-flags.conf ~/.config/
fi
-10
View File
@@ -1,10 +0,0 @@
echo "Checking and correcting Snapper configs if needed"
if command -v snapper &>/dev/null; then
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
sudo snapper -c root create-config /
fi
if ! sudo snapper list-configs 2>/dev/null | grep -q "home"; then
sudo snapper -c home create-config /home
fi
fi
-3
View File
@@ -1,3 +0,0 @@
echo "Stop restarting waybar on unlock to see if we have solved the stacking problem for good"
omarchy-refresh-hypridle
-2
View File
@@ -1,2 +0,0 @@
echo "Update plymouth theme to avoid freetype2 issue that broke the styled login screen"
omarchy-refresh-plymouth
-3
View File
@@ -1,3 +0,0 @@
echo "Add a blurred background to the lock screen"
omarchy-refresh-hyprlock
-2
View File
@@ -1,2 +0,0 @@
echo "Enable fast shutdown"
source $OMARCHY_PATH/install/config/fast-shutdown.sh
-26
View File
@@ -1,26 +0,0 @@
echo -e "Offer new Omarchy hotkeys\n"
cat <<EOF
* Add SUPER + C / V for unified clipboard in both terminal and other apps
* Add SUPER + CTRL + V for clipboard manager
* Move fullscreen from F11 to SUPER + F
* Keep terminal on SUPER + RETURN
* Move app keys from SUPER + [LETTER] to SHIFT + SUPER + [LETTER]
* Move toggling tiling/floating to SUPER + T
EOF
echo -e "\nSwitching to new hotkeys will change your existing bindings.\nThe old ones will be backed up as ~/.config/hypr/bindings.conf.bak\n"
if gum confirm "Switch to new hotkeys?"; then
cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak
sed -i 's/SUPER SHIFT,/SUPER SHIFT ALT,/g' ~/.config/hypr/bindings.conf
sed -i 's/SUPER,/SUPER SHIFT,/g' ~/.config/hypr/bindings.conf
sed -i 's/SUPER SHIFT, return, Terminal/SUPER, RETURN, Terminal/gI' ~/.config/hypr/bindings.conf
sed -i 's/SUPER ALT,/SUPER SHIFT ALT,/g' ~/.config/hypr/bindings.conf
sed -i 's/SUPER CTRL,/SUPER SHIFT CTRL,/g' ~/.config/hypr/bindings.conf
sed -i 's/SUPER SHIFT ALT, G, Google Messages/SUPER SHIFT CTRL, G, Google Messages/g' ~/.config/hypr/bindings.conf
sed -i 's|source = ~/.local/share/omarchy/default/hypr/bindings/tiling\.conf|source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf\
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf|' ~/.config/hypr/hyprland.conf
fi
-9
View File
@@ -1,9 +0,0 @@
echo "Add default Ctrl+P binding for imv; backup existing config if present"
if [[ -f ~/.config/imv/config ]]; then
cp ~/.config/imv/config ~/.config/imv/config.bak.$(date +%s)
else
mkdir -p ~/.config/imv
fi
cp ~/.local/share/omarchy/config/imv/config ~/.config/imv/config
+2 -1
View File
@@ -1,3 +1,4 @@
echo "Install Copy URL extension for Brave"
omarchy-refresh-config brave-flags.conf
mkdir -p ~/.config
cp "$OMARCHY_PATH/config/chromium-flags.conf" ~/.config/brave-flags.conf
-5
View File
@@ -1,5 +0,0 @@
echo "Increase Walker limit on how many entries can be shown to 256"
if ! grep -q "max_results" ~/.config/walker/config.toml; then
sed -i '/^\[providers\]$/a max_results = 256' ~/.config/walker/config.toml
fi
-4
View File
@@ -1,4 +0,0 @@
echo "Update imv config with new keybindings"
mkdir -p ~/.config/imv
cp $OMARCHY_PATH/config/imv/config ~/.config/imv/
-6
View File
@@ -1,6 +0,0 @@
echo "Link new theme picker config"
mkdir -p ~/.config/elephant/menus
ln -snf $OMARCHY_PATH/default/elephant/omarchy_themes.lua ~/.config/elephant/menus/omarchy_themes.lua
sed -i '/"menus",/d' ~/.config/walker/config.toml
omarchy-restart-walker
-3
View File
@@ -1,3 +0,0 @@
echo "Refresh Walker config to ensure compatibility with latest version"
omarchy-refresh-walker
-7
View File
@@ -1,7 +0,0 @@
if omarchy-cmd-present btrfs && omarchy-cmd-present snapper; then
echo "Adjust snapper space limits & enable btrfs quota"
sudo sed -i 's/^SPACE_LIMIT="0.5"/SPACE_LIMIT="0.3"/' /etc/snapper/configs/{root,home} 2>/dev/null
sudo sed -i 's/^FREE_LIMIT="0.2"/FREE_LIMIT="0.3"/' /etc/snapper/configs/{root,home} 2>/dev/null
sudo btrfs quota enable /
fi
-10
View File
@@ -1,10 +0,0 @@
echo "Update terminal scrolltouchpad setting to Hyprland 0.53 style"
if grep -q "scrolltouchpad" ~/.config/hypr/input.conf; then
sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:\(([^)]+)\)\s*$/windowrule = match:class (\2), scroll_touchpad \1/' ~/.config/hypr/input.conf
sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:([^ ]+)\s*$/windowrule = match:class \2, scroll_touchpad \1/' ~/.config/hypr/input.conf
sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), tag:terminal\s*$/windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5\nwindowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2/' ~/.config/hypr/input.conf
fi
# Ensure we restart to pair new Hyprland settings with new version
omarchy-state set reboot-required
-3
View File
@@ -1,3 +0,0 @@
echo "Use correct idle-timer sensitive timeouts for lock screen"
sed -i 's/timeout = 300/timeout = 151/' ~/.config/hypr/hypridle.conf
-3
View File
@@ -1,3 +0,0 @@
echo "Add Omarchy AI skill for assistance tailoring the system"
source $OMARCHY_PATH/install/config/omarchy-ai-skill.sh
-3
View File
@@ -1,3 +0,0 @@
echo "Set power profile based on source switching (AC or Battery)"
source $OMARCHY_PATH/install/config/powerprofilesctl-rules.sh
-3
View File
@@ -1,3 +0,0 @@
echo "Disable WiFi power save on AC power"
source $OMARCHY_PATH/install/config/wifi-powersave-rules.sh
-9
View File
@@ -1,9 +0,0 @@
echo "Re-run scrolltouchpad migration for configs with trailing whitespace"
if grep -q "scrolltouchpad" ~/.config/hypr/input.conf; then
sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:\(([^)]+)\)\s*$/windowrule = match:class (\2), scroll_touchpad \1/' ~/.config/hypr/input.conf
sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:([^ ]+)\s*$/windowrule = match:class \2, scroll_touchpad \1/' ~/.config/hypr/input.conf
sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), tag:terminal\s*$/windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5\nwindowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2/' ~/.config/hypr/input.conf
omarchy-state set reboot-required
fi
-2
View File
@@ -1,2 +0,0 @@
echo "Turn off keyboard backlight when idle"
cp $OMARCHY_PATH/config/hypr/hypridle.conf ~/.config/hypr/hypridle.conf
-3
View File
@@ -1,3 +0,0 @@
echo "Add LocalSend entry to Nautilus context menu"
source $OMARCHY_PATH/install/config/nautilus-python.sh
-16
View File
@@ -1,16 +0,0 @@
echo "Enable GPU in voxtype if Vulkan is available"
if omarchy-cmd-present voxtype; then
if omarchy-hw-vulkan; then
echo "Vulkan is available, enabling GPU in voxtype"
voxtype setup gpu --enable || true
fi
# see https://github.com/peteonrails/voxtype/commit/ce6e9919cbe54cb8808dcb3cdd3bcb3260d7b900
# earlier versions of voxtype hard-coded the non-GPU backend in the systemd service file,
# so we need to re-run setup to update it to use /usr/bin/voxtype (the symlink)
voxtype setup systemd
systemctl --user restart voxtype
omarchy-restart-waybar
fi
-9
View File
@@ -1,9 +0,0 @@
echo "Set Chromium appearance mode to device (follow system) by default"
echo '{"browser":{"theme":{"color_scheme":0}}}' | sudo tee /usr/lib/chromium/initial_preferences >/dev/null
# Update existing Chromium profiles to use "device" instead of "dark"
PREFS="$HOME/.config/chromium/Default/Preferences"
if [[ -f "$PREFS" ]] && command -v jq &>/dev/null; then
jq '.browser.theme.color_scheme = 0' "$PREFS" > "$PREFS.tmp" && mv "$PREFS.tmp" "$PREFS"
fi
-6
View File
@@ -1,6 +0,0 @@
echo "Rename lock screen command in Hypridle config"
if grep -q 'omarchy-lock-screen' ~/.config/hypr/hypridle.conf; then
sed -i 's/omarchy-lock-screen/omarchy-system-lock/g' ~/.config/hypr/hypridle.conf
omarchy-restart-hypridle
fi
+1 -1
View File
@@ -1,3 +1,3 @@
echo "Install npm package wrappers"
echo "Install npm package wrappers using pnpm with 5-day security lag"
source "$OMARCHY_PATH/install/packaging/npm.sh"
+26
View File
@@ -0,0 +1,26 @@
echo "Add Alt+Enter split and Alt+Escape close keybindings to tmux"
tmux_config="$HOME/.config/tmux/tmux.conf"
if [[ -f $tmux_config ]]; then
changed=0
if ! grep -qxF 'bind -n M-Enter split-window -v -c "#{pane_current_path}"' "$tmux_config"; then
printf '\nbind -n M-Enter split-window -v -c "#{pane_current_path}"\n' >>"$tmux_config"
changed=1
fi
if ! grep -qxF 'bind -n M-S-Enter split-window -h -c "#{pane_current_path}"' "$tmux_config"; then
printf 'bind -n M-S-Enter split-window -h -c "#{pane_current_path}"\n' >>"$tmux_config"
changed=1
fi
if ! grep -qxF 'bind -n M-Escape kill-pane' "$tmux_config"; then
printf 'bind -n M-Escape kill-pane\n' >>"$tmux_config"
changed=1
fi
if (( changed )); then
omarchy-restart-tmux
fi
fi
+3
View File
@@ -0,0 +1,3 @@
echo "Refresh theme files to pick up Hyprland changes"
omarchy-theme-refresh
+3
View File
@@ -0,0 +1,3 @@
echo "Refresh Hyprland Lua language server config"
omarchy-refresh-config hypr/.luarc.json
+11
View File
@@ -0,0 +1,11 @@
echo "Set BROWSER to Omarchy browser launcher for detached terminal URL opens"
if [[ -f ~/.config/uwsm/default ]]; then
if grep -q '^export BROWSER=' ~/.config/uwsm/default; then
sed -i 's|^export BROWSER=.*|export BROWSER=omarchy-launch-browser|' ~/.config/uwsm/default
else
printf '\n# Used by terminal programs (like gh) to open URLs detached from the terminal process tree\nexport BROWSER=omarchy-launch-browser\n' >> ~/.config/uwsm/default
fi
else
omarchy-refresh-config uwsm/default
fi
+1 -1
View File
@@ -15,4 +15,4 @@ hl.config({
})
-- Kanagawa backdrop is too strong for default opacity.
hl.window_rule({ match = { tag = "terminal" }, opacity = "0.98 0.95" })
o.window({ tag = "terminal" }, { opacity = "0.98 0.95" })
+1 -1
View File
@@ -1 +1 @@
3.8.0
4.0.0.alpha