diff --git a/bin/omarchy-first-run b/bin/omarchy-first-run index 023d1a65..659ec319 100755 --- a/bin/omarchy-first-run +++ b/bin/omarchy-first-run @@ -18,6 +18,7 @@ if [[ -f $FIRST_RUN_MODE ]]; then bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh" bash "$OMARCHY_PATH/install/first-run/swayosd.sh" bash "$OMARCHY_PATH/install/first-run/gtk-primary-paste.sh" + bash "$OMARCHY_PATH/install/first-run/text-scaling.sh" bash "$OMARCHY_PATH/install/first-run/elephant.sh" omarchy-hook-install post-update "$OMARCHY_PATH/install/first-run/install-voxtype.hook" sudo rm -f /etc/sudoers.d/first-run diff --git a/bin/omarchy-hw-intel-sof b/bin/omarchy-hw-intel-sof new file mode 100755 index 00000000..387ca38b --- /dev/null +++ b/bin/omarchy-hw-intel-sof @@ -0,0 +1,7 @@ +#!/bin/bash + +# omarchy:summary=Detect whether the computer has an Intel SOF-capable audio DSP. +# Matches Intel audio controllers (PCI class Multimedia audio or Audio device) +# present on Skylake-and-later platforms that use sof-audio-pci-intel-* drivers. + +lspci | grep -qiE '(Multimedia audio controller|Audio device).*Intel' diff --git a/bin/omarchy-pkg-drop b/bin/omarchy-pkg-drop index 0cbbfca6..7e5dd4b2 100755 --- a/bin/omarchy-pkg-drop +++ b/bin/omarchy-pkg-drop @@ -6,7 +6,7 @@ installed=() for pkg in "$@"; do - if pacman -Q "$pkg" &>/dev/null; then + if pacman -Qq | grep -Fxq "$pkg"; then installed+=("$pkg") fi done diff --git a/bin/omarchy-setup-security-fingerprint b/bin/omarchy-setup-security-fingerprint index f704348e..08588be0 100755 --- a/bin/omarchy-setup-security-fingerprint +++ b/bin/omarchy-setup-security-fingerprint @@ -53,12 +53,12 @@ echo -e "\e[32mSetting up fingerprint scanner for authentication.\n\e[0m" # Install required packages echo "Installing required packages..." +installed_libfprint=$(pacman -Qq libfprint 2>/dev/null || true) + # libfprint-git provides+conflicts libfprint; pacman -S --noconfirm -# defaults the conflict prompt to N and aborts. Pre-remove libfprint -# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's -# -Rns) is required because fprintd requires libfprint; the dep is -# re-satisfied immediately by libfprint-git's provides=libfprint. -if omarchy-pkg-present libfprint; then +# defaults the conflict prompt to N and aborts. Pre-remove the exact +# libfprint package, but not an installed provider like libfprint-git. +if [[ $installed_libfprint == "libfprint" ]]; then sudo pacman -Rdd --noconfirm libfprint fi diff --git a/config/alacritty/alacritty.toml b/config/alacritty/alacritty.toml index dcf34042..d1d90fb2 100644 --- a/config/alacritty/alacritty.toml +++ b/config/alacritty/alacritty.toml @@ -21,5 +21,8 @@ decorations = "None" bindings = [ { key = "Insert", mods = "Shift", action = "Paste" }, { key = "Insert", mods = "Control", action = "Copy" }, -{ key = "Return", mods = "Shift", chars = "\u001B\r" } +# Send Shift+Return as CSI-u so TUIs can distinguish it from Return without treating it as Alt+Return. +{ key = "Return", mods = "Shift", chars = "\u001B[13;2u" }, +# Legacy encoding sends Alt+Shift+Return the same as Alt+Return; send CSI-u so tmux can match M-S-Enter. +{ key = "Return", mods = "Alt|Shift", chars = "\u001B[13;4u" } ] diff --git a/config/foot/foot.ini b/config/foot/foot.ini index 9cbd91ec..ffb0cef1 100644 --- a/config/foot/foot.ini +++ b/config/foot/foot.ini @@ -17,3 +17,9 @@ blink=no clipboard-copy=Control+Insert primary-paste=none clipboard-paste=Shift+Insert + +[text-bindings] +# Send Shift+Return as CSI-u so TUIs can distinguish it from Return. +\x1b[13;2u=Shift+Return +# Send Alt+Shift+Return as CSI-u so tmux can match M-S-Enter. +\x1b[13;4u=Mod1+Shift+Return diff --git a/config/ghostty/config b/config/ghostty/config index d53f5c32..b121557b 100644 --- a/config/ghostty/config +++ b/config/ghostty/config @@ -25,6 +25,10 @@ shell-integration-features = no-cursor,ssh-env # Keyboard bindings keybind = shift+insert=paste_from_clipboard keybind = control+insert=copy_to_clipboard +# Send Shift+Enter as CSI-u so TUIs can distinguish it from Enter. +keybind = shift+enter=csi:13;2u +# Legacy encoding sends Alt+Shift+Enter the same as Alt+Enter; send CSI-u so tmux can match M-S-Enter. +keybind = alt+shift+enter=csi:13;4u keybind = super+control+shift+alt+arrow_down=resize_split:down,100 keybind = super+control+shift+alt+arrow_up=resize_split:up,100 keybind = super+control+shift+alt+arrow_left=resize_split:left,100 diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf index 7d550d78..48710ba6 100644 --- a/config/kitty/kitty.conf +++ b/config/kitty/kitty.conf @@ -13,6 +13,10 @@ confirm_os_window_close 0 # Keybindings map ctrl+insert copy_to_clipboard map shift+insert paste_from_clipboard +# Send Shift+Enter as CSI-u so TUIs can distinguish it from Enter. +map shift+enter send_text all \e[13;2u +# Kitty legacy encoding sends Alt+Shift+Enter the same as Alt+Enter; send CSI-u so tmux can match M-S-Enter. +map alt+shift+enter send_text all \e[13;4u # Allow remote access allow_remote_control yes diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf index de772031..470040a3 100644 --- a/config/tmux/tmux.conf +++ b/config/tmux/tmux.conf @@ -12,6 +12,10 @@ bind -T copy-mode-vi v send -X begin-selection bind -T copy-mode-vi y send -X copy-selection-and-cancel # Pane Controls +bind -n M-Enter split-window -v -c "#{pane_current_path}" +bind -n M-S-Enter split-window -h -c "#{pane_current_path}" +bind -n M-Escape kill-pane + bind h split-window -v -c "#{pane_current_path}" bind v split-window -h -c "#{pane_current_path}" bind x kill-pane @@ -72,6 +76,7 @@ setw -g aggressive-resize on set -g detach-on-destroy off set -g extended-keys on set -g extended-keys-format csi-u +set -ag terminal-features "xterm-kitty:extkeys" set -sg escape-time 10 # Status bar @@ -82,6 +87,8 @@ 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}' +set -g set-titles on +set -g set-titles-string '#h:#W' # Theme set -g status-style "bg=default,fg=default" diff --git a/default/bash/aliases b/default/bash/aliases index 656d145f..8bbfa5f5 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -45,12 +45,14 @@ alias ....='cd ../../..' # Tools alias c='opencode' alias cx='printf "\033[2J\033[3J\033[H" && claude --permission-mode bypassPermissions' +alias cy='codex -s danger-full-access -a never' alias d='docker' alias r='rails' alias t='tmux attach || tmux new -s Work' alias ic='tdl c' alias ix='tdl cx' alias icx='tdl c cx' +alias mup='MISE_MINIMUM_RELEASE_AGE=0 mise up' n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; } # Git diff --git a/install/config/hardware/intel/sof-firmware.sh b/install/config/hardware/intel/sof-firmware.sh index 36b0be95..6d9b1294 100644 --- a/install/config/hardware/intel/sof-firmware.sh +++ b/install/config/hardware/intel/sof-firmware.sh @@ -1,8 +1,9 @@ -# Install Sound Open Firmware for the audio DSP on non-XPS Intel Panther -# Lake systems. XPS PTL stays on linux-ptl, which hard-deps sof-firmware. -# Mainline `linux` only optdeps it, so without this the DSP fails to boot -# and only auto_null shows up in PipeWire. +# Install Sound Open Firmware for the audio DSP on Intel systems that need it. +# The sof-audio-pci-intel-* driver family requires sof-firmware to initialise +# the DSP; without it the DSP fails to boot and PipeWire exposes only a Dummy +# Output sink. This affects Arrow Lake, Meteor Lake, Tiger Lake, Alder Lake, +# Wildcat Lake, Panther Lake, and similar platforms. -if omarchy-hw-intel-ptl && ! omarchy-hw-match "XPS"; then +if omarchy-hw-intel-sof; then omarchy-pkg-add sof-firmware fi diff --git a/install/config/powerprofilesctl-rules.sh b/install/config/powerprofilesctl-rules.sh index 0715a1c6..e099f5d3 100644 --- a/install/config/powerprofilesctl-rules.sh +++ b/install/config/powerprofilesctl-rules.sh @@ -1,7 +1,7 @@ if omarchy-battery-present; then cat </dev/null; then sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf </dev/null HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) +FILES+=(/etc/vconsole.conf) EOF sudo tee /etc/mkinitcpio.conf.d/thunderbolt_module.conf </dev/null MODULES+=(thunderbolt) diff --git a/migrations/1783355853.sh b/migrations/1783355853.sh new file mode 100644 index 00000000..6c44856f --- /dev/null +++ b/migrations/1783355853.sh @@ -0,0 +1,11 @@ +echo "Bundle the console keymap into the initramfs so Plymouth uses the right keyboard layout at the LUKS prompt" + +HOOKS_CONF="/etc/mkinitcpio.conf.d/omarchy_hooks.conf" + +if [[ -f $HOOKS_CONF ]] && ! grep -q '/etc/vconsole.conf' "$HOOKS_CONF"; then + echo "FILES+=(/etc/vconsole.conf)" | sudo tee -a "$HOOKS_CONF" >/dev/null + + if omarchy-cmd-present limine-mkinitcpio; then + sudo limine-mkinitcpio + fi +fi diff --git a/migrations/1783625095.sh b/migrations/1783625095.sh new file mode 100644 index 00000000..d3c4cd91 --- /dev/null +++ b/migrations/1783625095.sh @@ -0,0 +1,19 @@ +echo "Backfill Mesa Vulkan drivers for systems installed before vulkan.sh was added" + +declare -A VULKAN_DRIVERS=( + [Intel]=vulkan-intel + [AMD]=vulkan-radeon + [Apple]=vulkan-asahi +) + +PACKAGES=() + +for vendor in "${!VULKAN_DRIVERS[@]}"; do + if lspci | grep -iE "(VGA|Display).*$vendor" > /dev/null; then + PACKAGES+=("${VULKAN_DRIVERS[$vendor]}") + fi +done + +if (( ${#PACKAGES[@]} > 0 )); then + omarchy-pkg-add "${PACKAGES[@]}" +fi diff --git a/migrations/1783833508.sh b/migrations/1783833508.sh new file mode 100644 index 00000000..7572dcfe --- /dev/null +++ b/migrations/1783833508.sh @@ -0,0 +1,65 @@ +echo "Add easier tmux pane controls with Alt+Enter splits and CSI-u Shift+Enter across terminals" + +# tmux: add pane bindings, enable kitty extkeys, and set informative terminal titles +tmux_config="$HOME/.config/tmux/tmux.conf" +if [[ -f $tmux_config ]]; then + if ! grep -Fq 'bind -n M-Escape kill-pane' "$tmux_config"; then + sed -i '/^# Pane Controls$/a\bind -n M-Escape kill-pane' "$tmux_config" + fi + + if ! grep -Fq 'bind -n M-S-Enter split-window' "$tmux_config"; then + sed -i '/^# Pane Controls$/a\bind -n M-S-Enter split-window -h -c "#{pane_current_path}"' "$tmux_config" + fi + + if ! grep -Fq 'bind -n M-Enter split-window' "$tmux_config"; then + sed -i '/^# Pane Controls$/a\bind -n M-Enter split-window -v -c "#{pane_current_path}"' "$tmux_config" + fi + + if ! grep -q "xterm-kitty:extkeys" "$tmux_config"; then + sed -i '/^set -g extended-keys-format csi-u$/a\set -ag terminal-features "xterm-kitty:extkeys"' "$tmux_config" + fi + + if ! grep -Fq 'set -g set-titles on' "$tmux_config"; then + sed -i "/^set -gw automatic-rename-format/a\\set -g set-titles on" "$tmux_config" + fi + + if ! grep -Fq 'set -g set-titles-string' "$tmux_config"; then + sed -i "/^set -g set-titles on$/a\\set -g set-titles-string '#h:#W'" "$tmux_config" + fi + + omarchy-restart-tmux +fi + +# alacritty: replace the old Shift+Return binding with CSI-u encodings +alacritty_config="$HOME/.config/alacritty/alacritty.toml" +if [[ -f $alacritty_config ]] && ! grep -q '13;2u' "$alacritty_config"; then + sed -i -E 's|^([[:space:]]*).*chars = "\\u001B\\r".*|\1# Send Shift+Return as CSI-u so TUIs can distinguish it from Return without treating it as Alt+Return.\n\1{ key = "Return", mods = "Shift", chars = "\\u001B[13;2u" },\n\1# Legacy encoding sends Alt+Shift+Return the same as Alt+Return; send CSI-u so tmux can match M-S-Enter.\n\1{ key = "Return", mods = "Alt\|Shift", chars = "\\u001B[13;4u" }|' "$alacritty_config" +fi + +# foot: add CSI-u text bindings for Shift+Return and Alt+Shift+Return +foot_config="$HOME/.config/foot/foot.ini" +if [[ -f $foot_config ]]; then + if ! grep -q '^\[text-bindings\]$' "$foot_config"; then + sed -i '$a\\\n[text-bindings]' "$foot_config" + fi + + if ! grep -Fq '\x1b[13;4u=Mod1+Shift+Return' "$foot_config"; then + sed -i '/^\[text-bindings\]$/a\# Send Alt+Shift+Return as CSI-u so tmux can match M-S-Enter.\n\\x1b[13;4u=Mod1+Shift+Return' "$foot_config" + fi + + if ! grep -Fq '\x1b[13;2u=Shift+Return' "$foot_config"; then + sed -i '/^\[text-bindings\]$/a\# Send Shift+Return as CSI-u so TUIs can distinguish it from Return.\n\\x1b[13;2u=Shift+Return' "$foot_config" + fi +fi + +# ghostty: add CSI-u keybinds for Shift+Enter and Alt+Shift+Enter +ghostty_config="$HOME/.config/ghostty/config" +if [[ -f $ghostty_config ]] && ! grep -q 'csi:13;2u' "$ghostty_config"; then + sed -i '/^keybind = control+insert=copy_to_clipboard$/a\# Send Shift+Enter as CSI-u so TUIs can distinguish it from Enter.\nkeybind = shift+enter=csi:13;2u\n# Legacy encoding sends Alt+Shift+Enter the same as Alt+Enter; send CSI-u so tmux can match M-S-Enter.\nkeybind = alt+shift+enter=csi:13;4u' "$ghostty_config" +fi + +# kitty: add CSI-u key mappings for Shift+Enter and Alt+Shift+Enter +kitty_config="$HOME/.config/kitty/kitty.conf" +if [[ -f $kitty_config ]] && ! grep -q '13;2u' "$kitty_config"; then + sed -i '/^map shift+insert paste_from_clipboard$/a\# Send Shift+Enter as CSI-u so TUIs can distinguish it from Enter.\nmap shift+enter send_text all \\e[13;2u\n# Kitty legacy encoding sends Alt+Shift+Enter the same as Alt+Enter; send CSI-u so tmux can match M-S-Enter.\nmap alt+shift+enter send_text all \\e[13;4u' "$kitty_config" +fi diff --git a/migrations/1783834201.sh b/migrations/1783834201.sh new file mode 100644 index 00000000..a0aac722 --- /dev/null +++ b/migrations/1783834201.sh @@ -0,0 +1,11 @@ +echo "Install sof-firmware for all Intel SOF audio DSP platforms (Arrow Lake, Meteor Lake, etc.)" + +# Intel SOF platforms beyond Panther Lake and Wildcat Lake (Arrow Lake, Meteor +# Lake, Tiger Lake, Alder Lake) were not covered by the original sof-firmware +# install guard. Without sof-firmware the DSP fails to boot and PipeWire exposes +# only a Dummy Output. Install it now for all qualifying Intel systems. + +if omarchy-hw-intel-sof && omarchy-pkg-missing sof-firmware; then + omarchy-pkg-add sof-firmware + omarchy-state set reboot-required +fi diff --git a/version b/version index a08ffae0..269aa9c8 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.8.2 +3.8.3