diff --git a/README.md b/README.md index 5910082..3b3b90b 100644 --- a/README.md +++ b/README.md @@ -56,25 +56,21 @@ | `Super+S` / `Super+W` / `Super+E` | layout: stacking / tabbed / split | | `Alt+Shift` | переключение раскладки (us / ru) | -## Swaylock-effects (необязательно) - -В Fedora пакета нет, он есть в COPR `pheeef/swaylock-effects`. `dnf swap` не проходит из-за зависимости `sway-config-fedora`, поэтому бинарник ставится рядом с системным swaylock и ничего не заменяет: +## Установка одной командой (Fedora) ```sh -mkdir /tmp/slfx && cd /tmp/slfx && dnf download swaylock-effects # после dnf copr enable pheeef/swaylock-effects -rpm2cpio swaylock-effects-*.x86_64.rpm | cpio -idm -install -Dm755 usr/bin/swaylock ~/.local/bin/swaylock-effects +git clone git@git.ibrash.duckdns.org:aibrash/sway-rising.git && cd sway-rising +./install.sh ``` -## Установка +Скрипт: +1. ставит недостающие пакеты через `dnf` (swayfx берёт из COPR `swayfx/swayfx`, шрифты, waybar, rofi и остальное); +2. кладёт `swaylock-effects` из COPR `pheeef/swaylock-effects` в `~/.local/bin` рядом с системным swaylock и ничего не заменяет (`dnf swap` не проходит из-за `sway-config-fedora`); +3. **делает бэкап** ваших текущих конфигов в `~/rice-backup-<дата>`; +4. копирует конфиги и обои, проверяет конфиг (`sway -C`) и перезагружает sway. -Нужны: swayfx, waybar, rofi, dunst, swaylock, swayidle, kitty, grim, slurp, wl-clipboard, playerctl, brightnessctl, JetBrains Mono, Font Awesome 6. +Можно запускать повторно. Перед подключением каждого COPR скрипт спрашивает подтверждение. -```sh -cp -r .config/* ~/.config/ -mkdir -p ~/Pictures/wallpapers && cp wallpapers/* ~/Pictures/wallpapers/ -ln -sf ~/Pictures/wallpapers/original.jpg ~/Pictures/wallpapers/current -swaymsg reload -``` +Флаги: `--yes` (не спрашивать), `--no-packages` (только конфиги), `--no-lock-effects`. Waybar запускает сам sway (`/usr/share/sway/config.d/90-bar.conf`). Руками его запускать не нужно, иначе будет два бара. Перезагрузка стиля: `pkill -SIGUSR2 waybar`. diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..3f3c1ff --- /dev/null +++ b/install.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env bash +# sway-rising installer: packages + configs + wallpapers + swaylock-effects. +# Usage: ./install.sh [--yes] [--no-packages] [--no-lock-effects] +set -euo pipefail + +REPO=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +CFG=${XDG_CONFIG_HOME:-$HOME/.config} +WALLS=$HOME/Pictures/wallpapers +STAMP=$(date +%F-%H%M%S) +BACKUP=$HOME/rice-backup-$STAMP + +YES=0; PACKAGES=1; LOCKFX=1 +for a in "$@"; do + case $a in + -y|--yes) YES=1 ;; + --no-packages) PACKAGES=0 ;; + --no-lock-effects) LOCKFX=0 ;; + -h|--help) sed -n '2,3p' "$0"; exit 0 ;; + *) echo "unknown option: $a" >&2; exit 1 ;; + esac +done + +say() { printf '\033[1;37m==>\033[0m %s\n' "$*"; } +warn() { printf '\033[1;33m!!\033[0m %s\n' "$*" >&2; } +ask() { [ "$YES" = 1 ] && return 0; read -r -p "$1 [y/N] " r; [[ $r =~ ^[yYдД] ]]; } + +# ---------- 1. packages (Fedora) ---------- +install_packages() { + if ! command -v dnf >/dev/null; then + warn "dnf not found. Install manually: swayfx waybar rofi dunst swaylock swayidle kitty grim slurp" + warn "wl-clipboard playerctl brightnessctl ImageMagick libnotify pavucontrol network-manager-applet" + warn "JetBrains Mono and Font Awesome 6 fonts." + return + fi + + local want=(waybar rofi dunst swaylock swayidle kitty grim slurp wl-clipboard playerctl + brightnessctl ImageMagick libnotify pavucontrol network-manager-applet + wireplumber fontawesome-6-free-fonts) + fc-list | grep -qi "JetBrains Mono" || want+=(jetbrains-mono-fonts) + + local missing=() p + for p in "${want[@]}"; do rpm -q "$p" >/dev/null 2>&1 || missing+=("$p"); done + + if ! rpm -q swayfx >/dev/null 2>&1; then + say "swayfx is not installed (it lives in the swayfx/swayfx COPR)" + if ask "Enable COPR swayfx/swayfx and install swayfx? (replaces nothing, but 'sway' conflicts)"; then + sudo dnf copr enable -y swayfx/swayfx + missing+=(swayfx) + else + warn "Skipping swayfx: effects will not work on plain sway." + fi + fi + + if [ ${#missing[@]} -gt 0 ]; then + say "Installing: ${missing[*]}" + sudo dnf install -y "${missing[@]}" + else + say "All packages already installed" + fi +} + +# ---------- 2. swaylock-effects (side by side, system swaylock untouched) ---------- +install_lock_effects() { + local dest=$HOME/.local/bin/swaylock-effects + if [ -x "$dest" ]; then say "swaylock-effects already installed"; return; fi + command -v dnf >/dev/null || { warn "No dnf: put a swaylock-effects binary at $dest yourself"; return; } + command -v cpio >/dev/null || { warn "cpio missing, skipping swaylock-effects"; return; } + + say "swaylock-effects: not in Fedora repos, it comes from the third-party COPR pheeef/swaylock-effects" + ask "Enable that COPR and extract the binary into ~/.local/bin (does not replace system swaylock)?" || { warn "Skipped; plain swaylock will be used"; return; } + + sudo dnf copr enable -y pheeef/swaylock-effects + local tmp; tmp=$(mktemp -d) + ( cd "$tmp" && dnf download swaylock-effects \ + && rpm2cpio ./swaylock-effects-*.x86_64.rpm 2>/dev/null | cpio -idm 2>/dev/null \ + || bsdtar -xf ./swaylock-effects-*.x86_64.rpm 2>/dev/null ) + if [ -f "$tmp/usr/bin/swaylock" ]; then + install -Dm755 "$tmp/usr/bin/swaylock" "$dest" + say "Installed $dest ($("$dest" --version))" + else + warn "Could not extract swaylock-effects; plain swaylock will be used" + fi + rm -rf "$tmp" +} + +# ---------- 3. configs ---------- +install_configs() { + say "Backing up existing configs to $BACKUP" + mkdir -p "$BACKUP" + local d + for d in sway waybar rofi dunst swaylock; do + [ -e "$CFG/$d" ] && cp -a "$CFG/$d" "$BACKUP/" + done + + say "Copying configs to $CFG" + mkdir -p "$CFG" + cp -a "$REPO/.config/." "$CFG/" + chmod +x "$CFG"/sway/*.sh "$CFG"/rofi/*.sh 2>/dev/null || true + + say "Copying wallpapers to $WALLS" + mkdir -p "$WALLS" + cp -n "$REPO"/wallpapers/* "$WALLS/" + [ -e "$WALLS/current" ] || ln -s "$WALLS/original.jpg" "$WALLS/current" +} + +# ---------- 4. apply ---------- +apply() { + if command -v sway >/dev/null && sway -C >/dev/null 2>&1; then + say "sway config is valid" + else + warn "sway -C reported a problem; check your config" + fi + if [ -n "${SWAYSOCK:-}" ] && command -v swaymsg >/dev/null; then + swaymsg reload >/dev/null && say "sway reloaded (waybar restarts with it)" + else + say "Not inside sway: log in to a sway session to see the result" + fi +} + +[ "$PACKAGES" = 1 ] && install_packages +[ "$LOCKFX" = 1 ] && install_lock_effects +install_configs +apply + +cat <