#!/bin/bash # omarchy:summary=Set up Omarchy for the current user (~/.config, ~/.local, etc.) # omarchy:group=setup # omarchy:examples=omarchy setup user | omarchy setup user --force set -euo pipefail usage() { cat <&2 exit 1 fi force=0 first_install=0 while (($#)); do case "$1" in --force) force=1 shift ;; --first-install) first_install=1 force=1 shift ;; -h|--help) usage exit 0 ;; *) echo "Unknown option: $1" >&2 usage >&2 exit 1 ;; esac done state_dir="$HOME/.local/state/omarchy" marker="$state_dir/setup-user.done" mkdir -p "$state_dir" if [[ -f $marker && $force -eq 0 ]]; then echo "User setup already complete (rerun with --force to refresh)." exit 0 fi export OMARCHY_PATH="${OMARCHY_PATH:-/usr/share/omarchy}" export OMARCHY_INSTALL="${OMARCHY_INSTALL:-$OMARCHY_PATH/install}" export OMARCHY_SETUP_CONTEXT="${OMARCHY_SETUP_CONTEXT:-runtime}" export PATH="$OMARCHY_PATH/bin:$PATH" if (( first_install )); then export OMARCHY_SETUP_CONTEXT=iso-chroot fi if [[ -n ${OMARCHY_INSTALL_LOG_FILE:-} && -f $OMARCHY_INSTALL/helpers/logging.sh ]]; then source "$OMARCHY_INSTALL/helpers/logging.sh" else run_logged() { local script="$1" bash -eE -c 'source "$1"' bash "$script" } fi omarchy_user_systemctl_enable() { local unit="$1" unit_path target local -a targets=() if systemctl --user enable "$unit" >/dev/null 2>&1; then return 0 fi # ISO chroot setup has no running user systemd manager. Enabling a user unit # is just creating the [Install] WantedBy symlinks, so do that directly. unit_path="$HOME/.config/systemd/user/$unit" if [[ -f $unit_path ]]; then mapfile -t targets < <(awk -F= ' /^\[Install\]/ { in_install=1; next } /^\[/ { in_install=0 } in_install && $1 == "WantedBy" { n=split($2, values, /[[:space:]]+/) for (i = 1; i <= n; i++) if (values[i] != "") print values[i] } ' "$unit_path") fi ((${#targets[@]})) || targets=(default.target) for target in "${targets[@]}"; do mkdir -p "$HOME/.config/systemd/user/$target.wants" ln -sfn "../$unit" "$HOME/.config/systemd/user/$target.wants/$unit" done } export -f omarchy_user_systemctl_enable mkdir -p ~/.config cp -R "$OMARCHY_PATH/config/." ~/.config/ cp "$OMARCHY_PATH/default/bashrc" ~/.bashrc echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' > ~/.bash_profile mkdir -p ~/.agents/skills ~/.claude/skills ~/.codex/skills ~/.pi/agent/skills ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.agents/skills/omarchy ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.claude/skills/omarchy ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.codex/skills/omarchy ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.pi/agent/skills/omarchy mkdir -p ~/.local/state/omarchy/toggles/hypr cp "$OMARCHY_PATH/default/hypr/toggles/flags.lua" ~/.local/state/omarchy/toggles/hypr/ mkdir -p "$HOME/.local/share/nautilus-python/extensions" cp "$OMARCHY_PATH/default/nautilus-python/extensions/localsend.py" \ "$HOME/.local/share/nautilus-python/extensions/" cp "$OMARCHY_PATH/default/nautilus-python/extensions/transcode.py" \ "$HOME/.local/share/nautilus-python/extensions/" mkdir -p ~/.config/omarchy/branding cp "$OMARCHY_PATH/icon.txt" ~/.config/omarchy/branding/about.txt cp "$OMARCHY_PATH/logo.txt" ~/.config/omarchy/branding/screensaver.txt mkdir -p ~/Downloads ~/Pictures ~/Videos ~/.config/gtk-3.0 xdg-user-dirs-update --set TEMPLATES "$HOME" xdg-user-dirs-update --set PUBLICSHARE "$HOME" xdg-user-dirs-update --set DESKTOP "$HOME" rmdir ~/Templates ~/Public ~/Desktop 2>/dev/null || true touch ~/.config/gtk-3.0/bookmarks for dir in Downloads Projects Pictures Videos; do bookmark="file://$HOME/$dir $dir" grep -qxF "$bookmark" ~/.config/gtk-3.0/bookmarks || echo "$bookmark" >>~/.config/gtk-3.0/bookmarks done conf=/etc/vconsole.conf hyprlua="$HOME/.config/hypr/input.lua" if [[ -f $conf && -f $hyprlua ]]; then sed -i '/^[[:space:]]*kb_layout[[:space:]]*=/d' "$hyprlua" sed -i '/^[[:space:]]*kb_variant[[:space:]]*=/d' "$hyprlua" if grep -q '^XKBLAYOUT=' "$conf"; then layout=$(grep '^XKBLAYOUT=' "$conf" | cut -d= -f2 | tr -d '"') sed -i "/^[[:space:]]*kb_options *=/i\ kb_layout = \"$layout\"," "$hyprlua" fi if grep -q '^XKBVARIANT=' "$conf"; then variant=$(grep '^XKBVARIANT=' "$conf" | cut -d= -f2 | tr -d '"') sed -i "/^[[:space:]]*kb_options *=/i\ kb_variant = \"$variant\"," "$hyprlua" fi fi source "$OMARCHY_INSTALL/user/all.sh" omarchy-refresh-applications xdg-settings set default-web-browser chromium.desktop xdg-mime default HEY.desktop x-scheme-handler/mailto if (( first_install )); then mkdir -p "$state_dir/migrations" for migration in "$OMARCHY_PATH"/migrations/*.sh; do [[ -f $migration ]] && touch "$state_dir/migrations/$(basename "$migration")" done fi touch "$marker" echo "User setup complete."