mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
Compare commits
1 Commits
improve-rd
...
optional-h
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd632f90e1 |
3
.github/ISSUE_TEMPLATE/bug.yml
vendored
3
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -1,5 +1,5 @@
|
||||
name: Bug
|
||||
description: Report a validated bug -- NOT FOR SUPPORT REQUESTS
|
||||
description: Report a problem
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
@@ -19,6 +19,5 @@ body:
|
||||
id: steps
|
||||
attributes:
|
||||
label: What's wrong?
|
||||
description: Describe the issue, include steps to recreate it if possible, and attach the output of `omarchy-debug` if possible
|
||||
validations:
|
||||
required: true
|
||||
|
||||
7
.github/ISSUE_TEMPLATE/config.yml
vendored
7
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,8 +1 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Suggestion
|
||||
url: https://github.com/basecamp/omarchy/discussions/categories/suggestions
|
||||
about: Suggest a new feature, change to existing feature, or other ideas in Discussions.
|
||||
- name: Support
|
||||
url: https://omarchy.org/discord
|
||||
about: Need help? Join our Discord community for support with any issues. GitHub issues should be used for verified bugs only.
|
||||
|
||||
15
.github/ISSUE_TEMPLATE/documentation.yml
vendored
Normal file
15
.github/ISSUE_TEMPLATE/documentation.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: Documentation
|
||||
description: New pages or changes to existing
|
||||
labels: [documentation]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Remember: Omarchy is an open source gift, not a product you bought from a vendor
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: What correction or addition do we need?
|
||||
validations:
|
||||
required: true
|
||||
15
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
Normal file
15
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: Enhancement
|
||||
description: Feature or change
|
||||
labels: [enhancement]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Remember: Omarchy is an open source gift, not a product you bought from a vendor
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: What do you need?
|
||||
validations:
|
||||
required: true
|
||||
@@ -1,9 +1,10 @@
|
||||
# Omarchy
|
||||
|
||||
Omarchy is a beautiful, modern & opinionated Linux distribution by DHH.
|
||||
Turn a fresh Arch installation into a fully-configured, beautiful, and modern web development system based on Hyprland by running a single command. That's the one-line pitch for Omarchy (like it was for Omakub). No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omarchy is an opinionated take on what Linux can be at its best.
|
||||
|
||||
Read more at [omarchy.org](https://omarchy.org).
|
||||
|
||||
## License
|
||||
|
||||
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 53 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB |
12
applications/nvim.desktop
Normal file
12
applications/nvim.desktop
Normal file
@@ -0,0 +1,12 @@
|
||||
[Desktop Entry]
|
||||
Name=Neovim
|
||||
GenericName=Text Editor
|
||||
Comment=Edit text files
|
||||
Exec=omarchy-launch-editor %F
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Keywords=Text;editor;
|
||||
Icon=nvim
|
||||
Categories=Utility;TextEditor;
|
||||
StartupNotify=false
|
||||
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
|
||||
@@ -1,7 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=Walker
|
||||
Comment=Walker Service
|
||||
Exec=walker --gapplication-service
|
||||
StartupNotify=false
|
||||
Terminal=false
|
||||
Type=Application
|
||||
@@ -4,20 +4,33 @@
|
||||
|
||||
BATTERY_THRESHOLD=10
|
||||
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
||||
BATTERY_LEVEL=$(omarchy-battery-remaining)
|
||||
BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}')
|
||||
|
||||
get_battery_percentage() {
|
||||
upower -i "$(upower -e | grep 'BAT')" \
|
||||
| awk -F: '/percentage/ {
|
||||
gsub(/[%[:space:]]/, "", $2);
|
||||
val=$2;
|
||||
printf("%d\n", (val+0.5))
|
||||
exit
|
||||
}'
|
||||
}
|
||||
|
||||
get_battery_state() {
|
||||
upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}'
|
||||
}
|
||||
|
||||
send_notification() {
|
||||
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
||||
}
|
||||
|
||||
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
|
||||
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
||||
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
||||
send_notification $BATTERY_LEVEL
|
||||
touch $NOTIFICATION_FLAG
|
||||
fi
|
||||
else
|
||||
rm -f $NOTIFICATION_FLAG
|
||||
BATTERY_LEVEL=$(get_battery_percentage)
|
||||
BATTERY_STATE=$(get_battery_state)
|
||||
|
||||
if [[ "$BATTERY_STATE" == "discharging" && "$BATTERY_LEVEL" -le "$BATTERY_THRESHOLD" ]]; then
|
||||
if [[ ! -f "$NOTIFICATION_FLAG" ]]; then
|
||||
send_notification "$BATTERY_LEVEL"
|
||||
touch "$NOTIFICATION_FLAG"
|
||||
fi
|
||||
else
|
||||
rm -f "$NOTIFICATION_FLAG"
|
||||
fi
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Returns the battery percentage remaining as an integer.
|
||||
|
||||
upower -i $(upower -e | grep BAT) \
|
||||
| awk -F: '/percentage/ {
|
||||
gsub(/[%[:space:]]/, "", $2);
|
||||
val=$2;
|
||||
printf("%d\n", (val+0.5))
|
||||
exit
|
||||
}'
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if (($# == 0)); then
|
||||
echo "Usage: omarchy-branch-set [master|dev]"
|
||||
exit 1
|
||||
else
|
||||
branch="$1"
|
||||
fi
|
||||
|
||||
case "$branch" in
|
||||
"master") git -C $OMARCHY_PATH switch master ;;
|
||||
"dev") git -C $OMARCHY_PATH switch dev ;;
|
||||
*) echo "Unknown branch: $branch"; exit 1; ;;
|
||||
esac
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if (($# == 0)); then
|
||||
echo "Usage: omarchy-channel-set [stable|edge|dev]"
|
||||
exit 1
|
||||
else
|
||||
channel="$1"
|
||||
fi
|
||||
|
||||
case "$channel" in
|
||||
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;;
|
||||
"edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
|
||||
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
|
||||
*) echo "Unknown channel: $channel"; exit 1; ;;
|
||||
esac
|
||||
|
||||
omarchy-update -y
|
||||
@@ -12,9 +12,8 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then
|
||||
bash "$OMARCHY_PATH/install/first-run/firewall.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/elephant.sh"
|
||||
sudo rm -f /etc/sudoers.d/first-run
|
||||
|
||||
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
|
||||
bash "$OMARCHY_PATH/install/first-run/wifi.sh"
|
||||
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
|
||||
fi
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
omarchy-state clear re*-required
|
||||
omarchy-hyprland-window-close-all
|
||||
sleep 1 # Allow apps like Chrome to shutdown correctly
|
||||
systemctl reboot --no-wall
|
||||
@@ -8,17 +8,15 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DESKTOP_AUDIO="false"
|
||||
MICROPHONE_AUDIO="false"
|
||||
SCOPE=""
|
||||
AUDIO="false"
|
||||
WEBCAM="false"
|
||||
STOP_RECORDING="false"
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--with-desktop-audio) DESKTOP_AUDIO="true" ;;
|
||||
--with-microphone-audio) MICROPHONE_AUDIO="true" ;;
|
||||
--with-audio) AUDIO="true" ;;
|
||||
--with-webcam) WEBCAM="true" ;;
|
||||
--stop-recording) STOP_RECORDING="true"
|
||||
output|region) SCOPE="$arg" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
@@ -59,35 +57,27 @@ start_webcam_overlay() {
|
||||
|
||||
start_screenrecording() {
|
||||
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
||||
local audio_devices=""
|
||||
local audio_args=""
|
||||
|
||||
[[ "$DESKTOP_AUDIO" == "true" ]] && audio_devices+="default_output"
|
||||
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
||||
[[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input"
|
||||
|
||||
if [[ "$MICROPHONE_AUDIO" == "true" ]]; then
|
||||
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
||||
[[ -n "$audio_devices" ]] && audio_devices+="|"
|
||||
audio_devices+="default_input"
|
||||
fi
|
||||
|
||||
[[ -n "$audio_devices" ]] && audio_args+="-a $audio_devices"
|
||||
|
||||
gpu-screen-recorder -w portal -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
|
||||
gpu-screen-recorder -w "$@" -f 60 -c mp4 -o "$filename" $audio_args &
|
||||
toggle_screenrecording_indicator
|
||||
}
|
||||
|
||||
stop_screenrecording() {
|
||||
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
|
||||
pkill -SIGINT -f "gpu-screen-recorder" # SIGINT required to save video properly
|
||||
|
||||
# Wait a maximum of 5 seconds to finish before hard killing
|
||||
local count=0
|
||||
while pgrep -f "^gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
|
||||
while pgrep -f "gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
|
||||
sleep 0.1
|
||||
count=$((count + 1))
|
||||
done
|
||||
|
||||
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
||||
pkill -9 -f "^gpu-screen-recorder"
|
||||
if pgrep -f "gpu-screen-recorder" >/dev/null; then
|
||||
pkill -9 -f "gpu-screen-recorder"
|
||||
cleanup_webcam
|
||||
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
|
||||
else
|
||||
@@ -102,19 +92,51 @@ toggle_screenrecording_indicator() {
|
||||
}
|
||||
|
||||
screenrecording_active() {
|
||||
pgrep -f "^gpu-screen-recorder" >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
|
||||
pgrep -f "gpu-screen-recorder" >/dev/null || pgrep -x slurp >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
|
||||
}
|
||||
|
||||
if screenrecording_active; then
|
||||
if pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
||||
if pgrep -x slurp >/dev/null; then
|
||||
pkill -x slurp 2>/dev/null
|
||||
elif pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "gpu-screen-recorder" >/dev/null; then
|
||||
cleanup_webcam
|
||||
else
|
||||
stop_screenrecording
|
||||
fi
|
||||
elif [[ "$STOP_RECORDING" == "false" ]]; then
|
||||
elif [[ "$SCOPE" == "output" ]]; then
|
||||
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
|
||||
|
||||
start_screenrecording || cleanup_webcam
|
||||
if ! output=$(slurp -o -f "%o"); then
|
||||
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$output" ]]; then
|
||||
notify-send "Error" "Could not detect monitor" -u critical
|
||||
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
|
||||
exit 1
|
||||
fi
|
||||
|
||||
start_screenrecording "$output"
|
||||
else
|
||||
exit 1
|
||||
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
|
||||
|
||||
scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
|
||||
|
||||
if ! region=$(slurp -f "%wx%h+%x+%y"); then
|
||||
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$region" =~ ^([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)$ ]]; then
|
||||
w=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * $scale}")
|
||||
h=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[2]} * $scale}")
|
||||
x=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[3]} * $scale}")
|
||||
y=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[4]} * $scale}")
|
||||
scaled_region="${w}x${h}+${x}+${y}"
|
||||
else
|
||||
scaled_region="$region"
|
||||
fi
|
||||
|
||||
start_screenrecording region -region "$scaled_region"
|
||||
fi
|
||||
|
||||
@@ -1,33 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
screensaver_in_focus() {
|
||||
hyprctl activewindow -j | jq -e '.class == "org.omarchy.screensaver"' >/dev/null 2>&1
|
||||
hyprctl activewindow -j | jq -e '.class == "Screensaver"' >/dev/null 2>&1
|
||||
}
|
||||
|
||||
exit_screensaver() {
|
||||
hyprctl keyword cursor:invisible false
|
||||
pkill -x tte 2>/dev/null
|
||||
pkill -f org.omarchy.screensaver 2>/dev/null
|
||||
pkill -f "alacritty --class Screensaver" 2>/dev/null
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Exit the screensaver on signals and input from keyboard and mouse
|
||||
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
|
||||
|
||||
printf '\033]11;rgb:00/00/00\007' # Set background color to black
|
||||
|
||||
hyprctl keyword cursor:invisible true &>/dev/null
|
||||
|
||||
tty=$(tty 2>/dev/null)
|
||||
|
||||
while true; do
|
||||
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
|
||||
tte -i ~/.config/omarchy/branding/screensaver.txt \
|
||||
--frame-rate 120 --canvas-width 0 --canvas-height 0 --reuse-canvas --anchor-canvas c --anchor-text c\
|
||||
--random-effect --exclude-effects dev_worm \
|
||||
--no-eol --no-restore-cursor &
|
||||
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \
|
||||
"$effect" &
|
||||
|
||||
while pgrep -t "${tty#/dev/}" -x tte >/dev/null; do
|
||||
if read -n1 -t 1 || ! screensaver_in_focus; then
|
||||
while pgrep -x tte >/dev/null; do
|
||||
if read -n 1 -t 3 || ! screensaver_in_focus; then
|
||||
exit_screensaver
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
omarchy-state clear re*-required
|
||||
omarchy-hyprland-window-close-all
|
||||
sleep 1 # Allow apps like Chrome to shutdown correctly
|
||||
systemctl poweroff --no-wall
|
||||
@@ -6,10 +6,8 @@ shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
|
||||
|
||||
if [[ -n $shell_pid ]]; then
|
||||
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)
|
||||
shell=$(readlink -f "/proc/$shell_pid/exe" 2>/dev/null)
|
||||
|
||||
# Check if $shell is a valid shell and $cwd is a directory.
|
||||
if grep -qs "$shell" /etc/shells && [[ -d $cwd ]]; then
|
||||
if [[ -d $cwd ]]; then
|
||||
echo "$cwd"
|
||||
else
|
||||
echo "$HOME"
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
NO_SUDO=false
|
||||
PRINT_ONLY=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--no-sudo)
|
||||
NO_SUDO=true
|
||||
shift
|
||||
;;
|
||||
--print)
|
||||
PRINT_ONLY=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "Usage: omarchy-debug [--no-sudo] [--print]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
LOG_FILE="/tmp/omarchy-debug.log"
|
||||
|
||||
if [ "$NO_SUDO" = true ]; then
|
||||
DMESG_OUTPUT="(skipped - --no-sudo flag used)"
|
||||
else
|
||||
DMESG_OUTPUT="$(sudo dmesg)"
|
||||
fi
|
||||
|
||||
cat > "$LOG_FILE" <<EOF
|
||||
Date: $(date)
|
||||
Hostname: $(hostname)
|
||||
Omarchy Branch: $(git -C "$OMARCHY_PATH" branch --show-current 2>/dev/null || echo "unknown")
|
||||
|
||||
=========================================
|
||||
SYSTEM INFORMATION
|
||||
=========================================
|
||||
$(inxi -Farz)
|
||||
|
||||
=========================================
|
||||
DMESG
|
||||
=========================================
|
||||
$DMESG_OUTPUT
|
||||
|
||||
=========================================
|
||||
JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
|
||||
=========================================
|
||||
$(journalctl -b -p 4..1)
|
||||
|
||||
=========================================
|
||||
INSTALLED PACKAGES
|
||||
=========================================
|
||||
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
|
||||
EOF
|
||||
|
||||
if [ "$PRINT_ONLY" = true ]; then
|
||||
cat "$LOG_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
OPTIONS=("View log" "Save in current directory")
|
||||
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
|
||||
OPTIONS=("Upload log" "${OPTIONS[@]}")
|
||||
fi
|
||||
|
||||
ACTION=$(gum choose "${OPTIONS[@]}")
|
||||
|
||||
case "$ACTION" in
|
||||
"Upload log")
|
||||
echo "Uploading debug log to 0x0.st..."
|
||||
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
|
||||
if [ $? -eq 0 ] && [ -n "$URL" ]; then
|
||||
echo "✓ Log uploaded successfully!"
|
||||
echo "Share this URL:"
|
||||
echo ""
|
||||
echo " $URL"
|
||||
echo ""
|
||||
echo "This link will expire in 24 hours."
|
||||
else
|
||||
echo "Error: Failed to upload log file"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
"View log")
|
||||
less "$LOG_FILE"
|
||||
;;
|
||||
"Save in current directory")
|
||||
cp "$LOG_FILE" "./omarchy-debug.log"
|
||||
echo "✓ Log saved to $(pwd)/omarchy-debug.log"
|
||||
;;
|
||||
esac
|
||||
@@ -3,9 +3,4 @@
|
||||
cd ~/.local/share/omarchy
|
||||
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
||||
touch $migration_file
|
||||
|
||||
if [[ "$1" != "--no-edit" ]]; then
|
||||
nvim $migration_file
|
||||
fi
|
||||
|
||||
echo $migration_file
|
||||
nvim $migration_file
|
||||
|
||||
@@ -18,7 +18,6 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
|
||||
pkill -SIGUSR2 ghostty
|
||||
fi
|
||||
|
||||
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
|
||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
|
||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
||||
xmlstarlet ed -L \
|
||||
@@ -28,10 +27,7 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
|
||||
|
||||
omarchy-restart-waybar
|
||||
omarchy-restart-swayosd
|
||||
|
||||
if pgrep -x ghostty; then
|
||||
notify-send " You must restart Ghostty to see font change"
|
||||
fi
|
||||
omarchy-restart-walker
|
||||
|
||||
omarchy-hook font-set "$font_name"
|
||||
else
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "Usage: omarchy-hook [name] [args...]"
|
||||
exit 1
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Toggle to pop-out a tile to stay fixed on a display basis.
|
||||
|
||||
# Usage:
|
||||
# omarchy-hyprland-window-pop [width height [x y]]
|
||||
#
|
||||
# Arguments:
|
||||
# width Optional. Width of the floating window. Default: 1300
|
||||
# height Optional. Height of the floating window. Default: 900
|
||||
# x Optional. X position of the window. Must provide both X and Y to take effect.
|
||||
# y Optional. Y position of the window. Must provide both X and Y to take effect.
|
||||
#
|
||||
# Behavior:
|
||||
# - If the window is already pinned, it will be unpinned and removed from the pop layer.
|
||||
# - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.
|
||||
|
||||
width=${1:-1300}
|
||||
height=${2:-900}
|
||||
x=${3:-}
|
||||
y=${4:-}
|
||||
|
||||
active=$(hyprctl activewindow -j)
|
||||
pinned=$(echo "$active" | jq ".pinned")
|
||||
addr=$(echo "$active" | jq -r ".address")
|
||||
|
||||
if [[ $pinned == "true" ]]; then
|
||||
hyprctl -q --batch \
|
||||
"dispatch pin address:$addr;" \
|
||||
"dispatch togglefloating address:$addr;" \
|
||||
"dispatch tagwindow -pop address:$addr;"
|
||||
elif [[ -n $addr ]]; then
|
||||
hyprctl dispatch togglefloating address:$addr
|
||||
hyprctl dispatch resizeactive exact $width $height address:$addr
|
||||
|
||||
if [[ -n $x && -n $y ]]; then
|
||||
hyprctl dispatch moveactive $x $y address:$addr
|
||||
else
|
||||
hyprctl dispatch centerwindow address:$addr
|
||||
fi
|
||||
|
||||
hyprctl -q --batch \
|
||||
"dispatch pin address:$addr;" \
|
||||
"dispatch alterzorder top address:$addr;" \
|
||||
"dispatch tagwindow +pop address:$addr;"
|
||||
fi
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
workspace_id=$(hyprctl activeworkspace -j | jq -r .id)
|
||||
gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0")
|
||||
|
||||
if [[ $gaps == "0" ]]; then
|
||||
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
|
||||
else \
|
||||
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0"
|
||||
fi
|
||||
@@ -41,7 +41,7 @@ install_php() {
|
||||
|
||||
install_node() {
|
||||
echo -e "Installing Node.js...\n"
|
||||
mise use --global node
|
||||
mise use --global node@lts
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
@@ -50,7 +50,6 @@ ruby)
|
||||
omarchy-pkg-add libyaml
|
||||
mise use --global ruby@latest
|
||||
mise settings add idiomatic_version_file_enable_tools ruby
|
||||
echo "gem: --no-document" > ~/.gemrc
|
||||
mise x ruby -- gem install rails --no-document
|
||||
echo -e "\nYou can now run: rails new myproject"
|
||||
;;
|
||||
|
||||
@@ -12,7 +12,7 @@ if [[ -n "$choices" ]]; then
|
||||
for db in $choices; do
|
||||
case $db in
|
||||
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
|
||||
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres18 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:18 ;;
|
||||
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres17 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:17 ;;
|
||||
MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;;
|
||||
Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;;
|
||||
MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;;
|
||||
|
||||
@@ -5,4 +5,4 @@ omarchy-pkg-add dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-d
|
||||
|
||||
echo "Starting Dropbox..."
|
||||
uwsm-app -- dropbox-cli start &>/dev/null &
|
||||
echo "See Dropbox icon behind hover tray in top right and right-click for setup."
|
||||
echo "See Dropbox icon behind hover tray in top right and right-click for setup."
|
||||
|
||||
12
bin/omarchy-install-hyprscrolling
Executable file
12
bin/omarchy-install-hyprscrolling
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Installing hyprscrolling plugin"
|
||||
|
||||
omarchy-pkg-add meson cpio cmake
|
||||
hyprpm update
|
||||
hyprpm add https://github.com/hyprwm/hyprland-plugins
|
||||
hyprpm enable hyprscrolling
|
||||
|
||||
if ! grep -q '/hypr/scrolling\.conf' ~/.config/hypr/hyprland.conf; then
|
||||
sed -i '/source = ~\/\.local\/share\/omarchy\/default\/hypr\/windows\.conf/a source = ~/.local/share/omarchy/default/hypr/scrolling.conf' ~/.config/hypr/hyprland.conf
|
||||
fi
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "Now pick dependencies matching your graphics card"
|
||||
sudo pacman -S steam
|
||||
sudo pacman -Syu --noconfirm steam
|
||||
setsid gtk-launch steam >/dev/null 2>&1 &
|
||||
|
||||
@@ -7,53 +7,15 @@ fi
|
||||
|
||||
package="$1"
|
||||
|
||||
# Map package name to desktop entry ID
|
||||
case "$package" in
|
||||
alacritty) desktop_id="Alacritty.desktop" ;;
|
||||
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
|
||||
kitty) desktop_id="kitty.desktop" ;;
|
||||
*)
|
||||
echo "Unknown terminal: $package"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Install package
|
||||
if omarchy-pkg-add $package; then
|
||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
||||
if [[ $package == "alacritty" ]]; then
|
||||
mkdir -p ~/.local/share/applications
|
||||
cat > ~/.local/share/applications/Alacritty.desktop << EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
TryExec=alacritty
|
||||
Exec=alacritty
|
||||
Icon=Alacritty
|
||||
Terminal=false
|
||||
Categories=System;TerminalEmulator;
|
||||
Name=Alacritty
|
||||
GenericName=Terminal
|
||||
Comment=A fast, cross-platform, OpenGL terminal emulator
|
||||
StartupNotify=true
|
||||
StartupWMClass=Alacritty
|
||||
Actions=New;
|
||||
X-TerminalArgExec=-e
|
||||
X-TerminalArgAppId=--class=
|
||||
X-TerminalArgTitle=--title=
|
||||
X-TerminalArgDir=--working-directory=
|
||||
# Set as default terminal
|
||||
echo "Setting $package as new default terminal..."
|
||||
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
|
||||
|
||||
[Desktop Action New]
|
||||
Name=New Terminal
|
||||
Exec=alacritty
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Update xdg-terminals.list to prioritize the proper terminal
|
||||
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
|
||||
# Restart is needed for new default to take effect
|
||||
echo
|
||||
gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall
|
||||
else
|
||||
echo "Failed to install $package"
|
||||
fi
|
||||
|
||||
@@ -21,7 +21,4 @@ EOF
|
||||
# Ensure VSC's own auto-update feature is turned off
|
||||
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
|
||||
|
||||
# Apply Omarchy theme to VSCode
|
||||
omarchy-theme-set-vscode
|
||||
|
||||
setsid gtk-launch code
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Install xpadneo to ensure controllers work out of the box
|
||||
sudo pacman -S --noconfirm --needed linux-headers
|
||||
yay -S --noconfirm xpadneo-dkms
|
||||
|
||||
# Prevent xpad/xpadneo driver conflict
|
||||
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
|
||||
echo hid_xpadneo | sudo tee /etc/modules-load.d/xpadneo.conf >/dev/null
|
||||
|
||||
# Give user access to game controllers
|
||||
sudo usermod -a -G input $USER
|
||||
|
||||
# Modules need to be loaded
|
||||
gum confirm "Install requires reboot. Ready?" && sudo reboot now
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
exec omarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"
|
||||
exec setsid uwsm-app -- alacritty --class=Omarchy -o font.size=9 -e bash -c 'fastfetch; read -n 1 -s'
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
omarchy-launch-or-focus-tui wiremix
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
rfkill unblock bluetooth
|
||||
exec omarchy-launch-or-focus-tui bluetui
|
||||
@@ -3,10 +3,8 @@
|
||||
default_browser=$(xdg-settings get default-web-browser)
|
||||
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
|
||||
|
||||
if [[ $browser_exec =~ (firefox|zen|librewolf|mullvad) ]]; then
|
||||
if [[ $browser_exec =~ (firefox|zen|librewolf) ]]; then
|
||||
private_flag="--private-window"
|
||||
elif [[ $browser_exec =~ edge ]]; then
|
||||
private_flag="--inprivate"
|
||||
else
|
||||
private_flag="--incognito"
|
||||
fi
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
omarchy-cmd-present "$EDITOR" || EDITOR=nvim
|
||||
|
||||
case "$EDITOR" in
|
||||
nvim | vim | nano | micro | hx | helix | fresh)
|
||||
exec omarchy-launch-tui "$EDITOR" "$@"
|
||||
case "${EDITOR:-nvim}" in
|
||||
nvim | vim | nano | micro | hx | helix)
|
||||
exec setsid uwsm-app -- "$TERMINAL" -e "$EDITOR" "$@"
|
||||
;;
|
||||
*)
|
||||
exec setsid uwsm-app -- "$EDITOR" "$@"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
cmd="$*"
|
||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; if [ \$? -ne 130 ]; then omarchy-show-done; fi"
|
||||
exec setsid uwsm-app -- alacritty -o font.size=9 --class=Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.opencode -e bash -c 'cd ~/Work; opencode'
|
||||
@@ -12,5 +12,5 @@ WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|selec
|
||||
if [[ -n $WINDOW_ADDRESS ]]; then
|
||||
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
||||
else
|
||||
eval exec setsid $LAUNCH_COMMAND
|
||||
eval exec $LAUNCH_COMMAND
|
||||
fi
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
APP_ID="org.omarchy.$(basename "$1")"
|
||||
LAUNCH_COMMAND="omarchy-launch-tui $@"
|
||||
|
||||
exec omarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND"
|
||||
@@ -6,47 +6,23 @@ if ! command -v tte &>/dev/null; then
|
||||
fi
|
||||
|
||||
# Exit early if screensave is already running
|
||||
pgrep -f org.omarchy.screensaver && exit 0
|
||||
pgrep -f "alacritty --class Screensaver" && exit 0
|
||||
|
||||
# Allow screensaver to be turned off but also force started
|
||||
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Silently quit Walker on overlay
|
||||
walker -q
|
||||
|
||||
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
|
||||
terminal=$(xdg-terminal-exec --print-id)
|
||||
|
||||
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
||||
hyprctl dispatch focusmonitor $m
|
||||
|
||||
case $terminal in
|
||||
*Alacritty*)
|
||||
hyprctl dispatch exec -- \
|
||||
alacritty --class=org.omarchy.screensaver \
|
||||
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
|
||||
-e omarchy-cmd-screensaver
|
||||
;;
|
||||
*ghostty*)
|
||||
hyprctl dispatch exec -- \
|
||||
ghostty --class=org.omarchy.screensaver \
|
||||
--config-file=~/.local/share/omarchy/default/ghostty/screensaver \
|
||||
--font-size=18 \
|
||||
-e omarchy-cmd-screensaver
|
||||
;;
|
||||
*kitty*)
|
||||
hyprctl dispatch exec -- \
|
||||
kitty --class=org.omarchy.screensaver \
|
||||
--override font_size=18 \
|
||||
--override window_padding_width=0 \
|
||||
-e omarchy-cmd-screensaver
|
||||
;;
|
||||
*)
|
||||
notify-send "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
|
||||
;;
|
||||
esac
|
||||
# FIXME: Find a way to make this generic where we it can work for kitty + ghostty
|
||||
hyprctl dispatch exec -- \
|
||||
alacritty --class Screensaver \
|
||||
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
|
||||
-e omarchy-cmd-screensaver
|
||||
done
|
||||
|
||||
hyprctl dispatch focusmonitor $focused
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.$(basename $1) -e "$1" "${@:2}"
|
||||
@@ -3,7 +3,7 @@
|
||||
browser=$(xdg-settings get default-web-browser)
|
||||
|
||||
case $browser in
|
||||
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
|
||||
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium-browser*) ;;
|
||||
*) browser="chromium.desktop" ;;
|
||||
esac
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
rfkill unblock wifi
|
||||
omarchy-launch-or-focus-tui impala
|
||||
exec setsid uwsm-app -- "$TERMINAL" --class=Impala -e impala "$@"
|
||||
|
||||
@@ -3,13 +3,10 @@
|
||||
# Lock the screen
|
||||
pidof hyprlock || hyprlock &
|
||||
|
||||
# Set keyboard layout to default (first layout)
|
||||
hyprctl switchxkblayout all 0 > /dev/null 2>&1
|
||||
|
||||
# Ensure 1password is locked
|
||||
if pgrep -x "1password" >/dev/null; then
|
||||
1password --lock &
|
||||
fi
|
||||
|
||||
# Avoid running screensaver when locked
|
||||
pkill -f org.omarchy.screensaver
|
||||
pkill -f "alacritty --class Screensaver"
|
||||
|
||||
144
bin/omarchy-menu
144
bin/omarchy-menu
@@ -33,11 +33,11 @@ menu() {
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
|
||||
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null
|
||||
}
|
||||
|
||||
terminal() {
|
||||
xdg-terminal-exec --app-id=org.omarchy.terminal "$@"
|
||||
alacritty --class=Omarchy -e "$@"
|
||||
}
|
||||
|
||||
present_terminal() {
|
||||
@@ -112,19 +112,19 @@ show_screenshot_menu() {
|
||||
}
|
||||
|
||||
show_screenrecord_menu() {
|
||||
omarchy-cmd-screenrecord --stop-recording && exit 0
|
||||
|
||||
case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
|
||||
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
|
||||
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
|
||||
*"With desktop + microphone audio + webcam") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam ;;
|
||||
case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio\n Display + Webcam") in
|
||||
*"Region + Audio"*) omarchy-cmd-screenrecord region --with-audio ;;
|
||||
*Region*) omarchy-cmd-screenrecord ;;
|
||||
*"Display + Audio"*) omarchy-cmd-screenrecord output --with-audio ;;
|
||||
*"Display + Webcam"*) omarchy-cmd-screenrecord output --with-audio --with-webcam ;;
|
||||
*Display*) omarchy-cmd-screenrecord output ;;
|
||||
*) back_to show_capture_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_share_menu() {
|
||||
case $(menu "Share" " Clipboard\n File \n Folder") in
|
||||
*Clipboard*) omarchy-cmd-share clipboard ;;
|
||||
*Clipboard*) terminal bash -c "omarchy-cmd-share clipboard" ;;
|
||||
*File*) terminal bash -c "omarchy-cmd-share file" ;;
|
||||
*Folder*) terminal bash -c "omarchy-cmd-share folder" ;;
|
||||
*) back_to show_trigger_menu ;;
|
||||
@@ -154,7 +154,12 @@ show_style_menu() {
|
||||
}
|
||||
|
||||
show_theme_menu() {
|
||||
omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400
|
||||
theme=$(menu "Theme" "$(omarchy-theme-list)" "" "$(omarchy-theme-current)")
|
||||
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
||||
back_to show_style_menu
|
||||
else
|
||||
omarchy-theme-set "$theme"
|
||||
fi
|
||||
}
|
||||
|
||||
show_font_menu() {
|
||||
@@ -173,9 +178,15 @@ show_setup_menu() {
|
||||
options="$options\n Defaults\n DNS\n Security\n Config"
|
||||
|
||||
case $(menu "Setup" "$options") in
|
||||
*Audio*) omarchy-launch-audio ;;
|
||||
*Wifi*) omarchy-launch-wifi ;;
|
||||
*Bluetooth*) omarchy-launch-bluetooth ;;
|
||||
*Audio*) $TERMINAL --class=Wiremix -e wiremix ;;
|
||||
*Wifi*)
|
||||
rfkill unblock wifi
|
||||
omarchy-launch-wifi
|
||||
;;
|
||||
*Bluetooth*)
|
||||
rfkill unblock bluetooth
|
||||
blueberry
|
||||
;;
|
||||
*Power*) show_setup_power_menu ;;
|
||||
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
|
||||
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
|
||||
@@ -221,7 +232,7 @@ show_setup_security_menu() {
|
||||
}
|
||||
|
||||
show_install_menu() {
|
||||
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n AI\n Windows\n Gaming") in
|
||||
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n AI\n Windows\n Gaming\n Extra") in
|
||||
*Package*) terminal omarchy-pkg-install ;;
|
||||
*AUR*) terminal omarchy-pkg-aur-install ;;
|
||||
*Web*) present_terminal omarchy-webapp-install ;;
|
||||
@@ -234,6 +245,7 @@ show_install_menu() {
|
||||
*AI*) show_install_ai_menu ;;
|
||||
*Windows*) present_terminal "omarchy-windows-vm install" ;;
|
||||
*Gaming*) show_install_gaming_menu ;;
|
||||
*Extra*) show_install_extra_menu ;;
|
||||
*) show_main_menu ;;
|
||||
esac
|
||||
}
|
||||
@@ -252,8 +264,8 @@ show_install_editor_menu() {
|
||||
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
|
||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
||||
*Zed*) present_terminal "echo 'Installing Zed...'; sudo pacman -S zed && setsid gtk-launch dev.zed.Zed" ;;
|
||||
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
||||
*Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
||||
*Helix*) install "Helix" "helix" ;;
|
||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
||||
*) show_install_menu ;;
|
||||
@@ -276,26 +288,31 @@ show_install_ai_menu() {
|
||||
echo ollama
|
||||
)
|
||||
|
||||
case $(menu "Install" " Dictation [AUR]\n Claude Code\n Copilot CLI [AUR]\n Cursor CLI\n Gemini\n OpenAI Codex\n LM Studio\n Ollama\n Crush") in
|
||||
*Dictation*) present_terminal "echo 'Installing Hyprwhspr from AUR...'; yay -S --noconfirm hyprwhspr && hyprwhspr setup" ;;
|
||||
case $(menu "Install" " Claude Code\n Cursor CLI [AUR]\n Gemini [AUR]\n OpenAI Codex [AUR]\n LM Studio\n Ollama\n Crush\n opencode") in
|
||||
*Claude*) install "Claude Code" "claude-code" ;;
|
||||
*Copilot*) aur_install "Copilot CLI" "github-copilot-cli" ;;
|
||||
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
|
||||
*Gemini*) install "Gemini" "gemini-cli" ;;
|
||||
*OpenAI*) install "OpenAI Codex" "openai-codex" ;;
|
||||
*Cursor*) aur_install "Cursor CLI" "cursor-cli" ;;
|
||||
*OpenAI*) aur_install "OpenAI Codex" "openai-codex-bin" ;;
|
||||
*Gemini*) aur_install "Gemini" "gemini-cli" ;;
|
||||
*Studio*) install "LM Studio" "lmstudio" ;;
|
||||
*Ollama*) install "Ollama" $ollama_pkg ;;
|
||||
*Crush*) install "Crush" "crush-bin" ;;
|
||||
*opencode*) install "opencode" "opencode" ;;
|
||||
*) show_install_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_install_gaming_menu() {
|
||||
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft\n Xbox Controller [AUR]") in
|
||||
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft") in
|
||||
*Steam*) present_terminal omarchy-install-steam ;;
|
||||
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
||||
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
||||
*Xbox*) present_terminal omarchy-install-xbox-controllers ;;
|
||||
*Minecraft*) aur_install_and_launch "Minecraft [AUR]" "minecraft-launcher" "minecraft-launcher" ;;
|
||||
*) show_install_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_install_extra_menu() {
|
||||
case $(menu "Install" " Hyprscrolling") in
|
||||
*Hyprscrolling*) present_terminal omarchy-install-hyprscrolling ;;
|
||||
*) show_install_menu ;;
|
||||
esac
|
||||
}
|
||||
@@ -303,19 +320,18 @@ show_install_gaming_menu() {
|
||||
show_install_style_menu() {
|
||||
case $(menu "Install" " Theme\n Background\n Font") in
|
||||
*Theme*) present_terminal omarchy-theme-install ;;
|
||||
*Background*) omarchy-theme-bg-install ;;
|
||||
*Background*) nautilus ~/.config/omarchy/current/theme/backgrounds ;;
|
||||
*Font*) show_install_font_menu ;;
|
||||
*) show_install_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_install_font_menu() {
|
||||
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono\n Iosevka" "--width 350") in
|
||||
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "--width 350") in
|
||||
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
|
||||
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
|
||||
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
|
||||
*Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
|
||||
*Iosevka*) install_font "Iosevka" "ttf-iosevka-nerd" "Iosevka Nerd Font Mono" ;;
|
||||
*) show_install_menu ;;
|
||||
esac
|
||||
}
|
||||
@@ -366,11 +382,10 @@ show_install_elixir_menu() {
|
||||
}
|
||||
|
||||
show_remove_menu() {
|
||||
case $(menu "Remove" " Package\n Web App\n TUI\n Development\n Theme\n Windows\n Fingerprint\n Fido2") in
|
||||
case $(menu "Remove" " Package\n Web App\n TUI\n Theme\n Windows\n Fingerprint\n Fido2") in
|
||||
*Package*) terminal omarchy-pkg-remove ;;
|
||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
||||
*Development*) show_remove_development_menu ;;
|
||||
*Theme*) present_terminal omarchy-theme-remove ;;
|
||||
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
||||
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
||||
@@ -379,71 +394,25 @@ show_remove_menu() {
|
||||
esac
|
||||
}
|
||||
|
||||
show_remove_development_menu() {
|
||||
case $(menu "Remove" " Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in
|
||||
*Rails*) present_terminal "omarchy-remove-dev-env ruby" ;;
|
||||
*JavaScript*) show_remove_javascript_menu ;;
|
||||
*Go*) present_terminal "omarchy-remove-dev-env go" ;;
|
||||
*PHP*) show_remove_php_menu ;;
|
||||
*Python*) present_terminal "omarchy-remove-dev-env python" ;;
|
||||
*Elixir*) show_remove_elixir_menu ;;
|
||||
*Zig*) present_terminal "omarchy-remove-dev-env zig" ;;
|
||||
*Rust*) present_terminal "omarchy-remove-dev-env rust" ;;
|
||||
*Java*) present_terminal "omarchy-remove-dev-env java" ;;
|
||||
*NET*) present_terminal "omarchy-remove-dev-env dotnet" ;;
|
||||
*OCaml*) present_terminal "omarchy-remove-dev-env ocaml" ;;
|
||||
*Clojure*) present_terminal "omarchy-remove-dev-env clojure" ;;
|
||||
*) show_remove_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_remove_javascript_menu() {
|
||||
case $(menu "Remove" " Node.js\n Bun\n Deno") in
|
||||
*Node*) present_terminal "omarchy-remove-dev-env node" ;;
|
||||
*Bun*) present_terminal "omarchy-remove-dev-env bun" ;;
|
||||
*Deno*) present_terminal "omarchy-remove-dev-env deno" ;;
|
||||
*) show_remove_development_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_remove_php_menu() {
|
||||
case $(menu "Remove" " PHP\n Laravel\n Symfony") in
|
||||
*PHP*) present_terminal "omarchy-remove-dev-env php" ;;
|
||||
*Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;;
|
||||
*Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;;
|
||||
*) show_remove_development_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_remove_elixir_menu() {
|
||||
case $(menu "Remove" " Elixir\n Phoenix") in
|
||||
*Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;;
|
||||
*Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;;
|
||||
*) show_remove_development_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_update_menu() {
|
||||
case $(menu "Update" " Omarchy\n Channel\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
||||
case $(menu "Update" " Omarchy\n Branch\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone") in
|
||||
*Omarchy*) present_terminal omarchy-update ;;
|
||||
*Channel*) show_update_channel_menu ;;
|
||||
*Branch*) show_update_branch_menu ;;
|
||||
*Config*) show_update_config_menu ;;
|
||||
*Themes*) present_terminal omarchy-theme-update ;;
|
||||
*Process*) show_update_process_menu ;;
|
||||
*Hardware*) show_update_hardware_menu ;;
|
||||
*Firmware*) present_terminal omarchy-update-firmware ;;
|
||||
*Timezone*) present_terminal omarchy-tz-select ;;
|
||||
*Time*) present_terminal omarchy-update-time ;;
|
||||
*Password*) show_update_password_menu ;;
|
||||
*) show_main_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_update_channel_menu() {
|
||||
case $(menu "Update channel" "🟢 Stable\n🟡 Edge\n🔴 Dev") in
|
||||
*Stable*) present_terminal "omarchy-channel-set stable" ;;
|
||||
*Edge*) present_terminal "omarchy-channel-set edge" ;;
|
||||
*Dev*) present_terminal "omarchy-channel-set dev" ;;
|
||||
show_update_branch_menu() {
|
||||
case $(menu "Branch" "master\ndev" "" "$(omarchy-version-branch)") in
|
||||
*master*) present_terminal "omarchy-update-branch master" ;;
|
||||
*dev*) present_terminal "omarchy-update-branch dev" ;;
|
||||
*) show_update_menu ;;
|
||||
esac
|
||||
}
|
||||
@@ -490,11 +459,12 @@ show_update_password_menu() {
|
||||
}
|
||||
|
||||
show_system_menu() {
|
||||
case $(menu "System" " Lock\n Screensaver\n Restart\n Shutdown") in
|
||||
case $(menu "System" " Lock\n Screensaver\n Suspend\n Restart\n Shutdown") in
|
||||
*Lock*) omarchy-lock-screen ;;
|
||||
*Screensaver*) omarchy-launch-screensaver force ;;
|
||||
*Restart*) omarchy-cmd-reboot ;;
|
||||
*Shutdown*) omarchy-cmd-shutdown ;;
|
||||
*Suspend*) systemctl suspend ;;
|
||||
*Restart*) omarchy-state clear re*-required && systemctl reboot --no-wall ;;
|
||||
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff --no-wall ;;
|
||||
*) back_to show_main_menu ;;
|
||||
esac
|
||||
}
|
||||
@@ -523,10 +493,6 @@ go_to_menu() {
|
||||
esac
|
||||
}
|
||||
|
||||
# Allow user extensions and overrides
|
||||
USER_EXTENSIONS="$HOME/.config/omarchy/extensions/menu.sh"
|
||||
[[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS"
|
||||
|
||||
if [[ -n "$1" ]]; then
|
||||
BACK_TO_EXIT=true
|
||||
go_to_menu "$1"
|
||||
|
||||
@@ -49,17 +49,6 @@ parse_keycodes() {
|
||||
code="${BASH_REMATCH[1]}"
|
||||
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
||||
echo "${line/code:${code}/$symbol}"
|
||||
elif [[ "$line" =~ mouse:([0-9]+) ]]; then
|
||||
code="${BASH_REMATCH[1]}"
|
||||
|
||||
case "$code" in
|
||||
272) symbol="LEFT MOUSE BUTTON" ;;
|
||||
273) symbol="RIGHT MOUSE BUTTON" ;;
|
||||
274) symbol="MIDDLE MOUSE BUTTON" ;;
|
||||
*) symbol="mouse:${code}" ;;
|
||||
esac
|
||||
|
||||
echo "${line/mouse:${code}/$symbol}"
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
@@ -112,11 +101,6 @@ dynamic_bindings() {
|
||||
-e 's/^77,/SUPER SHIFT CTRL ALT,/'
|
||||
}
|
||||
|
||||
# Hardcoded bindings, like the copy-url extension and such
|
||||
static_bindings() {
|
||||
echo "SHIFT ALT,L,Copy URL from Web App,extension,copy-url"
|
||||
}
|
||||
|
||||
# Parse and format keybindings
|
||||
#
|
||||
# `awk` does the heavy lifting:
|
||||
@@ -163,75 +147,13 @@ parse_bindings() {
|
||||
}'
|
||||
}
|
||||
|
||||
prioritize_entries() {
|
||||
awk '
|
||||
{
|
||||
line = $0
|
||||
prio = 50
|
||||
if (match(line, /Terminal/)) prio = 0
|
||||
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1
|
||||
if (match(line, /File manager/)) prio = 2
|
||||
if (match(line, /Launch apps/)) prio = 3
|
||||
if (match(line, /Omarchy menu/)) prio = 4
|
||||
if (match(line, /System menu/)) prio = 5
|
||||
if (match(line, /Theme menu/)) prio = 6
|
||||
if (match(line, /Full screen/)) prio = 7
|
||||
if (match(line, /Close window/)) prio = 8
|
||||
if (match(line, /Toggle window floating/)) prio = 9
|
||||
if (match(line, /Toggle window split/)) prio = 10
|
||||
if (match(line, /Universal/)) prio = 11
|
||||
if (match(line, /Clipboard/)) prio = 12
|
||||
if (match(line, /Emoji picker/)) prio = 13
|
||||
if (match(line, /Color picker/)) prio = 14
|
||||
if (match(line, /Screenshot/)) prio = 15
|
||||
if (match(line, /Screenrecording/)) prio = 16
|
||||
if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 17
|
||||
if (match(line, /Move window to workspace/)) prio = 18
|
||||
if (match(line, /Swap window/)) prio = 19
|
||||
if (match(line, /Move window focus/)) prio = 20
|
||||
if (match(line, /Move window$/)) prio = 21
|
||||
if (match(line, /Resize window/)) prio = 22
|
||||
if (match(line, /Expand window/)) prio = 23
|
||||
if (match(line, /Shrink window/)) prio = 24
|
||||
if (match(line, /scratchpad/)) prio = 25
|
||||
if (match(line, /notification/)) prio = 26
|
||||
if (match(line, /Toggle window transparency/)) prio = 27
|
||||
if (match(line, /Toggle workspace gaps/)) prio = 28
|
||||
if (match(line, /Toggle nightlight/)) prio = 29
|
||||
if (match(line, /group/)) prio = 94
|
||||
if (match(line, /Scroll active workspace/)) prio = 95
|
||||
if (match(line, /Cycle to/)) prio = 96
|
||||
if (match(line, /Reveal active/)) prio = 97
|
||||
if (match(line, /Apple Display/)) prio = 98
|
||||
if (match(line, /XF86/)) prio = 99
|
||||
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
||||
menu_height=$((monitor_height * 40 / 100))
|
||||
|
||||
# print "priority<TAB>line"
|
||||
printf "%d\t%s\n", prio, line
|
||||
}' |
|
||||
sort -k1,1n -k2,2 |
|
||||
cut -f2-
|
||||
}
|
||||
|
||||
output_keybindings() {
|
||||
build_keymap_cache
|
||||
|
||||
{
|
||||
dynamic_bindings
|
||||
static_bindings
|
||||
} |
|
||||
sort -u |
|
||||
parse_keycodes |
|
||||
parse_bindings |
|
||||
prioritize_entries
|
||||
}
|
||||
|
||||
if [[ "$1" == "--print" || "$1" == "-p" ]]; then
|
||||
output_keybindings
|
||||
else
|
||||
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
||||
menu_height=$((monitor_height * 40 / 100))
|
||||
|
||||
output_keybindings |
|
||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
||||
fi
|
||||
build_keymap_cache
|
||||
|
||||
dynamic_bindings |
|
||||
sort -u |
|
||||
parse_keycodes |
|
||||
parse_bindings |
|
||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
||||
|
||||
7
bin/omarchy-pkg-ignored
Executable file
7
bin/omarchy-pkg-ignored
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
IGNORED_PACKAGES_FILE="$OMARCHY_PATH/install/packages.ignored"
|
||||
|
||||
if [[ -f $IGNORED_PACKAGES_FILE ]]; then
|
||||
tr '\r\n' ',' <"$IGNORED_PACKAGES_FILE" | sed 's/,$//'
|
||||
fi
|
||||
7
bin/omarchy-pkg-pinned
Executable file
7
bin/omarchy-pkg-pinned
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
PINNED_PACKAGES_FILE="$OMARCHY_PATH/install/packages.pinned"
|
||||
|
||||
if [[ -f $PINNED_PACKAGES_FILE ]]; then
|
||||
tr '\r\n' ',' <"$PINNED_PACKAGES_FILE" | sed 's/,$//'
|
||||
fi
|
||||
@@ -10,8 +10,4 @@ mkdir -p ~/.local/share/applications
|
||||
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
|
||||
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
|
||||
|
||||
# Refresh the webapps
|
||||
bash $OMARCHY_PATH/install/packaging/icons.sh
|
||||
bash $OMARCHY_PATH/install/packaging/webapps.sh
|
||||
|
||||
update-desktop-database ~/.local/share/applications
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
CONFIG_FILE="$HOME/.config/chromium-flags.conf"
|
||||
INSTALL_GOOGLE_ACCOUNTS=false
|
||||
|
||||
# Check if google accounts were installed
|
||||
if [[ -f "$CONFIG_FILE" ]] && \
|
||||
grep -q -- "--oauth2-client-id" "$CONFIG_FILE" && \
|
||||
grep -q -- "--oauth2-client-secret" "$CONFIG_FILE"; then
|
||||
INSTALL_GOOGLE_ACCOUNTS=true
|
||||
fi
|
||||
|
||||
# Refresh the Chromium configuration
|
||||
omarchy-refresh-config chromium-flags.conf
|
||||
|
||||
# Re-install Google accounts if previously configured
|
||||
if [[ "$INSTALL_GOOGLE_ACCOUNTS" == true ]]; then
|
||||
omarchy-install-chromium-google-account
|
||||
fi
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
omarchy-refresh-config hypr/autostart.conf
|
||||
omarchy-refresh-config hypr/bindings.conf
|
||||
omarchy-refresh-config hypr/envs.conf
|
||||
omarchy-refresh-config hypr/input.conf
|
||||
omarchy-refresh-config hypr/looknfeel.conf
|
||||
omarchy-refresh-config hypr/hyprland.conf
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -f /boot/EFI/Linux/omarchy_linux.efi ]] && [[ -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi ]]; then
|
||||
echo "Cleanup extra UKI"
|
||||
sudo rm -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi
|
||||
fi
|
||||
echo "Resetting limine config"
|
||||
|
||||
sudo mv /boot/limine.conf /boot/limine.conf.bak
|
||||
|
||||
sudo tee /boot/limine.conf <<EOF >/dev/null
|
||||
### Read more at config document: https://github.com/limine-bootloader/limine/blob/trunk/CONFIG.md
|
||||
#timeout: 3
|
||||
default_entry: 2
|
||||
interface_branding: Omarchy Bootloader
|
||||
interface_branding_color: 2
|
||||
hash_mismatch_panic: no
|
||||
|
||||
term_background: 1a1b26
|
||||
backdrop: 1a1b26
|
||||
|
||||
# Terminal colors (Tokyo Night palette)
|
||||
term_palette: 15161e;f7768e;9ece6a;e0af68;7aa2f7;bb9af7;7dcfff;a9b1d6
|
||||
term_palette_bright: 414868;f7768e;9ece6a;e0af68;7aa2f7;bb9af7;7dcfff;c0caf5
|
||||
|
||||
# Text colors
|
||||
term_foreground: c0caf5
|
||||
term_foreground_bright: c0caf5
|
||||
term_background_bright: 24283b
|
||||
|
||||
EOF
|
||||
|
||||
sudo limine-update
|
||||
sudo limine-snapper-sync
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Take backup of existing files
|
||||
sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak
|
||||
sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
|
||||
|
||||
sudo cp -f ~/.local/share/omarchy/default/pacman/pacman.conf /etc/pacman.conf
|
||||
|
||||
if [[ $1 == "edge" ]]; then
|
||||
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist
|
||||
sudo sed -i 's|https://pkgs.omarchy.org/.*$arch|https://pkgs.omarchy.org/edge/$arch|' /etc/pacman.conf
|
||||
echo "Setting channel to edge"
|
||||
else
|
||||
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist
|
||||
sudo sed -i 's|https://pkgs.omarchy.org/.*$arch|https://pkgs.omarchy.org/stable/$arch|' /etc/pacman.conf
|
||||
echo "Setting channel to stable"
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# Reset all package DBs and then update
|
||||
sudo pacman -Syyu --noconfirm
|
||||
3
bin/omarchy-refresh-pacman-mirrorlist
Executable file
3
bin/omarchy-refresh-pacman-mirrorlist
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist
|
||||
@@ -1,10 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Ensure walker is set to autostart
|
||||
mkdir -p ~/.config/autostart/
|
||||
cp $OMARCHY_PATH/autostart/walker.desktop ~/.config/autostart/
|
||||
systemctl --user daemon-reload
|
||||
|
||||
omarchy-refresh-config walker/config.toml
|
||||
omarchy-refresh-config elephant/calc.toml
|
||||
omarchy-refresh-config elephant/desktopapplications.toml
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
echo "Error: This script should not be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "This will reinstall all the default Omarchy packages and reset all default configs.\nWarning: All changes to configs will be lost.\n"
|
||||
|
||||
if gum confirm "Are you sure you want to reinstall and lose all config changes?"; then
|
||||
echo "Resetting Omarchy repository"
|
||||
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
|
||||
rm -rf $OMARCHY_PATH
|
||||
mv ~/.local/share/omarchy-new $OMARCHY_PATH
|
||||
|
||||
echo "Reinstalling missing Omarchy packages"
|
||||
mapfile -t packages < <(grep -v '^#' "$OMARCHY_PATH/install/omarchy-base.packages" | grep -v '^$')
|
||||
sudo pacman -Syu --noconfirm --needed "${packages[@]}"
|
||||
|
||||
echo "Resetting all Omarchy configs"
|
||||
cp -R ~/.local/share/omarchy/config/* ~/.config/
|
||||
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
|
||||
echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' | tee ~/.bash_profile >/dev/null
|
||||
|
||||
$(bash $OMARCHY_PATH/install/config/theme.sh)
|
||||
$(bash $OMARCHY_PATH/install/config/git.sh)
|
||||
|
||||
omarchy-refresh-limine
|
||||
omarchy-refresh-plymouth
|
||||
omarchy-nvim-setup
|
||||
fi
|
||||
@@ -1,102 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: omarchy-remove-dev-env <ruby|node|bun|deno|go|php|laravel|symfony|python|elixir|phoenix|zig|rust|java|dotnet|ocaml|clojure>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
remove_php() {
|
||||
sudo pacman -Rns --noconfirm php composer php-sqlite xdebug 2>/dev/null || true
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
ruby)
|
||||
echo -e "Removing Ruby...\n"
|
||||
mise uninstall ruby --all
|
||||
mise rm -g ruby
|
||||
rm -f ~/.gemrc
|
||||
;;
|
||||
node)
|
||||
echo -e "Removing Node.js...\n"
|
||||
mise uninstall node --all
|
||||
mise rm -g node
|
||||
;;
|
||||
bun)
|
||||
echo -e "Removing Bun...\n"
|
||||
mise uninstall bun --all
|
||||
mise rm -g bun
|
||||
;;
|
||||
deno)
|
||||
echo -e "Removing Deno...\n"
|
||||
mise uninstall deno --all
|
||||
mise rm -g deno
|
||||
;;
|
||||
go)
|
||||
echo -e "Removing Go...\n"
|
||||
mise uninstall go --all
|
||||
mise rm -g go
|
||||
;;
|
||||
php)
|
||||
echo -e "Removing PHP...\n"
|
||||
remove_php
|
||||
;;
|
||||
laravel)
|
||||
echo -e "Removing Laravel...\n"
|
||||
composer global remove laravel/installer 2>/dev/null || true
|
||||
;;
|
||||
symfony)
|
||||
echo -e "Removing Symfony CLI...\n"
|
||||
sudo pacman -Rns --noconfirm symfony-cli 2>/dev/null || true
|
||||
;;
|
||||
python)
|
||||
echo -e "Removing Python...\n"
|
||||
mise uninstall python --all
|
||||
mise rm -g python
|
||||
rm -rf ~/.local/bin/uv ~/.local/bin/uvx ~/.cargo/bin/uv 2>/dev/null || true
|
||||
;;
|
||||
elixir|phoenix)
|
||||
echo -e "Removing Elixir/Erlang...\n"
|
||||
mise uninstall elixir --all
|
||||
mise uninstall erlang --all
|
||||
mise rm -g elixir
|
||||
mise rm -g erlang
|
||||
;;
|
||||
zig)
|
||||
echo -e "Removing Zig...\n"
|
||||
mise uninstall zig --all
|
||||
mise uninstall zls --all
|
||||
mise rm -g zig
|
||||
mise rm -g zls
|
||||
;;
|
||||
rust)
|
||||
echo -e "Removing Rust...\n"
|
||||
rustup self uninstall -y 2>/dev/null || true
|
||||
;;
|
||||
java)
|
||||
echo -e "Removing Java...\n"
|
||||
mise uninstall java --all
|
||||
mise rm -g java
|
||||
;;
|
||||
dotnet)
|
||||
echo -e "Removing .NET...\n"
|
||||
mise uninstall dotnet --all
|
||||
mise rm -g dotnet
|
||||
;;
|
||||
ocaml)
|
||||
echo -e "Removing OCaml...\n"
|
||||
opam switch remove default -y 2>/dev/null || true
|
||||
rm -rf ~/.opam 2>/dev/null || true
|
||||
sudo rm -f /usr/local/bin/opam 2>/dev/null || true
|
||||
;;
|
||||
clojure)
|
||||
echo -e "Removing Clojure...\n"
|
||||
mise uninstall clojure --all
|
||||
mise rm -g clojure
|
||||
;;
|
||||
*)
|
||||
echo "Unknown environment: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -e "\nDone!"
|
||||
@@ -1,22 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
restart_services() {
|
||||
if systemctl --user is-enabled elephant.service &>/dev/null; then
|
||||
systemctl --user restart elephant.service
|
||||
fi
|
||||
|
||||
if systemctl --user is-enabled app-walker@autostart.service &>/dev/null; then
|
||||
systemctl --user restart app-walker@autostart.service
|
||||
else
|
||||
echo -e "\e[31mUnable to restart Walker -- RESTART MANUALLY\e[0m"
|
||||
fi
|
||||
}
|
||||
pkill elephant
|
||||
pkill walker
|
||||
|
||||
# Detect if we're running as root (from pacman hook)
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
# Get the owner of this script to determine which user to run as
|
||||
SCRIPT_OWNER=$(stat -c '%U' "$0")
|
||||
USER_UID=$(id -u "$SCRIPT_OWNER")
|
||||
|
||||
# Restart services as the script owner
|
||||
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
|
||||
bash -c "$(declare -f restart_services); restart_services"
|
||||
bash -c "
|
||||
setsid uwsm-app -- elephant &
|
||||
setsid uwsm-app -- walker --gapplication-service &
|
||||
"
|
||||
else
|
||||
restart_services
|
||||
setsid uwsm-app -- elephant &
|
||||
setsid uwsm-app -- walker --gapplication-service &
|
||||
fi
|
||||
|
||||
@@ -51,16 +51,6 @@ 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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
remove_pam_config() {
|
||||
# Remove from sudo
|
||||
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
|
||||
@@ -81,9 +71,6 @@ if [[ "--remove" == "$1" ]]; then
|
||||
# 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
|
||||
@@ -103,9 +90,6 @@ else
|
||||
# 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"
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
COMMAND="$1"
|
||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||
|
||||
@@ -19,7 +17,7 @@ create)
|
||||
DESC="$(omarchy-version)"
|
||||
|
||||
echo -e "\e[32mCreate system snapshot\e[0m"
|
||||
|
||||
|
||||
# Get existing snapper config names from CSV output
|
||||
mapfile -t CONFIGS < <(sudo snapper --csvout list-configs | awk -F, 'NR>1 {print $1}')
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
CURRENT_THEME_NAME=$(cat "$HOME/.config/omarchy/current/theme.name")
|
||||
THEME_USER_BACKGROUNDS="$HOME/.config/omarchy/backgrounds/$CURRENT_THEME_NAME"
|
||||
|
||||
mkdir -p "$THEME_USER_BACKGROUNDS"
|
||||
nautilus "$THEME_USER_BACKGROUNDS"
|
||||
@@ -2,12 +2,10 @@
|
||||
|
||||
# Cycles through the background images available
|
||||
|
||||
THEME_NAME=$(cat "$HOME/.config/omarchy/current/theme.name" 2>/dev/null)
|
||||
THEME_BACKGROUNDS_PATH="$HOME/.config/omarchy/current/theme/backgrounds/"
|
||||
USER_BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME/"
|
||||
BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/"
|
||||
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
||||
|
||||
mapfile -d '' -t BACKGROUNDS < <(find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
|
||||
mapfile -d '' -t BACKGROUNDS < <(find -L "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
|
||||
TOTAL=${#BACKGROUNDS[@]}
|
||||
|
||||
if [[ $TOTAL -eq 0 ]]; then
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name"
|
||||
|
||||
if [[ -f $THEME_NAME_PATH ]]; then
|
||||
cat $THEME_NAME_PATH | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
|
||||
else
|
||||
echo "Unknown"
|
||||
fi
|
||||
basename "$(realpath "$HOME/.config/omarchy/current/theme")" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
{
|
||||
find ~/.config/omarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) -printf '%f\n'
|
||||
find "$OMARCHY_PATH/themes/" -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
|
||||
} | sort -u | while read -r name; do
|
||||
echo "$name" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
|
||||
find ~/.config/omarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do
|
||||
echo "$(basename "$path" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')"
|
||||
done
|
||||
|
||||
34
bin/omarchy-theme-next
Executable file
34
bin/omarchy-theme-next
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
THEMES_DIR="$HOME/.config/omarchy/themes/"
|
||||
CURRENT_THEME_LINK="$HOME/.config/omarchy/current/theme"
|
||||
|
||||
THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 | sort))
|
||||
TOTAL=${#THEMES[@]}
|
||||
|
||||
# Get current theme from symlink
|
||||
if [[ -L "$CURRENT_THEME_LINK" ]]; then
|
||||
CURRENT_THEME=$(realpath "$CURRENT_THEME_LINK")
|
||||
else
|
||||
# Default to first theme if no symlink exists
|
||||
CURRENT_THEME=$(realpath "${THEMES[0]}")
|
||||
fi
|
||||
|
||||
# Find current theme index
|
||||
INDEX=0
|
||||
for i in "${!THEMES[@]}"; do
|
||||
THEMES[$i]=$(realpath "${THEMES[$i]}")
|
||||
|
||||
if [[ "${THEMES[$i]}" == "$CURRENT_THEME" ]]; then
|
||||
INDEX=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Get next theme (wrap around)
|
||||
NEXT_INDEX=$(((INDEX + 1) % TOTAL))
|
||||
NEW_THEME=${THEMES[$NEXT_INDEX]}
|
||||
NEW_THEME_NAME=$(basename "$NEW_THEME")
|
||||
|
||||
omarchy-theme-set $NEW_THEME_NAME
|
||||
notify-send "Theme changed to $NEW_THEME_NAME" -t 2000
|
||||
@@ -7,7 +7,7 @@ if [ -z "$1" ]; then
|
||||
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
|
||||
|
||||
if [[ ${#extra_themes[@]} -gt 0 ]]; then
|
||||
THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
|
||||
THEME_NAME=$(gum choose --header="Remove extra theme" "${extra_themes[@]}")
|
||||
else
|
||||
echo "No extra themes installed."
|
||||
exit 1
|
||||
@@ -31,5 +31,10 @@ if [ ! -d "$THEME_PATH" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Move to the next theme if the current theme is the one being removed
|
||||
if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then
|
||||
omarchy-theme-next
|
||||
fi
|
||||
|
||||
# Now remove the theme directory for THEME_NAME
|
||||
rm -rf "$THEME_PATH"
|
||||
|
||||
@@ -1,42 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
if [[ -z $1 && $1 != "CNCLD" ]]; then
|
||||
echo "Usage: omarchy-theme-set <theme-name>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CURRENT_THEME_PATH="$HOME/.config/omarchy/current/theme"
|
||||
NEXT_THEME_PATH="$HOME/.config/omarchy/current/next-theme"
|
||||
USER_THEMES_PATH="$HOME/.config/omarchy/themes"
|
||||
OMARCHY_THEMES_PATH="$OMARCHY_PATH/themes"
|
||||
THEMES_DIR="$HOME/.config/omarchy/themes/"
|
||||
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||
|
||||
THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
||||
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
||||
|
||||
if [[ -d "$USER_THEMES_PATH/$THEME_NAME" ]]; then
|
||||
THEME_PATH="$USER_THEMES_PATH/$THEME_NAME"
|
||||
elif [[ -d "$OMARCHY_THEMES_PATH/$THEME_NAME" ]]; then
|
||||
THEME_PATH="$OMARCHY_THEMES_PATH/$THEME_NAME"
|
||||
else
|
||||
echo "Theme '$THEME_NAME' does not exist"
|
||||
# Check if the theme entered exists
|
||||
if [[ ! -d "$THEME_PATH" ]]; then
|
||||
echo "Theme '$THEME_NAME' does not exist in $THEMES_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup clean next theme directory (for atomic theme config swapping)
|
||||
rm -rf "$NEXT_THEME_PATH"
|
||||
mkdir -p "$NEXT_THEME_PATH"
|
||||
|
||||
# Copy static configs
|
||||
cp -r "$THEME_PATH/"* "$NEXT_THEME_PATH/" 2>/dev/null
|
||||
|
||||
# Generate dynamic configs
|
||||
omarchy-theme-set-templates
|
||||
|
||||
# Swap next theme in as current
|
||||
rm -rf "$CURRENT_THEME_PATH"
|
||||
mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH"
|
||||
|
||||
# Store theme name for reference
|
||||
echo "$THEME_NAME" > "$HOME/.config/omarchy/current/theme.name"
|
||||
# Update theme symlinks
|
||||
ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR"
|
||||
|
||||
# Change background with theme
|
||||
omarchy-theme-bg-next
|
||||
@@ -46,17 +28,15 @@ if pgrep -x waybar >/dev/null; then
|
||||
omarchy-restart-waybar
|
||||
fi
|
||||
omarchy-restart-swayosd
|
||||
omarchy-restart-terminal
|
||||
hyprctl reload
|
||||
pkill -SIGUSR2 btop
|
||||
# pkill -SIGUSR2 opencode
|
||||
makoctl reload
|
||||
|
||||
# Change app-specific themes
|
||||
# Change gnome, browser, vscode, cursor themes
|
||||
omarchy-theme-set-terminal
|
||||
omarchy-theme-set-gnome
|
||||
omarchy-theme-set-browser
|
||||
omarchy-theme-set-vscode
|
||||
omarchy-theme-set-vscodium
|
||||
omarchy-theme-set-cursor
|
||||
omarchy-theme-set-obsidian
|
||||
|
||||
|
||||
@@ -23,6 +23,11 @@ if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy
|
||||
fi
|
||||
fi
|
||||
|
||||
if omarchy-cmd-present helium-browser; then
|
||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
|
||||
helium-browser --no-startup-window --refresh-platform-policy
|
||||
fi
|
||||
|
||||
if omarchy-cmd-present brave; then
|
||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
|
||||
brave --refresh-platform-policy --no-startup-window
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Call the VSCode theme setter with Cursor-specific parameters
|
||||
omarchy-theme-set-vscode cursor "$HOME/.config/Cursor/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-cursor-theme-changes"
|
||||
omarchy-theme-set-vscode cursor "$HOME/.config/Cursor/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-cursor-theme-changes" Cursor
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# omarchy-theme-set-obsidian: Bootstrap and update Omarchy theme for Obsidian
|
||||
#
|
||||
# - Ensures registry at ~/.local/state/omarchy/obsidian-vaults
|
||||
# - Populates by extracting vault paths from ~/.config/obsidian/obsidian.json
|
||||
# - If missing/empty, bootstraps by scanning ~/Documents/*/.obsidian and ~/Dropbox/*/.obsidian
|
||||
# - For each valid vault:
|
||||
# - Ensures .obsidian/themes/Omarchy/{manifest.json, theme.css}
|
||||
# - Updates theme.css (uses current theme’s obsidian.css if present; otherwise generates -- see below)
|
||||
@@ -26,18 +26,30 @@
|
||||
VAULTS_FILE="$HOME/.local/state/omarchy/obsidian-vaults"
|
||||
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||
|
||||
# Ensure the vaults registry exists, or bootstrap from known locations
|
||||
ensure_vaults_file() {
|
||||
mkdir -p "$(dirname "$VAULTS_FILE")"
|
||||
# If file exists (even empty), do not scan; treat as authoritative
|
||||
if [ -f "$VAULTS_FILE" ]; then
|
||||
return
|
||||
fi
|
||||
local tmpfile
|
||||
tmpfile="$(mktemp)"
|
||||
# Extract the Obsidian vault location from config file <base>/<vault>/.obsidian
|
||||
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null >>"$tmpfile"
|
||||
if [ -s "$tmpfile" ]; then
|
||||
sort -u "$tmpfile" >"$VAULTS_FILE"
|
||||
else
|
||||
: >"$VAULTS_FILE"
|
||||
fi
|
||||
rm "$tmpfile"
|
||||
# Scan a couple of common locations for <base>/<vault>/.obsidian
|
||||
for base in "$HOME/Documents" "$HOME/Dropbox"; do
|
||||
[ -d "$base" ] || continue
|
||||
for d in "$base"/*/.obsidian; do
|
||||
[ -d "$d" ] || continue
|
||||
vault_dir="${d%/.obsidian}"
|
||||
printf "%s\n" "$vault_dir" >>"$tmpfile"
|
||||
done
|
||||
done
|
||||
if [ -s "$tmpfile" ]; then
|
||||
sort -u "$tmpfile" >"$VAULTS_FILE"
|
||||
else
|
||||
: >"$VAULTS_FILE"
|
||||
fi
|
||||
rm -f "$tmpfile"
|
||||
}
|
||||
|
||||
# Ensure theme directory and minimal manifest exist in a vault
|
||||
@@ -87,35 +99,6 @@ calculate_brightness() {
|
||||
echo $(((r * 299 + g * 587 + b * 114) / 1000))
|
||||
}
|
||||
|
||||
# Calculate approximate contrast ratio between two colors
|
||||
# Returns ratio scaled by 100 (e.g., 450 = 4.5:1 ratio)
|
||||
# (this is due to bash not supporting decimal math)
|
||||
calculate_contrast_ratio() {
|
||||
local hex1="$1" hex2="$2"
|
||||
local br1=$(calculate_brightness "$hex1") # 0-255 range
|
||||
local br2=$(calculate_brightness "$hex2") # 0-255 range
|
||||
|
||||
# Ensure br1 is the lighter color (higher brightness)
|
||||
if [ $br1 -lt $br2 ]; then
|
||||
local temp=$br1
|
||||
br1=$br2
|
||||
br2=$temp
|
||||
fi
|
||||
|
||||
# Approximate contrast ratio scaled by 100
|
||||
# Add offset to avoid division by zero and approximate WCAG +0.05 behavior
|
||||
echo $(((br1 + 13) * 100 / (br2 + 13)))
|
||||
}
|
||||
|
||||
# Check if two colors meet minimum contrast threshold
|
||||
# Usage: meets_contrast_threshold <ratio> <threshold>
|
||||
# Both ratio and threshold should be scaled by 100 (e.g., 300 = 3:1)
|
||||
meets_contrast_threshold() {
|
||||
local ratio="$1" # Ratio scaled by 100 (from calculate_contrast_ratio)
|
||||
local threshold="$2" # Threshold scaled by 100 (300=3:1, 450=4.5:1, 700=7:1)
|
||||
[ $ratio -ge $threshold ]
|
||||
}
|
||||
|
||||
# Calculate color distance (euclidean in RGB space)
|
||||
color_distance() {
|
||||
local hex1="$1"
|
||||
@@ -258,30 +241,38 @@ extract_theme_data() {
|
||||
fi
|
||||
done
|
||||
|
||||
# Sort by distance and get the closest color for code background
|
||||
local -a closest_to_bg
|
||||
readarray -t closest_to_bg < <(printf '%s\n' "${bg_distances[@]}" | sort -n | head -1 | cut -d: -f2)
|
||||
|
||||
# All background variations use the same as primary background
|
||||
local bg_primary_alt="$bg_color"
|
||||
local bg_secondary="$bg_color"
|
||||
local bg_secondary_alt="$bg_color"
|
||||
|
||||
# Generate code background color that will contrast with foreground text
|
||||
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
|
||||
if [ $bg_brightness -gt 127 ]; then
|
||||
r=$((r - 10))
|
||||
g=$((g - 10))
|
||||
b=$((b - 10))
|
||||
else
|
||||
r=$((r + 15))
|
||||
g=$((g + 15))
|
||||
b=$((b + 15))
|
||||
fi
|
||||
[ $r -lt 0 ] && r=0
|
||||
[ $r -gt 255 ] && r=255
|
||||
[ $g -lt 0 ] && g=0
|
||||
[ $g -gt 255 ] && g=255
|
||||
[ $b -lt 0 ] && b=0
|
||||
[ $b -gt 255 ] && b=255
|
||||
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||
# Code block background uses the closest different color
|
||||
local code_bg="${closest_to_bg[0]}"
|
||||
|
||||
# If no different color available, create a subtle variant for code blocks
|
||||
if [ -z "$code_bg" ]; then
|
||||
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
|
||||
if [ $bg_brightness -gt 127 ]; then
|
||||
r=$((r - 10))
|
||||
g=$((g - 10))
|
||||
b=$((b - 10))
|
||||
else
|
||||
r=$((r + 15))
|
||||
g=$((g + 15))
|
||||
b=$((b + 15))
|
||||
fi
|
||||
[ $r -lt 0 ] && r=0
|
||||
[ $r -gt 255 ] && r=255
|
||||
[ $g -lt 0 ] && g=0
|
||||
[ $g -gt 255 ] && g=255
|
||||
[ $b -lt 0 ] && b=0
|
||||
[ $b -gt 255 ] && b=255
|
||||
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||
fi
|
||||
|
||||
# Find closest color to foreground for code block text
|
||||
local code_fg=""
|
||||
@@ -366,22 +357,6 @@ extract_theme_data() {
|
||||
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||
fi
|
||||
|
||||
# Set text colors for muted/faint based on contrast
|
||||
local text_muted_color="$border_color"
|
||||
local text_faint_color="$border_color"
|
||||
|
||||
# Validate border color contrast against background
|
||||
|
||||
# Represents a 3:1 WCAG contrast ratio
|
||||
local ideal_contrast_ratio=300
|
||||
|
||||
local border_contrast=$(calculate_contrast_ratio "$border_color" "$bg_color")
|
||||
if ! meets_contrast_threshold "$border_contrast" "$ideal_contrast_ratio"; then
|
||||
# Override text colors for readability, keep border color for visibility
|
||||
text_muted_color="$fg_color"
|
||||
text_faint_color="$fg_color"
|
||||
fi
|
||||
|
||||
# Get unique colors array (without bg/fg) sorted by frequency
|
||||
local -a unique_colors
|
||||
readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency)
|
||||
@@ -391,7 +366,7 @@ extract_theme_data() {
|
||||
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
|
||||
|
||||
# Extract fonts
|
||||
local monospace_font="JetBrainsMono Nerd Font"
|
||||
local monospace_font="CaskaydiaMono Nerd Font"
|
||||
local ui_font="Liberation Sans"
|
||||
|
||||
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
||||
@@ -446,8 +421,8 @@ extract_theme_data() {
|
||||
--text-mark: ${color_slots[7]};
|
||||
--interactive-accent: ${color_slots[8]};
|
||||
--blockquote-border: ${color_slots[9]};
|
||||
--text-muted: $text_muted_color; /* Use text-specific color for muted text */
|
||||
--text-faint: $text_faint_color; /* Use text-specific color for faint text */
|
||||
--text-muted: $border_color; /* Use border color for muted text */
|
||||
--text-faint: $border_color; /* Use border color for faint text */
|
||||
|
||||
/* Additional mappings */
|
||||
--text-accent: var(--interactive-accent);
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
|
||||
NEXT_THEME_DIR="$HOME/.config/omarchy/current/next-theme"
|
||||
COLORS_FILE="$NEXT_THEME_DIR/colors.toml"
|
||||
|
||||
# Convert hex color to decimal RGB (e.g., "#1e1e2e" -> "30,30,46")
|
||||
hex_to_rgb() {
|
||||
local hex="${1#\#}"
|
||||
printf "%d,%d,%d" "0x${hex:0:2}" "0x${hex:2:2}" "0x${hex:4:2}"
|
||||
}
|
||||
|
||||
# Only generate dynamic templates for themes with a colors.toml definition
|
||||
if [[ -f $COLORS_FILE ]]; then
|
||||
# Parse TOML using yq (treating it as YAML since the flat key=value structure is compatible)
|
||||
# We convert 'key = value' to 'key: value' to make it valid YAML, then use yq/jq to generate the replacement commands.
|
||||
sed_script=$(mktemp)
|
||||
|
||||
# Generate standard and _strip substitutions
|
||||
sed 's/=/:/' "$COLORS_FILE" | yq -r 'to_entries[] | "s|{{ \(.key) }}|\(.value)|g", "s|{{ \(.key)_strip }}|\(.value | sub("^#";""))|g"' > "$sed_script"
|
||||
|
||||
# Generate _rgb substitutions for hex colors
|
||||
while IFS='=' read -r key value; do
|
||||
key=$(echo "$key" | xargs)
|
||||
value=$(echo "$value" | xargs | tr -d '"')
|
||||
if [[ $value =~ ^# ]]; then
|
||||
rgb=$(hex_to_rgb "$value")
|
||||
echo "s|{{ ${key}_rgb }}|${rgb}|g" >> "$sed_script"
|
||||
fi
|
||||
done < "$COLORS_FILE"
|
||||
|
||||
shopt -s nullglob
|
||||
for tpl in "$TEMPLATES_DIR"/*.tpl; do
|
||||
filename=$(basename "$tpl" .tpl)
|
||||
output_path="$NEXT_THEME_DIR/$filename"
|
||||
|
||||
# Don't overwrite configs already exists in the output directory (copied from theme specific folder)
|
||||
if [[ ! -f $output_path ]]; then
|
||||
sed -f "$sed_script" "$tpl" > "$output_path"
|
||||
fi
|
||||
done
|
||||
|
||||
rm "$sed_script"
|
||||
fi
|
||||
@@ -4,10 +4,5 @@ if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
|
||||
touch ~/.config/alacritty/alacritty.toml
|
||||
fi
|
||||
|
||||
if pgrep -x kitty; then
|
||||
killall -SIGUSR1 kitty
|
||||
fi
|
||||
|
||||
if pgrep -x ghostty; then
|
||||
killall -SIGUSR2 ghostty
|
||||
fi
|
||||
killall -SIGUSR1 kitty
|
||||
killall -SIGUSR2 ghostty
|
||||
@@ -7,6 +7,8 @@
|
||||
EDITOR_CMD="${1:-code}"
|
||||
SETTINGS_PATH="${2:-$HOME/.config/Code/User/settings.json}"
|
||||
SKIP_FLAG="${3:-$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes}"
|
||||
EDITOR_NAME="${4:-VS Code}"
|
||||
|
||||
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
|
||||
|
||||
if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
||||
@@ -14,7 +16,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
||||
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
|
||||
extension=$(jq -r '.extension' "$VS_CODE_THEME")
|
||||
|
||||
# Install theme extension
|
||||
# Install $EDITOR_NAME theme extension
|
||||
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
|
||||
"$EDITOR_CMD" --install-extension "$extension" >/dev/null
|
||||
fi
|
||||
@@ -37,7 +39,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
||||
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
|
||||
"$SETTINGS_PATH"
|
||||
else
|
||||
# Remove theme from settings.json when the theme doesn't have editor support
|
||||
# Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support
|
||||
if [[ -f "$SETTINGS_PATH" ]]; then
|
||||
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH"
|
||||
fi
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Call the VSCode theme setter with VSCodium-specific parameters
|
||||
omarchy-theme-set-vscode codium "$HOME/.config/VSCodium/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-codium-theme-changes"
|
||||
@@ -1,8 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
for dir in ~/.config/omarchy/themes/*/; do
|
||||
if [[ -d $dir ]] && [[ ! -L "${dir%/}" ]] && [[ -d "$dir/.git" ]]; then
|
||||
echo "Updating: $(basename "$dir")"
|
||||
git -C "$dir" pull
|
||||
fi
|
||||
[ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
|
||||
done
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$#" -ne 4 ]; then
|
||||
echo -e "\e[32mLet's create a TUI shortcut you can start with the app launcher.\n\e[0m"
|
||||
APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI")
|
||||
APP_EXEC=$(gum input --prompt "Launch Command> " --placeholder "lazydocker or bash -c 'dust; read -n 1 -s'")
|
||||
WINDOW_STYLE=$(gum choose --header "Window style" float tile)
|
||||
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG or SVG!)")
|
||||
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
|
||||
else
|
||||
APP_NAME="$1"
|
||||
APP_EXEC="$2"
|
||||
@@ -45,7 +43,7 @@ cat >"$DESKTOP_FILE" <<EOF
|
||||
Version=1.0
|
||||
Name=$APP_NAME
|
||||
Comment=$APP_NAME
|
||||
Exec=xdg-terminal-exec --app-id=$APP_CLASS -e $APP_EXEC
|
||||
Exec=\$TERMINAL --class=$APP_CLASS -e $APP_EXEC
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=$ICON_PATH
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
ICON_DIR="$HOME/.local/share/applications/icons"
|
||||
DESKTOP_DIR="$HOME/.local/share/applications/"
|
||||
|
||||
if [ "$#" -eq 0 ]; then
|
||||
# Find all TUIs
|
||||
while IFS= read -r -d '' file; do
|
||||
if grep -qE '^Exec=.*(\$TERMINAL|xdg-terminal-exec).*-e' "$file"; then
|
||||
if grep -q '^Exec=.*$TERMINAL.*-e' "$file"; then
|
||||
TUIS+=("$(basename "${file%.desktop}")")
|
||||
fi
|
||||
done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0)
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
|
||||
set -e
|
||||
|
||||
trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR
|
||||
|
||||
if [[ $1 == "-y" ]] || omarchy-update-confirm; then
|
||||
omarchy-snapshot create || [ $? -eq 127 ]
|
||||
omarchy-update-git
|
||||
omarchy-update-perform
|
||||
fi
|
||||
omarchy-snapshot create || [ $? -eq 127 ]
|
||||
omarchy-update-git
|
||||
omarchy-update-perform
|
||||
|
||||
@@ -2,4 +2,3 @@
|
||||
|
||||
# Ensure Waybar icon offering the available update is removed
|
||||
pkill -RTMIN+7 waybar
|
||||
exit 0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
gum style --border normal --border-foreground 6 --padding "1 2" \
|
||||
"Ready to update?" \
|
||||
"" \
|
||||
"• You cannot stop the update once you start!" \
|
||||
"• Make sure you're connected to power or have a full battery" \
|
||||
"" \
|
||||
"What's new: https://github.com/basecamp/omarchy/releases"
|
||||
|
||||
echo
|
||||
|
||||
if ! gum confirm "Continue with update?"; then
|
||||
echo "Update cancelled"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,8 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo -e "\e[32mUpdate Omarchy\e[0m"
|
||||
|
||||
git -C $OMARCHY_PATH pull --autostash
|
||||
git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge
|
||||
git -C $OMARCHY_PATH diff --check || git -C $OMARCHY_PATH reset --merge
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Ensure we have the omarchy-keyring and it's populated
|
||||
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
|
||||
sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org
|
||||
sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571
|
||||
|
||||
# This is generally not a good idea, but this is a special case because we're going to be updating
|
||||
# the full set of packages in omarchy-update-system-pkgs right after this (and it needs latest keyring)!
|
||||
sudo pacman -Sy
|
||||
omarchy-pkg-add omarchy-keyring
|
||||
|
||||
sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571
|
||||
fi
|
||||
@@ -2,17 +2,8 @@
|
||||
|
||||
set -e
|
||||
|
||||
# Ensure screensaver/sleep doesn't set in during updates
|
||||
hyprctl dispatch tagwindow +noidle &> /dev/null || true
|
||||
|
||||
# Perform all update steps
|
||||
omarchy-update-time
|
||||
omarchy-update-keyring
|
||||
omarchy-update-available-reset
|
||||
omarchy-update-system-pkgs
|
||||
omarchy-migrate
|
||||
omarchy-hook post-update
|
||||
omarchy-update-restart
|
||||
|
||||
# Re-enable screensaver/sleep after updates
|
||||
hyprctl dispatch tagwindow -- -noidle &> /dev/null || true
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $2}')" ]; then
|
||||
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-cmd-reboot
|
||||
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-state clear re*-required && sudo reboot now
|
||||
|
||||
elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then
|
||||
gum confirm "Updates require reboot. Ready?" && omarchy-cmd-reboot
|
||||
gum confirm "Updates require reboot. Ready?" && omarchy-state clear re*-required && sudo reboot now
|
||||
fi
|
||||
|
||||
for file in "$HOME"/.local/state/omarchy/restart-*-required; do
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
# Used in package emergencies if a bad package has been pushed and we can't revoke.
|
||||
# Requires manually installing the good package using sudo pacman -U <url>
|
||||
ignored_packages=$(omarchy-pkg-ignored)
|
||||
|
||||
echo -e "\e[32m\nUpdate system packages\e[0m"
|
||||
sudo pacman -Syyu --noconfirm
|
||||
[[ -n $ignored_packages ]] && echo "sudo pacman -Syu --noconfirm --ignore \"$ignored_packages\""
|
||||
sudo pacman -Syu --noconfirm --ignore "$ignored_packages"
|
||||
|
||||
# Update AUR packages if any are installed
|
||||
if pacman -Qem >/dev/null; then
|
||||
if omarchy-pkg-aur-accessible; then
|
||||
echo -e "\e[32m\nUpdate AUR packages\e[0m"
|
||||
yay -Sua --noconfirm
|
||||
[[ -n $ignored_packages ]] && echo "yay -Sua --noconfirm --ignore \"$ignored_packages\""
|
||||
yay -Sua --noconfirm --ignore "$ignored_packages"
|
||||
echo
|
||||
else
|
||||
echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m"
|
||||
@@ -17,7 +21,7 @@ if pacman -Qem >/dev/null; then
|
||||
fi
|
||||
fi
|
||||
|
||||
orphans=$(pacman -Qtdq || true)
|
||||
orphans=$(pacman -Qtdq)
|
||||
if [[ -n $orphans ]]; then
|
||||
echo -e "\e[32m\nRemove orphan system packages\e[0m"
|
||||
for pkg in $orphans; do
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Updating time..."
|
||||
sudo systemctl restart systemd-timesyncd
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# No-op now that omarchy-update-perform is responsible for idle management.
|
||||
# But this file can't be removed since it was referenced in old omarchy-update files,
|
||||
# which would fail if this file is missing.
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if grep -q "https://stable-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
|
||||
mirror="stable"
|
||||
elif grep -q "https://mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
|
||||
mirror="edge"
|
||||
else
|
||||
mirror="unknown"
|
||||
fi
|
||||
|
||||
if grep -q "https://pkgs.omarchy.org/stable/" /etc/pacman.conf; then
|
||||
pkgs="stable"
|
||||
elif grep -q "https://pkgs.omarchy.org/edge/" /etc/pacman.conf; then
|
||||
pkgs="edge"
|
||||
else
|
||||
pkgs="unknown"
|
||||
fi
|
||||
|
||||
if [[ $mirror == $pkgs ]]; then
|
||||
echo $mirror
|
||||
else
|
||||
echo "$mirror / $pkgs"
|
||||
fi
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
date -d "$(grep upgraded /var/log/pacman.log | tail -1 | sed -E 's/\[([^]]+)\].*/\1/')" "+%A, %B %d %Y at %H:%M"
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$#" -lt 3 ]; then
|
||||
echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m"
|
||||
APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app")
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
ICON_DIR="$HOME/.local/share/applications/icons"
|
||||
DESKTOP_DIR="$HOME/.local/share/applications/"
|
||||
|
||||
@@ -32,7 +30,7 @@ else
|
||||
fi
|
||||
|
||||
if [[ ${#APP_NAMES[@]} -eq 0 ]]; then
|
||||
echo "You must select at least one web app to remove."
|
||||
echo "You must provide web app names."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -254,25 +254,6 @@ remove_windows() {
|
||||
echo "Windows VM removal completed!"
|
||||
}
|
||||
|
||||
wait_for_rdp_ready() {
|
||||
local WIN_USER="$1"
|
||||
local WIN_PASS="$2"
|
||||
local TIMEOUT=240
|
||||
local SECONDS=0
|
||||
|
||||
echo "Waiting for Windows VM to be ready..."
|
||||
|
||||
while ! timeout 5s xfreerdp3 /auth-only /cert:ignore /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 &>/dev/null; do
|
||||
sleep 2
|
||||
if [ $SECONDS -gt $TIMEOUT ]; then
|
||||
echo "❌ Timeout waiting for RDP!"
|
||||
echo " The VM might still be installing Windows."
|
||||
echo " Check progress at: http://127.0.0.1:8006"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
launch_windows() {
|
||||
KEEP_ALIVE=false
|
||||
if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then
|
||||
@@ -285,14 +266,6 @@ launch_windows() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract credentials from compose file
|
||||
WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/')
|
||||
WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/')
|
||||
|
||||
# Use defaults if not found
|
||||
[ -z "$WIN_USER" ] && WIN_USER="docker"
|
||||
[ -z "$WIN_PASS" ] && WIN_PASS="admin"
|
||||
|
||||
# Check if container is already running
|
||||
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
|
||||
|
||||
@@ -300,7 +273,7 @@ launch_windows() {
|
||||
echo "Starting Windows VM..."
|
||||
|
||||
# Send desktop notification
|
||||
notify-send " Starting Windows VM" " This can take 15-30 seconds" -t 15000
|
||||
notify-send "Windows VM" "Starting Windows VM, this may take a moment..."
|
||||
|
||||
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
|
||||
echo "❌ Failed to start Windows VM!"
|
||||
@@ -309,12 +282,32 @@ launch_windows() {
|
||||
notify-send -u critical "Windows VM" "Failed to start Windows VM"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Wait for RDP to be ready
|
||||
echo "Waiting for Windows VM to be ready..."
|
||||
WAIT_COUNT=0
|
||||
while ! nc -z 127.0.0.1 3389 2>/dev/null; do
|
||||
sleep 2
|
||||
WAIT_COUNT=$((WAIT_COUNT + 1))
|
||||
if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout
|
||||
echo "❌ Timeout waiting for RDP!"
|
||||
echo " The VM might still be installing Windows."
|
||||
echo " Check progress at: http://127.0.0.1:8006"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Give it a moment more to fully initialize
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
if ! wait_for_rdp_ready "$WIN_USER" "$WIN_PASS"; then
|
||||
notify-send -u critical "Windows VM" "Did not come alive in time."
|
||||
exit 1
|
||||
fi
|
||||
# Extract credentials from compose file
|
||||
WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/')
|
||||
WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/')
|
||||
|
||||
# Use defaults if not found
|
||||
[ -z "$WIN_USER" ] && WIN_USER="docker"
|
||||
[ -z "$WIN_PASS" ] && WIN_PASS="admin"
|
||||
|
||||
# Build the connection info
|
||||
if [ "$KEEP_ALIVE" = true ]; then
|
||||
@@ -334,7 +327,7 @@ To stop: omarchy-windows-vm stop"
|
||||
"$LIFECYCLE"
|
||||
|
||||
# Detect display scale from Hyprland
|
||||
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[] | select (.focused == true) | .scale')
|
||||
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale')
|
||||
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
|
||||
|
||||
RDP_SCALE=""
|
||||
@@ -346,7 +339,7 @@ To stop: omarchy-windows-vm stop"
|
||||
# If scale is less than 130%, don't set any scale (use default 100)
|
||||
|
||||
# Connect with RDP in fullscreen (auto-detects resolution)
|
||||
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
|
||||
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 +f -grab-keyboard /cert:ignore /title:"Windows VM - Omarchy" /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
|
||||
|
||||
# After RDP closes, stop the container unless --keep-alive was specified
|
||||
if [ "$KEEP_ALIVE" = false ]; then
|
||||
|
||||
@@ -4,9 +4,9 @@ general.import = [ "~/.config/omarchy/current/theme/alacritty.toml" ]
|
||||
TERM = "xterm-256color"
|
||||
|
||||
[font]
|
||||
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
|
||||
bold = { family = "JetBrainsMono Nerd Font", style = "Bold" }
|
||||
italic = { family = "JetBrainsMono Nerd Font", style = "Italic" }
|
||||
normal = { family = "CaskaydiaMono Nerd Font", style = "Regular" }
|
||||
bold = { family = "CaskaydiaMono Nerd Font", style = "Bold" }
|
||||
italic = { family = "CaskaydiaMono Nerd Font", style = "Italic" }
|
||||
size = 9
|
||||
|
||||
[window]
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
--ozone-platform=wayland
|
||||
--ozone-platform-hint=wayland
|
||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
||||
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
|
||||
--disable-features=WaylandWpColorManagerV1
|
||||
|
||||
@@ -74,12 +74,6 @@
|
||||
"keyColor": "blue",
|
||||
"text": "branch=$(omarchy-version-branch); echo \"$branch\""
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue",
|
||||
"text": "channel=$(omarchy-version-channel); echo \"$channel\""
|
||||
},
|
||||
{
|
||||
"type": "kernel",
|
||||
"key": "│ ├",
|
||||
@@ -128,25 +122,19 @@
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌────────────────Age / Uptime / Update───────────────┐"
|
||||
"format": "\u001b[90m┌────────────────────Uptime / Age────────────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": " OS Age",
|
||||
"keyColor": "magenta",
|
||||
"text": "echo $(( ($(date +%s) - $(stat -c %W /)) / 86400 )) days"
|
||||
"text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
|
||||
},
|
||||
{
|
||||
"type": "uptime",
|
||||
"key": " Uptime",
|
||||
"keyColor": "magenta"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": " Update",
|
||||
"keyColor": "magenta",
|
||||
"text": "updated=$(omarchy-version-pkgs); echo \"$updated\""
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
TriggerKey=
|
||||
PastePrimaryKey=
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user