#!/bin/bash
set -e

# Конфигурация
KERNEL_URL="https://git.linuxtesting.ru/pub/scm/linux/kernel/git/lvc/linux-stable.git/snapshot/linux-stable-6.1.135.tar.gz"
KERNEL_DIR="linux-stable-6.1.135"
PACKAGE_SUFFIX="green"
BASE_VERSION="6.1.135"
KERNEL_DISPLAY_NAME="Green Linux Kernel"
OUTPUT_DIR="$HOME/kernel-builds"

configure_kernel() {
    make x86_64_defconfig

    # Основные параметры
    ./scripts/config --file .config \
        --set-str CONFIG_LOCALVERSION "-${PACKAGE_SUFFIX}" \
        --set-val CONFIG_HZ 1000 \
        --enable CONFIG_MODULES \
        --enable CONFIG_IKCONFIG \
        --enable CONFIG_IKCONFIG_PROC \
        --enable CONFIG_RD_ZSTD \
        --enable CONFIG_ZSTD_COMPRESS \
        --enable CONFIG_ZSTD_DECOMPRESS

    # Дополнительные параметры из вашего скрипта
    ./scripts/config --file .config \
        --enable CONFIG_PREEMPT_VOLUNTARY \
        --enable CONFIG_MQ_IOSCHED_KYBER \
        --enable CONFIG_X86_AMD_PSTATE \
        --enable CONFIG_PCI_LEGACY \
        --enable CONFIG_IDE \
        --module CONFIG_USB_MON \
        --enable CONFIG_USB_EHCI_HCD \
        --enable CONFIG_USB_XHCI_HCD \
        --enable CONFIG_USB_OHCI_HCD \
        --module CONFIG_DRM_I915 \
        --module CONFIG_DRM_AMDGPU \
        --module CONFIG_DRM_NOUVEAU \
        --module CONFIG_DRM_RADEON \
        --enable CONFIG_USB_PRINTER \
        --module CONFIG_HPLIP \
        --module CONFIG_CUPS \
        --module CONFIG_PARPORT \
        --enable CONFIG_PARPORT_PC \
        --module CONFIG_PPDEV \
        --enable CONFIG_USB_SUPPORT \
        --module CONFIG_USB_SERIAL \
        --module CONFIG_USB_SERIAL_GENERIC \
        --module CONFIG_USB_SERIAL_PL2303 \
        --enable CONFIG_BPF_JIT \
        --enable CONFIG_BFQ_GROUP_IOSCHED \
        --enable CONFIG_ZSWAP \
        --enable CONFIG_PM_AUTOSLEEP \
        --enable CONFIG_INTEL_POWERCLAMP \
        --enable CONFIG_USB_AUTOSUSPEND \
        --enable CONFIG_ISA \
        --enable CONFIG_ISAPNP \
        --enable CONFIG_SERIAL_8250 \
        --enable CONFIG_SERIAL_8250_CONSOLE

    make olddefconfig
}

# Установка зависимостей
sudo apt-get update && sudo apt-get install -y \
    build-essential fakeroot libncurses-dev \
    libssl-dev flex bison libelf-dev dwarves \
    debhelper dpkg-dev bc rsync zstd \
    cpio kmod lz4 pciutils usbutils \
    libc6-dev git

# Сборка
mkdir -p "$OUTPUT_DIR"
WORKDIR=$(mktemp -d)
cd "$WORKDIR"

wget --no-check-certificate -O kernel.tar.gz "$KERNEL_URL"
tar xzf kernel.tar.gz
cd "$KERNEL_DIR"

# Фикс версии
echo "${PACKAGE_SUFFIX}" > .scmversion
sed -i Makefile \
    -e "s/^EXTRAVERSION =.*/EXTRAVERSION = -${PACKAGE_SUFFIX}/" \
    -e "s/^NAME =.*/NAME = ${KERNEL_DISPLAY_NAME}/"

# Конфигурация ядра
configure_kernel

# Сборка всех компонентов
make -j$(nproc) clean
make -j$(nproc) all
make -j$(nproc) bindeb-pkg \
    KDEB_PKGVERSION="${BASE_VERSION}-${PACKAGE_SUFFIX}" \
    LOCALVERSION="-${PACKAGE_SUFFIX}" \
    KERNELRELEASE="${BASE_VERSION}-${PACKAGE_SUFFIX}" \
    DEB_BUILD_OPTIONS="parallel=$(nproc) nocheck"

# Правильное переименование пакетов
cd ..
for pkg in *.deb; do
    new_name=$(echo "$pkg" | \
        sed -E \
        -e "s/(${PACKAGE_SUFFIX}-)+/${PACKAGE_SUFFIX}-/g" \
        -e "s/_${BASE_VERSION}-${PACKAGE_SUFFIX}/_${PACKAGE_SUFFIX}/" \
        -e "s/linux-(headers|image)-[0-9.]+/linux-\1-${BASE_VERSION}-${PACKAGE_SUFFIX}/" \
        -e "s/linux-libc-dev_[0-9.-]+/linux-libc-dev-${BASE_VERSION}-${PACKAGE_SUFFIX}/")
    mv -vf "$pkg" "$new_name"
done

mv -v *.deb "$OUTPUT_DIR/"
rm -rf "$WORKDIR"

echo -e "\n\033[1;32mСборка успешно завершена!\033[0m"
echo "Полученные пакеты:"
ls -lh "$OUTPUT_DIR"/*.deb
echo -e "\nДля установки:"
echo "sudo dpkg -i ${OUTPUT_DIR}/linux-*${PACKAGE_SUFFIX}*.deb"
echo "sudo update-initramfs -u -k all"
echo "sudo update-grub"
