From 04e868102d91e6a5bfb46a8d6287340a0dfcdd15 Mon Sep 17 00:00:00 2001 From: aibrash Date: Fri, 30 Oct 2026 13:56:03 +0500 Subject: [PATCH] install.sh: visual-only by default, --full for tools and apps Default run installs Hyprland, DMS, the font, kitty and the configs only. Scripts' tools and the Flatpak apps (Chrome, Telegram, Remmina, Nextcloud) moved behind --full. Without --full the networkEditor plugin is not deployed and its button is removed from the DMS bar. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 22 +++++++------ install.sh | 94 +++++++++++++++++++++++++++++++++--------------------- 2 files changed, 70 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 3dc5ab7..ed3b235 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Hyprland 0.57 на Fedora 44: тёмный минималистичный рай | `dms/settings.json` | настройки DMS (панель, тема `pink`, лаунчер) | | `systemd/user/hyprland-session.target` | нужен порталам (`xdg-desktop-portal`) вне uwsm | | `kitty/kitty.conf` | терминал | -| `install.sh` | установка на чистую Fedora: репозитории, пакеты, Flatpak, конфиги | +| `install.sh` | установка на чистую Fedora: по умолчанию только визуал, `--full` — ещё инструменты и приложения | | `sync.sh` | копирует живой конфиг из `~/.config` в репозиторий | Панель, уведомления, лаунчер, блокировка, обои и буфер обмена — это @@ -57,21 +57,23 @@ Host proxmox1 git clone git@git.ibrash.duckdns.org:aibrash/hyprland-rising.git cd hyprland-rising ./install.sh --dry-run # посмотреть, что будет сделано, ничего не меняя -./install.sh # установить +./install.sh # только визуальная часть +./install.sh --full # визуал + инструменты и приложения ``` -Скрипт по шагам: +**По умолчанию — только визуал:** COPR `sachesi/hyprland` (в репозиториях Fedora Hyprland нет) и `avengemedia/dms`, +затем Hyprland, DMS (панель, лаунчер, уведомления, блокировка, обои, тема), шрифт JetBrains Mono, терминал kitty +и конфиги: `hypr`, настройки DMS, `kitty`, `hyprland-session.target` (нужен порталам). +Приложения (Chrome, Telegram, Remmina, Nextcloud) не ставятся, кнопки сетевого редактора в панели не будет. +Бинды на непоставленные программы просто ничего не делают. -1. подключает COPR `sachesi/hyprland` (Hyprland нет в репозиториях Fedora) и `avengemedia/dms` (DMS); -2. ставит Hyprland с утилитами, DMS и инструменты для скриптов (kitty, fzf, tmux, grim, tesseract и т. д.); -3. ставит Flatpak-приложения из биндов и автозапуска: Chrome, Telegram, Remmina, клиент Nextcloud; -4. раскладывает конфиги в `~/.config` (`hypr`, плагин и настройки DMS, `kitty`, `hyprland-session.target`), - включает плагин `networkEditor` и создаёт `~/.ssh/sockets`. +**`--full` дополнительно** ставит инструменты, на которых держатся скрипты (fzf, tmux, jq, grim, slurp, tesseract, +nautilus, keepassxc, nm-connection-editor и др.), Flatpak-приложения (Chrome, Telegram, Remmina, клиент Nextcloud), +плагин DMS `networkEditor` и создаёт `~/.ssh/sockets`. Это нужно для SSH-меню, OCR и биндов на приложения. Существующие конфиги не затираются: они переносятся в `*.bak-<время>`, повторный запуск безопасен. -Этапы можно пропустить: `--no-packages`, `--no-flatpak`, `--no-config`; `--yes` отключает вопросы. +`--yes` отключает вопросы, `--no-packages` и `--no-config` пропускают этапы. После установки выйдите из сессии и выберите в GDM **Hyprland** (не `hyprland-uwsm`). - COPR — сторонние репозитории, пакеты в них никем не проверяются. ### Вручную (без скрипта) diff --git a/install.sh b/install.sh index 48591ab..4f05571 100755 --- a/install.sh +++ b/install.sh @@ -1,10 +1,11 @@ #!/bin/bash -# Установка райса на чистую Fedora (проверено на структуре Fedora 44), в том числе без Hyprland. +# Установка райса на чистую Fedora (в том числе без Hyprland). # -# ./install.sh всё: репозитории, пакеты, Flatpak-приложения, конфиги +# ./install.sh только визуальная часть: Hyprland, DMS, шрифты, терминал + конфиги +# ./install.sh --full + инструменты для скриптов/биндов (fzf, tmux, tesseract, …) и приложения (Flatpak) # ./install.sh --dry-run только показать, что будет сделано (ничего не меняет) # ./install.sh --yes не задавать вопросов -# ./install.sh --no-packages / --no-flatpak / --no-config пропустить этап +# ./install.sh --no-packages / --no-config пропустить этап # # Скрипт можно запускать повторно: существующие конфиги не затираются, а переносятся в *.bak-<время>. set -euo pipefail @@ -12,19 +13,22 @@ set -euo pipefail REPO=$(cd "$(dirname "$0")" && pwd) CFG=${XDG_CONFIG_HOME:-$HOME/.config} TS=$(date +%Y%m%d-%H%M%S) -DRY=0; ASSUME_YES=0; DO_PKG=1; DO_FLATPAK=1; DO_CONFIG=1 +DRY=0; ASSUME_YES=0; FULL=0; DO_PKG=1; DO_CONFIG=1 COPRS=(sachesi/hyprland avengemedia/dms) +# --- визуальная часть (по умолчанию) --- # Hyprland нет в репозиториях Fedora, он и его утилиты идут из COPR sachesi/hyprland -PKGS_HYPR=(hyprland hyprlock hypridle hyprpaper hyprpicker hyprland-guiutils hyprpolkitagent +PKGS_HYPR=(hyprland hypridle hyprpolkitagent hyprland-guiutils xdg-desktop-portal-hyprland xdg-desktop-portal-gtk) -# DMS (панель, лаунчер, уведомления, блокировка) из COPR avengemedia/dms вместе с quickshell, matugen, dgop +# DMS (панель, лаунчер, уведомления, блокировка, обои, тема) из COPR avengemedia/dms PKGS_SHELL=(dms) -# то, чем пользуются скрипты и бинды -PKGS_TOOLS=(kitty fzf tmux jq grim slurp wl-clipboard cliphist playerctl brightnessctl libnotify +# шрифт панели и терминал, wl-clipboard и brightnessctl нужны панели и затемнению экрана +PKGS_VISUAL=(jetbrains-mono-fonts kitty wl-clipboard brightnessctl) +# --- только с --full --- +PKGS_TOOLS=(hyprpicker hyprlock cliphist playerctl libnotify fzf tmux jq grim slurp nautilus keepassxc nm-connection-editor network-manager-applet pavucontrol fuzzel micro openssh-clients python3 flatpak tesseract tesseract-langpack-eng tesseract-langpack-rus - ImageMagick jetbrains-mono-fonts) + ImageMagick) FLATPAKS=(com.google.Chrome org.telegram.desktop org.remmina.Remmina com.nextcloud.desktopclient.nextcloud) c_hi=$'\e[1;38;2;233;30;99m'; c_dim=$'\e[2m'; c_err=$'\e[31m'; c_off=$'\e[0m' @@ -39,8 +43,8 @@ while [ $# -gt 0 ]; do case "$1" in --dry-run) DRY=1 ;; --yes|-y) ASSUME_YES=1 ;; + --full) FULL=1 ;; --no-packages) DO_PKG=0 ;; - --no-flatpak) DO_FLATPAK=0 ;; --no-config) DO_CONFIG=0 ;; -h|--help) sed -n '2,10p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; *) die "неизвестный параметр: $1 (см. --help)" ;; @@ -56,6 +60,7 @@ for d in hypr dms/plugins/networkEditor systemd/user kitty; do done . /etc/os-release 2>/dev/null || true info "система: ${PRETTY_NAME:-unknown}" +info "режим: $([ $FULL = 1 ] && echo 'полный (визуал + инструменты + приложения)' || echo 'только визуал')" if [ "${ID:-}" != fedora ]; then warn "это не Fedora: пакетный этап рассчитан на dnf и COPR" [ $DO_PKG = 1 ] && { ask "продолжить всё равно?" || exit 1; } @@ -70,24 +75,25 @@ fi if [ $DO_PKG = 1 ]; then step "Репозитории COPR: ${COPRS[*]}" info "COPR — сторонние репозитории, пакеты в них никем не проверяются." - ask "подключить?" || die "без них Hyprland и DMS не установить (можно пропустить этап: --no-packages)" + ask "подключить?" || die "без них Hyprland и DMS не установить (этап можно пропустить: --no-packages)" for c in "${COPRS[@]}"; do run sudo dnf copr enable -y "$c"; done - step "Hyprland и утилиты" + step "Hyprland" run sudo dnf -y install "${PKGS_HYPR[@]}" step "DankMaterialShell" run sudo dnf -y install "${PKGS_SHELL[@]}" - step "Инструменты для скриптов и биндов" - run sudo dnf -y install --skip-unavailable "${PKGS_TOOLS[@]}" -fi + step "Шрифт, терминал и базовые утилиты оформления" + run sudo dnf -y install "${PKGS_VISUAL[@]}" -# ---------- flatpak ---------- -if [ $DO_FLATPAK = 1 ]; then - step "Flatpak-приложения: ${FLATPAKS[*]}" - info "Chrome, Telegram, Remmina и клиент Nextcloud используются в бинах и автозапуске." - if ask "установить?"; then - run flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - run flatpak install --user -y flathub "${FLATPAKS[@]}" + if [ $FULL = 1 ]; then + step "Инструменты для скриптов и биндов" + run sudo dnf -y install --skip-unavailable "${PKGS_TOOLS[@]}" + step "Flatpak-приложения: ${FLATPAKS[*]}" + info "Chrome, Telegram, Remmina и клиент Nextcloud используются в бинах и автозапуске." + if ask "установить?"; then + run flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + run flatpak install --user -y flathub "${FLATPAKS[@]}" + fi fi fi @@ -103,25 +109,36 @@ if [ $DO_CONFIG = 1 ]; then run chmod +x "$CFG"/hypr/scripts/*.sh "$CFG"/hypr/scripts/*.py info "hypr/ (hyprland.lua, hypridle.conf, scripts, справка)" - backup "$CFG/dms/plugins/networkEditor" - run cp -a "$REPO/dms/plugins/networkEditor" "$CFG/dms/plugins/networkEditor" - info "плагин DMS networkEditor" - if [ -f "$REPO/dms/settings.json" ]; then backup "$CFG/dms/settings.json" run cp -a "$REPO/dms/settings.json" "$CFG/dms/settings.json" info "dms/settings.json (панель, тема)" fi - # включаем плагин, не трогая остальные записи + + if [ $FULL = 1 ]; then + backup "$CFG/dms/plugins/networkEditor" + run cp -a "$REPO/dms/plugins/networkEditor" "$CFG/dms/plugins/networkEditor" + info "плагин DMS networkEditor (кнопка nm-connection-editor)" + fi + # плагин: в полном режиме включаем, в визуальном убираем его кнопку из панели (редактора там нет) if [ $DRY = 1 ]; then - info "${c_dim}\$ включить networkEditor в $CFG/dms/plugin_settings.json${c_off}" + info "${c_dim}\$ networkEditor: $([ $FULL = 1 ] && echo включить || echo 'убрать кнопку из панели') (dms/settings.json, plugin_settings.json)${c_off}" else - python3 - "$CFG/dms/plugin_settings.json" <<'PY' + python3 - "$CFG/dms" "$FULL" <<'PY' import json, os, sys -p = sys.argv[1] -d = json.load(open(p)) if os.path.exists(p) else {} -d.setdefault("networkEditor", {})["enabled"] = True -json.dump(d, open(p, "w"), indent=2) +base, full = sys.argv[1], sys.argv[2] == "1" +sp, pp = os.path.join(base, "settings.json"), os.path.join(base, "plugin_settings.json") +if full: + d = json.load(open(pp)) if os.path.exists(pp) else {} + d.setdefault("networkEditor", {})["enabled"] = True + json.dump(d, open(pp, "w"), indent=2) +elif os.path.exists(sp): + s = json.load(open(sp)) + for bar in s.get("barConfigs", []): + for k in ("leftWidgets", "centerWidgets", "rightWidgets"): + if k in bar: + bar[k] = [w for w in bar[k] if not (isinstance(w, dict) and w.get("id") == "networkEditor")] + json.dump(s, open(sp, "w"), indent=2, ensure_ascii=False) PY fi @@ -134,7 +151,7 @@ PY info "systemd/user/hyprland-session.target (нужен порталам: выбор файлов, демонстрация экрана)" # каталог под ControlMaster, который использует ~/.ssh/config - run install -d -m 700 "$HOME/.ssh" "$HOME/.ssh/sockets" + [ $FULL = 1 ] && run install -d -m 700 "$HOME/.ssh" "$HOME/.ssh/sockets" fi # ---------- итог ---------- @@ -145,8 +162,13 @@ cat <