Загрузка данных


#!/usr/bin/env bash
set -Eeuo pipefail

BACKUP="$HOME/akai-cleanup-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP/config" "$BACKUP/share" "$BACKUP/local-bin"

echo "=== ARCH CLEANUP ==="
echo "Резервная копия: $BACKUP"

# Проверяем, что главные приложения установлены
for app in Hyprland firefox kitty; do
    case "$app" in
        Hyprland) pacman -Q hyprland >/dev/null || { echo "Hyprland не найден"; exit 1; } ;;
        firefox) command -v firefox >/dev/null || { echo "Firefox не найден"; exit 1; } ;;
        kitty) command -v kitty >/dev/null || { echo "Kitty не найден"; exit 1; } ;;
    esac
done

# Сохраняем старые настройки
for item in hypr waybar rofi swaync; do
    if [ -e "$HOME/.config/$item" ]; then
        mv "$HOME/.config/$item" "$BACKUP/config/$item"
        echo "Сохранено: .config/$item"
    fi
done

for item in waybar wallbash; do
    if [ -e "$HOME/.local/share/$item" ]; then
        mv "$HOME/.local/share/$item" "$BACKUP/share/$item"
        echo "Сохранено: .local/share/$item"
    fi
done

# Удаляем только необязательные приложения оболочки
REMOVE=()
for pkg in waybar rofi swaync hyprpaper; do
    if pacman -Q "$pkg" >/dev/null 2>&1; then
        REMOVE+=("$pkg")
    fi
done

if [ "${#REMOVE[@]}" -gt 0 ]; then
    echo
    echo "Будут удалены только эти пакеты:"
    printf '  %s\n' "${REMOVE[@]}"
    echo "Зависимости автоматически не удаляются."
    read -r -p "Продолжить? Напиши YES: " answer
    if [ "$answer" = "YES" ]; then
        sudo pacman -R -- "${REMOVE[@]}"
    else
        echo "Удаление пакетов отменено."
    fi
else
    echo "Необязательные пакеты оболочки не найдены."
fi

# Создаём чистую конфигурацию Hyprland
mkdir -p "$HOME/.config/hypr"

cat > "$HOME/.config/hypr/hyprland.lua" <<'LUA'
-- Minimal Hyprland configuration

local terminal = "kitty"
local browser = "firefox"
local menu = "rofi -show drun"

hl.monitor({
    output = "",
    mode = "preferred",
    position = "auto",
    scale = 1,
})

hl.env("XCURSOR_SIZE", "24")
hl.env("HYPRCURSOR_SIZE", "24")

hl.config({
    general = {
        gaps_in = 3,
        gaps_out = 5,
        border_size = 1,
        col = {
            active_border = { colors = {"rgba(ff2448ee)", "rgba(8b1023ee)"}, angle = 45 },
            inactive_border = "rgba(292929aa)",
        },
        layout = "dwindle",
        resize_on_border = true,
    },

    decoration = {
        rounding = 4,
        active_opacity = 1.0,
        inactive_opacity = 0.94,
        shadow = { enabled = false },
        blur = { enabled = false },
    },

    input = {
        kb_layout = "us,ru",
        kb_options = "grp:alt_shift_toggle",
        follow_mouse = 1,
        sensitivity = 0,
    },

    dwindle = {
        preserve_split = true,
    },
})

hl.curve("akai", {
    type = "bezier",
    points = {{0.16, 1}, {0.3, 1}},
})

hl.animation({leaf = "global", enabled = true, speed = 5, bezier = "akai"})
hl.animation({leaf = "windows", enabled = true, speed = 4, bezier = "akai"})
hl.animation({leaf = "windowsIn", enabled = true, speed = 4, bezier = "akai", style = "popin 85%"})
hl.animation({leaf = "windowsOut", enabled = true, speed = 3, bezier = "akai", style = "fade"})
hl.animation({leaf = "fade", enabled = true, speed = 3, bezier = "akai"})
hl.animation({leaf = "workspaces", enabled = true, speed = 4, bezier = "akai", style = "slide"})

local mod = "SUPER"

-- Applications
hl.bind(mod .. " + Q", hl.dsp.exec_cmd(terminal))
hl.bind(mod .. " + V", hl.dsp.exec_cmd(browser))
hl.bind(mod .. " + SPACE", hl.dsp.exec_cmd(menu))
hl.bind(mod .. " + C", hl.dsp.window.close())

-- Move active window
hl.bind(mod .. " + Z", hl.dsp.window.move({direction = "left"}))
hl.bind(mod .. " + X", hl.dsp.window.move({direction = "right"}))

-- Focus
hl.bind(mod .. " + LEFT", hl.dsp.focus({direction = "left"}))
hl.bind(mod .. " + RIGHT", hl.dsp.focus({direction = "right"}))
hl.bind(mod .. " + UP", hl.dsp.focus({direction = "up"}))
hl.bind(mod .. " + DOWN", hl.dsp.focus({direction = "down"}))

-- Workspaces 1-9
for i = 1, 9 do
    hl.bind(mod .. " + " .. i, hl.dsp.focus({workspace = i}))
    hl.bind(mod .. " + SHIFT + " .. i, hl.dsp.window.move({workspace = i}))
end

-- Mouse window movement
hl.bind(mod .. " + mouse:272", hl.dsp.window.drag(), {mouse = true})
hl.bind(mod .. " + mouse:273", hl.dsp.window.resize(), {mouse = true})
LUA

echo
echo "=== ГОТОВО ==="
echo "Старая конфигурация сохранена в:"
echo "$BACKUP"
echo
echo "Firefox, Kitty, Hyprland, SDDM и системные службы не удалялись."
echo "Новая конфигурация Hyprland создана."
echo "Перезагрузи компьютер, чтобы проверить чистую сессию."