mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-07 12:40:55 +02:00
Compare commits
107
Commits
+11
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"workspace": {
|
||||||
|
"library": [
|
||||||
|
"/usr/share/hypr/stubs"
|
||||||
|
],
|
||||||
|
"checkThirdParty": false
|
||||||
|
},
|
||||||
|
"diagnostics": {
|
||||||
|
"globals": ["hl"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -82,6 +82,7 @@ Use these instead of raw shell commands:
|
|||||||
- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands
|
- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands
|
||||||
- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages
|
- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages
|
||||||
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
|
||||||
|
- `omarchy-notification-send` - send desktop notifications; do not call `notify-send` directly
|
||||||
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
|
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
|
||||||
|
|
||||||
Exceptions are allowed for bootstrap, preflight, migration, and package-helper scripts where the helper may not be available yet, where the helper itself is being implemented, or where direct package-manager behavior is required.
|
Exceptions are allowed for bootstrap, preflight, migration, and package-helper scripts where the helper may not be available yet, where the helper itself is being implemented, or where direct package-manager behavior is required.
|
||||||
@@ -92,6 +93,14 @@ Exceptions are allowed for bootstrap, preflight, migration, and package-helper s
|
|||||||
- `default/themed/*.tpl` - templates with `{{ variable }}` placeholders for theme colors
|
- `default/themed/*.tpl` - templates with `{{ variable }}` placeholders for theme colors
|
||||||
- `themes/*/colors.toml` - theme color definitions (accent, background, foreground, color0-15)
|
- `themes/*/colors.toml` - theme color definitions (accent, background, foreground, color0-15)
|
||||||
|
|
||||||
|
# Visual Changes
|
||||||
|
|
||||||
|
When making visual changes, such as Waybar styles or desktop appearance, always take and analyze a screenshot after applying the change to verify the result. Use `omarchy capture screenshot fullscreen save` for fullscreen screenshots.
|
||||||
|
|
||||||
|
For interactive UI work, use `wtype` to simulate keyboard input when available. Example: start the UI in the background, wait briefly for focus, then run `wtype -k Right -k Return` to exercise keyboard selection and confirm the resulting command output or state change. Prefer this over manual-only verification when a UI returns a selected value or changes a symlink/config.
|
||||||
|
|
||||||
|
When testing layer-shell UI, capture the reference and candidate states as separate screenshots, then compare them visually before further edits. If a launched UI would otherwise remain open, keep track of its PID and stop it after the screenshot; avoid broad process kills unless checking with `ps` first.
|
||||||
|
|
||||||
# Refresh Pattern
|
# Refresh Pattern
|
||||||
|
|
||||||
To copy a default config to user config with automatic backup:
|
To copy a default config to user config with automatic backup:
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 63 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
@@ -29,21 +29,25 @@ declare -A GROUP_DESCRIPTIONS
|
|||||||
GROUP_DESCRIPTIONS[ac]="AC power detection"
|
GROUP_DESCRIPTIONS[ac]="AC power detection"
|
||||||
GROUP_DESCRIPTIONS[battery]="Battery status helpers"
|
GROUP_DESCRIPTIONS[battery]="Battery status helpers"
|
||||||
GROUP_DESCRIPTIONS[branch]="Omarchy git branch management"
|
GROUP_DESCRIPTIONS[branch]="Omarchy git branch management"
|
||||||
|
GROUP_DESCRIPTIONS[branding]="About and screensaver branding"
|
||||||
GROUP_DESCRIPTIONS[brightness]="Display and keyboard brightness"
|
GROUP_DESCRIPTIONS[brightness]="Display and keyboard brightness"
|
||||||
GROUP_DESCRIPTIONS[capture]="Screenshots and screen recording"
|
GROUP_DESCRIPTIONS[capture]="Screenshots and screen recording"
|
||||||
GROUP_DESCRIPTIONS[channel]="Omarchy release channel management"
|
GROUP_DESCRIPTIONS[channel]="Omarchy release channel management"
|
||||||
GROUP_DESCRIPTIONS[cmd]="Command and shortcut helpers"
|
GROUP_DESCRIPTIONS[cmd]="Command and shortcut helpers"
|
||||||
GROUP_DESCRIPTIONS[config]="System configuration helpers"
|
GROUP_DESCRIPTIONS[config]="System configuration helpers"
|
||||||
GROUP_DESCRIPTIONS[debug]="Diagnostics and support logs"
|
GROUP_DESCRIPTIONS[debug]="Diagnostics and support logs"
|
||||||
|
GROUP_DESCRIPTIONS[default]="Default application selection"
|
||||||
GROUP_DESCRIPTIONS[dev]="Omarchy development tools"
|
GROUP_DESCRIPTIONS[dev]="Omarchy development tools"
|
||||||
GROUP_DESCRIPTIONS[drive]="Drive selection and encryption"
|
GROUP_DESCRIPTIONS[drive]="Drive selection and encryption"
|
||||||
GROUP_DESCRIPTIONS[font]="Font management"
|
GROUP_DESCRIPTIONS[font]="Font management"
|
||||||
|
GROUP_DESCRIPTIONS[games]="Game launchers and helpers"
|
||||||
GROUP_DESCRIPTIONS[hibernation]="Hibernation setup and removal"
|
GROUP_DESCRIPTIONS[hibernation]="Hibernation setup and removal"
|
||||||
GROUP_DESCRIPTIONS[hook]="User hook runner"
|
GROUP_DESCRIPTIONS[hook]="User hook runner"
|
||||||
GROUP_DESCRIPTIONS[hw]="Hardware detection and controls"
|
GROUP_DESCRIPTIONS[hw]="Hardware detection and controls"
|
||||||
GROUP_DESCRIPTIONS[hyprland]="Hyprland window, monitor, and toggle controls"
|
GROUP_DESCRIPTIONS[hyprland]="Hyprland window, monitor, and toggle controls"
|
||||||
GROUP_DESCRIPTIONS[install]="Optional software installers"
|
GROUP_DESCRIPTIONS[install]="Optional software installers"
|
||||||
GROUP_DESCRIPTIONS[launch]="Application launchers"
|
GROUP_DESCRIPTIONS[launch]="Application launchers"
|
||||||
|
GROUP_DESCRIPTIONS[mako]="Mako notification controls"
|
||||||
GROUP_DESCRIPTIONS[menu]="Omarchy menu commands"
|
GROUP_DESCRIPTIONS[menu]="Omarchy menu commands"
|
||||||
GROUP_DESCRIPTIONS[migrate]="Migration runner"
|
GROUP_DESCRIPTIONS[migrate]="Migration runner"
|
||||||
GROUP_DESCRIPTIONS[notification]="Notification helpers"
|
GROUP_DESCRIPTIONS[notification]="Notification helpers"
|
||||||
@@ -53,11 +57,13 @@ GROUP_DESCRIPTIONS[plymouth]="Plymouth boot theme management"
|
|||||||
GROUP_DESCRIPTIONS[powerprofiles]="Power profile management"
|
GROUP_DESCRIPTIONS[powerprofiles]="Power profile management"
|
||||||
GROUP_DESCRIPTIONS[refresh]="Reset config to defaults"
|
GROUP_DESCRIPTIONS[refresh]="Reset config to defaults"
|
||||||
GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows"
|
GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows"
|
||||||
|
GROUP_DESCRIPTIONS[reminder]="Desktop notification reminders"
|
||||||
GROUP_DESCRIPTIONS[remove]="Removal workflows"
|
GROUP_DESCRIPTIONS[remove]="Removal workflows"
|
||||||
GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
|
GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
|
||||||
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
|
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
|
||||||
GROUP_DESCRIPTIONS[screensaver]="Screensaver branding and animation"
|
GROUP_DESCRIPTIONS[screensaver]="Screensaver branding and animation"
|
||||||
GROUP_DESCRIPTIONS[snapshot]="System snapshots"
|
GROUP_DESCRIPTIONS[snapshot]="System snapshots"
|
||||||
|
GROUP_DESCRIPTIONS[style]="Global UI style controls"
|
||||||
GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers"
|
GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers"
|
||||||
GROUP_DESCRIPTIONS[swayosd]="SwayOSD status display helpers"
|
GROUP_DESCRIPTIONS[swayosd]="SwayOSD status display helpers"
|
||||||
GROUP_DESCRIPTIONS[system]="Reboot, shutdown, logout, and lock"
|
GROUP_DESCRIPTIONS[system]="Reboot, shutdown, logout, and lock"
|
||||||
|
|||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Edit, set, or reset About branding
|
||||||
|
# omarchy:group=branding
|
||||||
|
# omarchy:name=about
|
||||||
|
# omarchy:args=<image|text|reset>
|
||||||
|
# omarchy:examples=omarchy branding about image | omarchy branding about text | omarchy branding about reset
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SOURCE_DIR="${XDG_PICTURES_DIR:-$HOME/Pictures}"
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
image)
|
||||||
|
image=$(omarchy-menu-file "Pick png/svg from $SOURCE_DIR" "${SOURCE_DIR}" "svg png")
|
||||||
|
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/about.txt --width 54 --height 26; then
|
||||||
|
omarchy-launch-about >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
text)
|
||||||
|
omarchy-launch-editor ~/.config/omarchy/branding/about.txt >/dev/null 2>&1 && omarchy-launch-about >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
cp "$OMARCHY_PATH/icon.txt" ~/.config/omarchy/branding/about.txt && omarchy-launch-about >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-branding-about <image|text|reset>" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Edit, set, or reset screensaver branding
|
||||||
|
# omarchy:group=branding
|
||||||
|
# omarchy:name=screensaver
|
||||||
|
# omarchy:args=<image|text|reset>
|
||||||
|
# omarchy:examples=omarchy branding screensaver image | omarchy branding screensaver text | omarchy branding screensaver reset
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SOURCE_DIR="${XDG_PICTURES_DIR:-$HOME/Pictures}"
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
image)
|
||||||
|
image=$(omarchy-menu-file "Pick png/svg from $SOURCE_DIR" "${SOURCE_DIR}" "svg png")
|
||||||
|
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/screensaver.txt; then
|
||||||
|
omarchy-launch-screensaver force >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
text)
|
||||||
|
omarchy-launch-editor ~/.config/omarchy/branding/screensaver.txt >/dev/null 2>&1 && omarchy-launch-screensaver force >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
cp "$OMARCHY_PATH/logo.txt" ~/.config/omarchy/branding/screensaver.txt && omarchy-launch-screensaver force >/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-branding-screensaver <image|text|reset>" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -6,6 +6,21 @@
|
|||||||
|
|
||||||
step="${1:-+5%}"
|
step="${1:-+5%}"
|
||||||
|
|
||||||
|
if [[ $step == "off" ]]; then
|
||||||
|
hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' >/dev/null 2>&1 || hyprctl dispatch dpms off >/dev/null 2>&1
|
||||||
|
exit 0
|
||||||
|
elif [[ $step == "on" ]]; then
|
||||||
|
hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' >/dev/null 2>&1 || hyprctl dispatch dpms on >/dev/null 2>&1
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
runtime_dir="${XDG_RUNTIME_DIR:-/tmp}"
|
||||||
|
|
||||||
|
# Drop overlapping brightness key events so concurrent invocations do not race.
|
||||||
|
# Hardware key repeat present on some devices can otherwise glitch SwayOSD rendering.
|
||||||
|
exec 9>"$runtime_dir/omarchy-brightness-display.lock"
|
||||||
|
flock -n 9 || exit 0
|
||||||
|
|
||||||
# Start with the first possible output, then refine to the most likely given an order heuristic.
|
# Start with the first possible output, then refine to the most likely given an order heuristic.
|
||||||
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
|
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
|
||||||
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
||||||
@@ -15,13 +30,6 @@ for candidate in amdgpu_bl* intel_backlight acpi_video*; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ $step == "off" ]]; then
|
|
||||||
hyprctl dispatch dpms off >/dev/null 2>&1
|
|
||||||
exit 0
|
|
||||||
elif [[ $step == "on" ]]; then
|
|
||||||
hyprctl dispatch dpms on >/dev/null 2>&1
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if omarchy-hyprland-monitor-focused-apple; then
|
if omarchy-hyprland-monitor-focused-apple; then
|
||||||
omarchy-brightness-display-apple "$step"
|
omarchy-brightness-display-apple "$step"
|
||||||
|
|||||||
@@ -233,6 +233,7 @@ stop_screenrecording() {
|
|||||||
else
|
else
|
||||||
finalize_recording
|
finalize_recording
|
||||||
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
|
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
|
||||||
|
echo "$filename"
|
||||||
local preview="${filename%.mp4}-preview.png"
|
local preview="${filename%.mp4}-preview.png"
|
||||||
|
|
||||||
# Generate a preview thumbnail from the first frame
|
# Generate a preview thumbnail from the first frame
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Take a screenshot
|
# omarchy:summary=Take a screenshot
|
||||||
# omarchy:group=capture
|
# omarchy:group=capture
|
||||||
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy] [--editor=<name>]
|
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy|save] [--editor=<name>]
|
||||||
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
|
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
|
||||||
# omarchy:aliases=omarchy screenshot
|
# omarchy:aliases=omarchy screenshot
|
||||||
|
|
||||||
@@ -126,14 +126,22 @@ esac
|
|||||||
FILENAME="screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png"
|
FILENAME="screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png"
|
||||||
FILEPATH="$OUTPUT_DIR/$FILENAME"
|
FILEPATH="$OUTPUT_DIR/$FILENAME"
|
||||||
|
|
||||||
if [[ $PROCESSING == "slurp" ]]; then
|
case "$PROCESSING" in
|
||||||
grim -g "$SELECTION" "$FILEPATH" || exit 1
|
slurp)
|
||||||
wl-copy <"$FILEPATH"
|
grim -g "$SELECTION" "$FILEPATH" || exit 1
|
||||||
|
echo "$FILEPATH"
|
||||||
|
wl-copy <"$FILEPATH"
|
||||||
|
|
||||||
(
|
(
|
||||||
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")
|
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")
|
||||||
[[ $ACTION == "default" ]] && open_editor "$FILEPATH"
|
[[ $ACTION == "default" ]] && open_editor "$FILEPATH"
|
||||||
) &
|
) >/dev/null 2>&1 &
|
||||||
else
|
;;
|
||||||
grim -g "$SELECTION" - | wl-copy
|
copy)
|
||||||
fi
|
grim -g "$SELECTION" - | wl-copy
|
||||||
|
;;
|
||||||
|
save)
|
||||||
|
grim -g "$SELECTION" "$FILEPATH" || exit 1
|
||||||
|
echo "$FILEPATH"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set the default browser for Omarchy and XDG handlers
|
||||||
|
# omarchy:args=[chromium|chrome|brave|brave-origin|edge|firefox|zen]
|
||||||
|
# omarchy:examples=omarchy default browser firefox | omarchy default browser brave
|
||||||
|
|
||||||
|
if (($# == 0)); then
|
||||||
|
case "$(xdg-settings get default-web-browser)" in
|
||||||
|
chromium.desktop) echo "chromium" ;;
|
||||||
|
google-chrome.desktop) echo "chrome" ;;
|
||||||
|
brave-browser.desktop) echo "brave" ;;
|
||||||
|
brave-origin-beta.desktop) echo "brave-origin" ;;
|
||||||
|
microsoft-edge.desktop) echo "edge" ;;
|
||||||
|
firefox.desktop) echo "firefox" ;;
|
||||||
|
zen.desktop) echo "zen" ;;
|
||||||
|
*) xdg-settings get default-web-browser ;;
|
||||||
|
esac
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
chromium) desktop_id="chromium.desktop"; name="Chromium"; glyph="" ;;
|
||||||
|
chrome) desktop_id="google-chrome.desktop"; name="Chrome"; glyph="" ;;
|
||||||
|
brave) desktop_id="brave-browser.desktop"; name="Brave"; glyph="" ;;
|
||||||
|
brave-origin) desktop_id="brave-origin-beta.desktop"; name="Brave Origin"; glyph="" ;;
|
||||||
|
edge) desktop_id="microsoft-edge.desktop"; name="Edge"; glyph="" ;;
|
||||||
|
firefox) desktop_id="firefox.desktop"; name="Firefox"; glyph="" ;;
|
||||||
|
zen) desktop_id="zen.desktop"; name="Zen"; glyph="" ;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-default-browser <chromium|chrome|brave|brave-origin|edge|firefox|zen>"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
xdg-settings set default-web-browser "$desktop_id"
|
||||||
|
xdg-mime default "$desktop_id" x-scheme-handler/http
|
||||||
|
xdg-mime default "$desktop_id" x-scheme-handler/https
|
||||||
|
xdg-mime default "$desktop_id" text/html
|
||||||
|
|
||||||
|
notify-send -u low "$glyph $name is now the default browser"
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set the default editor for $EDITOR
|
||||||
|
# omarchy:args=[code|cursor|zed|sublime_text|helix|vim|emacs|nvim]
|
||||||
|
# omarchy:examples=omarchy default editor | omarchy default editor code | omarchy default editor helix
|
||||||
|
|
||||||
|
if (($# == 0)); then
|
||||||
|
sed -n 's/^export EDITOR=//p' ~/.config/uwsm/default | head -n 1
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
code) editor="code"; name="VSCode"; glyph="" ;;
|
||||||
|
cursor) editor="cursor"; name="Cursor"; glyph="" ;;
|
||||||
|
zed | zeditor) editor="zeditor"; name="Zed"; glyph="" ;;
|
||||||
|
sublime_text) editor="sublime_text"; name="Sublime Text"; glyph="" ;;
|
||||||
|
helix) editor="helix"; name="Helix"; glyph="" ;;
|
||||||
|
vim) editor="vim"; name="Vim"; glyph="" ;;
|
||||||
|
emacs) editor="emacs"; name="Emacs"; glyph="" ;;
|
||||||
|
nvim) editor="nvim"; name="Neovim"; glyph="" ;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-default-editor <code|cursor|zed|sublime_text|helix|vim|emacs|nvim>"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
sed -i "s/^export EDITOR=.*/export EDITOR=$editor/" ~/.config/uwsm/default
|
||||||
|
|
||||||
|
export EDITOR="$editor"
|
||||||
|
notify-send -u low "$glyph $name is now the default editor" " Effective after logging out"
|
||||||
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set the default terminal used by xdg-terminal-exec
|
||||||
|
# omarchy:args=[alacritty|foot|ghostty|kitty]
|
||||||
|
# omarchy:examples=omarchy default terminal ghostty | omarchy default terminal kitty
|
||||||
|
|
||||||
|
if (($# == 0)); then
|
||||||
|
desktop_id=$(grep -vE '^($|#)' ~/.config/xdg-terminals.list 2>/dev/null | head -n 1)
|
||||||
|
case "$desktop_id" in
|
||||||
|
Alacritty.desktop) echo "alacritty" ;;
|
||||||
|
foot.desktop) echo "foot" ;;
|
||||||
|
com.mitchellh.ghostty.desktop) echo "ghostty" ;;
|
||||||
|
kitty.desktop) echo "kitty" ;;
|
||||||
|
*) echo "$desktop_id" ;;
|
||||||
|
esac
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
alacritty) desktop_id="Alacritty.desktop"; name="Alacritty"; glyph="" ;;
|
||||||
|
foot) desktop_id="foot.desktop"; name="Foot"; glyph="" ;;
|
||||||
|
ghostty) desktop_id="com.mitchellh.ghostty.desktop"; name="Ghostty"; glyph="" ;;
|
||||||
|
kitty) desktop_id="kitty.desktop"; name="Kitty"; glyph="" ;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-default-terminal <alacritty|foot|ghostty|kitty>"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cat >~/.config/xdg-terminals.list <<EOF
|
||||||
|
# Terminal emulator preference order for xdg-terminal-exec
|
||||||
|
# The first found and valid terminal will be used
|
||||||
|
$desktop_id
|
||||||
|
EOF
|
||||||
|
|
||||||
|
notify-send -u low "$glyph $name is now the default terminal"
|
||||||
@@ -16,6 +16,8 @@ if [[ -f $FIRST_RUN_MODE ]]; then
|
|||||||
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
||||||
|
bash "$OMARCHY_PATH/install/first-run/gdk-scale.sh"
|
||||||
|
bash "$OMARCHY_PATH/install/first-run/swayosd.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/gtk-primary-paste.sh"
|
bash "$OMARCHY_PATH/install/first-run/gtk-primary-paste.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/elephant.sh"
|
bash "$OMARCHY_PATH/install/first-run/elephant.sh"
|
||||||
omarchy-hook-install post-update "$OMARCHY_PATH/install/first-run/install-voxtype.hook"
|
omarchy-hook-install post-update "$OMARCHY_PATH/install/first-run/install-voxtype.hook"
|
||||||
|
|||||||
Executable
+39
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=List installed RetroArch core names
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
core_dir="/usr/lib/libretro"
|
||||||
|
preferred_cores=(
|
||||||
|
"Amstrad CPC|cap32"
|
||||||
|
"Arcade FBNeo|fbneo"
|
||||||
|
"Arcade MAME|mame"
|
||||||
|
"Commodore Amiga|puae"
|
||||||
|
"Commodore C128|vice_x128"
|
||||||
|
"Commodore C64|vice_x64"
|
||||||
|
"Commodore VIC-20|vice_xvic"
|
||||||
|
"Nintendo DS|desmume"
|
||||||
|
"Nintendo Game Boy / Color|gambatte"
|
||||||
|
"Nintendo Game Boy Advance|mgba"
|
||||||
|
"Nintendo GameCube / Wii|dolphin"
|
||||||
|
"Nintendo NES / Famicom|mesen"
|
||||||
|
"Nintendo 64|parallel_n64"
|
||||||
|
"Nintendo SNES / SFC|snes9x"
|
||||||
|
"NEC PC Engine / TurboGrafx-16|mednafen_pce_fast"
|
||||||
|
"NEC PC Engine CD / TurboGrafx-CD|mednafen_pce"
|
||||||
|
"NEC PC Engine SuperGrafx|mednafen_supergrafx"
|
||||||
|
"Sega Dreamcast|flycast"
|
||||||
|
"Sega Mega Drive / Master System / Game Gear|genesis_plus_gx"
|
||||||
|
"Sega Saturn|kronos"
|
||||||
|
"Sony PlayStation|mednafen_psx_hw"
|
||||||
|
"Sony PlayStation Portable|ppsspp"
|
||||||
|
)
|
||||||
|
|
||||||
|
[[ -d $core_dir ]] || exit 0
|
||||||
|
|
||||||
|
for preferred_core in "${preferred_cores[@]}"; do
|
||||||
|
label="${preferred_core%%|*}"
|
||||||
|
core="${preferred_core#*|}"
|
||||||
|
[[ -f $core_dir/${core}_libretro.so ]] && printf '%s (%s)\n' "$label" "$core"
|
||||||
|
done
|
||||||
Executable
+76
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Create a desktop launcher for a RetroArch game
|
||||||
|
# omarchy:args=[core path-to-game]
|
||||||
|
# omarchy:examples=omarchy games retro install snes9x ~/Games/roms/snes/game.sfc | omarchy-games-retro-install /usr/lib/libretro/mgba_libretro.so ~/Games/roms/gba/game.gba
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if (( $# == 0 )); then
|
||||||
|
mapfile -t cores < <(omarchy-games-retro-cores)
|
||||||
|
|
||||||
|
if (( ${#cores[@]} == 0 )); then
|
||||||
|
omarchy-notification-send -g "" "No RetroArch cores found" "/usr/lib/libretro"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
core=$(omarchy-menu-select "RetroArch core" "${cores[@]}") || exit 0
|
||||||
|
[[ -n $core ]] || exit 0
|
||||||
|
core="${core##*(}"
|
||||||
|
core="${core%)}"
|
||||||
|
|
||||||
|
game_path=$(omarchy-menu-file "Retro game" "$HOME/Games/roms" "7z bin ccd chd cue dmg elf fds gb gba gbc iso lha m3u md n64 nds nes pbp sfc smc swc zip z64") || exit 0
|
||||||
|
[[ -n $game_path ]] || exit 0
|
||||||
|
elif (( $# == 2 )); then
|
||||||
|
core="$1"
|
||||||
|
game_path="$2"
|
||||||
|
else
|
||||||
|
echo "Usage: omarchy-games-retro-install [core path-to-game]"
|
||||||
|
echo "Example: omarchy-games-retro-install snes9x ~/Games/roms/snes/game.sfc"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $game_path ]]; then
|
||||||
|
echo "Game not found: $game_path"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $core == */* ]]; then
|
||||||
|
core_path="$core"
|
||||||
|
else
|
||||||
|
core_path="/usr/lib/libretro/${core}_libretro.so"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $core_path ]]; then
|
||||||
|
echo "Core not found: $core_path"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
game_name=$(printf '%s' "${game_path##*/}" | sed 's/\.[^.]*$//; s/[[:space:]]*([^)]*)//g; s/[[:space:]]\+/ /g; s/^ //; s/ $//' | perl -Mopen=locale -pe 's/(^|[[:space:]])([^[:space:]])/$1\U$2/g')
|
||||||
|
desktop_name="$game_name"
|
||||||
|
desktop_id=$(printf '%s' "$desktop_name" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]' '-' | sed 's/^-//; s/-$//')
|
||||||
|
desktop_dir="$HOME/.local/share/applications"
|
||||||
|
desktop_file="$desktop_dir/$desktop_id.desktop"
|
||||||
|
icon_dir="$desktop_dir/icons"
|
||||||
|
icon_path="$icon_dir/Retro Gaming.png"
|
||||||
|
|
||||||
|
mkdir -p "$desktop_dir" "$icon_dir"
|
||||||
|
[[ -f $icon_path ]] || cp "$HOME/.local/share/omarchy/applications/icons/Retro Gaming.png" "$icon_path"
|
||||||
|
|
||||||
|
cat >"$desktop_file" <<EOF
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=$desktop_name
|
||||||
|
Comment=Play $game_name with RetroArch
|
||||||
|
Exec=retroarch -L "$core_path" "$game_path"
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Icon=$icon_path
|
||||||
|
StartupNotify=true
|
||||||
|
Categories=Game;Emulator;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$desktop_file"
|
||||||
|
update-desktop-database "$desktop_dir" &>/dev/null || true
|
||||||
|
|
||||||
|
omarchy-notification-send -g "" "$game_name installed" "Start it with Super + Space"
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# omarchy:summary=Run the Synaptics touchpad haptic feedback daemon
|
|
||||||
|
|
||||||
"""Haptic feedback daemon for Synaptics touchpads with Manual Trigger.
|
|
||||||
|
|
||||||
Monitors touchpad button press events and sends haptic pulses via HID
|
|
||||||
feature reports. Required because the kernel's HID haptic subsystem only
|
|
||||||
supports Auto Trigger with waveform enumeration, not the simpler Manual
|
|
||||||
Trigger protocol used by these Synaptics touchpads.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import fcntl, glob, os, struct, sys
|
|
||||||
|
|
||||||
VENDOR = "06CB"
|
|
||||||
REPORT_ID = 0x37
|
|
||||||
INTENSITY = 40 # 0-100
|
|
||||||
|
|
||||||
# input_event: struct timeval (16 bytes on 64-bit) + type(H) + code(H) + value(i)
|
|
||||||
EVENT_FORMAT = "llHHi"
|
|
||||||
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)
|
|
||||||
EV_KEY = 0x01
|
|
||||||
BTN_LEFT = 272
|
|
||||||
BTN_RIGHT = 273
|
|
||||||
BTN_MIDDLE = 274
|
|
||||||
|
|
||||||
# ioctl: HIDIOCSFEATURE(len) = _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
|
|
||||||
def HIDIOCSFEATURE(length):
|
|
||||||
return 0xC0000000 | (length << 16) | (ord("H") << 8) | 0x06
|
|
||||||
|
|
||||||
|
|
||||||
def find_hidraw():
|
|
||||||
for path in sorted(glob.glob("/sys/class/hidraw/hidraw*")):
|
|
||||||
uevent = os.path.join(path, "device", "uevent")
|
|
||||||
try:
|
|
||||||
with open(uevent) as f:
|
|
||||||
content = f.read().upper()
|
|
||||||
if f"0000{VENDOR}" in content:
|
|
||||||
return os.path.join("/dev", os.path.basename(path))
|
|
||||||
except OSError:
|
|
||||||
continue
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def find_touchpad_event():
|
|
||||||
for path in sorted(glob.glob("/sys/class/input/event*/device/name")):
|
|
||||||
try:
|
|
||||||
with open(path) as f:
|
|
||||||
name = f.read().strip().upper()
|
|
||||||
if VENDOR in name and "TOUCHPAD" in name:
|
|
||||||
event = path.split("/")[-3]
|
|
||||||
return os.path.join("/dev/input", event)
|
|
||||||
except OSError:
|
|
||||||
continue
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
hidraw = find_hidraw()
|
|
||||||
if not hidraw:
|
|
||||||
print("No Synaptics haptic touchpad hidraw device found", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
event = find_touchpad_event()
|
|
||||||
if not event:
|
|
||||||
print("No Synaptics haptic touchpad input device found", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
print(f"Haptic touchpad: hidraw={hidraw} input={event} intensity={INTENSITY}", flush=True)
|
|
||||||
|
|
||||||
haptic_report = struct.pack("BB", REPORT_ID, INTENSITY)
|
|
||||||
ioctl_req = HIDIOCSFEATURE(len(haptic_report))
|
|
||||||
|
|
||||||
hidraw_fd = os.open(hidraw, os.O_RDWR)
|
|
||||||
event_fd = os.open(event, os.O_RDONLY)
|
|
||||||
|
|
||||||
try:
|
|
||||||
while True:
|
|
||||||
data = os.read(event_fd, EVENT_SIZE)
|
|
||||||
if len(data) < EVENT_SIZE:
|
|
||||||
continue
|
|
||||||
_, _, ev_type, code, value = struct.unpack(EVENT_FORMAT, data)
|
|
||||||
if ev_type == EV_KEY and code in (BTN_LEFT, BTN_RIGHT, BTN_MIDDLE) and value == 1:
|
|
||||||
try:
|
|
||||||
fcntl.ioctl(hidraw_fd, ioctl_req, haptic_report)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
os.close(event_fd)
|
|
||||||
os.close(hidraw_fd)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Match Dell XPS systems with the Synaptics haptic touchpad.
|
||||||
|
|
||||||
|
omarchy-hw-match "XPS" && [[ -e /sys/bus/i2c/devices/i2c-VEN_06CB:00 ]]
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Clear the internal-monitor-disable toggle if no external display is connected.
|
# omarchy:summary=Clear the internal-monitor-disable toggle if no external display is connected.
|
||||||
|
|
||||||
TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf"
|
TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.lua"
|
||||||
|
|
||||||
if [[ -f $TOGGLE ]] && ! omarchy-hw-external-monitors; then
|
if [[ -f $TOGGLE ]] && ! omarchy-hw-external-monitors; then
|
||||||
rm -f "$TOGGLE"
|
rm -f "$TOGGLE"
|
||||||
|
|||||||
@@ -4,40 +4,50 @@
|
|||||||
# omarchy:args=<on|off|toggle|recover>
|
# omarchy:args=<on|off|toggle|recover>
|
||||||
|
|
||||||
TOGGLE="internal-monitor-disable"
|
TOGGLE="internal-monitor-disable"
|
||||||
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
|
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.lua"
|
||||||
MIRROR_TOGGLE="internal-monitor-mirror"
|
MIRROR_TOGGLE="internal-monitor-mirror"
|
||||||
|
|
||||||
# Get internal monitor name dynamically
|
# Get internal monitor name dynamically
|
||||||
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
|
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
|
||||||
|
|
||||||
enable() {
|
on() {
|
||||||
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
|
if omarchy-hyprland-toggle-enabled $TOGGLE; then
|
||||||
omarchy-hyprland-toggle --disabled-notification " Laptop display enabled" "$TOGGLE"
|
omarchy-hyprland-toggle $TOGGLE off
|
||||||
|
omarchy-notification-send -g "Laptop display enabled"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
off() {
|
||||||
if ! omarchy-hw-external-monitors; then
|
if ! omarchy-hw-external-monitors; then
|
||||||
notify-send -u low " Can't disable the only active display"
|
omarchy-notification-send -g "Can't disable the only active display"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if omarchy-hyprland-toggle-disabled "$TOGGLE" && omarchy-hyprland-toggle-disabled "$MIRROR_TOGGLE"; then
|
|
||||||
echo "monitor=$INTERNAL,disable" >"$TOGGLE_FLAG"
|
if omarchy-hyprland-toggle-disabled $TOGGLE && omarchy-hyprland-toggle-disabled $MIRROR_TOGGLE; then
|
||||||
notify-send -u low " Laptop display disabled"
|
printf 'hl.monitor({ output = "%s", disabled = true })\n' "$INTERNAL" >"$TOGGLE_FLAG"
|
||||||
|
omarchy-notification-send -g "Laptop display disabled"
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
recover() {
|
recover() {
|
||||||
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
|
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled $TOGGLE; then
|
||||||
omarchy-hyprland-toggle "$TOGGLE"
|
omarchy-hyprland-toggle $TOGGLE off
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if omarchy-hyprland-toggle-enabled $TOGGLE; then
|
||||||
|
on
|
||||||
|
else
|
||||||
|
off
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
on) enable ;;
|
on) on ;;
|
||||||
off) disable ;;
|
off) off ;;
|
||||||
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then enable; else disable; fi ;;
|
toggle) toggle ;;
|
||||||
recover) recover ;;
|
recover) recover ;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
|
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# omarchy:args=<on|off|toggle|recover>
|
# omarchy:args=<on|off|toggle|recover>
|
||||||
|
|
||||||
TOGGLE="internal-monitor-mirror"
|
TOGGLE="internal-monitor-mirror"
|
||||||
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
|
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.lua"
|
||||||
DISABLE_TOGGLE="internal-monitor-disable"
|
DISABLE_TOGGLE="internal-monitor-disable"
|
||||||
|
|
||||||
# Get names dynamically
|
# Get names dynamically
|
||||||
@@ -12,44 +12,51 @@ INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).na
|
|||||||
# Get the first available external monitor
|
# Get the first available external monitor
|
||||||
EXTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP") | not).name' | head -n 1)
|
EXTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP") | not).name' | head -n 1)
|
||||||
|
|
||||||
enable() {
|
on() {
|
||||||
if [[ -z "$EXTERNAL" ]]; then
|
if [[ -z $EXTERNAL ]]; then
|
||||||
notify-send -u low " No external monitors found for mirror"
|
omarchy-notification-send -g "No external monitors found for mirror"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z "$INTERNAL" ]]; then
|
if [[ -z $INTERNAL ]]; then
|
||||||
notify-send -u low " No laptop monitor found to mirror"
|
omarchy-notification-send -g "No laptop monitor found to mirror"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if omarchy-hyprland-toggle-enabled "$DISABLE_TOGGLE"; then
|
omarchy-hyprland-toggle $DISABLE_TOGGLE off
|
||||||
omarchy-hyprland-toggle "$DISABLE_TOGGLE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
|
if omarchy-hyprland-toggle-disabled $TOGGLE; then
|
||||||
echo "monitor=$EXTERNAL, preferred, auto, 1, mirror, $INTERNAL" > "$TOGGLE_FLAG"
|
printf 'hl.monitor({ output = "%s", mode = "preferred", position = "auto", scale = 1, mirror = "%s" })\n' "$EXTERNAL" "$INTERNAL" >"$TOGGLE_FLAG"
|
||||||
notify-send -u low " Mirroring enabled ($EXTERNAL)"
|
omarchy-notification-send -g "Mirroring enabled ($EXTERNAL)"
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
off() {
|
||||||
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
|
if omarchy-hyprland-toggle-enabled $TOGGLE; then
|
||||||
omarchy-hyprland-toggle --disabled-notification " Extended mode restored" "$TOGGLE"
|
omarchy-hyprland-toggle $TOGGLE off
|
||||||
|
omarchy-notification-send -g "Extended mode restored"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if omarchy-hyprland-toggle-enabled $TOGGLE; then
|
||||||
|
off
|
||||||
|
else
|
||||||
|
on
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
recover() {
|
recover() {
|
||||||
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
|
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled $TOGGLE; then
|
||||||
omarchy-hyprland-toggle "$TOGGLE"
|
omarchy-hyprland-toggle $TOGGLE off
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
on) enable ;;
|
on) on ;;
|
||||||
off) disable ;;
|
off) off ;;
|
||||||
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then disable; else enable; fi ;;
|
toggle) toggle ;;
|
||||||
recover) recover ;;
|
recover) recover ;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
|
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
|
||||||
|
|||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Print the monitor scale of the internal monitor or first other monitor
|
||||||
|
|
||||||
|
hyprctl monitors -j | jq -r '([.[] | select(.name | contains("eDP"))][0] // .[0]).scale // empty | tonumber | if . == floor then floor else . end'
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, and 3x
|
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, 3x, and 4x
|
||||||
|
|
||||||
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
|
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
|
||||||
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
|
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
|
||||||
@@ -9,8 +9,9 @@ WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
|
|||||||
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
|
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
|
||||||
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
|
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
|
||||||
|
|
||||||
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 1 (or reverse with --reverse)
|
# Cycle through monitor/GDK scale pairs: 1 → 1.25 → 1.6 → 2 → 3 → 4 → 1 (or reverse with --reverse)
|
||||||
SCALES=(1 1.25 1.6 2 3)
|
SCALES=(1 1.25 1.6 2 3 4)
|
||||||
|
GDK_SCALES=(1 1.25 1.75 2 3 4)
|
||||||
|
|
||||||
# Find the index of the scale closest to the current one (Hyprland may
|
# Find the index of the scale closest to the current one (Hyprland may
|
||||||
# snap fractional scales to nearby values, so we can't match exactly)
|
# snap fractional scales to nearby values, so we can't match exactly)
|
||||||
@@ -24,24 +25,30 @@ CURRENT_IDX=$(awk -v s="$CURRENT_SCALE" -v list="${SCALES[*]}" 'BEGIN {
|
|||||||
print best
|
print best
|
||||||
}')
|
}')
|
||||||
|
|
||||||
if [[ "$1" == "--reverse" ]]; then
|
if [[ $1 == "--reverse" ]]; then
|
||||||
NEW_IDX=$(( (CURRENT_IDX - 1 + ${#SCALES[@]}) % ${#SCALES[@]} ))
|
NEW_IDX=$(( (CURRENT_IDX - 1 + ${#SCALES[@]}) % ${#SCALES[@]} ))
|
||||||
else
|
else
|
||||||
NEW_IDX=$(( (CURRENT_IDX + 1) % ${#SCALES[@]} ))
|
NEW_IDX=$(( (CURRENT_IDX + 1) % ${#SCALES[@]} ))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NEW_SCALE=${SCALES[$NEW_IDX]}
|
NEW_SCALE=${SCALES[$NEW_IDX]}
|
||||||
|
NEW_GDK_SCALE=${GDK_SCALES[$NEW_IDX]}
|
||||||
|
|
||||||
hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto,$NEW_SCALE"
|
hyprctl eval "hl.monitor({ output = \"$ACTIVE_MONITOR\", mode = \"${WIDTH}x${HEIGHT}@${REFRESH_RATE}\", position = \"auto\", scale = $NEW_SCALE })" >/dev/null
|
||||||
|
|
||||||
# Persist to monitors.conf if the user has a single generic catch-all line
|
# Persist to monitors.lua if the user still has Omarchy's generic catch-all
|
||||||
# (ignoring disabled monitors), so the scale survives reboots.
|
# defaults, so the scale survives reboots.
|
||||||
MONITOR_CONF="$HOME/.config/hypr/monitors.conf"
|
MONITOR_LUA="$HOME/.config/hypr/monitors.lua"
|
||||||
if [[ -f $MONITOR_CONF ]]; then
|
if [[ -f $MONITOR_LUA ]] && grep -q '^local omarchy_monitor_scale = ' "$MONITOR_LUA"; then
|
||||||
mapfile -t ACTIVE_LINES < <(grep -E '^[[:space:]]*monitor=' "$MONITOR_CONF" | grep -vE 'disable[[:space:]]*$')
|
sed -i -E \
|
||||||
if [[ ${#ACTIVE_LINES[@]} -eq 1 ]] && [[ "${ACTIVE_LINES[0]}" =~ ^monitor=,preferred,auto, ]]; then
|
-e "s|^local omarchy_monitor_scale = .*|local omarchy_monitor_scale = ${NEW_SCALE}|" \
|
||||||
sed -i -E "s|^(monitor=,preferred,auto,).*|\\1${NEW_SCALE}|" "$MONITOR_CONF"
|
-e "s|^local omarchy_gdk_scale = .*|local omarchy_gdk_scale = ${NEW_GDK_SCALE}|" \
|
||||||
fi
|
"$MONITOR_LUA"
|
||||||
|
elif [[ -f $MONITOR_LUA ]] && grep -Eq '^hl\.monitor\(\{ output = "", mode = "preferred", position = "auto", scale = ("auto"|[0-9.]+) \}\)' "$MONITOR_LUA"; then
|
||||||
|
sed -i -E \
|
||||||
|
-e "s|^(hl\.monitor\(\{ output = \"\", mode = \"preferred\", position = \"auto\", scale = )([^ ]+)( \}\))|\\1${NEW_SCALE}\\3|" \
|
||||||
|
-e 's|^hl\.env\("GDK_SCALE", ".*"\)|hl.env("GDK_SCALE", "'"$NEW_GDK_SCALE"'")|' \
|
||||||
|
"$MONITOR_LUA"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
notify-send -u low " Display scaling set to ${NEW_SCALE}x"
|
notify-send -u low " Display scaling set to ${NEW_SCALE}x"
|
||||||
|
|||||||
+62
-17
@@ -1,32 +1,77 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
|
# omarchy:summary=Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
|
||||||
# omarchy:args=[--enabled-notification <text>] [--disabled-notification <text>] <flag-name>
|
# omarchy:args=[--enabled-notification <text>] [--disabled-notification <text>] <flag-name> [on|off|toggle]
|
||||||
|
|
||||||
ENABLED_NOTIFICATION=""
|
ENABLED_NOTIFICATION=""
|
||||||
DISABLED_NOTIFICATION=""
|
DISABLED_NOTIFICATION=""
|
||||||
|
|
||||||
while [[ $# -gt 1 ]]; do
|
while (($# > 0)); do
|
||||||
case $1 in
|
case $1 in
|
||||||
--enabled-notification) ENABLED_NOTIFICATION="$2"; shift 2 ;;
|
--enabled-notification)
|
||||||
--disabled-notification) DISABLED_NOTIFICATION="$2"; shift 2 ;;
|
if (($# < 2)); then
|
||||||
|
echo "Missing value for $1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
ENABLED_NOTIFICATION="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--disabled-notification)
|
||||||
|
if (($# < 2)); then
|
||||||
|
echo "Missing value for $1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
DISABLED_NOTIFICATION="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
*) break ;;
|
*) break ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
FLAG_NAME="$1"
|
if (($# < 1)); then
|
||||||
FLAG="$HOME/.local/state/omarchy/toggles/hypr/$FLAG_NAME.conf"
|
echo "Usage: omarchy-hyprland-toggle [--enabled-notification <text>] [--disabled-notification <text>] <flag-name> [on|off|toggle]" >&2
|
||||||
FLAG_SOURCE="$OMARCHY_PATH/default/hypr/toggles/$FLAG_NAME.conf"
|
|
||||||
|
|
||||||
if [[ -f $FLAG ]]; then
|
|
||||||
rm $FLAG
|
|
||||||
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
|
|
||||||
elif [[ -f $FLAG_SOURCE ]]; then
|
|
||||||
cp $FLAG_SOURCE $FLAG
|
|
||||||
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
|
|
||||||
else
|
|
||||||
echo "Flag not found: $FLAG_NAME"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
hyprctl reload
|
FLAG_NAME="$1"
|
||||||
|
ACTION="${2:-toggle}"
|
||||||
|
FLAG_FILE="$HOME/.local/state/omarchy/toggles/hypr/$FLAG_NAME.lua"
|
||||||
|
FLAG_SOURCE="$OMARCHY_PATH/default/hypr/toggles/$FLAG_NAME.lua"
|
||||||
|
|
||||||
|
on() {
|
||||||
|
if [[ -f $FLAG_SOURCE ]]; then
|
||||||
|
mkdir -p "$(dirname "$FLAG_FILE")"
|
||||||
|
cp "$FLAG_SOURCE" "$FLAG_FILE"
|
||||||
|
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
|
||||||
|
else
|
||||||
|
echo "Flag not found: $FLAG_NAME" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
off() {
|
||||||
|
rm -f "$FLAG_FILE"
|
||||||
|
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if [[ -f $FLAG_FILE ]]; then
|
||||||
|
off
|
||||||
|
echo "off"
|
||||||
|
else
|
||||||
|
on
|
||||||
|
echo "on"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case $ACTION in
|
||||||
|
on) on ;;
|
||||||
|
off) off ;;
|
||||||
|
toggle) toggle ;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-hyprland-toggle [--enabled-notification <text>] [--disabled-notification <text>] <flag-name> [on|off|toggle]" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
hyprctl reload >/dev/null
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
# omarchy:summary=Check if a Hyprland toggle is currently disabled (missing).
|
# omarchy:summary=Check if a Hyprland toggle is currently disabled (missing).
|
||||||
# omarchy:args=<flag-name>
|
# omarchy:args=<flag-name>
|
||||||
|
|
||||||
[[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
|
[[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.lua" ]]
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
# omarchy:summary=Check if a Hyprland toggle is currently enabled.
|
# omarchy:summary=Check if a Hyprland toggle is currently enabled.
|
||||||
# omarchy:args=<flag-name>
|
# omarchy:args=<flag-name>
|
||||||
|
|
||||||
[[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
|
[[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.lua" ]]
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
|
|
||||||
hyprctl clients -j | \
|
hyprctl clients -j | \
|
||||||
jq -r ".[].address" | \
|
jq -r ".[].address" | \
|
||||||
xargs -I{} hyprctl dispatch closewindow address:{}
|
while read -r addr; do
|
||||||
|
hyprctl dispatch "hl.dsp.window.close(\"address:$addr\")" >/dev/null 2>&1 || hyprctl dispatch closewindow "address:$addr"
|
||||||
|
done
|
||||||
|
|
||||||
# Move to first workspace
|
# Move to first workspace
|
||||||
hyprctl dispatch workspace 1
|
hyprctl dispatch 'hl.dsp.focus({ workspace = "1" })' >/dev/null 2>&1 || hyprctl dispatch workspace 1
|
||||||
|
|||||||
@@ -11,24 +11,30 @@ y=${4:-}
|
|||||||
active=$(hyprctl activewindow -j)
|
active=$(hyprctl activewindow -j)
|
||||||
pinned=$(echo "$active" | jq ".pinned")
|
pinned=$(echo "$active" | jq ".pinned")
|
||||||
addr=$(echo "$active" | jq -r ".address")
|
addr=$(echo "$active" | jq -r ".address")
|
||||||
|
window="address:$addr"
|
||||||
|
|
||||||
|
hypr_dispatch() {
|
||||||
|
local lua="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
if [[ $pinned == "true" ]]; then
|
if [[ $pinned == "true" ]]; then
|
||||||
hyprctl -q --batch \
|
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
|
||||||
"dispatch pin address:$addr;" \
|
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
|
||||||
"dispatch togglefloating address:$addr;" \
|
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"-pop\" })" tagwindow -pop "$window"
|
||||||
"dispatch tagwindow -pop address:$addr;"
|
|
||||||
elif [[ -n $addr ]]; then
|
elif [[ -n $addr ]]; then
|
||||||
hyprctl dispatch togglefloating address:$addr
|
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
|
||||||
hyprctl dispatch resizeactive exact $width $height address:$addr
|
hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = $width, y = $height })" resizeactive exact "$width" "$height" "$window"
|
||||||
|
|
||||||
if [[ -n $x && -n $y ]]; then
|
if [[ -n $x && -n $y ]]; then
|
||||||
hyprctl dispatch moveactive $x $y address:$addr
|
hypr_dispatch "hl.dsp.window.move({ window = \"$window\", x = $x, y = $y })" moveactive "$x" "$y" "$window"
|
||||||
else
|
else
|
||||||
hyprctl dispatch centerwindow address:$addr
|
hypr_dispatch "hl.dsp.window.center({ window = \"$window\" })" centerwindow "$window"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
hyprctl -q --batch \
|
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
|
||||||
"dispatch pin address:$addr;" \
|
hypr_dispatch "hl.dsp.window.alter_zorder({ window = \"$window\", mode = \"top\" })" alterzorder top "$window"
|
||||||
"dispatch alterzorder top address:$addr;" \
|
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"+pop\" })" tagwindow +pop "$window"
|
||||||
"dispatch tagwindow +pop address:$addr;"
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# omarchy:summary=Toggle single-window square aspect ratio.
|
# omarchy:summary=Toggle single-window square aspect ratio.
|
||||||
|
|
||||||
omarchy-hyprland-toggle \
|
case $(omarchy-hyprland-toggle single-window-aspect-ratio) in
|
||||||
--enabled-notification " Enable single-window square aspect ratio" \
|
on) omarchy-notification-send -g "Enable single-window square aspect ratio" ;;
|
||||||
--disabled-notification " Disable single-window square aspect ratio" \
|
off) omarchy-notification-send -g "Disable single-window square aspect ratio" ;;
|
||||||
single-window-aspect-ratio
|
esac
|
||||||
|
|||||||
@@ -2,4 +2,6 @@
|
|||||||
|
|
||||||
# omarchy:summary=Toggles transparency for the currently focused window.
|
# omarchy:summary=Toggles transparency for the currently focused window.
|
||||||
|
|
||||||
hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
|
addr=$(hyprctl activewindow -j | jq -r '.address')
|
||||||
|
hyprctl dispatch "hl.dsp.window.set_prop({ window = \"address:$addr\", prop = \"opaque\", value = \"toggle\" })" >/dev/null 2>&1 || \
|
||||||
|
hyprctl dispatch setprop "address:$addr" opaque toggle
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ case "$CURRENT_LAYOUT" in
|
|||||||
*) NEW_LAYOUT=dwindle ;;
|
*) NEW_LAYOUT=dwindle ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
hyprctl keyword workspace $ACTIVE_WORKSPACE, layout:$NEW_LAYOUT
|
hyprctl eval "hl.workspace_rule({ workspace = \"$ACTIVE_WORKSPACE\", layout = \"$NEW_LAYOUT\" })" >/dev/null 2>&1 || \
|
||||||
|
hyprctl keyword workspace $ACTIVE_WORKSPACE, layout:$NEW_LAYOUT
|
||||||
notify-send -u low " Workspace layout set to $NEW_LAYOUT"
|
notify-send -u low " Workspace layout set to $NEW_LAYOUT"
|
||||||
|
|||||||
@@ -1,24 +1,17 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Install a supported browser and make it the default
|
# omarchy:summary=Install a supported browser
|
||||||
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
|
# omarchy:args=<chrome|brave|brave-origin|edge|firefox|zen>
|
||||||
# omarchy:examples=omarchy install browser firefox | omarchy install browser brave
|
# omarchy:examples=omarchy install browser firefox | omarchy install browser brave
|
||||||
|
|
||||||
make_default() {
|
|
||||||
xdg-settings set default-web-browser "$1"
|
|
||||||
xdg-mime default "$1" x-scheme-handler/http
|
|
||||||
xdg-mime default "$1" x-scheme-handler/https
|
|
||||||
xdg-mime default "$1" text/html
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_policy_directory() {
|
setup_policy_directory() {
|
||||||
sudo mkdir -p "$1"
|
sudo mkdir -p "$1"
|
||||||
sudo chmod a+rw "$1"
|
sudo chmod a+rw "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
announce_default_browser() {
|
announce_browser_installed() {
|
||||||
echo ""
|
echo ""
|
||||||
echo "$1 is now the default browser. Start it with Super + Shift + Return."
|
echo "$1 browser installed. Make it the default via Setup > Defaults > Browser."
|
||||||
}
|
}
|
||||||
|
|
||||||
copy_chromium_flags() {
|
copy_chromium_flags() {
|
||||||
@@ -45,9 +38,8 @@ chrome)
|
|||||||
|
|
||||||
setup_policy_directory /etc/opt/chrome/policies/managed
|
setup_policy_directory /etc/opt/chrome/policies/managed
|
||||||
copy_chromium_flags ~/.config/chrome-flags.conf
|
copy_chromium_flags ~/.config/chrome-flags.conf
|
||||||
make_default google-chrome.desktop
|
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
announce_default_browser "Chrome"
|
announce_browser_installed "Chrome"
|
||||||
;;
|
;;
|
||||||
edge)
|
edge)
|
||||||
echo "Installing Edge..."
|
echo "Installing Edge..."
|
||||||
@@ -55,9 +47,8 @@ edge)
|
|||||||
|
|
||||||
setup_policy_directory /etc/opt/edge/policies/managed
|
setup_policy_directory /etc/opt/edge/policies/managed
|
||||||
copy_chromium_flags ~/.config/microsoft-edge-stable-flags.conf
|
copy_chromium_flags ~/.config/microsoft-edge-stable-flags.conf
|
||||||
make_default microsoft-edge.desktop
|
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
announce_default_browser "Edge"
|
announce_browser_installed "Edge"
|
||||||
;;
|
;;
|
||||||
brave)
|
brave)
|
||||||
echo "Installing Brave..."
|
echo "Installing Brave..."
|
||||||
@@ -65,9 +56,8 @@ brave)
|
|||||||
|
|
||||||
setup_policy_directory /etc/brave/policies/managed
|
setup_policy_directory /etc/brave/policies/managed
|
||||||
copy_chromium_flags ~/.config/brave-flags.conf
|
copy_chromium_flags ~/.config/brave-flags.conf
|
||||||
make_default brave-browser.desktop
|
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
announce_default_browser "Brave"
|
announce_browser_installed "Brave"
|
||||||
;;
|
;;
|
||||||
brave-origin)
|
brave-origin)
|
||||||
echo "Installing Brave Origin..."
|
echo "Installing Brave Origin..."
|
||||||
@@ -77,9 +67,8 @@ brave-origin)
|
|||||||
mkdir -p ~/.config
|
mkdir -p ~/.config
|
||||||
# FIXME: Use normal chromium flags when Brave Origin wrapper has been fixed
|
# FIXME: Use normal chromium flags when Brave Origin wrapper has been fixed
|
||||||
echo "--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url" > ~/.config/brave-origin-beta-flags.conf
|
echo "--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url" > ~/.config/brave-origin-beta-flags.conf
|
||||||
make_default brave-origin-beta.desktop
|
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
announce_default_browser "Brave Origin"
|
announce_browser_installed "Brave Origin"
|
||||||
;;
|
;;
|
||||||
firefox)
|
firefox)
|
||||||
echo "Installing Firefox..."
|
echo "Installing Firefox..."
|
||||||
@@ -87,8 +76,7 @@ firefox)
|
|||||||
|
|
||||||
setup_firefox_preferences /usr/lib/firefox/distribution
|
setup_firefox_preferences /usr/lib/firefox/distribution
|
||||||
setup_firefox_wayland
|
setup_firefox_wayland
|
||||||
make_default firefox.desktop
|
announce_browser_installed "Firefox"
|
||||||
announce_default_browser "Firefox"
|
|
||||||
;;
|
;;
|
||||||
zen)
|
zen)
|
||||||
echo "Installing Zen..."
|
echo "Installing Zen..."
|
||||||
@@ -96,8 +84,7 @@ zen)
|
|||||||
|
|
||||||
setup_firefox_preferences /opt/zen-browser/distribution
|
setup_firefox_preferences /opt/zen-browser/distribution
|
||||||
setup_firefox_wayland
|
setup_firefox_wayland
|
||||||
make_default zen.desktop
|
announce_browser_installed "Zen"
|
||||||
announce_default_browser "Zen"
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: omarchy-install-browser <chrome|brave|brave-origin|edge|firefox|zen>"
|
echo "Usage: omarchy-install-browser <chrome|brave|brave-origin|edge|firefox|zen>"
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ omarchy-pkg-add \
|
|||||||
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
|
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
|
||||||
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
|
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
|
||||||
libretro-yabause \
|
libretro-yabause \
|
||||||
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
|
libretro-cap32-git libretro-fbneo-git libretro-uae-git \
|
||||||
|
libretro-vice-x128-git libretro-vice-x64-git libretro-vice-x64dtv-git libretro-vice-x64sc-git \
|
||||||
|
libretro-vice-xcbm2-git libretro-vice-xcbm5x0-git libretro-vice-xpet-git \
|
||||||
|
libretro-vice-xplus4-git libretro-vice-xscpu64-git libretro-vice-xvic-git \
|
||||||
libretro-database-git \
|
libretro-database-git \
|
||||||
retroarch-joypad-autoconfig-git
|
retroarch-joypad-autoconfig-git
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
|||||||
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
||||||
|
|
||||||
if [[ -n $WINDOW_ADDRESS ]]; then
|
if [[ -n $WINDOW_ADDRESS ]]; then
|
||||||
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
hyprctl dispatch "hl.dsp.focus({ window = \"address:$WINDOW_ADDRESS\" })" >/dev/null 2>&1 || hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
||||||
else
|
else
|
||||||
eval exec setsid $LAUNCH_COMMAND
|
eval exec setsid $LAUNCH_COMMAND
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -20,35 +20,31 @@ walker -q
|
|||||||
focused=$(omarchy-hyprland-monitor-focused)
|
focused=$(omarchy-hyprland-monitor-focused)
|
||||||
terminal=$(xdg-terminal-exec --print-id)
|
terminal=$(xdg-terminal-exec --print-id)
|
||||||
|
|
||||||
|
hypr_focus_monitor() {
|
||||||
|
hyprctl dispatch "hl.dsp.focus({ monitor = \"$1\" })" >/dev/null 2>&1 || hyprctl dispatch focusmonitor "$1" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
hypr_exec() {
|
||||||
|
local command="$1"
|
||||||
|
|
||||||
|
hyprctl dispatch "hl.dsp.exec_cmd([[$command]])" >/dev/null 2>&1 || hyprctl dispatch exec -- bash -lc "$command" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
||||||
hyprctl dispatch focusmonitor $m
|
hypr_focus_monitor "$m"
|
||||||
|
|
||||||
case $terminal in
|
case $terminal in
|
||||||
*Alacritty*)
|
*Alacritty*)
|
||||||
hyprctl dispatch exec -- \
|
hypr_exec "alacritty --class=org.omarchy.screensaver --config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml -e omarchy-screensaver"
|
||||||
alacritty --class=org.omarchy.screensaver \
|
|
||||||
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
|
|
||||||
-e omarchy-screensaver
|
|
||||||
;;
|
;;
|
||||||
*ghostty*)
|
*ghostty*)
|
||||||
hyprctl dispatch exec -- \
|
hypr_exec "ghostty --class=org.omarchy.screensaver --config-file=~/.local/share/omarchy/default/ghostty/screensaver --font-size=18 -e omarchy-screensaver"
|
||||||
ghostty --class=org.omarchy.screensaver \
|
|
||||||
--config-file=~/.local/share/omarchy/default/ghostty/screensaver \
|
|
||||||
--font-size=18 \
|
|
||||||
-e omarchy-screensaver
|
|
||||||
;;
|
;;
|
||||||
*foot*)
|
*foot*)
|
||||||
hyprctl dispatch exec -- \
|
hypr_exec "foot --app-id=org.omarchy.screensaver --config=\"$OMARCHY_PATH/default/foot/screensaver.ini\" -e omarchy-screensaver"
|
||||||
foot --app-id=org.omarchy.screensaver \
|
|
||||||
--config="$OMARCHY_PATH/default/foot/screensaver.ini" \
|
|
||||||
-e omarchy-screensaver
|
|
||||||
;;
|
;;
|
||||||
*kitty*)
|
*kitty*)
|
||||||
hyprctl dispatch exec -- \
|
hypr_exec "kitty --class=org.omarchy.screensaver --override font_size=18 --override window_padding_width=0 -e omarchy-screensaver"
|
||||||
kitty --class=org.omarchy.screensaver \
|
|
||||||
--override font_size=18 \
|
|
||||||
--override window_padding_width=0 \
|
|
||||||
-e omarchy-screensaver
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
notify-send -u low "✋ Screensaver only runs in Alacritty, Foot, Ghostty, or Kitty"
|
notify-send -u low "✋ Screensaver only runs in Alacritty, Foot, Ghostty, or Kitty"
|
||||||
@@ -56,4 +52,4 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
hyprctl dispatch focusmonitor $focused
|
hypr_focus_monitor "$focused"
|
||||||
|
|||||||
+236
-55
@@ -56,6 +56,11 @@ open_in_editor() {
|
|||||||
omarchy-launch-editor "$1"
|
omarchy-launch-editor "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hypr_config_file() {
|
||||||
|
local name="$1"
|
||||||
|
printf '%s/.config/hypr/%s.lua' "$HOME" "$name"
|
||||||
|
}
|
||||||
|
|
||||||
install() {
|
install() {
|
||||||
present_terminal "echo 'Installing $1...'; omarchy-pkg-add $2"
|
present_terminal "echo 'Installing $1...'; omarchy-pkg-add $2"
|
||||||
}
|
}
|
||||||
@@ -93,9 +98,10 @@ show_learn_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_trigger_menu() {
|
show_trigger_menu() {
|
||||||
case $(menu "Trigger" " Capture\n Transcode\n Share\n Toggle\n Hardware") in
|
case $(menu "Trigger" " Reminder\n Capture\n Transcode\n Share\n Toggle\n Hardware") in
|
||||||
|
*Reminder*) show_reminder_menu ;;
|
||||||
*Capture*) show_capture_menu ;;
|
*Capture*) show_capture_menu ;;
|
||||||
*Transcode*) show_transcode_menu ;;
|
*Transcode*) omarchy-transcode || back_to show_trigger_menu ;;
|
||||||
*Share*) show_share_menu ;;
|
*Share*) show_share_menu ;;
|
||||||
*Toggle*) show_toggle_menu ;;
|
*Toggle*) show_toggle_menu ;;
|
||||||
*Hardware*) show_hardware_menu ;;
|
*Hardware*) show_hardware_menu ;;
|
||||||
@@ -103,6 +109,41 @@ show_trigger_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_reminder_menu() {
|
||||||
|
case $(menu "Reminder" " Set one\n Show all\n Clear all") in
|
||||||
|
*Set*) show_custom_reminder_input ;;
|
||||||
|
*"Show all"*) omarchy-reminder show ;;
|
||||||
|
*"Clear all"*) omarchy-reminder clear ;;
|
||||||
|
*) back_to show_trigger_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
show_custom_reminder_input() {
|
||||||
|
local minutes
|
||||||
|
minutes=$(omarchy-menu-input "Remind in minutes")
|
||||||
|
|
||||||
|
if [[ $minutes =~ ^[0-9]+$ ]] && ((minutes > 0)); then
|
||||||
|
show_reminder_message_input "$minutes"
|
||||||
|
elif [[ -n $minutes ]]; then
|
||||||
|
omarchy-notification-send -g "Invalid reminder" "Enter the number of minutes" -u critical
|
||||||
|
show_custom_reminder_input
|
||||||
|
else
|
||||||
|
back_to show_reminder_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
show_reminder_message_input() {
|
||||||
|
local minutes="$1"
|
||||||
|
local message
|
||||||
|
message=$(omarchy-menu-input "Reminder message")
|
||||||
|
|
||||||
|
if [[ -n $message ]]; then
|
||||||
|
omarchy-reminder "$minutes" "$message"
|
||||||
|
else
|
||||||
|
omarchy-reminder "$minutes"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
show_capture_menu() {
|
show_capture_menu() {
|
||||||
case $(menu "Capture" " Screenshot\n Screenrecord\n Text Extraction\n Color") in
|
case $(menu "Capture" " Screenshot\n Screenrecord\n Text Extraction\n Color") in
|
||||||
*Screenshot*) omarchy-capture-screenshot ;;
|
*Screenshot*) omarchy-capture-screenshot ;;
|
||||||
@@ -159,7 +200,8 @@ show_screenrecord_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_share_menu() {
|
show_share_menu() {
|
||||||
case $(menu "Share" " Clipboard\n File \n Folder") in
|
case $(menu "Share" " Clipboard\n File \n Folder\n Receive") in
|
||||||
|
*Receive*) uwsm-app -- localsend ;;
|
||||||
*Clipboard*) omarchy-menu-share clipboard ;;
|
*Clipboard*) omarchy-menu-share clipboard ;;
|
||||||
*File*) terminal bash -c "omarchy-menu-share file" ;;
|
*File*) terminal bash -c "omarchy-menu-share file" ;;
|
||||||
*Folder*) terminal bash -c "omarchy-menu-share folder" ;;
|
*Folder*) terminal bash -c "omarchy-menu-share folder" ;;
|
||||||
@@ -167,14 +209,6 @@ show_share_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_transcode_menu() {
|
|
||||||
case $(menu "Transcode" " Picture\n Video") in
|
|
||||||
*Picture*) present_terminal "omarchy-transcode --path '$HOME/Pictures'" ;;
|
|
||||||
*Video*) present_terminal "omarchy-transcode --path '$HOME/Videos'" ;;
|
|
||||||
*) back_to show_trigger_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_toggle_menu() {
|
show_toggle_menu() {
|
||||||
local options=" Screensaver\n Nightlight\n Idle Lock\n Notifications\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n Direct Boot\n Passwordless Sudo"
|
local options=" Screensaver\n Nightlight\n Idle Lock\n Notifications\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n Direct Boot\n Passwordless Sudo"
|
||||||
|
|
||||||
@@ -205,13 +239,18 @@ show_hardware_menu() {
|
|||||||
options="$options\n Touchpad"
|
options="$options\n Touchpad"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if omarchy-hw-dell-xps-haptic-touchpad && omarchy-cmd-present dell-xps-touchpad-haptics; then
|
||||||
|
options="$options\n Touchpad Haptics"
|
||||||
|
fi
|
||||||
|
|
||||||
if omarchy-hw-touchscreen; then
|
if omarchy-hw-touchscreen; then
|
||||||
options="$options\n Touchscreen"
|
options="$options\n Touchscreen"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case $(menu "Toggle" "$options") in
|
case $(menu "Toggle" "$options") in
|
||||||
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
|
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
|
||||||
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle;;
|
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle ;;
|
||||||
|
*Haptics*) show_hardware_touchpad_haptics_menu ;;
|
||||||
*Touchpad*) omarchy-toggle-touchpad ;;
|
*Touchpad*) omarchy-toggle-touchpad ;;
|
||||||
*Touchscreen*) omarchy-toggle-touchscreen ;;
|
*Touchscreen*) omarchy-toggle-touchscreen ;;
|
||||||
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
|
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
|
||||||
@@ -219,41 +258,67 @@ show_hardware_menu() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_hardware_touchpad_haptics_menu() {
|
||||||
|
local current=$(dell-xps-touchpad-haptics get)
|
||||||
|
local selected=$(menu "Touchpad Haptics" "low\nmid\nhigh" "" "$current")
|
||||||
|
|
||||||
|
if [[ -n $selected ]]; then
|
||||||
|
dell-xps-touchpad-haptics set "$selected"
|
||||||
|
else
|
||||||
|
back_to show_hardware_menu
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
show_style_menu() {
|
show_style_menu() {
|
||||||
case $(menu "Style" " Theme\n Unlock\n Font\n Background\n Hyprland\n Screensaver\n About") in
|
case $(menu "Style" " Theme\n Unlock\n Font\n Background\n Waybar\n Corners\n Hyprland\n Screensaver\n About") in
|
||||||
|
|
||||||
*Theme*) show_theme_menu ;;
|
*Theme*) show_theme_menu ;;
|
||||||
*Unlock*) omarchy-launch-walker -m menus:omarchyunlocks --width 800 --minheight 400 ;;
|
*Unlock*) omarchy-launch-walker -m menus:omarchyunlocks --width 800 --minheight 400 ;;
|
||||||
*Font*) show_font_menu ;;
|
*Font*) show_font_menu ;;
|
||||||
*Background*) show_background_menu ;;
|
*Background*) show_background_menu ;;
|
||||||
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
*Corners*) show_style_corners_menu ;;
|
||||||
|
*Hyprland*) open_in_editor "$(hypr_config_file looknfeel)" ;;
|
||||||
|
*Waybar*) show_waybar_position_menu ;;
|
||||||
*Screensaver*) show_screensaver_menu ;;
|
*Screensaver*) show_screensaver_menu ;;
|
||||||
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
|
*About*) show_about_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_screensaver_menu() {
|
show_style_corners_menu() {
|
||||||
case $(menu "Screensaver" " Edit Text\n Set From Image\n Preview\n Restore Default") in
|
case $(omarchy-menu-select "Corners" " Sharp" " Round") in
|
||||||
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
*Sharp*) omarchy-style-corners sharp ;;
|
||||||
*Image*) set_screensaver_from_image ;;
|
*Round*) omarchy-style-corners round ;;
|
||||||
*Preview*) omarchy-launch-screensaver force ;;
|
|
||||||
*Default*) terminal bash -lc 'omarchy-screensaver-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
|
|
||||||
*) show_style_menu ;;
|
*) show_style_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
set_screensaver_from_image() {
|
show_waybar_position_menu() {
|
||||||
terminal bash -lc '
|
case $(menu "Waybar Position" " Top\n Bottom\n Left\n Right") in
|
||||||
image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ")
|
*Top*) omarchy-style-waybar-position top ;;
|
||||||
if [[ -n $image ]]; then
|
*Bottom*) omarchy-style-waybar-position bottom ;;
|
||||||
if omarchy-screensaver-logo "$image"; then
|
*Left*) omarchy-style-waybar-position left ;;
|
||||||
echo
|
*Right*) omarchy-style-waybar-position right ;;
|
||||||
echo "Preview with: omarchy-launch-screensaver force"
|
*) show_style_menu ;;
|
||||||
fi
|
esac
|
||||||
echo
|
}
|
||||||
read -n 1 -s -r -p "Press any key to close..."
|
|
||||||
fi
|
show_about_menu() {
|
||||||
'
|
case $(menu "About" " Edit Text\n Set From Image\n Restore Default") in
|
||||||
|
*Text*) omarchy-branding-about text ;;
|
||||||
|
*Image*) omarchy-branding-about image ;;
|
||||||
|
*Default*) omarchy-branding-about reset ;;
|
||||||
|
*) show_style_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
show_screensaver_menu() {
|
||||||
|
case $(menu "Screensaver" " Edit Text\n Set From Image\n Restore Default") in
|
||||||
|
*Text*) omarchy-branding-screensaver text ;;
|
||||||
|
*Image*) omarchy-branding-screensaver image ;;
|
||||||
|
*Default*) omarchy-branding-screensaver reset ;;
|
||||||
|
*) show_style_menu ;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_theme_menu() {
|
show_theme_menu() {
|
||||||
@@ -275,9 +340,9 @@ show_font_menu() {
|
|||||||
|
|
||||||
show_setup_menu() {
|
show_setup_menu() {
|
||||||
local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n System Sleep\n Monitors"
|
local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n System Sleep\n Monitors"
|
||||||
[[ -f ~/.config/hypr/bindings.conf ]] && options="$options\n Keybindings"
|
[[ -f ~/.config/hypr/bindings.lua ]] && options="$options\n Keybindings"
|
||||||
[[ -f ~/.config/hypr/input.conf ]] && options="$options\n Input"
|
[[ -f ~/.config/hypr/input.lua ]] && options="$options\n Input"
|
||||||
options="$options\n DNS\n Security\n Config"
|
options="$options\n Defaults\n DNS\n Security\n Config"
|
||||||
|
|
||||||
case $(menu "Setup" "$options") in
|
case $(menu "Setup" "$options") in
|
||||||
*Audio*) omarchy-launch-audio ;;
|
*Audio*) omarchy-launch-audio ;;
|
||||||
@@ -285,9 +350,10 @@ show_setup_menu() {
|
|||||||
*Bluetooth*) omarchy-launch-bluetooth ;;
|
*Bluetooth*) omarchy-launch-bluetooth ;;
|
||||||
*Power*) show_setup_power_menu ;;
|
*Power*) show_setup_power_menu ;;
|
||||||
*System*) show_setup_system_menu ;;
|
*System*) show_setup_system_menu ;;
|
||||||
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
|
*Monitors*) open_in_editor "$(hypr_config_file monitors)" ;;
|
||||||
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
|
*Keybindings*) open_in_editor "$(hypr_config_file bindings)" ;;
|
||||||
*Input*) open_in_editor ~/.config/hypr/input.conf ;;
|
*Input*) open_in_editor "$(hypr_config_file input)" ;;
|
||||||
|
*Defaults*) show_setup_default_menu ;;
|
||||||
*DNS*) present_terminal omarchy-setup-dns ;;
|
*DNS*) present_terminal omarchy-setup-dns ;;
|
||||||
*Security*) show_setup_security_menu ;;
|
*Security*) show_setup_security_menu ;;
|
||||||
*Config*) show_setup_config_menu ;;
|
*Config*) show_setup_config_menu ;;
|
||||||
@@ -307,16 +373,121 @@ show_setup_power_menu() {
|
|||||||
|
|
||||||
show_setup_security_menu() {
|
show_setup_security_menu() {
|
||||||
case $(menu "Setup" " Fingerprint\n Fido2") in
|
case $(menu "Setup" " Fingerprint\n Fido2") in
|
||||||
*Fingerprint*) present_terminal omarchy-setup-fingerprint ;;
|
*Fingerprint*) present_terminal omarchy-setup-security-fingerprint ;;
|
||||||
*Fido2*) present_terminal omarchy-setup-fido2 ;;
|
*Fido2*) present_terminal omarchy-setup-security-fido2 ;;
|
||||||
*) show_setup_menu ;;
|
*) show_setup_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_setup_default_menu() {
|
||||||
|
case $(menu "Default" " Browser\n Terminal\n Editor") in
|
||||||
|
*Browser*) show_setup_default_browser_menu ;;
|
||||||
|
*Terminal*) show_setup_default_terminal_menu ;;
|
||||||
|
*Editor*) show_setup_default_editor_menu ;;
|
||||||
|
*) show_setup_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
browser_desktop_exists() {
|
||||||
|
[[ -f ~/.local/share/applications/$1 || -f ~/.nix-profile/share/applications/$1 || -f /usr/share/applications/$1 ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
show_setup_default_browser_menu() {
|
||||||
|
local options=""
|
||||||
|
browser_desktop_exists chromium.desktop && options="$options Chromium"
|
||||||
|
browser_desktop_exists google-chrome.desktop && options="${options:+$options\n} Chrome"
|
||||||
|
browser_desktop_exists brave-browser.desktop && options="${options:+$options\n} Brave"
|
||||||
|
browser_desktop_exists brave-origin-beta.desktop && options="${options:+$options\n} Brave Origin"
|
||||||
|
browser_desktop_exists microsoft-edge.desktop && options="${options:+$options\n} Edge"
|
||||||
|
browser_desktop_exists firefox.desktop && options="${options:+$options\n} Firefox"
|
||||||
|
browser_desktop_exists zen.desktop && options="${options:+$options\n} Zen"
|
||||||
|
|
||||||
|
local current=""
|
||||||
|
case "$(omarchy-default-browser)" in
|
||||||
|
chromium) current=" Chromium" ;;
|
||||||
|
chrome) current=" Chrome" ;;
|
||||||
|
brave) current=" Brave" ;;
|
||||||
|
brave-origin) current=" Brave Origin" ;;
|
||||||
|
edge) current=" Edge" ;;
|
||||||
|
firefox) current=" Firefox" ;;
|
||||||
|
zen) current=" Zen" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $(menu "Default Browser" "$options" "" "$current") in
|
||||||
|
*Chromium*) omarchy-default-browser chromium ;;
|
||||||
|
*Chrome*) omarchy-default-browser chrome ;;
|
||||||
|
*"Brave Origin"*) omarchy-default-browser brave-origin ;;
|
||||||
|
*Brave*) omarchy-default-browser brave ;;
|
||||||
|
*Edge*) omarchy-default-browser edge ;;
|
||||||
|
*Firefox*) omarchy-default-browser firefox ;;
|
||||||
|
*Zen*) omarchy-default-browser zen ;;
|
||||||
|
*) show_setup_default_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
show_setup_default_terminal_menu() {
|
||||||
|
local options=""
|
||||||
|
omarchy-cmd-present alacritty && options="$options Alacritty"
|
||||||
|
omarchy-cmd-present foot && options="${options:+$options\n} Foot"
|
||||||
|
omarchy-cmd-present ghostty && options="${options:+$options\n} Ghostty"
|
||||||
|
omarchy-cmd-present kitty && options="${options:+$options\n} Kitty"
|
||||||
|
|
||||||
|
local current=""
|
||||||
|
case "$(omarchy-default-terminal)" in
|
||||||
|
alacritty) current=" Alacritty" ;;
|
||||||
|
foot) current=" Foot" ;;
|
||||||
|
ghostty) current=" Ghostty" ;;
|
||||||
|
kitty) current=" Kitty" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $(menu "Default Terminal" "$options" "" "$current") in
|
||||||
|
*Alacritty*) omarchy-default-terminal alacritty ;;
|
||||||
|
*Foot*) omarchy-default-terminal foot ;;
|
||||||
|
*Ghostty*) omarchy-default-terminal ghostty ;;
|
||||||
|
*Kitty*) omarchy-default-terminal kitty ;;
|
||||||
|
*) show_setup_default_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
show_setup_default_editor_menu() {
|
||||||
|
local options=""
|
||||||
|
omarchy-cmd-present nvim && options="$options Neovim"
|
||||||
|
omarchy-cmd-present code && options="${options:+$options\n} VSCode"
|
||||||
|
omarchy-cmd-present cursor && options="${options:+$options\n} Cursor"
|
||||||
|
omarchy-cmd-present zeditor && options="${options:+$options\n} Zed"
|
||||||
|
omarchy-cmd-present sublime_text && options="${options:+$options\n} Sublime Text"
|
||||||
|
omarchy-cmd-present helix && options="${options:+$options\n} Helix"
|
||||||
|
omarchy-cmd-present vim && options="${options:+$options\n} Vim"
|
||||||
|
omarchy-cmd-present emacs && options="${options:+$options\n} Emacs"
|
||||||
|
|
||||||
|
local current=""
|
||||||
|
case "$(omarchy-default-editor)" in
|
||||||
|
nvim) current=" Neovim" ;;
|
||||||
|
code) current=" VSCode" ;;
|
||||||
|
cursor) current=" Cursor" ;;
|
||||||
|
zed | zeditor) current=" Zed" ;;
|
||||||
|
sublime_text) current=" Sublime Text" ;;
|
||||||
|
helix) current=" Helix" ;;
|
||||||
|
vim) current=" Vim" ;;
|
||||||
|
emacs) current=" Emacs" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $(menu "Default Editor" "$options" "" "$current") in
|
||||||
|
*Neovim*) omarchy-default-editor nvim ;;
|
||||||
|
*VSCode*) omarchy-default-editor code ;;
|
||||||
|
*Cursor*) omarchy-default-editor cursor ;;
|
||||||
|
*Zed*) omarchy-default-editor zed ;;
|
||||||
|
*Sublime*) omarchy-default-editor sublime_text ;;
|
||||||
|
*Helix*) omarchy-default-editor helix ;;
|
||||||
|
*Vim*) omarchy-default-editor vim ;;
|
||||||
|
*Emacs*) omarchy-default-editor emacs ;;
|
||||||
|
*) show_setup_default_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
show_setup_config_menu() {
|
show_setup_config_menu() {
|
||||||
case $(menu "Setup" " Defaults\n Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
||||||
*Defaults*) open_in_editor ~/.config/uwsm/default ;;
|
*Hyprland*) open_in_editor "$(hypr_config_file hyprland)" ;;
|
||||||
*Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;;
|
|
||||||
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;;
|
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;;
|
||||||
*Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
|
*Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
|
||||||
*Hyprsunset*) open_in_editor ~/.config/hypr/hyprsunset.conf && omarchy-restart-hyprsunset ;;
|
*Hyprsunset*) open_in_editor ~/.config/hypr/hyprsunset.conf && omarchy-restart-hyprsunset ;;
|
||||||
@@ -371,7 +542,7 @@ show_install_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_browser_menu() {
|
show_install_browser_menu() {
|
||||||
case $(menu "Install" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
|
case $(menu "Install" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
|
||||||
*Chrome*) present_terminal "omarchy-install-browser chrome" ;;
|
*Chrome*) present_terminal "omarchy-install-browser chrome" ;;
|
||||||
*Edge*) present_terminal "omarchy-install-browser edge" ;;
|
*Edge*) present_terminal "omarchy-install-browser edge" ;;
|
||||||
*"Brave Origin"*) present_terminal "omarchy-install-browser brave-origin" ;;
|
*"Brave Origin"*) present_terminal "omarchy-install-browser brave-origin" ;;
|
||||||
@@ -395,12 +566,13 @@ show_install_service_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_editor_menu() {
|
show_install_editor_menu() {
|
||||||
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
|
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Vim\n Emacs") in
|
||||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||||
*Zed*) present_terminal omarchy-install-zed ;;
|
*Zed*) present_terminal omarchy-install-zed ;;
|
||||||
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||||
*Helix*) present_terminal omarchy-install-helix ;;
|
*Helix*) present_terminal omarchy-install-helix ;;
|
||||||
|
*Vim*) install "Vim" "vim" ;;
|
||||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
||||||
*) show_install_menu ;;
|
*) show_install_menu ;;
|
||||||
esac
|
esac
|
||||||
@@ -433,8 +605,9 @@ show_install_ai_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_gaming_menu() {
|
show_install_gaming_menu() {
|
||||||
case $(menu "Install" " Steam\n RetroArch\n Minecraft\n NVIDIA GeForce NOW\n Xbox Cloud Gaming\n Xbox Controller ()\n Moonlight (GameStream)\n Lutris (Battle.net)\n Heroic (Epic Games)") in
|
case $(menu "Install" " Steam\n RetroArch\n Minecraft\n NVIDIA GeForce NOW\n Xbox Cloud Gaming\n Xbox Controller\n Moonlight (GameStream)\n Lutris (Battle.net)\n Heroic (Epic Games)\n RetroArch Game Launcher") in
|
||||||
*Steam*) present_terminal omarchy-install-gaming-steam ;;
|
*Steam*) present_terminal omarchy-install-gaming-steam ;;
|
||||||
|
*"RetroArch Game Launcher"*) omarchy-games-retro-install ;;
|
||||||
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
|
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
|
||||||
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
||||||
*GeForce*) present_terminal omarchy-install-gaming-geforce-now ;;
|
*GeForce*) present_terminal omarchy-install-gaming-geforce-now ;;
|
||||||
@@ -515,23 +688,30 @@ show_install_elixir_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_menu() {
|
show_remove_menu() {
|
||||||
case $(menu "Remove" " Package\n Browser\n Web App\n TUI\n Development\n Gaming\n Preinstalls\n Dictation\n Theme\n Windows\n Fingerprint\n Fido2") in
|
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Theme\n Browser\n Dictation\n Gaming\n Windows\n Preinstalls\n Security") in
|
||||||
*Package*) terminal omarchy-pkg-remove ;;
|
*Package*) terminal omarchy-pkg-remove ;;
|
||||||
*Browser*) show_remove_browser_menu ;;
|
|
||||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
*Web*) present_terminal omarchy-webapp-remove ;;
|
||||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
*TUI*) present_terminal omarchy-tui-remove ;;
|
||||||
*Development*) show_remove_development_menu ;;
|
*Development*) show_remove_development_menu ;;
|
||||||
*Gaming*) show_remove_gaming_menu ;;
|
|
||||||
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
|
|
||||||
*Dictation*) present_terminal omarchy-voxtype-remove ;;
|
|
||||||
*Theme*) present_terminal omarchy-theme-remove ;;
|
*Theme*) present_terminal omarchy-theme-remove ;;
|
||||||
|
*Browser*) show_remove_browser_menu ;;
|
||||||
|
*Dictation*) present_terminal omarchy-voxtype-remove ;;
|
||||||
|
*Gaming*) show_remove_gaming_menu ;;
|
||||||
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
||||||
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
|
||||||
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
|
*Security*) show_remove_security_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_remove_security_menu() {
|
||||||
|
case $(menu "Remove" " Fingerprint\n Fido2") in
|
||||||
|
*Fingerprint*) present_terminal omarchy-remove-security-fingerprint ;;
|
||||||
|
*Fido2*) present_terminal omarchy-remove-security-fido2 ;;
|
||||||
|
*) show_remove_menu ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
show_remove_browser_menu() {
|
show_remove_browser_menu() {
|
||||||
case $(menu "Remove" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
|
case $(menu "Remove" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
|
||||||
*Chrome*) present_terminal "omarchy-remove-browser chrome" ;;
|
*Chrome*) present_terminal "omarchy-remove-browser chrome" ;;
|
||||||
@@ -708,7 +888,8 @@ go_to_menu() {
|
|||||||
*toggle*) show_toggle_menu ;;
|
*toggle*) show_toggle_menu ;;
|
||||||
*hardware*) show_hardware_menu ;;
|
*hardware*) show_hardware_menu ;;
|
||||||
*share*) show_share_menu ;;
|
*share*) show_share_menu ;;
|
||||||
*transcode*) show_transcode_menu ;;
|
*reminder-set*) show_custom_reminder_input ;;
|
||||||
|
*reminder*) show_reminder_menu ;;
|
||||||
*background*) show_background_menu ;;
|
*background*) show_background_menu ;;
|
||||||
*capture*) show_capture_menu ;;
|
*capture*) show_capture_menu ;;
|
||||||
*style*) show_style_menu ;;
|
*style*) show_style_menu ;;
|
||||||
|
|||||||
Executable
+48
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Pick a file with Walker
|
||||||
|
# omarchy:group=menu
|
||||||
|
# omarchy:name=file
|
||||||
|
# omarchy:args=label paths formats [walker args...]
|
||||||
|
# omarchy:examples=omarchy menu file "Select image" "$HOME/Pictures" "jpg png webp"|omarchy-menu-file "Select media" "$HOME/Pictures:$HOME/Videos" "jpg png mp4 mov" --width 800
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if (( $# < 3 )); then
|
||||||
|
echo "Usage: omarchy-menu-file <label> <paths> <formats> [walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
label="$1"
|
||||||
|
paths_arg="$2"
|
||||||
|
formats_arg="$3"
|
||||||
|
shift 3
|
||||||
|
|
||||||
|
IFS=: read -r -a paths <<<"$paths_arg"
|
||||||
|
read -r -a formats <<<"$formats_arg"
|
||||||
|
|
||||||
|
if (( ${#paths[@]} == 0 || ${#formats[@]} == 0 )); then
|
||||||
|
echo "Usage: omarchy-menu-file <label> <paths> <formats> [walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for path in "${paths[@]}"; do
|
||||||
|
[[ -e $path ]] || { echo "Path not found: $path" >&2; exit 1; }
|
||||||
|
done
|
||||||
|
|
||||||
|
find_args=("${paths[@]}" "(" -type d -name ".*" ! -name "." -prune ")" -o -type f ! -name ".*" "(")
|
||||||
|
first_format=true
|
||||||
|
for format in "${formats[@]}"; do
|
||||||
|
if [[ $first_format == "true" ]]; then
|
||||||
|
first_format=false
|
||||||
|
else
|
||||||
|
find_args+=(-o)
|
||||||
|
fi
|
||||||
|
|
||||||
|
format="${format#.}"
|
||||||
|
find_args+=(-iname "*.$format")
|
||||||
|
done
|
||||||
|
find_args+=(")" -printf '%T@\t%p\n')
|
||||||
|
|
||||||
|
find "${find_args[@]}" 2>/dev/null | sort -rn | cut -f2- |
|
||||||
|
omarchy-launch-walker --dmenu --width 800 --minheight 1 --maxheight 500 -p "$label…" "$@" 2>/dev/null
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Prompt for text input with Walker
|
||||||
|
# omarchy:group=menu
|
||||||
|
# omarchy:name=input
|
||||||
|
# omarchy:args=prompt [walker args...]
|
||||||
|
# omarchy:examples=omarchy menu input Reminder|omarchy-menu-input "Reminder in minutes" --width 400
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
prompt="${1:-Input}"
|
||||||
|
if (( $# > 0 )); then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
omarchy-launch-walker --dmenu --inputonly --width 295 --minheight 1 --maxheight 1 -p "$prompt…" "$@" 2>/dev/null
|
||||||
+219
-39
@@ -3,6 +3,28 @@
|
|||||||
# omarchy:summary=Display Hyprland keybindings defined in your configuration using walker for an interactive search menu.
|
# omarchy:summary=Display Hyprland keybindings defined in your configuration using walker for an interactive search menu.
|
||||||
|
|
||||||
declare -A KEYCODE_SYM_MAP
|
declare -A KEYCODE_SYM_MAP
|
||||||
|
# Hyprland reports XKB keycodes for code: bindings. Keep a small fallback for
|
||||||
|
# common keys so the menu remains readable if xkbcli cannot resolve a symbol.
|
||||||
|
declare -A FALLBACK_KEYCODE_SYM_MAP=(
|
||||||
|
[10]="1"
|
||||||
|
[11]="2"
|
||||||
|
[12]="3"
|
||||||
|
[13]="4"
|
||||||
|
[14]="5"
|
||||||
|
[15]="6"
|
||||||
|
[16]="7"
|
||||||
|
[17]="8"
|
||||||
|
[18]="9"
|
||||||
|
[19]="0"
|
||||||
|
[20]="MINUS"
|
||||||
|
[21]="EQUAL"
|
||||||
|
[61]="SLASH"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Hyprland's Lua config provider currently reports code:... binds from hl.bind()
|
||||||
|
# as key="" and keycode=0 in `hyprctl -j binds`. Keep a lightweight
|
||||||
|
# source-derived key cache so the menu can still show those bindings.
|
||||||
|
declare -A LUA_BIND_KEY_MAP
|
||||||
|
|
||||||
build_keymap_cache() {
|
build_keymap_cache() {
|
||||||
local keymap
|
local keymap
|
||||||
@@ -37,7 +59,18 @@ build_keymap_cache() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lookup_keycode_cached() {
|
lookup_keycode_cached() {
|
||||||
printf '%s\n' "${KEYCODE_SYM_MAP[$1]}"
|
local symbol
|
||||||
|
symbol="${KEYCODE_SYM_MAP[$1]}"
|
||||||
|
|
||||||
|
if [[ -z $symbol ]]; then
|
||||||
|
symbol="${FALLBACK_KEYCODE_SYM_MAP[$1]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $symbol ]]; then
|
||||||
|
symbol="code:$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "${symbol^^}"
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_keycodes() {
|
parse_keycodes() {
|
||||||
@@ -80,44 +113,151 @@ parse_keycodes() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fetch dynamic keybindings from Hyprland
|
# Supplement `hyprctl -j binds` for Lua-only binds that Hyprland currently
|
||||||
|
# reports without their original key, such as hl.bind("SUPER + code:10", ...).
|
||||||
|
build_lua_bind_key_cache() {
|
||||||
|
local modmask description key
|
||||||
|
|
||||||
|
omarchy-cmd-present lua || return 0
|
||||||
|
|
||||||
|
while IFS=$'\t' read -r modmask description key; do
|
||||||
|
[[ -z $modmask || -z $description || -z $key ]] && continue
|
||||||
|
LUA_BIND_KEY_MAP["$modmask,$description"]="$key"
|
||||||
|
done < <(
|
||||||
|
lua <<'LUA'
|
||||||
|
local modifiers = { SHIFT = 1, CTRL = 4, CONTROL = 4, ALT = 8, SUPER = 64 }
|
||||||
|
|
||||||
|
local function split_keys(keys)
|
||||||
|
local modmask = 0
|
||||||
|
local key = ""
|
||||||
|
|
||||||
|
for part in string.gmatch(keys, "[^+]+") do
|
||||||
|
local value = part:gsub("^%s+", ""):gsub("%s+$", "")
|
||||||
|
local modifier = modifiers[string.upper(value)]
|
||||||
|
|
||||||
|
if modifier then
|
||||||
|
modmask = modmask + modifier
|
||||||
|
else
|
||||||
|
key = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return modmask, key
|
||||||
|
end
|
||||||
|
|
||||||
|
local function proxy()
|
||||||
|
local p = {}
|
||||||
|
|
||||||
|
return setmetatable(p, {
|
||||||
|
__index = function()
|
||||||
|
return p
|
||||||
|
end,
|
||||||
|
__call = function()
|
||||||
|
return p
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local p = proxy()
|
||||||
|
|
||||||
|
hl = setmetatable({
|
||||||
|
dsp = p,
|
||||||
|
bind = function(keys, _, opts)
|
||||||
|
opts = opts or {}
|
||||||
|
if opts.description and opts.description ~= "" then
|
||||||
|
local modmask, key = split_keys(keys)
|
||||||
|
print(modmask .. "\t" .. opts.description .. "\t" .. key)
|
||||||
|
end
|
||||||
|
return p
|
||||||
|
end,
|
||||||
|
unbind = function() end,
|
||||||
|
config = function() end,
|
||||||
|
env = function() end,
|
||||||
|
monitor = function() end,
|
||||||
|
window_rule = function() end,
|
||||||
|
gesture = function() end,
|
||||||
|
animation = function() end,
|
||||||
|
curve = function() end,
|
||||||
|
exec_cmd = function() end,
|
||||||
|
}, {
|
||||||
|
__index = function()
|
||||||
|
return function()
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local config = (os.getenv("HOME") or "") .. "/.config/hypr/hyprland.lua"
|
||||||
|
local file = io.open(config, "r")
|
||||||
|
|
||||||
|
if file then
|
||||||
|
file:close()
|
||||||
|
local ok, err = pcall(dofile, config)
|
||||||
|
if not ok and os.getenv("DEBUG") == "1" then
|
||||||
|
io.stderr:write("[DEBUG] lua bind scan failed: " .. tostring(err) .. "\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
LUA
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
modmask_to_text() {
|
||||||
|
case "$1" in
|
||||||
|
0) printf '' ;;
|
||||||
|
1) printf 'SHIFT' ;;
|
||||||
|
4) printf 'CTRL' ;;
|
||||||
|
5) printf 'SHIFT CTRL' ;;
|
||||||
|
8) printf 'ALT' ;;
|
||||||
|
9) printf 'SHIFT ALT' ;;
|
||||||
|
12) printf 'CTRL ALT' ;;
|
||||||
|
13) printf 'SHIFT CTRL ALT' ;;
|
||||||
|
64) printf 'SUPER' ;;
|
||||||
|
65) printf 'SUPER SHIFT' ;;
|
||||||
|
68) printf 'SUPER CTRL' ;;
|
||||||
|
69) printf 'SUPER SHIFT CTRL' ;;
|
||||||
|
72) printf 'SUPER ALT' ;;
|
||||||
|
73) printf 'SUPER SHIFT ALT' ;;
|
||||||
|
76) printf 'SUPER CTRL ALT' ;;
|
||||||
|
77) printf 'SUPER SHIFT CTRL ALT' ;;
|
||||||
|
*) printf '%s' "$1" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fetch dynamic keybindings from Hyprland.
|
||||||
#
|
#
|
||||||
# Also do some pre-processing:
|
# Also do some pre-processing:
|
||||||
|
# - Fill missing Lua code:... keys from the Lua source cache
|
||||||
# - Remove standard Omarchy bin path prefix
|
# - Remove standard Omarchy bin path prefix
|
||||||
# - Remove uwsm prefix
|
|
||||||
# - Map numeric modifier key mask to a textual rendition
|
# - Map numeric modifier key mask to a textual rendition
|
||||||
# - Output comma-separated values that the parser can understand
|
# - Output comma-separated values that the parser can understand
|
||||||
dynamic_bindings() {
|
dynamic_bindings() {
|
||||||
|
local modmask key keycode description dispatcher arg modifiers
|
||||||
|
|
||||||
hyprctl -j binds |
|
hyprctl -j binds |
|
||||||
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
jq -r '.[] | [.modmask, (.key // ""), (.keycode // 0), (.description // ""), (.dispatcher // ""), (.arg // "") | tostring] | join("\u001f")' |
|
||||||
sed -r \
|
while IFS=$'\x1f' read -r modmask key keycode description dispatcher arg; do
|
||||||
-e 's/null//' \
|
if [[ -z $key && $keycode != "0" ]]; then
|
||||||
-e 's,~/.local/share/omarchy/bin/,,' \
|
key="code:$keycode"
|
||||||
-e 's,uwsm app -- ,,' \
|
fi
|
||||||
-e 's,uwsm-app -- ,,' \
|
|
||||||
-e 's/@0//' \
|
if [[ -z $key && -n $description ]]; then
|
||||||
-e 's/,@/,code:/' \
|
key="${LUA_BIND_KEY_MAP["$modmask,$description"]}"
|
||||||
-e 's/^0,/,/' \
|
fi
|
||||||
-e 's/^1,/SHIFT,/' \
|
|
||||||
-e 's/^4,/CTRL,/' \
|
[[ -z $description && $dispatcher == "__lua" ]] && continue
|
||||||
-e 's/^5,/SHIFT CTRL,/' \
|
|
||||||
-e 's/^8,/ALT,/' \
|
modifiers=$(modmask_to_text "$modmask")
|
||||||
-e 's/^9,/SHIFT ALT,/' \
|
arg="${arg//~\/.local\/share\/omarchy\/bin\//}"
|
||||||
-e 's/^12,/CTRL ALT,/' \
|
arg="${arg//uwsm app -- /}"
|
||||||
-e 's/^13,/SHIFT CTRL ALT,/' \
|
arg="${arg//uwsm-app -- /}"
|
||||||
-e 's/^64,/SUPER,/' \
|
|
||||||
-e 's/^65,/SUPER SHIFT,/' \
|
printf '%s,%s,%s,%s,%s\n' "$modifiers" "$key" "$description" "$dispatcher" "$arg"
|
||||||
-e 's/^68,/SUPER CTRL,/' \
|
done
|
||||||
-e 's/^69,/SUPER SHIFT CTRL,/' \
|
|
||||||
-e 's/^72,/SUPER ALT,/' \
|
|
||||||
-e 's/^73,/SUPER SHIFT ALT,/' \
|
|
||||||
-e 's/^76,/SUPER CTRL ALT,/' \
|
|
||||||
-e 's/^77,/SUPER SHIFT CTRL ALT,/'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Hardcoded bindings, like the copy-url extension and such
|
# Hardcoded bindings, like the copy-url extension and such
|
||||||
static_bindings() {
|
static_bindings() {
|
||||||
echo "SHIFT ALT,L,Copy URL from Web App,extension,copy-url"
|
echo "SHIFT ALT,L,Copy URL from Web App,sendshortcut,SHIFT ALT,L,"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Parse and format keybindings
|
# Parse and format keybindings
|
||||||
@@ -126,8 +266,8 @@ static_bindings() {
|
|||||||
# - Set the field separator to a comma ','.
|
# - Set the field separator to a comma ','.
|
||||||
# - Joins the key combination (e.g., "SUPER + Q").
|
# - Joins the key combination (e.g., "SUPER + Q").
|
||||||
# - Joins the command that the key executes.
|
# - Joins the command that the key executes.
|
||||||
# - Prints everything in a nicely aligned format.
|
# - Prints display text and dispatch metadata as tab-separated fields.
|
||||||
parse_bindings() {
|
parse_binding_records() {
|
||||||
awk -F, '
|
awk -F, '
|
||||||
{
|
{
|
||||||
# Combine the modifier and key (first two fields)
|
# Combine the modifier and key (first two fields)
|
||||||
@@ -139,6 +279,13 @@ parse_bindings() {
|
|||||||
|
|
||||||
# Use description, if set
|
# Use description, if set
|
||||||
action = $3;
|
action = $3;
|
||||||
|
dispatcher = $4;
|
||||||
|
|
||||||
|
# Reconstruct the dispatcher arg from the remaining fields
|
||||||
|
arg = "";
|
||||||
|
for (i = 5; i <= NF; i++) {
|
||||||
|
arg = arg $i (i < NF ? "," : "");
|
||||||
|
}
|
||||||
|
|
||||||
if (action == "") {
|
if (action == "") {
|
||||||
# Reconstruct the command from the remaining fields
|
# Reconstruct the command from the remaining fields
|
||||||
@@ -149,6 +296,7 @@ parse_bindings() {
|
|||||||
# Clean up trailing commas, remove leading "exec, ", and trim
|
# Clean up trailing commas, remove leading "exec, ", and trim
|
||||||
sub(/,$/, "", action);
|
sub(/,$/, "", action);
|
||||||
gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action);
|
gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action);
|
||||||
|
gsub(/(^|[[:space:]])uwsm(-app| app)[[:space:]]+--[[:space:]]+/, "", action);
|
||||||
gsub(/^[ \t]+|[ \t]+$/, "", action);
|
gsub(/^[ \t]+|[ \t]+$/, "", action);
|
||||||
gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
|
gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
|
||||||
|
|
||||||
@@ -161,15 +309,15 @@ parse_bindings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (action != "") {
|
if (action != "") {
|
||||||
printf "%-35s → %s\n", key_combo, action;
|
printf "%-35s → %s\t%s\t%s\n", key_combo, action, dispatcher, arg;
|
||||||
}
|
}
|
||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
prioritize_entries() {
|
prioritize_entries() {
|
||||||
awk '
|
awk -F '\t' '
|
||||||
{
|
{
|
||||||
line = $0
|
line = $1
|
||||||
prio = 50
|
prio = 50
|
||||||
if (match(line, /Terminal/)) prio = 0
|
if (match(line, /Terminal/)) prio = 0
|
||||||
if (match(line, /Tmux/)) prio = 1
|
if (match(line, /Tmux/)) prio = 1
|
||||||
@@ -220,15 +368,16 @@ prioritize_entries() {
|
|||||||
if (match(line, /Apple Display/)) prio = 98
|
if (match(line, /Apple Display/)) prio = 98
|
||||||
if (match(line, /XF86/)) prio = 99
|
if (match(line, /XF86/)) prio = 99
|
||||||
|
|
||||||
# print "priority<TAB>line"
|
# print "priority<TAB>record"
|
||||||
printf "%d\t%s\n", prio, line
|
printf "%d\t%s\n", prio, $0
|
||||||
}' |
|
}' |
|
||||||
sort -k1,1n -k2,2 |
|
sort -k1,1n -k2,2 |
|
||||||
cut -f2-
|
cut -f2-
|
||||||
}
|
}
|
||||||
|
|
||||||
output_keybindings() {
|
output_binding_records() {
|
||||||
build_keymap_cache
|
build_keymap_cache
|
||||||
|
build_lua_bind_key_cache
|
||||||
|
|
||||||
{
|
{
|
||||||
dynamic_bindings
|
dynamic_bindings
|
||||||
@@ -236,16 +385,47 @@ output_keybindings() {
|
|||||||
} |
|
} |
|
||||||
sort -u |
|
sort -u |
|
||||||
parse_keycodes |
|
parse_keycodes |
|
||||||
parse_bindings |
|
parse_binding_records |
|
||||||
prioritize_entries
|
prioritize_entries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output_keybindings() {
|
||||||
|
output_binding_records | cut -f1
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_binding() {
|
||||||
|
local dispatcher="$1"
|
||||||
|
local arg="$2"
|
||||||
|
|
||||||
|
case "$dispatcher" in
|
||||||
|
exec)
|
||||||
|
[[ -n $arg ]] && hyprctl dispatch exec "$arg"
|
||||||
|
;;
|
||||||
|
"") return 1 ;;
|
||||||
|
*)
|
||||||
|
if [[ -n $arg ]]; then
|
||||||
|
hyprctl dispatch "$dispatcher" "$arg"
|
||||||
|
else
|
||||||
|
hyprctl dispatch "$dispatcher"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
if [[ $1 == "--print" || $1 == "-p" ]]; then
|
if [[ $1 == "--print" || $1 == "-p" ]]; then
|
||||||
output_keybindings
|
output_keybindings
|
||||||
else
|
else
|
||||||
|
records=$(output_binding_records)
|
||||||
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
||||||
menu_height=$((monitor_height * 40 / 100))
|
menu_height=$((monitor_height * 40 / 100))
|
||||||
|
selection=$(cut -f1 <<<"$records" |
|
||||||
|
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height")
|
||||||
|
|
||||||
output_keybindings |
|
if [[ -n $selection ]]; then
|
||||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
record=$(awk -F '\t' -v selection="$selection" '$1 == selection { print; exit }' <<<"$records")
|
||||||
|
dispatcher=$(cut -f2 <<<"$record")
|
||||||
|
arg=$(cut -f3- <<<"$record")
|
||||||
|
|
||||||
|
dispatch_binding "$dispatcher" "$arg"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
Executable
+38
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Pick one option with Walker
|
||||||
|
# omarchy:group=menu
|
||||||
|
# omarchy:name=select
|
||||||
|
# omarchy:args=prompt option... [-- walker args...]
|
||||||
|
# omarchy:examples=omarchy menu select Format jpg png|omarchy-menu-select Resolution 4k 1080p 720p -- --width 400
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if (( $# < 2 )); then
|
||||||
|
echo "Usage: omarchy-menu-select <prompt> <option>... [-- walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
options=()
|
||||||
|
walker_args=()
|
||||||
|
|
||||||
|
while (( $# > 0 )); do
|
||||||
|
if [[ $1 == "--" ]]; then
|
||||||
|
shift
|
||||||
|
walker_args=("$@")
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
options+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if (( ${#options[@]} == 0 )); then
|
||||||
|
echo "Usage: omarchy-menu-select <prompt> <option>... [-- walker args...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "${options[@]}" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 300 -p "$prompt…" "${walker_args[@]}" 2>/dev/null
|
||||||
Executable
+76
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Send a desktop notification with Omarchy glyph and body spacing
|
||||||
|
# omarchy:args=<headline> [description] [-g <glyph>] [-u <low|normal|critical>] [notify-send options]
|
||||||
|
# omarchy:examples=omarchy notification send "Reminder" "5 minutes are up" -g -u critical
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
headline=""
|
||||||
|
description=""
|
||||||
|
glyph=""
|
||||||
|
urgency="low"
|
||||||
|
args=()
|
||||||
|
|
||||||
|
parse_omarchy_option() {
|
||||||
|
case $1 in
|
||||||
|
-g | --glyph)
|
||||||
|
if (($# < 2)); then
|
||||||
|
echo "Missing value for $1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
glyph="$2"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-u | --urgency)
|
||||||
|
if (($# < 2)); then
|
||||||
|
echo "Missing value for $1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
urgency="$2"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
while (($# > 0)); do
|
||||||
|
if parse_omarchy_option "$@"; then
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if (($# < 1)); then
|
||||||
|
echo "Usage: omarchy-notification-send [-g <glyph>] [-u <low|normal|critical>] <headline> [description] [notify-send options]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
headline=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
if (($# > 0)) && [[ $1 != -* ]]; then
|
||||||
|
description=$1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
while (($# > 0)); do
|
||||||
|
if parse_omarchy_option "$@"; then
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
args+=("$1")
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
summary="$glyph $headline"
|
||||||
|
args+=("-u" "$urgency")
|
||||||
|
|
||||||
|
if [[ -n $description ]]; then
|
||||||
|
description=$(printf '%b' "$description" | sed 's/^/ /')
|
||||||
|
notify-send "${args[@]}" "$summary" "$description"
|
||||||
|
else
|
||||||
|
notify-send "${args[@]}" "$summary"
|
||||||
|
fi
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Overwrite all the user configs in ~/.config/hypr with the Omarchy defaults.
|
# omarchy:summary=Overwrite all the user Hyprland Lua configs in ~/.config/hypr with the Omarchy defaults.
|
||||||
|
|
||||||
omarchy-refresh-config hypr/autostart.conf
|
omarchy-refresh-config hypr/.luarc.json
|
||||||
omarchy-refresh-config hypr/bindings.conf
|
omarchy-refresh-config hypr/autostart.lua
|
||||||
omarchy-refresh-config hypr/input.conf
|
omarchy-refresh-config hypr/bindings.lua
|
||||||
omarchy-refresh-config hypr/looknfeel.conf
|
omarchy-refresh-config hypr/input.lua
|
||||||
omarchy-refresh-config hypr/hyprland.conf
|
omarchy-refresh-config hypr/looknfeel.lua
|
||||||
omarchy-refresh-config hypr/monitors.conf
|
omarchy-refresh-config hypr/hyprland.lua
|
||||||
|
omarchy-refresh-config hypr/monitors.lua
|
||||||
bash "$OMARCHY_PATH/install/config/detect-keyboard-layout.sh"
|
bash "$OMARCHY_PATH/install/config/detect-keyboard-layout.sh"
|
||||||
|
|||||||
@@ -19,5 +19,8 @@ echo
|
|||||||
sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf
|
sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf
|
||||||
sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist
|
sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
|
# Allow user customization of /etc/pacman.conf before the upgrade runs
|
||||||
|
omarchy-hook pre-refresh-pacman
|
||||||
|
|
||||||
# Reset all package DBs and then update
|
# Reset all package DBs and then update
|
||||||
sudo pacman -Syyuu --noconfirm
|
sudo pacman -Syyuu --noconfirm
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Reinstall the Omarchy source directory from git
|
# omarchy:summary=Reinstall the stable Omarchy source directory from git
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Reinstall the Omarchy configuration directory from the git source.
|
# Reinstall the Omarchy configuration directory from the git source.
|
||||||
|
|
||||||
git clone --depth=1 "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
|
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
|
||||||
mv $OMARCHY_PATH ~/.local/share/omarchy-old
|
mv $OMARCHY_PATH ~/.local/share/omarchy-old
|
||||||
mv ~/.local/share/omarchy-new $OMARCHY_PATH
|
mv ~/.local/share/omarchy-new $OMARCHY_PATH
|
||||||
|
|||||||
Executable
+136
@@ -0,0 +1,136 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set and show lightweight desktop notification reminders
|
||||||
|
# omarchy:args=<minutes> [message] | show | clear
|
||||||
|
# omarchy:examples=omarchy reminder 5 | omarchy reminder 30 "Check the oven" | omarchy reminder show | omarchy reminder clear
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
format_remaining() {
|
||||||
|
local seconds=$1
|
||||||
|
local minutes=$((seconds / 60))
|
||||||
|
local remainder=$((seconds % 60))
|
||||||
|
|
||||||
|
if ((minutes > 0 && remainder > 0)); then
|
||||||
|
echo "${minutes}m ${remainder}s"
|
||||||
|
elif ((minutes > 0)); then
|
||||||
|
echo "${minutes}m"
|
||||||
|
else
|
||||||
|
echo "${remainder}s"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_systemd_timespan() {
|
||||||
|
local timespan="$1"
|
||||||
|
local total=0
|
||||||
|
local value unit whole
|
||||||
|
|
||||||
|
while read -r value unit; do
|
||||||
|
whole=${value%.*}
|
||||||
|
|
||||||
|
case $unit in
|
||||||
|
d) total=$((total + whole * 86400)) ;;
|
||||||
|
h) total=$((total + whole * 3600)) ;;
|
||||||
|
min) total=$((total + whole * 60)) ;;
|
||||||
|
s) total=$((total + whole)) ;;
|
||||||
|
ms | us) ;;
|
||||||
|
esac
|
||||||
|
done < <(grep -oE '[0-9]+([.][0-9]+)?(d|h|min|s|ms|us)' <<<"$timespan" | sed -E 's/^([0-9.]+)([a-z]+)$/\1 \2/')
|
||||||
|
|
||||||
|
echo "$total"
|
||||||
|
}
|
||||||
|
|
||||||
|
show_reminders() {
|
||||||
|
local timer next remaining body=""
|
||||||
|
local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
|
||||||
|
local reminder_message=""
|
||||||
|
local now=$(date +%s)
|
||||||
|
|
||||||
|
while IFS=$'\t' read -r timer next; do
|
||||||
|
[[ -z $timer || -z $next ]] && continue
|
||||||
|
|
||||||
|
next=$((next / 1000000))
|
||||||
|
((next <= now)) && continue
|
||||||
|
|
||||||
|
remaining=$((next - now))
|
||||||
|
reminder=${timer%.timer}
|
||||||
|
reminder=${reminder#omarchy-reminder-}
|
||||||
|
set_at=${reminder##*-}
|
||||||
|
reminder_minutes=${reminder%%m-*}
|
||||||
|
reminder_message=""
|
||||||
|
[[ -f $reminder_dir/${timer%.timer}.message ]] && reminder_message=$(<"$reminder_dir/${timer%.timer}.message")
|
||||||
|
|
||||||
|
if [[ -n $reminder_message ]]; then
|
||||||
|
body+="$reminder_message in $(format_remaining $remaining) ($(date -d "@$next" +%-H:%M))"$'\n'
|
||||||
|
else
|
||||||
|
body+="${reminder_minutes}-min reminder in $(format_remaining $remaining) ($(date -d "@$next" +%-H:%M))"$'\n'
|
||||||
|
fi
|
||||||
|
done < <(systemctl --user list-timers --all --output=json "omarchy-reminder-*.timer" 2>/dev/null | jq -r '.[] | [.unit, .next] | @tsv')
|
||||||
|
|
||||||
|
if [[ -z $body ]]; then
|
||||||
|
omarchy-notification-send -g "Upcoming reminders" "No outstanding reminders"
|
||||||
|
else
|
||||||
|
omarchy-notification-send -g "Upcoming reminders" "${body%$'\n'}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_reminders() {
|
||||||
|
local units
|
||||||
|
local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
|
||||||
|
|
||||||
|
units=$(systemctl --user list-timers --all --no-legend --no-pager "omarchy-reminder-*.timer" 2>/dev/null | awk '{ print $(NF - 1), $NF }')
|
||||||
|
|
||||||
|
if [[ -n $units ]]; then
|
||||||
|
xargs -r systemctl --user stop <<<"$units" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$reminder_dir"/omarchy-reminder-*.message 2>/dev/null || true
|
||||||
|
omarchy-notification-send -g "All reminders have been cleared"
|
||||||
|
}
|
||||||
|
|
||||||
|
case ${1:-} in
|
||||||
|
show | list)
|
||||||
|
show_reminders
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
clear)
|
||||||
|
clear_reminders
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
minutes=${1:-}
|
||||||
|
shift || true
|
||||||
|
message="$*"
|
||||||
|
custom_message="$message"
|
||||||
|
|
||||||
|
if [[ -z $minutes ]] || [[ ! $minutes =~ ^[0-9]+$ ]] || ((minutes == 0)); then
|
||||||
|
echo "Usage: omarchy-reminder <minutes> [message]"
|
||||||
|
echo " omarchy-reminder show"
|
||||||
|
echo " omarchy-reminder clear"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $message ]]; then
|
||||||
|
message="Your ${minutes} minutes are up"
|
||||||
|
fi
|
||||||
|
|
||||||
|
set_at=$(date +%s)
|
||||||
|
remind_at=$(date -d "+${minutes} minutes" +%H:%M)
|
||||||
|
unit="omarchy-reminder-${minutes}m-$set_at"
|
||||||
|
reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
|
||||||
|
message_file="$reminder_dir/$unit.message"
|
||||||
|
confirmation="You'll be reminded at $remind_at"
|
||||||
|
confirmation_title="Reminder set for ${minutes} minutes"
|
||||||
|
|
||||||
|
mkdir -p "$reminder_dir"
|
||||||
|
|
||||||
|
if [[ -n $custom_message ]]; then
|
||||||
|
printf "%s" "$custom_message" >"$message_file"
|
||||||
|
confirmation_title="$custom_message in ${minutes} minutes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemd-run --user --quiet --collect --on-active="${minutes}m" --unit="$unit" \
|
||||||
|
bash -c 'omarchy-notification-send -g "Reminder" "$1" -u critical; rm -f "$2"' bash "$message" "$message_file"
|
||||||
|
|
||||||
|
omarchy-notification-send -g "$confirmation_title" "$confirmation"
|
||||||
@@ -21,7 +21,10 @@ omarchy-pkg-drop \
|
|||||||
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
|
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
|
||||||
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
|
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
|
||||||
libretro-yabause \
|
libretro-yabause \
|
||||||
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
|
libretro-cap32-git libretro-fbneo-git libretro-uae-git \
|
||||||
|
libretro-vice-x128-git libretro-vice-x64-git libretro-vice-x64dtv-git libretro-vice-x64sc-git \
|
||||||
|
libretro-vice-xcbm2-git libretro-vice-xcbm5x0-git libretro-vice-xpet-git \
|
||||||
|
libretro-vice-xplus4-git libretro-vice-xscpu64-git libretro-vice-xvic-git \
|
||||||
retroarch-joypad-autoconfig-git
|
retroarch-joypad-autoconfig-git
|
||||||
|
|
||||||
rm -rf \
|
rm -rf \
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI w
|
|||||||
omarchy-webapp-remove-all
|
omarchy-webapp-remove-all
|
||||||
omarchy-tui-remove-all
|
omarchy-tui-remove-all
|
||||||
|
|
||||||
cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak
|
[[ -f ~/.config/hypr/bindings.lua ]] && cp ~/.config/hypr/bindings.lua ~/.config/hypr/bindings.lua.bak
|
||||||
cp "$OMARCHY_PATH/default/hypr/plain-bindings.conf" ~/.config/hypr/bindings.conf
|
cp "$OMARCHY_PATH/default/hypr/plain-bindings.lua" ~/.config/hypr/bindings.lua
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
|
|
||||||
# Remove npx stubs
|
# Remove npx stubs
|
||||||
|
|||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Remove FIDO2 authentication from sudo and polkit
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
remove_pam_config() {
|
||||||
|
# Remove from sudo
|
||||||
|
if grep -q pam_u2f.so /etc/pam.d/sudo; then
|
||||||
|
echo "Removing FIDO2 authentication from sudo..."
|
||||||
|
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove from polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Removing FIDO2 authentication from polkit..."
|
||||||
|
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mRemoving FIDO2 device from authentication.\n\e[0m"
|
||||||
|
|
||||||
|
remove_pam_config
|
||||||
|
|
||||||
|
if [[ -d /etc/fido2 ]]; then
|
||||||
|
echo "Removing FIDO2 configuration..."
|
||||||
|
sudo rm -rf /etc/fido2
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Removing FIDO2 packages..."
|
||||||
|
omarchy-pkg-drop libfido2 pam-u2f
|
||||||
|
|
||||||
|
echo -e "\e[32mFIDO2 authentication has been completely removed.\e[0m"
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Remove fingerprint authentication from sudo, polkit, and lock screen
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
remove_pam_config() {
|
||||||
|
# Remove from sudo
|
||||||
|
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
||||||
|
echo "Removing fingerprint authentication from sudo..."
|
||||||
|
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove from polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Removing fingerprint authentication from polkit..."
|
||||||
|
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_hyprlock_fingerprint_icon() {
|
||||||
|
echo "Removing fingerprint icon from hyprlock placeholder text..."
|
||||||
|
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mRemoving fingerprint scanner from authentication.\n\e[0m"
|
||||||
|
|
||||||
|
remove_pam_config
|
||||||
|
remove_hyprlock_fingerprint_icon
|
||||||
|
|
||||||
|
echo "Removing fingerprint packages..."
|
||||||
|
omarchy-pkg-drop fprintd libfprint-git
|
||||||
|
|
||||||
|
echo -e "\e[32mFingerprint authentication has been completely removed.\e[0m"
|
||||||
@@ -2,5 +2,9 @@
|
|||||||
|
|
||||||
# omarchy:summary=Restart the PipeWire audio service to fix audio issues or apply new configuration.
|
# omarchy:summary=Restart the PipeWire audio service to fix audio issues or apply new configuration.
|
||||||
|
|
||||||
echo -e "Restarting pipewire audio service...\n"
|
echo -e "Restarting PipeWire audio services...\n"
|
||||||
systemctl --user restart pipewire.service
|
systemctl --user restart wireplumber.service pipewire.service
|
||||||
|
|
||||||
|
if systemctl --user --quiet is-active pipewire-pulse.service; then
|
||||||
|
systemctl --user restart pipewire-pulse.service
|
||||||
|
fi
|
||||||
|
|||||||
@@ -2,4 +2,8 @@
|
|||||||
|
|
||||||
# omarchy:summary=Restart the SwayOSD server
|
# omarchy:summary=Restart the SwayOSD server
|
||||||
|
|
||||||
omarchy-restart-app swayosd-server
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user stop swayosd-server.service || true
|
||||||
|
pkill -x swayosd-server || true
|
||||||
|
systemctl --user reset-failed swayosd-server.service || true
|
||||||
|
systemctl --user enable --now swayosd-server.service
|
||||||
|
|||||||
@@ -3,4 +3,5 @@
|
|||||||
# omarchy:summary=Restart Waybar
|
# omarchy:summary=Restart Waybar
|
||||||
# omarchy:examples=omarchy restart waybar
|
# omarchy:examples=omarchy restart waybar
|
||||||
|
|
||||||
omarchy-restart-app waybar
|
pkill -9 -x waybar
|
||||||
|
setsid uwsm-app -- waybar >/dev/null 2>&1 &
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ screensaver_in_focus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
exit_screensaver() {
|
exit_screensaver() {
|
||||||
hyprctl keyword cursor:invisible false &>/dev/null || true
|
hyprctl eval 'hl.config({ cursor = { invisible = false } })' &>/dev/null || hyprctl keyword cursor:invisible false &>/dev/null || true
|
||||||
pkill -x tte 2>/dev/null
|
pkill -x tte 2>/dev/null
|
||||||
pkill -f org.omarchy.screensaver 2>/dev/null
|
pkill -f org.omarchy.screensaver 2>/dev/null
|
||||||
exit 0
|
exit 0
|
||||||
@@ -18,7 +18,7 @@ trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
|
|||||||
|
|
||||||
printf '\033]11;rgb:00/00/00\007' # Set background color to black
|
printf '\033]11;rgb:00/00/00\007' # Set background color to black
|
||||||
|
|
||||||
hyprctl keyword cursor:invisible true &>/dev/null
|
hyprctl eval 'hl.config({ cursor = { invisible = true } })' &>/dev/null || hyprctl keyword cursor:invisible true &>/dev/null
|
||||||
|
|
||||||
tty=$(tty 2>/dev/null)
|
tty=$(tty 2>/dev/null)
|
||||||
|
|
||||||
|
|||||||
@@ -1,131 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# omarchy:summary=Set up or remove FIDO2 authentication for sudo and polkit
|
|
||||||
# omarchy:args=[--remove]
|
|
||||||
# omarchy:requires-sudo=true
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
print_success() {
|
|
||||||
echo -e "${GREEN}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_error() {
|
|
||||||
echo -e "${RED}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info() {
|
|
||||||
echo -e "${YELLOW}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_fido2_hardware() {
|
|
||||||
tokens=$(fido2-token -L 2>/dev/null)
|
|
||||||
if [[ -z $tokens ]]; then
|
|
||||||
print_error "\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well)."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_pam_config() {
|
|
||||||
# Configure sudo
|
|
||||||
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Configuring sudo for FIDO2 authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Configuring polkit for FIDO2 authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
|
|
||||||
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
|
||||||
print_info "Creating polkit configuration with FIDO2 authentication..."
|
|
||||||
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
|
||||||
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
|
|
||||||
auth required pam_unix.so
|
|
||||||
|
|
||||||
account required pam_unix.so
|
|
||||||
password required pam_unix.so
|
|
||||||
session required pam_unix.so
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_pam_config() {
|
|
||||||
# Remove from sudo
|
|
||||||
if grep -q pam_u2f.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Removing FIDO2 authentication from sudo..."
|
|
||||||
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove from polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Removing FIDO2 authentication from polkit..."
|
|
||||||
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "--remove" == $1 ]]; then
|
|
||||||
print_success "Removing FIDO2 device from authentication.\n"
|
|
||||||
|
|
||||||
# Remove PAM configuration
|
|
||||||
remove_pam_config
|
|
||||||
|
|
||||||
# Remove FIDO2 configuration
|
|
||||||
if [[ -d /etc/fido2 ]]; then
|
|
||||||
print_info "Removing FIDO2 configuration..."
|
|
||||||
sudo rm -rf /etc/fido2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Uninstall packages
|
|
||||||
print_info "Removing FIDO2 packages..."
|
|
||||||
sudo pacman -Rns --noconfirm libfido2 pam-u2f
|
|
||||||
|
|
||||||
print_success "FIDO2 authentication has been completely removed."
|
|
||||||
else
|
|
||||||
print_success "Setting up FIDO2 device for authentication.\n"
|
|
||||||
|
|
||||||
# Install required packages
|
|
||||||
print_info "Installing required packages..."
|
|
||||||
omarchy-pkg-add libfido2 pam-u2f
|
|
||||||
|
|
||||||
if ! check_fido2_hardware; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create the pamu2fcfg file
|
|
||||||
if [[ ! -f /etc/fido2/fido2 ]]; then
|
|
||||||
sudo mkdir -p /etc/fido2
|
|
||||||
print_success "\nLet's setup your device by confirming on the device now."
|
|
||||||
print_info "Touch your FIDO2 key when it lights up...\n"
|
|
||||||
|
|
||||||
if pamu2fcfg >/tmp/fido2; then
|
|
||||||
sudo mv /tmp/fido2 /etc/fido2/fido2
|
|
||||||
print_success "FIDO2 device registered successfully!"
|
|
||||||
else
|
|
||||||
print_error "\nFIDO2 registration failed. Please try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
print_info "FIDO2 device already registered."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure PAM
|
|
||||||
setup_pam_config
|
|
||||||
|
|
||||||
# Test with sudo
|
|
||||||
print_info "\nTesting FIDO2 authentication with sudo..."
|
|
||||||
print_info "Touch your FIDO2 key when prompted.\n"
|
|
||||||
|
|
||||||
if sudo echo "FIDO2 authentication test successful"; then
|
|
||||||
print_success "\nPerfect! FIDO2 authentication is now configured."
|
|
||||||
print_info "You can use your FIDO2 key for sudo and polkit authentication."
|
|
||||||
else
|
|
||||||
print_error "\nVerification failed. You may want to check your configuration."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# omarchy:summary=Set up or remove fingerprint authentication for sudo, polkit, and lock screen
|
|
||||||
# omarchy:args=[--remove]
|
|
||||||
# omarchy:requires-sudo=true
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
print_success() {
|
|
||||||
echo -e "${GREEN}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_error() {
|
|
||||||
echo -e "${RED}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_info() {
|
|
||||||
echo -e "${YELLOW}$1${NC}"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_fingerprint_hardware() {
|
|
||||||
# Get fingerprint devices for the user
|
|
||||||
devices=$(fprintd-list "$USER" 2>/dev/null)
|
|
||||||
|
|
||||||
# Exit if no devices found
|
|
||||||
if [[ -z $devices ]]; then
|
|
||||||
print_error "\nNo fingerprint sensor detected."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_pam_config() {
|
|
||||||
# Configure sudo
|
|
||||||
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Configuring sudo for fingerprint authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Configuring polkit for fingerprint authentication..."
|
|
||||||
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
|
|
||||||
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
|
||||||
print_info "Creating polkit configuration with fingerprint authentication..."
|
|
||||||
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
|
||||||
auth sufficient pam_fprintd.so
|
|
||||||
auth required pam_unix.so
|
|
||||||
|
|
||||||
account required pam_unix.so
|
|
||||||
password required pam_unix.so
|
|
||||||
session required pam_unix.so
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
add_hyprlock_fingerprint_icon() {
|
|
||||||
print_info "Adding fingerprint icon to hyprlock placeholder text..."
|
|
||||||
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
|
||||||
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_hyprlock_fingerprint_icon() {
|
|
||||||
print_info "Removing fingerprint icon from hyprlock placeholder text..."
|
|
||||||
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
|
|
||||||
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_pam_config() {
|
|
||||||
# Remove from sudo
|
|
||||||
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
|
||||||
print_info "Removing fingerprint authentication from sudo..."
|
|
||||||
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove from polkit
|
|
||||||
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
|
||||||
print_info "Removing fingerprint authentication from polkit..."
|
|
||||||
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "--remove" == $1 ]]; then
|
|
||||||
print_success "Removing fingerprint scanner from authentication.\n"
|
|
||||||
|
|
||||||
# Remove PAM configuration
|
|
||||||
remove_pam_config
|
|
||||||
|
|
||||||
# Remove fingerprint icon from hyprlock placeholder text
|
|
||||||
remove_hyprlock_fingerprint_icon
|
|
||||||
|
|
||||||
# Uninstall packages
|
|
||||||
print_info "Removing fingerprint packages..."
|
|
||||||
sudo pacman -Rns --noconfirm fprintd
|
|
||||||
|
|
||||||
print_success "Fingerprint authentication has been completely removed."
|
|
||||||
else
|
|
||||||
print_success "Setting up fingerprint scanner for authentication.\n"
|
|
||||||
|
|
||||||
# Install required packages
|
|
||||||
print_info "Installing required packages..."
|
|
||||||
|
|
||||||
# ASUS ExpertBook B9406CAA ships a FocalTech FT9349 ESS reader (USB
|
|
||||||
# 2808:a97a). Mainline libfprint at 1.94.x lacks the focaltech_moc
|
|
||||||
# driver (and its 0xa97a id_table entry); OPR ships libfprint-git
|
|
||||||
# which carries both. Once upstream catches up, this branch is a
|
|
||||||
# no-op and `libfprint-git` provides=libfprint anyway. Detect via
|
|
||||||
# /sys to avoid depending on usbutils being installed first.
|
|
||||||
for v in /sys/bus/usb/devices/*/idVendor; do
|
|
||||||
[[ "$(cat "$v" 2>/dev/null)" == "2808" ]] || continue
|
|
||||||
[[ "$(cat "${v%idVendor}idProduct" 2>/dev/null)" == "a97a" ]] || continue
|
|
||||||
print_info "FocalTech FT9349 detected (B9406CAA) — using libfprint-git from OPR..."
|
|
||||||
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
|
|
||||||
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
|
|
||||||
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
|
|
||||||
# -Rns) is required because fprintd requires libfprint; the dep is
|
|
||||||
# re-satisfied immediately by libfprint-git's provides=libfprint.
|
|
||||||
if omarchy-pkg-present libfprint; then
|
|
||||||
sudo pacman -Rdd --noconfirm libfprint
|
|
||||||
fi
|
|
||||||
omarchy-pkg-add libfprint-git
|
|
||||||
break
|
|
||||||
done
|
|
||||||
|
|
||||||
omarchy-pkg-add fprintd usbutils
|
|
||||||
|
|
||||||
if ! check_fingerprint_hardware; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configure PAM
|
|
||||||
setup_pam_config
|
|
||||||
|
|
||||||
# Add fingerprint icon to hyprlock placeholder text
|
|
||||||
add_hyprlock_fingerprint_icon
|
|
||||||
|
|
||||||
# Enroll first fingerprint
|
|
||||||
print_success "\nLet's setup your right index finger as the first fingerprint."
|
|
||||||
print_info "Keep moving the finger around on sensor until the process completes.\n"
|
|
||||||
|
|
||||||
if sudo fprintd-enroll "$USER"; then
|
|
||||||
print_success "\nFingerprint enrolled successfully!"
|
|
||||||
|
|
||||||
# Verify
|
|
||||||
print_info "\nNow let's verify that it's working correctly.\n"
|
|
||||||
if fprintd-verify; then
|
|
||||||
print_success "\nPerfect! Fingerprint authentication is now configured."
|
|
||||||
print_info "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
|
|
||||||
else
|
|
||||||
print_error "\nVerification failed. You may want to try enrolling again."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
print_error "\nEnrollment failed. Please try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
Executable
+81
@@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set up FIDO2 authentication for sudo and polkit
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
check_fido2_hardware() {
|
||||||
|
tokens=$(fido2-token -L 2>/dev/null)
|
||||||
|
if [[ -z $tokens ]]; then
|
||||||
|
echo -e "\e[31m\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well).\e[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_pam_config() {
|
||||||
|
# Configure sudo
|
||||||
|
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
|
||||||
|
echo "Configuring sudo for FIDO2 authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Configuring polkit for FIDO2 authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
|
||||||
|
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
||||||
|
echo "Creating polkit configuration with FIDO2 authentication..."
|
||||||
|
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
||||||
|
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
|
||||||
|
auth required pam_unix.so
|
||||||
|
|
||||||
|
account required pam_unix.so
|
||||||
|
password required pam_unix.so
|
||||||
|
session required pam_unix.so
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mSetting up FIDO2 device for authentication.\n\e[0m"
|
||||||
|
|
||||||
|
# Install required packages
|
||||||
|
echo "Installing required packages..."
|
||||||
|
omarchy-pkg-add libfido2 pam-u2f
|
||||||
|
|
||||||
|
if ! check_fido2_hardware; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create the pamu2fcfg file
|
||||||
|
if [[ ! -f /etc/fido2/fido2 ]]; then
|
||||||
|
sudo mkdir -p /etc/fido2
|
||||||
|
echo -e "\e[32m\nLet's setup your device by confirming on the device now.\e[0m"
|
||||||
|
echo -e "Touch your FIDO2 key when it lights up...\n"
|
||||||
|
|
||||||
|
if pamu2fcfg >/tmp/fido2; then
|
||||||
|
sudo mv /tmp/fido2 /etc/fido2/fido2
|
||||||
|
echo -e "\e[32mFIDO2 device registered successfully!\e[0m"
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nFIDO2 registration failed. Please try again.\e[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "FIDO2 device already registered."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure PAM
|
||||||
|
setup_pam_config
|
||||||
|
|
||||||
|
# Test with sudo
|
||||||
|
echo -e "\nTesting FIDO2 authentication with sudo..."
|
||||||
|
echo -e "Touch your FIDO2 key when prompted.\n"
|
||||||
|
|
||||||
|
if sudo echo "FIDO2 authentication test successful"; then
|
||||||
|
echo -e "\e[32m\nPerfect! FIDO2 authentication is now configured.\e[0m"
|
||||||
|
echo "You can use your FIDO2 key for sudo and polkit authentication."
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nVerification failed. You may want to check your configuration.\e[0m"
|
||||||
|
fi
|
||||||
Executable
+95
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set up fingerprint authentication for sudo, polkit, and lock screen
|
||||||
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
check_fingerprint_hardware() {
|
||||||
|
# Get fingerprint devices for the user
|
||||||
|
devices=$(fprintd-list "$USER" 2>/dev/null)
|
||||||
|
|
||||||
|
# Exit if no devices found
|
||||||
|
if [[ -z $devices ]]; then
|
||||||
|
echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_pam_config() {
|
||||||
|
# Configure sudo
|
||||||
|
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
||||||
|
echo "Configuring sudo for fingerprint authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure polkit
|
||||||
|
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
|
||||||
|
echo "Configuring polkit for fingerprint authentication..."
|
||||||
|
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
|
||||||
|
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
|
||||||
|
echo "Creating polkit configuration with fingerprint authentication..."
|
||||||
|
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
|
||||||
|
auth sufficient pam_fprintd.so
|
||||||
|
auth required pam_unix.so
|
||||||
|
|
||||||
|
account required pam_unix.so
|
||||||
|
password required pam_unix.so
|
||||||
|
session required pam_unix.so
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_hyprlock_fingerprint_icon() {
|
||||||
|
echo "Adding fingerprint icon to hyprlock placeholder text..."
|
||||||
|
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password <\/span>/' ~/.config/hypr/hyprlock.conf
|
||||||
|
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\e[32mSetting up fingerprint scanner for authentication.\n\e[0m"
|
||||||
|
|
||||||
|
# Install required packages
|
||||||
|
echo "Installing required packages..."
|
||||||
|
|
||||||
|
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
|
||||||
|
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
|
||||||
|
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
|
||||||
|
# -Rns) is required because fprintd requires libfprint; the dep is
|
||||||
|
# re-satisfied immediately by libfprint-git's provides=libfprint.
|
||||||
|
if omarchy-pkg-present libfprint; then
|
||||||
|
sudo pacman -Rdd --noconfirm libfprint
|
||||||
|
fi
|
||||||
|
|
||||||
|
omarchy-pkg-add libfprint-git fprintd usbutils
|
||||||
|
|
||||||
|
if ! check_fingerprint_hardware; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure PAM
|
||||||
|
setup_pam_config
|
||||||
|
|
||||||
|
# Add fingerprint icon to hyprlock placeholder text
|
||||||
|
add_hyprlock_fingerprint_icon
|
||||||
|
|
||||||
|
# Enroll first fingerprint
|
||||||
|
echo -e "\e[32m\nLet's setup your right index finger as the first fingerprint.\e[0m"
|
||||||
|
echo -e "Keep moving the finger around on sensor until the process completes.\n"
|
||||||
|
|
||||||
|
if sudo fprintd-enroll "$USER"; then
|
||||||
|
echo -e "\e[32m\nFingerprint enrolled successfully!\e[0m"
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
echo -e "\nNow let's verify that it's working correctly.\n"
|
||||||
|
if fprintd-verify; then
|
||||||
|
echo -e "\e[32m\nPerfect! Fingerprint authentication is now configured.\e[0m"
|
||||||
|
echo "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nVerification failed. You may want to try enrolling again.\e[0m"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "\e[31m\nEnrollment failed. Please try again.\e[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Executable
+20
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set Hyprland, Hyprlock, Mako, and Walker corners to sharp or round
|
||||||
|
# omarchy:args=<sharp|round>
|
||||||
|
# omarchy:examples=omarchy style corners round | omarchy style corners sharp
|
||||||
|
|
||||||
|
if [[ $1 != "sharp" && $1 != "round" ]]; then
|
||||||
|
echo "Usage: omarchy-style-corners <sharp|round>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
omarchy-style-corners-hyprland "$1"
|
||||||
|
omarchy-style-corners-hyprlock "$1"
|
||||||
|
omarchy-style-corners-mako "$1"
|
||||||
|
omarchy-style-corners-walker "$1"
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
sharp) omarchy-notification-send "Sharp corners enabled" -g ;;
|
||||||
|
round) omarchy-notification-send "Round corners enabled" -g ;;
|
||||||
|
esac
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set or toggle shape of Hyprland window corners
|
||||||
|
# omarchy:args=[toggle|sharp|round]
|
||||||
|
# omarchy:examples=omarchy style corners hyprland toggle | omarchy style corners hyprland round | omarchy style corners hyprland sharp
|
||||||
|
|
||||||
|
case "${1:-toggle}" in
|
||||||
|
round) set -- on ;;
|
||||||
|
sharp) set -- off ;;
|
||||||
|
toggle) ;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-style-corners-hyprland [toggle|sharp|round]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
omarchy-hyprland-toggle rounded-corners "$1"
|
||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set or toggle rounded Hyprlock input field corners
|
||||||
|
# omarchy:args=[toggle|sharp|round]
|
||||||
|
# omarchy:examples=omarchy style corners hyprlock toggle | omarchy style corners hyprlock round | omarchy style corners hyprlock sharp
|
||||||
|
|
||||||
|
TOGGLES_CONFIG="$HOME/.local/state/omarchy/toggles/hyprlock.conf"
|
||||||
|
|
||||||
|
set_rounding() {
|
||||||
|
local radius="$1"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$TOGGLES_CONFIG")"
|
||||||
|
|
||||||
|
cat >"$TOGGLES_CONFIG" <<EOF
|
||||||
|
input-field {
|
||||||
|
rounding = $radius
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-toggle}" in
|
||||||
|
round) set_rounding 6 ;;
|
||||||
|
sharp) set_rounding 0 ;;
|
||||||
|
toggle)
|
||||||
|
if [[ -f $TOGGLES_CONFIG ]] && grep -q '^ rounding = 6$' "$TOGGLES_CONFIG"; then
|
||||||
|
set_rounding 0
|
||||||
|
else
|
||||||
|
set_rounding 6
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-style-corners-hyprlock [toggle|sharp|round]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Executable
+38
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set or toggle rounded Mako notification corners
|
||||||
|
# omarchy:args=[toggle|sharp|round]
|
||||||
|
# omarchy:examples=omarchy style corners mako toggle | omarchy style corners mako round | omarchy style corners mako sharp
|
||||||
|
|
||||||
|
TOGGLES_CONFIG="$HOME/.local/state/omarchy/toggles/mako.ini"
|
||||||
|
|
||||||
|
set_radius() {
|
||||||
|
local radius="$1"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$TOGGLES_CONFIG")"
|
||||||
|
touch "$TOGGLES_CONFIG"
|
||||||
|
|
||||||
|
if grep -q '^border-radius=' "$TOGGLES_CONFIG"; then
|
||||||
|
sed -i "s/^border-radius=.*/border-radius=$radius/" "$TOGGLES_CONFIG"
|
||||||
|
else
|
||||||
|
echo "border-radius=$radius" >>"$TOGGLES_CONFIG"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-toggle}" in
|
||||||
|
round) set_radius 6 ;;
|
||||||
|
sharp) set_radius 0 ;;
|
||||||
|
toggle)
|
||||||
|
if [[ -f $TOGGLES_CONFIG ]] && grep -q '^border-radius=6$' "$TOGGLES_CONFIG"; then
|
||||||
|
set_radius 0
|
||||||
|
else
|
||||||
|
set_radius 6
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-style-corners-mako [toggle|sharp|round]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
makoctl reload
|
||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set or toggle rounded Walker corners
|
||||||
|
# omarchy:args=[toggle|sharp|round]
|
||||||
|
# omarchy:examples=omarchy style corners walker toggle | omarchy style corners walker round | omarchy style corners walker sharp
|
||||||
|
|
||||||
|
TOGGLES_CSS="$HOME/.local/state/omarchy/toggles/walker.css"
|
||||||
|
|
||||||
|
set_radius() {
|
||||||
|
local radius="$1"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$TOGGLES_CSS")"
|
||||||
|
touch "$TOGGLES_CSS"
|
||||||
|
|
||||||
|
if grep -q '^ border-radius:' "$TOGGLES_CSS"; then
|
||||||
|
sed -i "s/^ border-radius:.*/ border-radius: ${radius}px;/" "$TOGGLES_CSS"
|
||||||
|
elif grep -q '^border-radius:' "$TOGGLES_CSS"; then
|
||||||
|
sed -i "s/^border-radius:.*/border-radius: ${radius}px;/" "$TOGGLES_CSS"
|
||||||
|
else
|
||||||
|
echo ".box-wrapper { border-radius: ${radius}px; }" >>"$TOGGLES_CSS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-toggle}" in
|
||||||
|
round) set_radius 6 ;;
|
||||||
|
sharp) set_radius 0 ;;
|
||||||
|
toggle)
|
||||||
|
if [[ -f $TOGGLES_CSS ]] && grep -q 'border-radius: 6px;' "$TOGGLES_CSS"; then
|
||||||
|
set_radius 0
|
||||||
|
else
|
||||||
|
set_radius 6
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: omarchy-style-corners-walker [toggle|sharp|round]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
omarchy-restart-walker
|
||||||
Executable
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Set Waybar position
|
||||||
|
# omarchy:args=<top|bottom|left|right>
|
||||||
|
# omarchy:examples=omarchy-style-waybar-position top | omarchy style waybar-position bottom
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
WAYBAR_CONFIG="$HOME/.config/waybar/config.jsonc"
|
||||||
|
|
||||||
|
position=$1
|
||||||
|
|
||||||
|
if [[ ! $position =~ ^(top|bottom|left|right)$ ]]; then
|
||||||
|
echo "Usage: omarchy-style-waybar-position top|bottom|left|right" >&2
|
||||||
|
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
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
# omarchy:summary=Enable, disable, or toggle the touchpad
|
# omarchy:summary=Enable, disable, or toggle the touchpad
|
||||||
# omarchy:args=[on|off|toggle]
|
# omarchy:args=[on|off|toggle]
|
||||||
|
|
||||||
STATE_CONF="$HOME/.local/state/omarchy/toggles/hypr/touchpad-disabled.conf"
|
STATE_FILE="$HOME/.local/state/omarchy/toggles/hypr/touchpad-disabled.lua"
|
||||||
|
|
||||||
device="$(omarchy-hw-touchpad)"
|
device="$(omarchy-hw-touchpad)"
|
||||||
|
|
||||||
@@ -13,20 +13,20 @@ if [[ -z $device ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
hyprctl keyword "device[$device]:enabled" true >/dev/null
|
hyprctl eval "hl.device({ name = \"$device\", enabled = true })" >/dev/null
|
||||||
rm -f "$STATE_CONF"
|
rm -f "$STATE_FILE"
|
||||||
omarchy-swayosd-client --custom-icon input-touchpad-symbolic --custom-message "Touchpad enabled"
|
omarchy-swayosd-client --custom-icon input-touchpad-symbolic --custom-message "Touchpad enabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
hyprctl keyword "device[$device]:enabled" false >/dev/null
|
hyprctl eval "hl.device({ name = \"$device\", enabled = false })" >/dev/null
|
||||||
mkdir -p "$(dirname "$STATE_CONF")"
|
mkdir -p "$(dirname "$STATE_FILE")"
|
||||||
printf 'device {\n name = %s\n enabled = false\n}\n' "$device" > "$STATE_CONF"
|
printf 'hl.device({ name = "%s", enabled = false })\n' "$device" >"$STATE_FILE"
|
||||||
omarchy-swayosd-client --custom-icon touchpad-disabled-symbolic --custom-message "Touchpad disabled"
|
omarchy-swayosd-client --custom-icon touchpad-disabled-symbolic --custom-message "Touchpad disabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
case "${1:-toggle}" in
|
case "${1:-toggle}" in
|
||||||
on) enable ;;
|
on) enable ;;
|
||||||
off) disable ;;
|
off) disable ;;
|
||||||
toggle) if [[ -f $STATE_CONF ]]; then enable; else disable; fi ;;
|
toggle) if [[ -f $STATE_FILE ]]; then enable; else disable; fi ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# omarchy:summary=Enable, disable, or toggle the touch functionality of the screen
|
# omarchy:summary=Enable, disable, or toggle the touch functionality of the screen
|
||||||
# omarchy:args=[on|off|toggle]
|
# omarchy:args=[on|off|toggle]
|
||||||
|
|
||||||
STATE_CONF="$HOME/.local/state/omarchy/toggles/hypr/touchscreen-disabled.conf"
|
STATE_FILE="$HOME/.local/state/omarchy/toggles/hypr/touchscreen-disabled.lua"
|
||||||
|
|
||||||
device="$(omarchy-hw-touchscreen)"
|
device="$(omarchy-hw-touchscreen)"
|
||||||
|
|
||||||
@@ -13,20 +13,20 @@ if [[ -z $device ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
hyprctl keyword "device[$device]:enabled" true >/dev/null
|
hyprctl eval "hl.device({ name = \"$device\", enabled = true })" >/dev/null
|
||||||
rm -f "$STATE_CONF"
|
rm -f "$STATE_FILE"
|
||||||
omarchy-swayosd-client --custom-icon device-support-touch-symbolic --custom-message "Touchscreen enabled"
|
omarchy-swayosd-client --custom-icon device-support-touch-symbolic --custom-message "Touchscreen enabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
hyprctl keyword "device[$device]:enabled" false >/dev/null
|
hyprctl eval "hl.device({ name = \"$device\", enabled = false })" >/dev/null
|
||||||
mkdir -p "$(dirname "$STATE_CONF")"
|
mkdir -p "$(dirname "$STATE_FILE")"
|
||||||
printf 'device {\n name = %s\n enabled = false\n}\n' "$device" > "$STATE_CONF"
|
printf 'hl.device({ name = "%s", enabled = false })\n' "$device" >"$STATE_FILE"
|
||||||
omarchy-swayosd-client --custom-icon touch-disabled-symbolic --custom-message "Touchscreen disabled"
|
omarchy-swayosd-client --custom-icon touch-disabled-symbolic --custom-message "Touchscreen disabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
case "${1:-toggle}" in
|
case "${1:-toggle}" in
|
||||||
on) enable ;;
|
on) enable ;;
|
||||||
off) disable ;;
|
off) disable ;;
|
||||||
toggle) if [[ -f $STATE_CONF ]]; then enable; else disable; fi ;;
|
toggle) if [[ -f $STATE_FILE ]]; then enable; else disable; fi ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
+15
-39
@@ -13,7 +13,7 @@ usage() {
|
|||||||
Usage:
|
Usage:
|
||||||
omarchy transcode [--path path] [input] [format] [resolution]
|
omarchy transcode [--path path] [input] [format] [resolution]
|
||||||
|
|
||||||
With no input, fuzzy-pick a picture or video from ~/Pictures and ~/Videos,
|
With no input, pick a picture or video with Walker from ~/Pictures and ~/Videos,
|
||||||
or only from --path when provided. Then pick the output format and resolution.
|
or only from --path when provided. Then pick the output format and resolution.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
@@ -29,30 +29,6 @@ Resolutions:
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
pick_file() {
|
|
||||||
local search_path="$1"
|
|
||||||
local paths=()
|
|
||||||
|
|
||||||
if [[ -n $search_path ]]; then
|
|
||||||
[[ -e $search_path ]] || { echo "Path not found: $search_path" >&2; return 1; }
|
|
||||||
paths=("$search_path")
|
|
||||||
else
|
|
||||||
paths=("$HOME/Pictures" "$HOME/Videos")
|
|
||||||
fi
|
|
||||||
|
|
||||||
find "${paths[@]}" -type f \
|
|
||||||
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' -o -iname '*.gif' -o -iname '*.heic' -o -iname '*.avif' \
|
|
||||||
-o -iname '*.mp4' -o -iname '*.mov' -o -iname '*.m4v' -o -iname '*.mkv' -o -iname '*.webm' -o -iname '*.avi' \) \
|
|
||||||
-printf '%T@\t%p\n' 2>/dev/null | sort -rn | cut -f2- | fzf --layout=reverse-list --prompt="Transcode file> "
|
|
||||||
}
|
|
||||||
|
|
||||||
pick_option() {
|
|
||||||
local prompt="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
gum choose --header "$prompt" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
media_type() {
|
media_type() {
|
||||||
local mime
|
local mime
|
||||||
mime=$(file -b --mime-type "$1")
|
mime=$(file -b --mime-type "$1")
|
||||||
@@ -187,9 +163,10 @@ main() {
|
|||||||
input="${positional[0]:-}"
|
input="${positional[0]:-}"
|
||||||
format="${positional[1]:-}"
|
format="${positional[1]:-}"
|
||||||
resolution="${positional[2]:-}"
|
resolution="${positional[2]:-}"
|
||||||
|
search_path="${search_path:-$HOME/Pictures:$HOME/Videos}"
|
||||||
|
|
||||||
if [[ -z $input ]]; then
|
if [[ -z $input ]]; then
|
||||||
input=$(pick_file "$search_path")
|
input=$(omarchy-menu-file "Transcode picture or video" "$search_path" "jpg jpeg png webp gif heic avif mp4 mov m4v mkv webm avi")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[[ -n $input ]] || return 1
|
[[ -n $input ]] || return 1
|
||||||
@@ -199,33 +176,32 @@ main() {
|
|||||||
|
|
||||||
if [[ -z $format ]]; then
|
if [[ -z $format ]]; then
|
||||||
if [[ $type == "picture" ]]; then
|
if [[ $type == "picture" ]]; then
|
||||||
format=$(pick_option "Select format..." jpg png)
|
format=$(omarchy-menu-select "Select format" jpg png)
|
||||||
else
|
else
|
||||||
format=$(pick_option "Select format..." mp4 gif)
|
format=$(omarchy-menu-select "Select format" mp4 gif)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z $resolution ]]; then
|
if [[ -z $resolution ]]; then
|
||||||
if [[ $type == "picture" ]]; then
|
if [[ $type == "picture" ]]; then
|
||||||
resolution=$(pick_option "Select resolution..." high medium low)
|
resolution=$(omarchy-menu-select "Select resolution" high medium low)
|
||||||
else
|
else
|
||||||
resolution=$(pick_option "Select resolution..." 4k 1080p 720p)
|
resolution=$(omarchy-menu-select "Select resolution" 4k 1080p 720p)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
output=$(output_path "$input" "$format" "$resolution")
|
output=$(output_path "$input" "$format" "$resolution")
|
||||||
|
|
||||||
if [[ $type == "picture" ]]; then
|
if [[ $type == "video" ]]; then
|
||||||
transcode_picture "$input" "$format" "$resolution" "$output"
|
omarchy-notification-send -g "Transcoding video…" "$(basename -- "$input") to $format ($resolution)"
|
||||||
else
|
|
||||||
transcode_video "$input" "$format" "$resolution" "$output"
|
transcode_video "$input" "$format" "$resolution" "$output"
|
||||||
echo ""
|
copy_to_clipboard "$output"
|
||||||
|
omarchy-notification-send -g "Transcoded to $resolution $format" "Saved and copied to clipboard."
|
||||||
|
else
|
||||||
|
transcode_picture "$input" "$format" "$resolution" "$output"
|
||||||
|
copy_to_clipboard "$output"
|
||||||
|
omarchy-notification-send -g "Transcoded to $resolution $format" "Saved and copied to clipboard."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
copy_to_clipboard "$output"
|
|
||||||
echo "Your $type has been transcoded into $format as $resolution. It's on your clipboard."
|
|
||||||
echo ""
|
|
||||||
echo "It's also in $output"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Set the screensaver logo text from an SVG/PNG or the default
|
# omarchy:summary=Transcode an image into ASCII/Unicode art text
|
||||||
# omarchy:args=<default|path-to-logo.svg|png> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert] [--stdout]
|
# omarchy:group=transcode
|
||||||
# omarchy:examples=omarchy screensaver logo ~/logo.svg | omarchy screensaver logo default | omarchy screensaver logo ~/logo.png --width 80 --mode block --stdout
|
# omarchy:name=ascii
|
||||||
|
# omarchy:args=<input-image.svg|png> <output-path> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert]
|
||||||
|
# omarchy:examples=omarchy transcode ascii ~/logo.svg /tmp/logo.txt | omarchy transcode ascii ~/logo.png ~/.config/omarchy/branding/screensaver.txt --width 80
|
||||||
|
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<'EOF'
|
cat <<'EOF'
|
||||||
Usage: omarchy-screensaver-logo <default|path-to-logo.svg|png> [options]
|
Usage: omarchy-transcode-ascii <input-image.svg|png> <output-path> [options]
|
||||||
|
|
||||||
Sets the screensaver logo text from an image.
|
Transcodes an image into ASCII/Unicode art text.
|
||||||
Pass "default" instead of an image path to restore the Omarchy default.
|
|
||||||
By default, writes to ~/.config/omarchy/branding/screensaver.txt.
|
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-w, --width <columns> Maximum output width in terminal columns (default: 80)
|
-w, --width <columns> Maximum output width in terminal columns (default: 80)
|
||||||
@@ -21,7 +21,6 @@ Options:
|
|||||||
-t, --threshold <percent> Pixel threshold from 0-100 (default: 50)
|
-t, --threshold <percent> Pixel threshold from 0-100 (default: 50)
|
||||||
--invert Treat light pixels as the logo instead of dark pixels
|
--invert Treat light pixels as the logo instead of dark pixels
|
||||||
--no-trim Preserve surrounding whitespace/background
|
--no-trim Preserve surrounding whitespace/background
|
||||||
--stdout Print converted text instead of writing the screensaver file
|
|
||||||
--help Show this help
|
--help Show this help
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@@ -32,9 +31,8 @@ mode=braille
|
|||||||
threshold=50
|
threshold=50
|
||||||
invert=false
|
invert=false
|
||||||
trim=true
|
trim=true
|
||||||
output_path="$HOME/.config/omarchy/branding/screensaver.txt"
|
|
||||||
image_path=""
|
image_path=""
|
||||||
reset_default=false
|
output_path=""
|
||||||
|
|
||||||
while (($# > 0)); do
|
while (($# > 0)); do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@@ -98,9 +96,6 @@ while (($# > 0)); do
|
|||||||
--no-trim)
|
--no-trim)
|
||||||
trim=false
|
trim=false
|
||||||
;;
|
;;
|
||||||
--stdout)
|
|
||||||
output_path="-"
|
|
||||||
;;
|
|
||||||
--)
|
--)
|
||||||
shift
|
shift
|
||||||
break
|
break
|
||||||
@@ -111,10 +106,10 @@ while (($# > 0)); do
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if [[ $1 == "default" && -z $image_path ]]; then
|
if [[ -z $image_path ]]; then
|
||||||
reset_default=true
|
|
||||||
elif [[ -z $image_path ]]; then
|
|
||||||
image_path="$1"
|
image_path="$1"
|
||||||
|
elif [[ -z $output_path ]]; then
|
||||||
|
output_path="$1"
|
||||||
else
|
else
|
||||||
echo "Unexpected argument: $1" >&2
|
echo "Unexpected argument: $1" >&2
|
||||||
usage >&2
|
usage >&2
|
||||||
@@ -127,10 +122,10 @@ done
|
|||||||
|
|
||||||
if (($# > 0)); then
|
if (($# > 0)); then
|
||||||
while (($# > 0)); do
|
while (($# > 0)); do
|
||||||
if [[ $1 == "default" && -z $image_path ]]; then
|
if [[ -z $image_path ]]; then
|
||||||
reset_default=true
|
|
||||||
elif [[ -z $image_path ]]; then
|
|
||||||
image_path="$1"
|
image_path="$1"
|
||||||
|
elif [[ -z $output_path ]]; then
|
||||||
|
output_path="$1"
|
||||||
else
|
else
|
||||||
echo "Unexpected argument: $1" >&2
|
echo "Unexpected argument: $1" >&2
|
||||||
usage >&2
|
usage >&2
|
||||||
@@ -140,29 +135,7 @@ if (($# > 0)); then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $reset_default == "true" ]]; then
|
if [[ -z $image_path || -z $output_path ]]; then
|
||||||
if [[ -n $image_path ]]; then
|
|
||||||
echo "default does not accept an image path" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
default_path="${OMARCHY_PATH:-$HOME/.local/share/omarchy}/logo.txt"
|
|
||||||
if [[ ! -f $default_path ]]; then
|
|
||||||
echo "Default screensaver logo text not found: $default_path" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $output_path == "-" ]]; then
|
|
||||||
cat "$default_path"
|
|
||||||
else
|
|
||||||
mkdir -p "$(dirname "$output_path")"
|
|
||||||
cp "$default_path" "$output_path"
|
|
||||||
echo "Restored default screensaver logo text to $output_path"
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $image_path ]]; then
|
|
||||||
usage >&2
|
usage >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -375,10 +348,6 @@ if [[ ! -s $tmp_output ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $output_path == "-" ]]; then
|
mkdir -p "$(dirname "$output_path")"
|
||||||
cat "$tmp_output"
|
cp "$tmp_output" "$output_path"
|
||||||
else
|
echo "Wrote ASCII art to $output_path"
|
||||||
mkdir -p "$(dirname "$output_path")"
|
|
||||||
cp "$tmp_output" "$output_path"
|
|
||||||
echo "Wrote screensaver logo text to $output_path"
|
|
||||||
fi
|
|
||||||
@@ -9,7 +9,7 @@ echo -e "\e[32mUpdate Omarchy\e[0m"
|
|||||||
omarchy-update-time
|
omarchy-update-time
|
||||||
|
|
||||||
# Suppress Hyprland config errors while git updates default config files mid-pull
|
# Suppress Hyprland config errors while git updates default config files mid-pull
|
||||||
hyprctl keyword debug:suppress_errors true &>/dev/null || true
|
hyprctl eval 'hl.config({ debug = { suppress_errors = true } })' &>/dev/null || hyprctl keyword debug:suppress_errors true &>/dev/null || true
|
||||||
|
|
||||||
git -C $OMARCHY_PATH pull --autostash
|
git -C $OMARCHY_PATH pull --autostash
|
||||||
git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge
|
git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Ensure the Omarchy keyring package is installed and populated
|
# omarchy:summary=Ensure the Omarchy and Arch keyring packages are installed and populated
|
||||||
# omarchy:requires-sudo=true
|
# omarchy:requires-sudo=true
|
||||||
|
|
||||||
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
|
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
|
||||||
@@ -16,5 +16,7 @@ if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure we have the latest archlinux-keyring, maintainer keys might have changed
|
# Ensure we have the latest archlinux-keyring, maintainer keys might have changed
|
||||||
|
# Always reinstall, as the keyring can be updated without a package version bump.
|
||||||
echo -e "\e[32m\nUpdate Arch signing keys\e[0m"
|
echo -e "\e[32m\nUpdate Arch signing keys\e[0m"
|
||||||
sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null
|
sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null 2> >(grep -vE '^warning: archlinux-keyring-[^ ]+ is up to date -- reinstalling$' >&2)
|
||||||
|
echo "Keys are correct"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Ensure screensaver/sleep doesn't set in during updates
|
# Ensure screensaver/sleep doesn't set in during updates
|
||||||
hyprctl dispatch tagwindow +noidle &>/dev/null || true
|
hyprctl dispatch 'hl.dsp.window.tag({ tag = "+noidle" })' &>/dev/null || hyprctl dispatch tagwindow +noidle &>/dev/null || true
|
||||||
|
|
||||||
# Perform all update steps
|
# Perform all update steps
|
||||||
omarchy-update-keyring
|
omarchy-update-keyring
|
||||||
@@ -22,4 +22,4 @@ omarchy-update-analyze-logs
|
|||||||
omarchy-update-restart
|
omarchy-update-restart
|
||||||
|
|
||||||
# Re-enable screensaver/sleep after updates
|
# Re-enable screensaver/sleep after updates
|
||||||
hyprctl dispatch tagwindow -- -noidle &>/dev/null || true
|
hyprctl dispatch 'hl.dsp.window.tag({ tag = "-noidle" })' &>/dev/null || hyprctl dispatch tagwindow -- -noidle &>/dev/null || true
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ case $weather_code in
|
|||||||
116) [[ $night == "true" ]] && icon="" || icon="" ;;
|
116) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||||
119|122) icon="" ;;
|
119|122) icon="" ;;
|
||||||
143|248|260) icon="" ;;
|
143|248|260) icon="" ;;
|
||||||
176|263|266|293|296|353) [[ $night == "true" ]] && icon="" || icon="" ;;
|
176|263|353) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||||
179|227|230|323|326|368) [[ $night == "true" ]] && icon="" || icon="" ;;
|
179|227|230|323|326|368) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||||
182|185|281|284|311|314|317|320|350|362|365|374|377) icon="" ;;
|
182|185|281|284|311|314|317|320|350|362|365|374|377) icon="" ;;
|
||||||
200|386|389|392|395) icon="" ;;
|
200|386|389|392|395) icon="" ;;
|
||||||
299|302|305|308|356|359) icon="" ;;
|
266|293|296|299|302|305|308|356|359) icon="" ;;
|
||||||
329|332|335|338|371) icon="" ;;
|
329|332|335|338|371) icon="" ;;
|
||||||
*) icon="" ;;
|
*) icon="" ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -12,15 +12,6 @@ fi
|
|||||||
IFS='|' read -r place temperature wind <<< "$weather"
|
IFS='|' read -r place temperature wind <<< "$weather"
|
||||||
place=${place%%,*}
|
place=${place%%,*}
|
||||||
place=${place^}
|
place=${place^}
|
||||||
format_temperature() {
|
temperature=${temperature#+}
|
||||||
local celsius=${1#+}
|
|
||||||
celsius=${celsius//°/}
|
|
||||||
celsius=${celsius%C}
|
|
||||||
|
|
||||||
echo "${celsius}°c / $((celsius * 9 / 5 + 32))°f"
|
echo "$(omarchy-weather-icon) $place · Temp $temperature · Wind $wind"
|
||||||
}
|
|
||||||
|
|
||||||
temperature=$(format_temperature "$temperature")
|
|
||||||
wind=${wind//km\// km/}
|
|
||||||
|
|
||||||
echo "$(omarchy-weather-icon) $place · Temperature $temperature · Wind $wind"
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
--ozone-platform=wayland
|
--ozone-platform=wayland
|
||||||
--ozone-platform-hint=wayland
|
--ozone-platform-hint=wayland
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation,VaapiVideoDecodeLinuxGL,VaapiVideoEncoder
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT, Insert,"'
|
command = 'wl-copy && (hyprctl dispatch "hl.dsp.send_shortcut({ mods = \"SHIFT\", key = \"Insert\" })" || hyprctl dispatch sendshortcut "SHIFT, Insert,")'
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
<test name="family" qual="any">
|
<test name="family" qual="any">
|
||||||
<string>monospace</string>
|
<string>monospace</string>
|
||||||
</test>
|
</test>
|
||||||
<edit name="family" mode="assign" binding="strong">
|
<edit name="family" mode="append" binding="same">
|
||||||
<string>JetBrainsMono Nerd Font</string>
|
<string>JetBrainsMono Nerd Font</string>
|
||||||
</edit>
|
</edit>
|
||||||
</match>
|
</match>
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"workspace": {
|
||||||
|
"library": [
|
||||||
|
"/usr/share/hypr/stubs"
|
||||||
|
],
|
||||||
|
"checkThirdParty": false
|
||||||
|
},
|
||||||
|
"diagnostics": {
|
||||||
|
"globals": ["hl"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
# Extra autostart processes
|
|
||||||
# exec-once = uwsm-app -- my-service
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
-- Extra autostart processes.
|
||||||
|
-- hl.on("hyprland.start", function()
|
||||||
|
-- hl.exec_cmd("uwsm-app -- my-service")
|
||||||
|
-- end)
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Application bindings
|
|
||||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)"
|
|
||||||
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" bash -c "tmux attach || tmux new -s Work"
|
|
||||||
bindd = SUPER SHIFT, RETURN, Browser, exec, omarchy-launch-browser
|
|
||||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
|
||||||
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"
|
|
||||||
bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser
|
|
||||||
bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private
|
|
||||||
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
|
|
||||||
bindd = SUPER SHIFT ALT, M, Music TUI, exec, omarchy-launch-or-focus-tui cliamp
|
|
||||||
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
|
|
||||||
bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker
|
|
||||||
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
|
|
||||||
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian"
|
|
||||||
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
|
|
||||||
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
|
||||||
|
|
||||||
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
|
|
||||||
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
|
|
||||||
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
|
|
||||||
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
|
|
||||||
bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
|
|
||||||
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
|
|
||||||
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
|
|
||||||
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
|
|
||||||
bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"
|
|
||||||
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
|
|
||||||
bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
|
|
||||||
|
|
||||||
# Add extra bindings
|
|
||||||
# bind = SUPER SHIFT, R, exec, alacritty -e ssh your-server
|
|
||||||
|
|
||||||
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space
|
|
||||||
# unbind = SUPER, SPACE
|
|
||||||
# bindd = SUPER, SPACE, Omarchy menu, exec, omarchy-menu
|
|
||||||
|
|
||||||
# Logitech MX Keys
|
|
||||||
# bind = SUPER SHIFT, S, exec, omarchy-capture-screenshot # Print Screen Button
|
|
||||||
# bind = SUPER, H, exec, voxtype record toggle # Dictation Button
|
|
||||||
# bind = SUPER, PERIOD, exec, omarchy-launch-walker -m symbols # Emoji Button
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
-- 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" })
|
||||||
|
|
||||||
|
-- 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" })
|
||||||
|
|
||||||
|
-- Add extra bindings below.
|
||||||
|
-- hl.bind("SUPER + SHIFT + R", hl.dsp.exec_cmd("alacritty -e ssh your-server"), { description = "SSH" })
|
||||||
|
|
||||||
|
-- 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" })
|
||||||
|
|
||||||
|
-- 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"))
|
||||||
@@ -11,7 +11,7 @@ listener {
|
|||||||
on-timeout = pidof hyprlock || omarchy-launch-screensaver
|
on-timeout = pidof hyprlock || omarchy-launch-screensaver
|
||||||
}
|
}
|
||||||
|
|
||||||
# Lock system after 5 minutes
|
# Lock system after 5 minutes (screensaver resets idle timer, so have to just do half + 2s margin)
|
||||||
listener {
|
listener {
|
||||||
timeout = 152
|
timeout = 152
|
||||||
on-timeout = omarchy-system-lock
|
on-timeout = omarchy-system-lock
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
# Learn how to configure Hyprland: https://wiki.hypr.land/Configuring/
|
|
||||||
|
|
||||||
# Use defaults Omarchy defaults (but don't edit these directly!)
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/autostart.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/envs.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/input.conf
|
|
||||||
source = ~/.local/share/omarchy/default/hypr/windows.conf
|
|
||||||
source = ~/.config/omarchy/current/theme/hyprland.conf
|
|
||||||
|
|
||||||
# Change your own setup in these files (and overwrite any settings from defaults!)
|
|
||||||
source = ~/.config/hypr/monitors.conf
|
|
||||||
source = ~/.config/hypr/input.conf
|
|
||||||
source = ~/.config/hypr/bindings.conf
|
|
||||||
source = ~/.config/hypr/looknfeel.conf
|
|
||||||
source = ~/.config/hypr/autostart.conf
|
|
||||||
|
|
||||||
# Toggle config flags dynamically
|
|
||||||
source = ~/.local/state/omarchy/toggles/hypr/*.conf
|
|
||||||
|
|
||||||
# Add any other personal Hyprland configuration below
|
|
||||||
# windowrule = workspace 5, match:class qemu
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
-- Learn how to configure Hyprland: https://wiki.hypr.land/Configuring/Start/
|
||||||
|
|
||||||
|
local home = os.getenv("HOME") or ""
|
||||||
|
|
||||||
|
-- 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
|
||||||
|
|
||||||
|
-- Change your own setup in these files and override defaults.
|
||||||
|
require("hypr.monitors")
|
||||||
|
require("hypr.input")
|
||||||
|
require("hypr.bindings")
|
||||||
|
require("hypr.looknfeel")
|
||||||
|
require("hypr.autostart")
|
||||||
|
|
||||||
|
-- Toggle config flags dynamically.
|
||||||
|
require("default.hypr.toggles")
|
||||||
|
|
||||||
|
-- Add any other personal Hyprland configuration below.
|
||||||
|
-- hl.window_rule({ match = { class = "qemu" }, workspace = "5" })
|
||||||
@@ -41,3 +41,5 @@ input-field {
|
|||||||
auth {
|
auth {
|
||||||
fingerprint:enabled = false
|
fingerprint:enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
source = ~/.local/state/omarchy/toggles/hyprlock.conf
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
# Control your input devices
|
|
||||||
# See https://wiki.hypr.land/Configuring/Basics/Variables/#input
|
|
||||||
input {
|
|
||||||
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
|
|
||||||
# kb_layout = us,dk,eu
|
|
||||||
|
|
||||||
# Use a specific keyboard variant if needed (e.g. intl for international keyboards)
|
|
||||||
# kb_variant = intl
|
|
||||||
|
|
||||||
kb_options = compose:caps # ,grp:alts_toggle
|
|
||||||
|
|
||||||
# Change speed of keyboard repeat
|
|
||||||
repeat_rate = 40
|
|
||||||
repeat_delay = 250
|
|
||||||
|
|
||||||
# Start with numlock on by default
|
|
||||||
numlock_by_default = true
|
|
||||||
|
|
||||||
# Increase sensitivity for mouse/trackpad (default: 0)
|
|
||||||
# sensitivity = 0.35
|
|
||||||
|
|
||||||
# Turn off mouse acceleration (default: adaptive)
|
|
||||||
# accel_profile = flat
|
|
||||||
|
|
||||||
touchpad {
|
|
||||||
# Use natural (inverse) scrolling
|
|
||||||
# natural_scroll = true
|
|
||||||
|
|
||||||
# Use two-finger clicks for right-click instead of lower-right corner
|
|
||||||
clickfinger_behavior = true
|
|
||||||
|
|
||||||
# Control the speed of your scrolling
|
|
||||||
scroll_factor = 0.4
|
|
||||||
|
|
||||||
# Enable the touchpad while typing
|
|
||||||
# disable_while_typing = false
|
|
||||||
|
|
||||||
# Left-click-and-drag with three fingers
|
|
||||||
# drag_3fg = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Scroll nicely in the terminal
|
|
||||||
windowrule = match:class (Alacritty|kitty|foot), scroll_touchpad 1.5
|
|
||||||
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
|
|
||||||
|
|
||||||
# Enable touchpad gestures for changing workspaces
|
|
||||||
# See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Gestures/
|
|
||||||
# gesture = 3, horizontal, workspace
|
|
||||||
|
|
||||||
# Enable touchpad gestures for moving focus (helpful on scrolling layout)
|
|
||||||
# gesture = 3, left, dispatcher, movefocus, l
|
|
||||||
# gesture = 3, right, dispatcher, movefocus, r
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
-- Control your input devices.
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Variables/#input
|
||||||
|
hl.config({
|
||||||
|
input = {
|
||||||
|
-- Use multiple keyboard layouts and switch between them with Left Alt + Right Alt.
|
||||||
|
-- kb_layout = "us,dk,eu",
|
||||||
|
|
||||||
|
-- Use a specific keyboard variant if needed (e.g. intl for international keyboards).
|
||||||
|
-- kb_variant = "intl",
|
||||||
|
|
||||||
|
kb_options = "compose:caps", -- ,grp:alts_toggle
|
||||||
|
|
||||||
|
-- Change speed of keyboard repeat.
|
||||||
|
repeat_rate = 40,
|
||||||
|
repeat_delay = 250,
|
||||||
|
|
||||||
|
-- Start with numlock on by default.
|
||||||
|
numlock_by_default = true,
|
||||||
|
|
||||||
|
-- Increase sensitivity for mouse/trackpad (default: 0).
|
||||||
|
-- sensitivity = 0.35,
|
||||||
|
|
||||||
|
-- Turn off mouse acceleration (default: adaptive).
|
||||||
|
-- accel_profile = "flat",
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
-- Use natural (inverse) scrolling.
|
||||||
|
-- natural_scroll = true,
|
||||||
|
|
||||||
|
-- Use two-finger clicks for right-click instead of lower-right corner.
|
||||||
|
clickfinger_behavior = true,
|
||||||
|
|
||||||
|
-- Control the speed of your scrolling.
|
||||||
|
scroll_factor = 0.4,
|
||||||
|
|
||||||
|
-- Enable the touchpad while typing.
|
||||||
|
-- disable_while_typing = false,
|
||||||
|
|
||||||
|
-- Left-click-and-drag with three fingers.
|
||||||
|
-- drag_3fg = 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- 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 })
|
||||||
|
|
||||||
|
-- Enable touchpad gestures for changing workspaces.
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Gestures/
|
||||||
|
-- hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
|
||||||
|
|
||||||
|
-- Enable touchpad gestures for moving focus (helpful on scrolling layout).
|
||||||
|
-- hl.gesture({ fingers = 3, direction = "left", action = function() hl.dispatch(hl.dsp.focus({ direction = "l" })) end })
|
||||||
|
-- hl.gesture({ fingers = 3, direction = "right", action = function() hl.dispatch(hl.dsp.focus({ direction = "r" })) end })
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Change the default Omarchy look'n'feel
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Basics/Variables/#general
|
|
||||||
general {
|
|
||||||
# No gaps between windows or borders
|
|
||||||
# gaps_in = 0
|
|
||||||
# gaps_out = 0
|
|
||||||
# border_size = 0
|
|
||||||
|
|
||||||
# Change to niri-like side-scrolling layout
|
|
||||||
# layout = scrolling
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Basics/Variables/#decoration
|
|
||||||
decoration {
|
|
||||||
# Use round window corners
|
|
||||||
# rounding = 8
|
|
||||||
|
|
||||||
# Dim unfocused windows (0.0 = no dim, 1.0 = fully dimmed)
|
|
||||||
# dim_inactive = true
|
|
||||||
# dim_strength = 0.15
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Basics/Variables/#animations
|
|
||||||
animations {
|
|
||||||
# Disable all animations
|
|
||||||
# enabled = no
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Basics/Variables/#layout
|
|
||||||
layout {
|
|
||||||
# Avoid overly wide single-window layouts on wide screens
|
|
||||||
# single_window_aspect_ratio = 1 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/
|
|
||||||
scrolling {
|
|
||||||
# See only one column per screen instead of two
|
|
||||||
# column_width = 0.97
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
-- Change the default Omarchy look'n'feel.
|
||||||
|
|
||||||
|
-- https://wiki.hypr.land/Configuring/Basics/Variables/#general
|
||||||
|
-- hl.config({
|
||||||
|
-- general = {
|
||||||
|
-- -- No gaps between windows or borders.
|
||||||
|
-- gaps_in = 0,
|
||||||
|
-- gaps_out = 0,
|
||||||
|
-- border_size = 0,
|
||||||
|
--
|
||||||
|
-- -- Change to niri-like side-scrolling layout.
|
||||||
|
-- layout = "scrolling",
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- https://wiki.hypr.land/Configuring/Basics/Variables/#decoration
|
||||||
|
-- hl.config({
|
||||||
|
-- decoration = {
|
||||||
|
-- -- Use round window corners.
|
||||||
|
-- rounding = 8,
|
||||||
|
--
|
||||||
|
-- -- Dim unfocused windows (0.0 = no dim, 1.0 = fully dimmed).
|
||||||
|
-- dim_inactive = true,
|
||||||
|
-- dim_strength = 0.15,
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- https://wiki.hypr.land/Configuring/Basics/Variables/#animations
|
||||||
|
-- hl.config({
|
||||||
|
-- animations = {
|
||||||
|
-- -- Disable all animations.
|
||||||
|
-- enabled = false,
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- https://wiki.hypr.land/Configuring/Basics/Variables/#layout
|
||||||
|
-- hl.config({
|
||||||
|
-- layout = {
|
||||||
|
-- -- Avoid overly wide single-window layouts on wide screens.
|
||||||
|
-- single_window_aspect_ratio = { 1, 1 },
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/
|
||||||
|
-- hl.config({
|
||||||
|
-- scrolling = {
|
||||||
|
-- -- See only one column per screen instead of two.
|
||||||
|
-- column_width = 0.97,
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
|
||||||
# List current monitors and resolutions possible: hyprctl monitors
|
|
||||||
# Format: monitor = [port], resolution, position, scale
|
|
||||||
|
|
||||||
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
|
|
||||||
env = GDK_SCALE,2
|
|
||||||
monitor=,preferred,auto,auto
|
|
||||||
|
|
||||||
# Good compromise for 27" or 32" 4K monitors (but fractional!)
|
|
||||||
# env = GDK_SCALE,1.75
|
|
||||||
# monitor=,preferred,auto,1.6
|
|
||||||
|
|
||||||
# Straight 1x setup for low-resolution displays like 1080p or 1440p
|
|
||||||
# Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440
|
|
||||||
# env = GDK_SCALE,1
|
|
||||||
# monitor=,preferred,auto,1
|
|
||||||
|
|
||||||
# Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
|
|
||||||
# monitor = DP-2, preferred, auto, 1, transform, 1
|
|
||||||
|
|
||||||
# Example for Framework 13 w/ 6K XDR Apple display
|
|
||||||
# monitor = DP-5, 6016x3384@60, auto, 2
|
|
||||||
# monitor = eDP-1, 2880x1920@120, auto, 2
|
|
||||||
|
|
||||||
# Disable the second ghost monitor on an Apple 6K XDR over Thunderbolt
|
|
||||||
# monitor=DP-2,disable
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||||
|
-- List current monitors and resolutions possible: hyprctl monitors all
|
||||||
|
|
||||||
|
local omarchy_gdk_scale = 2
|
||||||
|
local omarchy_monitor_scale = "auto"
|
||||||
|
|
||||||
|
-- Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
|
||||||
|
-- local omarchy_gdk_scale = 2
|
||||||
|
-- local omarchy_monitor_scale = "auto"
|
||||||
|
|
||||||
|
-- Good compromise for 27" or 32" 4K monitors (but fractional!): monitor scale 1.6, GDK scale 1.75.
|
||||||
|
-- local omarchy_gdk_scale = 1.75
|
||||||
|
-- local omarchy_monitor_scale = 1.6
|
||||||
|
|
||||||
|
-- Straight 1x setup for low-resolution displays like 1080p, 1440p, or ultrawides: both 1.
|
||||||
|
-- local omarchy_gdk_scale = 1
|
||||||
|
-- local omarchy_monitor_scale = 1
|
||||||
|
|
||||||
|
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
|
||||||
|
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
|
||||||
|
|
||||||
|
-- Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
|
||||||
|
-- hl.monitor({ output = "DP-2", mode = "preferred", position = "auto", scale = 1, transform = 1 })
|
||||||
|
|
||||||
|
-- Example for Framework 13 w/ 6K XDR Apple display.
|
||||||
|
-- hl.monitor({ output = "DP-5", mode = "6016x3384@60", position = "auto", scale = 2 })
|
||||||
|
-- hl.monitor({ output = "eDP-1", mode = "2880x1920@120", position = "auto", scale = 2 })
|
||||||
|
|
||||||
|
-- Disable the second ghost monitor on an Apple 6K XDR over Thunderbolt.
|
||||||
|
-- hl.monitor({ output = "DP-2", disabled = true })
|
||||||
+7
-4
@@ -3,11 +3,14 @@
|
|||||||
# Print the current image file
|
# Print the current image file
|
||||||
<Ctrl+p> = exec lp "$imv_current_file"
|
<Ctrl+p> = exec lp "$imv_current_file"
|
||||||
|
|
||||||
# Delete the current image and quit the viewer
|
# Trash the current image and quit the viewer (recoverable from Trash)
|
||||||
<Ctrl+x> = exec rm "$imv_current_file"; quit
|
<Ctrl+x> = exec gio trash -- "$imv_current_file"; quit
|
||||||
|
|
||||||
# Delete the current image and move to the next one
|
# Trash the current image and move to the next one
|
||||||
<Ctrl+Shift+X> = exec rm "$imv_current_file"; close
|
<Ctrl+Shift+X> = exec gio trash -- "$imv_current_file"; close
|
||||||
|
|
||||||
# Rotate the currently open image by 90 degrees
|
# Rotate the currently open image by 90 degrees
|
||||||
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"
|
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"
|
||||||
|
|
||||||
|
# Edit the current image in Satty and quit the viewer
|
||||||
|
<Ctrl+e> = exec satty --filename "$imv_current_file" & ; quit
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Show the weather status notification after Omarchy has started.
|
||||||
|
# To put it into use, remove .sample from this file name.
|
||||||
|
|
||||||
|
weather=$(omarchy-weather-status 2>/dev/null) || true
|
||||||
|
|
||||||
|
if [[ -n $weather && $weather != "Weather unavailable" ]]; then
|
||||||
|
notify-send -u low "$weather"
|
||||||
|
fi
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This hook is called by `omarchy refresh pacman` AFTER the channel template
|
||||||
|
# is copied to /etc/pacman.conf and BEFORE `pacman -Syyuu` runs. Use it to
|
||||||
|
# layer customizations onto the freshly-written pacman.conf so they're
|
||||||
|
# respected by the upgrade — common cases are adding a custom repository
|
||||||
|
# (e.g. CachyOS, Chaotic-AUR, an internal company repo) or extra IgnorePkg
|
||||||
|
# lines.
|
||||||
|
#
|
||||||
|
# The hook runs as the invoking user with a warm sudo cache.
|
||||||
|
#
|
||||||
|
# To put it into use, remove .sample from this file name.
|
||||||
|
|
||||||
|
# Example: add an Include line above [core] for a custom repo.
|
||||||
|
# Maintain the repo entries in /etc/pacman.d/custom-repos.conf yourself.
|
||||||
|
|
||||||
|
CONF=/etc/pacman.conf
|
||||||
|
SNIPPET=/etc/pacman.d/custom-repos.conf
|
||||||
|
MARKER="Include = $SNIPPET"
|
||||||
|
|
||||||
|
[[ -r $SNIPPET ]] || exit 0
|
||||||
|
grep -qxF "$MARKER" "$CONF" && exit 0
|
||||||
|
|
||||||
|
sudo sed -i "0,/^\[core\]/s||$MARKER\n\n[core]|" "$CONF"
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=Recover the internal monitor toggle when no external display is connected
|
Description=Recover the internal monitor toggle when no external display is connected
|
||||||
Before=graphical-session-pre.target
|
Before=graphical-session-pre.target
|
||||||
ConditionPathExists=%h/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf
|
ConditionPathExists=%h/.local/state/omarchy/toggles/hypr/internal-monitor-disable.lua
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=SwayOSD server
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/swayosd-server
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user