Compare commits
220 Commits
super-copy
...
v3.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15c22d5e75 | ||
|
|
1776981ebf | ||
|
|
cff15363c9 | ||
|
|
d2efdcede4 | ||
|
|
be24e38ea2 | ||
|
|
717a015537 | ||
|
|
a37495e3d1 | ||
|
|
7882893a23 | ||
|
|
7437c73113 | ||
|
|
413d292f2a | ||
|
|
50e68f466e | ||
|
|
d106cd9284 | ||
|
|
62b6802641 | ||
|
|
4f2f7b41e7 | ||
|
|
74473f5650 | ||
|
|
b6eb76d3ea | ||
|
|
ba2018087c | ||
|
|
9f00d5a3a0 | ||
|
|
260d586343 | ||
|
|
027825cbad | ||
|
|
d29e5777e0 | ||
|
|
5d756de561 | ||
|
|
6529472cad | ||
|
|
2310569eae | ||
|
|
70f69c7fc6 | ||
|
|
c7f851cc57 | ||
|
|
56f1c82b7d | ||
|
|
83beedabab | ||
|
|
76209ee33e | ||
|
|
7c7d472e39 | ||
|
|
9b4a42cc03 | ||
|
|
385020cbb0 | ||
|
|
6fbb3d4464 | ||
|
|
5171475836 | ||
|
|
9ddcfbe466 | ||
|
|
9d7c9e7344 | ||
|
|
101c29f3b1 | ||
|
|
c84d98a80b | ||
|
|
88011f5d11 | ||
|
|
832ca69ba2 | ||
|
|
786ae66154 | ||
|
|
7dca096807 | ||
|
|
2fa7d64d77 | ||
|
|
83d4349ea1 | ||
|
|
bddccf30cb | ||
|
|
910c23f539 | ||
|
|
33baf59cef | ||
|
|
e9c40445dd | ||
|
|
e2b56720ac | ||
|
|
54bcc68490 | ||
|
|
c3b86c602e | ||
|
|
61e0fa27e2 | ||
|
|
ea985fd471 | ||
|
|
dfa689f4ea | ||
|
|
530577e8fe | ||
|
|
42a5b3bf22 | ||
|
|
f0f319ed92 | ||
|
|
38f5a00ad6 | ||
|
|
12f9beab86 | ||
|
|
572bbf823b | ||
|
|
f297ad1e99 | ||
|
|
c4f93787d6 | ||
|
|
730cba2e2a | ||
|
|
d70d84af71 | ||
|
|
d11d30ac31 | ||
|
|
ef52bb5f93 | ||
|
|
73036988ed | ||
|
|
6ee6dbaf2a | ||
|
|
be697860aa | ||
|
|
f64d73c24c | ||
|
|
880e779cf2 | ||
|
|
a1e80e1cab | ||
|
|
bd761379a7 | ||
|
|
cc2523ff89 | ||
|
|
d421b63873 | ||
|
|
5cf56f31e6 | ||
|
|
636416bbd2 | ||
|
|
40312523e3 | ||
|
|
735fc2d263 | ||
|
|
dc00227f0a | ||
|
|
5028e241c5 | ||
|
|
fc4cf86487 | ||
|
|
3bf7c15906 | ||
|
|
bc99b8ce96 | ||
|
|
53336e21b1 | ||
|
|
24e76a3b90 | ||
|
|
63e3b3e32f | ||
|
|
6790cfc1f5 | ||
|
|
920b1a983f | ||
|
|
80907fcf4f | ||
|
|
c401c877a3 | ||
|
|
e03193eea4 | ||
|
|
c24c1f1c5a | ||
|
|
ef2bfb37ad | ||
|
|
ea30329522 | ||
|
|
9ea990b88c | ||
|
|
5a2a49c999 | ||
|
|
5a10222dc9 | ||
|
|
cad71169c2 | ||
|
|
0588cc8e5b | ||
|
|
0b1875e2b9 | ||
|
|
648551f98a | ||
|
|
1a1c736936 | ||
|
|
a874f6f8a6 | ||
|
|
4174ff7b13 | ||
|
|
f607ba51ff | ||
|
|
06827c8ee6 | ||
|
|
dcac313bb2 | ||
|
|
48feb5d404 | ||
|
|
a8a6cde199 | ||
|
|
ccde212644 | ||
|
|
ea38e43fe6 | ||
|
|
a672f6350a | ||
|
|
2789454183 | ||
|
|
a7a075d898 | ||
|
|
c6b598ba91 | ||
|
|
ad3bc03653 | ||
|
|
96eed35b51 | ||
|
|
f81f9dd181 | ||
|
|
d50e4a6814 | ||
|
|
6b1b73b87c | ||
|
|
94aac3777c | ||
|
|
8bc0980bc5 | ||
|
|
9c145b91d7 | ||
|
|
dff61f0748 | ||
|
|
fecf83d07b | ||
|
|
f0bba6c6e8 | ||
|
|
f6330054fd | ||
|
|
6247712205 | ||
|
|
44231e43b7 | ||
|
|
ac0ffa42dd | ||
|
|
e080f62de0 | ||
|
|
c0dc0a0e47 | ||
|
|
351d8ac938 | ||
|
|
4100ebba47 | ||
|
|
a67391b3ea | ||
|
|
06668cf20f | ||
|
|
385f846fff | ||
|
|
d3048b56bd | ||
|
|
1a4d1d675c | ||
|
|
d06708d56e | ||
|
|
2d788dec21 | ||
|
|
de1e47d2f7 | ||
|
|
1eecf0b8e7 | ||
|
|
bd52f8ae52 | ||
|
|
d625178a9b | ||
|
|
bb943ae24f | ||
|
|
e4d24ca637 | ||
|
|
fd9a6f48b3 | ||
|
|
1d2d6740dd | ||
|
|
102f952c55 | ||
|
|
3d335a5278 | ||
|
|
fcae2e9809 | ||
|
|
671194dfa9 | ||
|
|
ab3b65a2b1 | ||
|
|
7c273f4944 | ||
|
|
3b8fce1c2d | ||
|
|
154cd066ee | ||
|
|
90536dff3f | ||
|
|
9c8dad9054 | ||
|
|
491e980dd9 | ||
|
|
313dcd4468 | ||
|
|
d615d2f9b5 | ||
|
|
800962b18f | ||
|
|
87d7bd966b | ||
|
|
ff3d65993e | ||
|
|
5b8ee60cc4 | ||
|
|
80b37f229b | ||
|
|
5057101bbd | ||
|
|
c6627f0e67 | ||
|
|
9783b4b782 | ||
|
|
2213589e6e | ||
|
|
10e8fe581b | ||
|
|
7e7b37095f | ||
|
|
6c2c85d2b9 | ||
|
|
9d8d4bc5c1 | ||
|
|
00b3983f8a | ||
|
|
fa029c54fb | ||
|
|
56e690b861 | ||
|
|
cac8b03821 | ||
|
|
adad20b6a1 | ||
|
|
55604e43f5 | ||
|
|
9f8db77a24 | ||
|
|
a20835f835 | ||
|
|
c70e018571 | ||
|
|
ab7feeac6d | ||
|
|
7ef30f69b8 | ||
|
|
ebcb489621 | ||
|
|
d72e948e03 | ||
|
|
6cab5d3e14 | ||
|
|
0df4dc1a1d | ||
|
|
35cc9937ff | ||
|
|
268b48644c | ||
|
|
360a2ed943 | ||
|
|
01a1e43b25 | ||
|
|
04fa3fd32e | ||
|
|
a42ba3dcbf | ||
|
|
63aff7cd71 | ||
|
|
a6aec518a5 | ||
|
|
a7a6ac1d21 | ||
|
|
af564ed07d | ||
|
|
eb74a97a0c | ||
|
|
883cb66f99 | ||
|
|
2c74696735 | ||
|
|
a54044ea30 | ||
|
|
651025e3e8 | ||
|
|
44de66dd2a | ||
|
|
6b3fc34361 | ||
|
|
cc1acc10b8 | ||
|
|
b063c7f5f3 | ||
|
|
8871c829c5 | ||
|
|
41b09c29f8 | ||
|
|
d7d8f525e3 | ||
|
|
a544e78107 | ||
|
|
c541faff7d | ||
|
|
8caf6dbe2c | ||
|
|
779fd5a9f5 | ||
|
|
d3f70a0c22 | ||
|
|
39541b4876 | ||
|
|
1e859d37cb |
@@ -1,10 +1,9 @@
|
|||||||
# Omarchy
|
# Omarchy
|
||||||
|
|
||||||
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.
|
Omarchy is a beautiful, modern & opinionated Linux distribution by DHH.
|
||||||
|
|
||||||
Read more at [omarchy.org](https://omarchy.org).
|
Read more at [omarchy.org](https://omarchy.org).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
||||||
|
|
||||||
|
|||||||
2
applications/hidden/fcitx5-wayland-launcher.desktop
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Hidden=true
|
||||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 9.4 KiB |
BIN
applications/icons/windows.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
@@ -4,33 +4,18 @@
|
|||||||
|
|
||||||
BATTERY_THRESHOLD=10
|
BATTERY_THRESHOLD=10
|
||||||
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
||||||
|
BATTERY_LEVEL=$(omarchy-battery-remaining)
|
||||||
get_battery_percentage() {
|
BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}')
|
||||||
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() {
|
send_notification() {
|
||||||
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
||||||
}
|
}
|
||||||
|
|
||||||
BATTERY_LEVEL=$(get_battery_percentage)
|
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
||||||
BATTERY_STATE=$(get_battery_state)
|
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
||||||
|
send_notification $BATTERY_LEVEL
|
||||||
if [[ "$BATTERY_STATE" == "discharging" && "$BATTERY_LEVEL" -le "$BATTERY_THRESHOLD" ]]; then
|
touch $NOTIFICATION_FLAG
|
||||||
if [[ ! -f "$NOTIFICATION_FLAG" ]]; then
|
|
||||||
send_notification "$BATTERY_LEVEL"
|
|
||||||
touch "$NOTIFICATION_FLAG"
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
rm -f "$NOTIFICATION_FLAG"
|
rm -f $NOTIFICATION_FLAG
|
||||||
fi
|
fi
|
||||||
|
|||||||
11
bin/omarchy-battery-remaining
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/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
|
||||||
|
}'
|
||||||
@@ -3,5 +3,12 @@
|
|||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
|
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
|
||||||
else
|
else
|
||||||
sudo asdcontrol $(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1) -- "$1"
|
DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
|
||||||
|
sudo asdcontrol "$DEVICE" -- "$1" >/dev/null
|
||||||
|
VALUE="$(sudo asdcontrol "$DEVICE" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
|
||||||
|
swayosd-client \
|
||||||
|
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
|
||||||
|
--custom-icon display-brightness \
|
||||||
|
--custom-progress "$(awk -v v="$VALUE" 'BEGIN{printf "%.2f", v/60000}')" \
|
||||||
|
--custom-progress-text "$(( VALUE * 100 / 60000 ))%"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -23,7 +23,13 @@ fi
|
|||||||
|
|
||||||
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
|
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
|
||||||
next_sink_name=$(echo "$next_sink" | jq -r '.name')
|
next_sink_name=$(echo "$next_sink" | jq -r '.name')
|
||||||
|
|
||||||
next_sink_description=$(echo "$next_sink" | jq -r '.description')
|
next_sink_description=$(echo "$next_sink" | jq -r '.description')
|
||||||
|
if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then
|
||||||
|
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
|
||||||
|
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
|
||||||
|
fi
|
||||||
|
|
||||||
next_sink_volume=$(echo "$next_sink" | jq -r \
|
next_sink_volume=$(echo "$next_sink" | jq -r \
|
||||||
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
|
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
|
||||||
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
|
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then
|
|||||||
rm -f "$FIRST_RUN_MODE"
|
rm -f "$FIRST_RUN_MODE"
|
||||||
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
|
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
|
||||||
|
bash "$OMARCHY_PATH/install/first-run/cleanup-reboot-sudoers.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
||||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
||||||
|
|||||||
@@ -8,31 +8,82 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Selects region or output
|
SCOPE=""
|
||||||
SCOPE="$1"
|
AUDIO="false"
|
||||||
|
WEBCAM="false"
|
||||||
|
|
||||||
# Selects audio inclusion or not
|
for arg in "$@"; do
|
||||||
AUDIO=$([[ $2 == "audio" ]] && echo "--audio")
|
case "$arg" in
|
||||||
|
--with-audio) AUDIO="true" ;;
|
||||||
|
--with-webcam) WEBCAM="true" ;;
|
||||||
|
output|region) SCOPE="$arg" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
cleanup_webcam() {
|
||||||
|
pkill -f "WebcamOverlay" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
start_webcam_overlay() {
|
||||||
|
cleanup_webcam
|
||||||
|
|
||||||
|
# Get monitor scale
|
||||||
|
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
|
||||||
|
|
||||||
|
# Target width (base 360px, scaled to monitor)
|
||||||
|
local target_width=$(awk "BEGIN {printf \"%.0f\", 360 * $scale}")
|
||||||
|
|
||||||
|
# Try preferred 16:9 resolutions in order, use first available
|
||||||
|
local preferred_resolutions=("640x360" "1280x720" "1920x1080")
|
||||||
|
local video_size_arg=""
|
||||||
|
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null)
|
||||||
|
|
||||||
|
for resolution in "${preferred_resolutions[@]}"; do
|
||||||
|
if echo "$available_formats" | grep -q "$resolution"; then
|
||||||
|
video_size_arg="-video_size $resolution"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \
|
||||||
|
-vf "scale=${target_width}:-1" \
|
||||||
|
-window_title "WebcamOverlay" \
|
||||||
|
-noborder \
|
||||||
|
-fflags nobuffer -flags low_delay \
|
||||||
|
-probesize 32 -analyzeduration 0 \
|
||||||
|
-loglevel quiet &
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
start_screenrecording() {
|
start_screenrecording() {
|
||||||
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
||||||
|
local audio_args=""
|
||||||
|
|
||||||
if lspci | grep -qi 'nvidia'; then
|
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
||||||
wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" &
|
[[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input"
|
||||||
else
|
|
||||||
wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" &
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
gpu-screen-recorder -w "$@" -f 60 -c mp4 -o "$filename" $audio_args &
|
||||||
toggle_screenrecording_indicator
|
toggle_screenrecording_indicator
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_screenrecording() {
|
stop_screenrecording() {
|
||||||
pkill -x wl-screenrec
|
pkill -SIGINT -f "gpu-screen-recorder" # SIGINT required to save video properly
|
||||||
pkill -x wf-recorder
|
|
||||||
|
|
||||||
|
# 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
|
||||||
|
sleep 0.1
|
||||||
|
count=$((count + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
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
|
||||||
|
cleanup_webcam
|
||||||
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
||||||
|
fi
|
||||||
sleep 0.2 # ensures the process is actually dead before we check
|
|
||||||
toggle_screenrecording_indicator
|
toggle_screenrecording_indicator
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,15 +92,51 @@ toggle_screenrecording_indicator() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
screenrecording_active() {
|
screenrecording_active() {
|
||||||
pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null
|
pgrep -f "gpu-screen-recorder" >/dev/null || pgrep -x slurp >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
if screenrecording_active; then
|
if screenrecording_active; then
|
||||||
stop_screenrecording
|
if pgrep -x slurp >/dev/null; then
|
||||||
elif [[ "$SCOPE" == "output" ]]; then
|
pkill -x slurp 2>/dev/null
|
||||||
output=$(slurp -o) || exit 1
|
elif pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "gpu-screen-recorder" >/dev/null; then
|
||||||
start_screenrecording -g "$output"
|
cleanup_webcam
|
||||||
else
|
else
|
||||||
region=$(slurp) || exit 1
|
stop_screenrecording
|
||||||
start_screenrecording -g "$region"
|
fi
|
||||||
|
elif [[ "$SCOPE" == "output" ]]; then
|
||||||
|
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
|
||||||
|
|
||||||
|
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
|
||||||
|
[[ "$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
|
fi
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ exit_screensaver() {
|
|||||||
|
|
||||||
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
|
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
|
||||||
|
|
||||||
hyprctl keyword cursor:invisible true
|
hyprctl keyword cursor:invisible true &>/dev/null
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
|
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 \
|
tte -i ~/.config/omarchy/branding/screensaver.txt \
|
||||||
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 1)) --anchor-canvas c --anchor-text c \
|
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \
|
||||||
"$effect" &
|
"$effect" &
|
||||||
|
|
||||||
while pgrep -x tte >/dev/null; do
|
while pgrep -x tte >/dev/null; do
|
||||||
|
|||||||
@@ -8,10 +8,76 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pkill slurp || hyprshot -m ${1:-region} --raw |
|
pkill slurp && exit 0
|
||||||
|
|
||||||
|
MODE="${1:-smart}"
|
||||||
|
PROCESSING="${2:-slurp}"
|
||||||
|
|
||||||
|
get_rectangles() {
|
||||||
|
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
||||||
|
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
|
||||||
|
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Select based on mode
|
||||||
|
case "$MODE" in
|
||||||
|
region)
|
||||||
|
wayfreeze & PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(slurp 2>/dev/null)
|
||||||
|
kill $PID 2>/dev/null
|
||||||
|
;;
|
||||||
|
windows)
|
||||||
|
wayfreeze & PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
|
||||||
|
kill $PID 2>/dev/null
|
||||||
|
;;
|
||||||
|
fullscreen)
|
||||||
|
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
|
||||||
|
;;
|
||||||
|
smart|*)
|
||||||
|
RECTS=$(get_rectangles)
|
||||||
|
wayfreeze & PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
|
||||||
|
kill $PID 2>/dev/null
|
||||||
|
|
||||||
|
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
|
||||||
|
# window or output it was inside of to prevent accidental 2px snapshots
|
||||||
|
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
|
||||||
|
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
|
||||||
|
click_x="${BASH_REMATCH[1]}"
|
||||||
|
click_y="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
|
while IFS= read -r rect; do
|
||||||
|
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
|
||||||
|
rect_x="${BASH_REMATCH[1]}"
|
||||||
|
rect_y="${BASH_REMATCH[2]}"
|
||||||
|
rect_width="${BASH_REMATCH[3]}"
|
||||||
|
rect_height="${BASH_REMATCH[4]}"
|
||||||
|
|
||||||
|
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
|
||||||
|
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$RECTS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ -z "$SELECTION" ] && exit 0
|
||||||
|
|
||||||
|
if [[ $PROCESSING == "slurp" ]]; then
|
||||||
|
grim -g "$SELECTION" - |
|
||||||
satty --filename - \
|
satty --filename - \
|
||||||
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
|
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
|
||||||
--early-exit \
|
--early-exit \
|
||||||
--actions-on-enter save-to-clipboard \
|
--actions-on-enter save-to-clipboard \
|
||||||
--save-after-copy \
|
--save-after-copy \
|
||||||
--copy-command 'wl-copy'
|
--copy-command 'wl-copy'
|
||||||
|
else
|
||||||
|
grim -g "$SELECTION" - | wl-copy
|
||||||
|
fi
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Go from current active terminal to its child shell process and run cwd there
|
# Go from current active terminal to its child shell process and run cwd there
|
||||||
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
|
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
|
||||||
shell_pid=$(pgrep -P "$terminal_pid" | head -n1)
|
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
|
||||||
|
|
||||||
if [[ -n $shell_pid ]]; then
|
if [[ -n $shell_pid ]]; then
|
||||||
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)
|
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
notify-send " Updating time and timezone..."
|
|
||||||
sudo systemctl restart systemd-timesyncd
|
|
||||||
sudo tzupdate
|
|
||||||
new_timezone=$(timedatectl show -p Timezone --value)
|
|
||||||
omarchy-restart-waybar
|
|
||||||
notify-send " Time updated and timezone set to $new_timezone"
|
|
||||||
61
bin/omarchy-debug
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
LOG_FILE="/tmp/omarchy-debug.log"
|
||||||
|
|
||||||
|
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
|
||||||
|
=========================================
|
||||||
|
$(sudo dmesg)
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
@@ -28,6 +28,8 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
|
|||||||
omarchy-restart-waybar
|
omarchy-restart-waybar
|
||||||
omarchy-restart-swayosd
|
omarchy-restart-swayosd
|
||||||
omarchy-restart-walker
|
omarchy-restart-walker
|
||||||
|
|
||||||
|
omarchy-hook font-set "$font_name"
|
||||||
else
|
else
|
||||||
echo "Font '$font_name' not found."
|
echo "Font '$font_name' not found."
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
16
bin/omarchy-hook
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ $# -lt 1 ]]; then
|
||||||
|
echo "Usage: omarchy-hook [name] [args...]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
HOOK=$1
|
||||||
|
HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [[ -f $HOOK_PATH ]]; then
|
||||||
|
bash "$HOOK_PATH" "$@"
|
||||||
|
fi
|
||||||
10
bin/omarchy-hyprland-workspace-toggle-gaps
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/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, border:true"
|
||||||
|
else \
|
||||||
|
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, border:false"
|
||||||
|
fi
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB")
|
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
|
||||||
|
|
||||||
if [[ "$#" -eq 0 ]]; then
|
if [[ "$#" -eq 0 ]]; then
|
||||||
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
|
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
|
||||||
@@ -16,6 +16,7 @@ if [[ -n "$choices" ]]; then
|
|||||||
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 ;;
|
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 ;;
|
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 ;;
|
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 ;;
|
||||||
|
MSSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:1433:1433" --name mssql -e MSSQL_PID=Developer -e ACCEPT_EULA=Y -e "MSSQL_SA_PASSWORD=@dmin123" mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -8,12 +8,14 @@ fi
|
|||||||
package="$1"
|
package="$1"
|
||||||
|
|
||||||
# Install package
|
# Install package
|
||||||
omarchy-pkg-add $package
|
if omarchy-pkg-add $package; then
|
||||||
|
|
||||||
# Set as default terminal
|
# Set as default terminal
|
||||||
echo "Setting $package as new default terminal..."
|
echo "Setting $package as new default terminal..."
|
||||||
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
|
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
|
||||||
|
|
||||||
# Relaunch is needed for new default to take effect
|
# Restart is needed for new default to take effect
|
||||||
echo
|
echo
|
||||||
gum confirm "Relaunch Hyprland to use new terminal?" && uwsm stop
|
gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall
|
||||||
|
else
|
||||||
|
echo "Failed to install $package"
|
||||||
|
fi
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
echo "Installing VSCode..."
|
echo "Installing VSCode..."
|
||||||
omarchy-pkg-add visual-studio-code-bin
|
omarchy-pkg-add visual-studio-code-bin
|
||||||
|
|
||||||
mkdir -p ~/.vscode
|
mkdir -p ~/.vscode ~/.config/Code/User
|
||||||
|
|
||||||
cat > ~/.vscode/argv.json << 'EOF'
|
cat > ~/.vscode/argv.json << 'EOF'
|
||||||
// This configuration file allows you to pass permanent command line arguments to VS Code.
|
// This configuration file allows you to pass permanent command line arguments to VS Code.
|
||||||
@@ -18,4 +18,7 @@ cat > ~/.vscode/argv.json << 'EOF'
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Ensure VSC's own auto-update feature is turned off
|
||||||
|
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
|
||||||
|
|
||||||
setsid gtk-launch code
|
setsid gtk-launch code
|
||||||
|
|||||||
3
bin/omarchy-launch-terminal
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec setsid uwsm-app -- "${TERMINAL:-alacritty}" "$@"
|
||||||
13
bin/omarchy-launch-walker
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ensure elephant is running before launching walker
|
||||||
|
if ! pgrep -x elephant > /dev/null; then
|
||||||
|
setsid uwsm-app -- elephant &
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure walker service is running
|
||||||
|
if ! pgrep -f "walker --gapplication-service" > /dev/null; then
|
||||||
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec walker --width 644 --maxheight 300 --minheight 300 "$@"
|
||||||
@@ -29,11 +29,11 @@ menu() {
|
|||||||
local index
|
local index
|
||||||
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
||||||
if [[ -n "$index" ]]; then
|
if [[ -n "$index" ]]; then
|
||||||
args+=("-a" "$index")
|
args+=("-c" "$index")
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "$options" | walker --dmenu --theme dmenu_250 -p "$prompt…" "${args[@]}"
|
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
terminal() {
|
terminal() {
|
||||||
@@ -104,21 +104,21 @@ show_capture_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_screenshot_menu() {
|
show_screenshot_menu() {
|
||||||
case $(menu "Screenshot" " Region\n Window\n Display") in
|
case $(menu "Screenshot" " Snap with Editing\n Straight to Clipboard") in
|
||||||
*Region*) omarchy-cmd-screenshot ;;
|
*Editing*) omarchy-cmd-screenshot smart ;;
|
||||||
*Window*) omarchy-cmd-screenshot window ;;
|
*Clipboard*) omarchy-cmd-screenshot smart clipboard ;;
|
||||||
*Display*) omarchy-cmd-screenshot output ;;
|
|
||||||
*) show_capture_menu ;;
|
*) show_capture_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
show_screenrecord_menu() {
|
show_screenrecord_menu() {
|
||||||
case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio") in
|
case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio\n Display + Webcam") in
|
||||||
*"Region + Audio"*) omarchy-cmd-screenrecord region audio ;;
|
*"Region + Audio"*) omarchy-cmd-screenrecord region --with-audio ;;
|
||||||
*Region*) omarchy-cmd-screenrecord ;;
|
*Region*) omarchy-cmd-screenrecord ;;
|
||||||
*"Display + Audio"*) omarchy-cmd-screenrecord output audio ;;
|
*"Display + Audio"*) omarchy-cmd-screenrecord output --with-audio ;;
|
||||||
|
*"Display + Webcam"*) omarchy-cmd-screenrecord output --with-audio --with-webcam ;;
|
||||||
*Display*) omarchy-cmd-screenrecord output ;;
|
*Display*) omarchy-cmd-screenrecord output ;;
|
||||||
*) show_capture_menu ;;
|
*) back_to show_capture_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ show_theme_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_font_menu() {
|
show_font_menu() {
|
||||||
theme=$(menu "Font" "$(omarchy-font-list)" "-w 350" "$(omarchy-font-current)")
|
theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)")
|
||||||
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
||||||
back_to show_style_menu
|
back_to show_style_menu
|
||||||
else
|
else
|
||||||
@@ -232,7 +232,7 @@ show_setup_security_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_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 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") in
|
||||||
*Package*) terminal omarchy-pkg-install ;;
|
*Package*) terminal omarchy-pkg-install ;;
|
||||||
*AUR*) terminal omarchy-pkg-aur-install ;;
|
*AUR*) terminal omarchy-pkg-aur-install ;;
|
||||||
*Web*) present_terminal omarchy-webapp-install ;;
|
*Web*) present_terminal omarchy-webapp-install ;;
|
||||||
@@ -243,6 +243,7 @@ show_install_menu() {
|
|||||||
*Editor*) show_install_editor_menu ;;
|
*Editor*) show_install_editor_menu ;;
|
||||||
*Terminal*) show_install_terminal_menu ;;
|
*Terminal*) show_install_terminal_menu ;;
|
||||||
*AI*) show_install_ai_menu ;;
|
*AI*) show_install_ai_menu ;;
|
||||||
|
*Windows*) present_terminal "omarchy-windows-vm install" ;;
|
||||||
*Gaming*) show_install_gaming_menu ;;
|
*Gaming*) show_install_gaming_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
@@ -318,7 +319,7 @@ show_install_style_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_install_font_menu() {
|
show_install_font_menu() {
|
||||||
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "-w 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" ;;
|
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
|
||||||
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode 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" ;;
|
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
|
||||||
@@ -373,11 +374,12 @@ show_install_elixir_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_remove_menu() {
|
show_remove_menu() {
|
||||||
case $(menu "Remove" " Package\n Web App\n TUI\n Theme\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 ;;
|
*Package*) terminal omarchy-pkg-remove ;;
|
||||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
*Web*) present_terminal omarchy-webapp-remove ;;
|
||||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
*TUI*) present_terminal omarchy-tui-remove ;;
|
||||||
*Theme*) present_terminal omarchy-theme-remove ;;
|
*Theme*) present_terminal omarchy-theme-remove ;;
|
||||||
|
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
||||||
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
||||||
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
|
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
@@ -385,26 +387,20 @@ show_remove_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_update_menu() {
|
show_update_menu() {
|
||||||
case $(menu "Update" " Omarchy\n Branch\n Config\n Extra Themes\n Process\n Hardware\n Password\n Timezone") in
|
case $(menu "Update" " Omarchy\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
||||||
*Omarchy*) present_terminal omarchy-update ;;
|
*Omarchy*) present_terminal omarchy-update ;;
|
||||||
*Branch*) show_update_branch_menu ;;
|
|
||||||
*Config*) show_update_config_menu ;;
|
*Config*) show_update_config_menu ;;
|
||||||
*Themes*) present_terminal omarchy-theme-update ;;
|
*Themes*) present_terminal omarchy-theme-update ;;
|
||||||
*Process*) show_update_process_menu ;;
|
*Process*) show_update_process_menu ;;
|
||||||
*Hardware*) show_update_hardware_menu ;;
|
*Hardware*) show_update_hardware_menu ;;
|
||||||
*Timezone*) omarchy-cmd-tzupdate ;;
|
*Firmware*) present_terminal omarchy-update-firmware ;;
|
||||||
|
*Timezone*) present_terminal omarchy-tz-select ;;
|
||||||
|
*Time*) present_terminal omarchy-reset-time ;;
|
||||||
*Password*) show_update_password_menu ;;
|
*Password*) show_update_password_menu ;;
|
||||||
*) show_main_menu ;;
|
*) show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
show_update_process_menu() {
|
show_update_process_menu() {
|
||||||
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
||||||
*Hypridle*) omarchy-restart-hypridle ;;
|
*Hypridle*) omarchy-restart-hypridle ;;
|
||||||
@@ -448,13 +444,12 @@ show_update_password_menu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
show_system_menu() {
|
show_system_menu() {
|
||||||
case $(menu "System" " Lock\n Screensaver\n Suspend\n Relaunch\n Restart\n Shutdown") in
|
case $(menu "System" " Lock\n Screensaver\n Suspend\n Restart\n Shutdown") in
|
||||||
*Lock*) omarchy-lock-screen ;;
|
*Lock*) omarchy-lock-screen ;;
|
||||||
*Screensaver*) omarchy-launch-screensaver force ;;
|
*Screensaver*) omarchy-launch-screensaver force ;;
|
||||||
*Suspend*) systemctl suspend ;;
|
*Suspend*) systemctl suspend ;;
|
||||||
*Relaunch*) omarchy-state clear relaunch-required && sudo systemctl restart sddm ;;
|
*Restart*) omarchy-state clear re*-required && systemctl reboot --no-wall ;;
|
||||||
*Restart*) omarchy-state clear re*-required && systemctl reboot ;;
|
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff --no-wall ;;
|
||||||
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff ;;
|
|
||||||
*) back_to show_main_menu ;;
|
*) back_to show_main_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,4 +156,4 @@ dynamic_bindings |
|
|||||||
sort -u |
|
sort -u |
|
||||||
parse_keycodes |
|
parse_keycodes |
|
||||||
parse_bindings |
|
parse_bindings |
|
||||||
walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height"
|
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
if omarchy-pkg-missing "$@"; then
|
||||||
sudo pacman -S --noconfirm --needed "$@" || exit 1
|
sudo pacman -S --noconfirm --needed "$@" || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
for pkg in "$@"; do
|
for pkg in "$@"; do
|
||||||
# Secondary check to handle states where pacman doesn't actually register an error
|
# Secondary check to handle states where pacman doesn't actually register an error
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
fzf_args=(
|
fzf_args=(
|
||||||
--multi
|
--multi
|
||||||
--preview 'yay -Siia {1}'
|
--preview 'yay -Siia {1}'
|
||||||
--preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select, F11: maximize'
|
--preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select'
|
||||||
--preview-label-pos='bottom'
|
--preview-label-pos='bottom'
|
||||||
--preview-window 'down:65%:wrap'
|
--preview-window 'down:65%:wrap'
|
||||||
--bind 'alt-p:toggle-preview'
|
--bind 'alt-p:toggle-preview'
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
fzf_args=(
|
fzf_args=(
|
||||||
--multi
|
--multi
|
||||||
--preview 'pacman -Sii {1}'
|
--preview 'pacman -Sii {1}'
|
||||||
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize'
|
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select'
|
||||||
--preview-label-pos='bottom'
|
--preview-label-pos='bottom'
|
||||||
--preview-window 'down:65%:wrap'
|
--preview-window 'down:65%:wrap'
|
||||||
--bind 'alt-p:toggle-preview'
|
--bind 'alt-p:toggle-preview'
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
fzf_args=(
|
fzf_args=(
|
||||||
--multi
|
--multi
|
||||||
--preview 'yay -Qi {1}'
|
--preview 'yay -Qi {1}'
|
||||||
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize'
|
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select'
|
||||||
--preview-label-pos='bottom'
|
--preview-label-pos='bottom'
|
||||||
--preview-window 'down:65%:wrap'
|
--preview-window 'down:65%:wrap'
|
||||||
--bind 'alt-p:toggle-preview'
|
--bind 'alt-p:toggle-preview'
|
||||||
|
|||||||
34
bin/omarchy-refresh-limine
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/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,4 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
omarchy-refresh-config walker/config.toml
|
omarchy-refresh-config walker/config.toml
|
||||||
|
omarchy-refresh-config elephant/calc.toml
|
||||||
|
omarchy-refresh-config elephant/desktopapplications.toml
|
||||||
omarchy-restart-walker
|
omarchy-restart-walker
|
||||||
|
|||||||
33
bin/omarchy-reinstall
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/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
|
||||||
4
bin/omarchy-reset-time
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Updating time..."
|
||||||
|
sudo systemctl restart systemd-timesyncd
|
||||||
@@ -1,7 +1,21 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
pkill elephant
|
||||||
pkill walker
|
pkill walker
|
||||||
# FIXME: Just deal with the memory leak for now.
|
|
||||||
# See https://github.com/basecamp/omarchy/issues/698
|
# 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 "
|
||||||
|
setsid uwsm-app -- elephant &
|
||||||
setsid uwsm-app -- walker --gapplication-service &
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
echo # Always end in success so we don't terminate further running
|
"
|
||||||
|
else
|
||||||
|
setsid uwsm-app -- elephant &
|
||||||
|
setsid uwsm-app -- walker --gapplication-service &
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
COMMAND="$1"
|
COMMAND="$1"
|
||||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/"
|
BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/"
|
||||||
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
|
||||||
|
|
||||||
mapfile -d '' -t BACKGROUNDS < <(find "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
|
mapfile -d '' -t BACKGROUNDS < <(find -L "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
|
||||||
TOTAL=${#BACKGROUNDS[@]}
|
TOTAL=${#BACKGROUNDS[@]}
|
||||||
|
|
||||||
if [[ $TOTAL -eq 0 ]]; then
|
if [[ $TOTAL -eq 0 ]]; then
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR"
|
|||||||
omarchy-theme-bg-next
|
omarchy-theme-bg-next
|
||||||
|
|
||||||
# Restart components to apply new theme
|
# Restart components to apply new theme
|
||||||
|
if pgrep -x waybar >/dev/null; then
|
||||||
omarchy-restart-waybar
|
omarchy-restart-waybar
|
||||||
|
fi
|
||||||
omarchy-restart-swayosd
|
omarchy-restart-swayosd
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
pkill -SIGUSR2 btop
|
pkill -SIGUSR2 btop
|
||||||
@@ -33,7 +35,10 @@ makoctl reload
|
|||||||
# Change gnome, browser, vscode, cursor themes
|
# Change gnome, browser, vscode, cursor themes
|
||||||
omarchy-theme-set-terminal
|
omarchy-theme-set-terminal
|
||||||
omarchy-theme-set-gnome
|
omarchy-theme-set-gnome
|
||||||
omarchy-theme-set-eza
|
|
||||||
omarchy-theme-set-browser
|
omarchy-theme-set-browser
|
||||||
omarchy-theme-set-vscode
|
omarchy-theme-set-vscode
|
||||||
omarchy-theme-set-cursor
|
omarchy-theme-set-cursor
|
||||||
|
omarchy-theme-set-obsidian
|
||||||
|
|
||||||
|
# Call hook on theme set
|
||||||
|
omarchy-hook theme-set "$THEME_NAME"
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
|
||||||
|
|
||||||
if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
|
if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy-cmd-present brave; then
|
||||||
if [[ -f $CHROMIUM_THEME ]]; then
|
if [[ -f $CHROMIUM_THEME ]]; then
|
||||||
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
||||||
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${rgb//,/ })
|
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
||||||
else
|
else
|
||||||
# Use a default, neutral grey if theme doesn't have a color
|
# Use a default, neutral grey if theme doesn't have a color
|
||||||
THEME_RGB_COLOR="28,32,39"
|
THEME_RGB_COLOR="28,32,39"
|
||||||
@@ -15,6 +15,17 @@ if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
|
|||||||
if omarchy-cmd-present chromium; then
|
if omarchy-cmd-present chromium; then
|
||||||
rm -f /etc/chromium/policies/managed/color.json
|
rm -f /etc/chromium/policies/managed/color.json
|
||||||
chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR"
|
chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR"
|
||||||
|
|
||||||
|
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
|
||||||
|
chromium --no-startup-window --set-color-scheme="light"
|
||||||
|
else
|
||||||
|
chromium --no-startup-window --set-color-scheme="dark"
|
||||||
|
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
|
fi
|
||||||
|
|
||||||
if omarchy-cmd-present brave; then
|
if omarchy-cmd-present brave; then
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [ -f ~/.config/omarchy/current/theme/eza.yml ]; then
|
|
||||||
ln -snf ~/.config/omarchy/current/theme/eza.yml ~/.config/eza/theme.yml
|
|
||||||
else
|
|
||||||
rm -f ~/.config/eza/theme.yml
|
|
||||||
fi
|
|
||||||
647
bin/omarchy-theme-set-obsidian
Executable file
@@ -0,0 +1,647 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# - 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)
|
||||||
|
|
||||||
|
# Theme automagic generation logic:
|
||||||
|
#
|
||||||
|
# - Background/foreground: read from ~/.config/omarchy/current/theme/alacritty.toml [colors.primary]
|
||||||
|
# (background/foreground). Fallbacks: bg=#1a1b26, fg=#a9b1d6. Compute bg brightness for light/dark handling.
|
||||||
|
# - Palette extraction: collect colors from Alacritty (primary/normal/bright/dim/selection), Waybar (@define-color),
|
||||||
|
# and Hyprland (col.*_border; rgba->hex). Normalize, dedupe, and count frequencies.
|
||||||
|
# - Slot ordering: remove bg/fg, sort remaining colors by frequency, then fill 13 slots by cycling. Map slots to:
|
||||||
|
# h1–h6, links, inline code, marks, interactive accent, blockquote border; muted/faint use border color.
|
||||||
|
# - Code colors: code background = closest color to bg (Euclidean RGB); if none, make a subtle bg variant (+/− RGB).
|
||||||
|
# code foreground = closest color to fg; fallback #e0e0e0.
|
||||||
|
# - Border color: from btop.theme theme[div_line]; else blended mix biased toward bg (≈ (bg+fg)/3).
|
||||||
|
# - Selection: from Alacritty [colors.selection] (background/text), honoring CellForeground/Background.
|
||||||
|
# If missing, background = 75% bg + 25% fg; text chosen for contrast vs selection background.
|
||||||
|
# - Fonts: monospace from Alacritty [font] or fontconfig monospace; UI font from fontconfig sans-serif.
|
||||||
|
|
||||||
|
VAULTS_FILE="$HOME/.local/state/omarchy/obsidian-vaults"
|
||||||
|
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
|
||||||
|
|
||||||
|
ensure_vaults_file() {
|
||||||
|
mkdir -p "$(dirname "$VAULTS_FILE")"
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure theme directory and minimal manifest exist in a vault
|
||||||
|
ensure_theme_scaffold() {
|
||||||
|
local vault_path="$1"
|
||||||
|
local theme_dir="$vault_path/.obsidian/themes/Omarchy"
|
||||||
|
mkdir -p "$theme_dir"
|
||||||
|
if [ ! -f "$theme_dir/manifest.json" ]; then
|
||||||
|
cat >"$theme_dir/manifest.json" <<'EOF'
|
||||||
|
{
|
||||||
|
"name": "Omarchy",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"minAppVersion": "0.16.0",
|
||||||
|
"description": "Automatically syncs with your current Omarchy system theme colors and fonts",
|
||||||
|
"author": "Omarchy",
|
||||||
|
"authorUrl": "https://omarchy.org"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
[ -f "$theme_dir/theme.css" ] || : >"$theme_dir/theme.css"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to extract hex color from string
|
||||||
|
extract_hex_color() {
|
||||||
|
echo "$1" | grep -oE '#[0-9a-fA-F]{6}' | head -1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to convert RGB/RGBA to hex
|
||||||
|
rgb_to_hex() {
|
||||||
|
local rgb_string="$1"
|
||||||
|
if [[ $rgb_string =~ rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+) ]]; then
|
||||||
|
printf "#%02x%02x%02x\n" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert hex to RGB components
|
||||||
|
hex_to_rgb() {
|
||||||
|
local hex="${1#\#}"
|
||||||
|
printf "%d %d %d\n" "0x${hex:0:2}" "0x${hex:2:2}" "0x${hex:4:2}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Calculate perceived brightness (0-255)
|
||||||
|
calculate_brightness() {
|
||||||
|
local hex="$1"
|
||||||
|
read -r r g b <<<"$(hex_to_rgb "$hex")"
|
||||||
|
# Use perceived brightness formula
|
||||||
|
echo $(((r * 299 + g * 587 + b * 114) / 1000))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Calculate color distance (euclidean in RGB space)
|
||||||
|
color_distance() {
|
||||||
|
local hex1="$1"
|
||||||
|
local hex2="$2"
|
||||||
|
read -r r1 g1 b1 <<<"$(hex_to_rgb "$hex1")"
|
||||||
|
read -r r2 g2 b2 <<<"$(hex_to_rgb "$hex2")"
|
||||||
|
echo $(((r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2)))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extract all colors with frequency count
|
||||||
|
extract_all_colors_with_count() {
|
||||||
|
local -A color_counts
|
||||||
|
local color
|
||||||
|
|
||||||
|
# Extract from Alacritty config
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
||||||
|
# Primary colors
|
||||||
|
while IFS= read -r color; do
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[ -n "$color" ] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -E "(background|foreground|cursor|text)" "$CURRENT_THEME_DIR/alacritty.toml" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
|
||||||
|
|
||||||
|
# Normal colors
|
||||||
|
while IFS= read -r color; do
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[ -n "$color" ] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -A 20 "\[colors.normal\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
|
||||||
|
|
||||||
|
# Bright colors
|
||||||
|
while IFS= read -r color; do
|
||||||
|
# Add # if missing
|
||||||
|
[[ "$color" =~ ^[0-9a-fA-F]{6}$ ]] && color="#$color"
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[[ "$color" =~ ^#[0-9a-f]{6}$ ]] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -A 20 "\[colors.bright\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']//;s/[\"'].*//")
|
||||||
|
|
||||||
|
# Dim colors if present
|
||||||
|
while IFS= read -r color; do
|
||||||
|
# Add # if missing
|
||||||
|
[[ "$color" =~ ^[0-9a-fA-F]{6}$ ]] && color="#$color"
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[[ "$color" =~ ^#[0-9a-f]{6}$ ]] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -A 20 "\[colors.dim\]" "$CURRENT_THEME_DIR/alacritty.toml" 2>/dev/null | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']//;s/[\"'].*//")
|
||||||
|
|
||||||
|
# Selection colors
|
||||||
|
while IFS= read -r color; do
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[ -n "$color" ] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" 2>/dev/null | grep -E "(background|text)" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract from Waybar CSS
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/waybar.css" ]; then
|
||||||
|
while IFS= read -r color; do
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[ -n "$color" ] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -oE '@define-color [a-z_-]+ #[0-9a-fA-F]{6}' "$CURRENT_THEME_DIR/waybar.css" | grep -oE '#[0-9a-fA-F]{6}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract from Hyprland config
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/hyprland.conf" ]; then
|
||||||
|
while IFS= read -r color; do
|
||||||
|
if [[ $color == rgba* ]] || [[ $color == rgb* ]]; then
|
||||||
|
color=$(rgb_to_hex "$color")
|
||||||
|
fi
|
||||||
|
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
|
||||||
|
[ -n "$color" ] && ((color_counts["$color"]++))
|
||||||
|
done < <(grep -E "col\.(active|inactive)_border" "$CURRENT_THEME_DIR/hyprland.conf" | grep -oE 'rgba?\([^)]+\)|#[0-9a-fA-F]{6,8}' | sed 's/ff$//')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Output colors with their counts
|
||||||
|
for color in "${!color_counts[@]}"; do
|
||||||
|
echo "${color_counts[$color]} $color"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sort colors by frequency
|
||||||
|
sort_colors_by_frequency() {
|
||||||
|
# Input is already "count color" format
|
||||||
|
sort -rn | cut -d' ' -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fill color slots with cycling if needed
|
||||||
|
fill_color_slots() {
|
||||||
|
local -a colors=("$@")
|
||||||
|
local -a slots
|
||||||
|
local num_colors=${#colors[@]}
|
||||||
|
|
||||||
|
# Need 13 slots total (code colors are handled separately)
|
||||||
|
local slots_needed=13
|
||||||
|
|
||||||
|
if [ $num_colors -eq 0 ]; then
|
||||||
|
# No colors available, use defaults
|
||||||
|
colors=("#3d3d3d" "#5d5d5d" "#7d7d7d" "#9d9d9d" "#bd93f9" "#50fa7b")
|
||||||
|
num_colors=6
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fill slots, cycling if necessary
|
||||||
|
for ((i = 0; i < slots_needed; i++)); do
|
||||||
|
slots[$i]="${colors[$((i % num_colors))]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "${slots[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main color extraction and theme generation
|
||||||
|
extract_theme_data() {
|
||||||
|
# Get primary colors from Alacritty
|
||||||
|
local bg_color="#1a1b26"
|
||||||
|
local fg_color="#a9b1d6"
|
||||||
|
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
||||||
|
local extracted_bg=$(grep -A 5 "\[colors.primary\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^background = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
local extracted_fg=$(grep -A 5 "\[colors.primary\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^foreground = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
[ -n "$extracted_bg" ] && bg_color="$extracted_bg"
|
||||||
|
[ -n "$extracted_fg" ] && fg_color="$extracted_fg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine if light or dark theme
|
||||||
|
local bg_brightness=$(calculate_brightness "$bg_color")
|
||||||
|
local is_light_theme=false
|
||||||
|
[ $bg_brightness -gt 127 ] && is_light_theme=true
|
||||||
|
|
||||||
|
# Extract all colors with counts
|
||||||
|
local color_data=$(extract_all_colors_with_count)
|
||||||
|
|
||||||
|
# Filter out background and foreground colors for the main array
|
||||||
|
local filtered_data=$(echo "$color_data" | grep -v "$bg_color" | grep -v "$fg_color")
|
||||||
|
|
||||||
|
# Get all unique colors (including bg/fg) for distance calculations
|
||||||
|
local -a all_unique_colors
|
||||||
|
readarray -t all_unique_colors < <(echo "$color_data" | cut -d' ' -f2 | sort -u)
|
||||||
|
|
||||||
|
# Find the 3 closest colors to background for background variations
|
||||||
|
local -a bg_distances
|
||||||
|
for color in "${all_unique_colors[@]}"; do
|
||||||
|
if [ "$color" != "$bg_color" ]; then
|
||||||
|
distance=$(color_distance "$color" "$bg_color")
|
||||||
|
bg_distances+=("$distance:$color")
|
||||||
|
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"
|
||||||
|
|
||||||
|
# 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=""
|
||||||
|
min_distance=999999999
|
||||||
|
for color in "${all_unique_colors[@]}"; do
|
||||||
|
if [ "$color" != "$fg_color" ]; then
|
||||||
|
distance=$(color_distance "$color" "$fg_color")
|
||||||
|
if [ $distance -lt $min_distance ]; then
|
||||||
|
min_distance=$distance
|
||||||
|
code_fg="$color"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[ -z "$code_fg" ] && code_fg="#e0e0e0" # Fallback
|
||||||
|
|
||||||
|
# Extract text selection colors from Alacritty
|
||||||
|
local selection_bg=""
|
||||||
|
local selection_fg=""
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
||||||
|
selection_bg=$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^background = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
local selection_text=$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
# If text is set to CellForeground/CellBackground, use the appropriate color
|
||||||
|
if [ -z "$selection_text" ] || [[ "$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = ")" == *"CellForeground"* ]]; then
|
||||||
|
selection_fg="$fg_color"
|
||||||
|
elif [[ "$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = ")" == *"CellBackground"* ]]; then
|
||||||
|
selection_fg="$bg_color"
|
||||||
|
else
|
||||||
|
selection_fg="$selection_text"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fallback if no selection colors found
|
||||||
|
if [ -z "$selection_bg" ]; then
|
||||||
|
read -r r1 g1 b1 <<<"$(hex_to_rgb "$bg_color")"
|
||||||
|
read -r r2 g2 b2 <<<"$(hex_to_rgb "$fg_color")"
|
||||||
|
local r=$(((r1 * 3 + r2) / 4)) # 75% background, 25% foreground
|
||||||
|
local g=$(((g1 * 3 + g2) / 4))
|
||||||
|
local b=$(((b1 * 3 + b2) / 4))
|
||||||
|
selection_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use contrasting color for selection text if not defined
|
||||||
|
if [ -z "$selection_fg" ]; then
|
||||||
|
# Calculate brightness of selection background
|
||||||
|
local sel_brightness=$(calculate_brightness "$selection_bg")
|
||||||
|
if [ $sel_brightness -gt 127 ]; then
|
||||||
|
selection_fg="$bg_color" # Dark text on light selection
|
||||||
|
else
|
||||||
|
selection_fg="$fg_color" # Light text on dark selection
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract border color from btop theme
|
||||||
|
local border_color=""
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/btop.theme" ]; then
|
||||||
|
# Look for theme[div_line] in btop theme
|
||||||
|
local btop_divline=$(grep 'theme\[div_line\]' "$CURRENT_THEME_DIR/btop.theme" | head -1)
|
||||||
|
|
||||||
|
if [ -n "$btop_divline" ]; then
|
||||||
|
# Extract the color value after the = sign
|
||||||
|
local extracted=$(echo "$btop_divline" | sed 's/.*=//' | xargs)
|
||||||
|
|
||||||
|
# Check if it's a hex color and lowercase it
|
||||||
|
if [[ $extracted =~ ^#[0-9a-fA-F]{6}$ ]]; then
|
||||||
|
border_color=$(echo "$extracted" | tr '[:upper:]' '[:lower:]')
|
||||||
|
elif [[ $extracted =~ ^[0-9a-fA-F]{6}$ ]]; then
|
||||||
|
# Add # if missing and lowercase
|
||||||
|
border_color=$(echo "#$extracted" | tr '[:upper:]' '[:lower:]')
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fallback if no border color found
|
||||||
|
if [ -z "$border_color" ]; then
|
||||||
|
# Use a color between bg and fg
|
||||||
|
read -r r1 g1 b1 <<<"$(hex_to_rgb "$bg_color")"
|
||||||
|
read -r r2 g2 b2 <<<"$(hex_to_rgb "$fg_color")"
|
||||||
|
local r=$(((r1 + r2) / 3)) # Closer to background
|
||||||
|
local g=$(((g1 + g2) / 3))
|
||||||
|
local b=$(((b1 + b2) / 3))
|
||||||
|
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
|
||||||
|
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)
|
||||||
|
|
||||||
|
# Fill the 13 color slots (code colors handled separately)
|
||||||
|
local -a color_slots
|
||||||
|
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
|
||||||
|
|
||||||
|
# Extract fonts
|
||||||
|
local monospace_font="CaskaydiaMono Nerd Font"
|
||||||
|
local ui_font="Liberation Sans"
|
||||||
|
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
|
||||||
|
local alacritty_font=$(grep -A 5 "\[font\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep 'family = ' | head -1 | cut -d'"' -f2)
|
||||||
|
[ -n "$alacritty_font" ] && monospace_font="$alacritty_font"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$HOME/.config/fontconfig/fonts.conf" ]; then
|
||||||
|
local fontconfig_mono=$(xmlstarlet sel -t -v '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/string' "$HOME/.config/fontconfig/fonts.conf" 2>/dev/null || true)
|
||||||
|
[ -n "$fontconfig_mono" ] && monospace_font="$fontconfig_mono"
|
||||||
|
|
||||||
|
local fontconfig_sans=$(xmlstarlet sel -t -v '//match[@target="pattern"][test/string="sans-serif"]/edit[@name="family"]/string' "$HOME/.config/fontconfig/fonts.conf" 2>/dev/null || true)
|
||||||
|
[ -n "$fontconfig_sans" ] && ui_font="$fontconfig_sans"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generate CSS with 14-slot system
|
||||||
|
cat <<EOF
|
||||||
|
/* Omarchy Theme for Obsidian */
|
||||||
|
/* Generated on $(date) from theme: $(basename "$(readlink "$CURRENT_THEME_DIR" 2>/dev/null || echo "unknown")") */
|
||||||
|
/* Colors sorted by frequency, backgrounds by distance */
|
||||||
|
|
||||||
|
.theme-dark, .theme-light {
|
||||||
|
/* Core colors */
|
||||||
|
--background-primary: $bg_color;
|
||||||
|
--text-normal: $fg_color;
|
||||||
|
|
||||||
|
/* Background variations (always distance-based) */
|
||||||
|
--background-primary-alt: $bg_primary_alt;
|
||||||
|
--background-secondary: $bg_secondary;
|
||||||
|
--background-secondary-alt: $bg_secondary_alt;
|
||||||
|
|
||||||
|
/* Code block colors (always distance-based) */
|
||||||
|
--code-background: $code_bg;
|
||||||
|
--code-foreground: $code_fg;
|
||||||
|
|
||||||
|
/* Border color from btop theme */
|
||||||
|
--border-color: $border_color;
|
||||||
|
|
||||||
|
/* Selection colors from Alacritty */
|
||||||
|
--text-selection: $selection_bg;
|
||||||
|
--text-selection-fg: $selection_fg;
|
||||||
|
|
||||||
|
/* 13-slot color system for remaining elements */
|
||||||
|
--text-title-h1: ${color_slots[0]};
|
||||||
|
--text-title-h2: ${color_slots[1]};
|
||||||
|
--text-title-h3: ${color_slots[2]};
|
||||||
|
--text-title-h4: ${color_slots[3]};
|
||||||
|
--text-title-h5: ${color_slots[4]};
|
||||||
|
--text-title-h6: ${color_slots[4]}; /* Same as h5 */
|
||||||
|
--text-link: ${color_slots[5]};
|
||||||
|
--markup-code: ${color_slots[6]};
|
||||||
|
--text-mark: ${color_slots[7]};
|
||||||
|
--interactive-accent: ${color_slots[8]};
|
||||||
|
--blockquote-border: ${color_slots[9]};
|
||||||
|
--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);
|
||||||
|
--text-accent-hover: var(--interactive-accent);
|
||||||
|
--text-error: var(--text-title-h1);
|
||||||
|
--text-error-hover: var(--text-title-h1);
|
||||||
|
--text-highlight-bg: $fg_color; /* Use text color as highlight background */
|
||||||
|
--text-on-accent: $bg_color;
|
||||||
|
|
||||||
|
--interactive-normal: var(--code-background);
|
||||||
|
--interactive-hover: var(--interactive-accent);
|
||||||
|
--interactive-accent-hover: var(--interactive-accent);
|
||||||
|
--interactive-success: var(--text-title-h2);
|
||||||
|
|
||||||
|
--scrollbar-bg: var(--background-primary);
|
||||||
|
--scrollbar-thumb-bg: var(--code-background);
|
||||||
|
--scrollbar-active-thumb-bg: var(--interactive-accent);
|
||||||
|
|
||||||
|
--background-modifier-border: var(--border-color);
|
||||||
|
--background-modifier-form-field: var(--code-background);
|
||||||
|
--background-modifier-form-field-highlighted: var(--code-background);
|
||||||
|
--background-modifier-box-shadow: rgba(0, 0, 0, 0.3);
|
||||||
|
--background-modifier-success: var(--interactive-success);
|
||||||
|
--background-modifier-error: var(--text-error);
|
||||||
|
--background-modifier-error-hover: var(--text-error);
|
||||||
|
--background-modifier-cover: rgba(0, 0, 0, 0.8);
|
||||||
|
|
||||||
|
--link-color: var(--text-link);
|
||||||
|
--link-color-hover: var(--text-link);
|
||||||
|
--link-unresolved-color: var(--text-muted);
|
||||||
|
--link-unresolved-opacity: 0.7;
|
||||||
|
|
||||||
|
--tag-color: var(--text-title-h3);
|
||||||
|
--tag-background: var(--code-background);
|
||||||
|
|
||||||
|
--graph-line: var(--text-muted);
|
||||||
|
--graph-node: var(--interactive-accent);
|
||||||
|
--graph-node-unresolved: var(--text-muted);
|
||||||
|
--graph-node-focused: var(--text-link);
|
||||||
|
--graph-node-tag: var(--text-title-h3);
|
||||||
|
--graph-node-attachment: var(--text-title-h2);
|
||||||
|
|
||||||
|
/* Fonts */
|
||||||
|
--font-interface-theme: "$ui_font";
|
||||||
|
--font-text-theme: "$ui_font";
|
||||||
|
--font-monospace-theme: "$monospace_font";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Headers */
|
||||||
|
.cm-header-1, .markdown-rendered h1 { color: var(--text-title-h1); }
|
||||||
|
.cm-header-2, .markdown-rendered h2 { color: var(--text-title-h2); }
|
||||||
|
.cm-header-3, .markdown-rendered h3 { color: var(--text-title-h3); }
|
||||||
|
.cm-header-4, .markdown-rendered h4 { color: var(--text-title-h4); }
|
||||||
|
.cm-header-5, .markdown-rendered h5 { color: var(--text-title-h5); }
|
||||||
|
.cm-header-6, .markdown-rendered h6 { color: var(--text-title-h6); }
|
||||||
|
|
||||||
|
/* Code blocks */
|
||||||
|
.markdown-rendered code {
|
||||||
|
font-family: var(--font-monospace-theme);
|
||||||
|
background-color: var(--code-background);
|
||||||
|
color: var(--markup-code);
|
||||||
|
padding: 2px 4px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-rendered pre {
|
||||||
|
background-color: var(--code-background);
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-rendered pre code {
|
||||||
|
background-color: transparent;
|
||||||
|
color: var(--code-foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Syntax highlighting */
|
||||||
|
.cm-s-obsidian span.cm-keyword { color: var(--text-title-h1); }
|
||||||
|
.cm-s-obsidian span.cm-string { color: var(--text-title-h2); }
|
||||||
|
.cm-s-obsidian span.cm-number { color: var(--text-title-h3); }
|
||||||
|
.cm-s-obsidian span.cm-comment { color: var(--text-muted); }
|
||||||
|
.cm-s-obsidian span.cm-operator { color: var(--text-link); }
|
||||||
|
.cm-s-obsidian span.cm-variable { color: var(--text-normal); }
|
||||||
|
.cm-s-obsidian span.cm-def { color: var(--text-link); }
|
||||||
|
|
||||||
|
/* Highlighted text */
|
||||||
|
.markdown-rendered mark,
|
||||||
|
.cm-s-obsidian span.cm-highlight,
|
||||||
|
mark {
|
||||||
|
background-color: var(--text-highlight-bg) !important;
|
||||||
|
color: var(--code-background) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
.markdown-rendered a {
|
||||||
|
color: var(--text-link);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blockquotes */
|
||||||
|
.markdown-rendered blockquote {
|
||||||
|
border-left: 4px solid var(--blockquote-border);
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status bar */
|
||||||
|
.status-bar {
|
||||||
|
background-color: var(--code-background);
|
||||||
|
border-top: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active file */
|
||||||
|
.workspace-leaf.mod-active .workspace-leaf-header-title {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-file-title.is-active {
|
||||||
|
background-color: var(--code-background);
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text selection */
|
||||||
|
::selection {
|
||||||
|
background-color: var(--text-selection);
|
||||||
|
color: var(--text-selection-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search results */
|
||||||
|
.search-result-file-title {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-result-file-match {
|
||||||
|
background-color: var(--code-background);
|
||||||
|
color: var(--text-normal);
|
||||||
|
border-left: 3px solid var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-result-file-matched-text {
|
||||||
|
color: var(--code-background);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
.markdown-rendered table {
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-rendered th {
|
||||||
|
background-color: var(--code-background);
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-rendered td {
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Callouts */
|
||||||
|
.callout {
|
||||||
|
border-left: 4px solid var(--interactive-accent);
|
||||||
|
background-color: var(--code-background);
|
||||||
|
}
|
||||||
|
.callout * {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modal dialogs */
|
||||||
|
.modal {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border: 2px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
.vertical-tab-header-group-title {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vertical-tab-nav-item.is-active {
|
||||||
|
background-color: var(--code-background);
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Option handling
|
||||||
|
if [ "${1:-}" = "--reset" ]; then
|
||||||
|
echo "♻️ Resetting Omarchy themes and registry..."
|
||||||
|
if [ -f "$VAULTS_FILE" ] && [ -s "$VAULTS_FILE" ]; then
|
||||||
|
while IFS= read -r vault_path || [ -n "$vault_path" ]; do
|
||||||
|
case "$vault_path" in ""|\#*) continue ;; esac
|
||||||
|
vault_path="${vault_path%/}"
|
||||||
|
vault_name=$(basename "$vault_path")
|
||||||
|
theme_dir="$vault_path/.obsidian/themes/Omarchy"
|
||||||
|
if [ -d "$theme_dir" ]; then
|
||||||
|
rm -rf "$theme_dir"
|
||||||
|
echo " ✅ $vault_name (theme removed)"
|
||||||
|
else
|
||||||
|
echo " ℹ️ $vault_name (no theme present)"
|
||||||
|
fi
|
||||||
|
done <"$VAULTS_FILE"
|
||||||
|
fi
|
||||||
|
rm -f "$VAULTS_FILE"
|
||||||
|
echo "✅ Registry removed"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Main update logic
|
||||||
|
echo "🔄 Updating Obsidian vaults..."
|
||||||
|
|
||||||
|
# Step 1: ensure registry exists (bootstrap if needed)
|
||||||
|
ensure_vaults_file
|
||||||
|
|
||||||
|
while IFS= read -r vault_path || [ -n "$vault_path" ]; do
|
||||||
|
case "$vault_path" in "" | \#*) continue ;; esac
|
||||||
|
vault_path="${vault_path%/}"
|
||||||
|
vault_name=$(basename "$vault_path")
|
||||||
|
|
||||||
|
# Step 2: verify path exists; log/skip gracefully if invalid
|
||||||
|
if [ ! -d "$vault_path" ] || [ ! -d "$vault_path/.obsidian" ]; then
|
||||||
|
echo " ❌ $vault_name (invalid entry: missing directory or .obsidian)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure theme files exist for this vault
|
||||||
|
ensure_theme_scaffold "$vault_path"
|
||||||
|
THEME_DIR="$vault_path/.obsidian/themes/Omarchy"
|
||||||
|
|
||||||
|
# Step 3: update theme.css
|
||||||
|
if [ -f "$CURRENT_THEME_DIR/obsidian.css" ]; then
|
||||||
|
cp "$CURRENT_THEME_DIR/obsidian.css" "$THEME_DIR/theme.css"
|
||||||
|
echo " ✅ $vault_name (custom theme)"
|
||||||
|
else
|
||||||
|
extract_theme_data >"$THEME_DIR/theme.css"
|
||||||
|
echo " ✅ $vault_name (generated theme)"
|
||||||
|
fi
|
||||||
|
done <"$VAULTS_FILE"
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
case "$TERMINAL" in
|
if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
|
||||||
"alacritty") touch ~/.config/alacritty/alacritty.toml ;;
|
touch ~/.config/alacritty/alacritty.toml
|
||||||
"kitty") killall -SIGUSR1 kitty ;;
|
fi
|
||||||
"ghostty") killall -SIGUSR2 ghostty ;;
|
|
||||||
esac
|
killall -SIGUSR1 kitty
|
||||||
|
killall -SIGUSR2 ghostty
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
|||||||
|
|
||||||
# Install $EDITOR_NAME theme extension
|
# Install $EDITOR_NAME theme extension
|
||||||
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
|
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
|
||||||
notify-send " Installing $EDITOR_NAME theme for $theme_name"
|
|
||||||
"$EDITOR_CMD" --install-extension "$extension" >/dev/null
|
"$EDITOR_CMD" --install-extension "$extension" >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -32,8 +31,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
|||||||
if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then
|
if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then
|
||||||
# Insert `"workbench.colorTheme": "",` immediately after the first `{`
|
# Insert `"workbench.colorTheme": "",` immediately after the first `{`
|
||||||
# Use sed's first-match range (0,/{/) to only replace the first `{`
|
# Use sed's first-match range (0,/{/) to only replace the first `{`
|
||||||
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\
|
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$SETTINGS_PATH"
|
||||||
"workbench.colorTheme": "",/}' "$SETTINGS_PATH"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update theme
|
# Update theme
|
||||||
@@ -43,8 +41,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
|||||||
else
|
else
|
||||||
# Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support
|
# Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support
|
||||||
if [[ -f "$SETTINGS_PATH" ]]; then
|
if [[ -f "$SETTINGS_PATH" ]]; then
|
||||||
sed -i --follow-symlinks -E '/"workbench\.colorTheme"[[:space:]]*:[^,}]*,?/d' "$SETTINGS_PATH"
|
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
for dir in ~/.config/omarchy/themes/*/; do
|
for dir in ~/.config/omarchy/themes/*/; do
|
||||||
[ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
|
if [[ -d $dir ]] && [[ ! -L "${dir%/}" ]] && [[ -d "$dir/.git" ]]; then
|
||||||
|
echo "Updating: $(basename "$dir")"
|
||||||
|
git -C "$dir" pull
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
6
bin/omarchy-tz-select
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
timezone=$(timedatectl list-timezones | gum filter --height 20 --header "Set timezone") || exit 1
|
||||||
|
sudo timedatectl set-timezone "$timezone"
|
||||||
|
echo "Timezone is now set to $timezone"
|
||||||
|
omarchy-restart-waybar
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
set -e
|
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
|
||||||
|
|
||||||
omarchy-snapshot create || [ $? -eq 127 ]
|
omarchy-snapshot create || [ $? -eq 127 ]
|
||||||
omarchy-update-git
|
omarchy-update-git
|
||||||
omarchy-update-perform
|
omarchy-update-perform
|
||||||
|
|||||||
@@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
# Ensure Waybar icon offering the available update is removed
|
# Ensure Waybar icon offering the available update is removed
|
||||||
pkill -RTMIN+7 waybar
|
pkill -RTMIN+7 waybar
|
||||||
|
exit 0
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
if (($# == 0)); then
|
if (($# == 0)); then
|
||||||
echo "Usage: omarchy-verion-branch-set [master|dev]"
|
echo "Usage: omarchy-update-branch [master|dev]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
11
bin/omarchy-update-firmware
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
echo -e "\e[32mUpdate Firmware\e[0m"
|
||||||
|
|
||||||
|
if omarchy-cmd-missing fwupdmgr; then
|
||||||
|
omarchy-pkg-add fwupd
|
||||||
|
fi
|
||||||
|
|
||||||
|
fwupdmgr refresh
|
||||||
|
sudo fwupdmgr update
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
echo -e "\e[32mUpdate Omarchy\e[0m"
|
echo -e "\e[32mUpdate Omarchy\e[0m"
|
||||||
|
|
||||||
git -C $OMARCHY_PATH pull --autostash
|
git -C $OMARCHY_PATH pull --autostash
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ set -e
|
|||||||
omarchy-update-available-reset
|
omarchy-update-available-reset
|
||||||
omarchy-update-system-pkgs
|
omarchy-update-system-pkgs
|
||||||
omarchy-migrate
|
omarchy-migrate
|
||||||
|
omarchy-hook post-update
|
||||||
omarchy-update-restart
|
omarchy-update-restart
|
||||||
|
|||||||
@@ -5,9 +5,6 @@ if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $
|
|||||||
|
|
||||||
elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then
|
elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then
|
||||||
gum confirm "Updates require reboot. Ready?" && omarchy-state clear re*-required && sudo reboot now
|
gum confirm "Updates require reboot. Ready?" && omarchy-state clear re*-required && sudo reboot now
|
||||||
|
|
||||||
elif [ -f "$HOME/.local/state/omarchy/relaunch-required" ]; then
|
|
||||||
gum confirm "Updates require Hyprland relaunch. Ready?" && omarchy-state clear re*-required && uwsm stop
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for file in "$HOME"/.local/state/omarchy/restart-*-required; do
|
for file in "$HOME"/.local/state/omarchy/restart-*-required; do
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
# Used in package emergencies if a bad package has been pushed and we can't revoke.
|
# 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>
|
# Requires manually installing the good package using sudo pacman -U <url>
|
||||||
ignored_packages=$(omarchy-pkg-ignored)
|
ignored_packages=$(omarchy-pkg-ignored)
|
||||||
|
|||||||
445
bin/omarchy-windows-vm
Executable file
@@ -0,0 +1,445 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
COMPOSE_FILE="$HOME/.config/windows/docker-compose.yml"
|
||||||
|
|
||||||
|
check_prerequisites() {
|
||||||
|
local DISK_SIZE_GB=${1:-64}
|
||||||
|
local REQUIRED_SPACE=$((DISK_SIZE_GB + 10)) # Add 10GB for Windows ISO and overhead
|
||||||
|
|
||||||
|
# Check for KVM support
|
||||||
|
if [ ! -e /dev/kvm ]; then
|
||||||
|
gum style \
|
||||||
|
--border normal \
|
||||||
|
--padding "1 2" \
|
||||||
|
--margin "1" \
|
||||||
|
"❌ KVM virtualization not available!" \
|
||||||
|
"" \
|
||||||
|
"Please enable virtualization in BIOS or run:" \
|
||||||
|
" sudo modprobe kvm-intel # for Intel CPUs" \
|
||||||
|
" sudo modprobe kvm-amd # for AMD CPUs"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check disk space
|
||||||
|
AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}')
|
||||||
|
if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
|
||||||
|
echo "❌ Insufficient disk space!"
|
||||||
|
echo " Available: ${AVAILABLE_SPACE}GB"
|
||||||
|
echo " Required: ${REQUIRED_SPACE}GB (${DISK_SIZE_GB}GB disk + 10GB for Windows image)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_windows() {
|
||||||
|
# Set up trap to handle Ctrl+C
|
||||||
|
trap "echo ''; echo 'Installation cancelled by user'; exit 1" INT
|
||||||
|
|
||||||
|
check_prerequisites
|
||||||
|
|
||||||
|
omarchy-pkg-add freerdp openbsd-netcat gum
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.windows"
|
||||||
|
mkdir -p "$HOME/.config/windows"
|
||||||
|
mkdir -p "$HOME/.local/share/applications/icons"
|
||||||
|
|
||||||
|
# Install Windows VM icon and desktop file
|
||||||
|
if [ -f "$OMARCHY_PATH/applications/icons/windows.png" ]; then
|
||||||
|
cp "$OMARCHY_PATH/applications/icons/windows.png" "$HOME/.local/share/applications/icons/windows.png"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF | tee "$HOME/.local/share/applications/windows-vm.desktop" > /dev/null
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Windows
|
||||||
|
Comment=Start Windows VM via Docker and connect with RDP
|
||||||
|
Exec=uwsm app -- omarchy-windows-vm launch
|
||||||
|
Icon=$HOME/.local/share/applications/icons/windows.png
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=System;Virtualization;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Get system resources
|
||||||
|
TOTAL_RAM=$(free -h | awk 'NR==2 {print $2}')
|
||||||
|
TOTAL_RAM_GB=$(awk 'NR==1 {printf "%d", $2/1024/1024}' /proc/meminfo)
|
||||||
|
TOTAL_CORES=$(nproc)
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "System Resources Detected:"
|
||||||
|
echo " Total RAM: $TOTAL_RAM"
|
||||||
|
echo " Total CPU Cores: $TOTAL_CORES"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
RAM_OPTIONS=""
|
||||||
|
for size in 2 4 8 16 32 64; do
|
||||||
|
if [ $size -le $TOTAL_RAM_GB ]; then
|
||||||
|
RAM_OPTIONS="$RAM_OPTIONS ${size}G"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
SELECTED_RAM=$(echo $RAM_OPTIONS | tr ' ' '\n' | gum choose --selected="4G" --header="How much RAM would you like to allocate to Windows VM?")
|
||||||
|
|
||||||
|
# Check if user cancelled
|
||||||
|
if [ -z "$SELECTED_RAM" ]; then
|
||||||
|
echo "Installation cancelled by user"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SELECTED_CORES=$(gum input --placeholder="Number of CPU cores (1-$TOTAL_CORES)" --value="2" --header="How many CPU cores would you like to allocate to Windows VM?" --char-limit=2)
|
||||||
|
|
||||||
|
# Check if user cancelled (Ctrl+C in gum input returns empty string)
|
||||||
|
if [ -z "$SELECTED_CORES" ]; then
|
||||||
|
echo "Installation cancelled by user"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ "$SELECTED_CORES" =~ ^[0-9]+$ ]] || [ "$SELECTED_CORES" -lt 1 ] || [ "$SELECTED_CORES" -gt "$TOTAL_CORES" ]; then
|
||||||
|
echo "Invalid input. Using default: 2 cores"
|
||||||
|
SELECTED_CORES=2
|
||||||
|
fi
|
||||||
|
|
||||||
|
AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}')
|
||||||
|
MAX_DISK_GB=$((AVAILABLE_SPACE - 10)) # Leave 10GB for Windows image
|
||||||
|
|
||||||
|
# Check if we have enough space for minimum
|
||||||
|
if [ $MAX_DISK_GB -lt 32 ]; then
|
||||||
|
echo "❌ Insufficient disk space for Windows VM!"
|
||||||
|
echo " Available: ${AVAILABLE_SPACE}GB"
|
||||||
|
echo " Minimum required: 42GB (32GB disk + 10GB for Windows image)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DISK_OPTIONS=""
|
||||||
|
for size in 32 64 128 256 512; do
|
||||||
|
if [ $size -le $MAX_DISK_GB ]; then
|
||||||
|
DISK_OPTIONS="$DISK_OPTIONS ${size}G"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Default to 64G if available, otherwise 32G
|
||||||
|
DEFAULT_DISK="64G"
|
||||||
|
if ! echo "$DISK_OPTIONS" | grep -q "64G"; then
|
||||||
|
DEFAULT_DISK="32G"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SELECTED_DISK=$(echo $DISK_OPTIONS | tr ' ' '\n' | gum choose --selected="$DEFAULT_DISK" --header="How much disk space would you like to give Windows VM? (64GB+ recommended)")
|
||||||
|
|
||||||
|
# Check if user cancelled
|
||||||
|
if [ -z "$SELECTED_DISK" ]; then
|
||||||
|
echo "Installation cancelled by user"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract just the number for prerequisite check
|
||||||
|
DISK_SIZE_NUM=$(echo "$SELECTED_DISK" | sed 's/G//')
|
||||||
|
|
||||||
|
# Re-check prerequisites with selected disk size
|
||||||
|
check_prerequisites "$DISK_SIZE_NUM"
|
||||||
|
|
||||||
|
# Prompt for username and password
|
||||||
|
USERNAME=$(gum input --placeholder="Username (Press enter to use default: docker)" --header="Enter Windows username:")
|
||||||
|
if [ -z "$USERNAME" ]; then
|
||||||
|
USERNAME="docker"
|
||||||
|
fi
|
||||||
|
|
||||||
|
PASSWORD=$(gum input --placeholder="Password (Press enter to use default: admin)" --password --header="Enter Windows password:")
|
||||||
|
if [ -z "$PASSWORD" ]; then
|
||||||
|
PASSWORD="admin"
|
||||||
|
PASSWORD_DISPLAY="(default)"
|
||||||
|
else
|
||||||
|
PASSWORD_DISPLAY="(user-defined)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display configuration summary
|
||||||
|
gum style \
|
||||||
|
--border normal \
|
||||||
|
--padding "1 2" \
|
||||||
|
--margin "1" \
|
||||||
|
--align left \
|
||||||
|
--bold \
|
||||||
|
"Windows VM Configuration" \
|
||||||
|
"" \
|
||||||
|
"RAM: $SELECTED_RAM" \
|
||||||
|
"CPU: $SELECTED_CORES cores" \
|
||||||
|
"Disk: $SELECTED_DISK" \
|
||||||
|
"Username: $USERNAME" \
|
||||||
|
"Password: $PASSWORD_DISPLAY"
|
||||||
|
|
||||||
|
# Ask for confirmation
|
||||||
|
echo ""
|
||||||
|
if ! gum confirm "Proceed with this configuration?"; then
|
||||||
|
echo "Installation cancelled by user"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p $HOME/Windows
|
||||||
|
|
||||||
|
# Create docker-compose.yml in user config directory
|
||||||
|
cat << EOF | tee "$COMPOSE_FILE" > /dev/null
|
||||||
|
services:
|
||||||
|
windows:
|
||||||
|
image: dockurr/windows
|
||||||
|
container_name: omarchy-windows
|
||||||
|
environment:
|
||||||
|
VERSION: "11"
|
||||||
|
RAM_SIZE: "$SELECTED_RAM"
|
||||||
|
CPU_CORES: "$SELECTED_CORES"
|
||||||
|
DISK_SIZE: "$SELECTED_DISK"
|
||||||
|
USERNAME: "$USERNAME"
|
||||||
|
PASSWORD: "$PASSWORD"
|
||||||
|
devices:
|
||||||
|
- /dev/kvm
|
||||||
|
- /dev/net/tun
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
ports:
|
||||||
|
- 8006:8006
|
||||||
|
- 3389:3389/tcp
|
||||||
|
- 3389:3389/udp
|
||||||
|
volumes:
|
||||||
|
- $HOME/.windows:/storage
|
||||||
|
- $HOME/Windows:/shared
|
||||||
|
restart: always
|
||||||
|
stop_grace_period: 2m
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Starting Windows VM installation..."
|
||||||
|
echo "This will download a Windows 11 image (may take 10-15 minutes)."
|
||||||
|
echo ""
|
||||||
|
echo "Monitor installation progress at: http://127.0.0.1:8006"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Start docker-compose with user's config
|
||||||
|
echo "Starting Windows VM with docker-compose..."
|
||||||
|
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
|
||||||
|
echo "❌ Failed to start Windows VM!"
|
||||||
|
echo " Common issues:"
|
||||||
|
echo " - Docker daemon not running: sudo systemctl start docker"
|
||||||
|
echo " - Port already in use: check if another VM is running"
|
||||||
|
echo " - Permission issues: make sure you're in the docker group"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Windows VM is starting up!"
|
||||||
|
echo ""
|
||||||
|
echo "Opening browser to monitor installation..."
|
||||||
|
|
||||||
|
# Open browser to monitor installation
|
||||||
|
sleep 3
|
||||||
|
xdg-open "http://127.0.0.1:8006"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Installation is running in the background."
|
||||||
|
echo "You can monitor progress at: http://127.0.0.1:8006"
|
||||||
|
echo ""
|
||||||
|
echo "Once finished, launch 'Windows' via Super + Space"
|
||||||
|
echo ""
|
||||||
|
echo "To stop the VM: omarchy-windows-vm stop"
|
||||||
|
echo "To change resources: ~/.config/windows/docker-compose.yml"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_windows() {
|
||||||
|
echo "Removing Windows VM..."
|
||||||
|
|
||||||
|
docker-compose -f "$COMPOSE_FILE" down 2>/dev/null || true
|
||||||
|
|
||||||
|
docker rmi dockurr/windows 2>/dev/null || echo "Image already removed or not found"
|
||||||
|
|
||||||
|
rm "$HOME/.local/share/applications/windows-vm.desktop"
|
||||||
|
rm -rf "$HOME/.config/windows"
|
||||||
|
rm -rf "$HOME/.windows"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Windows VM removal completed!"
|
||||||
|
}
|
||||||
|
|
||||||
|
launch_windows() {
|
||||||
|
KEEP_ALIVE=false
|
||||||
|
if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then
|
||||||
|
KEEP_ALIVE=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if config exists
|
||||||
|
if [ ! -f "$COMPOSE_FILE" ]; then
|
||||||
|
echo "Windows VM not configured. Please run: omarchy-windows-vm install"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if container is already running
|
||||||
|
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
|
||||||
|
|
||||||
|
if [ "$CONTAINER_STATUS" != "running" ]; then
|
||||||
|
echo "Starting Windows VM..."
|
||||||
|
|
||||||
|
# Send desktop notification
|
||||||
|
notify-send " Starting Windows VM" " This can take 15-30 seconds" -t 15000
|
||||||
|
|
||||||
|
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
|
||||||
|
echo "❌ Failed to start Windows VM!"
|
||||||
|
echo " Try checking: omarchy-windows-vm status"
|
||||||
|
echo " View logs: docker logs omarchy-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 5
|
||||||
|
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
|
||||||
|
LIFECYCLE="VM will keep running after RDP closes
|
||||||
|
To stop: omarchy-windows-vm stop"
|
||||||
|
else
|
||||||
|
LIFECYCLE="VM will auto-stop when RDP closes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
gum style \
|
||||||
|
--border normal \
|
||||||
|
--padding "1 2" \
|
||||||
|
--margin "1" \
|
||||||
|
--align center \
|
||||||
|
"Connecting to Windows VM" \
|
||||||
|
"" \
|
||||||
|
"$LIFECYCLE"
|
||||||
|
|
||||||
|
# Detect display scale from Hyprland
|
||||||
|
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale')
|
||||||
|
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
|
||||||
|
|
||||||
|
RDP_SCALE=""
|
||||||
|
if [ "$SCALE_PERCENT" -ge 170 ]; then
|
||||||
|
RDP_SCALE="/scale:180"
|
||||||
|
elif [ "$SCALE_PERCENT" -ge 130 ]; then
|
||||||
|
RDP_SCALE="/scale:140"
|
||||||
|
fi
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# After RDP closes, stop the container unless --keep-alive was specified
|
||||||
|
if [ "$KEEP_ALIVE" = false ]; then
|
||||||
|
echo ""
|
||||||
|
echo "RDP session closed. Stopping Windows VM..."
|
||||||
|
docker-compose -f "$COMPOSE_FILE" down
|
||||||
|
echo "Windows VM stopped."
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "RDP session closed. Windows VM is still running."
|
||||||
|
echo "To stop it: omarchy-windows-vm stop"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_windows() {
|
||||||
|
if [ ! -f "$COMPOSE_FILE" ]; then
|
||||||
|
echo "Windows VM not configured."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Stopping Windows VM..."
|
||||||
|
docker-compose -f "$COMPOSE_FILE" down
|
||||||
|
echo "Windows VM stopped."
|
||||||
|
}
|
||||||
|
|
||||||
|
status_windows() {
|
||||||
|
if [ ! -f "$COMPOSE_FILE" ]; then
|
||||||
|
echo "Windows VM not configured."
|
||||||
|
echo "To set up: omarchy-windows-vm install"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -z "$CONTAINER_STATUS" ]; then
|
||||||
|
echo "Windows VM container not found."
|
||||||
|
echo "To start: omarchy-windows-vm launch"
|
||||||
|
elif [ "$CONTAINER_STATUS" = "running" ]; then
|
||||||
|
gum style \
|
||||||
|
--border normal \
|
||||||
|
--padding "1 2" \
|
||||||
|
--margin "1" \
|
||||||
|
--align left \
|
||||||
|
"Windows VM Status: RUNNING" \
|
||||||
|
"" \
|
||||||
|
"Web interface: http://127.0.0.1:8006" \
|
||||||
|
"RDP available: port 3389" \
|
||||||
|
"" \
|
||||||
|
"To connect: omarchy-windows-vm launch" \
|
||||||
|
"To stop: omarchy-windows-vm stop"
|
||||||
|
else
|
||||||
|
echo "Windows VM is stopped (status: $CONTAINER_STATUS)"
|
||||||
|
echo "To start: omarchy-windows-vm launch"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
show_usage() {
|
||||||
|
echo "Usage: omarchy-windows-vm [command] [options]"
|
||||||
|
echo ""
|
||||||
|
echo "Commands:"
|
||||||
|
echo " install Install and configure Windows VM"
|
||||||
|
echo " remove Remove Windows VM and optionally its data"
|
||||||
|
echo " launch [options] Start Windows VM (if needed) and connect via RDP"
|
||||||
|
echo " Options:"
|
||||||
|
echo " --keep-alive, -k Keep VM running after RDP closes"
|
||||||
|
echo " stop Stop the running Windows VM"
|
||||||
|
echo " status Show current VM status"
|
||||||
|
echo " help Show this help message"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " omarchy-windows-vm install # Set up Windows VM for first time"
|
||||||
|
echo " omarchy-windows-vm launch # Connect to VM (auto-stop on exit)"
|
||||||
|
echo " omarchy-windows-vm launch -k # Connect to VM (keep running)"
|
||||||
|
echo " omarchy-windows-vm stop # Shut down the VM"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main command dispatcher
|
||||||
|
case "$1" in
|
||||||
|
install)
|
||||||
|
install_windows
|
||||||
|
;;
|
||||||
|
remove)
|
||||||
|
remove_windows
|
||||||
|
;;
|
||||||
|
launch|start)
|
||||||
|
launch_windows "$2"
|
||||||
|
;;
|
||||||
|
stop|down)
|
||||||
|
stop_windows
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status_windows
|
||||||
|
;;
|
||||||
|
help|--help|-h|"")
|
||||||
|
show_usage
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown command: $1" >&2
|
||||||
|
echo "" >&2
|
||||||
|
show_usage >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -16,6 +16,6 @@ decorations = "None"
|
|||||||
|
|
||||||
[keyboard]
|
[keyboard]
|
||||||
bindings = [
|
bindings = [
|
||||||
{ key = "F11", action = "ToggleFullscreen" },
|
{ key = "Insert", mods = "Shift", action = "Paste" },
|
||||||
{ key = "Insert", mods = "Shift", action = "Paste" }
|
{ key = "Insert", mods = "Control", action = "Copy" }
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
--ozone-platform=wayland
|
--ozone-platform=wayland
|
||||||
--ozone-platform-hint=wayland
|
--ozone-platform-hint=wayland
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
|
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
|
||||||
|
--disable-features=WaylandWpColorManagerV1
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
|
|||||||
|
|
||||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||||
vim_keys = False
|
vim_keys = True
|
||||||
|
|
||||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||||
rounded_corners = True
|
rounded_corners = True
|
||||||
|
|||||||
@@ -2,3 +2,5 @@
|
|||||||
--ozone-platform-hint=wayland
|
--ozone-platform-hint=wayland
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
|
--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
|
||||||
|
|||||||
1
config/elephant/calc.toml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
async = false
|
||||||
3
config/elephant/desktopapplications.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
show_actions = false
|
||||||
|
only_search_title = true
|
||||||
|
history = false
|
||||||
@@ -20,8 +20,8 @@ cursor-style-blink = false
|
|||||||
shell-integration-features = no-cursor
|
shell-integration-features = no-cursor
|
||||||
|
|
||||||
# Keyboard bindings
|
# Keyboard bindings
|
||||||
keybind = f11=toggle_fullscreen
|
|
||||||
keybind = shift+insert=paste_from_clipboard
|
keybind = shift+insert=paste_from_clipboard
|
||||||
|
keybind = control+insert=copy_to_clipboard
|
||||||
|
|
||||||
# SSH session terminfo
|
# SSH session terminfo
|
||||||
shell-integration-features = ssh-env
|
shell-integration-features = ssh-env
|
||||||
|
|||||||
@@ -3,27 +3,29 @@ $terminal = uwsm-app -- $TERMINAL
|
|||||||
$browser = omarchy-launch-browser
|
$browser = omarchy-launch-browser
|
||||||
|
|
||||||
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
|
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
|
||||||
bindd = SUPER, F, File manager, exec, uwsm-app -- nautilus --new-window
|
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||||
bindd = SUPER, B, Browser, exec, $browser
|
bindd = SUPER SHIFT, B, Browser, exec, $browser
|
||||||
bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private
|
bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private
|
||||||
bindd = SUPER, M, Music, exec, omarchy-launch-or-focus spotify
|
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
|
||||||
bindd = SUPER, N, Editor, exec, omarchy-launch-editor
|
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
|
||||||
bindd = SUPER, T, Activity, exec, $terminal -e btop
|
bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
|
||||||
bindd = SUPER, D, Docker, exec, $terminal -e lazydocker
|
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
|
||||||
bindd = SUPER, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
|
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
|
||||||
bindd = SUPER, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
|
||||||
bindd = SUPER, SLASH, Passwords, exec, uwsm-app -- 1password
|
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora
|
||||||
|
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
|
||||||
|
|
||||||
# If your web app url contains #, type it as ## to prevent hyprland from treating it as a comment
|
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
|
||||||
bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
|
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
|
||||||
bindd = SUPER SHIFT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
|
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
|
||||||
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
|
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
|
||||||
bindd = SUPER, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
|
bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
|
||||||
bindd = SUPER, Y, YouTube, exec, omarchy-launch-or-focus-webapp YouTube "https://youtube.com/"
|
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
|
||||||
bindd = SUPER SHIFT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
|
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
|
||||||
bindd = SUPER ALT, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
|
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
|
||||||
bindd = SUPER, X, X, exec, omarchy-launch-webapp "https://x.com/"
|
bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"
|
||||||
bindd = SUPER SHIFT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
|
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
|
||||||
|
bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
|
||||||
|
|
||||||
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space
|
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space
|
||||||
# unbind = SUPER, SPACE
|
# unbind = SUPER, SPACE
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
# Use defaults Omarchy defaults (but don't edit these directly!)
|
# Use defaults Omarchy defaults (but don't edit these directly!)
|
||||||
source = ~/.local/share/omarchy/default/hypr/autostart.conf
|
source = ~/.local/share/omarchy/default/hypr/autostart.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf
|
||||||
|
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/envs.conf
|
source = ~/.local/share/omarchy/default/hypr/envs.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
|
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
|
||||||
@@ -18,3 +19,6 @@ source = ~/.config/hypr/bindings.conf
|
|||||||
source = ~/.config/hypr/envs.conf
|
source = ~/.config/hypr/envs.conf
|
||||||
source = ~/.config/hypr/looknfeel.conf
|
source = ~/.config/hypr/looknfeel.conf
|
||||||
source = ~/.config/hypr/autostart.conf
|
source = ~/.config/hypr/autostart.conf
|
||||||
|
|
||||||
|
# Add any other personal Hyprland configuration below
|
||||||
|
# windowrule = workspace 5, class:qemu
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ animations {
|
|||||||
|
|
||||||
input-field {
|
input-field {
|
||||||
monitor =
|
monitor =
|
||||||
size = 600, 100
|
size = 650, 100
|
||||||
position = 0, 0
|
position = 0, 0
|
||||||
halign = center
|
halign = center
|
||||||
valign = center
|
valign = center
|
||||||
@@ -22,12 +22,12 @@ input-field {
|
|||||||
outer_color = $outer_color
|
outer_color = $outer_color
|
||||||
outline_thickness = 4
|
outline_thickness = 4
|
||||||
|
|
||||||
font_family = CaskaydiaMono Nerd Font
|
font_family = CaskaydiaMono Nerd Font Propo
|
||||||
font_color = $font_color
|
font_color = $font_color
|
||||||
|
|
||||||
placeholder_text = Enter Password
|
placeholder_text = Enter Password
|
||||||
check_color = $check_color
|
check_color = $check_color
|
||||||
fail_text = <i>$PAMFAIL ($ATTEMPTS)</i>
|
fail_text = <i>$FAIL ($ATTEMPTS)</i>
|
||||||
|
|
||||||
rounding = 0
|
rounding = 0
|
||||||
shadow_passes = 0
|
shadow_passes = 0
|
||||||
|
|||||||
@@ -4,3 +4,9 @@ profile {
|
|||||||
time = 07:00
|
time = 07:00
|
||||||
identity = true
|
identity = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Enable auto switch to nightlight:
|
||||||
|
# profile {
|
||||||
|
# time = 20:00
|
||||||
|
# temperature = 4000
|
||||||
|
# }
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
# List current monitors and resolutions possible: hyprctl monitors
|
# List current monitors and resolutions possible: hyprctl monitors
|
||||||
# Format: monitor = [port], resolution, position, scale
|
# Format: monitor = [port], resolution, position, scale
|
||||||
# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)
|
|
||||||
|
|
||||||
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
|
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
|
||||||
env = GDK_SCALE,2
|
env = GDK_SCALE,2
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ show_window_resize_notification no
|
|||||||
confirm_os_window_close 0
|
confirm_os_window_close 0
|
||||||
|
|
||||||
# Keybindings
|
# Keybindings
|
||||||
map F11 toggle_fullscreen
|
map ctrl+insert copy_to_clipboard
|
||||||
|
map shift+insert paste_from_clipboard
|
||||||
|
|
||||||
# Allow remote access
|
# Allow remote access
|
||||||
single_instance yes
|
single_instance yes
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"extras": [
|
|
||||||
"lazyvim.plugins.extras.editor.neo-tree"
|
|
||||||
],
|
|
||||||
"install_version": 8,
|
|
||||||
"news": {
|
|
||||||
"NEWS.md": "10960"
|
|
||||||
},
|
|
||||||
"version": 8
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
return {
|
|
||||||
-- Load all theme plugins but don't apply them
|
|
||||||
-- This ensures all colorschemes are available for hot-reloading
|
|
||||||
{
|
|
||||||
"ribru17/bamboo.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"catppuccin/nvim",
|
|
||||||
name = "catppuccin",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sainnhe/everforest",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ellisonleao/gruvbox.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rebelot/kanagawa.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tahayvr/matteblack.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"loctvl842/monokai-pro.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"shaunsingh/nord.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rose-pine/neovim",
|
|
||||||
name = "rose-pine",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"folke/tokyonight.nvim",
|
|
||||||
lazy = true,
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
return {
|
|
||||||
{
|
|
||||||
name = "theme-hotreload",
|
|
||||||
dir = vim.fn.stdpath("config"),
|
|
||||||
lazy = false,
|
|
||||||
priority = 1000,
|
|
||||||
config = function()
|
|
||||||
local transparency_file = vim.fn.stdpath("config") .. "/plugin/after/transparency.lua"
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("User", {
|
|
||||||
pattern = "LazyReload",
|
|
||||||
callback = function()
|
|
||||||
package.loaded["plugins.theme"] = nil
|
|
||||||
|
|
||||||
vim.schedule(function()
|
|
||||||
local ok, theme_spec = pcall(require, "plugins.theme")
|
|
||||||
if not ok then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, spec in ipairs(theme_spec) do
|
|
||||||
if spec[1] == "LazyVim/LazyVim" and spec.opts and spec.opts.colorscheme then
|
|
||||||
local colorscheme = spec.opts.colorscheme
|
|
||||||
|
|
||||||
require("lazy.core.loader").colorscheme(colorscheme)
|
|
||||||
|
|
||||||
vim.defer_fn(function()
|
|
||||||
pcall(vim.cmd.colorscheme, colorscheme)
|
|
||||||
|
|
||||||
if vim.fn.filereadable(transparency_file) == 1 then
|
|
||||||
vim.defer_fn(function()
|
|
||||||
vim.cmd.source(transparency_file)
|
|
||||||
end, 5)
|
|
||||||
end
|
|
||||||
end, 5)
|
|
||||||
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
return {
|
|
||||||
"folke/snacks.nvim",
|
|
||||||
opts = {
|
|
||||||
scroll = {
|
|
||||||
enabled = false, -- Disable scrolling animations
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
-- transparent background
|
|
||||||
vim.api.nvim_set_hl(0, "Normal", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "FloatBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "Pmenu", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "Terminal", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "FoldColumn", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "Folded", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "SignColumn", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NormalNC", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "WhichKeyFloat", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "TelescopeBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "TelescopeNormal", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "TelescopePromptBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "TelescopePromptTitle", { bg = "none" })
|
|
||||||
|
|
||||||
-- transparent background for neotree
|
|
||||||
vim.api.nvim_set_hl(0, "NeoTreeNormal", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NeoTreeNormalNC", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NeoTreeVertSplit", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NeoTreeWinSeparator", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NeoTreeEndOfBuffer", { bg = "none" })
|
|
||||||
|
|
||||||
-- transparent background for nvim-tree
|
|
||||||
vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NvimTreeVertSplit", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NvimTreeEndOfBuffer", { bg = "none" })
|
|
||||||
|
|
||||||
-- transparent notify background
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyINFOBody", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyERRORBody", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyWARNBody", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyTRACEBody", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyDEBUGBody", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyINFOTitle", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyERRORTitle", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyWARNTitle", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyTRACETitle", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyDEBUGTitle", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyINFOBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyERRORBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyWARNBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyTRACEBorder", { bg = "none" })
|
|
||||||
vim.api.nvim_set_hl(0, "NotifyDEBUGBorder", { bg = "none" })
|
|
||||||
7
config/omarchy/hooks/font-set.sample
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This hook is called with the snake-cased name of the font that has just been set.
|
||||||
|
# To put it into use, remove .sample from the name.
|
||||||
|
|
||||||
|
# Example: Show the name of the theme that was just set.
|
||||||
|
# notify-send "New font" "Your new font is $1"
|
||||||
7
config/omarchy/hooks/post-update.sample
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This hook is called after an Omarchy system update has been performed.
|
||||||
|
# To put it into use, remove .sample from the name.
|
||||||
|
|
||||||
|
# Example: Show notification after the system has been updated.
|
||||||
|
# notify-send "Update Performed" "Your system is now up to date"
|
||||||
7
config/omarchy/hooks/theme-set.sample
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This hook is called with the snake-cased name of the theme that has just been set.
|
||||||
|
# To put it into use, remove .sample from the name.
|
||||||
|
|
||||||
|
# Example: Show the name of the theme that was just set.
|
||||||
|
# notify-send "New theme" "Your new theme is $1"
|
||||||
@@ -6,3 +6,4 @@ After=graphical-session.target
|
|||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor
|
ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor
|
||||||
Environment=DISPLAY=:0
|
Environment=DISPLAY=:0
|
||||||
|
LogLevelMax=warning
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
# Changes require a relaunch of Hyprland to take effect.
|
# Changes require a restart to take effect.
|
||||||
|
|
||||||
|
# Install other terminals via Install > Terminal
|
||||||
export TERMINAL=alacritty
|
export TERMINAL=alacritty
|
||||||
|
|
||||||
|
# Use code for VSCode
|
||||||
export EDITOR=nvim
|
export EDITOR=nvim
|
||||||
|
|
||||||
|
# Use a custom directory for screenshots (remember to make the directory!)
|
||||||
|
# export OMARCHY_SCREENSHOT_DIR="$HOME/Pictures/Screenshots"
|
||||||
|
|
||||||
|
# Use a custom directory for screenrecordings (remember to make the directory!)
|
||||||
|
# export OMARCHY_SCREENRECORD_DIR="$HOME/Videos/Screencasts"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Changes require a relaunch of Hyprland to take effect.
|
# Changes require a restart to take effect.
|
||||||
|
|
||||||
# Ensure Omarchy bins are in the path
|
# Ensure Omarchy bins are in the path
|
||||||
export OMARCHY_PATH=$HOME/.local/share/omarchy
|
export OMARCHY_PATH=$HOME/.local/share/omarchy
|
||||||
|
|||||||
@@ -1,100 +1,145 @@
|
|||||||
close_when_open = true
|
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
|
||||||
theme = "omarchy-default"
|
close_when_open = true # close walker when invoking while already opened
|
||||||
theme_base = []
|
selection_wrap = true # wrap list if at bottom or top
|
||||||
theme_location = ["~/.local/share/omarchy/default/walker/themes/"]
|
click_to_close = true # closes walker if clicking outside of the main content area
|
||||||
hotreload_theme = true
|
global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config
|
||||||
force_keyboard_focus = true
|
exact_search_prefix = "'" # disable fuzzy searching
|
||||||
timeout = 60
|
theme = "omarchy-default" # theme to use
|
||||||
|
disable_mouse = false # disable mouse (on input and list only)
|
||||||
|
additional_theme_location = "~/.local/share/omarchy/default/walker/themes/"
|
||||||
|
|
||||||
[keys.ai]
|
[shell]
|
||||||
run_last_response = ["ctrl e"]
|
anchor_top = true
|
||||||
|
anchor_bottom = true
|
||||||
|
anchor_left = true
|
||||||
|
anchor_right = true
|
||||||
|
|
||||||
[list]
|
[placeholders]
|
||||||
max_entries = 200
|
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
||||||
cycle = true
|
|
||||||
|
|
||||||
[search]
|
[keybinds]
|
||||||
placeholder = " Search..."
|
close = ["Escape"]
|
||||||
|
next = ["Down"]
|
||||||
|
previous = ["Up"]
|
||||||
|
toggle_exact = ["ctrl e"]
|
||||||
|
resume_last_query = ["ctrl r"]
|
||||||
|
quick_activate = []
|
||||||
|
|
||||||
[builtins.hyprland_keybinds]
|
[providers]
|
||||||
path = "~/.config/hypr/hyprland.conf"
|
default = [
|
||||||
hidden = true
|
"desktopapplications",
|
||||||
|
"menus",
|
||||||
|
"websearch",
|
||||||
|
] # providers to be queried by default
|
||||||
|
empty = ["desktopapplications"] # providers to be queried when query is empty
|
||||||
|
max_results = 50 # global max results
|
||||||
|
|
||||||
[builtins.applications]
|
[providers.sets] # define your own defaults/empty sets of providers
|
||||||
launch_prefix = "uwsm-app -- "
|
[providers.max_results_provider] # define max results per provider in here
|
||||||
placeholder = " Search..."
|
|
||||||
prioritize_new = false
|
|
||||||
context_aware = false
|
|
||||||
show_sub_when_single = false
|
|
||||||
history = false
|
|
||||||
icon = ""
|
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.applications.actions]
|
[[providers.prefixes]]
|
||||||
enabled = false
|
prefix = "/"
|
||||||
hide_category = true
|
provider = "providerlist"
|
||||||
|
|
||||||
[builtins.bookmarks]
|
[[providers.prefixes]]
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[[builtins.bookmarks.entries]]
|
|
||||||
label = "Omarchy - Github"
|
|
||||||
url = "https://github.com/basecamp/omarchy"
|
|
||||||
keywords = ["omarchy", "github"]
|
|
||||||
|
|
||||||
[[builtins.bookmarks.entries]]
|
|
||||||
label = "Omarchy Manual"
|
|
||||||
url = "https://manuals.omamix.org/2/the-omarchy-manual"
|
|
||||||
keywords = ["omarchy"]
|
|
||||||
|
|
||||||
[builtins.calc]
|
|
||||||
name = "Calculator"
|
|
||||||
icon = ""
|
|
||||||
min_chars = 3
|
|
||||||
prefix = "="
|
|
||||||
|
|
||||||
[builtins.windows]
|
|
||||||
switcher_only = true
|
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.clipboard]
|
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.commands]
|
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.custom_commands]
|
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.emojis]
|
|
||||||
name = "Emojis"
|
|
||||||
icon = ""
|
|
||||||
prefix = ":"
|
|
||||||
|
|
||||||
[builtins.symbols]
|
|
||||||
after_copy = ""
|
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.finder]
|
|
||||||
use_fd = true
|
|
||||||
cmd_alt = "xdg-open $(dirname ~/%RESULT%)"
|
|
||||||
icon = "file"
|
|
||||||
name = "Finder"
|
|
||||||
preview_images = true
|
|
||||||
hidden = false
|
|
||||||
prefix = "."
|
prefix = "."
|
||||||
|
provider = "files"
|
||||||
|
|
||||||
[builtins.runner]
|
[[providers.prefixes]]
|
||||||
shell_config = ""
|
prefix = ":"
|
||||||
switcher_only = true
|
provider = "symbols"
|
||||||
hidden = true
|
|
||||||
|
|
||||||
[builtins.ssh]
|
[[providers.prefixes]]
|
||||||
hidden = true
|
prefix = "="
|
||||||
|
provider = "calc"
|
||||||
|
|
||||||
[builtins.websearch]
|
[[providers.prefixes]]
|
||||||
switcher_only = true
|
prefix = "@"
|
||||||
hidden = true
|
provider = "websearch"
|
||||||
|
|
||||||
[builtins.translation]
|
[[providers.prefixes]]
|
||||||
hidden = true
|
prefix = "$"
|
||||||
|
provider = "clipboard"
|
||||||
|
|
||||||
|
[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies
|
||||||
|
dmenu = [{ action = "select", default = true, bind = "Return" }]
|
||||||
|
|
||||||
|
providerlist = [
|
||||||
|
{ action = "activate", default = true, bind = "Return", after = "ClearReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
bluetooth = [
|
||||||
|
{ action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" },
|
||||||
|
{ action = "trust", bind = "ctrl t", after = "AsyncReload" },
|
||||||
|
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" },
|
||||||
|
{ action = "pair", bind = "Return", after = "AsyncReload" },
|
||||||
|
{ action = "remove", bind = "ctrl d", after = "AsyncReload" },
|
||||||
|
{ action = "connect", bind = "Return", after = "AsyncReload" },
|
||||||
|
{ action = "disconnect", bind = "Return", after = "AsyncReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
archlinuxpkgs = [
|
||||||
|
{ action = "install", bind = "Return", default = true },
|
||||||
|
{ action = "remove", bind = "Return" },
|
||||||
|
]
|
||||||
|
|
||||||
|
calc = [
|
||||||
|
{ action = "copy", default = true, bind = "Return" },
|
||||||
|
{ action = "delete", bind = "ctrl d", after = "AsyncReload" },
|
||||||
|
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
websearch = [
|
||||||
|
{ action = "search", default = true, bind = "Return" },
|
||||||
|
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
desktopapplications = [
|
||||||
|
{ action = "start", default = true, bind = "Return" },
|
||||||
|
{ action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
|
||||||
|
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
|
||||||
|
{ action = "pin", bind = "ctrl p", after = "AsyncReload" },
|
||||||
|
{ action = "unpin", bind = "ctrl p", after = "AsyncReload" },
|
||||||
|
{ action = "pinup", bind = "ctrl n", after = "AsyncReload" },
|
||||||
|
{ action = "pindown", bind = "ctrl m", after = "AsyncReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
files = [
|
||||||
|
{ action = "open", default = true, bind = "Return" },
|
||||||
|
{ action = "opendir", label = "open dir", bind = "ctrl Return" },
|
||||||
|
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
|
||||||
|
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
|
||||||
|
]
|
||||||
|
|
||||||
|
todo = [
|
||||||
|
{ action = "save", default = true, bind = "Return", after = "ClearReload" },
|
||||||
|
{ action = "delete", bind = "ctrl d", after = "ClearReload" },
|
||||||
|
{ action = "active", bind = "Return", after = "ClearReload" },
|
||||||
|
{ action = "inactive", bind = "Return", after = "ClearReload" },
|
||||||
|
{ action = "done", bind = "ctrl f", after = "ClearReload" },
|
||||||
|
{ action = "clear", bind = "ctrl x", after = "ClearReload", global = true },
|
||||||
|
]
|
||||||
|
|
||||||
|
runner = [
|
||||||
|
{ action = "run", default = true, bind = "Return" },
|
||||||
|
{ action = "runterminal", label = "run in terminal", bind = "shift Return" },
|
||||||
|
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
symbols = [
|
||||||
|
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
|
||||||
|
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
unicode = [
|
||||||
|
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
|
||||||
|
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
clipboard = [
|
||||||
|
{ action = "copy", default = true, bind = "Return" },
|
||||||
|
{ action = "remove", bind = "ctrl d", after = "ClearReload" },
|
||||||
|
{ action = "remove_all", global = true, label = "clear", bind = "ctrl shift d", after = "ClearReload" },
|
||||||
|
{ action = "toggle_images", global = true, label = "toggle images", bind = "ctrl i", after = "ClearReload" },
|
||||||
|
{ action = "edit", bind = "ctrl o" },
|
||||||
|
]
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
"custom/omarchy": {
|
"custom/omarchy": {
|
||||||
"format": "<span font='omarchy'>\ue900</span>",
|
"format": "<span font='omarchy'>\ue900</span>",
|
||||||
"on-click": "omarchy-menu",
|
"on-click": "omarchy-menu",
|
||||||
|
"on-click-right": "omarchy-launch-terminal",
|
||||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||||
},
|
},
|
||||||
"custom/update": {
|
"custom/update": {
|
||||||
@@ -61,7 +62,7 @@
|
|||||||
"format": "{:L%A %H:%M}",
|
"format": "{:L%A %H:%M}",
|
||||||
"format-alt": "{:L%d %B W%V %Y}",
|
"format-alt": "{:L%d %B W%V %Y}",
|
||||||
"tooltip": false,
|
"tooltip": false,
|
||||||
"on-click-right": "omarchy-cmd-tzupdate"
|
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"format-icons": ["", "", "", "", ""],
|
"format-icons": ["", "", "", "", ""],
|
||||||
@@ -133,6 +134,6 @@
|
|||||||
},
|
},
|
||||||
"tray": {
|
"tray": {
|
||||||
"icon-size": 12,
|
"icon-size": 12,
|
||||||
"spacing": 12
|
"spacing": 17
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
font-family: CaskaydiaMono Nerd Font;
|
font-family: 'CaskaydiaMono Nerd Font';
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,11 +30,8 @@
|
|||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tray,
|
|
||||||
#cpu,
|
#cpu,
|
||||||
#battery,
|
#battery,
|
||||||
#network,
|
|
||||||
#bluetooth,
|
|
||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
#custom-omarchy,
|
#custom-omarchy,
|
||||||
#custom-screenrecording-indicator,
|
#custom-screenrecording-indicator,
|
||||||
@@ -43,8 +40,20 @@
|
|||||||
margin: 0 7.5px;
|
margin: 0 7.5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth {
|
||||||
|
margin-right: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
margin-right: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
#custom-expand-icon {
|
#custom-expand-icon {
|
||||||
margin-right: 7px;
|
margin-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tooltip {
|
tooltip {
|
||||||
|
|||||||
@@ -9,6 +9,5 @@ if [[ ! -v BASH_COMPLETION_VERSINFO && -f /usr/share/bash-completion/bash_comple
|
|||||||
source /usr/share/bash-completion/bash_completion
|
source /usr/share/bash-completion/bash_completion
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set complete path
|
# Ensure command hashing is off for mise
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
set +h
|
set +h
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# If not running interactively, don't do anything (leave this at the top of this file)
|
||||||
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
# All the default Omarchy aliases and functions
|
# All the default Omarchy aliases and functions
|
||||||
# (don't mess with these directly, just overwrite them here!)
|
# (don't mess with these directly, just overwrite them here!)
|
||||||
source ~/.local/share/omarchy/default/bash/rc
|
source ~/.local/share/omarchy/default/bash/rc
|
||||||
|
|||||||
@@ -12,3 +12,4 @@ source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
|
|||||||
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
|
||||||
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
|
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
|
||||||
|
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Browser types
|
# Browser types
|
||||||
windowrule = tag +chromium-based-browser, class:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium)
|
windowrule = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium)
|
||||||
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
|
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
|
||||||
|
|
||||||
# Force chromium-based browsers into a tile to deal with --app bug
|
# Force chromium-based browsers into a tile to deal with --app bug
|
||||||
|
|||||||
6
default/hypr/apps/webcam-overlay.conf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Webcam overlay for screen recording
|
||||||
|
windowrule = float, title:WebcamOverlay
|
||||||
|
windowrule = pin, title:WebcamOverlay
|
||||||
|
windowrule = noinitialfocus, title:WebcamOverlay
|
||||||
|
windowrule = nodim, title:WebcamOverlay
|
||||||
|
windowrule = move 100%-w-40 100%-w-40, title:WebcamOverlay # There's a typo in the hyprland rule so 100%-w on the height param is actually correct here
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
exec-once = uwsm app -- hypridle
|
exec-once = uwsm-app -- hypridle
|
||||||
exec-once = uwsm app -- mako
|
exec-once = uwsm-app -- mako
|
||||||
exec-once = uwsm app -- waybar
|
exec-once = uwsm-app -- waybar
|
||||||
exec-once = uwsm app -- fcitx5
|
exec-once = uwsm-app -- fcitx5
|
||||||
exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill
|
exec-once = uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill
|
||||||
exec-once = uwsm app -- swayosd-server
|
exec-once = uwsm-app -- swayosd-server
|
||||||
exec-once = uwsm app -- walker --gapplication-service
|
|
||||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+'
|
|
||||||
exec-once = omarchy-cmd-first-run
|
exec-once = omarchy-cmd-first-run
|
||||||
|
exec-once = uwsm-app -- elephant
|
||||||
|
exec-once = uwsm-app -- walker --gapplication-service
|
||||||
|
|||||||
5
default/hypr/bindings/clipboard.conf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Copy / Paste
|
||||||
|
bindd = SUPER, C, Copy, sendshortcut, CTRL, Insert,
|
||||||
|
bindd = SUPER, V, Paste, sendshortcut, SHIFT, Insert,
|
||||||
|
bindd = SUPER, X, Cut, sendshortcut, CTRL, X,
|
||||||
|
bindd = SUPER CTRL, V, Clipboard, exec, omarchy-launch-walker -m clipboard
|
||||||
97
default/hypr/bindings/tiling-v2.conf
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
# Close windows
|
||||||
|
bindd = SUPER, W, Close active window, killactive,
|
||||||
|
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-hyprland-window-close-all
|
||||||
|
|
||||||
|
# Control tiling
|
||||||
|
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
|
||||||
|
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||||
|
bindd = SUPER, T, Toggle floating, togglefloating,
|
||||||
|
bindd = SUPER, F, Force full screen, fullscreen, 0
|
||||||
|
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
|
||||||
|
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
||||||
|
|
||||||
|
# Move focus with SUPER + arrow keys
|
||||||
|
bindd = SUPER, LEFT, Move focus left, movefocus, l
|
||||||
|
bindd = SUPER, RIGHT, Move focus right, movefocus, r
|
||||||
|
bindd = SUPER, UP, Move focus up, movefocus, u
|
||||||
|
bindd = SUPER, DOWN, Move focus down, movefocus, d
|
||||||
|
|
||||||
|
# Switch workspaces with SUPER + [0-9]
|
||||||
|
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||||
|
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||||
|
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||||
|
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||||
|
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||||
|
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||||
|
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||||
|
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||||
|
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||||
|
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with SUPER + SHIFT + [0-9]
|
||||||
|
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||||
|
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||||
|
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||||
|
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||||
|
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||||
|
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||||
|
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||||
|
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||||
|
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||||
|
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||||
|
|
||||||
|
# TAB between workspaces
|
||||||
|
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||||
|
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||||
|
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||||
|
|
||||||
|
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||||
|
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||||
|
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||||
|
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||||
|
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||||
|
|
||||||
|
# Cycle through applications on active workspace
|
||||||
|
bindd = ALT, TAB, Cycle to next window, cyclenext
|
||||||
|
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
|
||||||
|
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||||
|
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||||
|
|
||||||
|
# Resize active window
|
||||||
|
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||||
|
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
|
||||||
|
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
|
||||||
|
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with SUPER + scroll
|
||||||
|
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
|
||||||
|
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||||
|
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||||
|
|
||||||
|
# Toggle groups
|
||||||
|
bindd = SUPER, G, Toggle window grouping, togglegroup
|
||||||
|
bindd = SUPER ALT, G, Move active window out of group, moveoutofgroup
|
||||||
|
|
||||||
|
# Join groups
|
||||||
|
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
|
||||||
|
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
|
||||||
|
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
|
||||||
|
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
|
||||||
|
|
||||||
|
# Navigate a single set of grouped windows
|
||||||
|
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
||||||
|
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
||||||
|
|
||||||
|
# Scroll through a set of grouped windows with SUPER + ALT + scroll
|
||||||
|
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f
|
||||||
|
bindd = SUPER ALT, mouse_up, Previous window in group, changegroupactive, b
|
||||||
|
|
||||||
|
# Activate window in a group by number
|
||||||
|
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
|
||||||
|
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
|
||||||
|
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
|
||||||
|
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
|
||||||
|
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
|
# This is now a deprecated file meant for those who did not wish to learn the latest Omarchy hotkeys.
|
||||||
|
# Do not make changes here, but bring them to tiling-v2.conf instead.
|
||||||
|
|
||||||
# Close windows
|
# Close windows
|
||||||
bindd = SUPER, W, Close active window, killactive,
|
bindd = SUPER, W, Close active window, killactive,
|
||||||
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
|
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-hyprland-window-close-all
|
||||||
|
|
||||||
# Control tiling
|
# Control tiling
|
||||||
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
|
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
|
||||||
@@ -69,24 +72,3 @@ bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1
|
|||||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
bindmd = SUPER, mouse:272, Move window, movewindow
|
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||||
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||||
|
|
||||||
# Toggle groups
|
|
||||||
bindd = SUPER ALT, RETURN, Toggle window grouping, togglegroup
|
|
||||||
bindd = SUPER ALT, BACKSPACE, Move active window out of group, moveoutofgroup
|
|
||||||
|
|
||||||
# Join groups
|
|
||||||
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
|
|
||||||
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
|
|
||||||
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
|
|
||||||
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
|
|
||||||
|
|
||||||
# Navigate a single set of grouped windows
|
|
||||||
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
|
||||||
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
|
||||||
|
|
||||||
# Activate window in a group by number
|
|
||||||
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
|
|
||||||
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
|
|
||||||
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
|
|
||||||
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
|
|
||||||
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Menus
|
# Menus
|
||||||
bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…"
|
bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
|
||||||
bindd = SUPER CTRL, E, Emoji picker, exec, walker -m Emojis
|
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
|
||||||
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
||||||
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
|
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
|
||||||
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
|
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
|
||||||
@@ -12,6 +12,7 @@ bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
|
|||||||
bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next
|
bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next
|
||||||
bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, omarchy-menu theme
|
bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, omarchy-menu theme
|
||||||
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
|
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
|
||||||
|
bindd = SUPER SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-workspace-toggle-gaps
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
||||||
@@ -29,23 +30,15 @@ bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-cmd-apple-display
|
|||||||
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000
|
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000
|
||||||
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
|
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
|
||||||
|
|
||||||
# Screenshots
|
# Captures
|
||||||
bindd = , PRINT, Screenshot of region, exec, omarchy-cmd-screenshot
|
bindd = , PRINT, Screenshot with Editing, exec, omarchy-cmd-screenshot
|
||||||
bindd = SHIFT, PRINT, Screenshot of window, exec, omarchy-cmd-screenshot window
|
bindd = SHIFT, PRINT, Screenshot to Clipboard, exec, omarchy-cmd-screenshot smart clipboard
|
||||||
bindd = CTRL, PRINT, Screenshot of display, exec, omarchy-cmd-screenshot output
|
bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord
|
||||||
|
bindd = SUPER, PRINT, Color picking, exec, pkill hyprpicker || hyprpicker -a
|
||||||
# Screen recordings
|
|
||||||
bindd = ALT, PRINT, Screen record a region, exec, omarchy-cmd-screenrecord region
|
|
||||||
bindd = ALT SHIFT, PRINT, Screen record a region with audio, exec, omarchy-cmd-screenrecord region audio
|
|
||||||
bindd = CTRL ALT, PRINT, Screen record display, exec, omarchy-cmd-screenrecord output
|
|
||||||
bindd = CTRL ALT SHIFT, PRINT, Screen record display with audio, exec, omarchy-cmd-screenrecord output audio
|
|
||||||
|
|
||||||
# Color picker
|
|
||||||
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
|
|
||||||
|
|
||||||
# File sharing
|
# File sharing
|
||||||
bindd = CTRL SUPER, S, Share, exec, omarchy-menu share
|
bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
|
||||||
|
|
||||||
# Copy / Paste
|
# Waybar-less information
|
||||||
bind = SUPER, C, sendshortcut, CTRL, Insert,
|
bindd = SUPER CTRL, T, Show time, exec, notify-send " $(date +"%A %H:%M — %d %B W%V %Y")"
|
||||||
bind = SUPER, V, sendshortcut, SHIFT, Insert,
|
bindd = SUPER CTRL, B, Show battery remaining, exec, notify-send " Battery is at $(omarchy-battery-remaining)%"
|
||||||
|
|||||||
@@ -39,9 +39,7 @@ decoration {
|
|||||||
blur {
|
blur {
|
||||||
enabled = true
|
enabled = true
|
||||||
size = 3
|
size = 3
|
||||||
passes = 1
|
passes = 3
|
||||||
|
|
||||||
vibrancy = 0.1696
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +70,6 @@ group {
|
|||||||
gradients = true
|
gradients = true
|
||||||
gradient_rounding = 0
|
gradient_rounding = 0
|
||||||
gradient_round_only_edges = false
|
gradient_round_only_edges = false
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
anchor=top-right
|
anchor=top-right
|
||||||
default-timeout=5000
|
default-timeout=5000
|
||||||
width=420
|
width=420
|
||||||
height=110
|
|
||||||
outer-margin=20
|
outer-margin=20
|
||||||
padding=10,15
|
padding=10,15
|
||||||
border-size=2
|
border-size=2
|
||||||
max-icon-size=32
|
max-icon-size=32
|
||||||
font=sans-serif 14px
|
font=sans-serif 14px
|
||||||
format=<span line_height="1.2"><b>%s</b>\n%b</span>
|
|
||||||
|
|
||||||
[app-name=Spotify]
|
[app-name=Spotify]
|
||||||
invisible=1
|
invisible=1
|
||||||
@@ -26,3 +24,6 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Setup Wi-Fi"; omarchy-l
|
|||||||
|
|
||||||
[summary~="Update System"]
|
[summary~="Update System"]
|
||||||
on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update'
|
on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update'
|
||||||
|
|
||||||
|
[summary~="Learn Keybindings"]
|
||||||
|
on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings'
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
|
|
||||||
@import url("file://~/.config/omarchy/current/theme/walker.css");
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
[ui.window.box]
|
|
||||||
width = 150
|
|
||||||
|
|
||||||
[ui.window.box.scroll.list]
|
|
||||||
max_width = 150
|
|
||||||
min_width = 150
|
|
||||||
width = 150
|
|
||||||
|
|
||||||
[ui.window.box.search]
|
|
||||||
hide = false
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
|
|
||||||
@import url("file://~/.config/omarchy/current/theme/walker.css");
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
[ui.window.box]
|
|
||||||
width = 250
|
|
||||||
|
|
||||||
[ui.window.box.scroll.list]
|
|
||||||
max_width = 250
|
|
||||||
min_width = 250
|
|
||||||
width = 250
|
|
||||||
max_height = 600
|
|
||||||
|
|
||||||
[ui.window.box.search]
|
|
||||||
hide = false
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
|
|
||||||
@import url("file://~/.config/omarchy/current/theme/walker.css");
|
|
||||||