Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
name: GraalVM build
on: [push, pull_request]
on:
push:
branches:
- master
pull_request:
branches:
- master


permissions:
contents: write
Expand All @@ -11,13 +18,13 @@ jobs:
- uses: actions/checkout@v4
- uses: graalvm/setup-graalvm@v1
with:
java-version: '17' # See 'Options' for more details
java-version: '17' # # See 'Options' for more details
distribution: 'graalvm' # See 'Supported distributions' for available options
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: Get version from Gradle
id: get_version
run: echo "VERSION=$(./gradlew properties | grep 'version:')" >> $GITHUB_ENV
run: echo "VERSION=$(./gradlew properties | grep 'version:' | awk '{print $2}')" >> $GITHUB_ENV

- name: Install native build dependencies
run: |
Expand All @@ -30,7 +37,7 @@ jobs:
libfreetype6-dev libgl-dev libglib2.0-dev libgtk-3-dev \
libpango1.0-dev libx11-dev libxtst-dev

- name: Example step
- name: Java Check
run: |
echo "GRAALVM_HOME: $GRAALVM_HOME"
echo "JAVA_HOME: $JAVA_HOME"
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
!**/src/main/**/build/
!**/src/test/**/build/
.kotlin
build

### IntelliJ IDEA ###
.idea/modules.xml
Expand Down
18 changes: 18 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

179 changes: 150 additions & 29 deletions Installer/setup.sh
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
#!/usr/bin/env bash
# VictusHub installer: move binary, setup passwordless sudo, create desktop entry with icon
# VictusHub installer supporting multiple init systems
# Moves binaries, sets up passwordless sudo, creates desktop entry and installs service

set -e

APP_NAME="VictusHub"
BINARY="./victusHub"
TARGET="/usr/local/bin/victusHub"
GUI_BINARY="./VictusHub"
SERVICE_BINARY="./VictusService"
GUI_TARGET="/usr/local/bin/VictusHub"
SERVICE_TARGET="/usr/local/bin/VictusService"

# Desktop entry
DESKTOP_DIR="$HOME/.local/share/applications"
DESKTOP_FILE="$DESKTOP_DIR/victushub.desktop"

ICON_SOURCE="./icon.png"
ICON_TARGET_DIR="$HOME/.local/share/icons/hicolor/128x128/apps"
ICON_TARGET="$ICON_TARGET_DIR/victushub.png"
# Sudoers
SUDOERS_FILE="/etc/sudoers.d/victusHub-$(whoami)"

# Sudoers for service
SUDOERS_FILE="/etc/sudoers.d/victusService-$(whoami)"

# ---------- 0️⃣ Check git ----------
if ! command -v git >/dev/null 2>&1; then
Expand All @@ -25,34 +28,46 @@ fi

# ---------- 1️⃣ Clone and build dependency ----------
if [[ ! -d "hp-wmi-fan-and-backlight-control" ]]; then
echo "Cloning hp-wmi-fan-and-backlight-control..."
git clone https://github.com/Vilez0/hp-wmi-fan-and-backlight-control
fi
cd hp-wmi-fan-and-backlight-control
echo "Building hp-wmi-fan-and-backlight-control..."
make
sudo make install-dkms
cd ..

# ---------- 2️⃣ Move binaries ----------
for BINARY in "$GUI_BINARY" "$SERVICE_BINARY"; do
if [[ ! -f "$BINARY" ]]; then
echo "Error: $BINARY not found in current directory"
exit 1
fi
done

# ---------- 1️⃣ Move binary ----------
if [[ ! -f "$BINARY" ]]; then
echo "Error: $BINARY not found in current directory"
exit 1
# GUI
if [[ ! -f "$GUI_TARGET" ]]; then
echo "Moving $GUI_BINARY -> $GUI_TARGET (requires sudo)..."
sudo mv "$GUI_BINARY" "$GUI_TARGET"
sudo chmod 755 "$GUI_TARGET"
else
echo "GUI binary already exists at $GUI_TARGET, skipping move."
fi

if [[ ! -f "$TARGET" ]]; then
echo "Moving $BINARY -> $TARGET (requires sudo)..."
sudo mv "$BINARY" "$TARGET"
sudo chmod 755 "$TARGET"
echo "Binary moved and executable at $TARGET"
# Service
if [[ ! -f "$SERVICE_TARGET" ]]; then
echo "Moving $SERVICE_BINARY -> $SERVICE_TARGET (requires sudo)..."
sudo mv "$SERVICE_BINARY" "$SERVICE_TARGET"
sudo chmod 755 "$SERVICE_TARGET"
else
echo "Binary already exists at $TARGET, skipping move."
echo "Service binary already exists at $SERVICE_TARGET, skipping move."
fi

