Update fedora-niri-dms-setup.sh
This commit is contained in:
1 parent
3283d80ab0
commit
6da00a9e8a
1 file changed
+82
-14
+82
-14
@@ -254,23 +254,52 @@ if [[ ! -f "$NIRI_CFG" ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Our settings live in their own file, included at the END of config.kdl.
|
||||||
|
# niri applies includes in order and a later bind overrides an earlier one, so
|
||||||
|
# these win over niri's defaults without editing them. Re-running the script
|
||||||
|
# simply rewrites this file.
|
||||||
|
NIRI_INC="$HOME/.config/niri/dms-setup.kdl"
|
||||||
|
cat > "$NIRI_INC" <<'EOF'
|
||||||
|
// Managed by fedora-niri-dms-setup; re-running the script overwrites this file.
|
||||||
|
// Put your own tweaks in config.kdl AFTER the include line to override these.
|
||||||
|
|
||||||
|
binds {
|
||||||
|
// Ptyxis instead of Alacritty
|
||||||
|
Mod+T hotkey-overlay-title="Open a Terminal: Ptyxis" { spawn "ptyxis"; }
|
||||||
|
|
||||||
|
// DMS replaces fuzzel and swaylock
|
||||||
|
Mod+D hotkey-overlay-title="App Launcher (DMS)" { spawn "dms" "ipc" "call" "spotlight" "toggle"; }
|
||||||
|
Super+Alt+L hotkey-overlay-title="Lock the Screen (DMS)" { spawn "dms" "ipc" "call" "lock" "lock"; }
|
||||||
|
|
||||||
|
// DMS panels
|
||||||
|
Mod+Alt+V hotkey-overlay-title="Clipboard History (DMS)" { spawn "dms" "ipc" "call" "clipboard" "toggle"; }
|
||||||
|
Mod+Alt+N hotkey-overlay-title="Notifications (DMS)" { spawn "dms" "ipc" "call" "notifications" "toggle"; }
|
||||||
|
Mod+Alt+C hotkey-overlay-title="Control Centre (DMS)" { spawn "dms" "ipc" "call" "control-center" "toggle"; }
|
||||||
|
Mod+Alt+S hotkey-overlay-title="DMS Settings" { spawn "dms" "ipc" "call" "settings" "toggle"; }
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
if [[ -f "$NIRI_CFG" ]]; then
|
if [[ -f "$NIRI_CFG" ]]; then
|
||||||
[[ -f "$NIRI_CFG.orig" ]] || cp "$NIRI_CFG" "$NIRI_CFG.orig"
|
[[ -f "$NIRI_CFG.orig" ]] || cp "$NIRI_CFG" "$NIRI_CFG.orig"
|
||||||
sed -i -E \
|
BEFORE=$(mktemp)
|
||||||
-e 's|^([[:space:]]*)spawn-at-startup "waybar"|\1// spawn-at-startup "waybar" // DMS provides the bar|' \
|
cp "$NIRI_CFG" "$BEFORE"
|
||||||
-e 's|spawn "alacritty"|spawn "ptyxis"|g' \
|
|
||||||
-e 's|spawn "fuzzel"|spawn "dms" "ipc" "call" "spotlight" "toggle"|g' \
|
# The one edit an include can't do: stop Waybar autostarting (DMS is the bar).
|
||||||
-e 's|spawn "swaylock"|spawn "dms" "ipc" "call" "lock" "lock"|g' \
|
sed -i -E 's|^([[:space:]]*)spawn-at-startup "waybar"|\1// spawn-at-startup "waybar" // DMS provides the bar|' "$NIRI_CFG"
|
||||||
-e 's|Open a Terminal: alacritty|Open a Terminal: Ptyxis|' \
|
|
||||||
-e 's|Run an Application: fuzzel|Run an Application: DMS launcher|' \
|
if ! grep -qF 'include "dms-setup.kdl"' "$NIRI_CFG"; then
|
||||||
-e 's|Lock the Screen: swaylock|Lock the Screen: DMS|' \
|
printf '\n// fedora-niri-dms-setup: DMS keybinds and Ptyxis (see dms-setup.kdl)\ninclude "dms-setup.kdl"\n' >> "$NIRI_CFG"
|
||||||
"$NIRI_CFG"
|
|
||||||
info "Waybar disabled, Super+T opens Ptyxis, launcher and lock keys use DMS"
|
|
||||||
info "Original config saved as $NIRI_CFG.orig"
|
|
||||||
if command -v niri >/dev/null && ! niri validate -c "$NIRI_CFG" >/dev/null 2>&1; then
|
|
||||||
warn "niri reports a config problem; restoring the original"
|
|
||||||
cp "$NIRI_CFG.orig" "$NIRI_CFG"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if command -v niri >/dev/null && ! niri validate -c "$NIRI_CFG" >/dev/null 2>&1; then
|
||||||
|
warn "niri reports a config problem; reverting this run's changes"
|
||||||
|
cp "$BEFORE" "$NIRI_CFG"
|
||||||
|
else
|
||||||
|
info "Super+T opens Ptyxis; Super+D launcher, Super+Alt+L lock,"
|
||||||
|
info "Super+Alt+V clipboard, Super+Alt+N notifications, Super+Alt+C control centre, Super+Alt+S settings"
|
||||||
|
info "Original config saved as $NIRI_CFG.orig"
|
||||||
|
fi
|
||||||
|
rm -f "$BEFORE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ---------- 7. Desktop essentials --------------------------------------------
|
# ---------- 7. Desktop essentials --------------------------------------------
|
||||||
@@ -440,6 +469,45 @@ if $WANT_EASYFX; then
|
|||||||
info "Load Framework's speaker profile from their knowledge base after first login"
|
info "Load Framework's speaker profile from their knowledge base after first login"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ---------- 10. Btrfs snapshots (snapper) -----------------------------------
|
||||||
|
# Snapshot the root filesystem before and after every dnf transaction, so a bad
|
||||||
|
# update can be undone from Btrfs Assistant. Runs last so the finished setup
|
||||||
|
# is the first baseline snapshot.
|
||||||
|
|
||||||
|
if [[ "$(findmnt -no FSTYPE /)" == "btrfs" ]]; then
|
||||||
|
step "Setting up Btrfs snapshots"
|
||||||
|
dnf_install snapper libdnf5-plugin-actions btrfs-assistant
|
||||||
|
|
||||||
|
if [[ ! -f /etc/snapper/configs/root ]]; then
|
||||||
|
sudo snapper -c root create-config /
|
||||||
|
fi
|
||||||
|
# Keep the 10 newest dnf snapshot pairs (5 marked important); no hourly ones.
|
||||||
|
sudo snapper -c root set-config \
|
||||||
|
NUMBER_LIMIT=10 NUMBER_LIMIT_IMPORTANT=5 \
|
||||||
|
TIMELINE_CREATE=no \
|
||||||
|
ALLOW_USERS="$USER" SYNC_ACL=yes
|
||||||
|
sudo systemctl enable --now snapper-cleanup.timer
|
||||||
|
|
||||||
|
# dnf5 hook: pre snapshot before each transaction, post snapshot after it.
|
||||||
|
sudo mkdir -p /etc/dnf/libdnf5-plugins/actions.d
|
||||||
|
sudo tee /etc/dnf/libdnf5-plugins/actions.d/snapper.actions >/dev/null <<'EOF'
|
||||||
|
# Managed by fedora-niri-dms-setup
|
||||||
|
# Take a snapper pre/post snapshot pair around every dnf transaction.
|
||||||
|
pre_transaction::::/usr/bin/sh -c echo\ "tmp.snapper_descr=$(ps\ -o\ command\ --no-headers\ -p\ '${pid}')"
|
||||||
|
pre_transaction::::/usr/bin/sh -c echo\ "tmp.snapper_pre=$(snapper\ -c\ root\ create\ -c\ number\ -t\ pre\ -p\ -d\ '${tmp.snapper_descr}')"
|
||||||
|
post_transaction::::/usr/bin/sh -c [\ -n\ "${tmp.snapper_pre}"\ ]\ &&\ snapper\ -c\ root\ create\ -c\ number\ -t\ post\ --pre-number\ "${tmp.snapper_pre}"\ -d\ "${tmp.snapper_descr}"\ ;\ echo\ tmp.snapper_pre\ ;\ echo\ tmp.snapper_descr
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if ! sudo snapper -c root list --columns description 2>/dev/null | grep -q 'fedora-niri-dms-setup baseline'; then
|
||||||
|
sudo snapper -c root create -c important -d "fedora-niri-dms-setup baseline"
|
||||||
|
info "Baseline snapshot of the finished setup created"
|
||||||
|
fi
|
||||||
|
info "Every dnf install/update now takes a before/after snapshot."
|
||||||
|
info "Browse or restore them in Btrfs Assistant, or list with: snapper -c root list"
|
||||||
|
else
|
||||||
|
warn "Root filesystem isn't Btrfs; skipping snapshots"
|
||||||
|
fi
|
||||||
|
|
||||||
# ---------- done -------------------------------------------------------------
|
# ---------- done -------------------------------------------------------------
|
||||||
|
|
||||||
step "All done"
|
step "All done"
|
||||||
|
|||||||
Reference in new issue
Block a user