Add install.sh for a clean Fedora machine
Enables the sachesi/hyprland and avengemedia/dms COPRs, installs Hyprland, DMS and the tools used by the scripts, optionally the Flatpak apps, then deploys the configs into ~/.config. Existing configs are moved to *.bak-<time>, so re-running is safe; --dry-run only prints the plan. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,7 @@ Hyprland 0.57 на Fedora 44: тёмный минималистичный рай
|
|||||||
| `dms/settings.json` | настройки DMS (панель, тема `pink`, лаунчер) |
|
| `dms/settings.json` | настройки DMS (панель, тема `pink`, лаунчер) |
|
||||||
| `systemd/user/hyprland-session.target` | нужен порталам (`xdg-desktop-portal`) вне uwsm |
|
| `systemd/user/hyprland-session.target` | нужен порталам (`xdg-desktop-portal`) вне uwsm |
|
||||||
| `kitty/kitty.conf` | терминал |
|
| `kitty/kitty.conf` | терминал |
|
||||||
|
| `install.sh` | установка на чистую Fedora: репозитории, пакеты, Flatpak, конфиги |
|
||||||
| `sync.sh` | копирует живой конфиг из `~/.config` в репозиторий |
|
| `sync.sh` | копирует живой конфиг из `~/.config` в репозиторий |
|
||||||
|
|
||||||
Панель, уведомления, лаунчер, блокировка, обои и буфер обмена — это
|
Панель, уведомления, лаунчер, блокировка, обои и буфер обмена — это
|
||||||
@@ -48,27 +49,37 @@ Host proxmox1
|
|||||||
бэкап в `~/.local/state/ssh-menu/backups`. Для хостов с `env: prod` перед broadcast
|
бэкап в `~/.local/state/ssh-menu/backups`. Для хостов с `env: prod` перед broadcast
|
||||||
и запуском команды спрашивается подтверждение.
|
и запуском команды спрашивается подтверждение.
|
||||||
|
|
||||||
## Установка
|
## Установка на чистую Fedora
|
||||||
|
|
||||||
Hyprland нет в репозиториях Fedora 44, он ставится из COPR:
|
Нужна обычная Fedora (в том числе без Hyprland), пользователь с `sudo` и сеть:
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo dnf copr enable sachesi/hyprland
|
|
||||||
sudo dnf install hyprland hyprlock hypridle hyprpaper hyprpicker \
|
|
||||||
xdg-desktop-portal-hyprland hyprland-guiutils hyprpolkitagent cliphist playerctl
|
|
||||||
# инструменты, которые используют скрипты
|
|
||||||
sudo dnf install fzf tmux kitty jq grim slurp wl-clipboard brightnessctl \
|
|
||||||
nautilus keepassxc nm-connection-editor tesseract tesseract-langpack-eng \
|
|
||||||
tesseract-langpack-rus ImageMagick jetbrains-mono-fonts
|
|
||||||
```
|
|
||||||
|
|
||||||
DMS ставится из COPR `avengemedia/dms` (см. документацию DMS). В автозапуске и на биндах
|
|
||||||
используются Flatpak-приложения: `com.google.Chrome`, `org.telegram.desktop`,
|
|
||||||
`org.remmina.Remmina`, `com.nextcloud.desktopclient.nextcloud`.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone git@git.ibrash.duckdns.org:aibrash/hyprland-rising.git
|
git clone git@git.ibrash.duckdns.org:aibrash/hyprland-rising.git
|
||||||
cd hyprland-rising
|
cd hyprland-rising
|
||||||
|
./install.sh --dry-run # посмотреть, что будет сделано, ничего не меняя
|
||||||
|
./install.sh # установить
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт по шагам:
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
Существующие конфиги не затираются: они переносятся в `*.bak-<время>`, повторный запуск безопасен.
|
||||||
|
Этапы можно пропустить: `--no-packages`, `--no-flatpak`, `--no-config`; `--yes` отключает вопросы.
|
||||||
|
После установки выйдите из сессии и выберите в GDM **Hyprland** (не `hyprland-uwsm`).
|
||||||
|
|
||||||
|
COPR — сторонние репозитории, пакеты в них никем не проверяются.
|
||||||
|
|
||||||
|
### Вручную (без скрипта)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dnf copr enable sachesi/hyprland avengemedia/dms
|
||||||
|
sudo dnf install hyprland hyprlock hypridle hyprpaper hyprpicker hyprland-guiutils hyprpolkitagent \
|
||||||
|
xdg-desktop-portal-hyprland xdg-desktop-portal-gtk dms
|
||||||
cp -r hypr ~/.config/
|
cp -r hypr ~/.config/
|
||||||
mkdir -p ~/.config/dms/plugins ~/.config/systemd/user
|
mkdir -p ~/.config/dms/plugins ~/.config/systemd/user
|
||||||
cp -r dms/plugins/networkEditor ~/.config/dms/plugins/
|
cp -r dms/plugins/networkEditor ~/.config/dms/plugins/
|
||||||
@@ -76,10 +87,9 @@ cp systemd/user/hyprland-session.target ~/.config/systemd/user/
|
|||||||
systemctl --user daemon-reload
|
systemctl --user daemon-reload
|
||||||
```
|
```
|
||||||
|
|
||||||
Чтобы плагин `networkEditor` заработал, включите его в настройках DMS (Plugins) и добавьте виджет
|
Полный список пакетов-инструментов см. в начале `install.sh`. Плагин `networkEditor` включите в настройках
|
||||||
в панель. Либо скопируйте `dms/settings.json` в `~/.config/dms/` и создайте
|
DMS (Plugins) или создайте `~/.config/dms/plugin_settings.json` с `{"networkEditor": {"enabled": true}}`
|
||||||
`~/.config/dms/plugin_settings.json` с содержимым `{"networkEditor": {"enabled": true}}`, затем `dms restart`.
|
и выполните `dms restart`.
|
||||||
После этого выберите в GDM сессию **Hyprland** (не `hyprland-uwsm`).
|
|
||||||
|
|
||||||
## Под себя
|
## Под себя
|
||||||
|
|
||||||
|
|||||||
Executable
+152
@@ -0,0 +1,152 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Установка райса на чистую Fedora (проверено на структуре Fedora 44), в том числе без Hyprland.
|
||||||
|
#
|
||||||
|
# ./install.sh всё: репозитории, пакеты, Flatpak-приложения, конфиги
|
||||||
|
# ./install.sh --dry-run только показать, что будет сделано (ничего не меняет)
|
||||||
|
# ./install.sh --yes не задавать вопросов
|
||||||
|
# ./install.sh --no-packages / --no-flatpak / --no-config пропустить этап
|
||||||
|
#
|
||||||
|
# Скрипт можно запускать повторно: существующие конфиги не затираются, а переносятся в *.bak-<время>.
|
||||||
|
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
|
||||||
|
|
||||||
|
COPRS=(sachesi/hyprland avengemedia/dms)
|
||||||
|
# Hyprland нет в репозиториях Fedora, он и его утилиты идут из COPR sachesi/hyprland
|
||||||
|
PKGS_HYPR=(hyprland hyprlock hypridle hyprpaper hyprpicker hyprland-guiutils hyprpolkitagent
|
||||||
|
xdg-desktop-portal-hyprland xdg-desktop-portal-gtk)
|
||||||
|
# DMS (панель, лаунчер, уведомления, блокировка) из COPR avengemedia/dms вместе с quickshell, matugen, dgop
|
||||||
|
PKGS_SHELL=(dms)
|
||||||
|
# то, чем пользуются скрипты и бинды
|
||||||
|
PKGS_TOOLS=(kitty fzf tmux jq grim slurp wl-clipboard cliphist playerctl brightnessctl libnotify
|
||||||
|
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)
|
||||||
|
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'
|
||||||
|
step() { printf '\n%s==> %s%s\n' "$c_hi" "$*" "$c_off"; }
|
||||||
|
info() { printf ' %s\n' "$*"; }
|
||||||
|
warn() { printf '%s!! %s%s\n' "$c_err" "$*" "$c_off" >&2; }
|
||||||
|
die() { warn "$*"; exit 1; }
|
||||||
|
run() { if [ $DRY = 1 ]; then printf ' %s$ %s%s\n' "$c_dim" "$*" "$c_off"; else "$@"; fi; }
|
||||||
|
ask() { [ $ASSUME_YES = 1 ] && return 0; local v; read -r -p " $1 [Y/n] " v; [[ ! $v =~ ^[nNнН] ]]; }
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--dry-run) DRY=1 ;;
|
||||||
|
--yes|-y) ASSUME_YES=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)" ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# ---------- проверки ----------
|
||||||
|
step "Проверки"
|
||||||
|
[ "$(id -u)" -ne 0 ] || die "запускайте от обычного пользователя, sudo скрипт вызовет сам"
|
||||||
|
for d in hypr dms/plugins/networkEditor systemd/user kitty; do
|
||||||
|
[ -e "$REPO/$d" ] || die "в репозитории нет $d (запускайте install.sh из корня hyprland-rising)"
|
||||||
|
done
|
||||||
|
. /etc/os-release 2>/dev/null || true
|
||||||
|
info "система: ${PRETTY_NAME:-unknown}"
|
||||||
|
if [ "${ID:-}" != fedora ]; then
|
||||||
|
warn "это не Fedora: пакетный этап рассчитан на dnf и COPR"
|
||||||
|
[ $DO_PKG = 1 ] && { ask "продолжить всё равно?" || exit 1; }
|
||||||
|
elif [ "${VERSION_ID:-}" != 44 ]; then
|
||||||
|
warn "райс собирался на Fedora 44, у вас ${VERSION_ID:-?}: COPR может не иметь сборок под эту версию"
|
||||||
|
[ $DO_PKG = 1 ] && { ask "продолжить?" || exit 1; }
|
||||||
|
fi
|
||||||
|
[ $DO_PKG = 1 ] && ! command -v sudo >/dev/null && die "нужен sudo"
|
||||||
|
[ $DRY = 1 ] && info "режим --dry-run: ничего не будет изменено"
|
||||||
|
|
||||||
|
# ---------- пакеты ----------
|
||||||
|
if [ $DO_PKG = 1 ]; then
|
||||||
|
step "Репозитории COPR: ${COPRS[*]}"
|
||||||
|
info "COPR — сторонние репозитории, пакеты в них никем не проверяются."
|
||||||
|
ask "подключить?" || die "без них Hyprland и DMS не установить (можно пропустить этап: --no-packages)"
|
||||||
|
for c in "${COPRS[@]}"; do run sudo dnf copr enable -y "$c"; done
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# ---------- 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[@]}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------- конфиги ----------
|
||||||
|
backup() { [ -e "$1" ] || [ -L "$1" ] && run mv "$1" "$1.bak-$TS" && info "старое сохранено: $1.bak-$TS" || true; }
|
||||||
|
|
||||||
|
if [ $DO_CONFIG = 1 ]; then
|
||||||
|
step "Конфиги → $CFG"
|
||||||
|
run mkdir -p "$CFG/dms/plugins" "$CFG/systemd/user" "$CFG/kitty"
|
||||||
|
|
||||||
|
backup "$CFG/hypr"
|
||||||
|
run cp -a "$REPO/hypr" "$CFG/hypr"
|
||||||
|
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 [ $DRY = 1 ]; then
|
||||||
|
info "${c_dim}\$ включить networkEditor в $CFG/dms/plugin_settings.json${c_off}"
|
||||||
|
else
|
||||||
|
python3 - "$CFG/dms/plugin_settings.json" <<'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)
|
||||||
|
PY
|
||||||
|
fi
|
||||||
|
|
||||||
|
backup "$CFG/kitty/kitty.conf"
|
||||||
|
run cp -a "$REPO/kitty/kitty.conf" "$CFG/kitty/kitty.conf"
|
||||||
|
info "kitty/kitty.conf"
|
||||||
|
|
||||||
|
run cp -a "$REPO/systemd/user/hyprland-session.target" "$CFG/systemd/user/"
|
||||||
|
run systemctl --user daemon-reload || warn "systemctl --user недоступен (нет пользовательской сессии systemd): выполните daemon-reload после входа"
|
||||||
|
info "systemd/user/hyprland-session.target (нужен порталам: выбор файлов, демонстрация экрана)"
|
||||||
|
|
||||||
|
# каталог под ControlMaster, который использует ~/.ssh/config
|
||||||
|
run install -d -m 700 "$HOME/.ssh" "$HOME/.ssh/sockets"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------- итог ----------
|
||||||
|
step "Готово"
|
||||||
|
cat <<EOF
|
||||||
|
Дальше:
|
||||||
|
1. Выйдите из сессии. На экране входа GDM нажмите на шестерёнку и выберите «Hyprland»
|
||||||
|
(именно 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.
|
||||||
|
EOF
|
||||||
|
[ $DRY = 1 ] && info "это был --dry-run, запустите без него, чтобы применить."
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user