summaryrefslogtreecommitdiff
path: root/raveos-center/adat/actions/corectrl.sh
blob: 3d122ed4f9342366a6c465834736398c42d40bca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
# CoreCTRL (AMD GPU vezérlő) telepítő script
# Környezeti változók: INSTALL_USER, INSTALL_HOME, REPO_CONFIGS_URL

set -e

USER="$INSTALL_USER"
HOME="$INSTALL_HOME"
REPO_URL="${REPO_CONFIGS_URL:-https://git.rp1.hu/Nippy/Raveos-App-beta/raw/branch/main/raveos-app-installer-beta/configs/}"
ACTION="${1:-install}"
CONFIG_OVERRIDE_DIR="${RAVEOS_CONFIG_OVERRIDE_DIR:-/etc/raveos-beta/configs}"
CONFIG_PACKAGE_DIR="${RAVEOS_CONFIG_PACKAGE_DIR:-/usr/share/raveos-app-installer-beta/configs}"

run_as_user() {
    runuser -u "$USER" -- env HOME="$HOME" "$@"
}

resolve_local_config() {
    local name="$1"
    local candidate
    for candidate in \
        "$CONFIG_OVERRIDE_DIR/$name" \
        "$CONFIG_PACKAGE_DIR/$name"
    do
        if [[ -f "$candidate" ]]; then
            printf '%s\n' "$candidate"
            return 0
        fi
    done
    return 1
}

remove_installed_packages() {
    local installed=()
    local pkg
    for pkg in "$@"; do
        if pacman -Qq "$pkg" >/dev/null 2>&1; then
            installed+=("$pkg")
        fi
    done
    if ((${#installed[@]})); then
        pacman -Rnsu --noconfirm "${installed[@]}"
    fi
}

if [[ "$ACTION" == "remove" ]]; then
    echo "Removing CoreCTRL for $USER..."
    remove_installed_packages corectrl
    rm -f /etc/polkit-1/rules.d/90-corectrl.rules
    rm -f "$HOME/.config/autostart/org.corectrl.CoreCtrl.desktop"
    rm -rf "$HOME/.config/corectrl"
    if [[ -d /boot/loader/entries ]]; then
        sed -i 's/ amdgpu\.ppfeaturemask=0xffffffff//' /boot/loader/entries/*.conf 2>/dev/null || true
    fi
    if [[ -f /etc/default/grub ]] && grep -q "amdgpu.ppfeaturemask" /etc/default/grub; then
        sed -i 's/amdgpu\.ppfeaturemask=0xffffffff //' /etc/default/grub
        grub-mkconfig -o /boot/grub/grub.cfg 2>/dev/null || true
    fi
    echo "CoreCTRL removal complete!"
    exit 0
fi

echo "Installing CoreCTRL for $USER..."

# CoreCTRL telepítése
pacman -S --noconfirm --needed corectrl

# CoreCTRL config letöltése
echo "Downloading CoreCTRL config..."
run_as_user mkdir -p "$HOME/.config/corectrl"
if local_cfg="$(resolve_local_config corectrl.ini)"; then
    cp "$local_cfg" "$HOME/.config/corectrl/corectrl.ini"
else
    if wget -q -O "$HOME/.config/corectrl/corectrl.ini" "${REPO_URL}corectrl.ini"; then
        echo "e3884788efc7ebd5fc004c4158e79bd84e26575cb0146169774e8039ab29968d  $HOME/.config/corectrl/corectrl.ini" | sha256sum -c - >/dev/null || {
            echo "ERROR: corectrl.ini checksum mismatch"
            rm -f "$HOME/.config/corectrl/corectrl.ini"
            exit 1
        }
    fi
fi
chown "$USER:$USER" "$HOME/.config/corectrl/corectrl.ini" 2>/dev/null || true

# Autostart beállítása
run_as_user mkdir -p "$HOME/.config/autostart"
cp /usr/share/applications/org.corectrl.CoreCtrl.desktop "$HOME/.config/autostart/"
chown "$USER:$USER" "$HOME/.config/autostart/org.corectrl.CoreCtrl.desktop"

# Polkit szabály létrehozása (jelszó nélküli indítás)
cat > /etc/polkit-1/rules.d/90-corectrl.rules << EOF
polkit.addRule(function(action, subject) {
    if ((action.id == "org.corectrl.helper.init" ||
         action.id == "org.corectrl.helperkiller.init") &&
        subject.local == true &&
        subject.active == true &&
        subject.isInGroup("$USER")) {
        return polkit.Result.YES;
    }
});
EOF

AMD_GPU=0
if lspci -nn | grep -E "VGA|3D|Display" | grep -q "\[1002:"; then
    AMD_GPU=1
fi

# AMD GPU kernel paraméterek hozzáadása (ha systemd-boot)
if [[ $AMD_GPU -eq 1 && -d /boot/loader/entries ]]; then
    for conf in /boot/loader/entries/*.conf; do
        if [[ -f "$conf" ]]; then
            if ! grep -q "amdgpu.ppfeaturemask" "$conf"; then
                sed -i '/^options/s/$/ amdgpu.ppfeaturemask=0xffffffff/' "$conf"
            fi
        fi
    done
fi

# GRUB esetén
if [[ $AMD_GPU -eq 1 && -f /etc/default/grub ]]; then
    if ! grep -q "amdgpu.ppfeaturemask" /etc/default/grub; then
        sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.ppfeaturemask=0xffffffff \1"/' /etc/default/grub
        grub-mkconfig -o /boot/grub/grub.cfg 2>/dev/null || true
    fi
fi

echo "CoreCTRL installation complete!"
if [[ $AMD_GPU -eq 1 ]]; then
    echo "Please reboot for kernel parameters to take effect."
else
    echo "No AMD GPU found, kernel parameters were not changed."
fi