mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-02 12:47:49 +02:00
Compare commits
@@ -82,6 +82,7 @@ Use these instead of raw shell commands:
|
||||
- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands
|
||||
- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages
|
||||
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
||||
- `omarchy-pkg-drop` - remove packages; use this instead of raw `pacman -R*`
|
||||
- `omarchy-notification-send` - send desktop notifications; do not call `notify-send` directly
|
||||
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 147 KiB |
+1
-1
@@ -51,7 +51,7 @@ GROUP_DESCRIPTIONS[mako]="Mako notification controls"
|
||||
GROUP_DESCRIPTIONS[menu]="Omarchy menu commands"
|
||||
GROUP_DESCRIPTIONS[migrate]="Migration runner"
|
||||
GROUP_DESCRIPTIONS[notification]="Notification helpers"
|
||||
GROUP_DESCRIPTIONS[npx]="NPX package wrappers"
|
||||
GROUP_DESCRIPTIONS[npm]="NPM package wrappers"
|
||||
GROUP_DESCRIPTIONS[pkg]="Package management helpers"
|
||||
GROUP_DESCRIPTIONS[plymouth]="Plymouth boot theme management"
|
||||
GROUP_DESCRIPTIONS[powerprofiles]="Power profile management"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Executable
+92
@@ -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" >/dev/null
|
||||
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" >/dev/null
|
||||
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."
|
||||
@@ -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
|
||||
|
||||
@@ -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}"
|
||||
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Launch Files
|
||||
|
||||
exec setsid uwsm-app -- nautilus --new-window
|
||||
Executable
+5
@@ -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)"
|
||||
Executable
+6
@@ -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)" "$@"
|
||||
Executable
+5
@@ -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"
|
||||
+4
-2
@@ -86,7 +86,8 @@ aur_install_and_launch() {
|
||||
}
|
||||
|
||||
show_learn_menu() {
|
||||
case $(menu "Learn" " Keybindings\n Omarchy\n Hyprland\n Arch\n Neovim\n Bash") in
|
||||
case $(menu "Learn" " Keybindings\n Tmux keybindings\n Omarchy\n Hyprland\n Arch\n Neovim\n Bash") in
|
||||
*Tmux*) omarchy-menu-tmux-keybindings ;;
|
||||
*Keybindings*) omarchy-menu-keybindings ;;
|
||||
*Omarchy*) omarchy-launch-webapp "https://learn.omacom.io/2/the-omarchy-manual" ;;
|
||||
*Hyprland*) omarchy-launch-webapp "https://wiki.hypr.land/" ;;
|
||||
@@ -556,11 +557,12 @@ show_install_browser_menu() {
|
||||
}
|
||||
|
||||
show_install_service_menu() {
|
||||
case $(menu "Install" " Dropbox\n Tailscale\n NordVPN [AUR]\n ONCE\n Bitwarden\n Chromium Account") in
|
||||
case $(menu "Install" " Dropbox\n Tailscale\n NordVPN [AUR]\n ONCE\n☀ Sunshine\n Bitwarden\n Chromium Account") in
|
||||
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
||||
*Tailscale*) present_terminal omarchy-install-tailscale ;;
|
||||
*NordVPN*) present_terminal omarchy-install-nordvpn ;;
|
||||
*ONCE*) present_terminal omarchy-install-once ;;
|
||||
*Sunshine*) present_terminal omarchy-install-service-sunshine ;;
|
||||
*Bitwarden*) install_and_launch "Bitwarden" "bitwarden bitwarden-cli" "bitwarden" ;;
|
||||
*Chromium*) present_terminal omarchy-install-chromium-google-account ;;
|
||||
*) show_install_menu ;;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Executable
+248
@@ -0,0 +1,248 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Display Tmux keybindings defined in your configuration using walker for an interactive search menu.
|
||||
# omarchy:args=[--print|-p] [--config <path>]
|
||||
|
||||
print_only=false
|
||||
config_file="${TMUX_CONF:-$HOME/.config/tmux/tmux.conf}"
|
||||
|
||||
while (($#)); do
|
||||
case "$1" in
|
||||
--print|-p)
|
||||
print_only=true
|
||||
;;
|
||||
--config)
|
||||
shift
|
||||
config_file="$1"
|
||||
;;
|
||||
*)
|
||||
config_file="$1"
|
||||
;;
|
||||
esac
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ ! -f $config_file ]]; then
|
||||
default_config="${OMARCHY_PATH:-$HOME/.local/share/omarchy}/config/tmux/tmux.conf"
|
||||
|
||||
if [[ -f $default_config ]]; then
|
||||
config_file="$default_config"
|
||||
else
|
||||
echo "Tmux config not found: $config_file" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
output_keybindings() {
|
||||
awk '
|
||||
function trim(value) {
|
||||
gsub(/^[ \t]+|[ \t]+$/, "", value)
|
||||
return value
|
||||
}
|
||||
|
||||
function key_part_text(part, is_modifier, part_count) {
|
||||
gsub(/^\\/, "", part)
|
||||
|
||||
if (is_modifier && part == "C") return "CTRL"
|
||||
if (is_modifier && part == "M") return "ALT"
|
||||
if (is_modifier && part == "S") return "SHIFT"
|
||||
if (part == "Space") return "SPACE"
|
||||
if (part == "BSpace") return "BACKSPACE"
|
||||
if (part == "BTab") return "SHIFT + TAB"
|
||||
if (part == "PPage") return "PAGE UP"
|
||||
if (part == "NPage") return "PAGE DOWN"
|
||||
if (part == "DC") return "DELETE"
|
||||
if (part == "IC") return "INSERT"
|
||||
if (part_count == 1 && part ~ /^[a-z]$/) return part
|
||||
|
||||
return toupper(part)
|
||||
}
|
||||
|
||||
function key_text(key, parts, count, i, part, text) {
|
||||
gsub(/\\/, "", key)
|
||||
count = split(key, parts, "-")
|
||||
text = ""
|
||||
|
||||
for (i = 1; i <= count; i++) {
|
||||
part = key_part_text(parts[i], i < count, count)
|
||||
text = text (text == "" ? "" : " + ") part
|
||||
}
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
function table_text(table) {
|
||||
if (table == "copy-mode-vi") return "COPY MODE"
|
||||
if (table == "copy-mode") return "COPY MODE"
|
||||
if (table == "prefix") return "PREFIX"
|
||||
|
||||
gsub(/-/, " ", table)
|
||||
return toupper(table)
|
||||
}
|
||||
|
||||
function pretty_command(command) {
|
||||
gsub(/\\;/, ";", command)
|
||||
gsub(/[{}]/, "", command)
|
||||
gsub(/^[ \t]+|[ \t]+$/, "", command)
|
||||
gsub(/[ \t]+/, " ", command)
|
||||
return command
|
||||
}
|
||||
|
||||
function command_action(command, normalized, target) {
|
||||
normalized = pretty_command(command)
|
||||
|
||||
if (normalized ~ /omarchy-menu-tmux-keybindings/) return "Show Tmux keybindings"
|
||||
if (normalized ~ /^send(-keys)? -X begin-selection/) return "Begin selection"
|
||||
if (normalized ~ /^send(-keys)? -X copy-selection-and-cancel/) return "Copy selection"
|
||||
if (normalized ~ /^send-prefix/) return "Send prefix"
|
||||
if (normalized ~ /^source-file/) return "Reload config"
|
||||
if (normalized ~ /^split-window -v/) return "Split pane vertically"
|
||||
if (normalized ~ /^split-window -h/) return "Split pane horizontally"
|
||||
if (normalized ~ /^kill-pane/) return "Kill pane"
|
||||
if (normalized ~ /^select-pane -L/) return "Focus pane left"
|
||||
if (normalized ~ /^select-pane -R/) return "Focus pane right"
|
||||
if (normalized ~ /^select-pane -U/) return "Focus pane up"
|
||||
if (normalized ~ /^select-pane -D/) return "Focus pane down"
|
||||
if (normalized ~ /^resize-pane -L/) return "Resize pane left"
|
||||
if (normalized ~ /^resize-pane -R/) return "Resize pane right"
|
||||
if (normalized ~ /^resize-pane -U/) return "Resize pane up"
|
||||
if (normalized ~ /^resize-pane -D/) return "Resize pane down"
|
||||
if (normalized ~ /^swap-pane -t "?left-of"?/) return "Move pane left"
|
||||
if (normalized ~ /^swap-pane -t "?right-of"?/) return "Move pane right"
|
||||
if (normalized ~ /^swap-pane -t "?up-of"?/) return "Move pane up"
|
||||
if (normalized ~ /^swap-pane -t "?down-of"?/) return "Move pane down"
|
||||
if (normalized ~ /^swap-pane -U/) return "Move pane left"
|
||||
if (normalized ~ /^swap-pane -D/) return "Move pane right"
|
||||
if (normalized ~ /rename-window/) return "Rename window"
|
||||
if (normalized ~ /^new-window/) return "New window"
|
||||
if (normalized ~ /^kill-window/) return "Kill window"
|
||||
|
||||
if (match(normalized, /^select-window -t ([^ ;]+)/, target)) {
|
||||
gsub(/^:=?/, "", target[1])
|
||||
|
||||
if (target[1] == "-1") return "Previous window"
|
||||
if (target[1] == "+1") return "Next window"
|
||||
|
||||
return "Switch to window " target[1]
|
||||
}
|
||||
|
||||
if (normalized ~ /^swap-window -t -1/) return "Move window left"
|
||||
if (normalized ~ /^swap-window -t \+1/) return "Move window right"
|
||||
if (normalized ~ /rename-session/) return "Rename session"
|
||||
if (normalized ~ /^new-session/) return "New session"
|
||||
if (normalized ~ /^kill-session/) return "Kill session"
|
||||
if (normalized ~ /^switch-client -p/) return "Previous session"
|
||||
if (normalized ~ /^switch-client -n/) return "Next session"
|
||||
|
||||
return normalized
|
||||
}
|
||||
|
||||
function add_record(combo, action) {
|
||||
records[++record_count] = sprintf("%-32s → %s", combo, action)
|
||||
}
|
||||
|
||||
function parse_bind(line, words, count, i, table, global, key, command, combo, action) {
|
||||
count = split(line, words, /[ \t]+/)
|
||||
i = 2
|
||||
table = "prefix"
|
||||
global = 0
|
||||
|
||||
while (i <= count && words[i] ~ /^-/) {
|
||||
if (words[i] == "-n") {
|
||||
global = 1
|
||||
i++
|
||||
} else if (words[i] == "-T") {
|
||||
table = words[i + 1]
|
||||
i += 2
|
||||
} else if (words[i] == "-r") {
|
||||
i++
|
||||
} else {
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
key = words[i]
|
||||
i++
|
||||
|
||||
command = ""
|
||||
for (; i <= count; i++) {
|
||||
command = command (command == "" ? "" : " ") words[i]
|
||||
}
|
||||
|
||||
if (key == "" || command == "") return
|
||||
|
||||
if (global) {
|
||||
combo = key_text(key)
|
||||
} else if (table == "prefix") {
|
||||
combo = "PREFIX + " key_text(key)
|
||||
} else {
|
||||
combo = table_text(table) " + " key_text(key)
|
||||
}
|
||||
|
||||
action = command_action(command)
|
||||
add_record(combo, action)
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
prefix = "C-b"
|
||||
prefix2 = ""
|
||||
}
|
||||
|
||||
{
|
||||
line = trim($0)
|
||||
|
||||
if (line == "") next
|
||||
if (line ~ /^#/) next
|
||||
|
||||
if (line ~ /^(set|set-option|setw|set-window-option)[ \t]/) {
|
||||
word_count = split(line, words, /[ \t]+/)
|
||||
|
||||
for (i = 2; i <= word_count; i++) {
|
||||
if (words[i] == "prefix") prefix = words[i + 1]
|
||||
if (words[i] == "prefix2") prefix2 = words[i + 1]
|
||||
}
|
||||
|
||||
next
|
||||
}
|
||||
|
||||
if (line ~ /^(bind|bind-key)[ \t]/) parse_bind(line)
|
||||
}
|
||||
|
||||
END {
|
||||
prefix_description = key_text(prefix)
|
||||
|
||||
if (prefix2 != "" && prefix2 != "None") {
|
||||
prefix_description = prefix_description " / " key_text(prefix2)
|
||||
}
|
||||
|
||||
printf "%-32s → %s\n", "PREFIX", prefix_description
|
||||
|
||||
add_record("PREFIX + {", "Move pane left")
|
||||
add_record("PREFIX + }", "Move pane right")
|
||||
|
||||
for (i = 1; i <= record_count; i++) print records[i]
|
||||
}
|
||||
' "$config_file"
|
||||
}
|
||||
|
||||
if [[ $print_only == "true" ]]; then
|
||||
output_keybindings
|
||||
exit 0
|
||||
fi
|
||||
|
||||
records=$(output_keybindings)
|
||||
|
||||
if [[ -z $WAYLAND_DISPLAY ]] || omarchy-cmd-missing walker; then
|
||||
printf '%s\n' "$records"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
monitor_height=$(hyprctl monitors -j 2>/dev/null | jq -r '.[] | select(.focused == true) | .height' 2>/dev/null)
|
||||
|
||||
if [[ ! $monitor_height =~ ^[0-9]+$ ]] || ((monitor_height <= 0)); then
|
||||
monitor_height=900
|
||||
fi
|
||||
|
||||
menu_height=$((monitor_height * 40 / 100))
|
||||
printf '%s\n' "$records" | walker --dmenu -p 'Tmux keybindings' --width 800 --height "$menu_height" >/dev/null
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Show the current battery status notification
|
||||
|
||||
omarchy-notification-send -g -u low "$(omarchy-battery-status)"
|
||||
Executable
+5
@@ -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")"
|
||||
Executable
+5
@@ -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)"
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install an npx wrapper for a given npm package.
|
||||
# omarchy:summary=Install a pnpm dlx wrapper for a given npm package.
|
||||
# omarchy:args=<package> [command-name]
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
echo "Usage: omarchy-npx-install <package> [command-name]"
|
||||
echo "Usage: omarchy-npm-install <package> [command-name]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -23,8 +23,13 @@ if ! node_root="\$(mise where node@latest 2>/dev/null)"; then
|
||||
node_root="\$(mise where node@latest)"
|
||||
fi
|
||||
|
||||
node_bin="\$node_root/bin/node"
|
||||
npx_bin="\$node_root/bin/npx"
|
||||
if omarchy-cmd-missing pnpm; then
|
||||
echo "Installing pnpm for \$package..."
|
||||
omarchy-pkg-add pnpm
|
||||
hash -r
|
||||
fi
|
||||
|
||||
export PNPM_CONFIG_MINIMUM_RELEASE_AGE=7200
|
||||
|
||||
ensure_bin_runtime() {
|
||||
local bin_path=\$1
|
||||
@@ -51,15 +56,15 @@ exec_package_bin() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Resolve the package bin inside npx, then run it with node@latest available for node shebangs.
|
||||
# Resolve the package bin inside pnpm dlx, then run it with node@latest available for node shebangs.
|
||||
# Some wrappers are aliases, e.g. playwright-cli wraps the playwright bin.
|
||||
"\$node_bin" "\$npx_bin" --yes --prefer-online --package "\$package" -- true
|
||||
PATH="\$node_root/bin:\$PATH" pnpm dlx --package "\$package" true
|
||||
|
||||
package_bin_path=\$("\$node_bin" "\$npx_bin" --yes --package "\$package" -- which "\$package" 2>/dev/null)
|
||||
package_bin_path=\$(PATH="\$node_root/bin:\$PATH" pnpm dlx --package "\$package" which "\$package" 2>/dev/null)
|
||||
exec_package_bin "\$package_bin_path" "\$@"
|
||||
|
||||
# Scoped packages like @openai/codex expose an unscoped bin like codex.
|
||||
package_bin_path=\$("\$node_bin" "\$npx_bin" --yes --package "\$package" -- which "\$command" 2>/dev/null)
|
||||
package_bin_path=\$(PATH="\$node_root/bin:\$PATH" pnpm dlx --package "\$package" which "\$command" 2>/dev/null)
|
||||
exec_package_bin "\$package_bin_path" "\$@"
|
||||
|
||||
echo "Could not resolve npm bin for \$package / \$command" >&2
|
||||
@@ -11,6 +11,11 @@ action="${1-}"
|
||||
# events, and also avoids false negatives from per-port USB-C devices
|
||||
# that are present-but-empty (online=0) while another port supplies power.
|
||||
if [[ -z $action || $action == "autodetect" ]]; then
|
||||
# On plug/unplug, udev fires the rule before sysfs `online` is updated
|
||||
# on some laptops (notably Lenovo Yoga Pro 7 with USB-C charging). A
|
||||
# short settle delay lets the kernel update before we read state.
|
||||
sleep 0.3
|
||||
|
||||
action=battery
|
||||
for ps in /sys/class/power_supply/*; do
|
||||
[[ -r $ps/online && -r $ps/type ]] || continue
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Ensure all default .desktop, web apps, TUIs, and npx wrappers are installed.
|
||||
# omarchy:summary=Ensure all default .desktop, web apps, TUIs, and npm wrappers are installed.
|
||||
|
||||
mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
|
||||
cp ~/.local/share/omarchy/applications/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
|
||||
@@ -11,14 +11,14 @@ 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
|
||||
# Refresh the webapps, TUIs, and npm wrappers
|
||||
bash $OMARCHY_PATH/install/packaging/icons.sh
|
||||
bash $OMARCHY_PATH/install/packaging/webapps.sh
|
||||
bash $OMARCHY_PATH/install/packaging/tuis.sh
|
||||
bash $OMARCHY_PATH/install/packaging/npx.sh
|
||||
bash $OMARCHY_PATH/install/packaging/npm.sh
|
||||
|
||||
update-desktop-database ~/.local/share/applications
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -3,6 +3,17 @@
|
||||
# omarchy:summary=Reset Waybar config to Omarchy defaults
|
||||
# omarchy:examples=omarchy refresh waybar
|
||||
|
||||
WAYBAR_CONFIG="$HOME/.config/waybar/config.jsonc"
|
||||
|
||||
position=$(sed -nE 's/.*"position"[[:space:]]*:[[:space:]]*"(top|bottom|left|right)".*/\1/p' "$WAYBAR_CONFIG" 2>/dev/null | head -n 1)
|
||||
height=$(sed -nE 's/.*"height"[[:space:]]*:[[:space:]]*([0-9]+).*/\1/p' "$WAYBAR_CONFIG" 2>/dev/null | head -n 1)
|
||||
width=$(sed -nE 's/.*"width"[[:space:]]*:[[:space:]]*([0-9]+).*/\1/p' "$WAYBAR_CONFIG" 2>/dev/null | head -n 1)
|
||||
|
||||
omarchy-refresh-config waybar/config.jsonc
|
||||
omarchy-refresh-config waybar/style.css
|
||||
|
||||
[[ -n $position ]] && sed -i -E "s/(\"position\"[[:space:]]*:[[:space:]]*\")[a-z]+(\")/\\1${position}\\2/" "$WAYBAR_CONFIG"
|
||||
[[ -n $height ]] && sed -i -E "s/(\"height\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${height}/" "$WAYBAR_CONFIG"
|
||||
[[ -n $width ]] && sed -i -E "s/(\"width\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${width}/" "$WAYBAR_CONFIG"
|
||||
|
||||
omarchy-restart-waybar
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,7 +12,7 @@ if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI w
|
||||
cp "$OMARCHY_PATH/default/hypr/plain-bindings.lua" ~/.config/hypr/bindings.lua
|
||||
hyprctl reload
|
||||
|
||||
# Remove npx stubs
|
||||
# Remove npm stubs
|
||||
rm -f ~/.local/bin/codex ~/.local/bin/gemini ~/.local/bin/copilot \
|
||||
~/.local/bin/opencode ~/.local/bin/playwright-cli ~/.local/bin/pi
|
||||
|
||||
|
||||
Executable
+69
@@ -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 "$@" >/dev/null 2>&1 || 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."
|
||||
@@ -15,31 +15,15 @@ if [[ ! $position =~ ^(top|bottom|left|right)$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Reset config and styles before making adjustments
|
||||
omarchy-refresh-config waybar/config.jsonc
|
||||
omarchy-refresh-config waybar/style.css
|
||||
|
||||
if [[ $position == "left" || $position == "right" ]]; then
|
||||
height=0
|
||||
width=28
|
||||
horizontal=false
|
||||
else
|
||||
height=26
|
||||
width=0
|
||||
horizontal=true
|
||||
fi
|
||||
|
||||
# Change position
|
||||
sed -i -E "s/(\"position\"[[:space:]]*:[[:space:]]*\")[a-z]+(\")/\\1${position}\\2/" "$WAYBAR_CONFIG"
|
||||
|
||||
# Change height/width
|
||||
sed -i -E "s/(\"height\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${height}/; s/(\"width\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${width}/" "$WAYBAR_CONFIG"
|
||||
|
||||
# Change the clock format
|
||||
if [[ $horizontal == true ]]; then
|
||||
sed -i -E '/"clock"[[:space:]]*:[[:space:]]*\{/,/\}/ s/"format"[[:space:]]*:[[:space:]]*"[^"]*"/"format": "{:L%A %H:%M}"/' "$WAYBAR_CONFIG"
|
||||
else
|
||||
sed -i -E '/"clock"[[:space:]]*:[[:space:]]*\{/,/\}/ s/"format"[[:space:]]*:[[:space:]]*"[^"]*"/"format": "{:%H\\n —\\n%M}"/' "$WAYBAR_CONFIG"
|
||||
fi
|
||||
|
||||
omarchy-restart-waybar
|
||||
|
||||
@@ -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")"
|
||||
|
||||
@@ -8,7 +8,11 @@ THEME_BACKGROUNDS_PATH="$HOME/.config/omarchy/current/theme/backgrounds/"
|
||||
USER_BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME/"
|
||||
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
||||
|
||||
mapfile -d '' -t BACKGROUNDS < <(find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
|
||||
mapfile -d '' -t BACKGROUNDS < <(
|
||||
find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f \
|
||||
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' -o -iname '*.bmp' -o -iname '*.webp' \) \
|
||||
-print0 2>/dev/null | sort -z
|
||||
)
|
||||
TOTAL=${#BACKGROUNDS[@]}
|
||||
|
||||
if (( TOTAL == 0 )); then
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -20,6 +20,7 @@ if gum confirm "Install Voxtype + AI model (~150MB) to enable dictation?"; then
|
||||
fi
|
||||
voxtype setup systemd
|
||||
|
||||
omarchy-hyprland-toggle voxtype on
|
||||
omarchy-restart-waybar
|
||||
notify-send " Voxtype Dictation Ready" "Hold F9 to dictate (or toggle with Super + Ctrl + X)." -t 10000
|
||||
fi
|
||||
|
||||
@@ -11,14 +11,14 @@ 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
|
||||
omarchy-hyprland-toggle voxtype off
|
||||
else
|
||||
echo "Voxtype was not installed."
|
||||
fi
|
||||
|
||||
@@ -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 @@
|
||||
command = 'wl-copy && (hyprctl dispatch "hl.dsp.send_shortcut({ mods = \"SHIFT\", key = \"Insert\" })" || hyprctl dispatch sendshortcut "SHIFT, Insert,")'
|
||||
command = 'wl-copy && ((hyprctl dispatch "hl.dsp.send_key_state({ mods = \"SHIFT\", key = \"Insert\", state = \"down\", window = \"activewindow\" })" && sleep 0.05 && hyprctl dispatch "hl.dsp.send_key_state({ mods = \"SHIFT\", key = \"Insert\", state = \"up\", window = \"activewindow\" })") || hyprctl dispatch sendshortcut "SHIFT, Insert, activewindow")'
|
||||
|
||||
@@ -14,6 +14,6 @@ style=block
|
||||
blink=no
|
||||
|
||||
[key-bindings]
|
||||
clipboard-copy=Control+Insert
|
||||
clipboard-copy=Control+Insert Control+Shift+c XF86Copy
|
||||
primary-paste=none
|
||||
clipboard-paste=Shift+Insert
|
||||
clipboard-paste=Shift+Insert Control+Shift+v XF86Paste
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
"checkThirdParty": false
|
||||
},
|
||||
"diagnostics": {
|
||||
"globals": ["hl"]
|
||||
"globals": ["hl", "o"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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" })
|
||||
|
||||
@@ -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" })
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -3,8 +3,9 @@ set -g prefix C-Space
|
||||
set -g prefix2 C-b
|
||||
bind C-Space send-prefix
|
||||
|
||||
# Reload config
|
||||
# Config and help
|
||||
bind q source-file ~/.config/tmux/tmux.conf \; display "Configuration reloaded"
|
||||
bind ? display-popup -E -w 80% -h 70% -T "Tmux keybindings" "omarchy-menu-tmux-keybindings --print | less -R"
|
||||
|
||||
# Vi mode for copy
|
||||
setw -g mode-keys vi
|
||||
@@ -12,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,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
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"height": 26,
|
||||
"width": 0,
|
||||
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
||||
"modules-center": ["clock", "custom/weather", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-center": ["clock#horizontal", "clock#vertical", "custom/weather", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"group/tray-expander",
|
||||
"bluetooth",
|
||||
@@ -61,12 +61,18 @@
|
||||
"on-click": "omarchy-launch-or-focus-tui btop",
|
||||
"on-click-right": "alacritty"
|
||||
},
|
||||
"clock": {
|
||||
"clock#horizontal": {
|
||||
"format": "{:L%A %H:%M}",
|
||||
"format-alt": "{:L%d %B W%V %Y}",
|
||||
"tooltip": false,
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"clock#vertical": {
|
||||
"format": "{:%H\n —\n%M}",
|
||||
"format-alt": "{:L%d %B W%V %Y}",
|
||||
"tooltip": false,
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"custom/weather": {
|
||||
"exec": "$OMARCHY_PATH/default/waybar/weather.sh",
|
||||
"return-type": "json",
|
||||
@@ -135,9 +141,13 @@
|
||||
"transition-duration": 600,
|
||||
"children-class": "tray-group-item"
|
||||
},
|
||||
"modules": ["custom/expand-icon", "tray"]
|
||||
"modules": ["group/expand-icons", "tray"]
|
||||
},
|
||||
"custom/expand-icon": {
|
||||
"group/expand-icons": {
|
||||
"orientation": "inherit",
|
||||
"modules": ["custom/expand-icon#horizontal", "custom/expand-icon#vertical"]
|
||||
},
|
||||
"custom/expand-icon#horizontal": {
|
||||
"format": "",
|
||||
"tooltip": false,
|
||||
"on-scroll-up": "",
|
||||
@@ -145,6 +155,15 @@
|
||||
"on-scroll-left": "",
|
||||
"on-scroll-right": ""
|
||||
},
|
||||
"custom/expand-icon#vertical": {
|
||||
"format": "",
|
||||
"rotate": 270,
|
||||
"tooltip": false,
|
||||
"on-scroll-up": "",
|
||||
"on-scroll-down": "",
|
||||
"on-scroll-left": "",
|
||||
"on-scroll-right": ""
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "omarchy-capture-screenrecording",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||
|
||||
@@ -110,6 +110,7 @@ tooltip {
|
||||
#custom-voxtype.recording {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
.left .modules-left, .right .modules-left { margin: 8px 0 0 0; }
|
||||
.left .modules-right, .right .modules-right { margin: 0 0 8px 0; }
|
||||
|
||||
@@ -145,3 +146,44 @@ tooltip {
|
||||
}
|
||||
|
||||
.left #custom-voxtype, .right #custom-voxtype { margin: 7.5px 0 0 0; min-width: 0; min-height: 12px; }
|
||||
|
||||
#custom-expand-icon.vertical,
|
||||
.left #custom-expand-icon.horizontal,
|
||||
.right #custom-expand-icon.horizontal {
|
||||
opacity: 0;
|
||||
font-size: 0;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.left #custom-expand-icon.vertical,
|
||||
.right #custom-expand-icon.vertical {
|
||||
opacity: 1;
|
||||
font-size: inherit;
|
||||
min-width: 0;
|
||||
min-height: 12px;
|
||||
margin: 1.5px 0;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
#clock.vertical,
|
||||
.left #clock.horizontal,
|
||||
.right #clock.horizontal {
|
||||
opacity: 0;
|
||||
font-size: 0;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.left #clock.vertical,
|
||||
.right #clock.vertical {
|
||||
opacity: 1;
|
||||
font-size: inherit;
|
||||
min-width: 0;
|
||||
min-height: 12px;
|
||||
margin: 8.75px 0 0 0;
|
||||
}
|
||||
|
||||
@@ -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" })
|
||||
|
||||
@@ -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",
|
||||
})
|
||||
|
||||
@@ -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" })
|
||||
|
||||
@@ -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 +1 @@
|
||||
hl.window_rule({
|
||||
name = "geforce",
|
||||
match = { class = "GeForceNOW" },
|
||||
idle_inhibit = "fullscreen",
|
||||
})
|
||||
o.window("GeForceNOW", { idle_inhibit = "fullscreen" })
|
||||
|
||||
@@ -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 })
|
||||
|
||||
@@ -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 +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" })
|
||||
|
||||
@@ -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 +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" })
|
||||
|
||||
@@ -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",
|
||||
})
|
||||
|
||||
@@ -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 } })
|
||||
|
||||
@@ -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 })
|
||||
|
||||
@@ -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 })
|
||||
|
||||
@@ -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" })
|
||||
|
||||
@@ -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 })
|
||||
|
||||
@@ -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
@@ -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")
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
hl.bind("SUPER + C", hl.dsp.send_shortcut({ mods = "CTRL", key = "Insert" }), { description = "Universal copy" })
|
||||
hl.bind("SUPER + V", hl.dsp.send_shortcut({ mods = "SHIFT", key = "Insert" }), { description = "Universal paste" })
|
||||
hl.bind("SUPER + X", hl.dsp.send_shortcut({ mods = "CTRL", key = "X" }), { description = "Universal cut" })
|
||||
hl.bind("SUPER + CTRL + V", hl.dsp.exec_cmd("omarchy-launch-walker -m clipboard"), { description = "Clipboard manager" })
|
||||
-- Work around Hyprland send_shortcut sometimes leaving synthetic key state stuck/repeating.
|
||||
-- https://github.com/hyprwm/Hyprland/discussions/14099
|
||||
local function send_shortcut_once(mods, key)
|
||||
return function()
|
||||
hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "down", window = "activewindow" }))
|
||||
|
||||
hl.timer(function()
|
||||
hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "up", window = "activewindow" }))
|
||||
end, { timeout = 50, type = "oneshot" })
|
||||
end
|
||||
end
|
||||
|
||||
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" })
|
||||
|
||||
@@ -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 })
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -1,72 +1,69 @@
|
||||
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("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)" })
|
||||
|
||||
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")
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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,
|
||||
|
||||
@@ -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" })
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
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 })
|
||||
@@ -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" })
|
||||
|
||||
+50
-69
@@ -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
@@ -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 }}")
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
1password-beta
|
||||
1password-cli
|
||||
aether
|
||||
alacritty
|
||||
alsa-utils
|
||||
asdcontrol
|
||||
avahi
|
||||
@@ -27,7 +26,7 @@ docker-buildx
|
||||
docker-compose
|
||||
dosfstools
|
||||
dotnet-runtime-9.0
|
||||
dust
|
||||
dua-cli
|
||||
evince
|
||||
exfatprogs
|
||||
expac
|
||||
@@ -39,6 +38,7 @@ fcitx5-qt
|
||||
fd
|
||||
ffmpegthumbnailer
|
||||
fontconfig
|
||||
foot
|
||||
fzf
|
||||
github-cli
|
||||
gnome-calculator
|
||||
@@ -82,6 +82,7 @@ man-db
|
||||
mariadb-libs
|
||||
mise
|
||||
mpv
|
||||
mpv-mpris
|
||||
nautilus
|
||||
nautilus-python
|
||||
gnome-disk-utility
|
||||
@@ -105,6 +106,7 @@ power-profiles-daemon
|
||||
python-gobject
|
||||
python-poetry-core
|
||||
python-terminaltexteffects
|
||||
qemu-user-static-binfmt
|
||||
qt5-wayland
|
||||
quickshell
|
||||
ripgrep
|
||||
|
||||
@@ -4,7 +4,7 @@ run_logged $OMARCHY_INSTALL/packaging/nvim.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/icons.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/webapps.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/tuis.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/npx.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/npm.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/asus-rog.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/framework16.sh
|
||||
run_logged $OMARCHY_INSTALL/packaging/dell-xps-touchpad-haptics.sh
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
omarchy-npm-install @openai/codex codex
|
||||
omarchy-npm-install @google/gemini-cli gemini
|
||||
omarchy-npm-install @github/copilot copilot
|
||||
omarchy-npm-install opencode-ai opencode
|
||||
omarchy-npm-install playwright playwright-cli
|
||||
omarchy-npm-install @earendil-works/pi-coding-agent pi
|
||||
omarchy-npm-install @kitlangton/ghui ghui
|
||||
omarchy-npm-install hunkdiff hunk
|
||||
@@ -1,8 +0,0 @@
|
||||
omarchy-npx-install @openai/codex codex
|
||||
omarchy-npx-install @google/gemini-cli gemini
|
||||
omarchy-npx-install @github/copilot copilot
|
||||
omarchy-npx-install opencode-ai opencode
|
||||
omarchy-npx-install playwright playwright-cli
|
||||
omarchy-npx-install @earendil-works/pi-coding-agent pi
|
||||
omarchy-npx-install @kitlangton/ghui ghui
|
||||
omarchy-npx-install hunkdiff hunk
|
||||
@@ -1,4 +1,4 @@
|
||||
ICON_DIR="$HOME/.local/share/applications/icons"
|
||||
|
||||
omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png"
|
||||
omarchy-tui-install "Disk Usage" "dua i" float "$ICON_DIR/Disk Usage.png"
|
||||
omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png"
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -1,3 +0,0 @@
|
||||
echo "Stop restarting waybar on unlock to see if we have solved the stacking problem for good"
|
||||
|
||||
omarchy-refresh-hypridle
|
||||
@@ -1,2 +0,0 @@
|
||||
echo "Update plymouth theme to avoid freetype2 issue that broke the styled login screen"
|
||||
omarchy-refresh-plymouth
|
||||
@@ -1,3 +0,0 @@
|
||||
echo "Add a blurred background to the lock screen"
|
||||
|
||||
omarchy-refresh-hyprlock
|
||||
@@ -1,2 +0,0 @@
|
||||
echo "Enable fast shutdown"
|
||||
source $OMARCHY_PATH/install/config/fast-shutdown.sh
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1,4 +0,0 @@
|
||||
echo "Update imv config with new keybindings"
|
||||
|
||||
mkdir -p ~/.config/imv
|
||||
cp $OMARCHY_PATH/config/imv/config ~/.config/imv/
|
||||
@@ -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
|
||||
@@ -1,3 +0,0 @@
|
||||
echo "Refresh Walker config to ensure compatibility with latest version"
|
||||
|
||||
omarchy-refresh-walker
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user