Compare commits

..

2 Commits

Author SHA1 Message Date
Ryan Hughes
9dcc6f0aec Add omarchy-doctor checks 2025-09-28 00:45:37 -04:00
Ryan Hughes
57a977a51d Add omarchy-doctor 2025-09-28 00:41:37 -04:00
99 changed files with 1386 additions and 836 deletions

View File

@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true

View File

@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true

View File

@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true

View File

@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true

View File

@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true

View File

@@ -2,7 +2,7 @@
Name=Neovim Name=Neovim
GenericName=Text Editor GenericName=Text Editor
Comment=Edit text files Comment=Edit text files
Exec=sh -c "$TERMINAL --class=nvim --title=nvim -e nvim -- %F" Exec=$TERMINAL --class=nvim --title=nvim -e nvim -- %F
Terminal=false Terminal=false
Type=Application Type=Application
Keywords=Text;editor; Keywords=Text;editor;

View File

@@ -15,7 +15,7 @@ SCOPE="$1"
AUDIO=$([[ $2 == "audio" ]] && echo "--audio") AUDIO=$([[ $2 == "audio" ]] && echo "--audio")
start_screenrecording() { start_screenrecording() {
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4" filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
if lspci | grep -qi 'nvidia'; then if lspci | grep -qi 'nvidia'; then
wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" & wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" &
@@ -47,8 +47,7 @@ screenrecording_active() {
if screenrecording_active; then if screenrecording_active; then
stop_screenrecording stop_screenrecording
elif [[ "$SCOPE" == "output" ]]; then elif [[ "$SCOPE" == "output" ]]; then
output=$(slurp -o) || exit 1 start_screenrecording
start_screenrecording -g "$output"
else else
region=$(slurp) || exit 1 region=$(slurp) || exit 1
start_screenrecording -g "$region" start_screenrecording -g "$region"

View File

@@ -18,7 +18,7 @@ hyprctl keyword cursor:invisible true
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

161
bin/omarchy-doctor Executable file
View File

@@ -0,0 +1,161 @@
#!/bin/bash
# Request sudo upfront to avoid prompts during checks
sudo -v
# Keep sudo alive during the script
(while true; do sudo -v; sleep 50; done) &
SUDO_REFRESH_PID=$!
trap "kill $SUDO_REFRESH_PID 2>/dev/null" EXIT
# Define Omarchy locations
export OMARCHY_PATH="/home/ryan/Work/omarchy/omarchy-installer"
export OMARCHY_INSTALL="$OMARCHY_PATH/install"
# Track results
failed_checks=0
passed_checks=0
skipped_checks=0
total_checks=0
# Function to display a message with icon
show_message() {
local type="$1"
local msg="$2"
case "$type" in
error) printf " ❌ ERROR %s\n" "$msg" ;;
warning) printf " ⚠️ WARNING %s\n" "$msg" ;;
info) printf " ✅ OK %s\n" "$msg" ;;
esac
}
# Function to check a single script
check_script() {
local script="$1"
local script_name="${script#$OMARCHY_INSTALL/}"
# Check if script has verify function
if ! bash -c "source '$script' && declare -f omarchy_verify" >/dev/null 2>&1; then
((skipped_checks++))
return
fi
((total_checks++))
# Get friendly name
local friendly_name=$(bash -c "source '$script' 2>/dev/null; echo \"\${OMARCHY_DESCRIPTION:-$script_name}\"")
# Run verification in subshell and capture output
local output
output=$(
errors=()
warnings=()
infos=()
add_error() { errors+=("$1"); }
add_warning() { warnings+=("$1"); }
add_info() { infos+=("$1"); }
source "$script"
omarchy_verify
exit_code=$?
# Output results with delimiters
echo "EXIT:$exit_code"
for e in "${errors[@]}"; do echo "ERROR:$e"; done
for w in "${warnings[@]}"; do echo "WARNING:$w"; done
for i in "${infos[@]}"; do echo "INFO:$i"; done
)
# Parse output
local exit_code errors=() warnings=() infos=()
while IFS= read -r line; do
case "$line" in
EXIT:*) exit_code="${line#EXIT:}" ;;
ERROR:*) errors+=("${line#ERROR:}") ;;
WARNING:*) warnings+=("${line#WARNING:}") ;;
INFO:*) infos+=("${line#INFO:}") ;;
esac
done <<< "$output"
# Handle skipped (return code 2)
if [[ $exit_code -eq 2 ]]; then
((skipped_checks++))
return
fi
# Count messages
local error_count=${#errors[@]}
local warning_count=${#warnings[@]}
# Determine status
local status_icon status_color
if [[ $error_count -gt 0 ]]; then
status_icon="❌"
status_color="1" # Red
((failed_checks++))
elif [[ $warning_count -gt 0 ]]; then
status_icon="⚠️"
status_color="3" # Yellow
((passed_checks++))
else
status_icon="✅"
status_color="2" # Green
((passed_checks++))
fi
# Display result
printf "%s %s\n" "$status_icon" "$(gum style --foreground "$status_color" --bold "$friendly_name")"
# Display messages if any errors or warnings
if [[ $error_count -gt 0 || $warning_count -gt 0 ]]; then
for msg in "${errors[@]}"; do
show_message error "$msg"
done
for msg in "${warnings[@]}"; do
show_message warning "$msg"
done
for msg in "${infos[@]}"; do
show_message info "$msg"
done
fi
echo
}
# Main execution
echo
gum style --italic --foreground 7 "Running health checks..."
echo
# Process all scripts
while IFS= read -r script; do
# Skip certain directories
if [[ "$script" == */all.sh ]] ||
[[ "$script" == */helpers/* ]] ||
[[ "$script" == */preflight/* ]] ||
[[ "$script" == */first-run/* ]] ||
[[ "$script" == */post-install/* ]]; then
continue
fi
check_script "$script"
done < <(find "$OMARCHY_INSTALL" -type f -name "*.sh" | sort)
# Display summary
echo
echo "Summary:"
echo " Passed: $passed_checks/$total_checks"
[[ $failed_checks -gt 0 ]] && echo " Failed: $failed_checks/$total_checks"
[[ $skipped_checks -gt 0 ]] && echo " Skipped: $skipped_checks"
echo
if [[ $failed_checks -gt 0 ]]; then
echo "❌ Some checks failed. Please review the errors above."
exit 1
else
echo "✅ All checks passed!"
fi

View File

@@ -3,7 +3,7 @@
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB") options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB")
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 databases (space to select, return to install, esc to cancel)") || main_menu
else else
choices="$@" choices="$@"
fi fi

View File

@@ -3,7 +3,7 @@
browser=$(xdg-settings get default-web-browser) browser=$(xdg-settings get default-web-browser)
case $browser in case $browser in
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium-browser*) ;; google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi*) ;;
*) browser="chromium.desktop" ;; *) browser="chromium.desktop" ;;
esac esac

View File

@@ -451,9 +451,9 @@ show_system_menu() {
*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 ;; *Relaunch*) uwsm stop ;;
*Restart*) omarchy-state clear re*-required && systemctl reboot ;; *Restart*) systemctl reboot ;;
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff ;; *Shutdown*) systemctl poweroff ;;
*) back_to show_main_menu ;; *) back_to show_main_menu ;;
esac esac
} }

View File

@@ -3,69 +3,6 @@
# A script to display Hyprland keybindings defined in your configuration # A script to display Hyprland keybindings defined in your configuration
# using walker for an interactive search menu. # using walker for an interactive search menu.
declare -A KEYCODE_SYM_MAP
build_keymap_cache() {
local keymap
keymap="$(xkbcli compile-keymap)" || {
echo "Failed to compile keymap" >&2
return 1
}
while IFS=, read -r code sym; do
[[ -z "$code" || -z "$sym" ]] && continue
KEYCODE_SYM_MAP["$code"]="$sym"
done < <(
awk '
BEGIN { sec = "" }
/xkb_keycodes/ { sec = "codes"; next }
/xkb_symbols/ { sec = "syms"; next }
sec == "codes" {
if (match($0, /<([A-Za-z0-9_]+)>\s*=\s*([0-9]+)\s*;/, m)) code_by_name[m[1]] = m[2]
}
sec == "syms" {
if (match($0, /key\s*<([A-Za-z0-9_]+)>\s*\{\s*\[\s*([^, \]]+)/, m)) sym_by_name[m[1]] = m[2]
}
END {
for (k in code_by_name) {
c = code_by_name[k]
s = sym_by_name[k]
if (c != "" && s != "" && s != "NoSymbol") print c "," s
}
}
' <<<"$keymap"
)
}
lookup_keycode_cached() {
printf '%s\n' "${KEYCODE_SYM_MAP[$1]}"
}
parse_keycodes() {
local start end elapsed
[[ "${DEBUG:-0}" == "1" ]] && start=$(date +%s.%N)
while IFS= read -r line; do
if [[ "$line" =~ code:([0-9]+) ]]; then
code="${BASH_REMATCH[1]}"
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
echo "${line/code:${code}/$symbol}"
else
echo "$line"
fi
done
if [[ "$DEBUG" == "1" ]]; then
end=$(date +%s.%N)
# fall back to awk if bc is missing
if command -v bc >/dev/null 2>&1; then
elapsed=$(echo "$end - $start" | bc)
else
elapsed=$(awk -v s="$start" -v e="$end" 'BEGIN{printf "%.6f", (e - s)}')
fi
echo "[DEBUG] parse_keycodes elapsed: ${elapsed}s" >&2
fi
}
# Fetch dynamic keybindings from Hyprland # Fetch dynamic keybindings from Hyprland
# #
# Also do some pre-processing: # Also do some pre-processing:
@@ -74,8 +11,8 @@ parse_keycodes() {
# - Map numeric modifier key mask to a textual rendition # - Map numeric modifier key mask to a textual rendition
# - Output comma-separated values that the parser can understand # - Output comma-separated values that the parser can understand
dynamic_bindings() { dynamic_bindings() {
hyprctl -j binds | hyprctl -j binds | \
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' | jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' | \
sed -r \ sed -r \
-e 's/null//' \ -e 's/null//' \
-e 's,~/.local/share/omarchy/bin/,,' \ -e 's,~/.local/share/omarchy/bin/,,' \
@@ -149,10 +86,8 @@ parse_bindings() {
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height') monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
menu_height=$((monitor_height * 40 / 100)) menu_height=$((monitor_height * 40 / 100))
build_keymap_cache dynamic_bindings | \
sort -u | \
dynamic_bindings | parse_bindings | \
sort -u |
parse_keycodes |
parse_bindings |
walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height" walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height"

View File

@@ -1,12 +1,8 @@
#!/bin/bash #!/bin/bash
sudo pacman -S --noconfirm --needed "$@" || exit 1
for pkg in "$@"; do for pkg in "$@"; do
# Secondary check to handle states where pacman doesn't actually register an error
if ! pacman -Q "$pkg" &>/dev/null; then if ! pacman -Q "$pkg" &>/dev/null; then
echo -e "\033[31mError: Package '$pkg' did not install\033[0m" >&2 sudo pacman -S --noconfirm "$pkg" || exit 1
exit 1
fi fi
done done

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
echo -e "Restarting pipewire audio service...\n" echo -e "Restarting pirewire audio service...\n"
systemctl --user restart pipewire.service systemctl --user restart pipewire.service

View File

@@ -20,7 +20,7 @@ print_info() {
} }
check_fingerprint_hardware() { check_fingerprint_hardware() {
if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix|elan|validity|FPC'; then if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix|elan|validity'; then
print_error "\nNo fingerprint sensor detected." print_error "\nNo fingerprint sensor detected."
return 1 return 1
fi fi

View File

@@ -4,17 +4,16 @@ 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 brave; then
if [[ -f $CHROMIUM_THEME ]]; then if [[ -f $CHROMIUM_THEME ]]; then
THEME_RGB_COLOR=$(<$CHROMIUM_THEME) rgb=$(<$CHROMIUM_THEME)
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${rgb//,/ }) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${rgb//,/ })
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_HEX_COLOR="#1c2027" THEME_HEX_COLOR="#1c2027"
fi fi
if omarchy-cmd-present chromium; then if omarchy-cmd-present chromium; then
rm -f /etc/chromium/policies/managed/color.json echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR" chromium --refresh-platform-policy --no-startup-window
fi fi
if omarchy-cmd-present brave; then if omarchy-cmd-present brave; then

View File

@@ -43,7 +43,7 @@ cat >"$DESKTOP_FILE" <<EOF
Version=1.0 Version=1.0
Name=$APP_NAME Name=$APP_NAME
Comment=$APP_NAME Comment=$APP_NAME
Exec=\$TERMINAL --class=$APP_CLASS -e $APP_EXEC Exec=$TERMINAL --class $APP_CLASS -e $APP_EXEC
Terminal=false Terminal=false
Type=Application Type=Application
Icon=$ICON_PATH Icon=$ICON_PATH

View File

@@ -1,2 +1,3 @@
#!/bin/bash #!/bin/bash
cat $OMARCHY_PATH/version
git -C "$OMARCHY_PATH" describe --tags $(git -C "$OMARCHY_PATH" rev-list --tags --max-count=1)

View File

@@ -1,11 +0,0 @@
#!/bin/bash
url="$1"
web_url="https://app.hey.com"
# Handle mailto: URLs
if [[ $url =~ ^mailto: ]]; then
email=$(echo "$url" | sed 's/mailto://')
web_url="https://app.hey.com/messages/new?to=$email"
fi
exec omarchy-launch-webapp "$web_url"

View File

@@ -6,7 +6,7 @@ DESKTOP_DIR="$HOME/.local/share/applications/"
if [ "$#" -eq 0 ]; then if [ "$#" -eq 0 ]; then
# Find all web apps # Find all web apps
while IFS= read -r -d '' file; do while IFS= read -r -d '' file; do
if grep -q '^Exec=.*\(omarchy-launch-webapp\|omarchy-webapp-handler\).*' "$file"; then if grep -q '^Exec=.*omarchy-launch-webapp.*' "$file"; then
WEB_APPS+=("$(basename "${file%.desktop}")") WEB_APPS+=("$(basename "${file%.desktop}")")
fi fi
done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0) done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0)

View File

@@ -2,7 +2,7 @@
$terminal = uwsm app -- $TERMINAL $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, F, File manager, exec, uwsm app -- nautilus --new-window
bindd = SUPER, B, Browser, exec, $browser bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private
@@ -12,7 +12,7 @@ bindd = SUPER, T, Activity, exec, $terminal -e btop
bindd = SUPER, D, Docker, exec, $terminal -e lazydocker bindd = SUPER, D, Docker, exec, $terminal -e lazydocker
bindd = SUPER, G, Signal, exec, omarchy-launch-or-focus signal "uwsm app -- signal-desktop" bindd = SUPER, 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, 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, slash, Passwords, exec, uwsm app -- 1password
# If your web app url contains #, type it as ## to prevent hyperland treat it as comments # If your web app url contains #, type it as ## to prevent hyperland treat it as comments
bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"

View File

@@ -3,7 +3,7 @@
input { input {
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt # Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
# kb_layout = us,dk,eu # kb_layout = us,dk,eu
kb_options = compose:caps # ,grp:shifts_toggle kb_options = compose:caps # ,grp:alts_toggle
# Change speed of keyboard repeat # Change speed of keyboard repeat
repeat_rate = 40 repeat_rate = 40
@@ -12,7 +12,7 @@ input {
# Start with numlock on by default # Start with numlock on by default
numlock_by_default = true numlock_by_default = true
# Increase sensitivity for mouse/trackpad (default: 0) # Increase sensitity for mouse/trackpack (default: 0)
# sensitivity = 0.35 # sensitivity = 0.35
touchpad { touchpad {

View File

@@ -15,9 +15,3 @@ decoration {
# Use round window corners # Use round window corners
# rounding = 8 # rounding = 8
} }
# https://wiki.hypr.land/Configuring/Dwindle-Layout/
dwindle {
# Avoid overly wide single-window layouts on wide screens
# single_window_aspect_ratio = 1 1
}

View File

@@ -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,
},
}

View File

@@ -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,
},
}

View File

@@ -0,0 +1,8 @@
return {
{
"LazyVim/LazyVim",
opts = {
colorscheme = "tokyonight",
},
},
}

View File

@@ -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:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable)
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

View File

@@ -1,4 +1,4 @@
# Float Steam # Float Steam, fullscreen RetroArch
windowrule = float, class:steam windowrule = float, class:steam
windowrule = center, class:steam, title:Steam windowrule = center, class:steam, title:Steam
windowrule = opacity 1 1, class:steam windowrule = opacity 1 1, class:steam

View File

@@ -4,7 +4,7 @@ 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 = 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 = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+'
exec-once = omarchy-cmd-first-run exec-once = omarchy-cmd-first-run

View File

@@ -1,6 +1,6 @@
# Deprecated bindings file. New installations include everything directly. # Deprecated bindings file. New installations include everything directly.
bindd = SUPER, RETURN, Terminal, exec, $terminal bindd = SUPER, return, Terminal, exec, $terminal
bindd = SUPER, F, File manager, exec, $fileManager bindd = SUPER, F, File manager, exec, $fileManager
bindd = SUPER, B, Web browser, exec, $browser bindd = SUPER, B, Web browser, exec, $browser
bindd = SUPER, M, Music player, exec, $music bindd = SUPER, M, Music player, exec, $music
@@ -9,7 +9,7 @@ bindd = SUPER, T, Top, exec, $terminal -e btop
bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker
bindd = SUPER, G, Messenger, exec, $messenger bindd = SUPER, G, Messenger, exec, $messenger
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
bindd = SUPER, SLASH, Password manager, exec, $passwordManager bindd = SUPER, slash, Password manager, exec, $passwordManager
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/tiling.conf

View File

@@ -10,10 +10,10 @@ bindd = SHIFT, F11, Force full screen, fullscreen, 0
bindd = ALT, F11, Full width, fullscreen, 1 bindd = ALT, F11, Full width, fullscreen, 1
# Move focus with SUPER + arrow keys # Move focus with SUPER + arrow keys
bindd = SUPER, LEFT, Move focus left, movefocus, l bindd = SUPER, left, Move focus left, movefocus, l
bindd = SUPER, RIGHT, Move focus right, movefocus, r bindd = SUPER, right, Move focus right, movefocus, r
bindd = SUPER, UP, Move focus up, movefocus, u bindd = SUPER, up, Move focus up, movefocus, u
bindd = SUPER, DOWN, Move focus down, movefocus, d bindd = SUPER, down, Move focus down, movefocus, d
# Switch workspaces with SUPER + [0-9] # Switch workspaces with SUPER + [0-9]
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
@@ -39,22 +39,22 @@ 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:18, Move window to workspace 9, movetoworkspace, 9
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10 bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
# TAB between workspaces # Tab between workspaces
bindd = SUPER, TAB, Next workspace, workspace, e+1 bindd = SUPER, TAB, Next workspace, workspace, e+1
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1 bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys # 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, left, Swap window to the left, swapwindow, l
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r bindd = SUPER SHIFT, right, Swap window to the right, swapwindow, r
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u bindd = SUPER SHIFT, up, Swap window up, swapwindow, u
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d bindd = SUPER SHIFT, down, Swap window down, swapwindow, d
# Cycle through applications on active workspace # Cycle through applications on active workspace
bindd = ALT, TAB, Cycle to next window, cyclenext bindd = ALT, Tab, Cycle to next window, cyclenext
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev bindd = ALT SHIFT, Tab, Cycle to prev window, cyclenext, prev
bindd = ALT, TAB, Reveal active window on top, bringactivetotop bindd = ALT, Tab, Reveal active window on top, bringactivetotop
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop bindd = ALT SHIFT, Tab, Reveal active window on top, bringactivetotop
# Resize active window # Resize active window
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
@@ -63,8 +63,8 @@ bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100 bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
# Scroll through existing workspaces with SUPER + scroll # Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, MOUSE_DOWN, Scroll active workspace forward, workspace, e+1 bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1 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

View File

@@ -86,7 +86,6 @@ misc {
disable_hyprland_logo = true disable_hyprland_logo = true
disable_splash_rendering = true disable_splash_rendering = true
focus_on_activate = true focus_on_activate = true
anr_missed_pings = 3
} }
# https://wiki.hypr.land/Configuring/Variables/#cursor # https://wiki.hypr.land/Configuring/Variables/#cursor

View File

@@ -0,0 +1,21 @@
OMARCHY_DESCRIPTION="Firewall Configuration"
omarchy_verify() {
# Check if UFW is enabled
sudo ufw status | grep -q "Status: active" || add_error "UFW firewall not active"
# Check if UFW service is enabled
systemctl is-enabled ufw &>/dev/null || add_error "UFW service not enabled"
# Check default policies - they're on one line as "Default: deny (incoming), allow (outgoing), deny (routed)"
sudo ufw status verbose | grep -q "Default:.*deny (incoming)" || add_error "UFW default incoming policy not set to deny"
sudo ufw status verbose | grep -q "Default:.*allow (outgoing)" || add_error "UFW default outgoing policy not set to allow"
# Check specific rules are present
sudo ufw status numbered | grep -q "53317/udp" || add_error "LocalSend UDP port 53317 not allowed"
sudo ufw status numbered | grep -q "53317/tcp" || add_error "LocalSend TCP port 53317 not allowed"
sudo ufw status numbered | grep -q "22/tcp" || add_error "SSH port 22 not allowed"
# Check Docker DNS rule
sudo ufw status numbered | grep -q "allow-docker-dns" || add_error "Docker DNS rule not configured"
}

View File

@@ -0,0 +1,9 @@
OMARCHY_DESCRIPTION="GNOME Theme Settings"
omarchy_verify() {
gsettings get org.gnome.desktop.interface gtk-theme &>/dev/null || add_error "Cannot access GTK theme setting"
gsettings get org.gnome.desktop.interface color-scheme &>/dev/null || add_error "Cannot access color scheme setting"
gsettings get org.gnome.desktop.interface icon-theme &>/dev/null || add_error "Cannot access icon theme setting"
[[ -d /usr/share/icons ]] || add_error "Icon themes directory missing"
}

View File

@@ -0,0 +1,13 @@
OMARCHY_DESCRIPTION="Power Profile & Battery Settings"
omarchy_verify() {
if ls /sys/class/power_supply/BAT* &>/dev/null; then
current_profile=$(powerprofilesctl get 2>/dev/null)
[[ "$current_profile" == "balanced" ]] || add_error "Power profile not set to balanced for battery device"
systemctl --user is-enabled omarchy-battery-monitor.timer &>/dev/null || add_error "Battery monitor timer not enabled"
else
current_profile=$(powerprofilesctl get 2>/dev/null)
[[ "$current_profile" == "performance" ]] || add_error "Power profile not set to performance for AC device"
fi
}

View File

@@ -14,7 +14,6 @@ run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
run_logged $OMARCHY_INSTALL/config/docker.sh run_logged $OMARCHY_INSTALL/config/docker.sh
run_logged $OMARCHY_INSTALL/config/mimetypes.sh run_logged $OMARCHY_INSTALL/config/mimetypes.sh
run_logged $OMARCHY_INSTALL/config/localdb.sh run_logged $OMARCHY_INSTALL/config/localdb.sh
run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh
run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh
run_logged $OMARCHY_INSTALL/config/hardware/network.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/set-wireless-regdom.sh
@@ -25,6 +24,6 @@ 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/ignore-power-button.sh
run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm4360.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh

View File

@@ -1,4 +1,13 @@
# Allow the user to change the branding for fastfetch and screensaver OMARCHY_DESCRIPTION="Branding Config"
omarchy_install() {
mkdir -p ~/.config/omarchy/branding mkdir -p ~/.config/omarchy/branding
cp ~/.local/share/omarchy/icon.txt ~/.config/omarchy/branding/about.txt cp ~/.local/share/omarchy/icon.txt ~/.config/omarchy/branding/about.txt
cp ~/.local/share/omarchy/logo.txt ~/.config/omarchy/branding/screensaver.txt cp ~/.local/share/omarchy/logo.txt ~/.config/omarchy/branding/screensaver.txt
}
omarchy_verify() {
[[ -d ~/.config/omarchy/branding ]] || add_error "Branding directory missing"
[[ -f ~/.config/omarchy/branding/about.txt ]] || add_error "About branding file missing"
[[ -f ~/.config/omarchy/branding/screensaver.txt ]] || add_error "Screensaver branding file missing"
}

View File

@@ -1,6 +1,18 @@
OMARCHY_DESCRIPTION="Config Files"
omarchy_install() {
# Copy over Omarchy configs # Copy over Omarchy configs
mkdir -p ~/.config mkdir -p ~/.config
cp -R ~/.local/share/omarchy/config/* ~/.config/ cp -R ~/.local/share/omarchy/config/* ~/.config/
# Use default bashrc from Omarchy # Use default bashrc from Omarchy
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
}
omarchy_verify() {
[[ -d ~/.config ]] || add_error "Config directory missing"
[[ -f ~/.bashrc ]] || add_error "Bashrc file missing"
[[ -d ~/.config/hypr ]] || add_error "Hypr config missing"
[[ -d ~/.config/waybar ]] || add_error "Waybar config missing"
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Keyboard Layout Config"
omarchy_install() {
# Copy over the keyboard layout that's been set in Arch during install to Hyprland # Copy over the keyboard layout that's been set in Arch during install to Hyprland
conf="/etc/vconsole.conf" conf="/etc/vconsole.conf"
hyprconf="$HOME/.config/hypr/input.conf" hyprconf="$HOME/.config/hypr/input.conf"
@@ -11,3 +14,16 @@ if grep -q '^XKBVARIANT=' "$conf"; then
variant=$(grep '^XKBVARIANT=' "$conf" | cut -d= -f2 | tr -d '"') variant=$(grep '^XKBVARIANT=' "$conf" | cut -d= -f2 | tr -d '"')
sed -i "/^[[:space:]]*kb_options *=/i\ kb_variant = $variant" "$hyprconf" sed -i "/^[[:space:]]*kb_options *=/i\ kb_variant = $variant" "$hyprconf"
fi fi
}
omarchy_verify() {
[[ -f "$HOME/.config/hypr/input.conf" ]] || add_error "Hyprland input config missing"
# If vconsole.conf has keyboard layout, check if it's in hypr config
if [[ -f "/etc/vconsole.conf" ]] && grep -q '^XKBLAYOUT=' "/etc/vconsole.conf"; then
layout=$(grep '^XKBLAYOUT=' "/etc/vconsole.conf" | cut -d= -f2 | tr -d '"')
if [[ -f "$HOME/.config/hypr/input.conf" ]]; then
grep -q "kb_layout = $layout" "$HOME/.config/hypr/input.conf" || add_error "Keyboard layout not configured in Hyprland"
fi
fi
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Docker Configuration"
omarchy_install() {
# Configure Docker daemon: # Configure Docker daemon:
# - limit log size to avoid running out of disk # - limit log size to avoid running out of disk
# - use host's DNS resolver # - use host's DNS resolver
@@ -30,3 +33,20 @@ DefaultDependencies=no
EOF EOF
sudo systemctl daemon-reload sudo systemctl daemon-reload
}
omarchy_verify() {
[[ -f /etc/docker/daemon.json ]] || add_error "Docker daemon.json missing"
[[ -f /etc/systemd/resolved.conf.d/20-docker-dns.conf ]] || add_error "Docker DNS config missing"
[[ -f /etc/systemd/system/docker.service.d/no-block-boot.conf ]] || add_error "Docker boot config missing"
getent group docker >/dev/null 2>&1 || add_error "Docker group does not exist"
groups "$USER" | grep -q docker || add_error "User $USER not in docker group"
if systemctl list-unit-files | grep -q docker.service; then
systemctl is-enabled docker >/dev/null 2>&1 || add_error "Docker service not enabled"
systemctl is-active docker >/dev/null 2>&1 || add_warning "Docker service is not running (may be intentional)"
fi
}

View File

@@ -1,7 +0,0 @@
sudo mkdir -p /etc/systemd/system.conf.d
cat <<EOF | sudo tee /etc/systemd/system.conf.d/10-faster-shutdown.conf
[Manager]
DefaultTimeoutStopSec=5s
EOF
sudo systemctl daemon-reload

View File

@@ -1,2 +1,14 @@
OMARCHY_DESCRIPTION="Powerprofilesctl"
omarchy_install() {
# Ensure we use system python3 and not mise's python3 # Ensure we use system python3 and not mise's python3
sudo sed -i '/env python3/ c\#!/bin/python3' /usr/bin/powerprofilesctl sudo sed -i '/env python3/ c\#!/bin/python3' /usr/bin/powerprofilesctl
}
omarchy_verify() {
[[ -f /usr/bin/powerprofilesctl ]] || add_error "powerprofilesctl not found"
if [[ -f /usr/bin/powerprofilesctl ]]; then
head -n1 /usr/bin/powerprofilesctl | grep -q "^#!/bin/python3$" || add_error "powerprofilesctl shebang not fixed"
fi
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Git"
omarchy_install() {
# Ensure git settings live under ~/.config # Ensure git settings live under ~/.config
mkdir -p ~/.config/git mkdir -p ~/.config/git
touch ~/.config/git/config touch ~/.config/git/config
@@ -18,3 +21,21 @@ fi
if [[ -n "${OMARCHY_USER_EMAIL//[[:space:]]/}" ]]; then if [[ -n "${OMARCHY_USER_EMAIL//[[:space:]]/}" ]]; then
git config --global user.email "$OMARCHY_USER_EMAIL" git config --global user.email "$OMARCHY_USER_EMAIL"
fi fi
}
omarchy_verify() {
[[ -d ~/.config/git ]] || add_error "Git config directory missing"
[[ -f ~/.config/git/config ]] || add_error "Git config file missing"
command -v git >/dev/null 2>&1 || add_error "Git not installed"
if command -v git >/dev/null 2>&1; then
git config --global pull.rebase >/dev/null || add_error "Git pull.rebase not configured"
git config --global init.defaultBranch >/dev/null || add_error "Git defaultBranch not configured"
git config --global alias.co >/dev/null || add_error "Git alias 'co' not configured"
git config --global alias.br >/dev/null || add_error "Git alias 'br' not configured"
git config --global alias.ci >/dev/null || add_error "Git alias 'ci' not configured"
git config --global alias.st >/dev/null || add_error "Git alias 'st' not configured"
fi
}

View File

@@ -1,6 +1,20 @@
OMARCHY_DESCRIPTION="GPG"
omarchy_install() {
# Setup GPG configuration with multiple keyservers for better reliability # Setup GPG configuration with multiple keyservers for better reliability
sudo mkdir -p /etc/gnupg sudo mkdir -p /etc/gnupg
sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/ sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/
sudo chmod 644 /etc/gnupg/dirmngr.conf sudo chmod 644 /etc/gnupg/dirmngr.conf
sudo gpgconf --kill dirmngr || true sudo gpgconf --kill dirmngr || true
sudo gpgconf --launch dirmngr || true sudo gpgconf --launch dirmngr || true
}
omarchy_verify() {
[[ -d /etc/gnupg ]] || add_error "GPG config directory missing"
[[ -f /etc/gnupg/dirmngr.conf ]] || add_error "GPG dirmngr.conf missing"
if [[ -f /etc/gnupg/dirmngr.conf ]]; then
local perms=$(stat -c %a /etc/gnupg/dirmngr.conf)
[[ "$perms" == "644" ]] || add_error "GPG dirmngr.conf has incorrect permissions: $perms (should be 644)"
fi
}

View File

@@ -1,2 +1,9 @@
# Turn on bluetooth by default OMARCHY_DESCRIPTION="Enable Bluetooth Service"
omarchy_install() {
chrootable_systemctl_enable bluetooth.service chrootable_systemctl_enable bluetooth.service
}
omarchy_verify() {
systemctl is-enabled bluetooth.service >/dev/null 2>&1 || add_error "Bluetooth service not enabled"
}

View File

@@ -0,0 +1,18 @@
OMARCHY_DESCRIPTION="Apple BCM4360 WiFi Driver"
should_run() {
lspci -nnv | grep -A2 "14e4:43a0" | grep -q "106b:"
}
omarchy_install() {
should_run || return 0
echo "Apple BCM4360 detected"
sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers
}
omarchy_verify() {
should_run || return 2
omarchy-pkg-present broadcom-wl || add_error "Broadcom wireless driver not installed"
}

View File

@@ -1,11 +0,0 @@
# Install Wi-Fi drivers for Broadcom chips on MacBooks:
# - BCM4360 (20132015)
# - BCM4331 (2012, early 2013)
pci_info=$(lspci -nnv)
if echo "$pci_info" | grep -q "106b:" &&
(echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "Apple BCM4360 / BCM4331 detected"
sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers
fi

View File

@@ -1,12 +1,23 @@
# Detect MacBook models that need SPI keyboard modules OMARCHY_DESCRIPTION="MacBook SPI Keyboard Support"
product_name="$(cat /sys/class/dmi/id/product_name 2>/dev/null)"
if [[ "$product_name" =~ MacBook[89],1|MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then
echo "Detected MacBook with SPI keyboard"
should_run() {
[[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook12,1|MacBookPro13,[123]|MacBookPro14,[123] ]]
}
omarchy_install() {
should_run || return 0
echo "Detected MacBook with SPI keyboard"
sudo pacman -S --noconfirm --needed macbook12-spi-driver-dkms sudo pacman -S --noconfirm --needed macbook12-spi-driver-dkms
if [[ "$product_name" == "MacBook8,1" ]]; then
echo "MODULES=(applespi spi_pxa2xx_platform spi_pxa2xx_pci)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null
else
echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null
fi }
fi
omarchy_verify() {
should_run || return 2 # Return 2 to indicate "not applicable"
# Check if driver is installed
pacman -Q macbook12-spi-driver-dkms &>/dev/null || add_error "MacBook SPI driver not installed"
# Check if mkinitcpio config exists
[[ -f /etc/mkinitcpio.conf.d/macbook_spi_modules.conf ]] || add_error "MacBook SPI modules config missing"
}

View File

@@ -1,6 +1,14 @@
# Detect T2 MacBook models using PCI IDs OMARCHY_DESCRIPTION="Apple T2 MacBook Support"
# Vendor: 106b (Apple), Device IDs: 1801 or 1802 (T2 Security Chip)
if lspci -nn | grep -q "106b:180[12]"; then # Detect T2 MacBook models using PCI IDs: 106b:1801 or 106b:1802
should_run() {
lspci -nn | grep -q "106b:180[12]"
}
# Installation function
omarchy_install() {
should_run || return 0
echo "Detected MacBook with T2 chip. Installing support items..." echo "Detected MacBook with T2 chip. Installing support items..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
@@ -25,4 +33,17 @@ EOF
# Generated by Omarchy installer for T2 Mac support # 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 EOF
fi }
# Verification function
omarchy_verify() {
should_run || return 2
pacman -Q linux-t2 &>/dev/null || add_error "T2 Linux kernel not installed"
# Check if config files exist
[[ -f /etc/modules-load.d/t2.conf ]] || add_error "T2 modules config missing"
[[ -f /etc/mkinitcpio.conf.d/apple-t2.conf ]] || add_error "T2 mkinitcpio config missing"
[[ -f /etc/modprobe.d/brcmfmac.conf ]] || add_error "T2 WiFi fix config missing"
[[ -f /etc/limine-entry-tool.d/t2-mac.conf ]] || add_error "T2 boot config missing"
}

View File

@@ -1,5 +1,18 @@
AMD_AUDIO_CARD=$(pactl list cards 2>/dev/null | grep -B20 "Family 17h/19h" | grep "Name: " | awk '{print $2}' || true) OMARCHY_DESCRIPTION="Framework 13 AMD Audio Input Fix"
should_run() {
AMD_AUDIO_CARD=$(pactl list cards 2>/dev/null | grep -B20 "Family 17h/19h" | grep "Name: " | awk '{print $2}' || true)
[[ -n "$AMD_AUDIO_CARD" ]]
}
omarchy_install() {
should_run || return 0
if [[ -n $AMD_AUDIO_CARD ]]; then
pactl set-card-profile "$AMD_AUDIO_CARD" "HiFi (Mic1, Mic2, Speaker)" 2>/dev/null || true pactl set-card-profile "$AMD_AUDIO_CARD" "HiFi (Mic1, Mic2, Speaker)" 2>/dev/null || true
fi }
omarchy_verify() {
should_run || return 2
pactl list cards | grep -A10 "$AMD_AUDIO_CARD" | grep -q "Active Profile:" || add_error "AMD audio profile not configured"
}

View File

@@ -1,4 +1,16 @@
OMARCHY_DESCRIPTION="Set F-keys as F-keys by default"
omarchy_install() {
# Ensure that F-keys on Apple-like keyboards (such as Lofree Flow84) are always F-keys # Ensure that F-keys on Apple-like keyboards (such as Lofree Flow84) are always F-keys
if [[ ! -f /etc/modprobe.d/hid_apple.conf ]]; then if [[ ! -f /etc/modprobe.d/hid_apple.conf ]]; then
echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf
fi fi
}
omarchy_verify() {
[[ -f /etc/modprobe.d/hid_apple.conf ]] || add_error "Apple HID config missing"
if [[ -f /etc/modprobe.d/hid_apple.conf ]]; then
grep -q "options hid_apple fnmode=2" /etc/modprobe.d/hid_apple.conf || add_error "F-key mode not configured"
fi
}

View File

@@ -1,2 +1,15 @@
OMARCHY_DESCRIPTION="Disable power button"
omarchy_install() {
# Disable shutting system down on power button to bind it to power menu afterwards # Disable shutting system down on power button to bind it to power menu afterwards
sudo sed -i 's/.*HandlePowerKey=.*/HandlePowerKey=ignore/' /etc/systemd/logind.conf sudo sed -i 's/.*HandlePowerKey=.*/HandlePowerKey=ignore/' /etc/systemd/logind.conf
}
omarchy_verify() {
[[ -f /etc/systemd/logind.conf ]] || add_error "Logind config missing"
# Check if power button is set to ignore
if [[ -f /etc/systemd/logind.conf ]]; then
grep -q "^HandlePowerKey=ignore" /etc/systemd/logind.conf || add_error "Power button not set to ignore"
fi
}

View File

@@ -1,6 +1,13 @@
# This installs hardware video acceleration for Intel GPUs OMARCHY_DESCRIPTION="Setup Intel video acceleration"
# Check if we have an Intel GPU at all
if INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel'); then should_run() {
INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel' || true)
[[ -n "$INTEL_GPU" ]]
}
omarchy_install() {
should_run || return 0
# HD Graphics and newer uses intel-media-driver # HD Graphics and newer uses intel-media-driver
if [[ "${INTEL_GPU,,}" =~ "hd graphics"|"xe"|"iris" ]]; then if [[ "${INTEL_GPU,,}" =~ "hd graphics"|"xe"|"iris" ]]; then
sudo pacman -S --needed --noconfirm intel-media-driver sudo pacman -S --needed --noconfirm intel-media-driver
@@ -8,4 +15,16 @@ if INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel'); then
# Older generations from 2008 to ~2014-2017 use libva-intel-driver # Older generations from 2008 to ~2014-2017 use libva-intel-driver
sudo pacman -S --needed --noconfirm libva-intel-driver sudo pacman -S --needed --noconfirm libva-intel-driver
fi fi
}
# Verification function
omarchy_verify() {
should_run || return 2
# Check if appropriate driver is installed
if [[ "${INTEL_GPU,,}" =~ "hd graphics"|"xe"|"iris" ]]; then
pacman -Q intel-media-driver &>/dev/null || add_error "Intel media driver not installed"
elif [[ "${INTEL_GPU,,}" =~ "gma" ]]; then
pacman -Q libva-intel-driver &>/dev/null || add_error "Intel VA-API driver not installed"
fi fi
}

View File

@@ -1,6 +1,14 @@
# Ensure iwd service will be started OMARCHY_DESCRIPTION="Network Config"
omarchy_install() {
sudo systemctl enable iwd.service sudo systemctl enable iwd.service
# Prevent systemd-networkd-wait-online timeout on boot
sudo systemctl disable systemd-networkd-wait-online.service sudo systemctl disable systemd-networkd-wait-online.service
sudo systemctl mask systemd-networkd-wait-online.service sudo systemctl mask systemd-networkd-wait-online.service
}
omarchy_verify() {
systemctl is-enabled iwd.service >/dev/null 2>&1 || add_error "IWD service not enabled"
systemctl is-enabled systemd-networkd-wait-online.service 2>&1 | grep -q "masked" || add_error "systemd-networkd-wait-online not masked"
}

View File

@@ -1,18 +1,15 @@
# ============================================================================== OMARCHY_DESCRIPTION="NVIDIA GPU Configuration"
# Hyprland NVIDIA Setup Script for Arch Linux
# ============================================================================== should_run() {
# This script automates the installation and configuration of NVIDIA drivers NVIDIA_GPU=$(lspci | grep -i 'nvidia' || true)
# for use with Hyprland on Arch Linux, following the official Hyprland wiki. [[ -n "$NVIDIA_GPU" ]]
# }
# Author: https://github.com/Kn0ax
# omarchy_install() {
# ============================================================================== should_run || return 0
# --- GPU Detection ---
if [ -n "$(lspci | grep -i 'nvidia')" ]; then
# --- Driver Selection ---
# Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules # Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules
if echo "$(lspci | grep -i 'nvidia')" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then if echo "$NVIDIA_GPU" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then
NVIDIA_DRIVER_PACKAGE="nvidia-open-dkms" NVIDIA_DRIVER_PACKAGE="nvidia-open-dkms"
else else
NVIDIA_DRIVER_PACKAGE="nvidia-dkms" NVIDIA_DRIVER_PACKAGE="nvidia-dkms"
@@ -67,7 +64,7 @@ if [ -n "$(lspci | grep -i 'nvidia')" ]; then
sudo mkinitcpio -P sudo mkinitcpio -P
# Add NVIDIA environment variables to hyprland.conf # Add NVIDIA environment variables to hyprland.conf
HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf" HYPRLAND_CONF="$HOME/.config/hypr/envs.conf"
if [ -f "$HYPRLAND_CONF" ]; then if [ -f "$HYPRLAND_CONF" ]; then
cat >>"$HYPRLAND_CONF" <<'EOF' cat >>"$HYPRLAND_CONF" <<'EOF'
@@ -77,4 +74,22 @@ env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia env = __GLX_VENDOR_LIBRARY_NAME,nvidia
EOF EOF
fi fi
}
omarchy_verify() {
should_run || return 2
pacman -Q nvidia-dkms &>/dev/null || pacman -Q nvidia-open-dkms &>/dev/null || add_error "NVIDIA driver not installed"
[[ -f /etc/modprobe.d/nvidia.conf ]] || add_error "NVIDIA modprobe config missing"
if [[ -f /etc/modprobe.d/nvidia.conf ]]; then
grep -q "options nvidia_drm modeset=1" /etc/modprobe.d/nvidia.conf || add_error "NVIDIA DRM modeset not enabled"
fi fi
grep -q "nvidia" /etc/mkinitcpio.conf || add_error "NVIDIA modules not in mkinitcpio.conf"
if [[ -f "$HOME/.config/hypr/hyprland.conf" ]]; then
grep -q "LIBVA_DRIVER_NAME,nvidia" "$HOME/.config/hypr/hyprland.conf" || add_error "NVIDIA env vars not in Hyprland config"
fi
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Printer Config"
omarchy_install() {
chrootable_systemctl_enable cups.service chrootable_systemctl_enable cups.service
# Disable multicast dns in resolved. Avahi will provide this for better network printer discovery # Disable multicast dns in resolved. Avahi will provide this for better network printer discovery
@@ -14,3 +17,16 @@ if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then
fi fi
chrootable_systemctl_enable cups-browsed.service chrootable_systemctl_enable cups-browsed.service
}
omarchy_verify() {
systemctl is-enabled cups.service >/dev/null 2>&1 || add_error "CUPS service not enabled"
systemctl is-enabled avahi-daemon.service >/dev/null 2>&1 || add_error "Avahi daemon not enabled"
systemctl is-enabled cups-browsed.service >/dev/null 2>&1 || add_error "CUPS browsed service not enabled"
[[ -f /etc/systemd/resolved.conf.d/10-disable-multicast.conf ]] || add_error "Multicast DNS config missing"
grep -q "mdns_minimal" /etc/nsswitch.conf || add_error "mDNS not configured in nsswitch.conf"
[[ -f /etc/cups/cups-browsed.conf ]] && grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf || add_error "Remote printers not enabled in CUPS"
}

View File

@@ -1,33 +1,37 @@
# First check that wireless-regdb is there OMARCHY_DESCRIPTION="Wireless Regdom"
omarchy_install() {
if [ -f "/etc/conf.d/wireless-regdom" ]; then if [ -f "/etc/conf.d/wireless-regdom" ]; then
unset WIRELESS_REGDOM unset WIRELESS_REGDOM
. /etc/conf.d/wireless-regdom . /etc/conf.d/wireless-regdom
fi fi
# If the region is already set, we're done
if [ ! -n "${WIRELESS_REGDOM}" ]; then if [ ! -n "${WIRELESS_REGDOM}" ]; then
# Get the current timezone
if [ -e "/etc/localtime" ]; then if [ -e "/etc/localtime" ]; then
TIMEZONE=$(readlink -f /etc/localtime) TIMEZONE=$(readlink -f /etc/localtime)
TIMEZONE=${TIMEZONE#/usr/share/zoneinfo/} TIMEZONE=${TIMEZONE#/usr/share/zoneinfo/}
# Some timezones are formatted with the two letter country code at the start
COUNTRY="${TIMEZONE%%/*}" COUNTRY="${TIMEZONE%%/*}"
# If we don't have a two letter country, get it from the timezone table
if [[ ! "$COUNTRY" =~ ^[A-Z]{2}$ ]] && [ -f "/usr/share/zoneinfo/zone.tab" ]; then if [[ ! "$COUNTRY" =~ ^[A-Z]{2}$ ]] && [ -f "/usr/share/zoneinfo/zone.tab" ]; then
COUNTRY=$(awk -v tz="$TIMEZONE" '$3 == tz {print $1; exit}' /usr/share/zoneinfo/zone.tab) COUNTRY=$(awk -v tz="$TIMEZONE" '$3 == tz {print $1; exit}' /usr/share/zoneinfo/zone.tab)
fi fi
# Check if we have a two letter country code
if [[ "$COUNTRY" =~ ^[A-Z]{2}$ ]]; then if [[ "$COUNTRY" =~ ^[A-Z]{2}$ ]]; then
# Append it to the wireless-regdom conf file that is used at boot
echo "WIRELESS_REGDOM=\"$COUNTRY\"" | sudo tee -a /etc/conf.d/wireless-regdom >/dev/null echo "WIRELESS_REGDOM=\"$COUNTRY\"" | sudo tee -a /etc/conf.d/wireless-regdom >/dev/null
# Also set it one off now
if command -v iw &>/dev/null; then if command -v iw &>/dev/null; then
sudo iw reg set ${COUNTRY} sudo iw reg set ${COUNTRY}
fi fi
fi fi
fi fi
fi fi
}
omarchy_verify() {
[[ -f /etc/conf.d/wireless-regdom ]] || add_error "Wireless regdom config missing"
if [[ -f /etc/conf.d/wireless-regdom ]]; then
grep -q "^WIRELESS_REGDOM=" /etc/conf.d/wireless-regdom || add_error "Wireless regulatory domain not configured"
fi
}

View File

@@ -1,5 +1,16 @@
OMARCHY_DESCRIPTION="USB Autosuspend"
omarchy_install() {
# Disable USB autosuspend to prevent peripheral disconnection issues # Disable USB autosuspend to prevent peripheral disconnection issues
if [[ ! -f /etc/modprobe.d/disable-usb-autosuspend.conf ]]; then if [[ ! -f /etc/modprobe.d/disable-usb-autosuspend.conf ]]; then
echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf
fi fi
}
omarchy_verify() {
[[ -f /etc/modprobe.d/disable-usb-autosuspend.conf ]] || add_error "USB autosuspend config missing"
if [[ -f /etc/modprobe.d/disable-usb-autosuspend.conf ]]; then
grep -q "options usbcore autosuspend=-1" /etc/modprobe.d/disable-usb-autosuspend.conf || add_error "USB autosuspend not disabled"
fi
}

View File

@@ -1,3 +1,16 @@
OMARCHY_DESCRIPTION="Lockout Limit"
omarchy_install() {
# Increase lockout limit to 10 and decrease timeout to 2 minutes # Increase lockout limit to 10 and decrease timeout to 2 minutes
sudo sed -i 's|^\(auth\s\+required\s\+pam_faillock.so\)\s\+preauth.*$|\1 preauth silent deny=10 unlock_time=120|' "/etc/pam.d/system-auth" sudo sed -i 's|^\(auth\s\+required\s\+pam_faillock.so\)\s\+preauth.*$|\1 preauth silent deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
sudo sed -i 's|^\(auth\s\+\[default=die\]\s\+pam_faillock.so\)\s\+authfail.*$|\1 authfail deny=10 unlock_time=120|' "/etc/pam.d/system-auth" sudo sed -i 's|^\(auth\s\+\[default=die\]\s\+pam_faillock.so\)\s\+authfail.*$|\1 authfail deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
}
omarchy_verify() {
[[ -f /etc/pam.d/system-auth ]] || add_error "PAM system-auth file missing"
if [[ -f /etc/pam.d/system-auth ]]; then
grep -q "pam_faillock.so.*deny=10" /etc/pam.d/system-auth || add_error "Faillock deny limit not set to 10"
grep -q "pam_faillock.so.*unlock_time=120" /etc/pam.d/system-auth || add_error "Faillock unlock time not set to 120"
fi
}

View File

@@ -1,3 +1,18 @@
OMARCHY_DESCRIPTION="Sudo lockout limit"
omarchy_install() {
# Give the user 10 instead of 3 tries to fat finger their password before lockout # Give the user 10 instead of 3 tries to fat finger their password before lockout
echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries
sudo chmod 440 /etc/sudoers.d/passwd-tries sudo chmod 440 /etc/sudoers.d/passwd-tries
}
omarchy_verify() {
sudo test -f /etc/sudoers.d/passwd-tries || add_error "Sudoers passwd-tries file missing"
if sudo test -f /etc/sudoers.d/passwd-tries; then
local perms=$(sudo stat -c %a /etc/sudoers.d/passwd-tries)
[[ "$perms" == "440" ]] || add_error "Sudoers file has incorrect permissions: $perms (should be 440)"
sudo grep -q "passwd_tries=10" /etc/sudoers.d/passwd-tries || add_error "Passwd tries not set to 10"
fi
}

View File

@@ -1 +1,10 @@
OMARCHY_DESCRIPTION="LazyVim"
omarchy_install() {
omarchy-lazyvim-setup omarchy-lazyvim-setup
}
omarchy_verify() {
[[ -d ~/.config/nvim ]] || add_error "Neovim config directory missing"
[[ -d ~/.local/share/nvim/lazy ]] || add_error "LazyVim plugins directory missing"
}

View File

@@ -1,2 +1,12 @@
OMARCHY_DESCRIPTION="LocalDB"
omarchy_install() {
# Update localdb so that locate will find everything installed # Update localdb so that locate will find everything installed
sudo updatedb sudo updatedb
}
omarchy_verify() {
[[ -f /var/lib/mlocate/mlocate.db ]] || [[ -f /var/lib/plocate/plocate.db ]] || add_error "Locate database missing"
command -v locate >/dev/null 2>&1 || add_error "Locate command not available"
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Mimetypes"
omarchy_install() {
omarchy-refresh-applications omarchy-refresh-applications
update-desktop-database ~/.local/share/applications update-desktop-database ~/.local/share/applications
@@ -33,6 +36,13 @@ xdg-mime default mpv.desktop video/x-ms-asf
xdg-mime default mpv.desktop video/x-ogm+ogg xdg-mime default mpv.desktop video/x-ogm+ogg
xdg-mime default mpv.desktop video/x-theora+ogg xdg-mime default mpv.desktop video/x-theora+ogg
xdg-mime default mpv.desktop application/ogg xdg-mime default mpv.desktop application/ogg
}
# Use Hey for mailto: links omarchy_verify() {
xdg-mime default HEY.desktop x-scheme-handler/mailto [[ -d ~/.local/share/applications ]] || add_error "Applications directory missing"
xdg-mime query default image/png | grep -q "imv.desktop" || add_error "Image viewer not set for PNG"
xdg-mime query default application/pdf | grep -q "Evince.desktop" || add_error "PDF viewer not set"
xdg-mime query default x-scheme-handler/http | grep -q "chromium.desktop" || add_warning "Browser not set to Chromium"
xdg-mime query default video/mp4 | grep -q "mpv.desktop" || add_error "Video player not set for MP4"
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Mise"
omarchy_install() {
# Add ./bin to path for all items in ~/Work # Add ./bin to path for all items in ~/Work
mkdir -p "$HOME/Work" mkdir -p "$HOME/Work"
@@ -7,3 +10,14 @@ _.path = "{{ cwd }}/bin"
EOF EOF
mise trust ~/Work/.mise.toml mise trust ~/Work/.mise.toml
}
omarchy_verify() {
[[ -d "$HOME/Work" ]] || add_error "Work directory missing"
[[ -f "$HOME/Work/.mise.toml" ]] || add_error "Mise config missing in Work directory"
if [[ -f "$HOME/Work/.mise.toml" ]]; then
grep -q '_.path' "$HOME/Work/.mise.toml" || add_error "Mise path configuration missing"
fi
}

View File

@@ -1,2 +1,14 @@
OMARCHY_DESCRIPTION="SSH Flakiness Fix"
omarchy_install() {
# Solve common flakiness with SSH # Solve common flakiness with SSH
echo "net.ipv4.tcp_mtu_probing=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf echo "net.ipv4.tcp_mtu_probing=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf
}
omarchy_verify() {
[[ -f /etc/sysctl.d/99-sysctl.conf ]] || add_error "Sysctl config file missing"
if [[ -f /etc/sysctl.d/99-sysctl.conf ]]; then
grep -q "net.ipv4.tcp_mtu_probing=1" /etc/sysctl.d/99-sysctl.conf || add_error "TCP MTU probing not configured"
fi
}

View File

@@ -1,3 +1,18 @@
OMARCHY_DESCRIPTION="ASDControl Sudoless Brightness Control"
omarchy_install() {
# Setup sudo-less controls for controlling brightness on Apple Displays # Setup sudo-less controls for controlling brightness on Apple Displays
echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol echo "$USER ALL=(ALL) NOPASSWD: /usr/local/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol
sudo chmod 440 /etc/sudoers.d/asdcontrol sudo chmod 440 /etc/sudoers.d/asdcontrol
}
omarchy_verify() {
sudo test -f /etc/sudoers.d/asdcontrol || add_error "ASDControl sudoers file missing"
if sudo test -f /etc/sudoers.d/asdcontrol; then
local perms=$(sudo stat -c %a /etc/sudoers.d/asdcontrol)
[[ "$perms" == "440" ]] || add_error "Sudoers file has incorrect permissions: $perms (should be 440)"
sudo grep -q "NOPASSWD: /usr/local/bin/asdcontrol" /etc/sudoers.d/asdcontrol || add_error "ASDControl sudoers rule not configured"
fi
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="Theme"
omarchy_install() {
# Set links for Nautilius action icons # Set links for Nautilius action icons
sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-previous-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-previous-symbolic.svg sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-previous-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-previous-symbolic.svg
sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-next-symbolic.svg sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-next-symbolic.svg
@@ -29,3 +32,21 @@ sudo chmod a+rw /etc/chromium/policies/managed
sudo mkdir -p /etc/brave/policies/managed sudo mkdir -p /etc/brave/policies/managed
sudo chmod a+rw /etc/brave/policies/managed sudo chmod a+rw /etc/brave/policies/managed
}
omarchy_verify() {
[[ -d ~/.config/omarchy/themes ]] || add_error "Theme directory missing: ~/.config/omarchy/themes"
[[ -L ~/.config/omarchy/current/theme ]] || add_error "Current theme symlink missing"
[[ -L ~/.config/omarchy/current/background ]] || add_error "Background symlink missing"
[[ -L /usr/share/icons/Yaru/scalable/actions/go-previous-symbolic.svg ]] || add_error "Nautilus previous icon not linked"
[[ -L /usr/share/icons/Yaru/scalable/actions/go-next-symbolic.svg ]] || add_error "Nautilus next icon not linked"
[[ -L ~/.config/nvim/lua/plugins/theme.lua ]] || add_error "Neovim theme link missing"
[[ -L ~/.config/btop/themes/current.theme ]] || add_error "btop theme link missing"
[[ -L ~/.config/mako/config ]] || add_error "mako config link missing"
[[ -L ~/.config/eza/theme.yml ]] || add_error "eza theme link missing"
[[ -d /etc/chromium/policies/managed ]] || add_error "Chromium policy directory missing"
[[ -d /etc/brave/policies/managed ]] || add_error "Brave policy directory missing"
}

View File

@@ -1,5 +1,20 @@
OMARCHY_DESCRIPTION="Timezone Update Permissions"
omarchy_install() {
# Ensure timezone can be updated without needing to sudo # Ensure timezone can be updated without needing to sudo
sudo tee /etc/sudoers.d/omarchy-tzupdate >/dev/null <<EOF sudo tee /etc/sudoers.d/omarchy-tzupdate >/dev/null <<EOF
%wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl %wheel ALL=(root) NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl
EOF EOF
sudo chmod 0440 /etc/sudoers.d/omarchy-tzupdate sudo chmod 0440 /etc/sudoers.d/omarchy-tzupdate
}
omarchy_verify() {
sudo test -f /etc/sudoers.d/omarchy-tzupdate || add_error "Timezone sudoers file missing"
if sudo test -f /etc/sudoers.d/omarchy-tzupdate; then
local perms=$(sudo stat -c %a /etc/sudoers.d/omarchy-tzupdate)
[[ "$perms" == "440" ]] || add_error "Sudoers file has incorrect permissions: $perms (should be 440)"
sudo grep -q "NOPASSWD: /usr/bin/tzupdate, /usr/bin/timedatectl" /etc/sudoers.d/omarchy-tzupdate || add_error "Timezone sudoers rule not configured"
fi
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="XCompose"
omarchy_install() {
# Set default XCompose that is triggered with CapsLock # Set default XCompose that is triggered with CapsLock
tee ~/.XCompose >/dev/null <<EOF tee ~/.XCompose >/dev/null <<EOF
include "%H/.local/share/omarchy/default/xcompose" include "%H/.local/share/omarchy/default/xcompose"
@@ -6,3 +9,12 @@ include "%H/.local/share/omarchy/default/xcompose"
<Multi_key> <space> <n> : "$OMARCHY_USER_NAME" <Multi_key> <space> <n> : "$OMARCHY_USER_NAME"
<Multi_key> <space> <e> : "$OMARCHY_USER_EMAIL" <Multi_key> <space> <e> : "$OMARCHY_USER_EMAIL"
EOF EOF
}
omarchy_verify() {
[[ -f ~/.XCompose ]] || add_error "XCompose file missing"
if [[ -f ~/.XCompose ]]; then
grep -q "include.*xcompose" ~/.XCompose || add_error "XCompose include directive missing"
fi
}

View File

@@ -118,8 +118,15 @@ run_logged() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting: $script" >>"$OMARCHY_INSTALL_LOG_FILE" echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting: $script" >>"$OMARCHY_INSTALL_LOG_FILE"
# Use bash -c to create a clean subshell (
bash -c "source '$script'" </dev/null >>"$OMARCHY_INSTALL_LOG_FILE" 2>&1 # Source the script
source "$script"
# Check if omarchy_install function exists and run it, otherwise the script already ran
if declare -f omarchy_install >/dev/null 2>&1; then
omarchy_install
fi
) </dev/null >>"$OMARCHY_INSTALL_LOG_FILE" 2>&1
local exit_code=$? local exit_code=$?

View File

@@ -1,8 +1,13 @@
OMARCHY_DESCRIPTION="GNOME Keyring Default Setup"
omarchy_install() {
KEYRING_DIR="$HOME/.local/share/keyrings" KEYRING_DIR="$HOME/.local/share/keyrings"
KEYRING_FILE="$KEYRING_DIR/Default_keyring.keyring" KEYRING_FILE="$KEYRING_DIR/Default_keyring.keyring"
DEFAULT_FILE="$KEYRING_DIR/default" DEFAULT_FILE="$KEYRING_DIR/default"
cat << EOF | tee "$KEYRING_FILE" mkdir -p "$KEYRING_DIR"
cat << EOF > "$KEYRING_FILE"
[keyring] [keyring]
display-name=Default keyring display-name=Default keyring
ctime=$(date +%s) ctime=$(date +%s)
@@ -11,10 +16,32 @@ lock-on-idle=false
lock-after=false lock-after=false
EOF EOF
cat << EOF | tee "$DEFAULT_FILE" cat << EOF > "$DEFAULT_FILE"
Default_keyring Default_keyring
EOF EOF
chmod 700 "$KEYRING_DIR" chmod 700 "$KEYRING_DIR"
chmod 600 "$KEYRING_FILE" chmod 600 "$KEYRING_FILE"
chmod 644 "$DEFAULT_FILE" chmod 644 "$DEFAULT_FILE"
}
omarchy_verify() {
local KEYRING_DIR="$HOME/.local/share/keyrings"
[[ -d "$KEYRING_DIR" ]] || add_error "Keyring directory missing"
if [[ -d "$KEYRING_DIR" ]]; then
local dir_perms=$(stat -c %a "$KEYRING_DIR")
[[ "$dir_perms" == "700" ]] || add_warning "Keyring directory has permissions $dir_perms (should be 700)"
fi
[[ -f "$KEYRING_DIR/Default_keyring.keyring" ]] || add_error "Default keyring file missing"
if [[ -f "$KEYRING_DIR/Default_keyring.keyring" ]]; then
local file_perms=$(stat -c %a "$KEYRING_DIR/Default_keyring.keyring")
[[ "$file_perms" == "600" ]] || add_warning "Keyring file has permissions $file_perms (should be 600)"
fi
[[ -f "$KEYRING_DIR/default" ]] || add_error "Default keyring selection file missing"
if [[ -f "$KEYRING_DIR/default" ]]; then
grep -q "Default_keyring" "$KEYRING_DIR/default" || add_error "Default keyring not set as default"
fi
}

View File

@@ -1,4 +1,13 @@
if command -v limine &>/dev/null; then OMARCHY_DESCRIPTION="Limine Bootloader & Snapper Configuration"
should_run() {
command -v limine &>/dev/null
}
# Installation function
omarchy_install() {
should_run || return 0
sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook
sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null
@@ -96,7 +105,6 @@ EOF
sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home} sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home}
chrootable_systemctl_enable limine-snapper-sync.service chrootable_systemctl_enable limine-snapper-sync.service
fi
echo "Re-enabling mkinitcpio hooks..." echo "Re-enabling mkinitcpio hooks..."
@@ -134,3 +142,57 @@ if [[ -n $EFI ]] && efibootmgr &>/dev/null &&
--loader "\\EFI\\Linux\\$uki_file" --loader "\\EFI\\Linux\\$uki_file"
fi fi
fi fi
}
omarchy_verify() {
should_run || return 2
[[ -f /etc/mkinitcpio.conf.d/omarchy_hooks.conf ]] || add_error "Omarchy mkinitcpio hooks config missing"
[[ -f /etc/default/limine ]] || add_error "Limine default config missing"
[[ -f /boot/limine.conf ]] || add_error "Limine boot config missing"
pacman -Q limine-snapper-sync &>/dev/null || add_error "limine-snapper-sync not installed"
pacman -Q limine-mkinitcpio-hook &>/dev/null || add_error "limine-mkinitcpio-hook not installed"
if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then
sudo snapper list-configs 2>/dev/null | grep -q "root" || add_error "Snapper root config not created"
sudo snapper list-configs 2>/dev/null | grep -q "home" || add_error "Snapper home config not created"
fi
systemctl is-enabled limine-snapper-sync.service &>/dev/null || add_error "limine-snapper-sync service not enabled"
if [[ -f /boot/limine.conf ]]; then
grep -q "^/+Omarchy" /boot/limine.conf || add_error "Omarchy boot entry not found in limine.conf"
awk '
/^\/\+Omarchy/ { in_omarchy=1 }
in_omarchy && /^[[:space:]]+kernel_cmdline:/ { found=1 }
in_omarchy && /^\/[^\/+]/ { in_omarchy=0 }
END { if (!found) exit 1 }
' /boot/limine.conf || add_error "Omarchy boot entry missing kernel_cmdline"
fi
if command -v efibootmgr &>/dev/null && sudo efibootmgr &>/dev/null; then
local omarchy_count=$(sudo efibootmgr | grep -c "^Boot[0-9]*\* Omarchy")
if [[ $omarchy_count -eq 0 ]]; then
add_error "No Omarchy EFI boot entry found"
elif [[ $omarchy_count -gt 1 ]]; then
add_warning "Multiple Omarchy EFI boot entries found ($omarchy_count)"
fi
local limine_count=$(sudo efibootmgr | grep -c "^Boot[0-9]*\* Limine")
if [[ $limine_count -eq 0 ]]; then
add_warning "No Limine EFI boot entry found"
elif [[ $limine_count -gt 1 ]]; then
add_warning "Multiple Limine EFI boot entries found ($limine_count)"
fi
local boot_current=$(sudo efibootmgr | grep "^BootCurrent:" | awk '{print $2}')
if [[ -n "$boot_current" ]]; then
if ! sudo efibootmgr | grep "^Boot${boot_current}\* Omarchy" &>/dev/null; then
local current_boot=$(sudo efibootmgr | grep "^Boot${boot_current}\*" | sed 's/^Boot[0-9]*\* //' | cut -d' ' -f1)
add_warning "BootCurrent is not Omarchy (currently: $current_boot)"
fi
fi
fi
}

View File

@@ -1,4 +1,13 @@
OMARCHY_DESCRIPTION="Plymouth Boot Splash Theme"
omarchy_install() {
if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then
sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/ sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/
sudo plymouth-set-default-theme omarchy sudo plymouth-set-default-theme omarchy
fi fi
}
omarchy_verify() {
[[ "$(plymouth-set-default-theme)" == "omarchy" ]] || add_error "Plymouth theme not set to omarchy"
[[ -d /usr/share/plymouth/themes/omarchy ]] || add_error "Omarchy Plymouth theme not installed"
}

View File

@@ -1,3 +1,6 @@
OMARCHY_DESCRIPTION="SDDM Display Manager Configuration"
omarchy_install() {
sudo mkdir -p /etc/sddm.conf.d sudo mkdir -p /etc/sddm.conf.d
if [ ! -f /etc/sddm.conf.d/autologin.conf ]; then if [ ! -f /etc/sddm.conf.d/autologin.conf ]; then
@@ -11,6 +14,21 @@ Current=breeze
EOF EOF
fi fi
echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart sddm" | sudo tee /etc/sudoers.d/allow-passwordless-restart-sddm
chrootable_systemctl_enable sddm.service chrootable_systemctl_enable sddm.service
}
omarchy_verify() {
[[ -d /etc/sddm.conf.d ]] || add_error "SDDM config directory missing"
[[ -f /etc/sddm.conf.d/autologin.conf ]] || add_error "SDDM autologin config missing"
if [[ -f /etc/sddm.conf.d/autologin.conf ]]; then
grep -q "^User=$USER" /etc/sddm.conf.d/autologin.conf || add_error "SDDM autologin user not configured"
grep -q "^Session=hyprland-uwsm" /etc/sddm.conf.d/autologin.conf || add_error "SDDM session not set to hyprland-uwsm"
grep -q "^Current=breeze" /etc/sddm.conf.d/autologin.conf || add_warning "SDDM theme not set to breeze"
fi
systemctl is-enabled sddm.service &>/dev/null || add_error "SDDM service not enabled"
}

View File

@@ -69,7 +69,6 @@ mariadb-libs
mise mise
mpv mpv
nautilus nautilus
gnome-disk-utility
noto-fonts noto-fonts
noto-fonts-cjk noto-fonts-cjk
noto-fonts-emoji noto-fonts-emoji

View File

@@ -1,3 +1,27 @@
OMARCHY_DESCRIPTION="Base Packages"
omarchy_install() {
# Install all base packages # Install all base packages
mapfile -t packages < <(grep -v '^#' "$OMARCHY_INSTALL/omarchy-base.packages" | grep -v '^$') mapfile -t packages < <(grep -v '^#' "$OMARCHY_INSTALL/omarchy-base.packages" | grep -v '^$')
sudo pacman -S --noconfirm --needed "${packages[@]}" sudo pacman -S --noconfirm --needed "${packages[@]}"
}
omarchy_verify() {
[[ -f "$OMARCHY_INSTALL/omarchy-base.packages" ]] || add_error "Base packages list missing"
# Check if all base packages are installed
if [[ -f "$OMARCHY_INSTALL/omarchy-base.packages" ]]; then
mapfile -t packages < <(grep -v '^#' "$OMARCHY_INSTALL/omarchy-base.packages" | grep -v '^$')
local missing_packages=()
for package in "${packages[@]}"; do
if ! pacman -Q "$package" &>/dev/null; then
missing_packages+=("$package")
fi
done
if [[ ${#missing_packages[@]} -gt 0 ]]; then
add_error "Missing base packages: ${missing_packages[*]}"
fi
fi
}

View File

@@ -1,4 +1,13 @@
OMARCHY_DESCRIPTION="Omarchy Font"
omarchy_install() {
# Omarchy logo in a font for Waybar use # Omarchy logo in a font for Waybar use
mkdir -p ~/.local/share/fonts mkdir -p ~/.local/share/fonts
cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/ cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/
fc-cache fc-cache
}
omarchy_verify() {
[[ -d ~/.local/share/fonts ]] || add_error "Fonts directory missing"
[[ -f ~/.local/share/fonts/omarchy.ttf ]] || add_error "Omarchy font missing"
}

View File

@@ -1,4 +1,15 @@
OMARCHY_DESCRIPTION="Icons"
omarchy_install() {
# Copy all bundled icons to the applications/icons directory # Copy all bundled icons to the applications/icons directory
ICON_DIR="$HOME/.local/share/applications/icons" ICON_DIR="$HOME/.local/share/applications/icons"
mkdir -p "$ICON_DIR" mkdir -p "$ICON_DIR"
cp ~/.local/share/omarchy/applications/icons/*.png "$ICON_DIR/" cp ~/.local/share/omarchy/applications/icons/*.png "$ICON_DIR/"
}
omarchy_verify() {
[[ -d "$HOME/.local/share/applications/icons" ]] || add_error "Icons directory missing"
local icon_count=$(find "$HOME/.local/share/applications/icons" -name "*.png" 2>/dev/null | wc -l)
[[ $icon_count -gt 0 ]] || add_error "No icons found in icons directory"
}

View File

@@ -1,3 +1,11 @@
OMARCHY_DESCRIPTION="LazyVim"
omarchy_install() {
if [[ ! -d "$HOME/.config/nvim" ]]; then if [[ ! -d "$HOME/.config/nvim" ]]; then
omarchy-lazyvim-setup omarchy-lazyvim-setup
fi fi
}
omarchy_verify() {
[[ -d "$HOME/.config/nvim" ]] || add_error "Neovim config directory missing"
}

View File

@@ -1,4 +1,13 @@
OMARCHY_DESCRIPTION="TUIs"
omarchy_install() {
ICON_DIR="$HOME/.local/share/applications/icons" ICON_DIR="$HOME/.local/share/applications/icons"
omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png" omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png"
omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png" omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png"
}
omarchy_verify() {
[[ -f "$HOME/.local/share/applications/Disk Usage.desktop" ]] || add_error "Disk Usage TUI not installed"
[[ -f "$HOME/.local/share/applications/Docker.desktop" ]] || add_error "Docker TUI not installed"
}

View File

@@ -1,4 +1,7 @@
omarchy-webapp-install "HEY" https://app.hey.com HEY.png "omarchy-webapp-handler-hey %u" "x-scheme-handler/mailto" OMARCHY_DESCRIPTION="Webapps"
omarchy_install() {
omarchy-webapp-install "HEY" https://app.hey.com HEY.png
omarchy-webapp-install "Basecamp" https://launchpad.37signals.com Basecamp.png omarchy-webapp-install "Basecamp" https://launchpad.37signals.com Basecamp.png
omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ WhatsApp.png omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ WhatsApp.png
omarchy-webapp-install "Google Photos" https://photos.google.com/ "Google Photos.png" omarchy-webapp-install "Google Photos" https://photos.google.com/ "Google Photos.png"
@@ -11,3 +14,21 @@ omarchy-webapp-install "X" https://x.com/ X.png
omarchy-webapp-install "Figma" https://figma.com/ Figma.png omarchy-webapp-install "Figma" https://figma.com/ Figma.png
omarchy-webapp-install "Discord" https://discord.com/channels/@me Discord.png omarchy-webapp-install "Discord" https://discord.com/channels/@me Discord.png
omarchy-webapp-install "Zoom" https://app.zoom.us/wc/home Zoom.png "omarchy-webapp-handler-zoom %u" "x-scheme-handler/zoommtg;x-scheme-handler/zoomus" omarchy-webapp-install "Zoom" https://app.zoom.us/wc/home Zoom.png "omarchy-webapp-handler-zoom %u" "x-scheme-handler/zoommtg;x-scheme-handler/zoomus"
}
omarchy_verify() {
# Check all webapps - use warnings since these are optional
[[ -f "$HOME/.local/share/applications/HEY.desktop" ]] || add_warning "HEY webapp not installed"
[[ -f "$HOME/.local/share/applications/Basecamp.desktop" ]] || add_warning "Basecamp webapp not installed"
[[ -f "$HOME/.local/share/applications/WhatsApp.desktop" ]] || add_warning "WhatsApp webapp not installed"
[[ -f "$HOME/.local/share/applications/Google Photos.desktop" ]] || add_warning "Google Photos webapp not installed"
[[ -f "$HOME/.local/share/applications/Google Contacts.desktop" ]] || add_warning "Google Contacts webapp not installed"
[[ -f "$HOME/.local/share/applications/Google Messages.desktop" ]] || add_warning "Google Messages webapp not installed"
[[ -f "$HOME/.local/share/applications/ChatGPT.desktop" ]] || add_warning "ChatGPT webapp not installed"
[[ -f "$HOME/.local/share/applications/YouTube.desktop" ]] || add_warning "YouTube webapp not installed"
[[ -f "$HOME/.local/share/applications/GitHub.desktop" ]] || add_warning "GitHub webapp not installed"
[[ -f "$HOME/.local/share/applications/X.desktop" ]] || add_warning "X webapp not installed"
[[ -f "$HOME/.local/share/applications/Figma.desktop" ]] || add_warning "Figma webapp not installed"
[[ -f "$HOME/.local/share/applications/Discord.desktop" ]] || add_warning "Discord webapp not installed"
[[ -f "$HOME/.local/share/applications/Zoom.desktop" ]] || add_warning "Zoom webapp not installed"
}

View File

@@ -18,9 +18,6 @@ done
# Must be x86 only to fully work # Must be x86 only to fully work
[ "$(uname -m)" != "x86_64" ] && abort "x86_64 CPU" [ "$(uname -m)" != "x86_64" ] && abort "x86_64 CPU"
# Must have secure boot disabled
bootctl status 2>/dev/null | grep -q 'Secure Boot: disabled' || abort "Secure Boot disabled"
# Must not have Gnome or KDE already install # Must not have Gnome or KDE already install
pacman -Qe gnome-shell &>/dev/null && abort "Fresh + Vanilla Arch" pacman -Qe gnome-shell &>/dev/null && abort "Fresh + Vanilla Arch"
pacman -Qe plasma-desktop &>/dev/null && abort "Fresh + Vanilla Arch" pacman -Qe plasma-desktop &>/dev/null && abort "Fresh + Vanilla Arch"

View File

@@ -1,5 +1,5 @@
echo "Use current terminal shell cwd for new terminal working directories" echo "Use current terminal shell cwd for new terminal working directories"
if ! grep -q "working-directory" ~/.config/hypr/bindings.conf; then if ! grep -q "working-directory" ~/.config/hypr/bindings.conf; then
sed -i '/bindd = SUPER, RETURN, Terminal, exec, \$terminal/ s|$| --working-directory=$(omarchy-cmd-terminal-cwd)|' ~/.config/hypr/bindings.conf sed -i '/bindd = SUPER, return, Terminal, exec, \$terminal/ s|$| --working-directory=$(omarchy-cmd-terminal-cwd)|' ~/.config/hypr/bindings.conf
fi fi

View File

@@ -1,4 +0,0 @@
echo "Add live themeing to neovim"
cp -f $OMARCHY_PATH/config/nvim/lua/plugins/all-themes.lua ~/.config/nvim/lua/plugins/
cp -f $OMARCHY_PATH/config/nvim/lua/plugins/omarchy-theme-hotreload.lua ~/.config/nvim/lua/plugins/

View File

@@ -1,17 +0,0 @@
echo "Fix Disk Usage and Docker TUIs"
APP_DIR="$HOME/.local/share/applications"
ICON_DIR="$APP_DIR/icons"
# Don't use omarchy-tui-remove to preserve icons
if [[ -f "$APP_DIR/Docker.desktop" ]]; then
rm "$APP_DIR/Docker.desktop"
omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png"
fi
if [[ -f "$APP_DIR/Disk Usage.desktop" ]]; then
rm "$APP_DIR/Disk Usage.desktop"
omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png"
fi

View File

@@ -1,17 +1,6 @@
#!/bin/bash
set -e
error_exit() {
echo -e "\033[31mERROR: Migration failed! Manual intervention required.\033[0m" >&2
echo -e "\033[31mDO NOT REBOOT - System may be in inconsistent state until the error is fixed.\033[0m" >&2
exit 1
}
trap error_exit ERR
echo "Change display manager to SDDM" echo "Change display manager to SDDM"
omarchy-pkg-add sddm libsecret gnome-keyring || error_exit sudo pacman -S --needed --noconfirm sddm libsecret gnome-keyring
sudo mkdir -p /etc/sddm.conf.d sudo mkdir -p /etc/sddm.conf.d
@@ -30,28 +19,6 @@ sudo systemctl enable getty@tty1.service
sudo systemctl enable sddm.service sudo systemctl enable sddm.service
sudo systemctl daemon-reload sudo systemctl daemon-reload
if systemctl is-enabled omarchy-seamless-login.service >/dev/null 2>&1; then
echo -e "\033[31mError: omarchy-seamless-login.service is still enabled\033[0m" >&2
error_exit
fi
if systemctl is-masked plymouth-quit-wait.service >/dev/null 2>&1; then
echo -e "\033[31mError: plymouth-quit-wait.service is still masked\033[0m" >&2
error_exit
fi
if ! systemctl is-enabled getty@tty1.service >/dev/null 2>&1; then
echo -e "\033[31mError: getty@tty1.service is not enabled\033[0m" >&2
error_exit
fi
if ! systemctl is-enabled sddm.service >/dev/null 2>&1; then
echo -e "\033[31mError: sddm.service is not enabled\033[0m" >&2
error_exit
fi
sudo rm -f /usr/local/bin/seamless-login sudo rm -f /usr/local/bin/seamless-login
sudo rm -f /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf sudo rm -f /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf
sudo rm -f /etc/systemd/system/omarchy-seamless-login.service sudo rm -f /etc/systemd/system/omarchy-seamless-login.service
echo "Migration completed successfully"

View File

@@ -1,2 +0,0 @@
echo "Enable fast shutdown"
source $OMARCHY_PATH/install/config/fast-shutdown.sh

View File

@@ -1,3 +0,0 @@
echo "Adding hidden entries for electron apps"
cp $OMARCHY_PATH/applications/hidden/electron*.desktop ~/.local/share/applications/

View File

@@ -1,5 +0,0 @@
echo "Correct path for sudoless asdcontrol for working Apple Display hotkeys"
if [[ $(command -v asdcontrol) == "/usr/bin/asdcontrol" ]]; then
echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol
fi

View File

@@ -1,3 +0,0 @@
echo "Fix opening in nvim from files manager"
cp -f $OMARCHY_PATH/applications/nvim.desktop ~/.local/share/applications/nvim.desktop

View File

@@ -1,4 +0,0 @@
echo "Hide OpenJDK applications from app launcher"
cp $OMARCHY_PATH/applications/hidden/*openjdk.desktop ~/.local/share/applications/

View File

@@ -3,9 +3,12 @@ return {
"catppuccin/nvim", "catppuccin/nvim",
name = "catppuccin", name = "catppuccin",
priority = 1000, priority = 1000,
opts = { config = function()
flavour = "latte", require("catppuccin").setup({
}, flavour = "latte", -- other options: "mocha", "frappe", "macchiato"
})
vim.cmd.colorscheme("catppuccin-latte")
end,
}, },
{ {
"LazyVim/LazyVim", "LazyVim/LazyVim",

View File

@@ -1,9 +1,4 @@
return { return {
{
"catppuccin/nvim",
name = "catppuccin",
priority = 1000,
},
{ {
"LazyVim/LazyVim", "LazyVim/LazyVim",
opts = { opts = {

View File

@@ -1,13 +1,9 @@
return { return {
{
"ribru17/bamboo.nvim", "ribru17/bamboo.nvim",
lazy = false,
priority = 1000, priority = 1000,
opts = {}, config = function()
}, require("bamboo").setup({})
{ require("bamboo").load()
"LazyVim/LazyVim", end,
opts = {
colorscheme = "bamboo",
},
},
} }

View File

@@ -1,9 +1,26 @@
return { return {
{ {
"loctvl842/monokai-pro.nvim", "gthelding/monokai-pro.nvim",
opts = { config = function()
require("monokai-pro").setup({
filter = "ristretto", filter = "ristretto",
}, override = function()
return {
NonText = { fg = "#948a8b" },
MiniIconsGrey = { fg = "#948a8b" },
MiniIconsRed = { fg = "#fd6883" },
MiniIconsBlue = { fg = "#85dacc" },
MiniIconsGreen = { fg = "#adda78" },
MiniIconsYellow = { fg = "#f9cc6c" },
MiniIconsOrange = { fg = "#f38d70" },
MiniIconsPurple = { fg = "#a8a9eb" },
MiniIconsAzure = { fg = "#a8a9eb" },
MiniIconsCyan = { fg = "#85dacc" }, -- same value as MiniIconsBlue for consistency
}
end,
})
vim.cmd([[colorscheme monokai-pro]])
end,
}, },
{ {
"LazyVim/LazyVim", "LazyVim/LazyVim",

View File

@@ -1,121 +1,123 @@
# see https://github.com/eza-community/eza-themes/blob/main/themes/rose-pine-dawn.yml # see https://github.com/eza-community/eza-themes/blob/main/themes/rose-pine.yml
colourful: true colourful: true
# Colors are in format of: # Colors are in format of:
# color/paletteRef (Description) #color code # color/paletteRef (Description) #color code
# Gold (Terminal Yellow) #ea9d34 # Gold (Terminal Yellow) #f6c177
# Love (Terminal Red) #b4637a # Love (Terminal Red) #eb6f92
# Rose (Terminal Cyan) #d7827e # Rose (Terminal Cyan) #ebbcba
# Base (Primary Background) #faf4ed # Base (Primary Background) #191724
# Iris (Terminal Magenta) #907aa9 # Iris (Terminal Magenta) #c4a7e7
# Foam (Terminal Blue) #56949f # Foam (Terminal Blue) #9ccfd8
# Pine (Terminal Green) #286983 # Pine (Terminal Green) #31748f
# Text (High contrast foreground) #575279 # Muted (Low Contrast Foreground) #6e6a86
# Muted (Low Contrast Foreground) #9893a5 # Surface (Secondary Background Atop Base) #1f1d2e
# Subtle (Medium Contrast Foreground) #797593 # Overlay (Tertiary Background Atop Surface) #26233a
# Highlight Low (Low contrast highlight) #f4ede8 # Subtle (Medium Contrast Foreground) #908caa
# Highlight Med (Medium Contrast Highlight) #dfdad9 # Text (High Contrast Foreground) #e0def4
# Highlight High (High Contrast Highlight) #cecacd # Highlight Low (Low Contrast Highlight) #21202e
# Highlight Med (Medium Contrast Highlight) #403d52
# Highlight High (High Contrast Highlight) #524f67
filekinds: filekinds:
normal: { foreground: "#575279" } normal: {foreground: "#e0def4"}
directory: { foreground: "#56949f" } directory: {foreground: "#9ccfd8"}
symlink: { foreground: "#cecacd" } symlink: {foreground: "#524f67"}
pipe: { foreground: "#797593" } pipe: {foreground: "#908caa"}
block_device: { foreground: "#d7827e" } block_device: {foreground: "#ebbcba"}
char_device: { foreground: "#ea9d34" } char_device: {foreground: "#f6c177"}
socket: { foreground: "#f4ede8" } socket: {foreground: "#21202e"}
special: { foreground: "#907aa9" } special: {foreground: "#c4a7e7"}
executable: { foreground: "#907aa9" } executable: {foreground: "#c4a7e7"}
mount_point: { foreground: "#dfdad9" } mount_point: {foreground: "#403d52"}
perms: perms:
user_read: { foreground: "#797593" } user_read: {foreground: "#908caa"}
user_write: { foreground: "#d7827e" } user_write: {foreground: "#403d52"}
user_execute_file: { foreground: "#907aa9" } user_execute_file: {foreground: "#c4a7e7"}
user_execute_other: { foreground: "#907aa9" } user_execute_other: {foreground: "#c4a7e7"}
group_read: { foreground: "#797593" } group_read: {foreground: "#908caa"}
group_write: { foreground: "#d7827e" } group_write: {foreground: "#403d52"}
group_execute: { foreground: "#907aa9" } group_execute: {foreground: "#c4a7e7"}
other_read: { foreground: "#797593" } other_read: {foreground: "#908caa"}
other_write: { foreground: "#d7827e" } other_write: {foreground: "#403d52"}
other_execute: { foreground: "#907aa9" } other_execute: {foreground: "#c4a7e7"}
special_user_file: { foreground: "#907aa9" } special_user_file: {foreground: "#c4a7e7"}
special_other: { foreground: "#d7827e" } special_other: {foreground: "#403d52"}
attribute: { foreground: "#797593" } attribute: {foreground: "#908caa"}
size: size:
major: { foreground: "#797593" } major: {foreground: "#908caa"}
minor: { foreground: "#56949f" } minor: {foreground: "#9ccfd8"}
number_byte: { foreground: "#797593" } number_byte: {foreground: "#908caa"}
number_kilo: { foreground: "#cecacd" } number_kilo: {foreground: "#524f67"}
number_mega: { foreground: "#286983" } number_mega: {foreground: "#31748f"}
number_giga: { foreground: "#907aa9" } number_giga: {foreground: "#c4a7e7"}
number_huge: { foreground: "#907aa9" } number_huge: {foreground: "#c4a7e7"}
unit_byte: { foreground: "#797593" } unit_byte: {foreground: "#908caa"}
unit_kilo: { foreground: "#286983" } unit_kilo: {foreground: "#31748f"}
unit_mega: { foreground: "#907aa9" } unit_mega: {foreground: "#c4a7e7"}
unit_giga: { foreground: "#907aa9" } unit_giga: {foreground: "#c4a7e7"}
unit_huge: { foreground: "#56949f" } unit_huge: {foreground: "#9ccfd8"}
users: users:
user_you: { foreground: "#ea9d34" } user_you: {foreground: "#f6c177"}
user_root: { foreground: "#b4637a" } user_root: {foreground: "#eb6f92"}
user_other: { foreground: "#907aa9" } user_other: {foreground: "#c4a7e7"}
group_yours: { foreground: "#cecacd" } group_yours: {foreground: "#524f67"}
group_other: { foreground: "#9893a5" } group_other: {foreground: "#6e6a86"}
group_root: { foreground: "#b4637a" } group_root: {foreground: "#eb6f92"}
links: links:
normal: { foreground: "#56949f" } normal: {foreground: "#9ccfd8"}
multi_link_file: { foreground: "#286983" } multi_link_file: {foreground: "#31748f"}
git: git:
new: { foreground: "#56949f" } new: {foreground: "#9ccfd8"}
modified: { foreground: "#ea9d34" } modified: {foreground: "#f6c177"}
deleted: { foreground: "#b4637a" } deleted: {foreground: "#eb6f92"}
renamed: { foreground: "#286983" } renamed: {foreground: "#31748f"}
typechange: { foreground: "#907aa9" } typechange: {foreground: "#c4a7e7"}
ignored: { foreground: "#9893a5" } ignored: {foreground: "#6e6a86"}
conflicted: { foreground: "#d7827e" } conflicted: {foreground: "#ebbcba"}
git_repo: git_repo:
branch_main: { foreground: "#797593" } branch_main: {foreground: "#908caa"}
branch_other: { foreground: "#907aa9" } branch_other: {foreground: "#c4a7e7"}
git_clean: { foreground: "#56949f" } git_clean: {foreground: "#9ccfd8"}
git_dirty: { foreground: "#b4637a" } git_dirty: {foreground: "#eb6f92"}
security_context: security_context:
colon: { foreground: "#797593" } colon: {foreground: "#908caa"}
user: { foreground: "#56949f" } user: {foreground: "#9ccfd8"}
role: { foreground: "#907aa9" } role: {foreground: "#c4a7e7"}
typ: { foreground: "#9893a5" } typ: {foreground: "#6e6a86"}
range: { foreground: "#907aa9" } range: {foreground: "#c4a7e7"}
file_type: file_type:
image: { foreground: "#ea9d34" } image: {foreground: "#f6c177"}
video: { foreground: "#b4637a" } video: {foreground: "#eb6f92"}
music: { foreground: "#56949f" } music: {foreground: "#9ccfd8"}
lossless: { foreground: "#9893a5" } lossless: {foreground: "#6e6a86"}
crypto: { foreground: "#dfdad9" } crypto: {foreground: "#403d52"}
document: { foreground: "#797593" } document: {foreground: "#908caa"}
compressed: { foreground: "#907aa9" } compressed: {foreground: "#c4a7e7"}
temp: { foreground: "#d7827e" } temp: {foreground: "#ebbcba"}
compiled: { foreground: "#286983" } compiled: {foreground: "#31748f"}
build: { foreground: "#9893a5" } build: {foreground: "#6e6a86"}
source: { foreground: "#d7827e" } source: {foreground: "#ebbcba"}
punctuation: { foreground: "#cecacd" } punctuation: {foreground: "#524f67"}
date: { foreground: "#286983" } date: {foreground: "#31748f"}
inode: { foreground: "#797593" } inode: {foreground: "#908caa"}
blocks: { foreground: "#9893a5" } blocks: {foreground: "#6e6a86"}
header: { foreground: "#797593" } header: {foreground: "#908caa"}
octal: { foreground: "#56949f" } octal: {foreground: "#9ccfd8"}
flags: { foreground: "#907aa9" } flags: {foreground: "#c4a7e7"}
symlink_path: { foreground: "#56949f" } symlink_path: {foreground: "#9ccfd8"}
control_char: { foreground: "#286983" } control_char: {foreground: "#31748f"}
broken_symlink: { foreground: "#b4637a" } broken_symlink: {foreground: "#eb6f92"}
broken_path_overlay: { foreground: "#cecacd" } broken_path_overlay: {foreground: "#524f67"}

View File

@@ -1,12 +1,8 @@
return { return {
{
"folke/tokyonight.nvim",
priority = 1000,
},
{ {
"LazyVim/LazyVim", "LazyVim/LazyVim",
opts = { opts = {
colorscheme = "tokyonight-night", colorscheme = "tokyonight",
}, },
}, },
} }

View File

@@ -1 +0,0 @@
3.0.0-RC