diff --git a/bin/omarchy-battery-capacity b/bin/omarchy-battery-capacity new file mode 100755 index 00000000..fa4b4c03 --- /dev/null +++ b/bin/omarchy-battery-capacity @@ -0,0 +1,11 @@ +#!/bin/bash + +# Returns the battery full capacity in Wh (rounded to whole number). +# Used by omarchy-battery-status for displaying battery capacity. + +battery_info=$(upower -i $(upower -e | grep BAT)) + +echo "$battery_info" | awk '/energy-full:/ { + printf "%d", $2 + exit +}' diff --git a/bin/omarchy-battery-remaining-time b/bin/omarchy-battery-remaining-time new file mode 100755 index 00000000..9c2c7019 --- /dev/null +++ b/bin/omarchy-battery-remaining-time @@ -0,0 +1,16 @@ +#!/bin/bash + +# Returns the battery time remaining (to empty or full) in a compact format. + +battery_info=$(upower -i $(upower -e | grep BAT)) + +echo "$battery_info" | awk '/time to (empty|full)/ { + hours = int($4) + minutes = int(($4 - hours) * 60) + if (minutes > 0) { + printf "%dh %dm", hours, minutes + } else { + printf "%dh", hours + } + exit +}' diff --git a/bin/omarchy-battery-status b/bin/omarchy-battery-status new file mode 100755 index 00000000..021c0aa4 --- /dev/null +++ b/bin/omarchy-battery-status @@ -0,0 +1,28 @@ +#!/bin/bash + +# Returns a formatted battery status string with percentage and power draw/charge. +# Used by the battery notification hotkey (Ctrl + Shift + Super + B). + +battery_info=$(upower -i $(upower -e | grep BAT)) + +percentage=$(echo "$battery_info" | awk '/percentage/ { + print int($2) + exit +}') + +power_rate=$(echo "$battery_info" | awk '/energy-rate/ { + rounded = sprintf("%.1f", $2) + sub(/\.0$/, "", rounded) + print rounded + exit +}') + +state=$(echo "$battery_info" | awk '/state/ { print $2; exit }') +time_remaining=$(omarchy-battery-remaining-time) +capacity=$(omarchy-battery-capacity) + +if [[ $state == "charging" ]]; then + echo "󰁹 Battery ${percentage}% · ${time_remaining} to full ·  ${power_rate}W / ${capacity}Wh" +else + echo "󰁹 Battery ${percentage}% · ${time_remaining} left ·  ${power_rate}W / ${capacity}Wh" +fi diff --git a/bin/omarchy-cmd-screenrecord b/bin/omarchy-cmd-screenrecord index 3ee3d877..93e143a9 100755 --- a/bin/omarchy-cmd-screenrecord +++ b/bin/omarchy-cmd-screenrecord @@ -135,7 +135,17 @@ stop_screenrecording() { notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000 else trim_first_frame - notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000 + local filename=$(cat "$RECORDING_FILE" 2>/dev/null) + local preview="${filename%.mp4}-preview.png" + + # Generate a preview thumbnail from the first frame + ffmpeg -y -i "$filename" -ss 00:00:00.1 -vframes 1 -q:v 2 "$preview" -loglevel quiet 2>/dev/null + + ( + ACTION=$(notify-send "Screen recording saved" "Open with Super + Alt + , (or click this)" -t 10000 -i "${preview:-$filename}" -A "default=open") + [[ $ACTION == "default" ]] && mpv "$filename" + rm -f "$preview" + ) & fi rm -f "$RECORDING_FILE" diff --git a/bin/omarchy-cmd-screenshot b/bin/omarchy-cmd-screenshot index 90555a23..16060e91 100755 --- a/bin/omarchy-cmd-screenshot +++ b/bin/omarchy-cmd-screenshot @@ -65,27 +65,30 @@ get_rectangles() { # Select based on mode case "$MODE" in - region) - hyprpicker -r -z >/dev/null 2>&1 & PID=$! - sleep .1 - SELECTION=$(slurp 2>/dev/null) - kill $PID 2>/dev/null - ;; - windows) - hyprpicker -r -z >/dev/null 2>&1 & PID=$! - sleep .1 - SELECTION=$(get_rectangles | slurp -r 2>/dev/null) - kill $PID 2>/dev/null - ;; - fullscreen) - SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo") - ;; - smart|*) - RECTS=$(get_rectangles) - hyprpicker -r -z >/dev/null 2>&1 & PID=$! - sleep .1 - SELECTION=$(echo "$RECTS" | slurp 2>/dev/null) - kill $PID 2>/dev/null +region) + hyprpicker -r -z >/dev/null 2>&1 & + PID=$! + sleep .1 + SELECTION=$(slurp 2>/dev/null) + kill $PID 2>/dev/null + ;; +windows) + hyprpicker -r -z >/dev/null 2>&1 & + PID=$! + sleep .1 + SELECTION=$(get_rectangles | slurp -r 2>/dev/null) + kill $PID 2>/dev/null + ;; +fullscreen) + SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo") + ;; +smart | *) + RECTS=$(get_rectangles) + hyprpicker -r -z >/dev/null 2>&1 & + PID=$! + sleep .1 + SELECTION=$(echo "$RECTS" | slurp 2>/dev/null) + kill $PID 2>/dev/null # If the selection 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 diff --git a/bin/omarchy-hibernation-setup b/bin/omarchy-hibernation-setup index 1d4b0d1d..da4629df 100755 --- a/bin/omarchy-hibernation-setup +++ b/bin/omarchy-hibernation-setup @@ -75,7 +75,7 @@ if [[ ! -f $RESUME_DROP_IN ]]; then RESUME_DEVICE=$(findmnt -no SOURCE -T "$SWAP_FILE" | sed 's/\[.*\]//') RESUME_OFFSET=$(btrfs inspect-internal map-swapfile -r "$SWAP_FILE") sudo mkdir -p /etc/limine-entry-tool.d - echo "KERNEL_CMDLINE[default]+=\"resume=$RESUME_DEVICE resume_offset=$RESUME_OFFSET\"" | sudo tee "$RESUME_DROP_IN" >/dev/null + echo "KERNEL_CMDLINE[default]+=\" resume=$RESUME_DEVICE resume_offset=$RESUME_OFFSET\"" | sudo tee "$RESUME_DROP_IN" >/dev/null fi # Use ACPI alarm for RTC wakeup on s2idle systems (needed for suspend-then-hibernate) @@ -84,7 +84,7 @@ if grep -q "\[s2idle\]" /sys/power/mem_sleep 2>/dev/null; then if [[ ! -f $LIMINE_DROP_IN ]]; then echo "Enabling ACPI RTC alarm for s2idle suspend" sudo mkdir -p /etc/limine-entry-tool.d - echo 'KERNEL_CMDLINE[default]+="rtc_cmos.use_acpi_alarm=1"' | sudo tee "$LIMINE_DROP_IN" >/dev/null + echo 'KERNEL_CMDLINE[default]+=" rtc_cmos.use_acpi_alarm=1"' | sudo tee "$LIMINE_DROP_IN" >/dev/null fi fi diff --git a/bin/omarchy-hyprland-monitor-scaling-cycle b/bin/omarchy-hyprland-monitor-scaling-cycle index 00509752..c673fe5b 100755 --- a/bin/omarchy-hyprland-monitor-scaling-cycle +++ b/bin/omarchy-hyprland-monitor-scaling-cycle @@ -4,6 +4,9 @@ MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)') ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name') CURRENT_SCALE=$(echo "$MONITOR_INFO" | jq -r '.scale') +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 }') @@ -16,6 +19,6 @@ case "$CURRENT_INT" in esac hyprctl keyword misc:disable_scale_notification true -hyprctl keyword monitor "$ACTIVE_MONITOR,preferred,auto,$NEW_SCALE" +hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto,$NEW_SCALE" hyprctl keyword misc:disable_scale_notification false notify-send "󰍹 Display scaling set to ${NEW_SCALE}x" diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 6c697a31..f327b9f4 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -19,6 +19,13 @@ back_to() { fi } +toggle_existing_menu() { + if pgrep -f "walker.*--dmenu" > /dev/null; then + walker --close > /dev/null 2>&1 + exit 0 + fi +} + menu() { local prompt="$1" local options="$2" @@ -308,7 +315,7 @@ show_install_menu() { } show_install_service_menu() { - case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN\n󰟵 Bitwarden\n Chromium Account") in + case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN [AUR]\n󰟵 Bitwarden\n Chromium Account") in *Dropbox*) present_terminal omarchy-install-dropbox ;; *Tailscale*) present_terminal omarchy-install-tailscale ;; *NordVPN*) present_terminal omarchy-install-nordvpn ;; @@ -353,7 +360,7 @@ show_install_ai_menu() { *Gemini*) install "Gemini CLI" "gemini-cli" ;; *Copilot*) install "Copilot CLI" "github-copilot-cli" ;; *Cursor*) install "Cursor CLI" "cursor-cli" ;; - *Studio*) install "LM Studio" "lmstudio" ;; + *Studio*) install "LM Studio" "lmstudio-bin" ;; *Ollama*) install "Ollama" $ollama_pkg ;; *Crush*) install "Crush" "crush-bin" ;; *) show_install_menu ;; @@ -619,6 +626,8 @@ go_to_menu() { USER_EXTENSIONS="$HOME/.config/omarchy/extensions/menu.sh" [[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS" +toggle_existing_menu + if [[ -n $1 ]]; then BACK_TO_EXIT=true go_to_menu "$1" diff --git a/bin/omarchy-restart-makima b/bin/omarchy-restart-makima new file mode 100755 index 00000000..aa6ffa39 --- /dev/null +++ b/bin/omarchy-restart-makima @@ -0,0 +1,5 @@ +#!/bin/bash + +# Restart makima - key remapping service for remapping Copilot key to Omarchy Menu + +sudo systemctl restart makima diff --git a/bin/omarchy-update b/bin/omarchy-update index 086e78c9..76fb755b 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -5,7 +5,7 @@ set -e trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR if [[ $1 == "-y" ]] || omarchy-update-confirm; then - omarchy-snapshot create || (( $? == 127 )) + omarchy-snapshot create || (($? == 127)) omarchy-update-git omarchy-update-perform fi diff --git a/bin/omarchy-update-git b/bin/omarchy-update-git index 8fef3a19..42516230 100755 --- a/bin/omarchy-update-git +++ b/bin/omarchy-update-git @@ -4,5 +4,7 @@ set -e echo -e "\e[32mUpdate Omarchy\e[0m" +omarchy-update-time + git -C $OMARCHY_PATH pull --autostash git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge diff --git a/bin/omarchy-update-perform b/bin/omarchy-update-perform index 5cf6e329..9c22adf2 100755 --- a/bin/omarchy-update-perform +++ b/bin/omarchy-update-perform @@ -3,14 +3,13 @@ set -e # Ensure screensaver/sleep doesn't set in during updates -hyprctl dispatch tagwindow +noidle &> /dev/null || true +hyprctl dispatch tagwindow +noidle &>/dev/null || true # Capture update logs (CLICOLOR_FORCE keeps gum styled when stdout is piped through tee) export CLICOLOR_FORCE=1 exec > >(tee "/tmp/omarchy-update.log") 2>&1 # Perform all update steps -omarchy-update-time omarchy-update-keyring omarchy-update-available-reset omarchy-update-system-pkgs @@ -24,4 +23,4 @@ omarchy-update-analyze-logs omarchy-update-restart # Re-enable screensaver/sleep after updates -hyprctl dispatch tagwindow -- -noidle &> /dev/null || true +hyprctl dispatch tagwindow -- -noidle &>/dev/null || true diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index 71d36c9c..62ad87c6 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -1,6 +1,6 @@ # Application bindings bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" -bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" tmux new +bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" bash -c "tmux attach || tmux new -s Work" bindd = SUPER SHIFT, RETURN, Browser, exec, omarchy-launch-browser bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)" diff --git a/config/hypr/input.conf b/config/hypr/input.conf index 841c8f42..5639f2c0 100644 --- a/config/hypr/input.conf +++ b/config/hypr/input.conf @@ -18,7 +18,7 @@ input { # Increase sensitivity for mouse/trackpad (default: 0) # sensitivity = 0.35 - + # Turn off mouse acceleration (default: false) # force_no_accel = true @@ -47,3 +47,7 @@ windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2 # Enable touchpad gestures for changing workspaces # See https://wiki.hyprland.org/Configuring/Gestures/ # gesture = 3, horizontal, workspace + +# Enable touchpad gestures for moving focus (helpful on scrolling layout) +# gesture = 3, left, dispatcher, movefocus, l +# gesture = 3, right, dispatcher, movefocus, r diff --git a/config/hyprland-preview-share-picker/config.yaml b/config/hyprland-preview-share-picker/config.yaml index 6b939570..740fc7ae 100644 --- a/config/hyprland-preview-share-picker/config.yaml +++ b/config/hyprland-preview-share-picker/config.yaml @@ -3,7 +3,7 @@ # relative paths are resolved relative to the location of the config file stylesheets: ["../omarchy/current/theme/hyprland-preview-share-picker.css"] # default page selected when the picker is opened -default_page: windows +default_page: outputs window: # height of the application window diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf index 56f0ac87..05ec10e9 100644 --- a/config/tmux/tmux.conf +++ b/config/tmux/tmux.conf @@ -43,6 +43,8 @@ bind -n M-9 select-window -t 9 bind -n M-Left select-window -t -1 bind -n M-Right select-window -t +1 +bind -n M-S-Left swap-window -t -1 \; select-window -t -1 +bind -n M-S-Right swap-window -t +1 \; select-window -t +1 # Session controls bind R command-prompt -I "#S" "rename-session -- '%%'" @@ -75,11 +77,13 @@ set -g status-interval 5 set -g status-left-length 30 set -g status-right-length 50 set -g window-status-separator "" +set -gw automatic-rename on +set -gw automatic-rename-format '#{b:pane_current_path}' # Theme set -g status-style "bg=default,fg=default" set -g status-left "#[fg=black,bg=blue,bold] #S #[bg=default] " -set -g status-right "#[fg=blue]#{?client_prefix,PREFIX ,}#[fg=brightblack]#h " +set -g status-right "#[fg=blue]#{?client_prefix,PREFIX ,}#{?window_zoomed_flag,ZOOM ,}#[fg=brightblack]#h " set -g window-status-format "#[fg=brightblack] #I:#W " set -g window-status-current-format "#[fg=blue,bold] #I:#W " set -g pane-border-style "fg=brightblack" diff --git a/config/uwsm/env b/config/uwsm/env index b988bc29..ee2b1500 100644 --- a/config/uwsm/env +++ b/config/uwsm/env @@ -8,4 +8,4 @@ export PATH=$OMARCHY_PATH/bin:$PATH source ~/.config/uwsm/default # Activate mise if present on the system -omarchy-cmd-present mise && eval "$(mise activate bash)" +omarchy-cmd-present mise && eval "$(mise activate bash --shims)" diff --git a/default/bash/aliases b/default/bash/aliases index 39f4378a..667912a8 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -12,12 +12,18 @@ alias eff='$EDITOR "$(ff)"' if command -v zoxide &> /dev/null; then alias cd="zd" zd() { - if [ $# -eq 0 ]; then - builtin cd ~ && return - elif [ -d "$1" ]; then - builtin cd "$1" + if (( $# == 0 )); then + builtin cd ~ || return + elif [[ -d $1 ]]; then + builtin cd "$1" || return else - z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found" + if ! z "$@"; then + echo "Error: Directory not found" + return 1 + fi + + printf "\U000F17A9 " + pwd fi } fi diff --git a/default/bash/fns/worktrees b/default/bash/fns/worktrees new file mode 100644 index 00000000..5fc1063a --- /dev/null +++ b/default/bash/fns/worktrees @@ -0,0 +1,36 @@ +# Create a new worktree and branch from within current git directory. +ga() { + if [[ -z "$1" ]]; then + echo "Usage: ga [branch name]" + return 1 + fi + + local branch="$1" + local base="$(basename "$PWD")" + local path="../${base}--${branch}" + + git worktree add -b "$branch" "$path" + mise trust "$path" + cd "$path" +} + +# Remove worktree and branch from within active worktree directory. +gd() { + if gum confirm "Remove worktree and branch?"; then + local cwd base branch root worktree + + cwd="$(pwd)" + worktree="$(basename "$cwd")" + + # split on first `--` + root="${worktree%%--*}" + branch="${worktree#*--}" + + # Protect against accidentally nuking a non-worktree directory + if [[ "$root" != "$worktree" ]]; then + cd "../$root" + git worktree remove "$cwd" --force || return 1 + git branch -D "$branch" + fi + fi +} diff --git a/default/bash/init b/default/bash/init index 1c40f6c1..4c5e6e39 100644 --- a/default/bash/init +++ b/default/bash/init @@ -11,7 +11,7 @@ if command -v zoxide &> /dev/null; then fi if command -v try &> /dev/null; then - eval "$(SHELL=/bin/bash try init ~/Work/tries)" + eval "$(SHELL=/bin/bash command try init ~/Work/tries)" fi if command -v fzf &> /dev/null; then diff --git a/default/elephant/omarchy_themes.lua b/default/elephant/omarchy_themes.lua index 02baa0a9..945f4e60 100644 --- a/default/elephant/omarchy_themes.lua +++ b/default/elephant/omarchy_themes.lua @@ -3,6 +3,7 @@ -- Name = "omarchythemes" NamePretty = "Omarchy Themes" +HideFromProviderlist = true -- Check if file exists using Lua (no subprocess) local function file_exists(path) @@ -93,4 +94,3 @@ function GetEntries() return entries end - diff --git a/default/hypr/apps/jetbrains.conf b/default/hypr/apps/jetbrains.conf index 5b73bce4..822e676e 100644 --- a/default/hypr/apps/jetbrains.conf +++ b/default/hypr/apps/jetbrains.conf @@ -14,7 +14,7 @@ windowrule { windowrule { name = jetbrains-popup match:class = ^(jetbrains-.*) - match:title = ^()$ + match:title = ^(| )$ match:float = 1 tag = +jetbrains center = on diff --git a/default/hypr/apps/localsend.conf b/default/hypr/apps/localsend.conf index c1741692..c4f6a552 100644 --- a/default/hypr/apps/localsend.conf +++ b/default/hypr/apps/localsend.conf @@ -1,3 +1,4 @@ # Float LocalSend and fzf file picker windowrule = float on, match:class (Share|localsend) windowrule = center on, match:class (Share|localsend) +windowrule = size 1100 700, match:class localsend diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index bd3ca4ab..9e0204b0 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -43,7 +43,7 @@ bindd = SUPER CTRL, S, Share, exec, omarchy-menu share # Waybar-less information bindd = SUPER CTRL ALT, T, Show time, exec, notify-send " $(date +"%A %H:%M — %d %B W%V %Y")" -bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send "󰁹 Battery is at $(omarchy-battery-remaining)%" +bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send "$(omarchy-battery-status)" # Control panels bindd = SUPER CTRL, A, Audio controls, exec, omarchy-launch-audio diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index 1decf433..cd3417bd 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -103,6 +103,7 @@ animations { animation = fadeLayersIn, 1, 1.79, almostLinear animation = fadeLayersOut, 1, 1.39, almostLinear animation = workspaces, 0, 0, ease + animation = specialWorkspace, 1, 4, easeOutQuint, slidevert } # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more diff --git a/default/makima/AT Translated Set 2 keyboard.toml b/default/makima/AT Translated Set 2 keyboard.toml new file mode 100644 index 00000000..895e454f --- /dev/null +++ b/default/makima/AT Translated Set 2 keyboard.toml @@ -0,0 +1,7 @@ +# Run omarchy-restart-makima after any changes + +[remap] +KEY_LEFTMETA-KEY_LEFTSHIFT-KEY_F23 = ["KEY_LEFTMETA", "KEY_LEFTALT", "KEY_SPACE"] + +[settings] +GRAB_DEVICE = "true" diff --git a/install/config/all.sh b/install/config/all.sh index 52458a72..14480206 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -20,10 +20,12 @@ run_logged $OMARCHY_INSTALL/config/walker-elephant.sh run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/input-group.sh +run_logged $OMARCHY_INSTALL/config/makima.sh run_logged $OMARCHY_INSTALL/config/omarchy-ai-skill.sh run_logged $OMARCHY_INSTALL/config/kernel-modules-hook.sh run_logged $OMARCHY_INSTALL/config/powerprofilesctl-rules.sh run_logged $OMARCHY_INSTALL/config/wifi-powersave-rules.sh +run_logged $OMARCHY_INSTALL/config/plocate-ac-only.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh run_logged $OMARCHY_INSTALL/config/hardware/set-wireless-regdom.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh @@ -32,7 +34,9 @@ run_logged $OMARCHY_INSTALL/config/hardware/printer.sh run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh +run_logged $OMARCHY_INSTALL/config/hardware/intel.sh run_logged $OMARCHY_INSTALL/config/hardware/vulkan.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-intel-panther-lake-display.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh diff --git a/install/config/hardware/fix-apple-t2.sh b/install/config/hardware/fix-apple-t2.sh index 19b44a8d..67d1644c 100644 --- a/install/config/hardware/fix-apple-t2.sh +++ b/install/config/hardware/fix-apple-t2.sh @@ -30,6 +30,6 @@ EOF sudo mkdir -p /etc/limine-entry-tool.d cat </dev/null # Generated by Omarchy installer for T2 Mac support -KERNEL_CMDLINE[default]+="intel_iommu=on iommu=pt pcie_ports=compat" +KERNEL_CMDLINE[default]+=" intel_iommu=on iommu=pt pcie_ports=compat" EOF fi diff --git a/install/config/hardware/fix-intel-panther-lake-display.sh b/install/config/hardware/fix-intel-panther-lake-display.sh new file mode 100644 index 00000000..00d0e249 --- /dev/null +++ b/install/config/hardware/fix-intel-panther-lake-display.sh @@ -0,0 +1,18 @@ +# Fix display issues on Intel Panther Lake (Xe3) GPUs by disabling power-saving +# features that cause screen to run at 10hz (e.g. Dell XPS 2026). +if lspci | grep -iE 'vga|3d|display' | grep -qi 'panther lake'; then + echo "Detected Intel Panther Lake GPU, applying display fixes..." + + PANTHER_LAKE_CMDLINE='KERNEL_CMDLINE[default]+=" xe.enable_psr=0 xe.enable_panel_replay=0 xe.enable_fbc=0 xe.enable_dc=0"' + + sudo mkdir -p /etc/limine-entry-tool.d + cat </dev/null +# Fix Panther Lake display issues by disabling Xe power-saving features +$PANTHER_LAKE_CMDLINE +EOF + + # Also append to /etc/default/limine if it exists, since it overrides drop-in configs + if [ -f /etc/default/limine ] && ! grep -q 'xe.enable_psr' /etc/default/limine; then + echo "$PANTHER_LAKE_CMDLINE" | sudo tee -a /etc/default/limine >/dev/null + fi +fi diff --git a/install/config/hardware/intel.sh b/install/config/hardware/intel.sh index f1c375d7..41e421a7 100644 --- a/install/config/hardware/intel.sh +++ b/install/config/hardware/intel.sh @@ -1,8 +1,8 @@ # This installs hardware video acceleration for Intel GPUs # Check if we have an Intel GPU at all if INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel'); then - # HD Graphics and newer uses intel-media-driver - if [[ ${INTEL_GPU,,} =~ "hd graphics"|"xe"|"iris" ]]; then + # HD Graphics / Iris / Xe / Arc use intel-media-driver + if [[ ${INTEL_GPU,,} =~ (hd\ graphics|uhd\ graphics|xe|iris|arc) ]]; then omarchy-pkg-add intel-media-driver elif [[ ${INTEL_GPU,,} =~ "gma" ]]; then # Older generations from 2008 to ~2014-2017 use libva-intel-driver diff --git a/install/config/makima.sh b/install/config/makima.sh new file mode 100644 index 00000000..bee64136 --- /dev/null +++ b/install/config/makima.sh @@ -0,0 +1,14 @@ +# Remap Copilot key (Super+Shift+F23) to Super+Alt+Space (Omarchy Menu) using makima +mkdir -p "$HOME/.config/makima" +cp "$OMARCHY_PATH/default/makima/AT Translated Set 2 keyboard.toml" "$HOME/.config/makima/" + +# Create systemd override with correct user and config path +sudo mkdir -p /etc/systemd/system/makima.service.d +sudo tee /etc/systemd/system/makima.service.d/override.conf > /dev/null </dev/null || true diff --git a/install/config/plocate-ac-only.sh b/install/config/plocate-ac-only.sh new file mode 100644 index 00000000..31cd088f --- /dev/null +++ b/install/config/plocate-ac-only.sh @@ -0,0 +1,3 @@ +sudo install -d /etc/systemd/system/plocate-updatedb.service.d +printf '%s\n' '[Unit]' 'ConditionACPower=true' | sudo tee /etc/systemd/system/plocate-updatedb.service.d/ac-only.conf >/dev/null +sudo systemctl daemon-reload diff --git a/install/login/limine-snapper.sh b/install/login/limine-snapper.sh index 734e2c48..c91815dc 100644 --- a/install/login/limine-snapper.sh +++ b/install/login/limine-snapper.sh @@ -32,6 +32,11 @@ EOF sudo cp $OMARCHY_PATH/default/limine/default.conf /etc/default/limine sudo sed -i "s|@@CMDLINE@@|$CMDLINE|g" /etc/default/limine + # Append any drop-in kernel cmdline configs (from hardware fix scripts, etc.) + for dropin in /etc/limine-entry-tool.d/*.conf; do + [ -f "$dropin" ] && cat "$dropin" | sudo tee -a /etc/default/limine >/dev/null + done + # UKI and EFI fallback are EFI only if [[ -z $EFI ]]; then sudo sed -i '/^ENABLE_UKI=/d; /^ENABLE_LIMINE_FALLBACK=/d' /etc/default/limine diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages index ebcddb72..2974fbde 100644 --- a/install/omarchy-base.packages +++ b/install/omarchy-base.packages @@ -75,6 +75,7 @@ libreoffice-fresh llvm localsend luarocks +makima-bin mako man-db mariadb-libs diff --git a/migrations/1762156000.sh b/migrations/1762156000.sh index 42b82248..266daf38 100644 --- a/migrations/1762156000.sh +++ b/migrations/1762156000.sh @@ -1,3 +1,3 @@ echo "Drop wayfreeze as hyprpicker replaces its function" -omarchy-pkg-drop wayfreeze \ No newline at end of file +omarchy-pkg-drop wayfreeze-git wayfreeze diff --git a/migrations/1772379119.sh b/migrations/1772379119.sh new file mode 100644 index 00000000..12e10134 --- /dev/null +++ b/migrations/1772379119.sh @@ -0,0 +1,13 @@ +echo "Add Alt+Shift+Arrow keybindings for swapping tmux windows" + +TMUX_CONF=~/.config/tmux/tmux.conf + +if [[ -f $TMUX_CONF ]]; then + if ! grep -q "bind -n M-S-Left swap-window" "$TMUX_CONF"; then + sed -i '/bind -n M-Right select-window -t +1/a\ +bind -n M-S-Left swap-window -t -1 \\; select-window -t -1\ +bind -n M-S-Right swap-window -t +1 \\; select-window -t +1' "$TMUX_CONF" + fi + + omarchy-restart-tmux +fi diff --git a/migrations/1772389838.sh b/migrations/1772389838.sh new file mode 100644 index 00000000..8a98a3ea --- /dev/null +++ b/migrations/1772389838.sh @@ -0,0 +1,67 @@ +echo "Fix nvim transparency to preserve highlight foreground colors" + +TRANSPARENCY_FILE="$HOME/.config/nvim/plugin/after/transparency.lua" + +if [[ -f "$TRANSPARENCY_FILE" ]]; then + cat > "$TRANSPARENCY_FILE" << 'EOF' +-- Make highlight groups transparent while preserving their other attributes +local function make_transparent(name) + local ok, hl = pcall(vim.api.nvim_get_hl, 0, { name = name, link = false }) + if ok then + hl.bg = nil + vim.api.nvim_set_hl(0, name, hl) + end +end + +local groups = { + -- transparent background + "Normal", + "NormalFloat", + "FloatBorder", + "Pmenu", + "Terminal", + "EndOfBuffer", + "FoldColumn", + "Folded", + "SignColumn", + "LineNr", + "CursorLineNr", + "NormalNC", + "WhichKeyFloat", + "TelescopeBorder", + "TelescopeNormal", + "TelescopePromptBorder", + "TelescopePromptTitle", + -- neotree + "NeoTreeNormal", + "NeoTreeNormalNC", + "NeoTreeVertSplit", + "NeoTreeWinSeparator", + "NeoTreeEndOfBuffer", + -- nvim-tree + "NvimTreeNormal", + "NvimTreeVertSplit", + "NvimTreeEndOfBuffer", + -- notify + "NotifyINFOBody", + "NotifyERRORBody", + "NotifyWARNBody", + "NotifyTRACEBody", + "NotifyDEBUGBody", + "NotifyINFOTitle", + "NotifyERRORTitle", + "NotifyWARNTitle", + "NotifyTRACETitle", + "NotifyDEBUGTitle", + "NotifyINFOBorder", + "NotifyERRORBorder", + "NotifyWARNBorder", + "NotifyTRACEBorder", + "NotifyDEBUGBorder", +} + +for _, name in ipairs(groups) do + make_transparent(name) +end +EOF +fi diff --git a/migrations/1772632144.sh b/migrations/1772632144.sh new file mode 100644 index 00000000..2cfbd84c --- /dev/null +++ b/migrations/1772632144.sh @@ -0,0 +1,7 @@ +echo "Use mise shims in ~/.config/uwsm/env" + +UWSM_ENV="$HOME/.config/uwsm/env" + +if [[ -f $UWSM_ENV ]] && grep -q 'mise activate bash)' "$UWSM_ENV"; then + sed -i 's/mise activate bash)/mise activate bash --shims)/g' "$UWSM_ENV" +fi diff --git a/migrations/1772734610.sh b/migrations/1772734610.sh new file mode 100644 index 00000000..18c40409 --- /dev/null +++ b/migrations/1772734610.sh @@ -0,0 +1,4 @@ +echo "Remap Copilot key to Omarchy Menu using makima" + +omarchy-pkg-add makima-bin +source $OMARCHY_PATH/install/config/makima.sh diff --git a/migrations/1772907198.sh b/migrations/1772907198.sh new file mode 100644 index 00000000..82f21fe0 --- /dev/null +++ b/migrations/1772907198.sh @@ -0,0 +1,11 @@ +echo "Add automatic-rename settings to tmux configuration" + +if [[ -f ~/.config/tmux/tmux.conf ]]; then + if ! grep -q "set -gw automatic-rename on" ~/.config/tmux/tmux.conf; then + sed -i '/set -g window-status-separator ""/a\ +set -gw automatic-rename on\ +set -gw automatic-rename-format '\''#{b:pane_current_path}'\''\ +' ~/.config/tmux/tmux.conf + omarchy-restart-tmux + fi +fi diff --git a/migrations/1772964511.sh b/migrations/1772964511.sh new file mode 100644 index 00000000..0de1dedb --- /dev/null +++ b/migrations/1772964511.sh @@ -0,0 +1,3 @@ +echo "Only run plocate indexing on AC power to prevent hangs after sleep" + +source $OMARCHY_PATH/install/config/plocate-ac-only.sh diff --git a/migrations/1772981555.sh b/migrations/1772981555.sh new file mode 100644 index 00000000..d843150f --- /dev/null +++ b/migrations/1772981555.sh @@ -0,0 +1,7 @@ +echo "Update hyprland-preview-share-picker config to default to outputs page" + +CONFIG_FILE=~/.config/hyprland-preview-share-picker/config.yaml + +if [[ -f $CONFIG_FILE ]]; then + sed -i 's/^default_page: windows$/default_page: outputs/' "$CONFIG_FILE" +fi diff --git a/migrations/1772981757.sh b/migrations/1772981757.sh new file mode 100644 index 00000000..145938b6 --- /dev/null +++ b/migrations/1772981757.sh @@ -0,0 +1,5 @@ +echo "Install Intel GPU hardware acceleration drivers if missing" + +if lspci | grep -iE 'vga|3d|display' | grep -qi 'intel'; then + source "$OMARCHY_PATH/install/config/hardware/intel.sh" +fi diff --git a/version b/version index 47b322c9..4d9d11cf 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.4.1 +3.4.2