# ---------- 2️⃣ Sudoers setup ----------
# ---------- 3️⃣ Sudoers setup for service ----------
if [[ ! -f "$SUDOERS_FILE" ]]; then
read -p "Add passwordless sudo for $TARGET? (y/N): " ans
read -p "Add passwordless sudo for $SERVICE_TARGET? (y/N): " ans
if [[ "$ans" == "y" || "$ans" == "Y" ]]; then
echo "$(whoami) ALL=(root) NOPASSWD: $TARGET" | sudo tee "$SUDOERS_FILE" > /dev/null
echo "$(whoami) ALL=(root) NOPASSWD: $SERVICE_TARGET" | sudo tee "$SUDOERS_FILE" > /dev/null
sudo chmod 440 "$SUDOERS_FILE"
sudo visudo -c -f "$SUDOERS_FILE"
echo "Sudoers fragment created at $SUDOERS_FILE"
Expand All @@ -63,10 +78,9 @@ else
echo "Sudoers fragment already exists: $SUDOERS_FILE"
fi

# ---------- 3️⃣ Desktop entry ----------
# ---------- 4️⃣ Desktop entry for GUI ----------
mkdir -p "$DESKTOP_DIR"
mkdir -p "$ICON_TARGET_DIR"

if [[ -f "$ICON_SOURCE" ]]; then
cp "$ICON_SOURCE" "$ICON_TARGET"
echo "Icon copied to $ICON_TARGET"
Expand All @@ -78,21 +92,128 @@ cat > "$DESKTOP_FILE" <<EOL
[Desktop Entry]
Type=Application
Name=$APP_NAME
Exec=$TARGET %U
Exec=$GUI_TARGET %U
Icon=$ICON_TARGET
Terminal=false
Categories=Utility;Network;
StartupNotify=true
EOL

chmod 644 "$DESKTOP_FILE"
echo "Desktop entry created at $DESKTOP_FILE"


if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database "$DESKTOP_DIR" || true
fi
echo "Desktop entry created at $DESKTOP_FILE"

# ---------- 5️⃣ Detect init system ----------
INIT_SYSTEM=""
if command -v systemctl >/dev/null 2>&1; then
INIT_SYSTEM="systemd"
elif [[ -d "/etc/init.d" ]]; then
if command -v rc-status >/dev/null 2>&1; then
INIT_SYSTEM="openrc"
else
INIT_SYSTEM="sysvinit"
fi
elif [[ -d "/etc/runit" ]]; then
INIT_SYSTEM="runit"
elif [[ -d "/etc/dinit.d" ]]; then
INIT_SYSTEM="dinit"
else
echo "No supported init system detected"
exit 1
fi
echo "Detected init system: $INIT_SYSTEM"

# ---------- 6️⃣ Install service ----------
case "$INIT_SYSTEM" in
systemd)
SERVICE_FILE="/etc/systemd/system/victusservice.service"
sudo tee "$SERVICE_FILE" > /dev/null <<EOL
[Unit]
Description=VictusService background service
After=network.target

[Service]
ExecStart=$SERVICE_TARGET
Restart=always
User=root
Environment=PATH=/usr/local/bin:/usr/bin:/bin

[Install]
WantedBy=multi-user.target
EOL
sudo systemctl daemon-reload
sudo systemctl enable victusservice.service
sudo systemctl start victusservice.service
;;
sysvinit)
SERVICE_FILE="/etc/init.d/victusservice"
sudo tee "$SERVICE_FILE" > /dev/null <<'EOL'
#!/bin/sh
### BEGIN INIT INFO
# Provides: victusservice
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: VictusService background service
### END INIT INFO
case "$1" in
start)
$SERVICE_TARGET &
;;
stop)
pkill -f "$SERVICE_TARGET"
;;
restart)
pkill -f "$SERVICE_TARGET"
$SERVICE_TARGET &
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
EOL
sudo chmod +x "$SERVICE_FILE"
sudo update-rc.d victusservice defaults
sudo service victusservice start
;;
openrc)
SERVICE_FILE="/etc/init.d/victusservice"
sudo tee "$SERVICE_FILE" > /dev/null <<EOL
#!/sbin/openrc-run
name="victusservice"
command="$SERVICE_TARGET"
command_background=true
pidfile="/run/victusservice.pid"
EOL
sudo chmod +x "$SERVICE_FILE"
sudo rc-update add victusservice default
sudo rc-service victusservice start
;;
runit)
SERVICE_DIR="/etc/sv/victusservice"
sudo mkdir -p "$SERVICE_DIR"
sudo tee "$SERVICE_DIR/run" > /dev/null <<EOL
#!/bin/sh
exec $SERVICE_TARGET
EOL
sudo chmod +x "$SERVICE_DIR/run"
sudo ln -s "$SERVICE_DIR" /etc/service/
;;
dinit)
SERVICE_FILE="/etc/dinit.d/victusservice"
sudo tee "$SERVICE_FILE" > /dev/null <<EOL
#!/bin/sh
# VictusService dinit script
exec $SERVICE_TARGET
EOL
sudo chmod +x "$SERVICE_FILE"
sudo dinitctl reload
sudo dinitctl start victusservice
;;
esac

echo "Installation complete. You can now launch $APP_NAME from application menu or via terminal using:"
echo "sudo $TARGET # if sudo needed"
echo "or simply $TARGET # if passwordless sudo is set"
echo "Installation complete. GUI is ready and service installed under $INIT_SYSTEM"
Loading
Loading