Split user defaults into skel seed, finalize, and resync
Reorganizes Omarchy 4 around three layers for populating $HOME:
Seed: omarchy-settings ships defaults to /etc/skel; useradd -m
copies them on user creation
Finalize: omarchy-finalize-user (renamed from omarchy-setup-user)
handles only the runtime tweaks /etc/skel can't do — skill
symlinks, xdg-user-dirs, default browser/mailto, vconsole→hypr
keyboard sync, and install/user/all.sh
Resync: omarchy-reinstall-configs is the explicit, destructive
resync of /etc/skel into an existing user's $HOME
Package-owned files move out of config/ into default/, where the
omarchy-settings PKGBUILD installs them to real system paths:
config/environment.d/fcitx.conf -> /usr/lib/environment.d/
config/fontconfig/fonts.conf -> /usr/share/fontconfig/conf.avail/
config/mimeapps.list -> /usr/share/applications/
config/omarchy.ttf -> /usr/share/fonts/omarchy/
config/systemd/user/*.service -> /usr/lib/systemd/user/
config/uwsm/default -> /usr/share/omarchy/default/uwsm/
config/uwsm/env -> /usr/share/uwsm/env.d/10-omarchy
config/xdg-terminals.list -> /usr/share/xdg-terminal-exec/
omarchy-upgrade-to-4 grows a 'retire' action (renamed from 'move' to
clarify nothing is copied — the system path is owned by the new package
once the user's hash-matched ~/.config copy is removed). Mismatched
copies are kept as backups so user overrides survive the upgrade.
Other simplifications:
- Single env bootstrap at default/bash/env-bootstrap sourced by
/etc/profile.d/omarchy.sh, /etc/skel/.bashrc,
/usr/share/uwsm/env.d/10-omarchy, and default/bash/envs. PATH
prepend only in dev-link mode (production uses /usr/bin/omarchy-*).
- omarchy-refresh-config reads from /etc/skel/.config so refresh
means 'snap to skel'.
- omarchy-reinstall-configs collapses to 'cp -af /etc/skel/. ~/'
plus limine/plymouth/nvim refresh.
- omarchy-font-set uses awk against our own 30-omarchy.conf instead
of xmlstarlet; xmlstarlet dropped from omarchy-base.packages.
- Defer user systemd enables (bt-agent, sleep-lock,
recover-internal-monitor) to first-run via
install/user/first-run/enable-user-units.sh; delete
omarchy-user-systemctl-enable and the per-hardware install
scripts that called it.
- Wireplumber bluetooth-a2dp-autoconnect.conf moves to config/ so
/etc/skel ships it; install/user/hardware/bluetooth.sh deleted.
- Default terminal switched to foot.desktop.
- docs/file-layout.md documents the three-layer model and the
build-time repo→path map.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
[Default Applications]
|
||||
inode/directory=org.gnome.Nautilus.desktop
|
||||
|
||||
image/png=imv.desktop
|
||||
image/jpeg=imv.desktop
|
||||
image/gif=imv.desktop
|
||||
image/webp=imv.desktop
|
||||
image/bmp=imv.desktop
|
||||
image/tiff=imv.desktop
|
||||
|
||||
application/pdf=org.gnome.Evince.desktop
|
||||
|
||||
x-scheme-handler/http=chromium.desktop
|
||||
x-scheme-handler/https=chromium.desktop
|
||||
x-scheme-handler/mailto=HEY.desktop
|
||||
|
||||
video/mp4=mpv.desktop
|
||||
video/x-msvideo=mpv.desktop
|
||||
video/x-matroska=mpv.desktop
|
||||
video/x-flv=mpv.desktop
|
||||
video/x-ms-wmv=mpv.desktop
|
||||
video/mpeg=mpv.desktop
|
||||
video/ogg=mpv.desktop
|
||||
video/webm=mpv.desktop
|
||||
video/quicktime=mpv.desktop
|
||||
video/3gpp=mpv.desktop
|
||||
video/3gpp2=mpv.desktop
|
||||
video/x-ms-asf=mpv.desktop
|
||||
video/x-ogm+ogg=mpv.desktop
|
||||
video/x-theora+ogg=mpv.desktop
|
||||
application/ogg=mpv.desktop
|
||||
|
||||
text/plain=nvim.desktop
|
||||
text/english=nvim.desktop
|
||||
text/x-makefile=nvim.desktop
|
||||
text/x-c++hdr=nvim.desktop
|
||||
text/x-c++src=nvim.desktop
|
||||
text/x-chdr=nvim.desktop
|
||||
text/x-csrc=nvim.desktop
|
||||
text/x-java=nvim.desktop
|
||||
text/x-moc=nvim.desktop
|
||||
text/x-pascal=nvim.desktop
|
||||
text/x-tcl=nvim.desktop
|
||||
text/x-tex=nvim.desktop
|
||||
application/x-shellscript=nvim.desktop
|
||||
text/x-c=nvim.desktop
|
||||
text/x-c++=nvim.desktop
|
||||
application/xml=nvim.desktop
|
||||
text/xml=nvim.desktop
|
||||
@@ -0,0 +1,27 @@
|
||||
# Single source of truth for OMARCHY_PATH + PATH adjustments. Sourced by:
|
||||
# /etc/profile.d/omarchy.sh (system login shells)
|
||||
# /etc/skel/.bashrc (interactive shells)
|
||||
# /usr/share/uwsm/env.d/10-omarchy (Hyprland session via uwsm)
|
||||
# /usr/share/omarchy/default/bash/envs (bash rc chain; SSH/non-login)
|
||||
|
||||
# /etc/omarchy.conf is written by omarchy-dev-link. When absent, force the
|
||||
# packaged default instead of preserving a stale inherited value.
|
||||
if [ -f /etc/omarchy.conf ]; then
|
||||
. /etc/omarchy.conf
|
||||
: "${OMARCHY_PATH:=/usr/share/omarchy}"
|
||||
else
|
||||
OMARCHY_PATH=/usr/share/omarchy
|
||||
fi
|
||||
export OMARCHY_PATH
|
||||
|
||||
# Only prepend in dev-link mode. On a production install, the binaries are
|
||||
# already on PATH as /usr/bin/omarchy-* via the omarchy package — prepending
|
||||
# /usr/share/omarchy/bin would just be noise. omarchy-dev-unlink strips its
|
||||
# checkout bin/ from the active PATH explicitly, so we don't dedupe here.
|
||||
if [ "$OMARCHY_PATH" != /usr/share/omarchy ]; then
|
||||
case ":$PATH:" in
|
||||
*":${OMARCHY_PATH%/}/bin:"*) ;;
|
||||
*) PATH="${OMARCHY_PATH%/}/bin:$PATH" ;;
|
||||
esac
|
||||
export PATH
|
||||
fi
|
||||
+8
-6
@@ -6,9 +6,11 @@ export BAT_THEME=ansi
|
||||
export MANROFFOPT="-c"
|
||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||
|
||||
# Duplicated from .config/uwsm/env so SSH/non-login shells also see the
|
||||
# override. /etc/omarchy.conf wins (omarchy-dev-link writes it); otherwise
|
||||
# the packaged runtime under /usr/share/omarchy is used.
|
||||
[ -f /etc/omarchy.conf ] && . /etc/omarchy.conf
|
||||
export OMARCHY_PATH="${OMARCHY_PATH:-/usr/share/omarchy}"
|
||||
export PATH="$OMARCHY_PATH/bin:$PATH:$HOME/.local/bin"
|
||||
# Idempotent — already sourced by /etc/skel/.bashrc; re-source here so SSH and
|
||||
# other non-interactive non-login bash sessions still get OMARCHY_PATH.
|
||||
[ -r /usr/share/omarchy/default/bash/env-bootstrap ] && . /usr/share/omarchy/default/bash/env-bootstrap
|
||||
|
||||
case ":$PATH:" in
|
||||
*":$HOME/.local/bin:"*) ;;
|
||||
*) export PATH="$PATH:$HOME/.local/bin" ;;
|
||||
esac
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
# All the default Omarchy aliases and functions
|
||||
# (don't mess with these directly, just overwrite them here!)
|
||||
: "${OMARCHY_PATH:=/usr/share/omarchy}"
|
||||
[[ -r /usr/share/omarchy/default/bash/env-bootstrap ]] && source /usr/share/omarchy/default/bash/env-bootstrap
|
||||
source "$OMARCHY_PATH/default/bash/rc"
|
||||
|
||||
# Add your own exports, aliases, and functions here.
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
INPUT_METHOD=fcitx
|
||||
QT_IM_MODULE=fcitx
|
||||
XMODIFIERS=@im=fcitx
|
||||
SDL_IM_MODULE=fcitx
|
||||
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||
<fontconfig>
|
||||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>sans-serif</string>
|
||||
</test>
|
||||
<edit name="family" mode="assign" binding="strong">
|
||||
<string>Liberation Sans</string>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>serif</string>
|
||||
</test>
|
||||
<edit name="family" mode="assign" binding="strong">
|
||||
<string>Liberation Serif</string>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>monospace</string>
|
||||
</test>
|
||||
<edit name="family" mode="assign" binding="strong">
|
||||
<string>JetBrainsMono Nerd Font</string>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<alias>
|
||||
<family>system-ui</family>
|
||||
<prefer>
|
||||
<family>Liberation Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>ui-monospace</family>
|
||||
<default>
|
||||
<family>monospace</family>
|
||||
</default>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>-apple-system</family>
|
||||
<prefer>
|
||||
<family>Liberation Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>BlinkMacSystemFont</family>
|
||||
<prefer>
|
||||
<family>Liberation Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>Liberation Sans</family>
|
||||
<accept>
|
||||
<family>JetBrainsMono Nerd Font</family>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<accept>
|
||||
<family>JetBrainsMono Nerd Font</family>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<accept>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<accept>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
</fontconfig>
|
||||
Binary file not shown.
@@ -0,0 +1,23 @@
|
||||
[Unit]
|
||||
Description=Bluetooth pairing agent (auto-accept)
|
||||
Documentation=man:bt-agent(1)
|
||||
ConditionPathIsDirectory=/sys/class/bluetooth
|
||||
# bluez must be reachable on the system bus before we can register.
|
||||
After=dbus.socket
|
||||
Requires=dbus.socket
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
# If bluetoothd is unavailable (for example in VMs or machines without a
|
||||
# usable adapter), skip cleanly instead of entering a restart loop.
|
||||
ExecCondition=/usr/bin/systemctl is-active --quiet bluetooth.service
|
||||
# NoInputNoOutput auto-accepts pair requests. Safe because the adapter
|
||||
# is only `pairable: true` when the user explicitly opens the omarchy
|
||||
# bluetoothPanel and starts scanning; outside that window bluez refuses
|
||||
# inbound pair attempts at a lower layer.
|
||||
ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
|
||||
Restart=on-failure
|
||||
RestartSec=2
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
@@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Recover the internal monitor toggle when no external display is connected
|
||||
Before=graphical-session-pre.target
|
||||
ConditionPathExists=%h/.local/state/omarchy/toggles/hypr/internal-monitor-disable.lua
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/omarchy-hw-recover-internal-monitor
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session-pre.target
|
||||
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=Lock Omarchy before suspend
|
||||
After=dbus.socket
|
||||
Requires=dbus.socket
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/omarchy-system-sleep-monitor
|
||||
Restart=always
|
||||
RestartSec=2
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
@@ -0,0 +1,16 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Install other terminals via Install > Terminal
|
||||
export TERMINAL=xdg-terminal-exec
|
||||
|
||||
# Used by terminal programs (like gh) to open URLs detached from the terminal process tree
|
||||
export BROWSER=omarchy-launch-browser
|
||||
|
||||
# Used by terminal programs to open files with the selected Omarchy default editor
|
||||
export EDITOR="omarchy-launch-editor --inline"
|
||||
|
||||
# Use a custom directory for screenshots (remember to make the directory!)
|
||||
# export OMARCHY_SCREENSHOT_DIR="$HOME/Pictures/Screenshots"
|
||||
|
||||
# Use a custom directory for screenrecordings (remember to make the directory!)
|
||||
# export OMARCHY_SCREENRECORD_DIR="$HOME/Videos/Screencasts"
|
||||
@@ -0,0 +1,20 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# UWSM doesn't source /etc/profile.d, so pull the env bootstrap in directly.
|
||||
[ -r /usr/share/omarchy/default/bash/env-bootstrap ] && . /usr/share/omarchy/default/bash/env-bootstrap
|
||||
|
||||
# Omarchy session defaults. Users can override these in ~/.config/uwsm/default
|
||||
# or, preferably, ~/.config/uwsm/env.d/*.
|
||||
if [ -f "${OMARCHY_PATH%/}/default/uwsm/default" ]; then
|
||||
. "${OMARCHY_PATH%/}/default/uwsm/default"
|
||||
else
|
||||
export TERMINAL=xdg-terminal-exec
|
||||
export BROWSER=omarchy-launch-browser
|
||||
export EDITOR="omarchy-launch-editor --inline"
|
||||
fi
|
||||
|
||||
# Optional user overrides kept for compatibility with older installs.
|
||||
[ -f "$HOME/.config/uwsm/default" ] && . "$HOME/.config/uwsm/default"
|
||||
|
||||
# Activate mise if present on the system
|
||||
omarchy-cmd-present mise && eval "$(mise activate bash --shims)"
|
||||
@@ -1,18 +0,0 @@
|
||||
## Auto-connect A2DP playback/capture profiles on Bluetooth devices.
|
||||
## This helps speakers and receivers expose their audio profiles without
|
||||
## requiring manual PipeWire/WirePlumber recovery.
|
||||
|
||||
monitor.bluez.rules = [
|
||||
{
|
||||
matches = [
|
||||
{
|
||||
device.name = "~bluez_card.*"
|
||||
}
|
||||
]
|
||||
actions = {
|
||||
update-props = {
|
||||
bluez5.auto-connect = [ a2dp_sink a2dp_source ]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,3 @@
|
||||
# Terminal emulator preference order for xdg-terminal-exec
|
||||
# The first found and valid terminal will be used
|
||||
foot.desktop
|
||||
Reference in New Issue
Block a user