mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-03 04:37:48 +02:00
Compare commits
92
Commits
@@ -2,15 +2,11 @@
|
||||
|
||||
# Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
|
||||
|
||||
focused_monitor=$(omarchy-hyprland-monitor-focused)
|
||||
|
||||
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
|
||||
sinks_count=$(echo "$sinks" | jq '. | length')
|
||||
|
||||
if (( sinks_count == 0 )); then
|
||||
swayosd-client \
|
||||
--monitor "$focused_monitor" \
|
||||
--custom-message "No audio devices found"
|
||||
omarchy-swayosd-client --custom-message "No audio devices found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -57,10 +53,10 @@ fi
|
||||
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
|
||||
|
||||
if [[ $next_sink_name != $current_sink_name ]]; then
|
||||
pactl set-default-sink "$next_sink_name"
|
||||
next_sink_wpid=$(echo "$next_sink" | jq -r '.properties."object.id"')
|
||||
wpctl set-default "$next_sink_wpid"
|
||||
fi
|
||||
|
||||
swayosd-client \
|
||||
--monitor "$focused_monitor" \
|
||||
omarchy-swayosd-client \
|
||||
--custom-message "$next_sink_description" \
|
||||
--custom-icon "$next_sink_volume_icon"
|
||||
|
||||
@@ -10,6 +10,7 @@ if [[ -f $FIRST_RUN_MODE ]]; then
|
||||
rm -f "$FIRST_RUN_MODE"
|
||||
|
||||
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
|
||||
bash "$OMARCHY_PATH/install/first-run/recover-internal-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/dns-resolver.sh"
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Toggle microphone mute. Dell XPS systems get special handling for the hardware LED.
|
||||
# Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
|
||||
|
||||
if omarchy-hw-match "XPS"; then
|
||||
omarchy-cmd-mic-mute-xps
|
||||
elif omarchy-hw-match "ThinkPad"; then
|
||||
omarchy-cmd-mic-mute-thinkpad
|
||||
else
|
||||
swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)" --input-volume mute-toggle
|
||||
omarchy-swayosd-client --input-volume mute-toggle
|
||||
fi
|
||||
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Toggle microphone mute on ThinkPad systems. Uses wpctl for reliable toggling
|
||||
# and syncs the platform::micmute LED via brightnessctl.
|
||||
|
||||
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
|
||||
|
||||
if pactl get-source-mute @DEFAULT_SOURCE@ | grep -q 'yes'; then
|
||||
osd_message='Microphone muted'
|
||||
osd_icon='microphone-sensitivity-muted-symbolic'
|
||||
led_value=1
|
||||
else
|
||||
osd_message='Microphone on'
|
||||
osd_icon='audio-input-microphone-symbolic'
|
||||
led_value=0
|
||||
fi
|
||||
|
||||
brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true
|
||||
|
||||
swayosd-client \
|
||||
--monitor "$(omarchy-hyprland-monitor-focused)" \
|
||||
--custom-message "$osd_message" \
|
||||
--custom-icon "$osd_icon"
|
||||
@@ -38,7 +38,6 @@ if [[ -e /sys/class/leds/platform::micmute/brightness ]]; then
|
||||
done
|
||||
fi
|
||||
|
||||
swayosd-client \
|
||||
--monitor "$(omarchy-hyprland-monitor-focused)" \
|
||||
omarchy-swayosd-client \
|
||||
--custom-message "$osd_message" \
|
||||
--custom-icon "$osd_icon"
|
||||
|
||||
@@ -134,7 +134,7 @@ stop_screenrecording() {
|
||||
pkill -9 -f "^gpu-screen-recorder"
|
||||
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
|
||||
else
|
||||
trim_first_frame
|
||||
finalize_recording
|
||||
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
|
||||
local preview="${filename%.mp4}-preview.png"
|
||||
|
||||
@@ -159,17 +159,24 @@ screenrecording_active() {
|
||||
pgrep -f "^gpu-screen-recorder" >/dev/null
|
||||
}
|
||||
|
||||
trim_first_frame() {
|
||||
finalize_recording() {
|
||||
local latest
|
||||
latest=$(cat "$RECORDING_FILE" 2>/dev/null)
|
||||
[[ -f $latest ]] || return
|
||||
|
||||
if [[ -n $latest && -f $latest ]]; then
|
||||
local trimmed="${latest%.mp4}-trimmed.mp4"
|
||||
if ffmpeg -y -ss 0.1 -i "$latest" -c copy "$trimmed" -loglevel quiet 2>/dev/null; then
|
||||
mv "$trimmed" "$latest"
|
||||
else
|
||||
rm -f "$trimmed"
|
||||
fi
|
||||
# Trim the first frame, and normalize audio to -14 LUFS if present, in a single pass
|
||||
local args=(-y -ss 0.1 -i "$latest")
|
||||
if ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 "$latest" 2>/dev/null | grep -q audio; then
|
||||
args+=(-af loudnorm=I=-14:TP=-1.5:LRA=11 -c:v copy)
|
||||
else
|
||||
args+=(-c copy)
|
||||
fi
|
||||
|
||||
local processed="${latest%.mp4}-processed.mp4"
|
||||
if ffmpeg "${args[@]}" "$processed" -loglevel quiet 2>/dev/null; then
|
||||
mv "$processed" "$latest"
|
||||
else
|
||||
rm -f "$processed"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Returns true when an external monitor is physically connected.
|
||||
# Uses kernel DRM state so the result is independent of Hyprland's startup timing.
|
||||
|
||||
for status in /sys/class/drm/card*-*/status; do
|
||||
[[ "$status" == *-eDP-*/status ]] && continue
|
||||
[[ "$(<"$status")" == "connected" ]] && exit 0
|
||||
done
|
||||
exit 1
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
(($(lspci | grep -cE 'VGA|3D|Display') >= 2))
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Match against the computer's DMI product name (case-insensitive).
|
||||
# Usage: omarchy-hw-match "XPS"
|
||||
# Match against the computer's DMI product name or product family (case-insensitive).
|
||||
# Usage: omarchy-hw-match "XPS" or omarchy-hw-match "ThinkPad"
|
||||
|
||||
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null
|
||||
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null ||
|
||||
grep -qi "$1" /sys/class/dmi/id/product_family 2>/dev/null
|
||||
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Clear the internal-monitor-disable toggle if no external display is connected.
|
||||
# Runs before the graphical session so Hyprland doesn't block on having no output
|
||||
# to render to when the user rebooted with the external unplugged.
|
||||
|
||||
TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf"
|
||||
|
||||
if [[ -f $TOGGLE ]] && ! omarchy-hw-external-monitors; then
|
||||
rm -f "$TOGGLE"
|
||||
fi
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
device=$(hyprctl devices -j | jq -r '[.mice[] | .name | select(test("touchpad|trackpad"; "i"))] | first // empty')
|
||||
[[ -n $device ]] && echo "$device"
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
TOGGLE="internal-monitor-disable"
|
||||
|
||||
enable() {
|
||||
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
|
||||
omarchy-hyprland-toggle --disabled-notification " Laptop display enabled" "$TOGGLE"
|
||||
fi
|
||||
}
|
||||
|
||||
disable() {
|
||||
if omarchy-hw-external-monitors; then
|
||||
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
|
||||
omarchy-hyprland-toggle --enabled-notification " Laptop display disabled" "$TOGGLE"
|
||||
fi
|
||||
else
|
||||
notify-send -u low " Can't disable the only active display"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
recover() {
|
||||
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
|
||||
omarchy-hyprland-toggle "$TOGGLE"
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
on) enable ;;
|
||||
off) disable ;;
|
||||
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then enable; else disable; fi ;;
|
||||
recover) recover ;;
|
||||
*)
|
||||
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Disable the internal laptop display. No-op if already disabled or if it
|
||||
# would leave no active display.
|
||||
|
||||
if omarchy-hyprland-monitors-many; then
|
||||
if omarchy-hyprland-toggle-disabled internal-monitor-disable; then
|
||||
omarchy-hyprland-toggle --enabled-notification " Laptop display disabled" internal-monitor-disable
|
||||
fi
|
||||
else
|
||||
notify-send -u low " Can't disable the only active display"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Enable the internal laptop display. No-op if already enabled.
|
||||
|
||||
if omarchy-hyprland-toggle-enabled internal-monitor-disable; then
|
||||
omarchy-hyprland-toggle --disabled-notification " Laptop display enabled" internal-monitor-disable
|
||||
fi
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Re-enable the internal display if it was toggled off and no external monitors
|
||||
# are currently active (e.g. external got disconnected live, during sleep, or
|
||||
# wasn't present on boot).
|
||||
|
||||
if omarchy-hyprland-monitors-none && omarchy-hyprland-toggle-enabled internal-monitor-disable; then
|
||||
omarchy-hyprland-monitor-internal-enable
|
||||
fi
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Toggle the internal laptop display on/off.
|
||||
|
||||
if omarchy-hyprland-toggle-enabled internal-monitor-disable; then
|
||||
omarchy-hyprland-monitor-internal-enable
|
||||
else
|
||||
omarchy-hyprland-monitor-internal-disable
|
||||
fi
|
||||
@@ -8,15 +8,28 @@ WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
|
||||
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
|
||||
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
|
||||
|
||||
# Cycle through scales: 1 → 1.6 → 2 → 3 → 1
|
||||
CURRENT_INT=$(awk -v s="$CURRENT_SCALE" 'BEGIN { printf "%.0f", s * 10 }')
|
||||
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 1 (or reverse with --reverse)
|
||||
SCALES=(1 1.25 1.6 2 3)
|
||||
|
||||
case "$CURRENT_INT" in
|
||||
10) NEW_SCALE=1.6 ;;
|
||||
16) NEW_SCALE=2 ;;
|
||||
20) NEW_SCALE=3 ;;
|
||||
*) NEW_SCALE=1 ;;
|
||||
esac
|
||||
# Find the index of the scale closest to the current one (Hyprland may
|
||||
# snap fractional scales to nearby values, so we can't match exactly)
|
||||
CURRENT_IDX=$(awk -v s="$CURRENT_SCALE" -v list="${SCALES[*]}" 'BEGIN {
|
||||
n = split(list, arr, " ")
|
||||
best = 0; best_diff = 1e9
|
||||
for (i = 1; i <= n; i++) {
|
||||
d = s - arr[i]; if (d < 0) d = -d
|
||||
if (d < best_diff) { best_diff = d; best = i - 1 }
|
||||
}
|
||||
print best
|
||||
}')
|
||||
|
||||
if [[ "$1" == "--reverse" ]]; then
|
||||
NEW_IDX=$(( (CURRENT_IDX - 1 + ${#SCALES[@]}) % ${#SCALES[@]} ))
|
||||
else
|
||||
NEW_IDX=$(( (CURRENT_IDX + 1) % ${#SCALES[@]} ))
|
||||
fi
|
||||
|
||||
NEW_SCALE=${SCALES[$NEW_IDX]}
|
||||
|
||||
hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto,$NEW_SCALE"
|
||||
notify-send -u low " Display scaling set to ${NEW_SCALE}x"
|
||||
|
||||
@@ -8,7 +8,7 @@ SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
||||
socat -U - "UNIX-CONNECT:$SOCKET" | while read -r event; do
|
||||
case "$event" in
|
||||
monitorremoved\>\>*|monitorremovedv2\>\>*)
|
||||
omarchy-hyprland-monitor-internal-recover
|
||||
omarchy-hyprland-monitor-internal recover
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Returns true when there are multiple monitors connected (so we can disable the internal one)
|
||||
|
||||
(( $(hyprctl monitors -j 2>/dev/null | jq length) > 1 ))
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Returns true when no monitors are connected
|
||||
|
||||
(( $(hyprctl monitors -j 2>/dev/null | jq length) == 0 ))
|
||||
@@ -2,9 +2,11 @@
|
||||
|
||||
# Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console.
|
||||
|
||||
curl -fsSL https://tailscale.com/install.sh | sh
|
||||
echo -e "\nInstalling Tailscale..."
|
||||
omarchy-pkg-add tailscale
|
||||
|
||||
echo -e "\nStarting Tailscale..."
|
||||
sudo systemctl enable --now tailscaled.service
|
||||
sudo tailscale up --accept-routes
|
||||
|
||||
omarchy-webapp-install "Tailscale" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
|
||||
|
||||
+17
-4
@@ -168,8 +168,9 @@ show_share_menu() {
|
||||
}
|
||||
|
||||
show_toggle_menu() {
|
||||
case $(menu "Toggle" " Screensaver\n Nightlight\n Idle Lock\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n Laptop Display") in
|
||||
local options=" Screensaver\n Nightlight\n Idle Lock\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Monitor Scaling\n"
|
||||
|
||||
case $(menu "Toggle" "$options") in
|
||||
*Screensaver*) omarchy-toggle-screensaver ;;
|
||||
*Nightlight*) omarchy-toggle-nightlight ;;
|
||||
*Idle*) omarchy-toggle-idle ;;
|
||||
@@ -178,15 +179,26 @@ show_toggle_menu() {
|
||||
*Ratio*) omarchy-hyprland-window-single-square-aspect-toggle ;;
|
||||
*Gaps*) omarchy-hyprland-window-gaps-toggle ;;
|
||||
*Scaling*) omarchy-hyprland-monitor-scaling-cycle ;;
|
||||
*Laptop*) omarchy-hyprland-monitor-internal-toggle ;;
|
||||
*) back_to show_trigger_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_hardware_menu() {
|
||||
case $(menu "Toggle" " Hybrid GPU") in
|
||||
local options=" Laptop Display"
|
||||
|
||||
if omarchy-hw-hybrid-gpu; then
|
||||
options="$options\n Hybrid GPU"
|
||||
fi
|
||||
|
||||
if omarchy-hw-touchpad; then
|
||||
options="$options\n Touchpad"
|
||||
fi
|
||||
|
||||
case $(menu "Toggle" "$options") in
|
||||
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
|
||||
*Touchpad*) omarchy-toggle-touchpad ;;
|
||||
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
|
||||
*) show_trigger_menu ;;
|
||||
*) back_to show_trigger_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -605,6 +617,7 @@ go_to_menu() {
|
||||
*learn*) show_learn_menu ;;
|
||||
*trigger*) show_trigger_menu ;;
|
||||
*toggle*) show_toggle_menu ;;
|
||||
*hardware*) show_hardware_menu ;;
|
||||
*share*) show_share_menu ;;
|
||||
*background*) show_background_menu ;;
|
||||
*capture*) show_capture_menu ;;
|
||||
|
||||
@@ -202,7 +202,7 @@ prioritize_entries() {
|
||||
if (match(line, /Move window to workspace/)) prio = 28
|
||||
if (match(line, /Move window silently to workspace/)) prio = 29
|
||||
if (match(line, /Swap window/)) prio = 30
|
||||
if (match(line, /Move window focus/)) prio = 31
|
||||
if (match(line, /Focus/)) prio = 31
|
||||
if (match(line, /Move window$/)) prio = 32
|
||||
if (match(line, /Resize window/)) prio = 33
|
||||
if (match(line, /Expand window/)) prio = 34
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ mkdir -p "$STATE_DIR"
|
||||
mkdir -p "$STATE_DIR/skipped"
|
||||
|
||||
# Run any pending migrations
|
||||
for file in ~/.local/share/omarchy/migrations/*.sh; do
|
||||
for file in $OMARCHY_PATH/migrations/*.sh; do
|
||||
filename=$(basename "$file")
|
||||
|
||||
if [[ ! -f $STATE_DIR/$filename && ! -f $STATE_DIR/skipped/$filename ]]; then
|
||||
|
||||
@@ -7,3 +7,5 @@ omarchy-refresh-config hypr/bindings.conf
|
||||
omarchy-refresh-config hypr/input.conf
|
||||
omarchy-refresh-config hypr/looknfeel.conf
|
||||
omarchy-refresh-config hypr/hyprland.conf
|
||||
omarchy-refresh-config hypr/monitors.conf
|
||||
bash "$OMARCHY_PATH/install/config/detect-keyboard-layout.sh"
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Toggle passwordless sudo for the current user.
|
||||
# Usage: omarchy-sudo-passwordless-toggle [MINUTES]
|
||||
# First run: enables passwordless sudo for 15 minutes (after confirmation).
|
||||
# Second run: disables it early.
|
||||
|
||||
NOPASSWD_FILE="/etc/sudoers.d/99-omarchy-nopasswd-${USER}"
|
||||
TIMER_NAME="omarchy-nopasswd-expire-${USER}"
|
||||
|
||||
MINUTES=${1:-15}
|
||||
if [[ $1 && ! $1 =~ ^[0-9]+$ ]]; then
|
||||
echo "Usage: omarchy-sudo-passwordless-toggle [MINUTES]" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Safety: if the file exists but the timer doesn't (e.g. after reboot), clean up
|
||||
if sudo test -f "$NOPASSWD_FILE" && ! systemctl is-active "${TIMER_NAME}.timer" &>/dev/null; then
|
||||
sudo rm "$NOPASSWD_FILE"
|
||||
@@ -14,28 +21,37 @@ fi
|
||||
|
||||
# Check for the file directly — sudo -n can stay cached or be granted by other rules
|
||||
if sudo test -f "$NOPASSWD_FILE"; then
|
||||
sudo rm "$NOPASSWD_FILE"
|
||||
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
|
||||
echo "Passwordless sudo has been DISABLED. Sudo will require a password again."
|
||||
if [[ $1 ]]; then
|
||||
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
|
||||
sudo systemd-run --on-active=${MINUTES}m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
|
||||
rm "$NOPASSWD_FILE"
|
||||
echo "Passwordless sudo timer updated. It will now automatically disable in ${MINUTES} minutes."
|
||||
else
|
||||
sudo rm "$NOPASSWD_FILE"
|
||||
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
|
||||
echo "Passwordless sudo has been DISABLED. Sudo will require a password again."
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "⚠️ WARNING: This will allow ANY process running as your user to"
|
||||
echo "execute ANY command as root WITHOUT a password for 15 minutes."
|
||||
echo "⚠️WARNING: This will allow ANY process running as your user to"
|
||||
echo "execute ANY command as root WITHOUT a password for ${MINUTES} minutes."
|
||||
echo ""
|
||||
echo "This is useful for AI agents that need to run sudo commands,"
|
||||
echo "but it significantly weakens the security of your system."
|
||||
echo "Anyone or anything with access to your user account gets full root."
|
||||
echo ""
|
||||
echo "Passwordless sudo will automatically disable after 15 minutes."
|
||||
echo "Passwordless sudo will automatically disable after ${MINUTES} minutes."
|
||||
echo "Run this command again to disable it early."
|
||||
echo ""
|
||||
|
||||
if gum confirm "Enable passwordless sudo for 15 minutes? This is a significant security risk!"; then
|
||||
if gum confirm "Enable passwordless sudo for ${MINUTES} minutes? This is a significant security risk!"; then
|
||||
echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee "$NOPASSWD_FILE" > /dev/null
|
||||
sudo chmod 440 "$NOPASSWD_FILE"
|
||||
sudo systemd-run --on-active=15m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
|
||||
sudo systemd-run --on-active=${MINUTES}m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
|
||||
rm "$NOPASSWD_FILE"
|
||||
echo "Passwordless sudo has been ENABLED. It will automatically disable in 15 minutes."
|
||||
|
||||
echo ""
|
||||
echo "Passwordless sudo has been ENABLED. It will automatically disable in ${MINUTES} minutes."
|
||||
echo "Note: if you restart before then, run omarchy-sudo-passwordless-toggle again to disable it."
|
||||
else
|
||||
echo "Aborted. No changes made."
|
||||
|
||||
@@ -8,8 +8,7 @@ percent="$1"
|
||||
progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
|
||||
[[ $progress == "0.00" ]] && progress="0.01"
|
||||
|
||||
swayosd-client \
|
||||
--monitor "$(omarchy-hyprland-monitor-focused)" \
|
||||
--custom-icon display-brightness \
|
||||
omarchy-swayosd-client \
|
||||
--custom-icon display-brightness-symbolic \
|
||||
--custom-progress "$progress" \
|
||||
--custom-progress-text "${percent}%"
|
||||
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Wrapper for swayosd-client that targets the currently focused monitor.
|
||||
|
||||
exec swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)" "$@"
|
||||
@@ -8,8 +8,7 @@ percent="$1"
|
||||
progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
|
||||
[[ $progress == "0.00" ]] && progress="0.01"
|
||||
|
||||
swayosd-client \
|
||||
--monitor "$(omarchy-hyprland-monitor-focused)" \
|
||||
--custom-icon keyboard-brightness \
|
||||
omarchy-swayosd-client \
|
||||
--custom-icon keyboard-brightness-symbolic \
|
||||
--custom-progress "$progress" \
|
||||
--custom-progress-text "${percent}%"
|
||||
|
||||
@@ -15,7 +15,7 @@ if [[ -z $REPO_URL ]]; then
|
||||
fi
|
||||
|
||||
THEMES_DIR="$HOME/.config/omarchy/themes"
|
||||
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//')
|
||||
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//' | tr '[:upper:]' '[:lower:]')
|
||||
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
||||
|
||||
# Remove existing theme if present
|
||||
|
||||
@@ -14,11 +14,11 @@ if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
|
||||
|
||||
if omarchy-cmd-present chromium; then
|
||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
|
||||
chromium --refresh-platform-policy --no-startup-window &>/dev/null
|
||||
pgrep -x chromium >/dev/null && chromium --refresh-platform-policy --no-startup-window &>/dev/null
|
||||
fi
|
||||
|
||||
if omarchy-cmd-present brave; then
|
||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
|
||||
brave --refresh-platform-policy --no-startup-window &>/dev/null
|
||||
pgrep -x brave >/dev/null && brave --refresh-platform-policy --no-startup-window &>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
STATE_CONF="$HOME/.local/state/omarchy/toggles/hypr/touchpad-disabled.conf"
|
||||
|
||||
device="$(omarchy-hw-touchpad)"
|
||||
|
||||
if [[ -z $device ]]; then
|
||||
echo "No touchpad device found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
enable() {
|
||||
hyprctl keyword "device[$device]:enabled" true >/dev/null
|
||||
rm -f "$STATE_CONF"
|
||||
omarchy-swayosd-client --custom-icon input-touchpad-symbolic --custom-message "Touchpad enabled"
|
||||
}
|
||||
|
||||
disable() {
|
||||
hyprctl keyword "device[$device]:enabled" false >/dev/null
|
||||
mkdir -p "$(dirname "$STATE_CONF")"
|
||||
printf 'device {\n name = %s\n enabled = false\n}\n' "$device" > "$STATE_CONF"
|
||||
omarchy-swayosd-client --custom-icon touchpad-disabled-symbolic --custom-message "Touchpad disabled"
|
||||
}
|
||||
|
||||
case "${1:-toggle}" in
|
||||
on) enable ;;
|
||||
off) disable ;;
|
||||
toggle) if [[ -f $STATE_CONF ]]; then enable; else disable; fi ;;
|
||||
esac
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
echo
|
||||
|
||||
if [[ ! -d /usr/lib/modules/$(uname -r) ]]; then
|
||||
if find /usr/lib/modules -maxdepth 2 -name vmlinuz -newermt "$(uptime -s)" 2>/dev/null | grep -q .; then
|
||||
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-system-reboot
|
||||
elif [[ -f $HOME/.local/state/omarchy/reboot-required ]]; then
|
||||
gum confirm "Updates require reboot. Ready?" && omarchy-system-reboot
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Clean up the voxtype --follow child when Waybar reloads
|
||||
trap 'kill 0' EXIT
|
||||
|
||||
if omarchy-cmd-present voxtype; then
|
||||
voxtype status --follow --extended --format json | while read -r line; do
|
||||
echo "$line" | jq -c '. + {alt: .class}'
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Recover the internal monitor toggle when no external display is connected
|
||||
Before=graphical-session-pre.target
|
||||
ConditionPathExists=%h/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=%h/.local/share/omarchy/bin/omarchy-hw-recover-internal-monitor
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session-pre.target
|
||||
@@ -80,7 +80,6 @@
|
||||
"on-click": "omarchy-launch-wifi"
|
||||
},
|
||||
"battery": {
|
||||
"bat": "BAT0",
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-discharging": "{icon}",
|
||||
"format-charging": "{icon}",
|
||||
|
||||
@@ -44,10 +44,11 @@ alias ....='cd ../../..'
|
||||
|
||||
# Tools
|
||||
alias c='opencode'
|
||||
alias cx='printf "\033[2J\033[3J\033[H" && claude --allow-dangerously-skip-permissions'
|
||||
alias cx='printf "\033[2J\033[3J\033[H" && claude --permission-mode bypassPermissions'
|
||||
alias d='docker'
|
||||
alias r='rails'
|
||||
alias t='tmux attach || tmux new -s Work'
|
||||
alias i='tdl c cx'
|
||||
n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; }
|
||||
|
||||
# Git
|
||||
|
||||
+5
-1
@@ -11,7 +11,11 @@ if command -v zoxide &> /dev/null; then
|
||||
fi
|
||||
|
||||
if command -v try &> /dev/null; then
|
||||
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
|
||||
try() {
|
||||
unset -f try
|
||||
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
|
||||
try "$@"
|
||||
}
|
||||
fi
|
||||
|
||||
if command -v fzf &> /dev/null; then
|
||||
|
||||
@@ -28,6 +28,15 @@ local function first_image_in_dir(dir)
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Find preview.png, preview.jpg, or first backgrounds/ image in a theme dir
|
||||
local function find_preview_path(dir)
|
||||
local png = dir .. "/preview.png"
|
||||
local jpg = dir .. "/preview.jpg"
|
||||
if file_exists(png) then return png end
|
||||
if file_exists(jpg) then return jpg end
|
||||
return first_image_in_dir(dir .. "/backgrounds")
|
||||
end
|
||||
|
||||
-- The main function elephant will call
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
@@ -51,19 +60,10 @@ function GetEntries()
|
||||
if theme_name and not seen_themes[theme_name] then
|
||||
seen_themes[theme_name] = true
|
||||
|
||||
-- Check for preview images directly (no subprocess)
|
||||
local preview_path = nil
|
||||
local preview_png = theme_path .. "/preview.png"
|
||||
local preview_jpg = theme_path .. "/preview.jpg"
|
||||
|
||||
if file_exists(preview_png) then
|
||||
preview_path = preview_png
|
||||
elseif file_exists(preview_jpg) then
|
||||
preview_path = preview_jpg
|
||||
else
|
||||
-- Fallback: get first image from backgrounds (one ls call)
|
||||
preview_path = first_image_in_dir(theme_path .. "/backgrounds")
|
||||
end
|
||||
-- Check the theme dir, then fall back to the default theme dir
|
||||
-- (for partial user customizations that don't ship a preview)
|
||||
local preview_path = find_preview_path(theme_path)
|
||||
or find_preview_path(default_theme_dir .. "/" .. theme_name)
|
||||
|
||||
if preview_path and preview_path ~= "" then
|
||||
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
|
||||
|
||||
@@ -12,6 +12,7 @@ source = ~/.local/share/omarchy/default/hypr/apps/geforce.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/moonlight.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/system.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/telegram.conf
|
||||
source = ~/.local/share/omarchy/default/hypr/apps/typora.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/webcam-overlay.conf
|
||||
|
||||
@@ -14,3 +14,6 @@ windowrule = tile on, match:tag chromium-based-browser
|
||||
# Only a subtle opacity change, but not for video sites
|
||||
windowrule = opacity 1.0 0.97, match:tag chromium-based-browser
|
||||
windowrule = opacity 1.0 0.97, match:tag firefox-based-browser
|
||||
|
||||
# Hide the screen-sharing notification bar (the "Hide" button on it is broken on Wayland)
|
||||
windowrule = workspace special silent, match:title .*is sharing.*
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
# Float Typora print dialog
|
||||
windowrule = match:class ^Typora$, match:title ^Print$, float on, center on
|
||||
@@ -7,7 +7,6 @@ exec-once = uwsm-app -- swayosd-server
|
||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
exec-once = omarchy-cmd-first-run
|
||||
exec-once = omarchy-powerprofiles-init
|
||||
exec-once = omarchy-hyprland-monitor-internal-recover
|
||||
exec-once = uwsm-app -- omarchy-hyprland-monitor-watch
|
||||
|
||||
# Slow app launch fix -- set systemd vars
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
# Only display the OSD on the currently focused monitor
|
||||
$osdclient = swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)"
|
||||
|
||||
# Laptop multimedia keys for volume and LCD brightness (with OSD)
|
||||
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
|
||||
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
|
||||
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
|
||||
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, omarchy-swayosd-client --output-volume raise
|
||||
bindeld = ,XF86AudioLowerVolume, Volume down, exec, omarchy-swayosd-client --output-volume lower
|
||||
bindeld = ,XF86AudioMute, Mute, exec, omarchy-swayosd-client --output-volume mute-toggle
|
||||
bindeld = ,XF86AudioMicMute, Mute microphone, exec, omarchy-cmd-mic-mute
|
||||
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, omarchy-brightness-display +5%
|
||||
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, omarchy-brightness-display 5%-
|
||||
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, omarchy-brightness-keyboard up
|
||||
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, omarchy-brightness-keyboard down
|
||||
bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, omarchy-brightness-keyboard cycle
|
||||
bindld = ,XF86TouchpadToggle, Toggle touchpad, exec, omarchy-toggle-touchpad
|
||||
bindld = ,XF86TouchpadOn, Enable touchpad, exec, omarchy-toggle-touchpad on
|
||||
bindld = ,XF86TouchpadOff, Disable touchpad, exec, omarchy-toggle-touchpad off
|
||||
|
||||
# Precise 1% multimedia adjustments with Alt modifier
|
||||
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
|
||||
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
|
||||
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, omarchy-swayosd-client --output-volume +1
|
||||
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, omarchy-swayosd-client --output-volume -1
|
||||
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, omarchy-brightness-display +1%
|
||||
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, omarchy-brightness-display 1%-
|
||||
|
||||
# Requires playerctl
|
||||
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
|
||||
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
|
||||
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
|
||||
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous
|
||||
bindld = , XF86AudioNext, Next track, exec, omarchy-swayosd-client --playerctl next
|
||||
bindld = , XF86AudioPause, Pause, exec, omarchy-swayosd-client --playerctl play-pause
|
||||
bindld = , XF86AudioPlay, Play, exec, omarchy-swayosd-client --playerctl play-pause
|
||||
bindld = , XF86AudioPrev, Previous track, exec, omarchy-swayosd-client --playerctl previous
|
||||
|
||||
# Switch audio output with Super + Mute
|
||||
bindld = SUPER, XF86AudioMute, Switch audio output, exec, omarchy-cmd-audio-switch
|
||||
|
||||
@@ -13,10 +13,10 @@ bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-hyprland-window-po
|
||||
bindd = SUPER, L, Toggle workspace layout, exec, omarchy-hyprland-workspace-layout-toggle
|
||||
|
||||
# Move focus with SUPER + arrow keys
|
||||
bindd = SUPER, LEFT, Move window focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move window focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move window focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move window focus down, movefocus, d
|
||||
bindd = SUPER, LEFT, Focus on left window, movefocus, l
|
||||
bindd = SUPER, RIGHT, Focus on right window, movefocus, r
|
||||
bindd = SUPER, UP, Focus on above window, movefocus, u
|
||||
bindd = SUPER, DOWN, Focus on below window, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [1-9; 0]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
@@ -76,11 +76,15 @@ 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, Focus on next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Focus on previous window, cyclenext, prev
|
||||
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
|
||||
# Cycle through monitors
|
||||
bindd = CTRL ALT, TAB, Focus on next monitor, focusmonitor, +1
|
||||
bindd = CTRL ALT SHIFT, TAB, Focus on previous monitor, focusmonitor, -1
|
||||
|
||||
# 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
|
||||
@@ -124,5 +128,6 @@ bindd = SUPER ALT, code:12, Switch to group window 3, changegroupactive, 3
|
||||
bindd = SUPER ALT, code:13, Switch to group window 4, changegroupactive, 4
|
||||
bindd = SUPER ALT, code:14, Switch to group window 5, changegroupactive, 5
|
||||
|
||||
# Cycle monitor scaling
|
||||
bindd = SUPER, Slash, Cycle monitor scaling, exec, omarchy-hyprland-monitor-scaling-cycle
|
||||
# Cycle monitor scaling with SUPER + /
|
||||
bindd = SUPER, code:61, Cycle monitor scaling, exec, omarchy-hyprland-monitor-scaling-cycle
|
||||
bindd = SUPER ALT, code:61, Cycle monitor scaling backwards, exec, omarchy-hyprland-monitor-scaling-cycle --reverse
|
||||
|
||||
@@ -3,6 +3,7 @@ bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
|
||||
bindd = SUPER CTRL, C, Capture menu, exec, omarchy-menu capture
|
||||
bindd = SUPER CTRL, O, Toggle menu, exec, omarchy-menu toggle
|
||||
bindd = SUPER CTRL, H, Hardware menu, exec, omarchy-menu hardware
|
||||
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
||||
bindd = SUPER SHIFT, code:201, Omarchy menu, exec, omarchy-menu
|
||||
bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system
|
||||
@@ -28,9 +29,9 @@ bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
|
||||
# Toggles
|
||||
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
|
||||
bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight
|
||||
bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal-toggle
|
||||
bindl = , switch:on:Lid Switch, exec, omarchy-hyprland-monitor-internal-disable
|
||||
bindl = , switch:off:Lid Switch, exec, omarchy-hyprland-monitor-internal-enable
|
||||
bindd = SUPER CTRL, Delete, Toggle laptop display, exec, omarchy-hyprland-monitor-internal toggle
|
||||
bindl = , switch:on:Lid Switch, exec, omarchy-hyprland-monitor-internal off
|
||||
bindl = , switch:off:Lid Switch, exec, omarchy-hyprland-monitor-internal on
|
||||
|
||||
# Control Apple Display brightness
|
||||
bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-brightness-display-apple -5000
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# Omarchy snapshots root only for pre-update recovery — kept to 5, no timeline
|
||||
SUBVOLUME="/"
|
||||
FSTYPE="btrfs"
|
||||
|
||||
NUMBER_LIMIT="5"
|
||||
NUMBER_LIMIT_IMPORTANT="5"
|
||||
|
||||
TIMELINE_CREATE="no"
|
||||
@@ -5,7 +5,9 @@ if omarchy-hw-intel-ptl; then
|
||||
echo "Detected Intel Panther Lake, installing PTL kernel..."
|
||||
|
||||
omarchy-pkg-add linux-ptl linux-ptl-headers
|
||||
sudo pacman -Rdd --noconfirm linux linux-headers 2>/dev/null || true
|
||||
for pkg in linux linux-headers; do
|
||||
sudo pacman -Rdd --noconfirm "$pkg" 2>/dev/null || true
|
||||
done
|
||||
|
||||
sudo mkdir -p /etc/limine-entry-tool.d
|
||||
cat <<EOF | sudo tee /etc/limine-entry-tool.d/intel-panther-lake.conf >/dev/null
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
systemctl --user enable omarchy-recover-internal-monitor.service
|
||||
@@ -50,26 +50,14 @@ EOF
|
||||
# We overwrite the whole thing knowing the limine-update will add the entries for us
|
||||
sudo cp $OMARCHY_PATH/default/limine/limine.conf /boot/limine.conf
|
||||
|
||||
# Match Snapper configs if not installing from the ISO
|
||||
if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then
|
||||
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
|
||||
sudo snapper -c root create-config /
|
||||
fi
|
||||
|
||||
if ! sudo snapper list-configs 2>/dev/null | grep -q "home"; then
|
||||
sudo snapper -c home create-config /home
|
||||
fi
|
||||
# Only snapshot root — /home is user data; rolling it back loses user work
|
||||
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
|
||||
sudo snapper -c root create-config /
|
||||
fi
|
||||
sudo cp $OMARCHY_PATH/default/snapper/root /etc/snapper/configs/root
|
||||
|
||||
# Enable quota to allow space-aware algorithms to work
|
||||
sudo btrfs quota enable /
|
||||
|
||||
# Tweak default Snapper configs
|
||||
sudo sed -i 's/^TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/{root,home}
|
||||
sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home}
|
||||
sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home}
|
||||
sudo sed -i 's/^SPACE_LIMIT="0.5"/SPACE_LIMIT="0.3"/' /etc/snapper/configs/{root,home}
|
||||
sudo sed -i 's/^FREE_LIMIT="0.2"/FREE_LIMIT="0.3"/' /etc/snapper/configs/{root,home}
|
||||
# Disable btrfs quotas — full qgroup accounting is a major performance drag
|
||||
sudo btrfs quota disable / 2>/dev/null || true
|
||||
|
||||
chrootable_systemctl_enable limine-snapper-sync.service
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
echo "Enable GPU in voxtype if Vulkan is available"
|
||||
|
||||
if omarchy-cmd-present voxtype; then
|
||||
if omarchy-hw-vulkan; then
|
||||
echo "Vulkan is available, enabling GPU in voxtype"
|
||||
sudo voxtype setup gpu --enable || true
|
||||
fi
|
||||
|
||||
# see https://github.com/peteonrails/voxtype/commit/ce6e9919cbe54cb8808dcb3cdd3bcb3260d7b900
|
||||
# earlier versions of voxtype hard-coded the non-GPU backend in the systemd service file,
|
||||
# so we need to re-run setup to update it to use /usr/bin/voxtype (the symlink)
|
||||
voxtype setup systemd
|
||||
|
||||
systemctl --user restart voxtype
|
||||
omarchy-restart-waybar
|
||||
fi
|
||||
@@ -2,7 +2,7 @@ echo "Add flags sourcing to hyprland.conf"
|
||||
|
||||
HYPR_CONF=~/.config/hypr/hyprland.conf
|
||||
|
||||
source $OMARCHY_PATH/install/config/omarchy-toggles.sh
|
||||
source "$OMARCHY_PATH/install/config/omarchy-toggles.sh"
|
||||
|
||||
if [[ -f $HYPR_CONF ]] && ! grep -q "toggles/hypr/\*\.conf" "$HYPR_CONF"; then
|
||||
echo -e "\n# Toggle config flags dynamically\nsource = ~/.local/state/omarchy/toggles/hypr/*.conf" >> "$HYPR_CONF"
|
||||
|
||||
Executable → Regular
@@ -1,10 +0,0 @@
|
||||
echo "Pin waybar battery module to BAT0 to prevent crash on HID battery disconnect"
|
||||
|
||||
CONFIG_FILE=~/.config/waybar/config.jsonc
|
||||
|
||||
if [[ -f "$CONFIG_FILE" ]] \
|
||||
&& ! grep -Eq '"bat"[[:space:]]*:' "$CONFIG_FILE" \
|
||||
&& grep -Eq '"battery"[[:space:]]*:[[:space:]]*\{' "$CONFIG_FILE"; then
|
||||
sed -i -E '/"battery"[[:space:]]*:[[:space:]]*\{/a\ "bat": "BAT0",' "$CONFIG_FILE"
|
||||
omarchy-restart-waybar
|
||||
fi
|
||||
@@ -0,0 +1,50 @@
|
||||
echo "Drop /home snapshots, btrfs quotas, and timeline snapshots (keep 5 root snapshots, never more)"
|
||||
|
||||
if ! omarchy-cmd-present snapper btrfs; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Disable btrfs quotas first — every subvolume delete below would otherwise update
|
||||
# all qgroups, which is exactly the performance drag we're removing.
|
||||
sudo btrfs quota disable / 2>/dev/null || true
|
||||
|
||||
# Remove the home config, all its snapshots, and the .snapshots subvolume.
|
||||
# If the snapshots look like someone's been using them manually (pre/post pairs,
|
||||
# userdata tags, freeform descriptions), ask before destroying.
|
||||
if sudo snapper list-configs 2>/dev/null | grep -q "home"; then
|
||||
drop_home="yes"
|
||||
|
||||
if sudo snapper -c home --csvout list 2>/dev/null | \
|
||||
awk -F, 'NR>1 && ($6=="pre" || $6=="post" || $13!="" || ($12!="current" && $12!="timeline" && $12 !~ /^[0-9]+\.[0-9]+\.[0-9]+/))' | \
|
||||
grep -q .; then
|
||||
gum confirm "Drop unused /home snapshots for better performance?" || drop_home="no"
|
||||
fi
|
||||
|
||||
if [[ $drop_home == "yes" ]]; then
|
||||
sudo snapper -c home list --columns number 2>/dev/null | awk 'NR>2 && $1 != "0" {print $1}' | \
|
||||
xargs -r sudo snapper -c home delete 2>/dev/null
|
||||
sudo snapper -c home delete-config 2>/dev/null
|
||||
|
||||
if [[ -d /home/.snapshots ]]; then
|
||||
for snap in /home/.snapshots/*/snapshot; do
|
||||
[[ -d $snap ]] && sudo btrfs subvolume delete "$snap" 2>/dev/null
|
||||
done
|
||||
sudo rm -rf /home/.snapshots/* 2>/dev/null
|
||||
sudo btrfs subvolume delete /home/.snapshots 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Ensure root config exists and matches our shipped defaults
|
||||
if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then
|
||||
sudo snapper -c root create-config /
|
||||
fi
|
||||
sudo cp $OMARCHY_PATH/default/snapper/root /etc/snapper/configs/root
|
||||
|
||||
# Delete all timeline snapshots — we only want pre-update (cleanup=number) snapshots
|
||||
sudo snapper -c root list --columns number,cleanup 2>/dev/null | \
|
||||
awk '$3 == "timeline" {print $1}' | \
|
||||
xargs -r sudo snapper -c root delete 2>/dev/null
|
||||
|
||||
# Enforce NUMBER_LIMIT=5 on any existing number snapshots beyond the new cap
|
||||
sudo snapper -c root cleanup number 2>/dev/null
|
||||
@@ -0,0 +1,9 @@
|
||||
echo "Recover the internal monitor at login when no external display is connected"
|
||||
|
||||
SERVICE=omarchy-recover-internal-monitor.service
|
||||
|
||||
mkdir -p ~/.config/systemd/user
|
||||
cp $OMARCHY_PATH/config/systemd/user/$SERVICE ~/.config/systemd/user/$SERVICE
|
||||
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable $SERVICE
|
||||
@@ -1,13 +1,13 @@
|
||||
return {
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
priority = 1000,
|
||||
},
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin",
|
||||
},
|
||||
},
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
priority = 1000,
|
||||
},
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Accent and UI colors
|
||||
accent = "#f2fcff"
|
||||
accent = "#8bc9eb"
|
||||
active_border_color = "#f2fcff"
|
||||
active_tab_background = "#6fb8e3"
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 471 KiB |
@@ -1,5 +1,5 @@
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="#0d0d0d"
|
||||
theme[main_bg]="#000000"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="#ffffff"
|
||||
|
||||
@@ -4,14 +4,14 @@ cursor = "#ffffff"
|
||||
|
||||
# Primary colors
|
||||
foreground = "#ffffff"
|
||||
background = "#0d0d0d"
|
||||
background = "#000000"
|
||||
|
||||
# Selection colors
|
||||
selection_foreground = "#0d0d0d"
|
||||
selection_foreground = "#000000"
|
||||
selection_background = "#ffffff"
|
||||
|
||||
# Normal colors (ANSI 0-7)
|
||||
color0 = "#0d0d0d"
|
||||
color0 = "#000000"
|
||||
color1 = "#a4a4a4"
|
||||
color2 = "#b6b6b6"
|
||||
color3 = "#cecece"
|
||||
|
||||
Reference in New Issue
Block a user