summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNippy <nippy@Nippy-Mac-mini.local>2026-10-09 10:49:26 +0200
committerNippy <nippy@Nippy-Mac-mini.local>2026-10-09 10:49:26 +0200
commit91978706279a19a3ac96393630876f3e50cbc518 (patch)
tree1355da60486a305aefeea4e55543bbf1008715b3
parent17a23f8a0cec5439d674d90c593497e4ceed2c68 (diff)
downloadRaveOS-PKGBUILD-91978706279a19a3ac96393630876f3e50cbc518.tar.gz
RaveOS-PKGBUILD-91978706279a19a3ac96393630876f3e50cbc518.zip
fix
-rw-r--r--.forgejo/workflows/build-gnome.yml28
-rw-r--r--.forgejo/workflows/build-hyprland.yml37
-rw-r--r--.forgejo/workflows/build-kernel.yml51
-rw-r--r--.forgejo/workflows/build-theme-send-core-repo.yml35
-rw-r--r--.forgejo/workflows/hyprland-update-check.yml24
-rw-r--r--.forgejo/workflows/kernel-update-check.yml49
-rw-r--r--hyprland-raveos/dms-shell/PKGBUILD8
-rw-r--r--linux-raveos/PKGBUILD2
-rw-r--r--raveos-app-installer/PKGBUILD21
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT1
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG3
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old2
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001bin41 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.logbin1175 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldbbin14577 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT1
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG6
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old2
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001bin147 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116bin4132 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167bin33793 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548bin6096 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.logbin99 -> 0 bytes
-rwxr-xr-xraveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT1
-rwxr-xr-xraveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK0
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG3
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old1
-rwxr-xr-xraveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001bin41 -> 0 bytes
-rw-r--r--raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State1
-rw-r--r--raveos-app-installer/raveos-app-installer.py295
-rw-r--r--raveos-app-installer/raveos-secureboot-setup313
-rw-r--r--raveos-app-installer/secureboot/KEK.pem20
-rw-r--r--raveos-app-installer/secureboot/PK.authbin0 -> 2201 bytes
-rw-r--r--raveos-app-installer/secureboot/PK.pem20
-rw-r--r--raveos-app-installer/secureboot/db.pem21
-rw-r--r--raveos-app-installer/secureboot/installed/raveos-sb-resume.service7
-rwxr-xr-xraveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh50
-rw-r--r--raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook17
-rw-r--r--raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem34
-rw-r--r--raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem35
-rw-r--r--raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem34
-rw-r--r--raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem33
-rw-r--r--raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem33
-rw-r--r--raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem33
-rw-r--r--raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem33
-rw-r--r--raveos-calamares-module/PKGBUILD4
-rw-r--r--raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp1
-rw-r--r--raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp20
-rw-r--r--raveos-calamares-module/wifi/NetworkManager.cpp54
-rw-r--r--raveos-calamares-module/wifi/NetworkManager.h2
-rw-r--r--raveos-calamares-module/wifi/WifiViewStep.cpp20
-rw-r--r--raveos-calamares-theme/PKGBUILD8
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/CURRENT1
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/LOCK0
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/MANIFEST-000001bin41 -> 0 bytes
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/000005.ldbbin14577 -> 0 bytes
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/CURRENT1
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/LOCK0
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/MANIFEST-000001bin147 -> 0 bytes
-rwxr-xr-xraveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/CURRENT1
-rwxr-xr-xraveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/LOCK0
-rwxr-xr-xraveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/MANIFEST-000001bin41 -> 0 bytes
-rw-r--r--raveos-calamares-theme/etc/calamares/brave-profile/Local State1
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/calamares-create-snapshots-subvol.sh6
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/calamares-gpu-drivers.sh1
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/calamares-normalize-subvolumes.sh11
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/netinstall-drivers.yaml2
-rwxr-xr-xraveos-calamares-theme/etc/calamares/modules/raveos-chown-homes.sh2
-rwxr-xr-xraveos-calamares-theme/etc/calamares/modules/raveos-copy-brave-profile.sh3
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/shellprocess-before.conf1
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/shellprocess-dkms.conf1
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/shellprocess-loader.conf12
-rw-r--r--raveos-calamares-theme/etc/calamares/modules/shellprocess-supporters.conf3
-rw-r--r--raveos-cosmic-theme/PKGBUILD2
-rwxr-xr-xraveos-cosmic-theme/raveos-cosmic-apply.sh3
-rwxr-xr-xraveos-cosmic-theme/raveos-cosmic-first-login.sh4
-rw-r--r--raveos-hyprland-theme/PKGBUILD9
-rw-r--r--raveos-hyprland-theme/raveos-hyprland-apply.sh16
-rw-r--r--raveos-hyprland-theme/raveos-session-init.sh2
-rw-r--r--raveos-mirrorlist/PKGBUILD7
-rw-r--r--raveos-mirrorlist/raveos-mirrorlist.install6
-rw-r--r--raveos-plasma-theme/PKGBUILD2
-rwxr-xr-xraveos-plasma-theme/raveos-plasma-apply.sh2
-rw-r--r--raveos-plymouth-theme/PKGBUILD2
-rw-r--r--raveos-plymouth-theme/theme-data/raveos.script3
-rw-r--r--raveos-sddm-theme/PKGBUILD18
-rw-r--r--raveos-sddm-theme/raveos-sddm-theme.install4
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/BatteryIndicator.qml18
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/Input.qml28
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/KeyboardLayoutIndicator.qml15
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/LoginForm.qml2
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/NetworkIndicator.qml19
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/ParticleOverlay.qml3
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/SessionButton.qml3
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/ToastNotification.qml1
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Components/UserSwitcher.qml17
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Main.qml1
-rw-r--r--raveos-sddm-theme/sddm-rave-theme/Themes/rave.conf62
-rw-r--r--raveos-support/PKGBUILD2
-rwxr-xr-xraveos-support/raveos-support1
-rw-r--r--raveos-tools/PKGBUILD3
-rw-r--r--raveos-updater/PKGBUILD2
-rw-r--r--raveos-updater/raveos-updater2
-rw-r--r--raveos-welcome/PKGBUILD3
-rwxr-xr-xraveos-welcome/gaming-optimize.sh8
-rw-r--r--raveos-welcome/raveos-gpu-optimizer.sh9
-rw-r--r--raveos-welcome/raveos_welcome.py57
-rw-r--r--raveswitch/PKGBUILD6
111 files changed, 1065 insertions, 686 deletions
diff --git a/.forgejo/workflows/build-gnome.yml b/.forgejo/workflows/build-gnome.yml
index 4f1ac23..33c9989 100644
--- a/.forgejo/workflows/build-gnome.yml
+++ b/.forgejo/workflows/build-gnome.yml
@@ -9,8 +9,8 @@ on:
workflow_dispatch:
concurrency:
- group: raveos-gnome50-build
- cancel-in-progress: true
+ group: raveos-repo-publish
+ cancel-in-progress: false
jobs:
build:
@@ -30,11 +30,12 @@ jobs:
- name: Fetch core repo via rsync
run: |
set -euo pipefail
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rm -rf /tmp/raveos-core-repo
mkdir -p /tmp/raveos-core-repo/x86_64
rsync -az -e "$RSYNC_SSH" \
- root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/ || true
+ root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/
+ test -f /tmp/raveos-core-repo/x86_64/raveos-core-repo.db.tar.xz
mkdir -p /tmp/builtpkgs
- name: Import GPG signing key
@@ -105,13 +106,17 @@ jobs:
run: |
set -euo pipefail
export GNUPGHOME=/tmp/raveos-gnupg
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for pkg in /tmp/builtpkgs/*.pkg.tar.zst; do
[ -f "$pkg" ] || continue
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor "$pkg"
done
+ rm -f "$PASSFILE"
- name: Update repo database and sync to VPS
run: |
@@ -124,9 +129,8 @@ jobs:
CORE="/tmp/raveos-core-repo/x86_64"
for pkg in $BUILT; do
- PKGFILE=$(basename "$pkg")
- PKGNAME=$(echo "$PKGFILE" | sed 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//')
- rm -f "$CORE/${PKGNAME}-"*.pkg.tar.zst* 2>/dev/null || true
+ PKGNAME=$(bsdtar -xOf "$pkg" .PKGINFO | awk -F' = ' '/^pkgname =/{print $2; exit}')
+ rm -f "$CORE/${PKGNAME}-"[0-9]*.pkg.tar.zst* 2>/dev/null || true
rm -f "$CORE/${PKGNAME}.pkg.tar.zst"* 2>/dev/null || true
cp -v "$pkg" "$CORE/"
[ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/"
@@ -137,16 +141,20 @@ jobs:
ALLPKGS=$(ls *.pkg.tar.zst)
repo-add raveos-core-repo.db.tar.xz $ALLPKGS
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor -o "$f.sig" "$f"
done
+ rm -f "$PASSFILE"
ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig
ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rsync -az --delete -e "$RSYNC_SSH" \
"$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/
diff --git a/.forgejo/workflows/build-hyprland.yml b/.forgejo/workflows/build-hyprland.yml
index 625be43..f3dbf39 100644
--- a/.forgejo/workflows/build-hyprland.yml
+++ b/.forgejo/workflows/build-hyprland.yml
@@ -9,8 +9,8 @@ on:
workflow_dispatch:
concurrency:
- group: raveos-hyprland-build
- cancel-in-progress: true
+ group: raveos-repo-publish
+ cancel-in-progress: false
jobs:
build:
@@ -33,11 +33,12 @@ jobs:
- name: Fetch core repo via rsync
run: |
set -euo pipefail
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rm -rf /tmp/raveos-core-repo
mkdir -p /tmp/raveos-core-repo/x86_64
rsync -az -e "$RSYNC_SSH" \
- root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/ || true
+ root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/
+ test -f /tmp/raveos-core-repo/x86_64/raveos-core-repo.db.tar.xz
mkdir -p /tmp/builtpkgs
- name: Import GPG signing key
@@ -74,15 +75,6 @@ jobs:
dir="hyprland-raveos/$pkg"
[ -d "$dir" ] || continue
- PKGVER=$(grep '^pkgver=' "$dir/PKGBUILD" | head -1 | cut -d= -f2 | tr -d "'\"")
- PKGREL=$(grep '^pkgrel=' "$dir/PKGBUILD" | head -1 | cut -d= -f2 | tr -d "'\"")
-
- echo "=== Checking $pkg (${PKGVER}-${PKGREL}) ==="
- if ls "$CORE"/${pkg}-${PKGVER}-${PKGREL}-*.pkg.tar.zst 2>/dev/null | grep -q .; then
- echo "$pkg already built -> skipping"
- continue
- fi
-
echo "=== Building $pkg ==="
cd "$dir"
rm -f *.pkg.tar.zst || true
@@ -100,13 +92,17 @@ jobs:
run: |
set -euo pipefail
export GNUPGHOME=/tmp/raveos-gnupg
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for pkg in /tmp/builtpkgs/*.pkg.tar.zst; do
[ -f "$pkg" ] || continue
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor "$pkg"
done
+ rm -f "$PASSFILE"
- name: Update repo database and sync to VPS
run: |
@@ -119,9 +115,8 @@ jobs:
CORE="/tmp/raveos-core-repo/x86_64"
for pkg in $BUILT; do
- PKGFILE=$(basename "$pkg")
- PKGNAME=$(echo "$PKGFILE" | sed 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//')
- rm -f "$CORE/${PKGNAME}-"*.pkg.tar.zst* 2>/dev/null || true
+ PKGNAME=$(bsdtar -xOf "$pkg" .PKGINFO | awk -F' = ' '/^pkgname =/{print $2; exit}')
+ rm -f "$CORE/${PKGNAME}-"[0-9]*.pkg.tar.zst* 2>/dev/null || true
cp -v "$pkg" "$CORE/"
[ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/"
done
@@ -131,16 +126,20 @@ jobs:
ALLPKGS=$(ls *.pkg.tar.zst)
repo-add raveos-core-repo.db.tar.xz $ALLPKGS
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor -o "$f.sig" "$f"
done
+ rm -f "$PASSFILE"
ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig
ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rsync -az --delete -e "$RSYNC_SSH" \
"$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/
diff --git a/.forgejo/workflows/build-kernel.yml b/.forgejo/workflows/build-kernel.yml
index cac3432..bfcc8a0 100644
--- a/.forgejo/workflows/build-kernel.yml
+++ b/.forgejo/workflows/build-kernel.yml
@@ -9,8 +9,8 @@ on:
workflow_dispatch:
concurrency:
- group: raveos-kernel-build
- cancel-in-progress: true
+ group: raveos-repo-publish
+ cancel-in-progress: false
jobs:
build:
@@ -33,11 +33,12 @@ jobs:
- name: Fetch core repo via rsync
run: |
set -euo pipefail
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rm -rf /tmp/raveos-core-repo
mkdir -p /tmp/raveos-core-repo/x86_64
rsync -az -e "$RSYNC_SSH" \
- root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/ || true
+ root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/
+ test -f /tmp/raveos-core-repo/x86_64/raveos-core-repo.db.tar.xz
mkdir -p /tmp/builtpkgs
- name: Import GPG signing key
@@ -48,26 +49,7 @@ jobs:
mkdir -m 700 "$GNUPGHOME"
echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d | gpg --batch --import
- - name: Check if already built
- id: check
- run: |
- set -euo pipefail
- CORE="/tmp/raveos-core-repo/x86_64"
- PKGVER=$(grep '^pkgver=' linux-raveos/PKGBUILD | cut -d= -f2)
- PKGREL=$(grep '^pkgrel=' linux-raveos/PKGBUILD | cut -d= -f2)
- FULLVER="${PKGVER}-${PKGREL}"
- echo "PKGVER=$PKGVER" >> $GITHUB_OUTPUT
- echo "PKGREL=$PKGREL" >> $GITHUB_OUTPUT
- if ls "$CORE"/linux-cachyos-${PKGVER}-${PKGREL}-*.pkg.tar.zst 2>/dev/null | grep -q .; then
- echo "SKIP=yes" >> $GITHUB_OUTPUT
- echo "linux-cachyos ${FULLVER} mar bent van -> skip"
- else
- echo "SKIP=no" >> $GITHUB_OUTPUT
- echo "linux-cachyos ${FULLVER} build indul..."
- fi
-
- name: Build linux-raveos
- if: steps.check.outputs.SKIP != 'yes'
run: |
set -euo pipefail
cd linux-raveos
@@ -77,20 +59,22 @@ jobs:
cp -v *.pkg.tar.zst /tmp/builtpkgs/
- name: Sign built packages
- if: steps.check.outputs.SKIP != 'yes'
run: |
set -euo pipefail
export GNUPGHOME=/tmp/raveos-gnupg
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for pkg in /tmp/builtpkgs/*.pkg.tar.zst; do
[ -f "$pkg" ] || continue
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor "$pkg"
done
+ rm -f "$PASSFILE"
- name: Update repo database and sync to VPS
- if: steps.check.outputs.SKIP != 'yes'
run: |
set -euo pipefail
BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true)
@@ -101,9 +85,8 @@ jobs:
CORE="/tmp/raveos-core-repo/x86_64"
for pkg in $BUILT; do
- PKGFILE=$(basename "$pkg")
- PKGNAME=$(echo "$PKGFILE" | sed 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//')
- rm -f "$CORE/${PKGNAME}-"*.pkg.tar.zst* 2>/dev/null || true
+ PKGNAME=$(bsdtar -xOf "$pkg" .PKGINFO | awk -F' = ' '/^pkgname =/{print $2; exit}')
+ rm -f "$CORE/${PKGNAME}-"[0-9]*.pkg.tar.zst* 2>/dev/null || true
cp -v "$pkg" "$CORE/"
[ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/"
done
@@ -113,20 +96,24 @@ jobs:
ALLPKGS=$(ls *.pkg.tar.zst)
repo-add raveos-core-repo.db.tar.xz $ALLPKGS
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor -o "$f.sig" "$f"
done
+ rm -f "$PASSFILE"
ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig
ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rsync -az --delete -e "$RSYNC_SSH" \
"$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/
- echo "::notice title=Kernel published::linux-raveos ${{ steps.check.outputs.PKGVER }}-${{ steps.check.outputs.PKGREL }}"
+ echo "::notice title=Kernel published::linux-raveos published"
- name: Cleanup
if: always()
diff --git a/.forgejo/workflows/build-theme-send-core-repo.yml b/.forgejo/workflows/build-theme-send-core-repo.yml
index 8fa3d5b..928e071 100644
--- a/.forgejo/workflows/build-theme-send-core-repo.yml
+++ b/.forgejo/workflows/build-theme-send-core-repo.yml
@@ -6,8 +6,8 @@ on:
workflow_dispatch:
concurrency:
- group: raveos-theme-module-build-publish
- cancel-in-progress: true
+ group: raveos-repo-publish
+ cancel-in-progress: false
jobs:
build:
@@ -28,7 +28,7 @@ jobs:
- name: Sync core repo from VPS (rsync pull)
run: |
set -euo pipefail
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rm -rf /tmp/raveos-core-repo
mkdir -p /tmp/raveos-core-repo/x86_64
rsync -az -e "$RSYNC_SSH" \
@@ -141,9 +141,6 @@ jobs:
rm -rf build || true
makepkg -s --noconfirm -f
cp -v build/raveos-sddm-theme-*.pkg.tar.zst /tmp/builtpkgs/
- # Azonnal telepitjuk is, mert meg nincs publikalva egy repoban sem
- # (a "Publish" lepes csak a legvegen fut) - a tobbi DE-tema csomag
- # makepkg -s hivasa igy fogja tudni feloldani a fuggoseget.
sudo pacman -U --noconfirm build/raveos-sddm-theme-*.pkg.tar.zst
- name: Build raveos-plasma-theme
@@ -356,43 +353,38 @@ jobs:
echo "No packages built -> nem masolunk uj fajlt, de a db-t mindig ujraepitjuk (onjavito)"
else
for pkg in $BUILT; do
- PKGFILE=$(basename "$pkg")
- PKGNAME=$(echo "$PKGFILE" | sed 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//')
+ PKGNAME=$(bsdtar -xOf "$pkg" .PKGINFO | awk -F' = ' '/^pkgname =/{print $2; exit}')
if [[ ! "$PKGNAME" =~ ^[a-zA-Z0-9_+-]+$ ]]; then
echo "HIBA: Ervenytelen csomagnev: $PKGNAME -> skip"
continue
fi
- rm -f "$CORE/${PKGNAME}-"*.pkg.tar.zst* 2>/dev/null || true
+ rm -f "$CORE/${PKGNAME}-"[0-9]*.pkg.tar.zst* 2>/dev/null || true
cp -v "$pkg" "$CORE/"
[ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/"
done
fi
- # Adatbazis ujraepitese HELYBEN (nincs tobbe kulon repo-add job/repo)
- # .xz celzunk (nem .gz), es minden CORE-beli csomagot atadunk a repo-add-nak.
- # A repo-add sajat "--sign"-ja gpg-agentre tamaszkodik jelszo nelkul -- ha
- # az agent cache hideg (pl. amikor nem epult uj csomag, igy a "Sign built
- # packages" lepes se futott le), a signeles nesztelenul elhasal (repo-add
- # csak warningot ir, a regi .sig marad, ami mar nem illik az uj tartalomhoz).
- # Ezert kulon, expliciten alairjuk a db/files fajlokat a jelszo megadasaval.
export GNUPGHOME=/tmp/raveos-gnupg
cd "$CORE"
ALLPKGS=$(ls *.pkg.tar.zst)
repo-add raveos-core-repo.db.tar.xz $ALLPKGS
+ PASSFILE=$(mktemp)
+ chmod 600 "$PASSFILE"
+ printf '%s' "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" > "$PASSFILE"
for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do
gpg --batch --yes --pinentry-mode loopback \
- --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --passphrase-file "$PASSFILE" \
--local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
--detach-sign --no-armor -o "$f.sig" "$f"
done
+ rm -f "$PASSFILE"
ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig
ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig
rm -f raveos-core-repo.db.tar.gz* raveos-core-repo.files.tar.gz* 2>/dev/null || true
- # Vissza-szinkron a VPS-re (torli, ami helyben mar nincs, pl. regi verziok)
- RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes"
rsync -az --delete -e "$RSYNC_SSH" \
"$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/
@@ -427,9 +419,6 @@ jobs:
cd "$REPO/x86_64"
- # 1) regi verziojú csomag-assetek torlese verzio-prefix alapjan
- # (a fajlnevek tartalmazzak a pkgver-pkgrel-t, ezert egy verziofrissites
- # uj fajlnevet ad - enelkul a regi verziok orokre felhalmozodnanak)
for f in *.pkg.tar.zst; do
[ -f "$f" ] || continue
pkgname=$(echo "$f" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//')
@@ -448,11 +437,9 @@ jobs:
done <<< "$existing_assets"
done
- # friss asset-lista a torlesek utan
existing_assets=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \
"${API}/releases/${release_id}" | jq -r '.assets[] | "\(.id)\t\(.name)"')
- # 2) minden aktualis fajl feltoltese (azonos nevu regi peldany cserevel)
for f in *; do
[ -f "$f" ] || continue
asset_id=$(echo "$existing_assets" | awk -F'\t' -v n="$f" '$2==n {print $1}')
diff --git a/.forgejo/workflows/hyprland-update-check.yml b/.forgejo/workflows/hyprland-update-check.yml
index f6afab7..deaa003 100644
--- a/.forgejo/workflows/hyprland-update-check.yml
+++ b/.forgejo/workflows/hyprland-update-check.yml
@@ -5,6 +5,10 @@ on:
- cron: '0 6 * * 1,4'
workflow_dispatch:
+concurrency:
+ group: hyprland-update-check
+ cancel-in-progress: false
+
jobs:
check-update:
runs-on: iso-builder
@@ -72,13 +76,9 @@ jobs:
if [ "$LOCAL_VER" != "$UPSTREAM_VER" ]; then
echo "Update available for $pkg: $LOCAL_VER -> $UPSTREAM_VER"
-
- # Frissites letoltese es pkgrel beallitasa
- echo "$UPSTREAM_PKGBUILD" > "$dir/PKGBUILD"
- sed -i 's/^pkgrel=[0-9]*/pkgrel=10/' "$dir/PKGBUILD"
- if [ "$pkg" = "hyprpolkitagent" ] || [ "$pkg" = "hyprland-qt-support" ]; then
- sed -i 's/^pkgrel=10/pkgrel=20/' "$dir/PKGBUILD"
- fi
+
+ sed -i "s/^pkgver=.*/pkgver=${UPSTREAM_VER}/" "$dir/PKGBUILD"
+ (cd "$dir" && updpkgsums)
UPDATED_PKGS+=("$pkg")
SUMMARY="${SUMMARY}\n- **${pkg}**: \`${LOCAL_VER}\` -> \`${UPSTREAM_VER}-10\`"
@@ -98,6 +98,9 @@ jobs:
- name: Create branch and open single Pull Request
if: steps.prcheck.outputs.EXISTS == 'no' && steps.check.outputs.HAS_UPDATES == 'yes'
+ env:
+ COUNT: ${{ steps.check.outputs.COUNT }}
+ SUMMARY: ${{ steps.check.outputs.SUMMARY }}
run: |
set -euo pipefail
DATE=$(date +%Y%m%d-%H%M)
@@ -108,19 +111,18 @@ jobs:
git checkout -b "$BRANCH"
git add hyprland-raveos/
- git commit -m "update: hyprland stack (${{ steps.check.outputs.COUNT }} packages)"
+ git commit -m "update: hyprland stack (${COUNT} packages)"
- git remote set-url origin "https://bot:${{ secrets.FORGEJO_TOKEN }}@git.rp1.hu/RaveOS/RaveOS-PKGBUILD.git"
git push origin "$BRANCH"
- PR_BODY="Automata Hyprland stack frissítés (${{ steps.check.outputs.COUNT }} csomag):\n${{ steps.check.outputs.SUMMARY }}\n\nA csomagok a merge után az \`iso-builder\` runneren sorrendben fordulnak le, GPG aláírással kerülnek a RaveOS repóba."
+ PR_BODY="$(printf 'Automata Hyprland stack frissítés (%s csomag):\n%s\n\nA csomagok a merge után az \`iso-builder\` runneren sorrendben fordulnak le, GPG aláírással kerülnek a RaveOS repóba.' "$COUNT" "$SUMMARY")"
curl -fsSL -X POST \
-H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \
-H "Content-Type: application/json" \
"https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls" \
-d "$(jq -n \
- --arg title "Hyprland stack frissítés (${{ steps.check.outputs.COUNT }} csomag)" \
+ --arg title "Hyprland stack frissítés (${COUNT} csomag)" \
--arg head "$BRANCH" \
--arg base "main" \
--arg body "$PR_BODY" \
diff --git a/.forgejo/workflows/kernel-update-check.yml b/.forgejo/workflows/kernel-update-check.yml
index 1eb42c6..5e7e16d 100644
--- a/.forgejo/workflows/kernel-update-check.yml
+++ b/.forgejo/workflows/kernel-update-check.yml
@@ -5,6 +5,10 @@ on:
- cron: '0 6 1,15 * *'
workflow_dispatch:
+concurrency:
+ group: kernel-update-check
+ cancel-in-progress: false
+
jobs:
check-update:
runs-on: iso-builder
@@ -29,6 +33,11 @@ jobs:
echo "HIBA: Nem sikerult a CachyOS verziot lekerdezni"
exit 1
fi
+ for v in "$MAJOR" "$MINOR" "$TAGREL"; do
+ case "$v" in
+ *[!0-9]*) echo "HIBA: Ervenytelen verzio: $v"; exit 1 ;;
+ esac
+ done
echo "MAJOR=$MAJOR" >> $GITHUB_OUTPUT
echo "MINOR=$MINOR" >> $GITHUB_OUTPUT
echo "TAGREL=$TAGREL" >> $GITHUB_OUTPUT
@@ -50,10 +59,17 @@ jobs:
- name: Frissites szukseges?
id: needsupdate
+ env:
+ NEW_MAJOR: ${{ steps.check.outputs.MAJOR }}
+ NEW_MINOR: ${{ steps.check.outputs.MINOR }}
+ NEW_TAGREL: ${{ steps.check.outputs.TAGREL }}
+ CUR_MAJOR: ${{ steps.current.outputs.MAJOR }}
+ CUR_MINOR: ${{ steps.current.outputs.MINOR }}
+ CUR_TAGREL: ${{ steps.current.outputs.TAGREL }}
run: |
set -euo pipefail
- NEW="${{ steps.check.outputs.MAJOR }}.${{ steps.check.outputs.MINOR }}-${{ steps.check.outputs.TAGREL }}"
- CUR="${{ steps.current.outputs.MAJOR }}.${{ steps.current.outputs.MINOR }}-${{ steps.current.outputs.TAGREL }}"
+ NEW="${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL}"
+ CUR="${CUR_MAJOR}.${CUR_MINOR}-${CUR_TAGREL}"
if [ "$NEW" != "$CUR" ]; then
echo "UPDATE=yes" >> $GITHUB_OUTPUT
echo "Frissites: $CUR -> $NEW"
@@ -65,9 +81,13 @@ jobs:
- name: PR mar letezik?
id: prcheck
if: steps.needsupdate.outputs.UPDATE == 'yes'
+ env:
+ NEW_MAJOR: ${{ steps.check.outputs.MAJOR }}
+ NEW_MINOR: ${{ steps.check.outputs.MINOR }}
+ NEW_TAGREL: ${{ steps.check.outputs.TAGREL }}
run: |
set -euo pipefail
- BRANCH="update/kernel-${{ steps.check.outputs.MAJOR }}.${{ steps.check.outputs.MINOR }}-${{ steps.check.outputs.TAGREL }}"
+ BRANCH="update/kernel-${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL}"
OPEN_PRS=$(curl -fsSL \
-H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \
"https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls?state=open&limit=50")
@@ -83,23 +103,20 @@ jobs:
- name: PKGBUILD frissitese es PR nyitasa
if: steps.needsupdate.outputs.UPDATE == 'yes' && steps.prcheck.outputs.EXISTS == 'no'
+ env:
+ NEW_MAJOR: ${{ steps.check.outputs.MAJOR }}
+ NEW_MINOR: ${{ steps.check.outputs.MINOR }}
+ NEW_TAGREL: ${{ steps.check.outputs.TAGREL }}
+ OLD_PKGVER: ${{ steps.current.outputs.PKGVER }}
+ OLD_MAJOR: ${{ steps.current.outputs.MAJOR }}
+ OLD_MINOR: ${{ steps.current.outputs.MINOR }}
+ OLD_TAGREL: ${{ steps.current.outputs.TAGREL }}
run: |
set -euo pipefail
- NEW_MAJOR="${{ steps.check.outputs.MAJOR }}"
- NEW_MINOR="${{ steps.check.outputs.MINOR }}"
- NEW_TAGREL="${{ steps.check.outputs.TAGREL }}"
- OLD_PKGVER="${{ steps.current.outputs.PKGVER }}"
- CUR="${{ steps.current.outputs.MAJOR }}.${{ steps.current.outputs.MINOR }}-${{ steps.current.outputs.TAGREL }}"
-
- # pkgver = kernel verzio (pl. 7.0.11)
- # pkgrel logika:
- # - uj major.minor (pl. 7.0.10 -> 7.0.11 vagy 8.0.x) -> reset 10-re
- # - csak _tagrel valtozik (ugyanaz a kernel, uj stable tag) -> +1
+ CUR="${OLD_MAJOR}.${OLD_MINOR}-${OLD_TAGREL}"
NEW_PKGVER="${NEW_MAJOR}.${NEW_MINOR}"
- OLD_MAJOR="${{ steps.current.outputs.MAJOR }}"
- OLD_MINOR="${{ steps.current.outputs.MINOR }}"
OLD_PKGREL=$(grep '^pkgrel=' linux-raveos/PKGBUILD | cut -d= -f2)
if [ "${OLD_MAJOR}.${OLD_MINOR}" != "${NEW_MAJOR}.${NEW_MINOR}" ]; then
@@ -122,7 +139,6 @@ jobs:
sed -i "s/^pkgver=.*/pkgver=${NEW_PKGVER}/" linux-raveos/PKGBUILD
sed -i "s/^pkgrel=.*/pkgrel=${NEW_PKGREL}/" linux-raveos/PKGBUILD
- # Uj CachyOS config letoltese + RaveOS javitasok visszarakasa
curl -fsSL --retry 3 \
"https://raw.githubusercontent.com/CachyOS/linux-cachyos/master/linux-cachyos/config" \
-o linux-raveos/config
@@ -134,7 +150,6 @@ jobs:
git add linux-raveos/PKGBUILD linux-raveos/config
git commit -m "update: linux-cachyos ${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL} (pkgver=${NEW_PKGVER}-${NEW_PKGREL})"
- git remote set-url origin "https://bot:${{ secrets.FORGEJO_TOKEN }}@git.rp1.hu/RaveOS/RaveOS-PKGBUILD.git"
git push origin "$BRANCH"
curl -fsSL -X POST \
diff --git a/hyprland-raveos/dms-shell/PKGBUILD b/hyprland-raveos/dms-shell/PKGBUILD
index 89cc547..d5f8f1c 100644
--- a/hyprland-raveos/dms-shell/PKGBUILD
+++ b/hyprland-raveos/dms-shell/PKGBUILD
@@ -5,7 +5,7 @@ _pkg1=DankMaterialShell
_pkg2=dank-qml-common
pkgname=($pkgbase $pkgbase-hyprland $pkgbase-niri)
pkgver=1.6.0
-pkgrel=10
+pkgrel=11
pkgdesc='A Quickshell-based desktop shell with Material 3 design principles'
arch=(x86_64 aarch64)
url="https://github.com/AvengeMedia/$_pkg1"
@@ -28,7 +28,7 @@ makedepends=(git
replaces=($pkgname-bin)
source=("git+$url.git#tag=v$pkgver"
"git+${url/$_pkg1/$_pkg2}")
-sha256sums=('51186d2a9af990b4640c6b0d9298ba54a1fe16becd14c527243980438eae844a'
+sha256sums=('SKIP'
'SKIP')
prepare() {
@@ -65,8 +65,8 @@ build() {
package_dms-shell() {
cd "$_pkg1"
depends+=(dms-shell-compositor)
- optdepneds+=('dms-shell-hyprland: Hyprland specific dependencies')
- optdepneds+=('dms-shell-niri: Niri specific dependencies')
+ optdepends+=('dms-shell-hyprland: Hyprland specific dependencies')
+ optdepends+=('dms-shell-niri: Niri specific dependencies')
make DESTDIR="$pkgdir" PREFIX="/usr" SYSTEMD_USER_DIR="$pkgdir/usr/lib/systemd/user" install
install -Dm0644 -t "$pkgdir/usr/share/doc/$pkgname/" README.md
cp -r "docs/"* "$pkgdir/usr/share/doc/$pkgname/"
diff --git a/linux-raveos/PKGBUILD b/linux-raveos/PKGBUILD
index ff68d0e..fb3202b 100644
--- a/linux-raveos/PKGBUILD
+++ b/linux-raveos/PKGBUILD
@@ -341,11 +341,9 @@ prepare() {
echo "Selecting '$_hugepage' TRANSPARENT_HUGEPAGE config..."
- ### RaveOS specific: ZRAM builtin (not module) for early boot availability
echo "RaveOS: Setting ZRAM as builtin..."
scripts/config -e ZRAM
- ### RaveOS specific: NTSYNC builtin for Proton/Wine (no modprobe needed)
echo "RaveOS: Setting NTSYNC as builtin for Proton/Wine..."
scripts/config -e NTSYNC
diff --git a/raveos-app-installer/PKGBUILD b/raveos-app-installer/PKGBUILD
index 4f36f0f..9371335 100644
--- a/raveos-app-installer/PKGBUILD
+++ b/raveos-app-installer/PKGBUILD
@@ -1,14 +1,8 @@
# Maintainer: nippy <nippy@tuta.io>
-#
-# raveos-app-installer
-# ---------------------
-# Egyetlen fájlos, letisztult PyQt6 alkalmazástelepítő (v3 architektúra):
-# USER-ként fut (nem root), saját beépített jelszó-dialógus SUDO_ASKPASS-szal,
-# NINCS pkexec/root-launcher. Váltja a régi, strukturált (src/) v2 architektúrát.
pkgname=raveos-app-installer
pkgver=3.1
-pkgrel=17
+pkgrel=18
pkgdesc="RaveOS graphical application installer"
arch=('any')
url="https://git.rp1.hu/RaveOS/raveos-app-installer"
@@ -17,6 +11,9 @@ depends=('python' 'python-pyqt6' 'pacman' 'sudo')
optdepends=(
'yay: AUR csomag támogatás'
'flatpak: flatpak alkalmazás támogatás'
+ 'sbsigntools: Secure Boot aláírás'
+ 'efitools: Secure Boot kulcs telepítés'
+ 'zstd: Secure Boot modul-aláírás'
)
source=()
sha256sums=()
@@ -43,6 +40,16 @@ package() {
install -Dm644 "${startdir}/raveos-app-installer.png" \
"${pkgdir}/usr/share/icons/hicolor/512x512/apps/raveos-app-installer.png"
+ install -Dm755 "${startdir}/raveos-secureboot-setup" \
+ "${pkgdir}/usr/bin/raveos-secureboot-setup"
+
+ install -d -m 755 "${pkgdir}/usr/share/raveos"
+ cp -r --no-preserve=ownership "${startdir}/secureboot" \
+ "${pkgdir}/usr/share/raveos/"
+ find "${pkgdir}/usr/share/raveos/secureboot" -type d -exec chmod 755 {} +
+ find "${pkgdir}/usr/share/raveos/secureboot" -type f -exec chmod 644 {} +
+ chmod 755 "${pkgdir}/usr/share/raveos/secureboot/installed/"*.sh
+
cp -r --no-preserve=ownership "${startdir}/data" \
"${pkgdir}/usr/lib/raveos-app-installer/"
find "${pkgdir}/usr/lib/raveos-app-installer/data" -type d -exec chmod 755 {} +
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log
deleted file mode 100644
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT
deleted file mode 100644
index 7ed683d..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK
deleted file mode 100644
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG
deleted file mode 100644
index 9003b5b..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG
+++ /dev/null
@@ -1,3 +0,0 @@
-2026/08/10-16:39:11.004 4839 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/MANIFEST-000001
-2026/08/10-16:39:11.004 4839 Recovering log #3
-2026/08/10-16:39:11.004 4839 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/000003.log
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old
deleted file mode 100644
index 70faec8..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old
+++ /dev/null
@@ -1,2 +0,0 @@
-2026/08/10-16:34:19.532 3c24 Creating DB /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption since it was missing.
-2026/08/10-16:34:19.547 3c24 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001
deleted file mode 100644
index 18e5cab..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log
deleted file mode 100644
index 85386dc..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb
deleted file mode 100644
index c0a88d6..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT
deleted file mode 100644
index 7ed683d..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK
deleted file mode 100644
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG
deleted file mode 100644
index fb6f1ba..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG
+++ /dev/null
@@ -1,6 +0,0 @@
-2026/08/10-16:39:08.930 5 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/MANIFEST-000001
-2026/08/10-16:39:08.933 5 Recovering log #3
-2026/08/10-16:39:08.933 5 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/000003.log
-2026/08/10-16:43:17.304 5 Level-0 table #5: started
-2026/08/10-16:43:17.311 5 Level-0 table #5: 14577 bytes OK
-2026/08/10-16:43:17.319 5 Delete type=0 #3
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old
deleted file mode 100644
index b6dd490..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old
+++ /dev/null
@@ -1,2 +0,0 @@
-2026/08/10-16:34:17.347 5 Creating DB /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb since it was missing.
-2026/08/10-16:34:17.368 5 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001
deleted file mode 100644
index 3ee7649..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116
deleted file mode 100644
index dec2925..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167
deleted file mode 100644
index d6b6802..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548
deleted file mode 100644
index 9338aab..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log
deleted file mode 100644
index 4a8e04e..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT
deleted file mode 100755
index 7ed683d..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK
deleted file mode 100755
index e69de29..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK
+++ /dev/null
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG
deleted file mode 100644
index 5955bbb..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG
+++ /dev/null
@@ -1,3 +0,0 @@
-2026/08/10-16:39:08.921 4825 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/MANIFEST-000001
-2026/08/10-16:39:08.921 4825 Recovering log #3
-2026/08/10-16:39:08.922 4825 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/000003.log
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old
deleted file mode 100644
index 2a0eaa5..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old
+++ /dev/null
@@ -1 +0,0 @@
-2026/08/10-16:34:17.339 3c10 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/MANIFEST-000001
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001
deleted file mode 100755
index 18e5cab..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State
deleted file mode 100644
index 6221116..0000000
--- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State
+++ /dev/null
@@ -1 +0,0 @@
-{"autofill":{"ablation_seed":"AZXVsIGW7us="},"brave":{"ad_block":{"checked_all_default_regions":true},"brave_search_conversion":{"already_churned":true},"core_metrics":{"pages_loaded":[{"day":1786312800.0,"value":2.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"enable_search_suggestions_by_default":true,"migrated_adblock_social_media_blocking_settings":true,"misc_metrics":{"brave_search_query_counts":{"any_navigation":true},"brave_search_report_frame_start_time":"13430846057347621","combined_search_study_frame_start_time":"13430846057347632","combined_search_study_search_made":true,"failed_https_upgrade_metric_added_time":"13426552800000000","last_doh_fallback":0,"media_session_active_process_time":"450000000","media_session_frame_start_time":"13430846057232046","media_session_playing_time":"0","menu_dismiss_storage":[{"day":1786312800.0,"value":2.0}],"menu_group_actions":{"browser_views":4.0},"menu_shown_storage":[{"day":1786312800.0,"value":6.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"nav_source_counts":{"top_sites_favorites":1,"total":2},"nav_source_report_frame_start_time":"13430846057347627","total_dns_requests":[{"day":1786312800.0,"value":32.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"uptime_frame_start_time_v2":"13430846057427398","uptime_sum":"414342363","weekly_uptime_storage":[{"day":1786312800.0,"value":408.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"new_tab_page":{"customize_p3a_usage":0,"p3a_new_tabs_created":[{"day":1786312800.0,"value":9.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"onboarding":{"last_shields_icon_highlighted_time":"13430846567528190"},"origin":{"free_tier_accepted":true,"policies_were_enforced":true,"purchase_validated":true},"p3a":{"notice_acknowledged":true},"referral":{"initialization":true,"promo_code":"BRV001"},"search":{"backup_results":{"last_view_height":921,"last_view_width":1608},"last_switch_report":"13430846922639013"},"sidebar":{"target_user_for_sidebar_enabled_test":false}},"brave_shields":{"p3a_usage":0},"breadcrumbs":{"enabled":false,"enabled_time":"13430846057297325"},"browser":{"first_run_finished":true,"whats_new":{"enabled_order":[]}},"hardware_acceleration_mode_previous":true,"legacy":{"profile":{"name":{"migrated":true}}},"local":{"password_hash_data_list":[]},"management":{"platform":{"last_log_time":"13430846057341258"}},"network_time":{"network_time_mapping":{"local":1.786372749129309e+12,"network":1.78637275e+12,"ticks":1760881923.0,"uncertainty":1223261.0}},"optimization_guide":{"model_execution":{"last_usage_by_feature":{}},"model_store_metadata":{},"on_device":{"last_version":"151.1.93.135","model_crash_count":0}},"os_crypt":{"portal":{"prev_desktop":"GNOME","prev_init_success":true}},"p3a":{"activation_dates":{},"custom_attributes":{"media_session_usage":"0","search_default":"other"}},"performance_intervention":{"last_daily_sample":"13430846057426803"},"policy":{"last_statistics_update":"13430846057296519"},"profile":{"info_cache":{"Default":{"active_time":1786372457.423897,"ai_subscription_tier":0,"avatar_icon":"chrome://theme/IDR_PROFILE_AVATAR_26","background_apps":false,"default_avatar_fill_color":-14737629,"default_avatar_stroke_color":-526345,"enterprise_label":"","force_signin_profile_locked":false,"gaia_id":"","is_consented_primary_account":false,"is_ephemeral":false,"is_using_default_avatar":true,"is_using_default_name":true,"managed_user_id":"","metrics_bucket_index":1,"name":"Personal","profile_color_seed":-4078337,"profile_highlight_color":-14737629,"serp_metrics":{"brave_search_engine":[{"day":1782086400.0,"value":1.0}],"google_search_engine":[],"other_search_engine":[]},"signin.with_credential_provider":false,"user_name":""}},"last_active_profiles":["Default"],"metrics":{"next_bucket_index":2},"profile_counts_reported":"13430846057298079","profiles_order":["Default"]},"session_id_generator_last_value":"744144003","signin":{"active_accounts_last_emitted":"13430846057231733"},"subresource_filter":{"ruleset_version":{"checksum":0,"content":"","format":0}},"tab_stats":{"discards_external":0,"discards_frozen":0,"discards_proactive":0,"discards_suggested":0,"discards_urgent":0,"last_daily_sample":"13430846057293858","max_tabs_per_window":2,"reloads_external":0,"reloads_frozen":0,"reloads_proactive":0,"reloads_suggested":0,"reloads_urgent":0,"total_tab_count_max":2,"window_count_max":1},"ukm":{"persisted_logs":[]},"uninstall_metrics":{"installation_date2":"1782154367"},"updateclientdata":{"apps":{"adcocjohghhfpidemphmcmlmhnfgikei":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.469","pf":"53c03b89-69c8-4e01-a7c7-3e2d264931b6","pv":"1.0.475"},"afalakplffnnnlkncjhbmahjfjhmlkal":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.1468","pf":"0b6666c5-d270-441f-9da0-502be3538c5a","pv":"1.0.1503"},"aoojcmojmmcbpfgoecoadbdpnagfchel":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.23","pf":"26e5e602-358c-4152-8cc2-c19180622adb","pv":"1.0.24"},"bfpgedeaaibpoidldhjcknekahbikncb":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.16863","pf":"a55c4105-9171-4c4d-9ffb-dd77a5ecad08","pv":"1.0.16874"},"cdbbhgbmjhfnhnmgeddbliobbofkgdhe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.19761","pf":"3b563fca-6ed0-4214-955e-2cde31e60990","pv":"1.0.19908"},"cemdlagocoimleflkfkjoihojfainiho":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"045b2476-4387-4d4a-a4a7-a927f432cdd7","pv":"1.0.119"},"dkpggglmbjhgjhachikgmohmecomjndo":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"11f5d842-511c-4b29-b3a7-c745e12eca8c","pv":"1.0.0"},"efniojlnjndmcbiieegkicadnoecjjef":{"cohort":"1:18ql:","cohortname":"Auto Stage3","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"529f8cdb-e88a-4c05-a107-7b32c7ede605","pv":"1738"},"ggkkehgbnfjpeggfpleeakpidbkibbmn":{"cohort":"1:ut9/1a0f:","cohortname":"M108 and Above","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"a966c7a8-01ad-4d44-b2bc-499dd8d0379e","pv":"2026.8.10.62"},"giekcmmlnklenlaomppkphknjmnnpneh":{"cohort":"1:j5l:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"68e29660-4e5c-476a-9df2-4ab5609a6837","pv":"7"},"gkboaolpopklhgplhaaiboijnklogmbc":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.92","pf":"637e0dec-18ab-4c68-8b8e-673923451f03","pv":"1.0.95"},"hfnkpimlhhgieaddgfemjhofmfblmnib":{"cohort":"1:287f:","cohortname":"Auto full","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"08755607-b47c-4507-b276-7e0d20b4c6d1","pv":"10706"},"iodkpdagapdfkphljnddpjlldadblomo":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.20458","pf":"4b5131c9-5159-4342-85b8-9cac7d2cb47b","pv":"1.0.21487"},"jamhcnnkihinmdlkakkaopbjbbcngflc":{"cohort":"1:wvr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"83349149-1b15-47a7-98cc-423150c9f434","pv":"120.0.6050.0"},"jflookgnkcckhobaglndicnbbgbonegd":{"cohort":"1:s7x:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"7f7dbae9-cedd-47ef-8436-09b0b1043ab0","pv":"3091"},"jmfhneobcdckobmonkfjkbknnjjnegoh":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"96e0b450-03c8-4c9d-9794-8f30e89125ed","pv":"1.0.0"},"khaoiebndkojlmppeemjhbpbandiljpe":{"cohort":"1:cux:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"1f6c2599-ba72-4da7-ac54-c3d124fc5abd","pv":"145.0.7584.0"},"kihnoaefogbkmblfimmibknnmkllbhlf":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.6038","pf":"3a6c7af8-9f85-4261-9931-2a6017fc3677","pv":"1.0.7064"},"laoigpblnllgcgjnjnllmfolckpjlhki":{"cohort":"1:10zr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.7.1652906823","pf":"486a20ef-2770-47a7-8e84-d3885356fd6b","pv":"1.1.0.3"},"mfddibmblmbccpadfndgakiopmmhebop":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.146","pf":"ecb74f41-79cb-4d47-b13f-7266767415ff","pv":"1.0.151"},"nlpaeekllejnmhoonlpcefpfnpbajbpe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.474","pf":"fdf405e3-c653-4583-8419-ddcebe0c86ef","pv":"1.0.523"},"obedbbhbpmojnkanicioggnmelmoomoc":{"cohort":"1:s6f:3cr3@0.025","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"ae14957e-6c26-4a07-979c-56bab97c3079","pv":"20251024.824731831.14"},"ojhpjlocmbogdgmfpkhlaaeamibhnphh":{"cohort":"1:w0x:","cohortname":"All users","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"04c2193a-f501-4e3a-8820-33ce4ce897bd","pv":"3"}}},"user_experience_metrics":{"consent_restructure_feature_state":false,"limited_entropy_randomization_source":"FE1EA34EA9F364323DD20A35BACD50D5","low_entropy_source3":7377,"pseudo_low_entropy_source":4436,"reporting_enabled":false,"session_id":2,"stability":{"browser_last_live_timestamp":"13430847055374029","exited_cleanly":true,"stats_buildtime":"1786293927","stats_version":"151.1.93.135-64-devel"}},"variations_compressed_seed":"safe_seed_content","variations_country":"hu","variations_crash_streak":0,"variations_failed_to_fetch_seed_streak":0,"variations_geo_level1":"","variations_last_fetch_time":"13430846349237474","variations_permanent_consistency_country":["151.1.93.135","hu"],"variations_safe_compressed_seed":"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","variations_safe_seed_date":"13430846058000000","variations_safe_seed_fetch_time":"13430846349237474","variations_safe_seed_locale":"hu","variations_safe_seed_milestone":151,"variations_safe_seed_permanent_consistency_country":"hu","variations_safe_seed_session_consistency_country":"hu","variations_safe_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_seed_date":"13430846350000000","variations_seed_milestone":151,"variations_seed_serial_number":"23d76df102c70f19dab8794bc52a53af","variations_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_sticky_studies":"","was":{"restarted":false}} \ No newline at end of file
diff --git a/raveos-app-installer/raveos-app-installer.py b/raveos-app-installer/raveos-app-installer.py
index d5a9149..d696a58 100644
--- a/raveos-app-installer/raveos-app-installer.py
+++ b/raveos-app-installer/raveos-app-installer.py
@@ -31,15 +31,11 @@ import subprocess
import sys
from pathlib import Path
-# ─────────────────────────────────────────────────────────────────────────────
-# Konstansok / útvonalak
-# ─────────────────────────────────────────────────────────────────────────────
APP_NAME = "RaveOS App Installer"
APP_ID = "raveos-app-installer" # Wayland app_id (Hyprland window rule-okhoz)
APP_VERSION = "3.1"
-# app-list.json keresési sorrend: a script mellett -> /usr/share -> ~/.config
_SCRIPT_DIR = Path(__file__).resolve().parent
APP_LIST_CANDIDATES = [
_SCRIPT_DIR / "app-list.json",
@@ -47,9 +43,6 @@ APP_LIST_CANDIDATES = [
Path.home() / ".config" / "raveos" / "app-list.json",
]
-# ─────────────────────────────────────────────────────────────────────────────
-# Téma (a welcome app stílusa)
-# ─────────────────────────────────────────────────────────────────────────────
C = {
"bg": "#232427",
@@ -68,7 +61,6 @@ C = {
"danger_hi": "#c56458",
}
-# Per-type kis badge színek (visszafogottak)
TYPE_LABEL = {
"pacman": "pacman",
"aur": "AUR",
@@ -79,9 +71,6 @@ TYPE_LABEL = {
}
-# ─────────────────────────────────────────────────────────────────────────────
-# Nyelv (hu/en) - session-szintű, alapértelmezett hu, a welcome app mintájára
-# ─────────────────────────────────────────────────────────────────────────────
_current_lang = "hu"
@@ -90,6 +79,30 @@ T = {
"header_backup": {"hu": " · MENTÉS / VISSZAÁLLÍTÁS", "en": " · BACKUP / RESTORE"},
"nav_backup": {"hu": "Mentés / Visszaállítás", "en": "Backup / Restore"},
"nav_back": {"hu": "← Vissza", "en": "← Back"},
+ "nav_sb": {"hu": "Secure Boot", "en": "Secure Boot"},
+ "header_sb": {"hu": " · SECURE BOOT", "en": " · SECURE BOOT"},
+ "sb_desc": {"hu": "A telepített rendszer aláírása és a kulcsok telepítése a firmware-be.\nWindows dual-boot mellett is biztonságos (Microsoft kulcsok megőrizve).", "en": "Sign the installed system and enroll the keys into the firmware.\nSafe with dual-boot Windows (Microsoft keys preserved)."},
+ "sb_lbl_sb": {"hu": "Secure Boot", "en": "Secure Boot"},
+ "sb_lbl_setup": {"hu": "Setup Mode", "en": "Setup Mode"},
+ "sb_lbl_keys": {"hu": "Gépkulcs", "en": "Machine key"},
+ "sb_lbl_signed": {"hu": "Aláírások", "en": "Signatures"},
+ "sb_val_on": {"hu": "bekapcsolva", "en": "enabled"},
+ "sb_val_off": {"hu": "kikapcsolva", "en": "disabled"},
+ "sb_val_yes": {"hu": "igen", "en": "yes"},
+ "sb_val_no": {"hu": "nem", "en": "no"},
+ "sb_val_ok": {"hu": "rendben", "en": "ok"},
+ "sb_val_missing": {"hu": "hiányzik", "en": "missing"},
+ "sb_btn_refresh": {"hu": "Állapot frissítése", "en": "Refresh status"},
+ "sb_btn_setup": {"hu": "Secure Boot beállítása", "en": "Set up Secure Boot"},
+ "sb_btn_resign": {"hu": "Újra-aláírás", "en": "Re-sign"},
+ "sb_pending": {"hu": "Újraindítás szükséges a befejezéshez!", "en": "Reboot required to finish!"},
+ "sb_bl_warn": {"hu": "BitLocker: ha Windows-on be van kapcsolva, előbb indítsd el a Windowst és futtasd: manage-bde -protectors -disable C: -rebootcount 2 — vagy legyen kéznél a helyreállítási kulcs.", "en": "BitLocker: if enabled on Windows, boot Windows first and run: manage-bde -protectors -disable C: -rebootcount 2 — or have the recovery key ready."},
+ "sb_done_title": {"hu": "Secure Boot beállítva", "en": "Secure Boot configured"},
+ "sb_done_msg": {"hu": "Az aláírások és a kulcsok készen vannak.\n\nA BIOS-ban állítsd: Secure Boot → Enabled, majd indítsd újra a gépet.", "en": "Signatures and keys are ready.\n\nIn the BIOS set: Secure Boot → Enabled, then reboot."},
+ "sb_reboot_title": {"hu": "Újraindítás szükséges", "en": "Reboot required"},
+ "sb_reboot_msg": {"hu": "A BIOS-ban töröld a Secure Boot kulcsokat (Clear Secure Boot keys → Setup Mode).\nMentés után indítsd újra a gépet — a beállítás boot után automatikusan befejeződik.\n\nÚjraindítsam most?", "en": "In the BIOS clear the Secure Boot keys (Clear Secure Boot keys → Setup Mode).\nSave and reboot — the setup finishes automatically after boot.\n\nReboot now?"},
+ "sb_err_title": {"hu": "Secure Boot hiba", "en": "Secure Boot error"},
+ "sb_err_msg": {"hu": "A művelet nem sikerült — a részletek a naplóban láthatók.", "en": "The operation failed — details are in the log."},
"tab_all": {"hu": "Összes", "en": "All"},
"tab_installed": {"hu": "Telepített", "en": "Installed"},
"search_placeholder": {"hu": "Keresés…", "en": "Search…"},
@@ -296,9 +309,6 @@ def build_qss() -> str:
"""
-# ─────────────────────────────────────────────────────────────────────────────
-# Adat: katalógus betöltés + telepítettség detektálás
-# ─────────────────────────────────────────────────────────────────────────────
def load_catalog() -> list:
"""app-list.json beolvasása az első létező útvonalról."""
@@ -368,9 +378,6 @@ def is_installed(app: dict, idx: dict) -> bool:
return False
-# ─────────────────────────────────────────────────────────────────────────────
-# Parancs-építés (telepítés / eltávolítás), batch-elve backendenként
-# ─────────────────────────────────────────────────────────────────────────────
def _root_prefix(gui: bool) -> list:
"""GUI -> sudo -S (jelszó stdin-ről), terminál -> sudo, ha már root -> semmi."""
@@ -419,8 +426,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
if aur:
if install:
- # --answer* nelkul a yay a PKGBUILD-diff/edit prompt-nal orokre
- # varakozik (nincs csatolt terminal a stream_command-hoz)
steps.append((f"AUR: {', '.join(aur)}",
["yay", "-S", "--needed", "--noconfirm",
"--answerclean", "None", "--answerdiff", "None",
@@ -447,10 +452,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
steps.append((f"flatpak uninstall: {fid}",
["flatpak", "uninstall", "--user", "-y", fid]))
- # Config seedelés: pacman/aur/flatpak-user tipusu appoknal a config_dir/
- # config_dest mezok alapjan bemasoljuk az elore elkeszitett configot a
- # user home-jaba, telepites utan. (script tipusnal ezt a sajat bash
- # script intezi, azoknal nem kell ez a lepes.)
if install:
_home = os.path.expanduser("~")
for a in apps:
@@ -471,10 +472,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
f"cp {cp_flag} {shlex.quote(str(src))}/. {shlex.quote(dest)}/ && "
f"rm -f {shlex.quote(dest)}/Singleton*"]))
- # Config seedelés (több-utas változat): olyan appoknal, ahol tobb kulon
- # forras/cel par van (pl. PhotoGIMP: GIMP config + .desktop + ikonok
- # kulon-kulon helyre), a "config_mappings" listat hasznaljuk a fenti
- # egyszeru config_dir/config_dest helyett.
if install:
_home = os.path.expanduser("~")
for a in apps:
@@ -496,7 +493,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list:
f"cp {cp_flag} {shlex.quote(str(src))}/. {shlex.quote(dest)}/ && "
f"rm -f {shlex.quote(dest)}/Singleton*"]))
- # Script env: a szkript tudja ki a tényleges user (sudo után root fut)
_caller = os.environ.get("USER") or os.environ.get("LOGNAME") or ""
_caller_home = os.path.expanduser("~")
_caller_uid = str(os.getuid())
@@ -547,9 +543,6 @@ def stream_command(label: str, cmd: list, emit, password: str = "") -> bool:
return ok
-# ─────────────────────────────────────────────────────────────────────────────
-# GUI rész (csak ha van PyQt6 / display)
-# ─────────────────────────────────────────────────────────────────────────────
BACKUP_LIST_CANDIDATES = [
_SCRIPT_DIR / "data/backup/backup-paths.json",
@@ -578,7 +571,6 @@ def run_gui() -> int:
from PyQt6.QtCore import Qt, QThread, pyqtSignal
from PyQt6.QtGui import QFont, QFontDatabase
- # ── display font helper (Bebas Neue, fallbackkel) ────────────────────────
def display_font(size: int, weight=QFont.Weight.Normal) -> QFont:
for fam in ("Bebas Neue", "Oswald", "Anton"):
if fam in QFontDatabase.families():
@@ -591,7 +583,6 @@ def run_gui() -> int:
f.setLetterSpacing(QFont.SpacingType.PercentageSpacing, 102)
return f
- # ── háttér worker ────────────────────────────────────────────────────────
class Worker(QThread):
log = pyqtSignal(str)
progress = pyqtSignal(int) # 0..100
@@ -613,7 +604,6 @@ def run_gui() -> int:
self.progress.emit(int((i + 1) / total * 100))
self.done.emit(ok, total)
- # ── egy app sor widget ───────────────────────────────────────────────────
class Row(QFrame):
def __init__(self, app, installed):
super().__init__()
@@ -652,7 +642,6 @@ def run_gui() -> int:
f"color:{C['accent_hi'] if installed else C['text_mut']}; font-size:12px;")
lay.addWidget(status)
- # sorra kattintás is váltja a checkboxot (message tipusnal dialogot mutat)
self.setCursor(Qt.CursorShape.PointingHandCursor)
def mousePressEvent(self, e):
@@ -664,7 +653,34 @@ def run_gui() -> int:
self.cb.toggle()
super().mousePressEvent(e)
- # ── backup worker ────────────────────────────────────────────────────────
+ class SbWorker(QThread):
+ log = pyqtSignal(str)
+ done = pyqtSignal(int)
+
+ def __init__(self, mode, password):
+ super().__init__()
+ self.mode = mode
+ self.password = password
+
+ def run(self):
+ cmd = ["sudo", "-S", "-p", "", "raveos-secureboot-setup", self.mode]
+ self.log.emit(f"$ {' '.join(cmd)}")
+ try:
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+ stdin=subprocess.PIPE, text=True, bufsize=1)
+ if self.password:
+ proc.stdin.write(self.password + "\n")
+ proc.stdin.flush()
+ proc.stdin.close()
+ except OSError as exc:
+ self.log.emit(f"[HIBA] {exc}")
+ self.done.emit(1)
+ return
+ for line in proc.stdout:
+ self.log.emit(line.rstrip("\n"))
+ proc.wait()
+ self.done.emit(proc.returncode)
+
class BackupWorker(QThread):
log = pyqtSignal(str)
progress = pyqtSignal(int)
@@ -792,7 +808,6 @@ def run_gui() -> int:
except Exception as exc:
self.done.emit(False, str(exc))
- # ── fő ablak ─────────────────────────────────────────────────────────────
class Main(QMainWindow):
def __init__(self, catalog):
super().__init__()
@@ -801,6 +816,7 @@ def run_gui() -> int:
self.idx = installed_index()
self.rows = []
self.worker = None
+ self.sb_worker = None
self.backup_worker = None
self.backup_checkboxes = {} # item_id -> (QCheckBox, abs_path, label, requires_root)
self._sudo_pw = ""
@@ -815,7 +831,6 @@ def run_gui() -> int:
outer.setContentsMargins(0, 0, 0, 0)
outer.setSpacing(0)
- # ── Header ───────────────────────────────────────────────────────
header = QFrame()
header.setObjectName("Header")
hl = QHBoxLayout(header)
@@ -852,6 +867,11 @@ def run_gui() -> int:
self._style_lang_btns()
hl.addSpacing(12)
+ self.btn_sb = QPushButton(tr("nav_sb"))
+ self.btn_sb.clicked.connect(self._go_sb)
+ hl.addWidget(self.btn_sb)
+ hl.addSpacing(8)
+
self.btn_nav = QPushButton(tr("nav_backup"))
self.btn_nav.clicked.connect(self._go_backup)
hl.addWidget(self.btn_nav)
@@ -861,11 +881,9 @@ def run_gui() -> int:
hl.addWidget(ver)
outer.addWidget(header)
- # ── Stack ─────────────────────────────────────────────────────────
self.stack = QStackedWidget()
outer.addWidget(self.stack, 1)
- # ── Oldal 0: Apps ─────────────────────────────────────────────────
apps_page = QWidget()
bl = QVBoxLayout(apps_page)
bl.setContentsMargins(20, 16, 20, 16)
@@ -935,7 +953,6 @@ def run_gui() -> int:
self.stack.addWidget(apps_page)
- # ── Oldal 1: Backup / Restore ─────────────────────────────────────
bk_page = QWidget()
bbl = QVBoxLayout(bk_page)
bbl.setContentsMargins(20, 16, 20, 16)
@@ -987,10 +1004,75 @@ def run_gui() -> int:
self.stack.addWidget(bk_page)
+ sb_page = QWidget()
+ sbl = QVBoxLayout(sb_page)
+ sbl.setContentsMargins(20, 16, 20, 16)
+ sbl.setSpacing(12)
+
+ self.sb_desc = QLabel(tr("sb_desc"))
+ self.sb_desc.setWordWrap(True)
+ self.sb_desc.setStyleSheet(f"color:{C['text_dim']};")
+ sbl.addWidget(self.sb_desc)
+
+ self.sb_lbls = {}
+ self.sb_vals = {}
+ srow1 = QHBoxLayout()
+ srow1.setSpacing(8)
+ srow2 = QHBoxLayout()
+ srow2.setSpacing(8)
+ for i, key in enumerate(("sb_lbl_sb", "sb_lbl_setup", "sb_lbl_keys", "sb_lbl_signed")):
+ lbl = QLabel(tr(key))
+ lbl.setStyleSheet(f"color:{C['text_dim']};")
+ val = QLabel("-")
+ val.setStyleSheet(f"color:{C['text']}; font-weight:600;")
+ self.sb_lbls[key] = lbl
+ self.sb_vals[key] = val
+ box = QHBoxLayout()
+ box.setSpacing(6)
+ box.addWidget(lbl)
+ box.addWidget(val)
+ (srow1 if i < 2 else srow2).addLayout(box)
+ (srow1 if i < 2 else srow2).addSpacing(24)
+ srow1.addStretch(1)
+ srow2.addStretch(1)
+ sbl.addLayout(srow1)
+ sbl.addLayout(srow2)
+
+ self.sb_warn = QLabel(tr("sb_bl_warn"))
+ self.sb_warn.setWordWrap(True)
+ self.sb_warn.setStyleSheet("color:#d0a24c;")
+ sbl.addWidget(self.sb_warn)
+
+ self.sb_pending = QLabel(tr("sb_pending"))
+ self.sb_pending.setStyleSheet("color:#d0a24c; font-weight:700;")
+ self.sb_pending.hide()
+ sbl.addWidget(self.sb_pending)
+
+ sb_row = QHBoxLayout()
+ sb_row.setSpacing(8)
+ self.btn_sb_refresh = QPushButton(tr("sb_btn_refresh"))
+ self.btn_sb_refresh.clicked.connect(self._sb_refresh)
+ self.btn_sb_setup = QPushButton(tr("sb_btn_setup"))
+ self.btn_sb_setup.setObjectName("Primary")
+ self.btn_sb_setup.clicked.connect(self._sb_setup)
+ self.btn_sb_resign = QPushButton(tr("sb_btn_resign"))
+ self.btn_sb_resign.clicked.connect(self._sb_resign)
+ sb_row.addWidget(self.btn_sb_refresh)
+ sb_row.addWidget(self.btn_sb_setup)
+ sb_row.addWidget(self.btn_sb_resign)
+ sb_row.addStretch(1)
+ sbl.addLayout(sb_row)
+
+ self.sb_log = QPlainTextEdit()
+ self.sb_log.setObjectName("Log")
+ self.sb_log.setReadOnly(True)
+ sbl.addWidget(self.sb_log, 1)
+
+ self.stack.addWidget(sb_page)
+
self.build_rows()
self.apply_filter()
- # ── nyelv ─────────────────────────────────────────────────────────────
def _style_lang_btns(self):
active = (
f"QPushButton {{ background: {C['accent']}; color: #15240f;"
@@ -1016,9 +1098,23 @@ def run_gui() -> int:
self._retranslate_all()
def _retranslate_all(self):
- on_backup = self.stack.currentIndex() == 1
- self.header_sep.setText(tr("header_backup") if on_backup else tr("header_installer"))
- self.btn_nav.setText(tr("nav_back") if on_backup else tr("nav_backup"))
+ idx = self.stack.currentIndex()
+ if idx == 1:
+ self.header_sep.setText(tr("header_backup"))
+ elif idx == 2:
+ self.header_sep.setText(tr("header_sb"))
+ else:
+ self.header_sep.setText(tr("header_installer"))
+ self.btn_nav.setText(tr("nav_back") if idx != 0 else tr("nav_backup"))
+ self.btn_sb.setText(tr("nav_sb"))
+ self.sb_desc.setText(tr("sb_desc"))
+ for key, lbl in self.sb_lbls.items():
+ lbl.setText(tr(key))
+ self.sb_warn.setText(tr("sb_bl_warn"))
+ self.sb_pending.setText(tr("sb_pending"))
+ self.btn_sb_refresh.setText(tr("sb_btn_refresh"))
+ self.btn_sb_setup.setText(tr("sb_btn_setup"))
+ self.btn_sb_resign.setText(tr("sb_btn_resign"))
self.tab_all.setText(tr("tab_all"))
self.tab_inst.setText(tr("tab_installed"))
self.search.setPlaceholderText(tr("search_placeholder"))
@@ -1042,7 +1138,6 @@ def run_gui() -> int:
self.scroll.verticalScrollBar().setValue(keep_scroll)
self.build_backup_items()
- # ── backup lista építés (nyelvváltáskor is újraépül) ────────────────────
def build_backup_items(self):
prev_checked = {iid: cb.isChecked() for iid, (cb, _, _, _) in self.backup_checkboxes.items()}
while self.bk_vl.count():
@@ -1098,13 +1193,11 @@ def run_gui() -> int:
self.bk_vl.addWidget(brow)
self.bk_vl.addStretch(1)
- # ── frissítés ─────────────────────────────────────────────────────────
def _refresh_and_filter(self):
self.idx = installed_index()
self.build_rows()
self.apply_filter()
- # ── navigáció ─────────────────────────────────────────────────────────
def _go_backup(self):
self.stack.setCurrentIndex(1)
self.header_sep.setText(tr("header_backup"))
@@ -1119,7 +1212,99 @@ def run_gui() -> int:
self.btn_nav.clicked.disconnect()
self.btn_nav.clicked.connect(self._go_backup)
- # ── lista építés ──────────────────────────────────────────────────────
+ def _go_sb(self):
+ self.stack.setCurrentIndex(2)
+ self.header_sep.setText(tr("header_sb"))
+ self.btn_nav.setText(tr("nav_back"))
+ self.btn_nav.clicked.disconnect()
+ self.btn_nav.clicked.connect(self._go_apps)
+ self._sb_refresh()
+
+ def _sb_refresh(self):
+ self.sb_log.clear()
+ import time
+ out = ""
+ cached = self._sudo_pw if (self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300) else ""
+ try:
+ for cmd in (["raveos-secureboot-setup", "--status"],
+ ["sudo", "-n", "raveos-secureboot-setup", "--status"]):
+ res = subprocess.run(cmd, capture_output=True, text=True, timeout=15)
+ out = res.stdout
+ if out.strip():
+ break
+ if not out.strip() and cached:
+ res = subprocess.run(["sudo", "-S", "-p", "", "raveos-secureboot-setup", "--status"],
+ input=cached + "\n", capture_output=True, text=True, timeout=15)
+ out = res.stdout
+ except (OSError, subprocess.TimeoutExpired) as exc:
+ self.sb_log.appendPlainText(f"[HIBA] {exc}")
+ return
+ data = {}
+ for line in out.splitlines():
+ if "=" in line and not line.startswith("["):
+ k, _, val = line.partition("=")
+ data[k.strip()] = val.strip()
+ elif line.strip():
+ self.sb_log.appendPlainText(line)
+ if not data:
+ if not out.strip():
+ self.sb_log.appendPlainText("[raveos-sb] Az allapot nem olvashato.")
+ return
+ on = lambda x: tr("sb_val_on") if x == "1" else tr("sb_val_off")
+ yes = lambda x: tr("sb_val_yes") if x == "1" else tr("sb_val_no")
+ ok = lambda x: tr("sb_val_ok") if x == "1" else tr("sb_val_missing")
+ self.sb_vals["sb_lbl_sb"].setText(on(data.get("secureboot", "?")))
+ self.sb_vals["sb_lbl_setup"].setText(yes(data.get("setupmode", "?")))
+ self.sb_vals["sb_lbl_keys"].setText(ok(data.get("keys", "0")))
+ self.sb_vals["sb_lbl_signed"].setText(ok(data.get("signed", "0")))
+ self.sb_pending.setVisible(data.get("pending") == "1")
+
+ def _sb_run(self, mode):
+ if self.sb_worker and self.sb_worker.isRunning():
+ return
+ import time
+ if os.geteuid() != 0:
+ if self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300:
+ password = self._sudo_pw
+ else:
+ password = self._ask_password()
+ if not password:
+ return
+ self._sudo_pw = password
+ self._sudo_pw_ts = time.time()
+ else:
+ password = ""
+ self.sb_log.clear()
+ self.btn_sb_setup.setEnabled(False)
+ self.btn_sb_resign.setEnabled(False)
+ self.btn_sb_refresh.setEnabled(False)
+ self.sb_worker = SbWorker(mode, password)
+ self.sb_worker.log.connect(self.sb_log.appendPlainText)
+ self.sb_worker.done.connect(self._sb_finished)
+ self.sb_worker.start()
+
+ def _sb_setup(self):
+ self._sb_run("--setup")
+
+ def _sb_resign(self):
+ self._sb_run("--resign")
+
+ def _sb_finished(self, rc):
+ self.btn_sb_setup.setEnabled(True)
+ self.btn_sb_resign.setEnabled(True)
+ self.btn_sb_refresh.setEnabled(True)
+ self._sb_refresh()
+ if rc == 0:
+ QMessageBox.information(self, tr("sb_done_title"), tr("sb_done_msg"))
+ elif rc == 10:
+ answer = QMessageBox.question(
+ self, tr("sb_reboot_title"), tr("sb_reboot_msg"),
+ QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
+ if answer == QMessageBox.StandardButton.Yes:
+ subprocess.Popen(["systemctl", "reboot"])
+ else:
+ QMessageBox.critical(self, tr("sb_err_title"), tr("sb_err_msg"))
+
def build_rows(self):
for r in self.rows:
r.setParent(None)
@@ -1154,7 +1339,6 @@ def run_gui() -> int:
return [r.app for r in self.rows
if r.cb.isChecked() and r.isVisible() and not r.is_message]
- # ── app akció ─────────────────────────────────────────────────────────
def _ask_password(self) -> str:
"""Jelszó dialog - egyszer fut az akció elején. Üres string = megszakítva."""
err_msg = ""
@@ -1221,7 +1405,6 @@ def run_gui() -> int:
return pw
err_msg = tr("dlg_pw_wrong_err")
except Exception:
- # Ha az ellenőrzés nem sikerül, elfogadjuk és hagyjuk a parancsot hibázni
return pw
def run_action(self, install: bool):
@@ -1236,7 +1419,6 @@ def run_gui() -> int:
self.log.appendPlainText(tr("log_nothing_to_do"))
return
- # Jelszó - 5 percen belül megjegyzett jelszót újra felhasználjuk
import time
if os.geteuid() != 0:
if self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300:
@@ -1281,7 +1463,6 @@ def run_gui() -> int:
self.search.setEnabled(not busy)
self.cat.setEnabled(not busy)
- # ── backup akciók ─────────────────────────────────────────────────────
def _bk_browse(self):
path, _ = QFileDialog.getSaveFileName(
self, tr("filedialog_caption"), str(Path.home()), "Tar archive (*.tar.gz)")
@@ -1365,7 +1546,6 @@ def run_gui() -> int:
self.bk_log.appendPlainText(f"\n{tr('bk_result_ok') if ok else tr('bk_result_err')}: {msg}")
self._bk_set_busy(False)
- # ── alkalmazás bootstrap ─────────────────────────────────────────────────
if shutil.which("hyprctl"):
subprocess.run(
["hyprctl", "keyword", "windowrulev2",
@@ -1390,9 +1570,6 @@ def run_gui() -> int:
return app.exec()
-# ─────────────────────────────────────────────────────────────────────────────
-# CLI rész
-# ─────────────────────────────────────────────────────────────────────────────
def _resolve(names, catalog):
by = {a["name"].lower(): a for a in catalog}
@@ -1425,9 +1602,6 @@ def cli_action(names, catalog, install: bool):
print("Nincs végrehajtható lépés.")
return 1
- # sudo -S jelszo nelkul a stdin pipe nyitva marad iras/EOF nelkul,
- # es a folyamat orokre lefagy - a GUI-nak van jelszo dialogja, a
- # CLI-nek eddig nem volt.
password = ""
if os.geteuid() != 0 and any(
len(cmd) >= 2 and cmd[0] == "sudo" and cmd[1] == "-S" for _, cmd in steps
@@ -1457,7 +1631,6 @@ def main():
cli_mode = args.list or args.installed or args.install or args.remove
if not cli_mode:
- # GUI-t user-ként indítsd (Wayland) - root GUI ne!
if os.geteuid() == 0:
print("Figyelem: a GUI-t NE rootként indítsd. "
"Futtasd sima userként, a jogot pkexec kéri majd.")
diff --git a/raveos-app-installer/raveos-secureboot-setup b/raveos-app-installer/raveos-secureboot-setup
new file mode 100644
index 0000000..a02b046
--- /dev/null
+++ b/raveos-app-installer/raveos-secureboot-setup
@@ -0,0 +1,313 @@
+#!/bin/bash
+set -u
+
+GLOBAL_GUID="8be4df61-93ca-11d2-aa0d-00e098032b8c"
+DB_GUID="d719b2cb-3d3a-4596-a3bc-dad00e67656f"
+
+SB_DIR=/usr/share/raveos/secureboot
+MS="$SB_DIR/ms"
+MACHINE_DIR=/etc/raveos/secureboot
+STATE=/var/lib/raveos-sb
+RESUME_UNIT=raveos-sb-resume.service
+WORK=""
+
+log() { echo "[raveos-sb] $*"; }
+
+cleanup() { [ -n "$WORK" ] && rm -rf "$WORK"; }
+trap cleanup EXIT
+
+efi_var() {
+ od -An -t u1 /sys/firmware/efi/efivars/"$1"-* 2>/dev/null | awk '{print $5}'
+}
+
+status_cmd() {
+ if [ ! -d /sys/firmware/efi/efivars ]; then
+ log "Nem UEFI rendszer - Secure Boot nem elerheto."
+ return 1
+ fi
+ local sb sm keys tools signed
+ sb=$(efi_var SecureBoot)
+ sm=$(efi_var SetupMode)
+ keys=0
+ [ -f "$MACHINE_DIR/machine.pem" ] && keys=1
+ tools=0
+ command -v sbsign >/dev/null 2>&1 && tools=1
+ signed=0
+ if [ "$keys" = "1" ] && command -v sbverify >/dev/null 2>&1; then
+ signed=1
+ for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-*; do
+ [ -f "$f" ] || continue
+ sbverify --cert "$MACHINE_DIR/machine.pem" "$f" >/dev/null 2>&1 || signed=0
+ done
+ fi
+ echo "uefi=1"
+ echo "secureboot=${sb:-?}"
+ echo "setupmode=${sm:-?}"
+ echo "keys=$keys"
+ echo "tools=$tools"
+ echo "signed=$signed"
+ if [ -f "$STATE/pending" ]; then echo "pending=1"; else echo "pending=0"; fi
+ log "SecureBoot=${sb:-?} SetupMode=${sm:-?} gepkulcs=$keys alairasok=$signed"
+}
+
+deps_cmd() {
+ local need=()
+ local p
+ for p in sbsigntools efitools openssl zstd; do
+ pacman -Qq "$p" >/dev/null 2>&1 || need+=("$p")
+ done
+ if [ "${#need[@]}" -gt 0 ]; then
+ log "Hianyzo eszkozok telepitese: ${need[*]}"
+ pacman -S --noconfirm "${need[@]}" || return 1
+ fi
+}
+
+keygen_cmd() {
+ if [ -f "$MACHINE_DIR/machine.key" ]; then
+ log "A gepkulcs mar letezik."
+ return 0
+ fi
+ install -d -m 711 "$MACHINE_DIR"
+ openssl req -newkey rsa:2048 -nodes -keyout "$MACHINE_DIR/machine.key" -x509 -days 3650 \
+ -out "$MACHINE_DIR/machine.pem" \
+ -subj "/O=RaveOS/CN=RaveOS Machine Key" \
+ -addext "basicConstraints=critical,CA:TRUE" \
+ -addext "keyUsage=critical,digitalSignature,keyCertSign,cRLSign" \
+ -addext "extendedKeyUsage=codeSigning" 2>/dev/null || {
+ log "HIBA: gepkulcs generalas sikertelen"
+ return 1
+ }
+ chmod 600 "$MACHINE_DIR/machine.key"
+ chmod 644 "$MACHINE_DIR/machine.pem"
+ log "Gepkulcs generalva: CN=RaveOS Machine Key"
+}
+
+signfile_path() {
+ local c
+ for c in /usr/lib/modules/*/build/scripts/sign-file /usr/src/linux/scripts/sign-file; do
+ [ -x "$c" ] && { echo "$c"; return 0; }
+ done
+ return 1
+}
+
+sign_one() {
+ local key="$1" cert="$2" f="$3"
+ sbverify --cert "$cert" "$f" >/dev/null 2>&1 && return 0
+ if sbsign --key "$key" --cert "$cert" --output "$f.signed" "$f" 2>/dev/null; then
+ mv "$f.signed" "$f"
+ log "alairva: $f"
+ return 0
+ fi
+ log "FIGYELEM: nem sikerult alairni: $f"
+ return 1
+}
+
+sign_cmd() {
+ command -v sbsign >/dev/null 2>&1 || { log "HIBA: sbsign nem elerheto"; return 1; }
+ local key="$MACHINE_DIR/machine.key" cert="$MACHINE_DIR/machine.pem"
+ local n=0 f signfile t
+ for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-* /boot/memtest86+/memtest.efi; do
+ [ -f "$f" ] || continue
+ sign_one "$key" "$cert" "$f" && n=$((n + 1))
+ done
+ signfile=$(signfile_path) || signfile=""
+ if [ -n "$signfile" ]; then
+ install -m 755 "$signfile" /usr/local/bin/raveos-sign-file
+ local d sub m
+ for d in /usr/lib/modules/*/; do
+ for sub in extramodules updates/dkms extras; do
+ [ -d "${d}${sub}" ] || continue
+ while IFS= read -r -d '' m; do
+ if modinfo -F signer "$m" 2>/dev/null | grep -q "RaveOS Machine Key"; then
+ continue
+ fi
+ case "$m" in
+ *.ko)
+ /usr/local/bin/raveos-sign-file sha512 "$key" "$cert" "$m" >/dev/null 2>&1 && n=$((n + 1))
+ ;;
+ *.ko.zst)
+ t=$(mktemp -d)
+ if zstd -q -d -c "$m" > "$t/m.ko" 2>/dev/null &&
+ /usr/local/bin/raveos-sign-file sha512 "$key" "$cert" "$t/m.ko" >/dev/null 2>&1 &&
+ zstd -q -f -o "$m" "$t/m.ko" 2>/dev/null; then
+ n=$((n + 1))
+ fi
+ rm -rf "$t"
+ ;;
+ esac
+ done < <(find "${d}${sub}" -type f \( -name '*.ko' -o -name '*.ko.zst' \) -print0 2>/dev/null)
+ done
+ done
+ else
+ log "FIGYELEM: sign-file nem talalhato (kernel-headers nelkul a modulok kimaradnak)"
+ fi
+ log "Alairt elemek: $n"
+}
+
+hook_cmd() {
+ install -d -m 755 /usr/local/bin /etc/pacman.d/hooks
+ install -m 755 "$SB_DIR/installed/raveos-sb-sign-local.sh" /usr/local/bin/raveos-sb-sign-local.sh
+ install -m 644 "$SB_DIR/installed/zz-raveos-sb-sign.hook" /etc/pacman.d/hooks/zz-raveos-sb-sign.hook
+ log "Pacman hook + helyi alairo telepitve."
+}
+
+verify_cmd() {
+ local cert="$MACHINE_DIR/machine.pem" bad=0 f
+ for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-*; do
+ [ -f "$f" ] || continue
+ sbverify --cert "$cert" "$f" >/dev/null 2>&1 || { bad=1; log "NINCS alairva: $f"; }
+ done
+ [ "$bad" = "0" ] && log "Alairas-ellenorzes: rendben."
+ if command -v efi-readvar >/dev/null 2>&1; then
+ log "Firmware db tartalom:"
+ efi-readvar -v db 2>/dev/null | grep -E "CN *=|O *=" | head -14
+ fi
+}
+
+cert_to_esl() {
+ cert-to-efi-sig-list "$1" "$2" 2>/dev/null || return 1
+ local sz
+ sz=$(stat -c %s "$2" 2>/dev/null || echo 0)
+ [ "$sz" -gt 100 ]
+}
+
+build_db_esl() {
+ local out="$1" f
+ cert_to_esl "$SB_DIR/db.pem" "$WORK/raveos-db.esl" || return 1
+ cert_to_esl "$MACHINE_DIR/machine.pem" "$WORK/machine.esl" || return 1
+ cat "$WORK/raveos-db.esl" > "$out"
+ for f in "$MS/MicCorUEFCA2011_2011-06-27.pem" "$MS/MicWinProPCA2011_2011-10-19.pem" \
+ "$MS/microsoft uefi ca 2023.pem" "$MS/windows uefi ca 2023.pem" \
+ "$MS/microsoft option rom uefi ca 2023.pem"; do
+ [ -f "$f" ] || continue
+ cert_to_esl "$f" "$WORK/ms-extra.esl" && cat "$WORK/ms-extra.esl" >> "$out"
+ done
+ cat "$WORK/machine.esl" >> "$out"
+}
+
+build_kek_esl() {
+ local out="$1" f
+ cert_to_esl "$SB_DIR/KEK.pem" "$WORK/raveos-kek.esl" || return 1
+ cat "$WORK/raveos-kek.esl" > "$out"
+ for f in "$MS/MicCorKEKCA2011_2011-06-24.pem" "$MS/microsoft corporation kek 2k ca 2023.pem"; do
+ [ -f "$f" ] || continue
+ cert_to_esl "$f" "$WORK/ms-extra.esl" && cat "$WORK/ms-extra.esl" >> "$out"
+ done
+}
+
+clear_var() {
+ local name="$1" guid="$2" f
+ f="/sys/firmware/efi/efivars/${name}-${guid}"
+ [ -e "$f" ] || return 0
+ chattr -i "$f" 2>/dev/null || true
+ rm -f "$f" 2>/dev/null || log "FIGYELEM: ${name} regi valtozo torlese nem sikerult"
+}
+
+enroll_cmd() {
+ local sm t
+ sm=$(efi_var SetupMode)
+ if [ "${sm:-0}" != "1" ]; then
+ log "A firmware nincs Setup Mode-ban."
+ return 10
+ fi
+ for t in cert-to-efi-sig-list efi-updatevar; do
+ command -v "$t" >/dev/null 2>&1 || { log "HIBA: $t nem elerheto (efitools)"; return 1; }
+ done
+ [ -f "$SB_DIR/PK.auth" ] || { log "HIBA: hianyzik a PK.auth"; return 1; }
+
+ WORK=$(mktemp -d)
+ build_db_esl "$WORK/db.esl" || { log "HIBA: db ESL epites"; return 1; }
+ build_kek_esl "$WORK/KEK.esl" || { log "HIBA: KEK ESL epites"; return 1; }
+
+ log "Meglevo PK/KEK/db valtozok torlese..."
+ clear_var PK "$GLOBAL_GUID"
+ clear_var KEK "$GLOBAL_GUID"
+ clear_var db "$DB_GUID"
+
+ log "db irasa (RaveOS + Microsoft + gepkulcs)..."
+ efi-updatevar -e -f "$WORK/db.esl" db || { log "HIBA: db iras"; return 1; }
+
+ log "KEK irasa (RaveOS + Microsoft)..."
+ efi-updatevar -e -f "$WORK/KEK.esl" KEK || { log "HIBA: KEK iras"; return 1; }
+
+ log "PK irasa (elore alairt PK.auth)..."
+ efi-updatevar -f "$SB_DIR/PK.auth" PK || { log "HIBA: PK iras"; return 1; }
+
+ log "Kulcsok telepitve a firmware-be."
+}
+
+setup_cmd() {
+ status_cmd || return 1
+ log "FIGYELEM (BitLocker): ha a Windowson BitLocker van, elotte inditsd el a Windowst es futtasd:"
+ log " manage-bde -protectors -disable C: -rebootcount 2"
+ log " vagy legyen keznel a 48 jegyu helyreallitasi kulcs."
+ deps_cmd || return 1
+ keygen_cmd || return 1
+ sign_cmd || return 1
+ hook_cmd || return 1
+ install -d -m 755 "$STATE"
+ local rc
+ enroll_cmd
+ rc=$?
+ if [ "$rc" = "0" ]; then
+ verify_cmd
+ rm -f "$STATE/pending"
+ log "KESZ. A BIOS-ban allitsd: Secure Boot -> Enabled, majd ujrainditas."
+ return 0
+ fi
+ if [ "$rc" = "10" ]; then
+ install -m 644 "$SB_DIR/installed/raveos-sb-resume.service" /etc/systemd/system/"$RESUME_UNIT"
+ systemctl daemon-reload
+ systemctl enable "$RESUME_UNIT" >/dev/null 2>&1
+ touch "$STATE/pending"
+ log "A BIOS-ban: Secure Boot -> Key Management -> Clear Secure Boot keys (Setup Mode),"
+ log "ments, majd inditsd ujra a gepet. Boot utan a folyamat magatol befejezodik."
+ return 10
+ fi
+ return "$rc"
+}
+
+resume_cmd() {
+ [ -f "$STATE/pending" ] || exit 0
+ if enroll_cmd; then
+ verify_cmd
+ rm -f "$STATE/pending"
+ date -Is > "$STATE/done"
+ systemctl disable "$RESUME_UNIT" >/dev/null 2>&1
+ log "Secure Boot beallitas befejezve. A BIOS-ban: Secure Boot -> Enabled."
+ exit 0
+ fi
+ exit 1
+}
+
+need_root() {
+ if [ "$(id -u)" != "0" ]; then
+ echo "[raveos-sb] Root jogosultsag szukseges." >&2
+ exit 1
+ fi
+}
+
+case "${1:-}" in
+ --status)
+ status_cmd
+ ;;
+ --verify)
+ verify_cmd
+ ;;
+ --setup)
+ need_root
+ setup_cmd
+ ;;
+ --resume)
+ need_root
+ resume_cmd
+ ;;
+ --resign)
+ need_root
+ keygen_cmd && sign_cmd && verify_cmd
+ ;;
+ *)
+ echo "hasznalat: raveos-secureboot-setup --status|--setup|--resume|--resign|--verify" >&2
+ exit 2
+ ;;
+esac
diff --git a/raveos-app-installer/secureboot/KEK.pem b/raveos-app-installer/secureboot/KEK.pem
new file mode 100644
index 0000000..5a49691
--- /dev/null
+++ b/raveos-app-installer/secureboot/KEK.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVzCCAj+gAwIBAgIUcKsPl6DDusNNC3vQNBhvFjw+vIwwDQYJKoZIhvcNAQEL
+BQAwMzEPMA0GA1UECgwGUmF2ZU9TMSAwHgYDVQQDDBdSYXZlT1MgS2V5IEV4Y2hh
+bmdlIEtleTAeFw0yNjEwMDIyMTU5MTNaFw0zNjA5MjkyMTU5MTNaMDMxDzANBgNV
+BAoMBlJhdmVPUzEgMB4GA1UEAwwXUmF2ZU9TIEtleSBFeGNoYW5nZSBLZXkwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrz7sOnYkci8zut/0BmGbdftPk
+3cSBn3/rOaY4RMgQ8gsntAQRRnOp1NHsu87/9u0qk+n4qgqX/EZBRYZozfEI3Xu5
+4h0LbZwsOFItaellUEw+Jfviz1ZCGj6cPRqtS/rZNMd2/6qdFc+hnz4FjRHX6cYM
+WWuYBhUgjSbGncsh0qWg0BLVzwniD9rO/NQ7nCP2ZNnkllG9HRffIFzJjmP1/DfN
+jXorb4egi7EFPFFgddB4wM6DeXd8GhosJD1ilW2W2Ww8Xu/R9IXTSOefG3sZLZKf
+jaj7kmYNmkRrr0aQ2pSwC4lDsba7Yob6zsuDMyPjbSiPqTzZ12RXV7UdKN47AgMB
+AAGjYzBhMB0GA1UdDgQWBBTVBDvn/UGvO9uqzh6Yb7Lw59LvhzAfBgNVHSMEGDAW
+gBTVBDvn/UGvO9uqzh6Yb7Lw59LvhzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEAFhnk0GsalDm66gp+yrWTiP/9vVny
+RD3RdryYxTcpPAjRAmmAdgPGE6IxX5cfkgYw+OdvBmDJah4p9Z945NF3Emjm3xlY
+2RmDI4IGeBTBKKt03cx69fdvUyuQAqx9mBoGywolUk3mWi8LK2YLU0NPuKCuduw1
+UFw5NEkwJg9Awo0YKTZHxMrHkftXY5CAUi6H0VeYJlpMiaRPInEYIYJuMVEWFaL4
+wsFC6pTHwYsMH9yrijzcMQ2PSZeZi8jGPCG4LifVzv/VwHxgwvK9Byy5yVvFvVCT
+h2A0T27Qxf23Xbu/wh/rgaM/cSg8gsFidqyTEyeCEDYyxSIk1lzsuT+zrw==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/PK.auth b/raveos-app-installer/secureboot/PK.auth
new file mode 100644
index 0000000..b546b2c
--- /dev/null
+++ b/raveos-app-installer/secureboot/PK.auth
Binary files differ
diff --git a/raveos-app-installer/secureboot/PK.pem b/raveos-app-installer/secureboot/PK.pem
new file mode 100644
index 0000000..558c178
--- /dev/null
+++ b/raveos-app-installer/secureboot/PK.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTzCCAjegAwIBAgIUTwsILq1KfHS0nLE9ylandBBWErcwDQYJKoZIhvcNAQEL
+BQAwLzEPMA0GA1UECgwGUmF2ZU9TMRwwGgYDVQQDDBNSYXZlT1MgUGxhdGZvcm0g
+S2V5MB4XDTI2MTAwMjIxNTkxM1oXDTM2MDkyOTIxNTkxM1owLzEPMA0GA1UECgwG
+UmF2ZU9TMRwwGgYDVQQDDBNSYXZlT1MgUGxhdGZvcm0gS2V5MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0BfhuL/qkkT2w52O+lDV1UebAJvWT1six9MJ
+pbxbO8NVhvQnwSK2mixYhvfOQVctW7ww7pN6eFk3e/j3IyWUHDhUZbwA4/4d6TpM
+MJQoLkfNN/Xa5+eNKWGFaOQOQ+qDAPy9rNYvqHPCS8f9pEOsLFW7vhlTsmtr3qeX
+E2rLXPVdQmLuzsKTvHbKWbI4ofxqBU44TAU0FVXAaC5OWDSwYuRwr0WZgFXxnn2e
+G4qA7/Uix8esq6eLR+mYDK63w2iMnraHmXiCcK5W+2jDflkns87EeKRJpWAqleUI
+L3LDotB/TzjM59Nx5QFAGho42qMS46ea8oluAXZTs+lWSFdd3wIDAQABo2MwYTAd
+BgNVHQ4EFgQUtFZf8lEVkLs+PQe3U3LFwExzuTkwHwYDVR0jBBgwFoAUtFZf8lEV
+kLs+PQe3U3LFwExzuTkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw
+DQYJKoZIhvcNAQELBQADggEBAA6zG2QTdZUsgKrhLMabO5exce7yGuhsFB0uRe2F
+ooa6RfswSRe4QNUdnAcLNsqSNMRAJ4Pboz7bi2zp4QPkZh92EADG/UWUXQJEzl25
+s8QsIJAr88Qf1fXG07kz0JBBh1A7MzoSaNZ4JLdoovAFkZuG7pHIT4VxnqpzYS2c
+0w2EqPtqubTzPqt6wZ191QtPp1Jif6WL95VapGVpqGzQKo6msirdNcGrIX0JR7Lm
+CrmIkh5HogWYzY3YYmEbjbM5uK0019NZg5vAmLCy6P6SHq5+feUd1ae02EfW0FTa
+udszl9fXtWlmoioffvRvpZ7VBXXPnXv7Ca6nDxgEVAjNYgg=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/db.pem b/raveos-app-installer/secureboot/db.pem
new file mode 100644
index 0000000..c9ed693
--- /dev/null
+++ b/raveos-app-installer/secureboot/db.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDYjCCAkqgAwIBAgIUapoezG6LBdbRhKoNniRol3q6Ui4wDQYJKoZIhvcNAQEL
+BQAwLjEPMA0GA1UECgwGUmF2ZU9TMRswGQYDVQQDDBJSYXZlT1MgU2VjdXJlIEJv
+b3QwHhcNMjYxMDAyMjE1OTEzWhcNMzYwOTI5MjE1OTEzWjAuMQ8wDQYDVQQKDAZS
+YXZlT1MxGzAZBgNVBAMMElJhdmVPUyBTZWN1cmUgQm9vdDCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAJjE+etmu0Ev7chkgiih4D2AZ02+W9xzp+t8dEBC
+P1Sw4xXXG56jBvPzDC48F4u4GZLu/DSDMfpXqg6AvVVaXRXE48E2hIRMCshoLjId
+xkl+cGFQ2KvGo+hFItftq8IV1hU0zqtKfxa+eygklim1bjhB6jBsm9bjstbQ/fl3
+j2vPw1yTmpwgx6NgfFLtrXeZ1KGKIAo/kImiqStPyh5cWH72CSG6ppYYiaW5sx+j
+f0IqHsyllX/Hoii4NXjAmmTeRXk0c8Mj8B8RZBAx9V3m144j5+z2jRbvYElWxmwU
+k1m6VA9x3UZXZxiJ9BwwaL+8TK9UNS8QhOZ+BF5rQjbaeScCAwEAAaN4MHYwHQYD
+VR0OBBYEFI/b7ftnyYNFrGMT/WFuwopejtdYMB8GA1UdIwQYMBaAFI/b7ftnyYNF
+rGMT/WFuwopejtdYMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMBMG
+A1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQATWkIFkjetX/eQ
+Mas/kADYYOeOcTZ/N4ha56aDYicEs2g+jUGSzUBvELhBLLM0TVIn/Qrej175sBox
+icwtQJuIUJdZauF8tf217JT+NFRjwAaW7DGdQpeMTLSP5ijhD1XoX8Yp0/00bJiK
+/ZjP1CWCgYlJYJyKmU8a0cPPvTWMaL8e8mT/yHvzVrBfUyJrZh9wWJmnym43Rt8X
+IuMkuORXy32873J3KOYhVZLZ+o//LDfpAzohDagZaFM5oiXKG24P/mbSAN6HQuki
+Q5qh4lr5P4afJPdjiA41sT8Tz/xhRlAGF06KfUXcWKX5qA8+HSb5lo0EapEWEQWC
+KPLgKAk1
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/installed/raveos-sb-resume.service b/raveos-app-installer/secureboot/installed/raveos-sb-resume.service
new file mode 100644
index 0000000..d6005b6
--- /dev/null
+++ b/raveos-app-installer/secureboot/installed/raveos-sb-resume.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=RaveOS Secure Boot beallitas befejezese
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/raveos-secureboot-setup --resume
+[Install]
+WantedBy=multi-user.target
diff --git a/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh b/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh
new file mode 100755
index 0000000..af20118
--- /dev/null
+++ b/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+set -u
+
+KEY=/etc/raveos/secureboot/machine.key
+CERT=/etc/raveos/secureboot/machine.pem
+SIGNFILE=/usr/local/bin/raveos-sign-file
+[[ -f "$KEY" && -f "$CERT" ]] || exit 0
+command -v sbsign >/dev/null 2>&1 || exit 0
+
+signed=0
+
+for f in /boot/vmlinuz-* /boot/memtest86+/memtest.efi /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI; do
+ [[ -f "$f" ]] || continue
+ case "$f" in *.signed) continue ;; esac
+ if sbverify --cert "$CERT" "$f" >/dev/null 2>&1; then
+ continue
+ fi
+ if sbsign --key "$KEY" --cert "$CERT" --output "${f}.signed" "$f" 2>/dev/null; then
+ mv "${f}.signed" "$f"
+ signed=$((signed + 1))
+ fi
+done
+
+if [[ -x "$SIGNFILE" ]]; then
+ for d in /usr/lib/modules/*/; do
+ for sub in extramodules updates/dkms extras; do
+ [[ -d "${d}${sub}" ]] || continue
+ while IFS= read -r -d '' f; do
+ modinfo -F signer "$f" 2>/dev/null | grep -q "RaveOS Machine Key" && continue
+ case "$f" in
+ *.ko)
+ "$SIGNFILE" sha512 "$KEY" "$CERT" "$f" >/dev/null 2>&1 && signed=$((signed + 1))
+ ;;
+ *.ko.zst)
+ tmp="$(mktemp -d)"
+ if zstd -q -d -c "$f" > "$tmp/m.ko" 2>/dev/null &&
+ "$SIGNFILE" sha512 "$KEY" "$CERT" "$tmp/m.ko" >/dev/null 2>&1 &&
+ zstd -q -f -o "$f" "$tmp/m.ko" 2>/dev/null; then
+ signed=$((signed + 1))
+ fi
+ rm -rf "$tmp"
+ ;;
+ esac
+ done < <(find "${d}${sub}" -type f \( -name '*.ko' -o -name '*.ko.zst' \) -print0 2>/dev/null)
+ done
+ done
+fi
+
+[ "$signed" -gt 0 ] && echo "[raveos-sb] $signed fajl ujraalairva"
+exit 0
diff --git a/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook b/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook
new file mode 100644
index 0000000..cf64ee2
--- /dev/null
+++ b/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook
@@ -0,0 +1,17 @@
+[Trigger]
+Operation = Install
+Operation = Upgrade
+Type = Package
+Target = linux-cachyos
+Target = linux
+Target = nvidia
+Target = nvidia-dkms
+Target = nvidia-open
+Target = nvidia-open-dkms
+Target = systemd
+Target = dkms
+
+[Action]
+Description = RaveOS Secure Boot: bootlanc + out-of-tree modulok ujraalairasa...
+When = PostTransaction
+Exec = /usr/local/bin/raveos-sb-sign-local.sh
diff --git a/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem b/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem
new file mode 100644
index 0000000..37c814a
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkG
+A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9z
+b2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcN
+MTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzAR
+BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
+Y3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0
+aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+xOi1ir+tVyawJsPq5/tXekQCXQcN2krldCrmsA/sbevsf7njWmMyfBEXTw7jC6c4
+FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX/IhU+PIIbO/i/hn/+C
+wO3pzc70U2piOgtDueIl/f4F+dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC/l
+me4kiwPsjfKL6sNK+0MREgt+tUeSbNzmBInr9TME6xABKnHl+YMTPP8lCS9odkb/
+uk++3K1xKliq+w7SeT3km2U7zCkqn/xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGv
+eUCEeYd/41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAw
+HQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoA
+UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQY
+MBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6
+Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBh
+ck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUH
+MAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhp
+UGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1
+FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJn
+vveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr/pvbNFaE
+7ILKrkElcJxr6f6QD9eWH+XnlB+yKgyNS/8oKRB799d8pdF2uQXIee0PkJKcwv7f
+b35sD3vUwUXdNFGWOQ/lXlbYGAWW9AemQrOgd/0IGfJxVsyfhiOkh8um/Vh+1Gln
+FZF+gfJ/E+UNi4o8h4Tr4869Q+WtLYSTjmorWnxE+lKqgcgtHLvgUt8AEfiaPcFg
+sOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv/Y0uvDm25+bD4OTNJ4TvlELvKYuQ
+RkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk/FBBQHngLU8Kaid2blLtlml7rw/3hwXQ
+RcKtUxSBH/swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx
+/fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01
+D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX+MoU
+rgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS/ng==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem b/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem
new file mode 100644
index 0000000..d7c29ef
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGEDCCA/igAwIBAgIKYQjTxAAAAAAABDANBgkqhkiG9w0BAQsFADCBkTELMAkG
+A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9z
+b2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcN
+MTEwNjI3MjEyMjQ1WhcNMjYwNjI3MjEzMjQ1WjCBgTELMAkGA1UEBhMCVVMxEzAR
+BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
+Y3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IENvcnBvcmF0
+aW9uIFVFRkkgQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKUIbEzHRQlqSwykwId/BnUMQwFUZOAWfwftkn0LsnO/DArGSkVhoMUWLZbT9Sug
++01Jm0GAkDy5VP3mvNGdxKQYin9BilxZg2gyu4xHye5xvCFPmop8/0Q/jY8ysiZI
+rnW17slMHkoZfuSCmh14d00MsL32D9MW07z6K6VROF31+7rbeALb/+wKG5bVg7gZ
+E+m2wHtAe+EfKCfJ+u9WXhzmfpR+wPBEsnk55dqyYotNvzhw4mgkFMkzpAg31Vhp
+XtN87cEEUwjnTrAqh2MIYW9jFVnqsit51wxhZ4pb/V6th3+6hmdPcVgSIgQiIs6L
+71RxAM5QNVh2lQjuarGiAdUCAwEAAaOCAXYwggFyMBIGCSsGAQQBgjcVAQQFAgMB
+AAEwIwYJKwYBBAGCNxUCBBYEFPjBa7d/d1NK8yU3HU6hJnsPIHCAMB0GA1UdDgQW
+BBQTrb9DCb2CcJyM1U8xbtUimIob1DAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
+QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRFZlJD
+4X5YEb/WTp4jVQg7OiJqqDBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vY3JsLm1p
+Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb3JUaGlQYXJNYXJSb29f
+MjAxMC0xMC0wNS5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRw
+Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvclRoaVBhck1hclJv
+b18yMDEwLTEwLTA1LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANQhC/zDMzvd2DK0Q
+aFg1KUYydid87xJBJ0IbSqptgThIWRNV8+lYNKYWC4KqXa2C2oCDQQaPtB3yA7nz
+Gl0b8VCQ+bNVhEIoHCC9sq5RFMXArJeVIRyQ2w/8d56Vc5GIyr29UrkFUA3fV56g
+Ye0N5W0l2UAPF0DIzqNKwk2vmhIdCFSPvce8uSs9SSsfMvxqIWlPm8h+QjT8NgYX
+i48gQMCzmiV1J83JA6P2XdHnNlR6uVC10xLRB7+7dN/cHo+A1e0Y9C8UFmsv3maM
+sCPlx4TY7erBM4KtVksYLfFolQfNz/By8K673YaFmCwhTDMr8A9K8GiHtZJVMnWh
+aoJqPKMlEaTtrdcErsvYQFmghNGVTGKRIhp0HYw9Rw5EpuSwmzQ1sfq2U6gsgeyk
+BXHInbi66BtEZuRHVA6OVn+znxaYsobQaD6QI7UvXo9QhY3GjYJfQaH0Lg3gmdJs
+deS2abUhhvoH0fbiTdHarSx3Ux4lMjfHbFJylYaw8TVhahn1sjuBUFamMi3+oon5
+QoYnGFWhgspam/gwmFQUpkeWJS/IJuRBlBpcAj/lluOFWzw+P7tHFnJV4iUisdl7
+5wMGKqP3HpBGwwAN1hmJ4w41J2IDcRWm79AnoKBZN2D4OJS44Hhw+LpMhoeU9uCu
+AkXuZcK2o35pFnUHkpv1prxZg1g=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem b/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem
new file mode 100644
index 0000000..0390d2a
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF1zCCA7+gAwIBAgIKYQd2VgAAAAAACDANBgkqhkiG9w0BAQsFADCBiDELMAkG
+A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9z
+b2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTExMDE5MTg0
+MTQyWhcNMjYxMDE5MTg1MTQyWjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
+b3Jwb3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlv
+biBQQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0Mu6Lk
+Lgnj58X3lmm8ACG9aTMz760Ey1SA7gaDu8UghNn30ovzOLCrpK0tfGJ5Bf/jSj8E
+NSBw48Tna+CcwDZ16Yox3Y1w5dw3tXRGlihbh2AjLL/cR6Vn91EnnnLrB6bJuR47
+UzV85dPsJ7mHHP65ySMJb6hGkcFuljxB08ujP10Cak3saR8lKFw2//1DFQqU4Bm0
+z9/CEuLCWyfuJ3gwi1sqCWsiiVNgFizAaB1TuuxJ851hjIVoCXNEXX2iVCvdefcV
+zzVdbBwrXM68nCOLb261Jtk2E8NP1ieuuTI7QZIs4cfNd+iqVE73XAsEh2W0Qxio
+suBtGXfsWiT6SAMCAwEAAaOCAUMwggE/MBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud
+DgQWBBSpKQI5jhbEl3jNkPmeT5rhfFWvUzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi
+AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV
+9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
+Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx
+MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v
+d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2
+LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAFPx8cVGlecJusu85Prw8Ug9uKz8Q
+E3P+qGjQSKY0TYqWBSbuMUaQYXnW/zguRWv0wOUouNodj4rbCdcax0wKNmZqjOwb
+1wSQqBgXpJu54kAyNnbEwVrGv+QEwOoW06zDaO9irN1UbFAwWKbrfP6Up06O9Ox8
+hnNXwlIhczRa86OKVsgE2gcJ7fiL4870fo6u8PYLigj7P8kdcn9TuOu+Y+DjPTFl
+sIHl8qzNFqSfPaixm8JC0JCEX1Qd/4nquh1HkG+wc05Bn0CfX+WhKrIRkXOKISjw
+zt5zOV8+q1xg7N8DEKjTCen09paFtn9RiGZHGY2isBI9gSpoBXe7kUxie7bBB8e6
+eoc0Aw5LYnqZ6cr8zko3yS2kV3wc/j3cuA9a+tbEswKFAjrqs9lu5GkhN96B0fZ1
+GQVn05NXXikbOcjuLeHN5EVzW9DSznqrFhmCRljQXp2Bs2evbDXyvOU/JOI1ogp1
+BvYYVpnUeCzRBRvr0IgBnaoQ8QXfun4sY7cGmyMhxPl4bOJYFwY2K5ESA8yk2fIt
+uvmUnUDtGEXxzopcaz6rA9NwGCoKauBfR9HVYwoy8q/XNh8qcFrlQlkIcUtXun6D
+gfAhPPQcwcW5kJMOiEWThumxIJm+mMvFlaRdYtagYwggvXUQd30980W5n5efy1eA
+bzOpBM93pGIcWX4=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem
new file mode 100644
index 0000000..771d8ad
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFsjCCA5qgAwIBAgITMwAAABMUFrhhbYKCSwAAAAAAEzANBgkqhkiG9w0BAQsF
+ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
+DTIzMDMwMjIwMjEzNVoXDTM4MDMwMjIwMzEzNVowXDELMAkGA1UEBhMCVVMxHjAc
+BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UEAxMkTWljcm9zb2Z0
+IENvcnBvcmF0aW9uIEtFSyAySyBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA416Ii3MswwrE6fXOgS3xD/EmNTfRSVNxsVuTUq/hFd/eizm9
+r0xldVPl2goymC8zJrYrvpSZn+zawo4FNJITD2O/dKJyqCl+nzIhKQhZxHfEKpJM
+h7YDN+ua4sPJtEghw2GU6hdRsecU4iRjLtXyxqXyol4facZRDacp+1IKm+OI6Gj/
+u/qSaa/EFv9d5V/g3+xmVQthwqw7IG7ftA3rK8jQwjROgpY57vExhQQ979Z2+8PK
+wdWMLwsQKJtImrAQFKTZlOVoW81u53rsvKBJuKlT2E0vsnvI2ryy5/yrcBB3lUVJ
+/a3SPxfLZpryfTbdCiziwIchLZPbCJbS6FxU4QIDAQABo4IBbTCCAWkwDgYDVR0P
+AQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTgq3K8lj7/uGab
+fRBaQz5cQlSHXzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8E
+BTADAQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwRe
+MFwwWqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p
+Y3Jvc29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDBy
+BggrBgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0
+LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJv
+b3QlMjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCFAgYS+meuTzmp
+uDTcXSp4GXs47pyCjxviPD0yCl6/WAbnb/iNGKgbhPWbyq2LCEQOJo0s2F9uIyUH
++ltMJi52MUMubujIMcFK0vICt6bxdeSW7QbiypV4RKgzdtQrTde83Ic7q00prZaJ
+t9XCj6tGw12z/e2lnvV2tyuF/5ihn2scmz737g4Xo/02L+HNKJgcQJkmygONpjXq
+0gqnixauIQEAHicPtw6yQjFWLub4juoMNPBO33AwaQTRz9OcZEZvzCHNy+8FMrsI
+ptifRThdTtKckonpc+R6CDUeT6bCums+tx9UNEn6tHrL2qAfWYErKvaIJrD6bPLr
+wdiuQeFv/L8T6G4U5+fHA4tAmRA4Bm1wvQHI3o1WHTgPTyOoJUDeuygtQ6+kvCCD
+tQb5BSGfO7l5DXBrU8B1whsQE7Pkbwmoz9G3DnFct8mP5RzwE1XZk7muXT/KC7BZ
+akVKw+HjJ3gNFoH8WC2xQboYDc/w76sIHk/4/Mb9S90d7zAlUDmj3/4/ufrrlpfQ
+zfkEJvsNSBkI2OGTwVDHbm3Y0GuOlXJkUMntVYluwUuiBtQytaltZQF68VJXGAUw
+XLgoZhG3evBxToZhYHptVsdbCT6i79QOnpLTH5n2nbEdeHhr/+gqBK94Zz7wKgun
+4F0B6YeZNTCQ7ddFa5zM5qLk5hen3Q==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem
new file mode 100644
index 0000000..139ca44
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFrzCCA5egAwIBAgITMwAAABez7E2PAeJwBQAAAAAAFzANBgkqhkiG9w0BAQsF
+ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
+DTIzMTAyNjE5MDIyMFoXDTM4MTAyNjE5MTIyMFowWTELMAkGA1UEBhMCVVMxHjAc
+BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0
+IE9wdGlvbiBST00gVUVGSSBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEA0wv+ic3Ntu7c5RqN3MohGg8iLwu1MoQ1wL5vcJNVtEfMSQPC/s+6
+MmVktzW9BDtEZC+g8t3hXbrnvTmavctL4YOqG+hvTkyRUkOlxFBVaPXarEiinOw1
+pwRWaBnisWLUkvSFPzShFWeHIW4fydg1Mrg9y1jKKUNUSn6LVXsjejq2nUMHBGua
+a/TwIP/6pt+inknoVcV1iESspEE6A3y76ZPkbPHteSbHizL3WUklMQBnGAxn+0DF
+XXY9CYfCLYxfK1oeAQ8zr2UIkE/8ZFuco1zWUxtRAZ+Yz8RTxbHfs2hvRUvIRYXI
+Hbie0XdxoNWid4fsZy65hwZG3UFDQGpfLwIDAQABo4IBbTCCAWkwDgYDVR0PAQH/
+BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRRT7+Tf6RvtXvwevi+
+2Es7hksXETAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwReMFww
+WqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jv
+c29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDByBggr
+BgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
+bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJvb3Ql
+MjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKS4D8cbGH3QaLJBDR
+dvgQ5GU0obuBCH1w1BUk+ZA7SG9uTiP+hVPsopkfieQ0vtCYr/H4LfNH0bUyZJ7e
+csAXfoEgesFfkfVOOqZ7adnQ1vD6gGPFwERn04snYcHl3FGZbiPJKRj+Nb1FIawP
++WDiD9FfcA+SK1hOz6xkLwlz7VAIyOGFc0AsMam0tiNLwBk7/RX408t0VM3au30E
+hZ9wFXX5t/RhS/7kn0UO9YLpxfN4u6pq4fe7hZIrr0u1J06aySlvDsjSZGObXRQG
+zHh/5BLdluOcBELsF/qSIafe9WmPILJk8z8Vo1GvJ2+3YlevdBfsq7HuqFDvr4OC
+q2EEeT9JjEBWwDyv+ypaGR6q5i5nJCGsM/DXSosKJDAQplI+Hcj8kZyHG/qG4Z5r
+5QlhdaijOV/in2wOhSHmvXal6kWDaB4vNr/gaIpCzh+4jeFg5pOK7rpKrbNJTO6j
+A8mnooZxnIEBZ2kP3oBV1sDecoXARmDwzmAqiAiNnDDrqYtA82ElCeHhgjIEpSn4
+WewmtsjXI/AL02xjatov0tOlJZqaXqX9AqXsopCBaD49RY58BbIu6pkBRf0JMJQm
+10os/n2CRDNDVctaQ9KSkv5OR8ZJPzUbIZxq2oL8ZDf7J+r0MN9l7ND8UAE4auzc
+Ufb17psmzO5t/i9WDjroOCKOqg==
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem
new file mode 100644
index 0000000..5c7ad84
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgITMwAAABY2vzaJnxV1zAAAAAAAFjANBgkqhkiG9w0BAQsF
+ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
+DTIzMDYxMzE5MjE0N1oXDTM4MDYxMzE5MzE0N1owTjELMAkGA1UEBhMCVVMxHjAc
+BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEfMB0GA1UEAxMWTWljcm9zb2Z0
+IFVFRkkgQ0EgMjAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0i
+Kq7vGjGFE3hRp5v9/HjRY7gam2P1EgbbS0E1am+r9WoEzJfPu9QICRphOg3ms6BG
+/wmt3oAk3BKA8l/ZFu3iQp3NL01hAmGKHEsdGGI5hpdxrT5/XXETS+kqAMG+1bcA
+n15lsiwa/3Tt6oPSOYkzNXN9oKL6QORmUFiq/IfoXCCDNOyr4gvFXz7/SCsRkSbv
+GG5XxZ8Yc5nv4Wp0K7svf1COHdo9drYE5cwuEMeDG4Oj5KUTE3FuM3ijqDzsSCZe
+x8ZeDYeaqsxVNIGtnZD15pZjpugHIBfIkx7SrqTcrn1Zv4heYgyuW/IpQFYdJkDe
+haatVtHPVUd2X5w52wMCAwEAAaOCAW0wggFpMA4GA1UdDwEB/wQEAwIBhjAQBgkr
+BgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUgaprMkTJNbzg1mKK85gnQh4ySX0wGQYJ
+KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
+GDAWgBSERIYGAJg/LKqzxYnzrC7J5p0JAzBlBgNVHR8EXjBcMFqgWKBWhlRodHRw
+Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBSU0El
+MjBEZXZpY2VzJTIwUm9vdCUyMENBJTIwMjAyMS5jcmwwcgYIKwYBBQUHAQEEZjBk
+MGIGCCsGAQUFBzAChlZodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl
+cnRzL01pY3Jvc29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIx
+LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAB2ATKlOHEg8a81oUlRfl2NeVVJuLDt2R
+pe3HXUdQk0W3lYhfFxlBY3a1grCoxZ2ZFTaJSb4Swmb7gwywgc7lpKvCoJrr9Qc8
+/iH4mtwZIQyeJCzRXKIWCkvr7EicsVt02wFkwuOAaqsazXcbajmat7pwRP9nlMWB
+BvDLgQSTJyGZvYeIFJwicQ4LL1y+uJBUfMAevCubo1YXS5fn438TNPqwNGub9rIt
+99h72CDTXKeVTE8q+eceaK/8bI/Ihj2fyNHvTRrI0fb9LXzj6EHB6ifB+44lhlqJ
+phC+zuOPpXvEGqDodZD9IbDBo8UWI148zi/+jJi/CFz2ucWyPLbMyOx/0nd0y+3z
+lsmLjRwqiQ+jj73OKoVGmiOij0LAmdbqhR9hGb4WNbd1oJWAZQaH1As1yMSqDs6i
+CmNgyksrXCcEgq8+WIN6WthnPxBT9QwW9yZLioC5xR+g3tjTYUQURaf1q5qIF/23
+lFQCi+S3U6E+jZ5QgqgA4HiUG76zxDAfsg7b8EaQweZX/nzBcLIcS2TZEAMbNPtm
+z4JunkCoETfyZYshCa88k2I987yD3T9VkBXSMa8R5/jKoILhuc+zV5PHVTesf0G/
+H5Y88yaU+djSVSSKirZB8OAWwCOSjHEKTGoNGVX3OpySIZah1fgKjJ2/yevKiEL8
+S7Tv/ycwIWE=
+-----END CERTIFICATE-----
diff --git a/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem
new file mode 100644
index 0000000..9ba1c75
--- /dev/null
+++ b/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFqjCCA5KgAwIBAgITMwAAABqIi5gAViKEwQAAAAAAGjANBgkqhkiG9w0BAQsF
+ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE
+AxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcN
+MjMwNjEzMTg1ODI5WhcNMzUwNjEzMTkwODI5WjBMMQswCQYDVQQGEwJVUzEeMBwG
+A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR0wGwYDVQQDExRXaW5kb3dzIFVF
+RkkgQ0EgMjAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyyNdFU
+ebSPzIEqbrMS1pOXMHw4XL95khkKDy0K/r/gqNgyP9Krb2+BwU0XaUXPhYAno3yz
+Mcylp035Q9BaL9cYG9JYlgU5o5W3vN15waDPj+JTHismYqgcrjYeT6HfuRO6DCW7
+JGVnAaodQRC3NsFrLrVsENNOltCfKqHx7aEVC4KVxf9jihO1kjQeMV5hEa5dzPEQ
+5kx5yXKyNIqCVi2rD3zAT5OOWXVBhqwJEAnyUWVQtfUhsyY5jarEkbPcrGQjBs01
+Xw1CSZxPDc6Ag4JZ/t9LROFAyD1jts+0Qg05XNJCEAwIwnTrHNxuvAqsmLvM+h48
+p4MWxdsC2tmW32sCAwEAAaOCAUYwggFCMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEE
+AYI3FQEEAwIBADAdBgNVHQ4EFgQUrvxfu74FXY+NqlhUc0mUF6taUnIwGQYJKwYB
+BAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAW
+gBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
+Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRf
+MjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
+Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEw
+LTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAn8m2/27hnDtV9v6LOd1hBG/Q
+rWPNF3ZKqEOJjfjG8oxekOHkaKUV7LjTYAxAVx/7XjVyYd6XMWx5oPUWrksc7QEM
+7/dXD0IwGGn4oaMul5K4vhv+K4ZeQkIRj45wTZCn/QFj8mS/m+J7CIHPSfI3F9/x
++XLTwx3DkEVN5oAGvf3lamnOs35OMVuEc6jocj8nNcl8IM4Am0/gTLQ2acv3NBER
+dBJ6qIwugWymUK0Z+qhGRW+xZ3PDa+NA6CppjyQQ4SlujRaI7o5/ZpMCb1ueBIzM
+gRytl1TxGC5+UpC8Ud4qDq5m6rxkbqCRZOQvEqi852u6xxubeRpkZvFDtNHDRiE4
+gXlM+vAxDdN5/3oSpR3Z3ayiD3GC95P/XKFhrmXyFIHteVqah+pge8uzT3U0yrqh
+76L2ooBFoYsngc3Vdzg+yk7dKOpYusWgKd6GjIj8lSdR3avT0FsNd8dsj1XX1KIO
+W+Q0RhQWHeMc1m2ZrUzscXMvq86ytCneVTBTOToyi/DqnIgSOwVoGb/Ph1IQ+9YT
+YPNBZPQIV4HLnRGljvTlJ/WjOuzkPUq3zvmIDZ+9ym3SSrxYdo4yBJRu3fTPbUdt
+wtdq3Idx6qS/72eXnLjHgDYqKlnJwAynRKBztYzPOFqu+LuGlfBErWZ6M+1x5EWH
+g+WnzqJA0HLSSAD6+Ro=
+-----END CERTIFICATE-----
diff --git a/raveos-calamares-module/PKGBUILD b/raveos-calamares-module/PKGBUILD
index 6a128e9..2b0aedd 100644
--- a/raveos-calamares-module/PKGBUILD
+++ b/raveos-calamares-module/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: nippy <nippy@tuta.io>
pkgname=raveos-calamares-module
pkgver=2.0.0
-pkgrel=34
+pkgrel=35
pkgdesc="RaveOS Calamares modules: Wi-Fi, Welcome, Desktop Selector, Users"
arch=('x86_64')
options=('!debug')
@@ -9,7 +9,7 @@ url="https://git.rp1.hu/RaveOS"
license=('GPL')
makedepends=('cmake' 'qt6-tools' 'kcoreaddons' 'calamares' 'libxcrypt')
-depends=('qt6-base' 'qt6-declarative' 'networkmanager' 'xorg-setxkbmap')
+depends=('qt6-base' 'qt6-declarative' 'networkmanager' 'xorg-setxkbmap' 'calamares')
source=()
sha256sums=()
diff --git a/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp
index 2c2691f..b856a90 100644
--- a/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp
+++ b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp
@@ -114,7 +114,6 @@ void DesktopSelectViewStep::onLeave()
if (!m_backend || m_backend->selectedIndex() < 0)
return;
- // Merge mandatory + selected desktop packages, deduplicated
QStringList combined = m_mandatoryPackages + m_backend->selectedPackages();
QStringList unique;
QSet<QString> seen;
diff --git a/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp b/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp
index 86ab549..c2d58c7 100644
--- a/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp
+++ b/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp
@@ -20,7 +20,6 @@
CALAMARES_PLUGIN_FACTORY_DEFINITION(RaveWelcomeViewStepFactory, registerPlugin<RaveWelcomeViewStep>();)
-// Widget that paints the background image scaled to fill (like Image.Stretch)
class BgWidget : public QWidget
{
public:
@@ -43,7 +42,6 @@ private:
RaveWelcomeViewStep::RaveWelcomeViewStep(QObject* parent)
: Calamares::ViewStep(parent)
{
- // Default languages if not set via config
m_localeIds = { "de", "en", "en_GB", "hu" };
}
@@ -98,7 +96,6 @@ void RaveWelcomeViewStep::buildWidget()
auto* bg = new BgWidget();
bg->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- // Load welcome image from branding
QString imgPath;
if (Calamares::Branding::instance())
imgPath = Calamares::Branding::instance()->imagePath(Calamares::Branding::ProductWelcome);
@@ -106,7 +103,6 @@ void RaveWelcomeViewStep::buildWidget()
if (!imgPath.isEmpty())
bg->setPixmap(QPixmap(imgPath));
- // Bottom language bar
auto* bar = new QFrame();
bar->setObjectName("ravewelcomeBar");
bar->setFixedHeight(58);
@@ -116,11 +112,9 @@ void RaveWelcomeViewStep::buildWidget()
m_langCombo->setFixedHeight(40);
m_langCombo->setMinimumWidth(300);
- // Populate language model
auto* model = new Calamares::Locale::TranslationsModel(m_localeIds, m_langCombo);
m_langCombo->setModel(model);
- // Select current locale
QLocale sys = QLocale::system();
QString sysName = sys.name();
m_currentLocaleIndex = 0;
@@ -132,15 +126,12 @@ void RaveWelcomeViewStep::buildWidget()
break;
}
}
- // Default to "en"
int enIdx = m_localeIds.indexOf("en");
if (enIdx >= 0 && m_currentLocaleIndex == 0 && m_localeIds[0] != "en")
m_currentLocaleIndex = enIdx;
m_langCombo->setCurrentIndex(m_currentLocaleIndex);
- // Make the live keyboard layout match the initial language right away,
- // so the WiFi password input is not stuck on the boot default (US).
applyLiveKeyboardLayout(m_localeIds.value(m_currentLocaleIndex));
connect(m_langCombo, QOverload<int>::of(&QComboBox::activated),
@@ -176,9 +167,6 @@ void RaveWelcomeViewStep::onLanguageChanged(int index)
m_currentLocaleIndex = index;
QString localeId = m_localeIds[index];
- // Store locale in GlobalStorage for the installed system.
- // A localecfg a teljes localeConf-ot olvassa, ezért minden LC_* kulcsot
- // beírunk, ne csak a LANG-ot.
if (Calamares::JobQueue::instance())
{
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
@@ -199,18 +187,13 @@ void RaveWelcomeViewStep::onLanguageChanged(int index)
localeConf.insert(QLatin1String(k), fullLocale);
gs->insert("localeConf", localeConf);
- // A 'locale' kulcs is kell (nyelv, kódolás nélkül), ha a standard
- // locale modul mégis olvasná.
gs->insert("locale", lang);
}
}
- // Install new translator - this changes the entire Calamares UI language
Calamares::Locale::Translation::Id tid { localeId };
Calamares::installTranslator(tid, brandingTranslationsPrefix());
- // Apply the matching live keyboard layout immediately, so the WiFi
- // password input follows the selected language (before the keyboard page).
applyLiveKeyboardLayout(localeId);
}
@@ -237,9 +220,6 @@ void RaveWelcomeViewStep::applyLiveKeyboardLayout(const QString& localeId)
layout = QStringLiteral("gb");
}
- // Best effort: apply the layout to the running X11 session so the WiFi
- // password input matches the selected language immediately. A missing
- // setxkbmap or non-X11 session must not break the installer.
const QStringList args { QStringLiteral("-layout"), layout };
QProcess::startDetached(QStringLiteral("setxkbmap"), args);
}
diff --git a/raveos-calamares-module/wifi/NetworkManager.cpp b/raveos-calamares-module/wifi/NetworkManager.cpp
index 8274e1a..cb88698 100644
--- a/raveos-calamares-module/wifi/NetworkManager.cpp
+++ b/raveos-calamares-module/wifi/NetworkManager.cpp
@@ -13,10 +13,8 @@
#include <QTextStream>
#include <QDateTime>
-// NetworkManager expects a{sa{sv}} type for connection settings
typedef QMap<QString, QVariantMap> NMConnectionSettings;
-// Log file path
static const QString LOG_FILE = "/tmp/calamares-wifi.log";
static void wifiLog(const QString& message)
@@ -24,7 +22,6 @@ static void wifiLog(const QString& message)
QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
QString logLine = QString("[%1] %2\n").arg(timestamp, message);
- // Write to file
QFile file(LOG_FILE);
if (file.open(QIODevice::Append | QIODevice::Text))
{
@@ -33,17 +30,14 @@ static void wifiLog(const QString& message)
file.close();
}
- // Also print to debug output
qDebug().noquote() << "[WiFi Module]" << message;
}
NetworkManager::NetworkManager(QObject* parent)
: QObject(parent)
{
- // Register the custom DBus type
qDBusRegisterMetaType<NMConnectionSettings>();
- // Clear log file on start
QFile file(LOG_FILE);
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
@@ -56,7 +50,6 @@ NetworkManager::NetworkManager(QObject* parent)
scan();
updateConnectionState();
- // Periodic connection state update
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &NetworkManager::updateConnectionState);
timer->start(3000);
@@ -88,7 +81,6 @@ void NetworkManager::updateConnectionState()
bool newState = false;
- // Method 1: Check PrimaryConnection
QDBusObjectPath primary =
nm.property("PrimaryConnection").value<QDBusObjectPath>();
@@ -97,7 +89,6 @@ void NetworkManager::updateConnectionState()
newState = true;
}
- // Method 2: Check if any WiFi device is in activated state (100)
if (!newState)
{
QDBusReply<QList<QDBusObjectPath>> devices = nm.call("GetDevices");
@@ -118,7 +109,6 @@ void NetworkManager::updateConnectionState()
"DeviceType"
);
- // DeviceType 2 = WiFi
if (typeReply.isValid() && typeReply.value().toUInt() == 2)
{
QDBusReply<QVariant> stateReply = devProps.call(
@@ -127,7 +117,6 @@ void NetworkManager::updateConnectionState()
"State"
);
- // State 100 = NM_DEVICE_STATE_ACTIVATED
if (stateReply.isValid())
{
uint state = stateReply.value().toUInt();
@@ -184,7 +173,6 @@ void NetworkManager::scan()
bool foundWireless = false;
for (const auto& dev : devices.value())
{
- // Check DeviceType first - type 2 = WiFi
QDBusInterface devProps(
"org.freedesktop.NetworkManager",
dev.path(),
@@ -207,7 +195,6 @@ void NetworkManager::scan()
foundWireless = true;
wifiLog(QString("Found wireless device: %1").arg(dev.path()));
- // Now use the Wireless interface for scanning
QDBusInterface wirelessIf(
"org.freedesktop.NetworkManager",
dev.path(),
@@ -215,7 +202,6 @@ void NetworkManager::scan()
QDBusConnection::systemBus()
);
- // Request a new scan - this is async
QDBusMessage reply = wirelessIf.call("RequestScan", QVariantMap());
if (reply.type() == QDBusMessage::ErrorMessage) {
wifiLog(QString("Scan request failed: %1").arg(reply.errorMessage()));
@@ -228,7 +214,6 @@ void NetworkManager::scan()
wifiLog("No wireless devices found!");
}
- // Wait for scan to complete, then fetch results
QTimer::singleShot(2000, this, &NetworkManager::fetchAccessPoints);
}
@@ -262,7 +247,6 @@ void NetworkManager::fetchAccessPoints()
for (const auto& dev : devices.value())
{
- // Check DeviceType first - type 2 = WiFi
QDBusInterface devProps(
"org.freedesktop.NetworkManager",
dev.path(),
@@ -308,7 +292,6 @@ void NetworkManager::fetchAccessPoints()
QByteArray ssidRaw = apIf.property("Ssid").toByteArray();
QString ssid = QString::fromUtf8(ssidRaw);
- // Get frequency to show 2.4G vs 5G
uint frequency = apIf.property("Frequency").toUInt();
QString band = (frequency > 4000) ? "5GHz" : "2.4GHz";
@@ -319,7 +302,6 @@ void NetworkManager::fetchAccessPoints()
}
}
- // Sort networks alphabetically
m_networks.sort(Qt::CaseInsensitive);
wifiLog(QString("Total networks found: %1").arg(m_networks.size()));
@@ -343,7 +325,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
return;
}
- // Find the wireless device
QDBusReply<QList<QDBusObjectPath>> devices = nm.call("GetDevices");
if (!devices.isValid())
{
@@ -372,13 +353,11 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
"DeviceType"
);
- // DeviceType 2 = WiFi
if (typeReply.isValid() && typeReply.value().toUInt() == 2)
{
wirelessDevice = dev;
wifiLog(QString("Using wireless device: %1").arg(dev.path()));
- // Find the access point for this SSID
QDBusInterface wirelessIf(
"org.freedesktop.NetworkManager",
dev.path(),
@@ -402,7 +381,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
if (QString::fromUtf8(apSsid) == ssid)
{
accessPoint = ap;
- // Get security flags from AP
apFlags = apIf.property("Flags").toUInt();
apWpaFlags = apIf.property("WpaFlags").toUInt();
apRsnFlags = apIf.property("RsnFlags").toUInt();
@@ -423,25 +401,17 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
return;
}
- // Determine security type from AP flags
- // NM_802_11_AP_SEC flags:
- // 0x100 = KEY_MGMT_PSK (WPA/WPA2 Personal)
- // 0x200 = KEY_MGMT_802_1X (WPA/WPA2 Enterprise)
- // 0x400 = KEY_MGMT_SAE (WPA3)
- // 0x800 = KEY_MGMT_OWE (Enhanced Open)
bool apSupportsPsk = ((apWpaFlags & 0x100) != 0) || ((apRsnFlags & 0x100) != 0);
bool apSupportsSae = (apRsnFlags & 0x400) != 0; // WPA3
bool apSupportsEnterprise = ((apWpaFlags & 0x200) != 0) || ((apRsnFlags & 0x200) != 0);
bool apIsOpen = (apFlags == 0) && (apWpaFlags == 0) && (apRsnFlags == 0);
- // Privacy flag (0x1) means network is secured (WEP or better)
bool apHasPrivacy = (apFlags & 0x1) != 0;
wifiLog(QString("Security detection: PSK=%1, SAE=%2, Enterprise=%3, Open=%4, Privacy=%5")
.arg(apSupportsPsk).arg(apSupportsSae).arg(apSupportsEnterprise).arg(apIsOpen).arg(apHasPrivacy));
- // Build connection settings using proper NM types
QVariantMap connection;
connection["type"] = QString("802-11-wireless");
connection["id"] = ssid;
@@ -451,7 +421,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
wifi["ssid"] = ssid.toUtf8();
wifi["mode"] = QString("infrastructure");
- // For hidden networks, we need to set hidden flag
bool isHiddenNetwork = (accessPoint.path() == "/" || accessPoint.path().isEmpty());
if (isHiddenNetwork)
{
@@ -459,7 +428,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
wifiLog("Treating as hidden network");
}
- // Build settings map
NMConnectionSettings settings;
settings["connection"] = connection;
@@ -471,28 +439,21 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
ipv6["method"] = QString("auto");
settings["ipv6"] = ipv6;
- // Determine and apply security settings based on AP capabilities
if (!password.isEmpty() && (apSupportsPsk || apSupportsSae || isHiddenNetwork))
{
- // Password provided and AP supports PSK or SAE (or it's hidden, assume PSK)
QVariantMap wifiSecurity;
if (apSupportsSae && !apSupportsPsk)
{
- // WPA3-only network
wifiLog("Using WPA3-SAE security");
wifiSecurity["key-mgmt"] = QString("sae");
wifiSecurity["psk"] = password;
- // PMF (Protected Management Frames) is MANDATORY for WPA3-SAE
- // 0 = default, 1 = disable, 2 = optional, 3 = required
wifiSecurity["pmf"] = 3;
}
else if (apSupportsPsk)
{
- // Check if this is WPA2/WPA3 transition mode (supports both PSK and SAE)
if (apSupportsSae)
{
- // Transition mode: prefer WPA3-SAE if available
wifiLog("Using WPA3-SAE (transition mode - both PSK and SAE available)");
wifiSecurity["key-mgmt"] = QString("sae");
wifiSecurity["psk"] = password;
@@ -500,7 +461,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
}
else
{
- // Pure WPA/WPA2-PSK network (most common)
wifiLog("Using WPA-PSK security");
wifiSecurity["key-mgmt"] = QString("wpa-psk");
wifiSecurity["psk"] = password;
@@ -508,7 +468,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
}
else if (isHiddenNetwork)
{
- // Hidden network with password - assume WPA-PSK
wifiLog("Hidden network with password, assuming WPA-PSK");
wifiSecurity["key-mgmt"] = QString("wpa-psk");
wifiSecurity["psk"] = password;
@@ -520,34 +479,28 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
}
else if (apSupportsEnterprise)
{
- // Enterprise networks require more complex configuration
wifiLog("WARNING: Enterprise (802.1X) networks are not supported by this simple connector");
return;
}
else if (apIsOpen || (!apHasPrivacy && !apSupportsPsk && !apSupportsSae))
{
- // Open network - no security settings needed
wifiLog("Connecting to open network (no security)");
settings["802-11-wireless"] = wifi;
}
else if (!password.isEmpty() && !apSupportsPsk && !apSupportsSae)
{
- // Password provided but AP doesn't support PSK/SAE
- // This is the error case from the log!
wifiLog("WARNING: Password provided but AP does not support PSK/SAE authentication!");
wifiLog("Attempting to connect as open network...");
settings["802-11-wireless"] = wifi;
}
else
{
- // Fallback - no password, assume open
wifiLog("No password provided, treating as open network");
settings["802-11-wireless"] = wifi;
}
wifiLog("Calling AddAndActivateConnection...");
- // Use AddAndActivateConnection with proper DBus argument
QDBusMessage msg = QDBusMessage::createMethodCall(
"org.freedesktop.NetworkManager",
"/org/freedesktop/NetworkManager",
@@ -555,7 +508,6 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
"AddAndActivateConnection"
);
- // Serialize settings properly for DBus
QDBusArgument settingsArg;
settingsArg.beginMap(QMetaType::fromType<QString>(), QMetaType::fromType<QVariantMap>());
for (auto it = settings.constBegin(); it != settings.constEnd(); ++it)
@@ -580,12 +532,10 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
else
{
wifiLog("Connection initiated successfully");
- // Save credentials for later use (to be saved to installed system)
m_lastConnectedSsid = ssid;
m_lastConnectedPassword = password;
wifiLog(QString("Stored credentials - SSID: '%1', Password length: %2").arg(m_lastConnectedSsid).arg(m_lastConnectedPassword.length()));
- // Determine and save security type
if (apSupportsSae && !apSupportsPsk)
{
m_lastSecurityType = "sae";
@@ -604,10 +554,7 @@ void NetworkManager::connectTo(const QString& ssid, const QString& password)
}
wifiLog(QString("Stored security type: '%1'").arg(m_lastSecurityType));
- // Note: WiFi persistence to installed system is disabled
- // Connection only works during installation
- // Check connection state multiple times (WPA3-SAE can be slow)
m_connectionCheckCount = 0;
startConnectionCheck();
}
@@ -626,7 +573,6 @@ void NetworkManager::startConnectionCheck()
return;
}
- // Retry up to 10 times (every 1 second = 10 seconds total)
if (m_connectionCheckCount < 10)
{
QTimer::singleShot(1000, this, &NetworkManager::startConnectionCheck);
diff --git a/raveos-calamares-module/wifi/NetworkManager.h b/raveos-calamares-module/wifi/NetworkManager.h
index ff9dbf2..dd58a9a 100644
--- a/raveos-calamares-module/wifi/NetworkManager.h
+++ b/raveos-calamares-module/wifi/NetworkManager.h
@@ -16,7 +16,6 @@ public:
QStringList networks() const;
bool isConnected() const;
- // Get the last connected network credentials (for saving to installed system)
QString lastConnectedSsid() const { return m_lastConnectedSsid; }
QString lastConnectedPassword() const { return m_lastConnectedPassword; }
QString lastSecurityType() const { return m_lastSecurityType; } // "wpa-psk" or "sae"
@@ -40,7 +39,6 @@ private:
QStringList m_networks;
bool m_connected = false;
- // Store credentials for saving to installed system
QString m_lastConnectedSsid;
QString m_lastConnectedPassword;
QString m_lastSecurityType; // "wpa-psk", "sae", or "" (open)
diff --git a/raveos-calamares-module/wifi/WifiViewStep.cpp b/raveos-calamares-module/wifi/WifiViewStep.cpp
index 5b55078..350bd43 100644
--- a/raveos-calamares-module/wifi/WifiViewStep.cpp
+++ b/raveos-calamares-module/wifi/WifiViewStep.cpp
@@ -121,23 +121,18 @@ bool WifiViewStep::isAtEnd() const
Calamares::JobList WifiViewStep::jobs() const
{
- // WiFi persistence disabled - connection only works during installation
- // The WiFi module only provides network connectivity for the installer
return Calamares::JobList();
}
void WifiViewStep::onActivate()
{
- // Force update locale from GlobalStorage
QString newLocale = getLocale();
m_locale = newLocale;
- // Update QML context property
if (m_quickWidget)
{
m_quickWidget->rootContext()->setContextProperty("systemLocale", m_locale);
- // Force QML to re-read the locale by calling a method on root object
QQuickItem* root = m_quickWidget->rootObject();
if (root)
{
@@ -145,13 +140,10 @@ void WifiViewStep::onActivate()
}
}
- // Start network check timer
m_networkCheckTimer->start(2000);
- // Check initial network state
m_lastNetworkState = hasActiveNetwork();
- // Auto-skip ONLY on first activation AND if there's network
if (m_firstActivation && m_lastNetworkState)
{
m_firstActivation = false;
@@ -159,13 +151,10 @@ void WifiViewStep::onActivate()
return;
}
- // Mark as no longer first activation
m_firstActivation = false;
- // Normal activation - show WiFi setup
m_networkManager->scan();
- // Emit initial state
emit nextStatusChanged(m_lastNetworkState);
}
@@ -225,9 +214,7 @@ QString WifiViewStep::getLocale() const
if (gs)
{
- // Check all possible locale keys that Calamares might use
- // Key 1: "locale" (direct string)
if (gs->contains("locale"))
{
QString loc = gs->value("locale").toString();
@@ -235,7 +222,6 @@ QString WifiViewStep::getLocale() const
return loc;
}
- // Key 2: "lang" (some modules use this)
if (gs->contains("lang"))
{
QString loc = gs->value("lang").toString();
@@ -243,7 +229,6 @@ QString WifiViewStep::getLocale() const
return loc;
}
- // Key 3: "language"
if (gs->contains("language"))
{
QString loc = gs->value("language").toString();
@@ -251,7 +236,6 @@ QString WifiViewStep::getLocale() const
return loc;
}
- // Key 4: "localeConf" map with LANG key
if (gs->contains("localeConf"))
{
QVariantMap localeConf = gs->value("localeConf").toMap();
@@ -263,7 +247,6 @@ QString WifiViewStep::getLocale() const
}
}
- // Key 5: Check for region-based locale
if (gs->contains("locationRegion"))
{
QString region = gs->value("locationRegion").toString();
@@ -273,12 +256,9 @@ QString WifiViewStep::getLocale() const
}
}
- // Key 6: "localeIndex" - welcome module sometimes stores index
- // We'd need to map this to actual locale
}
}
- // Fallback to system locale
return QLocale::system().name();
}
diff --git a/raveos-calamares-theme/PKGBUILD b/raveos-calamares-theme/PKGBUILD
index 3b6e7ab..86652d7 100644
--- a/raveos-calamares-theme/PKGBUILD
+++ b/raveos-calamares-theme/PKGBUILD
@@ -1,13 +1,13 @@
# Maintainer: nippy <nippy@tuta.io>
pkgname=raveos-calamares-theme
pkgver=2.0.0
-pkgrel=68
+pkgrel=69
pkgdesc="RaveOS Calamares Theme"
arch=('any')
url="https://git.rp1.hu/RaveOS"
license=('GPL')
+makedepends=('qt6-tools')
#depends=('calamares')
-# No external sources; files are expected to be present alongside the PKGBUILD
source=()
sha256sums=()
@@ -15,9 +15,8 @@ package() {
# Create the destination directory inside the package environment
install -d "${pkgdir}/etc"
- # Copy the contents of the local 'etc' directory (next to PKGBUILD) to the package
- # We use "${startdir}" to reference the directory containing the PKGBUILD
cp -r "${startdir}/etc/." "${pkgdir}/etc/"
+ find "${pkgdir}" -name ".DS_Store" -delete
install -Dm755 "${startdir}/etc/calamares/modules/calamares-microcode-fix.sh" \
"${pkgdir}/etc/calamares/modules/calamares-microcode-fix.sh"
@@ -28,7 +27,6 @@ package() {
install -Dm755 "${startdir}/etc/calamares/modules/raveos-chown-homes.sh" \
"${pkgdir}/etc/calamares/modules/raveos-chown-homes.sh"
- # Branding fordítások: .ts -> .qm (lrelease)
local lrelease_bin
lrelease_bin="$(command -v lrelease6 || command -v lrelease || echo /usr/lib/qt6/bin/lrelease)"
for ts in "${startdir}"/etc/calamares/branding/raveos/lang/calamares-raveos_*.ts; do
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/CURRENT b/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/CURRENT
deleted file mode 100644
index 7ed683d..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/LOCK b/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/LOCK
deleted file mode 100644
index e69de29..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/LOCK
+++ /dev/null
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/MANIFEST-000001 b/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/MANIFEST-000001
deleted file mode 100644
index 18e5cab..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/GCM Store/Encryption/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/000005.ldb b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/000005.ldb
deleted file mode 100644
index c0a88d6..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/000005.ldb
+++ /dev/null
Binary files differ
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/CURRENT b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/CURRENT
deleted file mode 100644
index 7ed683d..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/LOCK b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/LOCK
deleted file mode 100644
index e69de29..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/LOCK
+++ /dev/null
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/MANIFEST-000001 b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/MANIFEST-000001
deleted file mode 100644
index 3ee7649..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Local Storage/leveldb/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/CURRENT b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/CURRENT
deleted file mode 100755
index 7ed683d..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/CURRENT
+++ /dev/null
@@ -1 +0,0 @@
-MANIFEST-000001
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/LOCK b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/LOCK
deleted file mode 100755
index e69de29..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/LOCK
+++ /dev/null
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/MANIFEST-000001 b/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/MANIFEST-000001
deleted file mode 100755
index 18e5cab..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Default/Sync Data/LevelDB/MANIFEST-000001
+++ /dev/null
Binary files differ
diff --git a/raveos-calamares-theme/etc/calamares/brave-profile/Local State b/raveos-calamares-theme/etc/calamares/brave-profile/Local State
deleted file mode 100644
index 6221116..0000000
--- a/raveos-calamares-theme/etc/calamares/brave-profile/Local State
+++ /dev/null
@@ -1 +0,0 @@
-{"autofill":{"ablation_seed":"AZXVsIGW7us="},"brave":{"ad_block":{"checked_all_default_regions":true},"brave_search_conversion":{"already_churned":true},"core_metrics":{"pages_loaded":[{"day":1786312800.0,"value":2.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"enable_search_suggestions_by_default":true,"migrated_adblock_social_media_blocking_settings":true,"misc_metrics":{"brave_search_query_counts":{"any_navigation":true},"brave_search_report_frame_start_time":"13430846057347621","combined_search_study_frame_start_time":"13430846057347632","combined_search_study_search_made":true,"failed_https_upgrade_metric_added_time":"13426552800000000","last_doh_fallback":0,"media_session_active_process_time":"450000000","media_session_frame_start_time":"13430846057232046","media_session_playing_time":"0","menu_dismiss_storage":[{"day":1786312800.0,"value":2.0}],"menu_group_actions":{"browser_views":4.0},"menu_shown_storage":[{"day":1786312800.0,"value":6.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"nav_source_counts":{"top_sites_favorites":1,"total":2},"nav_source_report_frame_start_time":"13430846057347627","total_dns_requests":[{"day":1786312800.0,"value":32.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"uptime_frame_start_time_v2":"13430846057427398","uptime_sum":"414342363","weekly_uptime_storage":[{"day":1786312800.0,"value":408.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"new_tab_page":{"customize_p3a_usage":0,"p3a_new_tabs_created":[{"day":1786312800.0,"value":9.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"onboarding":{"last_shields_icon_highlighted_time":"13430846567528190"},"origin":{"free_tier_accepted":true,"policies_were_enforced":true,"purchase_validated":true},"p3a":{"notice_acknowledged":true},"referral":{"initialization":true,"promo_code":"BRV001"},"search":{"backup_results":{"last_view_height":921,"last_view_width":1608},"last_switch_report":"13430846922639013"},"sidebar":{"target_user_for_sidebar_enabled_test":false}},"brave_shields":{"p3a_usage":0},"breadcrumbs":{"enabled":false,"enabled_time":"13430846057297325"},"browser":{"first_run_finished":true,"whats_new":{"enabled_order":[]}},"hardware_acceleration_mode_previous":true,"legacy":{"profile":{"name":{"migrated":true}}},"local":{"password_hash_data_list":[]},"management":{"platform":{"last_log_time":"13430846057341258"}},"network_time":{"network_time_mapping":{"local":1.786372749129309e+12,"network":1.78637275e+12,"ticks":1760881923.0,"uncertainty":1223261.0}},"optimization_guide":{"model_execution":{"last_usage_by_feature":{}},"model_store_metadata":{},"on_device":{"last_version":"151.1.93.135","model_crash_count":0}},"os_crypt":{"portal":{"prev_desktop":"GNOME","prev_init_success":true}},"p3a":{"activation_dates":{},"custom_attributes":{"media_session_usage":"0","search_default":"other"}},"performance_intervention":{"last_daily_sample":"13430846057426803"},"policy":{"last_statistics_update":"13430846057296519"},"profile":{"info_cache":{"Default":{"active_time":1786372457.423897,"ai_subscription_tier":0,"avatar_icon":"chrome://theme/IDR_PROFILE_AVATAR_26","background_apps":false,"default_avatar_fill_color":-14737629,"default_avatar_stroke_color":-526345,"enterprise_label":"","force_signin_profile_locked":false,"gaia_id":"","is_consented_primary_account":false,"is_ephemeral":false,"is_using_default_avatar":true,"is_using_default_name":true,"managed_user_id":"","metrics_bucket_index":1,"name":"Personal","profile_color_seed":-4078337,"profile_highlight_color":-14737629,"serp_metrics":{"brave_search_engine":[{"day":1782086400.0,"value":1.0}],"google_search_engine":[],"other_search_engine":[]},"signin.with_credential_provider":false,"user_name":""}},"last_active_profiles":["Default"],"metrics":{"next_bucket_index":2},"profile_counts_reported":"13430846057298079","profiles_order":["Default"]},"session_id_generator_last_value":"744144003","signin":{"active_accounts_last_emitted":"13430846057231733"},"subresource_filter":{"ruleset_version":{"checksum":0,"content":"","format":0}},"tab_stats":{"discards_external":0,"discards_frozen":0,"discards_proactive":0,"discards_suggested":0,"discards_urgent":0,"last_daily_sample":"13430846057293858","max_tabs_per_window":2,"reloads_external":0,"reloads_frozen":0,"reloads_proactive":0,"reloads_suggested":0,"reloads_urgent":0,"total_tab_count_max":2,"window_count_max":1},"ukm":{"persisted_logs":[]},"uninstall_metrics":{"installation_date2":"1782154367"},"updateclientdata":{"apps":{"adcocjohghhfpidemphmcmlmhnfgikei":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.469","pf":"53c03b89-69c8-4e01-a7c7-3e2d264931b6","pv":"1.0.475"},"afalakplffnnnlkncjhbmahjfjhmlkal":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.1468","pf":"0b6666c5-d270-441f-9da0-502be3538c5a","pv":"1.0.1503"},"aoojcmojmmcbpfgoecoadbdpnagfchel":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.23","pf":"26e5e602-358c-4152-8cc2-c19180622adb","pv":"1.0.24"},"bfpgedeaaibpoidldhjcknekahbikncb":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.16863","pf":"a55c4105-9171-4c4d-9ffb-dd77a5ecad08","pv":"1.0.16874"},"cdbbhgbmjhfnhnmgeddbliobbofkgdhe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.19761","pf":"3b563fca-6ed0-4214-955e-2cde31e60990","pv":"1.0.19908"},"cemdlagocoimleflkfkjoihojfainiho":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"045b2476-4387-4d4a-a4a7-a927f432cdd7","pv":"1.0.119"},"dkpggglmbjhgjhachikgmohmecomjndo":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"11f5d842-511c-4b29-b3a7-c745e12eca8c","pv":"1.0.0"},"efniojlnjndmcbiieegkicadnoecjjef":{"cohort":"1:18ql:","cohortname":"Auto Stage3","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"529f8cdb-e88a-4c05-a107-7b32c7ede605","pv":"1738"},"ggkkehgbnfjpeggfpleeakpidbkibbmn":{"cohort":"1:ut9/1a0f:","cohortname":"M108 and Above","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"a966c7a8-01ad-4d44-b2bc-499dd8d0379e","pv":"2026.8.10.62"},"giekcmmlnklenlaomppkphknjmnnpneh":{"cohort":"1:j5l:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"68e29660-4e5c-476a-9df2-4ab5609a6837","pv":"7"},"gkboaolpopklhgplhaaiboijnklogmbc":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.92","pf":"637e0dec-18ab-4c68-8b8e-673923451f03","pv":"1.0.95"},"hfnkpimlhhgieaddgfemjhofmfblmnib":{"cohort":"1:287f:","cohortname":"Auto full","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"08755607-b47c-4507-b276-7e0d20b4c6d1","pv":"10706"},"iodkpdagapdfkphljnddpjlldadblomo":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.20458","pf":"4b5131c9-5159-4342-85b8-9cac7d2cb47b","pv":"1.0.21487"},"jamhcnnkihinmdlkakkaopbjbbcngflc":{"cohort":"1:wvr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"83349149-1b15-47a7-98cc-423150c9f434","pv":"120.0.6050.0"},"jflookgnkcckhobaglndicnbbgbonegd":{"cohort":"1:s7x:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"7f7dbae9-cedd-47ef-8436-09b0b1043ab0","pv":"3091"},"jmfhneobcdckobmonkfjkbknnjjnegoh":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"96e0b450-03c8-4c9d-9794-8f30e89125ed","pv":"1.0.0"},"khaoiebndkojlmppeemjhbpbandiljpe":{"cohort":"1:cux:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"1f6c2599-ba72-4da7-ac54-c3d124fc5abd","pv":"145.0.7584.0"},"kihnoaefogbkmblfimmibknnmkllbhlf":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.6038","pf":"3a6c7af8-9f85-4261-9931-2a6017fc3677","pv":"1.0.7064"},"laoigpblnllgcgjnjnllmfolckpjlhki":{"cohort":"1:10zr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.7.1652906823","pf":"486a20ef-2770-47a7-8e84-d3885356fd6b","pv":"1.1.0.3"},"mfddibmblmbccpadfndgakiopmmhebop":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.146","pf":"ecb74f41-79cb-4d47-b13f-7266767415ff","pv":"1.0.151"},"nlpaeekllejnmhoonlpcefpfnpbajbpe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.474","pf":"fdf405e3-c653-4583-8419-ddcebe0c86ef","pv":"1.0.523"},"obedbbhbpmojnkanicioggnmelmoomoc":{"cohort":"1:s6f:3cr3@0.025","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"ae14957e-6c26-4a07-979c-56bab97c3079","pv":"20251024.824731831.14"},"ojhpjlocmbogdgmfpkhlaaeamibhnphh":{"cohort":"1:w0x:","cohortname":"All users","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"04c2193a-f501-4e3a-8820-33ce4ce897bd","pv":"3"}}},"user_experience_metrics":{"consent_restructure_feature_state":false,"limited_entropy_randomization_source":"FE1EA34EA9F364323DD20A35BACD50D5","low_entropy_source3":7377,"pseudo_low_entropy_source":4436,"reporting_enabled":false,"session_id":2,"stability":{"browser_last_live_timestamp":"13430847055374029","exited_cleanly":true,"stats_buildtime":"1786293927","stats_version":"151.1.93.135-64-devel"}},"variations_compressed_seed":"safe_seed_content","variations_country":"hu","variations_crash_streak":0,"variations_failed_to_fetch_seed_streak":0,"variations_geo_level1":"","variations_last_fetch_time":"13430846349237474","variations_permanent_consistency_country":["151.1.93.135","hu"],"variations_safe_compressed_seed":"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","variations_safe_seed_date":"13430846058000000","variations_safe_seed_fetch_time":"13430846349237474","variations_safe_seed_locale":"hu","variations_safe_seed_milestone":151,"variations_safe_seed_permanent_consistency_country":"hu","variations_safe_seed_session_consistency_country":"hu","variations_safe_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_seed_date":"13430846350000000","variations_seed_milestone":151,"variations_seed_serial_number":"23d76df102c70f19dab8794bc52a53af","variations_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_sticky_studies":"","was":{"restarted":false}} \ No newline at end of file
diff --git a/raveos-calamares-theme/etc/calamares/modules/calamares-create-snapshots-subvol.sh b/raveos-calamares-theme/etc/calamares/modules/calamares-create-snapshots-subvol.sh
index 092b7b9..73aa002 100644
--- a/raveos-calamares-theme/etc/calamares/modules/calamares-create-snapshots-subvol.sh
+++ b/raveos-calamares-theme/etc/calamares/modules/calamares-create-snapshots-subvol.sh
@@ -3,12 +3,6 @@ set -e
echo ">>> [snapshots-subvol] Running INSIDE target system"
-# Calamares' partition module ignores our btrfsSubvolumes config here and
-# always creates its own hardcoded set (/home /root /srv /var/cache
-# /var/log /var/tmp as separate subvolumes) -- there's no ".snapshots"
-# subvolume among them, which grub-btrfs/Snapper need. Create it by hand
-# as a proper top-level (subvolid=5) sibling of the other subvolumes,
-# so snapshots of "/" don't recursively include the snapshot store itself.
ROOT_DEV="$(findmnt -no SOURCE / | sed 's/\[.*\]//')"
ROOT_FS="$(findmnt -no FSTYPE /)"
diff --git a/raveos-calamares-theme/etc/calamares/modules/calamares-gpu-drivers.sh b/raveos-calamares-theme/etc/calamares/modules/calamares-gpu-drivers.sh
index 22e59d7..462a289 100644
--- a/raveos-calamares-theme/etc/calamares/modules/calamares-gpu-drivers.sh
+++ b/raveos-calamares-theme/etc/calamares/modules/calamares-gpu-drivers.sh
@@ -19,7 +19,6 @@ if echo "$GPU_INFO" | grep -qi "Intel"; then
install_pkgs mesa vulkan-intel intel-media-driver
fi
-# AMD
if echo "$GPU_INFO" | grep -qi "AMD\|ATI"; then
echo ">>> [gpu] Installing AMD stack..."
install_pkgs mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader vulkan-tools mesa-utils
diff --git a/raveos-calamares-theme/etc/calamares/modules/calamares-normalize-subvolumes.sh b/raveos-calamares-theme/etc/calamares/modules/calamares-normalize-subvolumes.sh
index 83b42c4..8e68e50 100644
--- a/raveos-calamares-theme/etc/calamares/modules/calamares-normalize-subvolumes.sh
+++ b/raveos-calamares-theme/etc/calamares/modules/calamares-normalize-subvolumes.sh
@@ -11,12 +11,6 @@ if [ "$ROOT_FS" != "btrfs" ]; then
exit 0
fi
-# Calamares' partition module ignores our btrfsSubvolumes config entirely
-# and always creates its own hardcoded set: @, @home, @root, @srv, @cache,
-# @log, @tmp. We only want @, @home, @log, @pkg (just /var/cache/pacman/pkg,
-# not all of /var/cache) and @snapshots (created separately). Drop the rest
-# here, after everything else has already run, merging any content back
-# into the parent (@) subvolume first.
mkdir -p /mnt/topvol
mount -o subvolid=5 "${ROOT_DEV}" /mnt/topvol
@@ -40,8 +34,6 @@ for entry in "root:@root" "srv:@srv" "var/tmp:@tmp"; do
if findmnt -no SOURCE "$path" >/dev/null 2>&1; then
echo ">>> [subvol-normalize] Removing separate subvolume ${subvol} (${path})"
unmount_retry "$path"
- # $path is now a plain empty dir in @ again -- copy the old
- # subvolume's content back into it before deleting the subvolume.
if [ -d "/mnt/topvol/${subvol}" ] && ! findmnt -no SOURCE "$path" >/dev/null 2>&1; then
cp -a "/mnt/topvol/${subvol}/." "$path/" 2>/dev/null || true
btrfs subvolume delete "/mnt/topvol/${subvol}" || true
@@ -50,9 +42,6 @@ for entry in "root:@root" "srv:@srv" "var/tmp:@tmp"; do
sed -i "\#[[:space:]]${path}[[:space:]]#d" /etc/fstab
done
-# Narrow /var/cache: drop the whole-@cache subvolume (keep it as a plain
-# directory), and create a dedicated @pkg subvolume just for pacman's
-# package cache -- that's the only part of /var/cache archinstall separates.
if findmnt -no SOURCE /var/cache >/dev/null 2>&1; then
echo ">>> [subvol-normalize] Narrowing /var/cache -> only pacman/pkg as @pkg"
unmount_retry /var/cache
diff --git a/raveos-calamares-theme/etc/calamares/modules/netinstall-drivers.yaml b/raveos-calamares-theme/etc/calamares/modules/netinstall-drivers.yaml
index a5613a5..4e325fb 100644
--- a/raveos-calamares-theme/etc/calamares/modules/netinstall-drivers.yaml
+++ b/raveos-calamares-theme/etc/calamares/modules/netinstall-drivers.yaml
@@ -8,7 +8,7 @@
- name: "NVIDIA Driver"
selected: false
expanded: false
- exlusive: false
+ exclusive: false
packages:
- nvidia-open-dkms
- nvidia-utils
diff --git a/raveos-calamares-theme/etc/calamares/modules/raveos-chown-homes.sh b/raveos-calamares-theme/etc/calamares/modules/raveos-chown-homes.sh
index f271c05..c61e0d6 100755
--- a/raveos-calamares-theme/etc/calamares/modules/raveos-chown-homes.sh
+++ b/raveos-calamares-theme/etc/calamares/modules/raveos-chown-homes.sh
@@ -1,6 +1,4 @@
#!/bin/bash
-# RaveOS: célrendszer /home könyvtárainak rekurzív chown-ja a céluserhez.
-# A Calamares shellprocess-final (dontChroot: true) hívja, $1 = ${ROOT}.
set -euo pipefail
ROOT="${1:-}"
diff --git a/raveos-calamares-theme/etc/calamares/modules/raveos-copy-brave-profile.sh b/raveos-calamares-theme/etc/calamares/modules/raveos-copy-brave-profile.sh
index 59a24d6..29e4253 100755
--- a/raveos-calamares-theme/etc/calamares/modules/raveos-copy-brave-profile.sh
+++ b/raveos-calamares-theme/etc/calamares/modules/raveos-copy-brave-profile.sh
@@ -1,6 +1,4 @@
#!/usr/bin/env bash
-# RaveOS: Brave Origin profil másolása a céluser HOME-jába
-# A Calamares shellprocess (dontChroot: true) hívja, $1 = ${ROOT}.
set -euo pipefail
ROOT="${1:-}"
@@ -9,7 +7,6 @@ ROOT="${1:-}"
SRC="/etc/calamares/brave-profile"
[ -d "$SRC" ] || { echo "raveos-copy-brave-profile: forrás hiányzik ($SRC)"; exit 0; }
-# Céluser + UID:GID a target /etc/passwd-ből (nem a live rendszerből)
USERLINE=$(awk -F: '$3>=1000 && $3<60000 && $7 !~ /(nologin|false)/ {print; exit}' "$ROOT/etc/passwd")
[ -n "$USERLINE" ] || { echo "raveos-copy-brave-profile: nincs céluser"; exit 0; }
diff --git a/raveos-calamares-theme/etc/calamares/modules/shellprocess-before.conf b/raveos-calamares-theme/etc/calamares/modules/shellprocess-before.conf
index 2bb1194..4a9c1da 100644
--- a/raveos-calamares-theme/etc/calamares/modules/shellprocess-before.conf
+++ b/raveos-calamares-theme/etc/calamares/modules/shellprocess-before.conf
@@ -3,4 +3,3 @@ timeout: 999
script:
- "-/usr/bin/pacman -Sy --noconfirm chaotic-keyring"
- - "-/usr/bin/pacman -Syu --noconfirm"
diff --git a/raveos-calamares-theme/etc/calamares/modules/shellprocess-dkms.conf b/raveos-calamares-theme/etc/calamares/modules/shellprocess-dkms.conf
index be6d235..c0cd6da 100644
--- a/raveos-calamares-theme/etc/calamares/modules/shellprocess-dkms.conf
+++ b/raveos-calamares-theme/etc/calamares/modules/shellprocess-dkms.conf
@@ -1,4 +1,3 @@
-# DKMS modules install
dontChroot: false # run inside target chroot so DKMS builds against the installed kernel
timeout: 3600 # Give it plenty of time (1 hour) for slow downloads
diff --git a/raveos-calamares-theme/etc/calamares/modules/shellprocess-loader.conf b/raveos-calamares-theme/etc/calamares/modules/shellprocess-loader.conf
index 62fd87d..a65c6ef 100644
--- a/raveos-calamares-theme/etc/calamares/modules/shellprocess-loader.conf
+++ b/raveos-calamares-theme/etc/calamares/modules/shellprocess-loader.conf
@@ -1,29 +1,17 @@
dontChroot: true
timeout: 60
script:
- # 1. Copy across RaveOS bootloader, loader.conf, remove the other entry
- command: "cp -r /root/.loader.conf ${ROOT}/boot/loader/loader.conf || true"
- command: "rm -r ${ROOT}/boot/loader/entries/*cachyos* || true"
- # 2. Safety net: 95-raveos.install can silently produce a loader entry
- # with no root= (findmnt returns empty depending on chroot context
- # at kernel-install-hook time during pacstrap). Patch it here from
- # the by-now-correct /etc/fstab.
- command: "install -Dm755 /etc/calamares/modules/calamares-fix-bootentry.sh ${ROOT}/root/calamares-fix-bootentry.sh"
- command: "arch-chroot ${ROOT} /bin/bash /root/calamares-fix-bootentry.sh"
- command: "-rm ${ROOT}/root/calamares-fix-bootentry.sh"
- # 3. Calamares' btrfsSubvolumes config is silently ignored -- it always
- # creates its own hardcoded set (@, @home, @root, @srv, @cache, @log,
- # @tmp). Drop the ones we don't want (@root, @srv, @tmp) and narrow
- # @cache down to just /var/cache/pacman/pkg as @pkg.
- command: "install -Dm755 /etc/calamares/modules/calamares-normalize-subvolumes.sh ${ROOT}/root/calamares-normalize-subvolumes.sh"
- command: "arch-chroot ${ROOT} /bin/bash /root/calamares-normalize-subvolumes.sh"
- command: "-rm ${ROOT}/root/calamares-normalize-subvolumes.sh"
- # 4. Calamares' hardcoded btrfs subvolume layout has no .snapshots --
- # create it by hand (needed by grub-btrfs/Snapper).
- command: "install -Dm755 /etc/calamares/modules/calamares-create-snapshots-subvol.sh ${ROOT}/root/calamares-create-snapshots-subvol.sh"
- command: "arch-chroot ${ROOT} /bin/bash /root/calamares-create-snapshots-subvol.sh"
- command: "-rm ${ROOT}/root/calamares-create-snapshots-subvol.sh"
- # - command: "install -Dm755 /etc/calamares/modules/calamares-microcode-fix.sh ${ROOT}/root/calamares-microcode-fix.sh"
diff --git a/raveos-calamares-theme/etc/calamares/modules/shellprocess-supporters.conf b/raveos-calamares-theme/etc/calamares/modules/shellprocess-supporters.conf
index 2f6c6d8..6f5ac7e 100644
--- a/raveos-calamares-theme/etc/calamares/modules/shellprocess-supporters.conf
+++ b/raveos-calamares-theme/etc/calamares/modules/shellprocess-supporters.conf
@@ -2,8 +2,5 @@ dontChroot: true
timeout: 20
script:
- # RaveOS: fetch the fresh supporters list (if online). Validated steps:
- # download -> check "var names" and "]" -> replace. On any error the
- # packaged list stays (|| true).
- command: "curl -fsSL --max-time 10 https://page.rp1.hu/supporters.js?t=$(date +%s) -o /tmp/raveos_supporters.js && grep -q 'var names' /tmp/raveos_supporters.js && grep -q ']' /tmp/raveos_supporters.js && cp /tmp/raveos_supporters.js /etc/calamares/branding/raveos/supporters.js || true"
name: "Downloading supporters list..."
diff --git a/raveos-cosmic-theme/PKGBUILD b/raveos-cosmic-theme/PKGBUILD
index ac73ae7..3a18a59 100644
--- a/raveos-cosmic-theme/PKGBUILD
+++ b/raveos-cosmic-theme/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=raveos-cosmic-theme
pkgver=1.0.0
-pkgrel=5
+pkgrel=6
pkgdesc="RaveOS Cosmic theme payload and installer"
arch=('any')
url="https://raveos.local"
diff --git a/raveos-cosmic-theme/raveos-cosmic-apply.sh b/raveos-cosmic-theme/raveos-cosmic-apply.sh
index 23e18bf..02df340 100755
--- a/raveos-cosmic-theme/raveos-cosmic-apply.sh
+++ b/raveos-cosmic-theme/raveos-cosmic-apply.sh
@@ -63,14 +63,12 @@ XKB_EOF
fi
}
-# Rendszerszintu hatterkep es fastfetch
[[ -f "${PAYLOAD}/background" ]] && \
install -Dm644 "${PAYLOAD}/background" /usr/share/backgrounds/raveos/raveos-main-bg.jpeg
[[ -f "${PAYLOAD}/profile.d/raveos-fastfetch.sh" ]] && \
install -Dm755 "${PAYLOAD}/profile.d/raveos-fastfetch.sh" /etc/profile.d/raveos-fastfetch.sh
-# Skel beallitasa uj felhasznaloknak
mkdir -p \
/etc/skel/.config/kitty \
/etc/skel/.config/fastfetch \
@@ -91,7 +89,6 @@ fi
write_cosmic_xkb /etc/skel/.config/cosmic
ensure_bashrc_hook /etc/skel/.bashrc
-# Meglevo felhasznalok kimeletes frissitese
while IFS=: read -r user _ uid gid _ home shell; do
[[ "$uid" -ge 1000 ]] || continue
[[ -d "$home" ]] || continue
diff --git a/raveos-cosmic-theme/raveos-cosmic-first-login.sh b/raveos-cosmic-theme/raveos-cosmic-first-login.sh
index 4964028..b2ee3bd 100755
--- a/raveos-cosmic-theme/raveos-cosmic-first-login.sh
+++ b/raveos-cosmic-theme/raveos-cosmic-first-login.sh
@@ -13,18 +13,15 @@ mkdir -p "${marker_dir}"
sleep 2
-# Hivatalos RaveOS tema importalasa ha elerheto
if command -v cosmic-settings >/dev/null 2>&1 && [[ -f "${theme_ron}" ]]; then
cosmic-settings appearance import "${theme_ron}" >/dev/null 2>&1 || true
fi
-# Alapertelmezett konfig masolasa ha meg nem letezne
if [[ -d "${cosmic_payload}" ]]; then
mkdir -p "${HOME}/.config/cosmic"
cp -rn "${cosmic_payload}/." "${HOME}/.config/cosmic/" 2>/dev/null || true
fi
-# Hatterkep beallitasa
if [[ -f "${wallpaper}" ]]; then
mkdir -p "${HOME}/.config/cosmic/com.system76.CosmicBackground/v1"
if [[ ! -f "${HOME}/.config/cosmic/com.system76.CosmicBackground/v1/all" ]]; then
@@ -43,7 +40,6 @@ BG_EOF
fi
fi
-# Billentyuzet-kiosztas beallitasa
if [[ ! -f "${HOME}/.config/cosmic/com.system76.CosmicComp/v1/xkb_config" ]]; then
kb_layout="hu"
kb_variant=""
diff --git a/raveos-hyprland-theme/PKGBUILD b/raveos-hyprland-theme/PKGBUILD
index 0eb6ea6..018c83b 100644
--- a/raveos-hyprland-theme/PKGBUILD
+++ b/raveos-hyprland-theme/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=raveos-hyprland-theme
pkgver=1.0.0
-pkgrel=11
+pkgrel=12
pkgdesc="RaveOS Hyprland theme payload and installer"
arch=('any')
url="https://raveos.local"
@@ -40,14 +40,12 @@ SRCPKGDEST="${startdir}/build"
LOGDEST="${startdir}/build"
package() {
- # Alapértelmezett háttérkép
install -dm755 "${pkgdir}/usr/share/backgrounds/raveos"
install -Dm644 "${startdir}/theme-data/background.jpg" \
"${pkgdir}/usr/share/backgrounds/raveos/raveos-main-bg.jpeg"
install -Dm644 "${startdir}/theme-data/background.jpg" \
"${pkgdir}/usr/share/backgrounds/raveos/background.jpg"
- # Rendszer szintű ikonok és GTK téma
install -dm755 "${pkgdir}/usr/share/icons"
install -dm755 "${pkgdir}/usr/share/themes"
cp -r --no-preserve=ownership "${startdir}/theme-data/skel/.icons/Adwaitaru-olive" \
@@ -55,23 +53,18 @@ package() {
cp -r --no-preserve=ownership "${startdir}/theme-data/skel/.themes/Yaru-olive-dark" \
"${pkgdir}/usr/share/themes/"
- # SDDM profilképek könyvtára
install -dm755 "${pkgdir}/usr/share/sddm/faces"
- # Fastfetch profil script
install -Dm755 "${startdir}/theme-data/profile.d/raveos-fastfetch.sh" \
"${pkgdir}/etc/profile.d/raveos-fastfetch.sh"
- # Session init script első bejelentkezéshez
install -Dm755 "${startdir}/raveos-session-init.sh" \
"${pkgdir}/etc/profile.d/raveos-session-init.sh"
- # Theme payload
install -dm755 "${pkgdir}/usr/share/raveos/hyprland-theme"
cp -r --no-preserve=ownership "${startdir}/theme-data" \
"${pkgdir}/usr/share/raveos/hyprland-theme/"
- # Auto-apply script és systemd service
install -Dm755 "${startdir}/raveos-hyprland-apply.sh" \
"${pkgdir}/usr/lib/raveos-hyprland-theme/auto-apply.sh"
diff --git a/raveos-hyprland-theme/raveos-hyprland-apply.sh b/raveos-hyprland-theme/raveos-hyprland-apply.sh
index 6262fc9..a66ce0b 100644
--- a/raveos-hyprland-theme/raveos-hyprland-apply.sh
+++ b/raveos-hyprland-theme/raveos-hyprland-apply.sh
@@ -153,7 +153,6 @@ install_user_avatar() {
fi
}
-# skel konfiguracio uj felhasznaloknak
mkdir -p \
/etc/skel/.config/hypr \
/etc/skel/.config/dms \
@@ -219,7 +218,6 @@ install_gtk_bookmarks /etc/skel
ensure_bashrc_hook /etc/skel/.bashrc
echo "1" > /etc/skel/.config/raveos/hyprland-migrated
-# Meglevo felhasznalok beallitasa
while IFS=: read -r user _ uid gid _ home shell; do
[[ "$uid" -ge 1000 ]] || continue
[[ -d "$home" ]] || continue
@@ -237,7 +235,6 @@ while IFS=: read -r user _ uid gid _ home shell; do
"${home}/.local/state/DankMaterialShell" \
"${home}/.local/share/flatpak/overrides"
- # Hyprland konfig
if [[ ! -f "${home}/.config/hypr/hyprland.lua" && -d "${PAYLOAD}/hypr" ]]; then
cp -rf "${PAYLOAD}/hypr/." "${home}/.config/hypr/"
rm -f "${home}/.config/hypr/hyprland.conf"
@@ -262,13 +259,11 @@ while IFS=: read -r user _ uid gid _ home shell; do
install -Dm644 "${PAYLOAD}/hypr/config/windowrules.lua" "${home}/.config/hypr/config/windowrules.lua"
fi
- # hyprpaper konfig
if [[ ! -f "${home}/.config/hypr/hyprpaper.conf" ]]; then
printf 'preload = %s/.config/background.jpg\nwallpaper = ,%s/.config/background.jpg\nsplash = false\n' \
"$home" "$home" > "${home}/.config/hypr/hyprpaper.conf"
fi
- # DMS konfig
if [[ -d "${PAYLOAD}/dms" ]]; then
cp -rn "${PAYLOAD}/dms/." "${home}/.config/quickshell/pockets/DMS/" 2>/dev/null || true
cp -rn "${PAYLOAD}/dms/." "${home}/.config/dms/" 2>/dev/null || true
@@ -285,7 +280,6 @@ while IFS=: read -r user _ uid gid _ home shell; do
done
fi
- # DMS session.json hatterkep
if [[ ! -f "${home}/.local/state/DankMaterialShell/session.json" ]]; then
cat > "${home}/.local/state/DankMaterialShell/session.json" <<-SEOF
{
@@ -294,27 +288,22 @@ while IFS=: read -r user _ uid gid _ home shell; do
SEOF
fi
- # Hatterkep
if [[ ! -f "${home}/.config/background.jpg" && -f "${PAYLOAD}/background.jpg" ]]; then
install -Dm644 "${PAYLOAD}/background.jpg" "${home}/.config/background.jpg"
fi
- # SDDM es user avatar
install_user_avatar "$user" "$home" "$uid" "$gid"
- # Kitty
if [[ ! -f "${home}/.config/kitty/kitty.conf" && -d "${PAYLOAD}/kitty" ]]; then
cp -r "${PAYLOAD}/kitty/." "${home}/.config/kitty/"
fi
- # Fastfetch
for f in config.jsonc config-kitty.jsonc raveos-logo.png raveos-logo.txt; do
if [[ ! -f "${home}/.config/fastfetch/${f}" && -f "${PAYLOAD}/fastfetch/${f}" ]]; then
install -Dm644 "${PAYLOAD}/fastfetch/${f}" "${home}/.config/fastfetch/${f}"
fi
done
- # GTK, Thunar, nwg-look, xsettingsd, Kvantum
for d in gtk-3.0 gtk-4.0 nwg-look Thunar xfce4 xsettingsd Kvantum; do
if [[ ! -d "${home}/.config/${d}" && -d "${PAYLOAD}/${d}" ]]; then
mkdir -p "${home}/.config/${d}"
@@ -322,12 +311,10 @@ SEOF
fi
done
- # RaveSwitch
if [[ -f "${PAYLOAD}/raveswitch/config.ron" ]]; then
install -Dm644 "${PAYLOAD}/raveswitch/config.ron" "${home}/.config/raveswitch/config.ron"
fi
- # Flatpak global override
if [[ ! -f "${home}/.local/share/flatpak/overrides/global" && -f "${PAYLOAD}/skel/.local/share/flatpak/overrides/global" ]]; then
install -Dm644 "${PAYLOAD}/skel/.local/share/flatpak/overrides/global" \
"${home}/.local/share/flatpak/overrides/global"
@@ -338,18 +325,15 @@ SEOF
ensure_bashrc_hook "${home}/.bashrc"
echo "1" > "${home}/.config/raveos/hyprland-migrated"
- # GTK tema beallitasa gsettings-szel
(
runuser -u "$user" -- dbus-launch gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-olive-dark' 2>/dev/null
runuser -u "$user" -- dbus-launch gsettings set org.gnome.desktop.interface icon-theme 'Adwaitaru-olive' 2>/dev/null
) || true
- # matugen: wallpaper-alapu szinseme generalas ha elerheto
if command -v matugen &>/dev/null && [[ -f "${home}/.config/background.jpg" ]]; then
runuser -u "$user" -- matugen image "${home}/.config/background.jpg" 2>/dev/null || true
fi
- # Kizarolag az erintett konfiguraciok es konyvtarak jogosultsagait javitjuk
chown "${uid}:${gid}" \
"${home}/.bashrc" \
"${home}/.face" \
diff --git a/raveos-hyprland-theme/raveos-session-init.sh b/raveos-hyprland-theme/raveos-session-init.sh
index b0d0d6e..202a919 100644
--- a/raveos-hyprland-theme/raveos-session-init.sh
+++ b/raveos-hyprland-theme/raveos-session-init.sh
@@ -7,11 +7,9 @@ if [[ -f "${_raveos_init}" ]]; then
return 0 2>/dev/null || exit 0
fi
-# GTK tema
gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-olive-dark' 2>/dev/null || true
gsettings set org.gnome.desktop.interface icon-theme 'Adwaitaru-olive' 2>/dev/null || true
-# DMS session.json: hatterkep beallitasa
_session_file="${HOME}/.local/state/DankMaterialShell/session.json"
_bg_file="${HOME}/.config/background.jpg"
diff --git a/raveos-mirrorlist/PKGBUILD b/raveos-mirrorlist/PKGBUILD
index 147545b..0413109 100644
--- a/raveos-mirrorlist/PKGBUILD
+++ b/raveos-mirrorlist/PKGBUILD
@@ -3,15 +3,10 @@
# raveos-mirrorlist
# ------------------
# A raveos-core-repo elsodleges + tartalek (GitHub Releases) szerverlistaja.
-# Telepiteskor/frissiteskor a .install script:
-# - atallitja a meglevo [raveos-core-repo] szekciot Include=-ra (GitHub tartalek),
-# - athelyezi a [raveos-core-repo] szekciot a [core] ELE (a pacman az ELSO
-# repot valasztja azonos nevu csomagra, verziotol fuggetlenul),
-# - torli a gnome csomagokat az IgnorePkg-bol (a repo-sorrend mar nyer).
pkgname=raveos-mirrorlist
pkgver=1.0.0
-pkgrel=5
+pkgrel=6
pkgdesc="RaveOS core-repo mirrorlist (elsodleges + GitHub tartalek szerver)"
arch=('any')
url="https://git.rp1.hu/RaveOS"
diff --git a/raveos-mirrorlist/raveos-mirrorlist.install b/raveos-mirrorlist/raveos-mirrorlist.install
index c44a35e..edf30b8 100644
--- a/raveos-mirrorlist/raveos-mirrorlist.install
+++ b/raveos-mirrorlist/raveos-mirrorlist.install
@@ -10,7 +10,6 @@ _patch_pacman_conf() {
conf=/etc/pacman.conf
[ -f "$conf" ] || return 0
- # 1) Regi, egysoros Server= allapot -> Include= (GitHub tartalek szerverrel).
if grep -qF 'Server = https://page.rp1.hu/x86_64/' "$conf" \
&& ! grep -qF 'Include = /etc/pacman.d/raveos-core-mirrorlist' "$conf"; then
sed -i \
@@ -20,9 +19,6 @@ _patch_pacman_conf() {
echo "raveos-mirrorlist: /etc/pacman.conf frissitve (raveos-core-repo -> Include mirrorlist, GitHub tartalek szerverrel)"
fi
- # 2) [raveos-core-repo] szekcio athelyezese a [core] ELE.
- # A pacman az ELSO repot valasztja azonos nevu csomagra, verziotol
- # fuggetlenul - ha a raveos repo hatul van, az official csomagok nyernek.
core_line=$(grep -n '^\[core\]' "$conf" | head -n1 | cut -d: -f1)
rav_line=$(grep -n '^\[raveos-core-repo\]' "$conf" | head -n1 | cut -d: -f1)
if [ -n "$core_line" ] && [ -n "$rav_line" ] && [ "$rav_line" -gt "$core_line" ]; then
@@ -51,8 +47,6 @@ _patch_pacman_conf() {
fi
fi
- # 3) IgnorePkg: a gnome lista torlese (a repo-sorrend mar nyer; az IgnorePkg
- # blokkolna a sajat frissiteseinket). A kernel pin meghagyva.
if grep -q '^IgnorePkg' "$conf"; then
sed -i 's/^IgnorePkg.*/IgnorePkg = linux-cachyos linux-cachyos-headers/' "$conf"
fi
diff --git a/raveos-plasma-theme/PKGBUILD b/raveos-plasma-theme/PKGBUILD
index 54897c0..9d7b284 100644
--- a/raveos-plasma-theme/PKGBUILD
+++ b/raveos-plasma-theme/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=raveos-plasma-theme
pkgver=1.0.0
-pkgrel=8
+pkgrel=9
pkgdesc="RaveOS Plasma theme payload and installer"
arch=('any')
url="https://raveos.local"
diff --git a/raveos-plasma-theme/raveos-plasma-apply.sh b/raveos-plasma-theme/raveos-plasma-apply.sh
index d077fce..6d90ce6 100755
--- a/raveos-plasma-theme/raveos-plasma-apply.sh
+++ b/raveos-plasma-theme/raveos-plasma-apply.sh
@@ -132,7 +132,6 @@ api-enabled=true
KWEOF
}
-# skel konfiguráció új felhasználóknak
mkdir -p \
/etc/skel/.config/kitty \
/etc/skel/.config/fastfetch \
@@ -167,7 +166,6 @@ disable_kmix_autostart /etc/skel
ensure_bashrc_hook /etc/skel/.bashrc
echo "1" > /etc/skel/.config/raveos/plasma-migrated
-# meglévő felhasználók frissítése
while IFS=: read -r user _ uid gid _ home shell; do
[[ "$uid" -ge 1000 ]] || continue
[[ -d "$home" ]] || continue
diff --git a/raveos-plymouth-theme/PKGBUILD b/raveos-plymouth-theme/PKGBUILD
index 8190196..6c676fa 100644
--- a/raveos-plymouth-theme/PKGBUILD
+++ b/raveos-plymouth-theme/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: nippy <nippy@tuta.io>
pkgname=raveos-plymouth-theme
pkgver=1.0.0
-pkgrel=2
+pkgrel=3
pkgdesc="RaveOS Plymouth boot splash theme"
arch=('any')
url="https://git.rp1.hu/RaveOS"
diff --git a/raveos-plymouth-theme/theme-data/raveos.script b/raveos-plymouth-theme/theme-data/raveos.script
index d78622b..78463c3 100644
--- a/raveos-plymouth-theme/theme-data/raveos.script
+++ b/raveos-plymouth-theme/theme-data/raveos.script
@@ -1,4 +1,3 @@
-// RaveOS Plymouth boot splash script (installed system)
Window.SetBackgroundTopColor(0.102, 0.106, 0.114);
Window.SetBackgroundBottomColor(0.075, 0.078, 0.086);
@@ -6,7 +5,6 @@ Window.SetBackgroundBottomColor(0.075, 0.078, 0.086);
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
-// --- logo: owl icon, centered ---
owl_image = Image("raveos-owl.png");
owl_width = owl_image.GetWidth();
@@ -27,7 +25,6 @@ Plymouth.SetBootProgressFunction(fun(duration, progress)
{
});
-// --- password prompt (LUKS unlock) ---
fun display_password_callback(prompt, bullets)
{
diff --git a/raveos-sddm-theme/PKGBUILD b/raveos-sddm-theme/PKGBUILD
index cf0e32b..56004c1 100644
--- a/raveos-sddm-theme/PKGBUILD
+++ b/raveos-sddm-theme/PKGBUILD
@@ -1,18 +1,8 @@
# Maintainer: nippy <nippy@tuta.io>
-#
-# raveos-sddm-theme
-# ------------------
-# Kozos RaveOS SDDM login-kepernyo tema (sddm-rave-theme).
-#
-# Korabban minden DE-tema csomag (cosmic/gnome/hyprland/plasma) sajat
-# maga csomagolta ugyanezt a byte-azonos SDDM temat - ez a kulon csomag
-# valtja ki mind a negyet, hogy csak egyszer kelljen karbantartani es
-# ne legyen fajl-duplikacio/utkozes-veszely a csomagok kozott. A DE-tema
-# csomagok erre a csomagra hivatkoznak depends-kent.
pkgname=raveos-sddm-theme
pkgver=1.0.0
-pkgrel=5
+pkgrel=6
pkgdesc="RaveOS kozos SDDM login tema (sddm-rave-theme)"
arch=('any')
url="https://raveos.local"
@@ -23,7 +13,6 @@ install="${pkgname}.install"
source=()
sha256sums=()
-# Build könyvtárak az src mellé, ne a makepkg alapértelmezettbe
BUILDDIR="${startdir}/build"
PKGDEST="${startdir}/build"
SRCDEST="${startdir}/build"
@@ -31,7 +20,6 @@ SRCPKGDEST="${startdir}/build"
LOGDEST="${startdir}/build"
package() {
- # SDDM téma: rendszerszintű telepítés, SDDM innen olvassa
install -dm755 "${pkgdir}/usr/share/sddm/themes/sddm-rave-theme"
find "${startdir}/sddm-rave-theme" -type f | while read -r f; do
rel="${f#${startdir}/sddm-rave-theme/}"
@@ -40,10 +28,6 @@ package() {
install -Dm644 "$f" "${pkgdir}/usr/share/sddm/themes/sddm-rave-theme/${rel}"
done
- # SDDM konfig forrás: NEM /etc-be telepítjük itt, hanem post_install/
- # post_upgrade hook-ból, mert ha az unowned fájl már létezik, a pacman
- # ütközés-ellenőrzése ELŐBB fut mint a pre_upgrade() hook, és blokkolja
- # a tranzakciót.
install -Dm644 "${startdir}/sddm.conf" \
"${pkgdir}/usr/share/raveos-sddm-theme/sddm.conf"
}
diff --git a/raveos-sddm-theme/raveos-sddm-theme.install b/raveos-sddm-theme/raveos-sddm-theme.install
index 36ebc3e..abc770f 100644
--- a/raveos-sddm-theme/raveos-sddm-theme.install
+++ b/raveos-sddm-theme/raveos-sddm-theme.install
@@ -2,10 +2,6 @@ _sddm_src="/usr/share/raveos-sddm-theme/sddm.conf"
_sddm_dst="/etc/sddm.conf.d/raveos-theme.conf"
pre_install() {
- # Ha a fájl már létezik de pacman nem ownolta, töröljük - de ez csak
- # pre_install esetén segít, pre_upgrade már késő (a pacman ütközés-
- # ellenőrzése ELŐBB fut mint ez a hook). Ezért a konfig fájlt a post_*
- # hook-ok telepítik, nem a package().
rm -f "$_sddm_dst"
}
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/BatteryIndicator.qml b/raveos-sddm-theme/sddm-rave-theme/Components/BatteryIndicator.qml
index 0caedbe..0d2e36e 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/BatteryIndicator.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/BatteryIndicator.qml
@@ -7,7 +7,6 @@ Row {
height: root.font.pointSize * 1.6
spacing: root.font.pointSize * 0.5
- // -1 = nincs akkumulátor / nem laptop
property int batteryLevel: -1
property bool isCharging: false
property bool isFull: false
@@ -15,7 +14,6 @@ Row {
visible: batteryLevel >= 0
- // Ismert akksi elérési utak
property var tryPaths: [
"/sys/class/power_supply/BAT0/",
"/sys/class/power_supply/BAT1/",
@@ -24,7 +22,6 @@ Row {
"/sys/class/power_supply/BATT/"
]
- // Dinamikus akkumulátor kereső (pl. kontroller, UPS, egyéb külső akkuk észleléséhez)
FolderListModel {
id: powerSupplyScanner
folder: "file:///sys/class/power_supply"
@@ -45,7 +42,6 @@ Row {
for (var i = 0; i < count; i++) {
var name = get(i, "fileName")
if (name && name !== "." && name !== "..") {
- // Csak a tipikus laptop akkumulátor elnevezések (pl. BAT0, BAT1, BATT, battery)
var isLaptopBat = /^bat/i.test(name) || /^battery/i.test(name)
if (isLaptopBat) {
var fullPath = "/sys/class/power_supply/" + name + "/"
@@ -60,7 +56,6 @@ Row {
}
}
- // ── Fájl olvasó ──────────────────────────────────────────────────────────
function readFile(path, cb) {
var xhr = new XMLHttpRequest()
xhr.open("GET", "file://" + path, true)
@@ -71,7 +66,6 @@ Row {
xhr.send()
}
- // ── Akkumulátor keresés és frissítés ─────────────────────────────────────
function detectBattery(idx) {
if (idx >= tryPaths.length) { batteryLevel = -1; return }
readFile(tryPaths[idx] + "capacity", function(cap) {
@@ -90,7 +84,6 @@ Row {
})
}
- // ── Akkumulátor frissítés ────────────────────────────────────────────────
function refresh() {
if (batteryPath !== "") {
readFile(batteryPath + "capacity", function(cap) {
@@ -118,7 +111,6 @@ Row {
onTriggered: batteryIndicator.refresh()
}
- // ── Szín a töltési szint alapján ─────────────────────────────────────────
function levelColor(lvl, charging) {
if (charging) return "#4ade80" // zöld – tölt
if (lvl > 60) return "#ffffff" // fehér – ok
@@ -127,7 +119,6 @@ Row {
return "#f87171" // piros – kritikus
}
- // ── UI ───────────────────────────────────────────────────────────────────
Canvas {
id: batteryCanvas
width: root.font.pointSize * 3.2
@@ -138,7 +129,6 @@ Row {
var ctx = getContext("2d")
ctx.clearRect(0, 0, width, height)
- // Qt Canvas nem támogatja ctx.roundRect() – saját helper
function rr(c, x, y, w, h, r) {
r = Math.min(Math.max(r, 0), Math.min(w, h) / 2)
c.beginPath()
@@ -165,20 +155,17 @@ Row {
var tx = bw // terminál x
var ty = (height - th) / 2
- // Terminál (+ pólus)
rr(ctx, tx, ty, tw, th, height * 0.15)
ctx.fillStyle = col
ctx.globalAlpha = 0.7
ctx.fill()
ctx.globalAlpha = 1.0
- // Keret (akksi test)
rr(ctx, bx, by, bw, bh, r)
ctx.strokeStyle = col
ctx.lineWidth = height * 0.09
ctx.stroke()
- // Töltési szint kitöltés
var padding = height * 0.18
var fillW = Math.max(0, (bw - padding * 2) * lvl / 100)
if (fillW > 0) {
@@ -191,7 +178,6 @@ Row {
ctx.globalAlpha = 1.0
}
- // Villám jel (töltés közben)
if (charging && !full) {
var cx = bw / 2
var cy = height / 2
@@ -210,7 +196,6 @@ Row {
ctx.globalAlpha = 1.0
}
- // Tele jel (checkbox-szerű pipával)
if (full) {
ctx.beginPath()
ctx.moveTo(bw * 0.32, by + bh / 2)
@@ -227,7 +212,6 @@ Row {
}
}
- // Százalék szöveg
Text {
id: batteryText
anchors.verticalCenter: parent.verticalCenter
@@ -241,7 +225,6 @@ Row {
font.family: root.font.family
font.bold: batteryIndicator.batteryLevel <= 15 && !batteryIndicator.isCharging
- // Pulzáló animáció kritikus töltésnél
SequentialAnimation on opacity {
running: batteryIndicator.batteryLevel <= 15 && !batteryIndicator.isCharging
loops: Animation.Infinite
@@ -250,7 +233,6 @@ Row {
}
}
- // Szint változáskor újrafest
onBatteryLevelChanged: batteryCanvas.requestPaint()
onIsChargingChanged: batteryCanvas.requestPaint()
onIsFullChanged: batteryCanvas.requestPaint()
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/Input.qml b/raveos-sddm-theme/sddm-rave-theme/Components/Input.qml
index fd29314..61fed97 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/Input.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/Input.qml
@@ -21,7 +21,6 @@ Column {
Item {
id: errorMessageField
- // change also in selectSession
height: root.font.pointSize * 2
width: parent.width
anchors.horizontalCenter: parent.horizontalCenter
@@ -67,7 +66,6 @@ Column {
}
}
- // Profilkép
Item {
id: avatarField
@@ -114,7 +112,6 @@ Column {
if (!p || p === "") return
var s = p.toString().trim()
if (s === "") return
- // Ignore generic silhouette icon installed in SDDM faces directory
if (s === "/usr/share/sddm/faces/.face.icon" || s === "file:///usr/share/sddm/faces/.face.icon") return
var url = (s.startsWith("file://") || s.startsWith("image://") || s.startsWith("qrc://") || s.startsWith("http")) ? s : ("file://" + s)
if (list.indexOf(url) === -1) {
@@ -122,12 +119,10 @@ Column {
}
}
- // 1. Direct icon reported by SDDM (AccountsService or explicit face config)
if (directIcon !== "") {
addCandidate(directIcon)
}
- // 2. AccountsService system icons (standard across Linux - world-readable 644)
if (uName !== "") {
addCandidate("/var/lib/AccountsService/icons/" + uName)
addCandidate("/var/lib/AccountsService/icons/" + uName + ".png")
@@ -136,7 +131,6 @@ Column {
addCandidate("/var/lib/AccountsService/icons/" + uName + ".svg")
}
- // 3. User's home directory faces
if (home !== "") {
addCandidate(home + "/.face")
addCandidate(home + "/.face.icon")
@@ -156,7 +150,6 @@ Column {
addCandidate("/home/" + uName + "/.avatar")
}
- // 4. System SDDM faces directory
if (uName !== "") {
addCandidate("/usr/share/sddm/faces/" + uName + ".face.icon")
addCandidate("/usr/share/sddm/faces/" + uName + ".png")
@@ -168,7 +161,6 @@ Column {
addCandidate("/var/lib/sddm/faces/" + uName)
}
- // 5. Configured theme avatar
if (config.UserAvatar && config.UserAvatar !== "") {
addCandidate(config.UserAvatar)
}
@@ -217,13 +209,11 @@ Column {
function onDataChanged() { avatarField.updateAvatarSource() }
}
- // Avatar kör
Item {
anchors.centerIn: parent
width: root.font.pointSize * 5.2
height: root.font.pointSize * 5.2
- // Avatar drop shadow
Rectangle {
anchors.fill: parent
anchors.topMargin: root.font.pointSize * 0.15
@@ -238,7 +228,6 @@ Column {
clip: true
color: Qt.rgba(1, 1, 1, 0.15)
- // The mask source
Item {
id: avatarMask
anchors.fill: parent
@@ -282,7 +271,6 @@ Column {
opacity: 0.85
}
- // Draw the border on top of everything!
Rectangle {
anchors.fill: parent
radius: parent.width / 2
@@ -340,7 +328,6 @@ Column {
}
}
- // Container button / click area
Item {
id: userSelectorButton
anchors.centerIn: parent
@@ -358,7 +345,6 @@ Column {
}
KeyNavigation.down: password
- // Background with drop shadow and frosted glass
Item {
anchors.fill: parent
Rectangle {
@@ -379,7 +365,6 @@ Column {
}
}
- // Left Icon (User icon)
Button {
id: userFieldLeftIcon
width: parent.height
@@ -396,7 +381,6 @@ Column {
background: Rectangle { color: "transparent" }
}
- // Username display in the middle (Non-editable, clean text)
Text {
id: username
anchors.centerIn: parent
@@ -414,7 +398,6 @@ Column {
styleColor: Qt.rgba(0, 0, 0, 0.40)
}
- // Dropdown Arrow Button on Right
Item {
id: userDropdownBtn
width: parent.height
@@ -453,7 +436,6 @@ Column {
}
}
- // Whole field click area
MouseArea {
id: userSelectorMouseArea
anchors.fill: parent
@@ -469,7 +451,6 @@ Column {
}
}
- // Dropdown Popup
Popup {
id: userDropdownPopup
@@ -482,7 +463,6 @@ Column {
z: 100
background: Item {
- // Drop shadow underlay
Rectangle {
anchors.fill: parent
anchors.topMargin: root.font.pointSize * 0.15
@@ -490,7 +470,6 @@ Column {
color: Qt.rgba(0, 0, 0, 0.40)
}
- // Frosted Glass body (minimally translucent)
Rectangle {
anchors.fill: parent
radius: config.RoundCorners !== "" ? parseInt(config.RoundCorners) : root.font.pointSize * 0.8
@@ -561,7 +540,6 @@ Column {
anchors.rightMargin: root.font.pointSize * 0.8
spacing: root.font.pointSize * 0.8
- // Mini avatar in dropdown row
Item {
width: root.font.pointSize * 2.4
height: root.font.pointSize * 2.4
@@ -620,7 +598,6 @@ Column {
}
}
- // Username & realName
Column {
anchors.verticalCenter: parent.verticalCenter
spacing: 2
@@ -841,7 +818,6 @@ Column {
KeyNavigation.down: rebootBtn
- // Drop shadow
Rectangle {
anchors.fill: parent
anchors.topMargin: root.font.pointSize * 0.12
@@ -915,7 +891,6 @@ Column {
anchors.bottomMargin: root.font.pointSize * 0.3
spacing: root.font.pointSize * 1.8
- // Reboot gomb
Column {
spacing: root.font.pointSize * 0.5
@@ -923,7 +898,6 @@ Column {
width: root.font.pointSize * 4.2
height: root.font.pointSize * 4.2
- // Button shadow
Rectangle {
anchors.fill: parent
anchors.topMargin: root.font.pointSize * 0.12
@@ -979,7 +953,6 @@ Column {
}
}
- // Shutdown gomb
Column {
spacing: root.font.pointSize * 0.5
@@ -987,7 +960,6 @@ Column {
width: root.font.pointSize * 4.2
height: root.font.pointSize * 4.2
- // Button shadow
Rectangle {
anchors.fill: parent
anchors.topMargin: root.font.pointSize * 0.12
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/KeyboardLayoutIndicator.qml b/raveos-sddm-theme/sddm-rave-theme/Components/KeyboardLayoutIndicator.qml
index ffe10fa..0d95c06 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/KeyboardLayoutIndicator.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/KeyboardLayoutIndicator.qml
@@ -1,5 +1,3 @@
-// Keyboard Layout Indicator component
-// Displays the current locale/layout and switches between them when clicked (if multiple are available)
import QtQuick 2.15
import QtQml 2.15
@@ -13,13 +11,10 @@ Item {
width: implicitWidth
height: implicitHeight
- // Number of available layouts
property int layoutsCount: (typeof keyboard !== "undefined" && keyboard && keyboard.layouts) ? keyboard.layouts.length : 0
- // Show if we have layout info or a valid locale fallback and not hidden
visible: (config.HideKeyboardLayout !== "false") ? false : (currentShortName !== "")
- // Get current layout shortname (e.g. "US", "HU")
property string currentShortName: ""
function updateCurrentShortName() {
@@ -34,7 +29,6 @@ Item {
}
}
- // Fallback to config locale or system locale
var loc = config.Locale || Qt.locale().name
if (loc) {
var parts = loc.split("_")
@@ -48,7 +42,6 @@ Item {
Component.onCompleted: updateCurrentShortName()
- // Colors matched to the theme config
property color textColor: config.UserIconColor || "#ffffff"
property color hoverColor: config.HoverUserIconColor || "#b7cef1"
@@ -56,9 +49,7 @@ Item {
id: layoutRow
height: root.font.pointSize * 1.1
spacing: root.font.pointSize * 0.4
- // Removed anchors.centerIn to prevent circular binding loop with parent width/height
- // Keyboard icon
Canvas {
id: kbdCanvas
width: root.font.pointSize * 1.5
@@ -79,7 +70,6 @@ Item {
ctx.lineJoin = "round"
ctx.globalAlpha = 0.85
- // Draw keyboard outline
var r = height * 0.15
var bx = ctx.lineWidth / 2
var by = ctx.lineWidth / 2
@@ -95,16 +85,13 @@ Item {
ctx.closePath()
ctx.stroke()
- // Draw simple key grid
ctx.lineWidth = height * 0.06
var kw = bw / 6
var kh = bh / 4
- // Row 1 & 2 keys
for (var i = 0; i < 4; i++) {
ctx.fillRect(bx + kw * (i + 1), by + kh, kw * 0.6, kh * 0.6)
ctx.fillRect(bx + kw * (i + 0.5), by + kh * 2, kw * 0.6, kh * 0.6)
}
- // Spacebar
ctx.fillRect(bx + kw * 1.5, by + kh * 3, kw * 3, kh * 0.6)
ctx.globalAlpha = 1.0
@@ -116,7 +103,6 @@ Item {
}
}
- // Layout Short Name (e.g. US, HU)
Text {
id: layoutText
anchors.verticalCenter: parent.verticalCenter
@@ -176,7 +162,6 @@ Item {
color: delegateMouse.containsMouse ? Qt.rgba(1, 1, 1, 0.15) : "transparent"
radius: config.RoundCorners !== "" ? parseInt(config.RoundCorners) / 4 : root.font.pointSize * 0.4
- // Get layout object safely
property var layoutObj: (typeof keyboard !== "undefined" && keyboard && keyboard.layouts) ? keyboard.layouts[index] : null
property string shortName: layoutObj && layoutObj.shortName ? layoutObj.shortName.toUpperCase() : ""
property string longName: layoutObj && layoutObj.longName ? layoutObj.longName : ""
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/LoginForm.qml b/raveos-sddm-theme/sddm-rave-theme/Components/LoginForm.qml
index 779a21a..65e6e41 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/LoginForm.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/LoginForm.qml
@@ -29,7 +29,6 @@ ColumnLayout {
Layout.rightMargin: innerPadding
}
- // Akkumulátor + Hálózat jelzők
RowLayout {
id: statusRow
@@ -56,7 +55,6 @@ ColumnLayout {
}
}
- // Billentyűzet kiosztás jelző (letiltva a felhasználói kérésnek megfelelően)
KeyboardLayoutIndicator {
id: keyboardLayoutIndicator
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/NetworkIndicator.qml b/raveos-sddm-theme/sddm-rave-theme/Components/NetworkIndicator.qml
index 6300841..07bf902 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/NetworkIndicator.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/NetworkIndicator.qml
@@ -10,7 +10,6 @@ Row {
height: root.font.pointSize * 1.6
spacing: root.font.pointSize * 0.5
- // "none" | "wifi" | "ethernet"
property string netType: "none"
property int wifiQuality: 0 // 0-100
property string activeIface: ""
@@ -28,7 +27,6 @@ Row {
"enp0s3","enp0s31f6","ens33","ens3","ens18"
]
- // ── Fájl olvasó ──────────────────────────────────────────────────────────
function readFile(path, cb) {
var xhr = new XMLHttpRequest()
xhr.open("GET", "file://" + path, true)
@@ -42,16 +40,13 @@ Row {
xhr.send()
}
- // ── WiFi jelerősség /proc/net/wireless-ből ───────────────────────────────
function readWifiSignal(iface) {
readFile("/proc/net/wireless", function(content) {
if (!content) { wifiQuality = 60; netCanvas.requestPaint(); return }
var lines = content.split("\n")
for (var i = 0; i < lines.length; i++) {
if (lines[i].indexOf(iface + ":") !== -1) {
- // formátum: "wlan0: 0000 61. -49. -256 ..."
var parts = lines[i].trim().replace(/\./g,"").split(/\s+/)
- // parts[2] = link quality (0–70 tartomány általában)
var q = parseFloat(parts[2]) || 0
wifiQuality = Math.min(100, Math.round(q / 70 * 100))
break
@@ -61,7 +56,6 @@ Row {
})
}
- // ── Interfész keresők ────────────────────────────────────────────────────
function checkWifi(idx) {
if (idx >= wifiIfaces.length) { checkEth(0); return }
readFile("/sys/class/net/" + wifiIfaces[idx] + "/operstate", function(st) {
@@ -75,7 +69,6 @@ Row {
})
}
- // ── Ethernet keresés ─────────────────────────────────────────────────────
function checkEth(idx) {
if (idx >= ethIfaces.length) { netType = "none"; return }
readFile("/sys/class/net/" + ethIfaces[idx] + "/operstate", function(st) {
@@ -100,21 +93,18 @@ Row {
onTriggered: networkIndicator.refresh()
}
- // ── Szín ─────────────────────────────────────────────────────────────────
function signalColor(q) {
if (q >= 65) return "#4ade80" // zöld – erős
if (q >= 40) return "#facc15" // sárga – közepes
return "#fb923c" // narancs – gyenge
}
- // ── UI ───────────────────────────────────────────────────────────────────
Canvas {
id: netCanvas
width: root.font.pointSize * 2.0
height: root.font.pointSize * 1.6
anchors.verticalCenter: parent.verticalCenter
- // Qt Canvas nem támogatja ctx.roundRect() – saját helper
function rr(c, x, y, w, h, r) {
r = Math.min(Math.max(r, 0), Math.min(w, h) / 2)
c.beginPath()
@@ -136,14 +126,12 @@ Row {
drawEthernet(ctx)
}
- // ── WiFi antenna ikon (4 ívelt sáv) ─────────────────────────────
function drawWifi(ctx) {
var q = networkIndicator.wifiQuality
var cx = width / 2
var base = height * 0.96
var dot = height * 0.08
- // Sávok száma a minőség alapján
var bars = q >= 70 ? 4 : q >= 45 ? 3 : q >= 20 ? 2 : 1
var col = networkIndicator.signalColor(q)
@@ -161,7 +149,6 @@ Row {
ctx.stroke()
}
- // Középső pont (antenna)
ctx.beginPath()
ctx.arc(cx, base, dot, 0, Math.PI * 2)
ctx.fillStyle = col
@@ -170,7 +157,6 @@ Row {
ctx.globalAlpha = 1.0
}
- // ── Ethernet dugó ikon ───────────────────────────────────────────
function drawEthernet(ctx) {
var col = "#4ade80"
var lw = height * 0.09
@@ -184,7 +170,6 @@ Row {
var cx = width / 2
var cy = height / 2
- // Kábel test (felső téglalap)
var bw = width * 0.70
var bh = height * 0.38
var bx = cx - bw / 2
@@ -192,7 +177,6 @@ Row {
rr(ctx, bx, by, bw, bh, height * 0.06)
ctx.stroke()
- // 3 érintkező pin a téglalapban
var pinW = width * 0.08
var pinH = height * 0.22
var pinY = by - pinH + lw
@@ -202,13 +186,11 @@ Row {
ctx.fill()
}
- // Kábel vonala lefelé
ctx.beginPath()
ctx.moveTo(cx, by + bh)
ctx.lineTo(cx, cy + height * 0.38)
ctx.stroke()
- // Dugó alap vonal
ctx.lineWidth = lw * 1.5
ctx.beginPath()
ctx.moveTo(cx - width * 0.22, cy + height * 0.38)
@@ -219,7 +201,6 @@ Row {
}
}
- // Felirat
Text {
id: netLabel
anchors.verticalCenter: parent.verticalCenter
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/ParticleOverlay.qml b/raveos-sddm-theme/sddm-rave-theme/Components/ParticleOverlay.qml
index 27d5b71..5c25217 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/ParticleOverlay.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/ParticleOverlay.qml
@@ -40,7 +40,6 @@ Canvas {
var p = particles[i]
var r = p.baseR * (0.75 + 0.25 * Math.sin(p.phase + time * 2.2))
- // Glow halo
var grd = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.glowR)
grd.addColorStop(0, "hsla(" + p.hue + ",100%,72%," + (p.opacity * 0.55) + ")")
grd.addColorStop(1, "hsla(" + p.hue + ",100%,72%,0)")
@@ -49,7 +48,6 @@ Canvas {
ctx.fillStyle = grd
ctx.fill()
- // Core dot
ctx.beginPath()
ctx.arc(p.x, p.y, r, 0, Math.PI * 2)
ctx.fillStyle = "hsla(" + p.hue + ",100%,88%," + p.opacity + ")"
@@ -84,7 +82,6 @@ Canvas {
}
Component.onCompleted: {
- // kis késleltetés hogy a méret biztosan kész legyen
Qt.callLater(initParticles)
}
}
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/SessionButton.qml b/raveos-sddm-theme/sddm-rave-theme/Components/SessionButton.qml
index 045e298..a04408f 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/SessionButton.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/SessionButton.qml
@@ -20,8 +20,6 @@ Item {
ComboBox {
id: selectSession
- // important
- // change also in errorMessage
height: root.font.pointSize * 1.8
anchors.horizontalCenter: parent.horizontalCenter
@@ -37,7 +35,6 @@ Item {
}
delegate: ItemDelegate {
- // minus padding
width: popupHandler.width - root.font.pointSize * 1.5
anchors.horizontalCenter: popupHandler.horizontalCenter
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/ToastNotification.qml b/raveos-sddm-theme/sddm-rave-theme/Components/ToastNotification.qml
index 672f346..b3c16be 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/ToastNotification.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/ToastNotification.qml
@@ -45,7 +45,6 @@ Item {
border.color: Qt.rgba(1, 0.35, 0.35, 0.65)
border.width: root.font.pointSize * 0.08
- // Pulse animation border
SequentialAnimation on border.color {
running: toastRoot.showing
loops: Animation.Infinite
diff --git a/raveos-sddm-theme/sddm-rave-theme/Components/UserSwitcher.qml b/raveos-sddm-theme/sddm-rave-theme/Components/UserSwitcher.qml
index f87b4d0..30d4013 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Components/UserSwitcher.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Components/UserSwitcher.qml
@@ -9,13 +9,11 @@ import QtQuick.Effects 6.5
Item {
id: userSwitcher
- // Csak akkor látható ha több mint 1 felhasználó van
visible: userModel.count > 1
width: switchBtn.implicitWidth + root.font.pointSize * 2
height: switchBtn.implicitHeight + root.font.pointSize * 0.6
- // Kiválasztott felhasználó indexe (kívülről beállítható)
property int selectedIndex: 0
property string selectedName: {
if (userModel.count < 1) return ""
@@ -25,7 +23,6 @@ Item {
signal userSwitched(int idx, string name)
- // ── Segédfüggvények ───────────────────────────────────────────────────────────────────
function resolveUserIcon(idx) {
var list = []
var count = (typeof userModel !== "undefined" && userModel) ? userModel.count : 0
@@ -64,7 +61,6 @@ Item {
return userModel.data(userModel.index(idx, 0), Qt.UserRole + 1) || ""
}
- // ── Gomb (chip stílus) ────────────────────────────────────────────────────
Rectangle {
id: switchBtn
anchors.centerIn: parent
@@ -90,7 +86,6 @@ Item {
anchors.centerIn: parent
spacing: root.font.pointSize * 0.5
- // Mini avatar kör
Rectangle {
id: miniAvatarCircle
width: root.font.pointSize * 1.6
@@ -159,7 +154,6 @@ Item {
}
}
- // Felhasználónév
Text {
anchors.verticalCenter: parent.verticalCenter
text: userSwitcher.selectedName
@@ -170,14 +164,12 @@ Item {
font.family: root.font.family
}
- // Nyíl ikon
Text {
anchors.verticalCenter: parent.verticalCenter
text: "⌄"
color: Qt.rgba(1, 1, 1, 0.70)
font.pointSize: root.font.pointSize * 0.85
font.family: root.font.family
- // Csak ha több user van, akkor látszik a nyíl
visible: userModel.count > 1
rotation: popup.visible ? 180 : 0
@@ -190,12 +182,10 @@ Item {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
- // Csak akkor nyit popup-ot ha több felhasználó van
onClicked: if (userModel.count > 1) { popup.visible ? popup.close() : popup.open() }
}
}
- // ── Felhasználó-lista popup ───────────────────────────────────────────────
Popup {
id: popup
@@ -225,7 +215,6 @@ Item {
border.width: root.font.pointSize * 0.08
}
- // Fejléc
Column {
width: parent.width
spacing: root.font.pointSize * 0.4
@@ -239,14 +228,12 @@ Item {
bottomPadding: root.font.pointSize * 0.2
}
- // Elválasztó vonal
Rectangle {
width: parent.width
height: root.font.pointSize * 0.08
color: Qt.rgba(1, 1, 1, 0.12)
}
- // Felhasználók listája
ListView {
id: userList
width: parent.width
@@ -264,7 +251,6 @@ Item {
height: root.font.pointSize * 4
radius: config.RoundCorners !== "" ? parseInt(config.RoundCorners) / 2 : root.font.pointSize * 0.6
- // Kiemelés: aktív felhasználó
property bool isActive: index === userSwitcher.selectedIndex
color: isActive
? Qt.rgba(1, 1, 1, 0.12)
@@ -280,7 +266,6 @@ Item {
anchors.leftMargin: root.font.pointSize * 0.7
spacing: root.font.pointSize * 0.8
- // Avatar kör
Rectangle {
id: delegateAvatarCircle
width: root.font.pointSize * 3
@@ -336,7 +321,6 @@ Item {
}
}
- // Felhasználónév
Text {
anchors.verticalCenter: parent.verticalCenter
text: userSwitcher.getUserName(index)
@@ -347,7 +331,6 @@ Item {
}
}
- // Aktív jelző csík a bal oldalon
Rectangle {
visible: delegateRect.isActive
width: root.font.pointSize * 0.23
diff --git a/raveos-sddm-theme/sddm-rave-theme/Main.qml b/raveos-sddm-theme/sddm-rave-theme/Main.qml
index 10f8325..c938645 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Main.qml
+++ b/raveos-sddm-theme/sddm-rave-theme/Main.qml
@@ -177,7 +177,6 @@ Pane {
id: virtualKeyboard
source: "Components/VirtualKeyboard.qml"
- // x * 0.4 = x / 2.5
width: config.KeyboardSize == "" ? parent.width * 0.4 : parent.width * config.KeyboardSize
anchors.left: config.VirtualKeyboardPosition == "left" ? parent.left : undefined;
anchors.horizontalCenter: config.VirtualKeyboardPosition == "center" ? parent.horizontalCenter : undefined;
diff --git a/raveos-sddm-theme/sddm-rave-theme/Themes/rave.conf b/raveos-sddm-theme/sddm-rave-theme/Themes/rave.conf
index cd2c870..d98e25e 100644
--- a/raveos-sddm-theme/sddm-rave-theme/Themes/rave.conf
+++ b/raveos-sddm-theme/sddm-rave-theme/Themes/rave.conf
@@ -1,75 +1,36 @@
[General]
-#################### General ####################
ScreenWidth=""
ScreenHeight=""
ScreenPadding=""
Logo="Themes/logo.png"
-# Default 0, Options: from 0 to min(screen width/2,screen height/2).
UserAvatar=""
-# Optional path to a specific user avatar image (e.g. "/usr/share/sddm/faces/user.face.icon" or relative to theme)
DefaultAvatar=""
-# Fallback avatar when no user-specific avatar is found.
Font="Open Sans"
FontSize=""
-# Default is screen height divided by 80 (1080/80=13.5), Options: 0-inf.
KeyboardSize="0.4"
-# Default 0.4, Options 0.1-1.0
RoundCorners=""
Locale="hu"
-# Locale for data and time format. I suggest leaving it blank.
HourFormat="HH:mm"
-# Default Locale.ShortFormat.
DateFormat="MMMM d dddd"
-# Default Locale.LongFormat.
HeaderText=""
-# You can put somehting fun.
-#################### Background ####################
BackgroundPlaceholder="Backgrounds/rave_background.png"
-# Must be a relative path.
-# Background displayed before the actual background is loaded.
-# Use only if the background is a video, otherwise leave blank.
-# Connected with: Background.
-# Background="Backgrounds/sddm_bg_animated.mp4"
Background="Backgrounds/rave_background.png"
-# Must be a relative path.
-# Supports: png, jpg, jpeg, webp, gif, avi, mp4, mov, mkv, m4v, webm.
BackgroundSpeed=""
-# Default 1.0. Options: 0.0-10.0 (can go higher).
-# Speed of animated wallpaper.
-# Connected with: Background.
PauseBackground=""
-# Default false.
-# If set to true, stops playback of gifs. Works only with gifs.
-# Connected with: Background.
LoopBackground="false"
-# Default false.
-# If set to true, loops video playback infinitely. When false, freezes on the last frame when video ends.
-# Connected with: Background.
DimBackground="0.0"
-# Options: 0.0-1.0.
-# Connected with: DimBackgroundColor
CropBackground="true"
-# Default false.
-# Crop or fit background.
-# Connected with: BackgroundHorizontalAlignment and BackgroundVerticalAlignment dosn't work when set to true.
BackgroundHorizontalAlignment="center"
-# Default: center, Options: left, center, right.
-# Horizontal position of the background picture.
-# Connected with: CropBackground must be set to false.
BackgroundVerticalAlignment="center"
-# Horizontal position of the background picture.
-# Default: center, Options: bottom, center, top.
-# Connected with: CropBackground must be set to false.
-#################### Colors ####################
HeaderTextColor="#ffffff"
DateTextColor="#ffffff"
@@ -109,32 +70,18 @@ HoverSystemButtonsIconsColor="#b7cef1"
HoverSessionButtonTextColor="#b7cef1"
HoverVirtualKeyboardButtonTextColor="#b7cef1"
-#################### Form ####################
PartialBlur="true"
-# Default false.
FullBlur=""
-# Default false.
-# If you use FullBlur I recommend setting BlurMax to 64 and Blur to 1.0.
BlurMax="48"
-# Default 48, Options: 2-64.
-# Connected with: Blur.
Blur="1.0"
-# Default 1.0, Options: 0.0-1.0.
-# Connected with: BlurMax.
HaveFormBackground="false"
-# Form background is transparent if set to false.
-# Connected with: PartialBlur and BackgroundColor.
FormPosition="right"
-# Default: left, Options: left, center, right.
-#################### Virtual Keyboard ####################
VirtualKeyboardPosition="left"
-# Default: left, Options: left, center, right.
-#################### Interface Behavior ####################
HideKeyboardLayout="true"
HideVirtualKeyboard="false"
@@ -142,23 +89,14 @@ HideSystemButtons="false"
HideLoginButton="false"
ForceLastUser="true"
-# If set to true last successfully logged in user appeares automatically in the username field.
PasswordFocus="true"
-# Automaticaly focuses password field.
HideCompletePassword="true"
-# Hides the password while typing.
AllowEmptyPassword="false"
-# Enable login for users without a password.
AllowUppercaseLettersInUsernames="false"
-# Do not change this! Uppercase letters are generally not allowed in usernames. This option is only for systems that differ from this standard!
BypassSystemButtonsChecks="false"
-# Skips checking if sddm can perform shutdown, restart, suspend or hibernate, always displays all system buttons.
RightToLeftLayout="false"
-# Revert the layout either because you would like the login to be on the right hand side or SDDM won't respect your language locale for some reason. This will reverse the current position of FormPosition if it is either left or right and in addition position some smaller elements on the right hand side of the form itself (also when FormPosition is set to center).
-#################### Translation ####################
-# These don't necessarily need to translate anything. You can enter whatever you want here.
TranslatePlaceholderUsername=""
TranslatePlaceholderPassword=""
TranslateLogin=""
diff --git a/raveos-support/PKGBUILD b/raveos-support/PKGBUILD
index 556ad74..aeffdec 100644
--- a/raveos-support/PKGBUILD
+++ b/raveos-support/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=raveos-support
pkgver=1.0.0
-pkgrel=2
+pkgrel=3
pkgdesc="RaveOS Support launcher (opens the support page in the browser)"
arch=('any')
url="https://git.rp1.hu/RaveOS/RaveOS-PKGBUILD"
diff --git a/raveos-support/raveos-support b/raveos-support/raveos-support
index e8031db..645d2f9 100755
--- a/raveos-support/raveos-support
+++ b/raveos-support/raveos-support
@@ -1,6 +1,5 @@
#!/usr/bin/env bash
-# RaveOS Support - opens the support page in the default browser.
URL="https://ko-fi.com/raveteam"
diff --git a/raveos-tools/PKGBUILD b/raveos-tools/PKGBUILD
index 5197065..03d6cae 100644
--- a/raveos-tools/PKGBUILD
+++ b/raveos-tools/PKGBUILD
@@ -1,7 +1,8 @@
# Maintainer: nippy <nippy@tuta.io>
pkgname=raveos-tools
pkgver=1.0.0
-pkgrel=11
+pkgrel=12
+pkgdesc="RaveOS tools and helper scripts"
arch=('any')
url="https://git.rp1.hu/RaveOS/RaveOS-PKGBUILD"
license=('custom')
diff --git a/raveos-updater/PKGBUILD b/raveos-updater/PKGBUILD
index 239f96d..7c795c1 100644
--- a/raveos-updater/PKGBUILD
+++ b/raveos-updater/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=raveos-updater
pkgver=1.0.0
-pkgrel=2
+pkgrel=3
pkgdesc="RaveOS update checker background service and tray indicator"
arch=('any')
url="https://git.rp1.hu/RaveOS"
diff --git a/raveos-updater/raveos-updater b/raveos-updater/raveos-updater
index ad0c142..ebbb8e3 100644
--- a/raveos-updater/raveos-updater
+++ b/raveos-updater/raveos-updater
@@ -88,8 +88,6 @@ class Updater:
self.tray.setContextMenu(self.menu)
self.refresh()
self.tray.show()
- # Qt6 SNI: a tálca-ikon regisztrációjához legalább egy esemény-hurok
- # iteráció kell, különben GNOME-on nem jelenik meg az ikon.
self.app.processEvents()
self.timer = QTimer()
diff --git a/raveos-welcome/PKGBUILD b/raveos-welcome/PKGBUILD
index 85f62b5..3ed1301 100644
--- a/raveos-welcome/PKGBUILD
+++ b/raveos-welcome/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: nippy <nippy@tuta.io>
pkgname=raveos-welcome
pkgver=2.2.2
-pkgrel=8
+pkgrel=9
pkgdesc="RaveOS Welcome Application and Safe GPU Performance Optimizer"
arch=('x86_64')
url="https://git.rp1.hu/RaveOS/RaveOS-PKGBUILD"
@@ -34,7 +34,6 @@ package() {
find "${pkgdir}/usr/share/raveos-welcome/brave-profile" -type f -exec chmod 644 {} +
fi
- # Safe GPU Performance Optimizer & Systemd/Udev Units
[ -f "${startdir}/raveos-gpu-optimizer.sh" ] && install -Dm755 "${startdir}/raveos-gpu-optimizer.sh" "${pkgdir}/usr/bin/raveos-gpu-optimizer"
[ -f "${startdir}/gpu-optimization.service" ] && install -Dm644 "${startdir}/gpu-optimization.service" "${pkgdir}/usr/lib/systemd/system/gpu-optimization.service"
[ -f "${startdir}/99-gpu-monitor.rules" ] && install -Dm644 "${startdir}/99-gpu-monitor.rules" "${pkgdir}/etc/udev/rules.d/99-gpu-monitor.rules"
diff --git a/raveos-welcome/gaming-optimize.sh b/raveos-welcome/gaming-optimize.sh
index a4c846a..ef9aaf5 100755
--- a/raveos-welcome/gaming-optimize.sh
+++ b/raveos-welcome/gaming-optimize.sh
@@ -1,5 +1,4 @@
#!/bin/bash
-# RaveOS Gaming Optimization Helper - fut root-ként pkexec-en keresztül
set -uo pipefail
LOGDIR="/var/log/raveos-welcome"
@@ -51,7 +50,6 @@ EOF
udevadm control --reload-rules 2>/dev/null || true
udevadm trigger --subsystem-match=block --action=change 2>/dev/null || true
- # azonnali alkalmazas is, ne csak legkozelebbi boot/hotplug-kor
for sched in /sys/block/*/queue/scheduler; do
[ -f "$sched" ] || continue
dev="${sched%/queue/scheduler}"
@@ -147,9 +145,6 @@ apply_amd_overdrive() {
}
apply_brave() {
- # brave-origin-bin kesz binariskent elerheto a chaotic-aur repoban,
- # nincs szukseg yay/AUR buildre (ami korabban lefagyott a PKGBUILD-diff
- # promptnal, mert a --noconfirm azt nem nemitja el).
if pacman -S --noconfirm --needed brave-origin-bin; then
echo "[OK] brave-origin telepitve"
return 0
@@ -159,9 +154,6 @@ apply_brave() {
}
restore_brave_profile() {
- # Brave Origin a binarisba egetett "BraveSoftware/Brave-Origin" mappat
- # hasznalja (nem "Brave-Browser", mint a rendes Brave) - strings-szel
- # ellenorizve az /opt/brave-origin-bin/brave binariban.
local src="/usr/share/raveos-welcome/brave-profile/config/BraveSoftware/Brave-Browser"
if [ ! -d "$src" ]; then
echo "[FAIL] brave_profile: forras profil nem talalhato ($src)"
diff --git a/raveos-welcome/raveos-gpu-optimizer.sh b/raveos-welcome/raveos-gpu-optimizer.sh
index e24285a..3a429f6 100644
--- a/raveos-welcome/raveos-gpu-optimizer.sh
+++ b/raveos-welcome/raveos-gpu-optimizer.sh
@@ -1,10 +1,7 @@
#!/usr/bin/env bash
-# RaveOS Safe GPU Performance Optimizer & Stutter Preventer
-# Prevents P-state lock lag, Wayland compositor micro-stuttering, and thermal throttling drops.
set -euo pipefail
-# Root check
if [[ $EUID -ne 0 ]]; then
echo "[RaveOS-GPU] Error: Root permissions required." >&2
exit 1
@@ -14,32 +11,26 @@ log() {
echo "[RaveOS-GPU] $1"
}
-# 1. AMD GPU Optimization (Auto P-State + Smooth Power Cap)
optimize_amd() {
log "Optimizing AMD GPU acceleration without P-state locking..."
for card in /sys/class/drm/card*/device; do
if [ -f "$card/power_dpm_force_performance_level" ]; then
- # Use 'auto' instead of rigid 'high' to prevent mouse lag and compositor stutter
echo "auto" > "$card/power_dpm_force_performance_level" 2>/dev/null || true
fi
done
}
-# 2. NVIDIA GPU Optimization (Adaptive PowerMizer + Smooth TDP Limit)
optimize_nvidia() {
if command -v nvidia-smi &>/dev/null; then
log "Optimizing NVIDIA GPU (Adaptive PowerMizer mode)..."
- # Auto-boost enabled, avoiding forced clock lock that breaks PCIe ASPM
nvidia-smi --auto-boost-default=ENABLED 2>/dev/null || true
if command -v nvidia-settings &>/dev/null && [ -n "${DISPLAY:-}" ]; then
- # Set PowerMizer to Auto/Adaptive (0) instead of max performance (1) to prevent compositor stutter
nvidia-settings -a "[gpu:0]/GpuPowerMizerMode=0" 2>/dev/null || true
fi
fi
}
-# Main Execution
main() {
log "Starting safe GPU optimization..."
diff --git a/raveos-welcome/raveos_welcome.py b/raveos-welcome/raveos_welcome.py
index 7aa55c3..08b9bed 100644
--- a/raveos-welcome/raveos_welcome.py
+++ b/raveos-welcome/raveos_welcome.py
@@ -29,7 +29,6 @@ from PyQt6.QtGui import (
from PyQt6.QtWidgets import QProxyStyle, QStyle
from PyQt6.QtSvgWidgets import QSvgWidget
-# ─── Constants ────────────────────────────────────────────────────────────────
FLAG_FILE = Path.home() / ".config" / "raveos" / ".welcome_done"
APP_INSTALLER = "/usr/bin/raveos-app-installer"
@@ -52,7 +51,6 @@ COLORS = {
"error": "#e74c3c",
}
-# ─── Translations ─────────────────────────────────────────────────────────────
def _detect_system_lang():
"""Kezdőnyelv a rendszer locale alapján (hu/de, egyébként en)."""
@@ -69,17 +67,14 @@ def _detect_system_lang():
_current_lang = _detect_system_lang()
T = {
- # Nav
"nav_back": {"hu": "← Vissza", "de": "← Zurück", "en": "← Back"},
"nav_next": {"hu": "Tovább →", "de": "Weiter →", "en": "Next →"},
- # Step bar
"step_welcome": {"hu": "ÜDVÖZLÉS", "de": "WILLKOMMEN", "en": "WELCOME"},
"step_network": {"hu": "HÁLÓZAT", "de": "NETZWERK", "en": "NETWORK"},
"step_optimize": {"hu": "OPTIMALIZÁCIÓ", "de": "OPTIMIERUNG", "en": "OPTIMIZE"},
"step_hyprland": {"hu": "HYPRLAND", "de": "HYPRLAND", "en": "HYPRLAND"},
"step_credits": {"hu": "KÖZREMŰKÖDŐK", "de": "MITWIRKENDE", "en": "CREDITS"},
"step_finish": {"hu": "BEFEJEZÉS", "de": "ABSCHLUSS", "en": "FINISH"},
- # Welcome page
"welcome_tag": {"hu": "LINUX DISTRIBUTION", "de": "LINUX DISTRIBUTION", "en": "LINUX DISTRIBUTION"},
"welcome_about": {"hu": "RaveOS finomhangolás, kulcsra kész állapot!",
"de": "RaveOS optimiert, startklar!",
@@ -94,7 +89,6 @@ T = {
"feat_apps": {"hu": "App Installer\negy kattintás, minden szoftver",
"de": "App Installer\nein Klick, alle Software",
"en": "App Installer\none click, all software"},
- # WiFi page
"wifi_title": {"hu": "HÁLÓZAT", "de": "NETZWERK", "en": "NETWORK"},
"wifi_subtitle": {"hu": "WiFi kapcsolat", "de": "WLAN-Verbindung", "en": "WiFi connection"},
"wifi_scan": {"hu": "Frissítés", "de": "Aktualisieren", "en": "Refresh"},
@@ -111,7 +105,6 @@ T = {
"wifi_error": {"hu": "Hiba: {err}", "de": "Fehler: {err}", "en": "Error: {err}"},
"wifi_timeout": {"hu": "Időtúllépés - próbáld újra","de": "Zeitüberschreitung - bitte erneut versuchen", "en": "Timeout - try again"},
"wifi_unknown_err": {"hu": "Ismeretlen hiba", "de": "Unbekannter Fehler", "en": "Unknown error"},
- # Optimize page
"opt_title": {"hu": "OPTIMALIZÁCIÓ", "de": "OPTIMIERUNG", "en": "OPTIMIZATION"},
"opt_gaming": {"hu": "GAMING OPTIMALIZÁCIÓ - GPU: {gpu}", "de": "GAMING-OPTIMIERUNG - GPU: {gpu}", "en": "GAMING OPTIMIZATION - GPU: {gpu}"},
"opt_sysctl": {"hu": "Kernel/sysctl tweaks",
@@ -218,11 +211,9 @@ T = {
"opt_reboot_needed": {"hu": "A GPU optimalizációk érvénybe lépéséhez a számítógépet újra kell indítani!",
"de": "Für die GPU-Optimierungen ist ein Neustart erforderlich!",
"en": "A reboot is required for GPU optimizations to take effect!"},
- # Hyprland page
"hypr_title": {"hu": "HYPRLAND - KEYBINDS", "de": "HYPRLAND - TASTENKÜRZEL", "en": "HYPRLAND - KEYBINDS"},
"hypr_source": {"hu": "Forrás: ", "de": "Quelle: ", "en": "Source: "},
"hypr_none": {"hu": "Nem található Hyprland konfiguráció.", "de": "Keine Hyprland-Konfiguration gefunden.", "en": "No Hyprland configuration found."},
- # Hyprland descriptions
"hypr_spotlight": {"hu": "Spotlight (DMS) megnyitása", "de": "Spotlight (DMS) öffnen", "en": "Open Spotlight (DMS)"},
"hypr_terminal": {"hu": "Terminál megnyitása (Kitty)", "de": "Terminal öffnen (Kitty)", "en": "Open terminal (Kitty)"},
"hypr_filemanager": {"hu": "Fájlkezelő megnyitása (Thunar)", "de": "Dateimanager öffnen (Thunar)", "en": "Open file manager (Thunar)"},
@@ -260,7 +251,6 @@ T = {
"hypr_layout": {"hu": "Layout: {p}", "de": "Layout: {p}", "en": "Layout: {p}"},
"hypr_run": {"hu": "Futtatás: {prog}", "de": "Ausführen: {prog}", "en": "Run: {prog}"},
"hypr_run_generic": {"hu": "Program futtatása", "de": "Programm ausführen", "en": "Run program"},
- # Credits page
"credits_title": {"hu": "KÖZREMŰKÖDŐK", "de": "MITWIRKENDE", "en": "CONTRIBUTORS"},
"credits_rp1_name": {"hu": "RavePriest1", "de": "RavePriest1", "en": "RavePriest1"},
"credits_rp1_role": {"hu": "Névadó, hivatalos naplopó", "de": "Namensgeber, offizieller Faulenzer", "en": "Namesake, official slacker"},
@@ -274,7 +264,6 @@ T = {
"credits_stefi_name": {"hu": "Stefi", "de": "Stefi", "en": "Stefi"},
"credits_stefi_role": {"hu": "Design", "de": "Design", "en": "Design"},
"credits_stefi_desc": {"hu": "5000 lesz!", "de": "Das macht 5000!", "en": "That'll be 5000!"},
- # Finish page
"finish_ok": {"hu": "OK", "de": "OK", "en": "OK"},
"finish_title": {"hu": "KÉSZ!", "de": "FERTIG!", "en": "DONE!"},
"finish_sub": {"hu": "A RaveOS be van állítva.", "de": "RaveOS ist eingerichtet.", "en": "RaveOS is set up."},
@@ -289,7 +278,6 @@ T = {
"finish_close": {"hu": "Bezárás", "de": "Schließen", "en": "Close"},
"finish_install_missing": {"hu": "Nem található az App Installer.", "de": "App Installer nicht gefunden.", "en": "App Installer not found."},
"finish_install_err": {"hu": "Nem sikerült elindítani. Napló: {log}", "de": "Start fehlgeschlagen. Protokoll: {log}", "en": "Failed to launch. Log: {log}"},
- # Tooltip keys (for optimize page descriptions that use _ACTION_DESCS)
"action_killactive": {"hu": "Aktív ablak bezárása", "de": "Aktives Fenster schließen", "en": "Close active window"},
"action_togglefloat": {"hu": "Lebegő mód ki/be", "de": "Schwebenden Modus umschalten", "en": "Toggle floating mode"},
"action_pseudo": {"hu": "Pseudo-tiling ki/be", "de": "Pseudo-Tiling umschalten", "en": "Toggle pseudo-tiling"},
@@ -477,7 +465,6 @@ QToolTip {{
}}
"""
-# ─── WiFi Worker ───────────────────────────────────────────────────────────────
class WiFiScanner(QThread):
result = pyqtSignal(list)
@@ -537,7 +524,6 @@ class WiFiConnector(QThread):
self.failure.emit(str(e))
-# ─── Logo Widget ───────────────────────────────────────────────────────────────
def _find_svg() -> str:
if Path(SVG_LOGO).exists():
@@ -574,7 +560,6 @@ class RaveLogo(QWidget):
layout.addWidget(fallback)
-# ─── WiFi page visibility check ───────────────────────────────────────────────
def _should_show_wifi() -> bool:
try:
@@ -599,7 +584,6 @@ def _should_show_wifi() -> bool:
return has_wifi
-# ─── Signal bar helper ─────────────────────────────────────────────────────────
def signal_icon(signal: int) -> str:
if signal >= 80: return "▂▄▆█"
@@ -614,7 +598,6 @@ def security_tag(sec: str) -> str:
return _t("wifi_encrypted")
-# ─── Page 1: Welcome ───────────────────────────────────────────────────────────
class WelcomePage(QWidget):
def __init__(self):
@@ -626,7 +609,6 @@ class WelcomePage(QWidget):
lay.setContentsMargins(60, 40, 60, 40)
lay.setSpacing(0)
- # Logo
logo = RaveLogo()
lay.addWidget(logo, alignment=Qt.AlignmentFlag.AlignHCenter)
lay.addSpacing(10)
@@ -653,7 +635,6 @@ class WelcomePage(QWidget):
lay.addWidget(sep)
lay.addSpacing(24)
- # About card
card = QFrame()
card.setObjectName("card")
card_lay = QVBoxLayout(card)
@@ -699,7 +680,6 @@ class WelcomePage(QWidget):
lay.addWidget(card)
lay.addSpacing(18)
- # Community links
links_row1 = QHBoxLayout()
links_row1.setSpacing(8)
links_row2 = QHBoxLayout()
@@ -754,7 +734,6 @@ class WelcomePage(QWidget):
subprocess.Popen(["xdg-open", url])
-# ─── Page 2: WiFi ──────────────────────────────────────────────────────────────
class WiFiPage(QWidget):
def __init__(self):
@@ -798,7 +777,6 @@ class WiFiPage(QWidget):
self.list.itemClicked.connect(self._on_select)
lay.addWidget(self.list)
- # Password field
self.pw_frame = QFrame()
pw_lay = QVBoxLayout(self.pw_frame)
pw_lay.setContentsMargins(0, 0, 0, 0)
@@ -816,13 +794,11 @@ class WiFiPage(QWidget):
self.pw_frame.setVisible(False)
lay.addWidget(self.pw_frame)
- # Status
self.status_label = QLabel("")
self.status_label.setObjectName("body")
self.status_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
lay.addWidget(self.status_label)
- # Connect button
self.connect_btn = QPushButton(_t("wifi_connect"))
self.connect_btn.setObjectName("primary")
self.connect_btn.setEnabled(False)
@@ -912,13 +888,10 @@ class WiFiPage(QWidget):
self.connect_btn.setEnabled(True)
-# ─── Hyprland Detection ───────────────────────────────────────────────────────
HYPR_CONFIG = Path.home() / ".config" / "hypr" / "hyprland.conf"
_HYPR_FALLBACK = Path("/usr/share/raveos/hyprland-theme/theme-data/hypr/hyprland.conf")
-# Hyprland 0.55+ Lua config mod (RaveOS ezt hasznalja alapertelmezetten,
-# nincs is hagyomanyos hyprland.conf a rendszeren)
HYPR_KEYBINDS_LUA = Path.home() / ".config" / "hypr" / "config" / "keybinds.lua"
_HYPR_KEYBINDS_LUA_FALLBACK = Path(
"/usr/share/raveos/hyprland-theme/theme-data/hypr/config/keybinds.lua"
@@ -1111,10 +1084,6 @@ def _parse_hypr_binds(config_path: Path) -> list:
return binds
-# ─── Hyprland Lua config parser (keybinds.lua, hl.bind(...) hivasok) ─────────
-# Best-effort parser: nem valodi Lua interpreter, csak a RaveOS keybinds.lua
-# tipikus mintait (hl.bind("KEY", hl.dsp.xxx(...)), local string valtozok,
-# egyszeru "for i = a, b do ... end" munkaterulet-ciklusok) ismeri fel.
def _lua_extract_call(line: str, funcname: str):
marker = funcname + "("
@@ -1268,8 +1237,6 @@ def _lua_try_add_bind(line: str, env: dict, binds: list):
return
combo = _fmt_key(combo_raw)
- # ciklus-valtozok (pl. workspace = i) behelyettesitese a dispatcher
- # kifejezesbe is, hogy a leiras a tenyleges munkaterulet-szamot mutassa
dispatch_expr = args[1]
for name, value in env.items():
if isinstance(value, int):
@@ -1342,7 +1309,6 @@ def _parse_hypr_binds_lua(path: Path) -> list:
return binds
-# ─── Page: Hyprland Keybinds ─────────────────────────────────────────────────
class HyprlandPage(QWidget):
def __init__(self):
@@ -1351,8 +1317,6 @@ class HyprlandPage(QWidget):
self._binds = _parse_hypr_binds(cfg)
self._cfg_path = cfg
if not self._binds:
- # nincs hagyomanyos hyprland.conf (vagy nincs benne bind sor) -
- # a RaveOS Hyprland 0.55+ Lua config modot hasznalja
lua_cfg = HYPR_KEYBINDS_LUA if HYPR_KEYBINDS_LUA.exists() else _HYPR_KEYBINDS_LUA_FALLBACK
lua_binds = _parse_hypr_binds_lua(lua_cfg)
if lua_binds:
@@ -1439,7 +1403,6 @@ class HyprlandPage(QWidget):
self.msg.setText(_t("hypr_none"))
-# ─── GPU Detection ────────────────────────────────────────────────────────────
def _detect_gpu() -> tuple[str, str]:
gpu_type = "other"
@@ -1570,7 +1533,6 @@ def _detect_gpu() -> tuple[str, str]:
return gpu_type, gpu_label
-# ─── Page 3: Optimize ──────────────────────────────────────────────────────────
OPTIMIZE_SCRIPT = "/usr/share/raveos-welcome/gaming-optimize.sh"
OPTIMIZE_LOG = "/var/log/raveos-welcome/gaming-optimize.log"
@@ -1623,7 +1585,6 @@ class OptimizePage(QWidget):
vlay.setContentsMargins(0, 0, 8, 0)
vlay.setSpacing(4)
- # --- Gaming optimization ---
self.sec1 = QLabel(_t("opt_gaming", gpu=self._gpu_label))
self.sec1.setObjectName("section_title")
vlay.addWidget(self.sec1)
@@ -1655,7 +1616,6 @@ class OptimizePage(QWidget):
scroll.setWidget(inner)
lay.addWidget(scroll, 1)
- # Status + gomb
self.status_lbl = QLabel("")
self.status_lbl.setObjectName("body")
self.status_lbl.setAlignment(Qt.AlignmentFlag.AlignCenter)
@@ -1748,7 +1708,6 @@ class OptimizePage(QWidget):
self.status_lbl.setText(_t("opt_apply_err", code=exit_code, log=OPTIMIZE_LOG))
-# ─── Page 4: Credits ──────────────────────────────────────────────────────────
class CreditsPage(QWidget):
def __init__(self):
@@ -1827,7 +1786,6 @@ class CreditsPage(QWidget):
desc_lbl.setText(_t(desc_key))
-# ─── Page 5: Finish ────────────────────────────────────────────────────────────
class FinishPage(QWidget):
launch_installer = pyqtSignal()
@@ -1868,7 +1826,6 @@ class FinishPage(QWidget):
lay.addWidget(sep)
lay.addSpacing(24)
- # App installer CTA card
card = QFrame()
card.setObjectName("card")
card_lay = QVBoxLayout(card)
@@ -1930,7 +1887,6 @@ class FinishPage(QWidget):
self.install_status.setVisible(True)
-# ─── Main Window ───────────────────────────────────────────────────────────────
class RaveOSWelcome(QMainWindow):
def __init__(self):
@@ -1955,15 +1911,12 @@ class RaveOSWelcome(QMainWindow):
root.setContentsMargins(0, 0, 0, 0)
root.setSpacing(0)
- # Step indicator bar
self.step_bar = self._make_step_bar()
root.addWidget(self.step_bar)
- # Page container
self.stack = QStackedWidget()
root.addWidget(self.stack, stretch=1)
- # Pages
self.p_welcome = WelcomePage()
self.p_optimize = OptimizePage()
self.p_credits = CreditsPage()
@@ -1980,12 +1933,10 @@ class RaveOSWelcome(QMainWindow):
self.stack.addWidget(self.p_credits)
self.stack.addWidget(self.p_finish)
- # Nav buttons
nav = QHBoxLayout()
nav.setContentsMargins(24, 10, 24, 18)
nav.setSpacing(12)
- # Language selector (bottom-left)
self.lang_hu_btn = QPushButton("Magyar")
self.lang_hu_btn.setObjectName("lang_btn")
self.lang_hu_btn.setFixedHeight(30)
@@ -2185,11 +2136,6 @@ class RaveOSWelcome(QMainWindow):
os.environ.get("XDG_CURRENT_DESKTOP", "").lower() == "hyprland"
if is_hyprland:
- # Hyprland 0.55+ Lua config mod alatt a hagyomanyos
- # "hyprctl dispatch exec <parancs>" szintaxis mar nem mukodik,
- # csak a hl.dsp.exec_cmd("...") Lua hivas - de a regi .conf
- # alapu Hyprland telepiteseken meg a regi szintaxis a jo, ezert
- # eloszor azt probaljuk, es csak hiba eseten valtunk Lua-ra.
result = subprocess.run(
["hyprctl", "dispatch", "exec", cmd],
capture_output=True, text=True
@@ -2227,7 +2173,6 @@ class RaveOSWelcome(QMainWindow):
QTimer.singleShot(1200, _check)
-# ─── Flag helpers ──────────────────────────────────────────────────────────────
def _flag_exists() -> bool:
return FLAG_FILE.exists()
@@ -2237,7 +2182,6 @@ def _write_flag():
FLAG_FILE.touch()
-# ─── Fast tooltip style ────────────────────────────────────────────────────────
class _FastTooltipStyle(QProxyStyle):
def styleHint(self, hint, option=None, widget=None, returnData=None):
@@ -2248,7 +2192,6 @@ class _FastTooltipStyle(QProxyStyle):
return super().styleHint(hint, option, widget, returnData)
-# ─── Entry point ───────────────────────────────────────────────────────────────
def main():
if _flag_exists() and "--force" not in sys.argv:
diff --git a/raveswitch/PKGBUILD b/raveswitch/PKGBUILD
index e7de60d..ba43297 100644
--- a/raveswitch/PKGBUILD
+++ b/raveswitch/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: nippy <nippy@tuta.io>
pkgname=raveswitch
pkgver=0.4.1
-pkgrel=7
+pkgrel=8
pkgdesc="A modern GTK4-based window switcher and application launcher for Hyprland"
arch=('x86_64' 'aarch64')
conflicts=('hyprshell')
@@ -11,20 +11,18 @@ license=("MIT")
makedepends=('cargo' 'git')
optdepends=('org.freedesktop.secrets: Store clipboard encryption in the keyring')
depends=('hyprland' 'gtk4-layer-shell' 'gtk4' 'libadwaita' 'zstd')
-source=("hyprland_raveswitch::git+ssh://git@git.rp1.hu/gabeszm/hyprland_raveswitch.git")
+source=("hyprland_raveswitch::git+https://git.rp1.hu/gabeszm/hyprland_raveswitch.git")
sha256sums=('SKIP')
prepare() {
export RUSTUP_TOOLCHAIN=stable
cd hyprland_raveswitch
- # Ensure dep-crates and crates contain stub README.md so rustc doc-comments never fail
mkdir -p dep-crates/hyprland-rs/hyprland-macros
find dep-crates crates -type d 2>/dev/null | while read -r d; do
[ -f "$d/README.md" ] || echo "# vendored module" > "$d/README.md"
done
- # Ensure assets directory and logo.png exist
mkdir -p assets
if [ ! -f assets/logo.png ]; then
if [ -f assets/raveicon.png ]; then