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 <noreply@anthropic.com>
This commit is contained in:
2026-10-30 13:56:03 +05:00
co-authored by Claude Sonnet 5.5
parent e47f54d394
commit 04e868102d
2 changed files with 70 additions and 46 deletions
+12 -10
View File
@@ -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 — сторонние репозитории, пакеты в них никем не проверяются.
### Вручную (без скрипта)
+51 -29
View File
@@ -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,19 +75,19 @@ 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 "${PKGS_VISUAL[@]}"
if [ $FULL = 1 ]; then
step "Инструменты для скриптов и биндов"
run sudo dnf -y install --skip-unavailable "${PKGS_TOOLS[@]}"
fi
# ---------- flatpak ----------
if [ $DO_FLATPAK = 1 ]; then
step "Flatpak-приложения: ${FLATPAKS[*]}"
info "Chrome, Telegram, Remmina и клиент Nextcloud используются в бинах и автозапуске."
if ask "установить?"; then
@@ -90,6 +95,7 @@ if [ $DO_FLATPAK = 1 ]; then
run flatpak install --user -y flathub "${FLATPAKS[@]}"
fi
fi
fi
# ---------- конфиги ----------
backup() { [ -e "$1" ] || [ -L "$1" ] && run mv "$1" "$1.bak-$TS" && info "старое сохранено: $1.bak-$TS" || true; }
@@ -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 {}
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(p, "w"), indent=2)
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 <<EOF
(именно Hyprland, не Hyprland (uwsm)).
2. Мониторы: в $CFG/hypr/hyprland.lua имена и масштаб заданы под ноутбук автора
(eDP-1, масштаб 1.25, HDMI-A-1). Свои смотрите командой: hyprctl monitors
3. SSH-меню (Mod+S) читает ваш ~/.ssh/config; ключи и сам конфиг скрипт не создаёт.
4. Справка по клавишам: Mod+F1.
3. Справка по клавишам: Mod+F1.
EOF
if [ $FULL = 0 ]; then
cat <<EOF
Это визуальная установка: бинды на приложения (Chrome, Telegram, SSH-меню, OCR и т. д.) не будут
работать, пока вы не поставите эти программы. Всё сразу: ./install.sh --full
EOF
fi
[ $DRY = 1 ] && info "это был --dry-run, запустите без него, чтобы применить."
exit 0