Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a720bdb
feat: add desktop integration
reisaraujo-miguel Mar 12, 2025
be959cc
chore: fix several erros and warnings
reisaraujo-miguel Mar 13, 2025
05698c0
chore: don't create desktop entry when launching from editor
reisaraujo-miguel Mar 13, 2025
41f28a6
Fix: handle debug builds and fix some vriable naming and comments
reisaraujo-miguel Mar 13, 2025
f602296
Revert "chore: fix several erros and warnings"
reisaraujo-miguel Mar 13, 2025
ab9ce8c
Reverting non feature related changes
reisaraujo-miguel Mar 13, 2025
1c6656e
Revert "Fix: handle debug builds and fix some vriable naming and comm…
reisaraujo-miguel Apr 1, 2025
b834d98
Revert "chore: don't create desktop entry when launching from editor"
reisaraujo-miguel Apr 1, 2025
215195e
Revert "chore: fix several erros and warnings"
reisaraujo-miguel Apr 1, 2025
84e746d
Revert "feat: add desktop integration"
reisaraujo-miguel Apr 1, 2025
2b0445e
Fix: Reverting everything and addig an installation script
reisaraujo-miguel Apr 1, 2025
b0d0e84
Revert "Reverting non feature related changes"
reisaraujo-miguel Apr 1, 2025
fcdd5f0
Revert "Reverting all the desktop integration code"
reisaraujo-miguel Apr 1, 2025
435a59b
Revert "Fix: handle debug builds and fix some vriable naming and comm…
reisaraujo-miguel Apr 1, 2025
59c9efb
Revert "chore: don't create desktop entry when launching from editor"
reisaraujo-miguel Apr 1, 2025
1fd8807
Revert "chore: fix several erros and warnings"
reisaraujo-miguel Apr 1, 2025
1354ede
Revert "feat: add desktop integration"
reisaraujo-miguel Apr 1, 2025
8d02b15
Merge branch 'main' into feat/desktop-integration
reisaraujo-miguel Apr 1, 2025
4ddf93b
add exit conditions and fix desktop exec and icon paths
reisaraujo-miguel Apr 1, 2025
3cae8d9
Handle edge cases and update desktop database after install
reisaraujo-miguel Sep 15, 2025
3768d76
fix typo
reisaraujo-miguel Sep 15, 2025
380cf5f
Merge remote-tracking branch 'upstream/main' into feat/desktop-integr…
reisaraujo-miguel Dec 18, 2025
e56337e
chore: add install script instruction on README
reisaraujo-miguel Dec 18, 2025
e7b21f9
fix: fix gtk-update-icon-cache command
reisaraujo-miguel Dec 18, 2025
3f89b0f
feat: verifies checksum and adds some error handleling
reisaraujo-miguel Dec 19, 2025
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
26 changes: 21 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,60 +10,76 @@ Everything you need is in one place — downloading editors, keeping multiple ve
## **Installation**

### **Windows**

- Download the ZIP, extract it, and run the executable.
- No additional setup required.

### **Linux**

- Unzip and launch the binary directly.

Alternatively:

- Install from Flathub (**community maintained**):
<div align="start">
<a href='https://flathub.org/apps/details/io.github.MakovWait.Godots'><img width="250" alt='Download on Flathub' src='https://raw.githubusercontent.com/flxzt/rnote/main/misc/assets/flathub-badge.svg'/></a>
</div>

- Arch Linux users can install via AUR (**community maintained**):
- [`godots-bin`](https://aur.archlinux.org/packages/godots-bin)
- Arch Linux users can install via AUR (**community maintained**):
- [`godots-bin`](https://aur.archlinux.org/packages/godots-bin)
- [`godots-git`](https://aur.archlinux.org/packages/godots-git)

- You can also use the installation script:

```shell
curl -fsSL https://raw.githubusercontent.com/MakovWait/godots/main/install.sh | bash
```

### **macOS**

- Unzip and run **Godots.app**.
- macOS may require removing the quarantine flag:
```sh
sudo xattr -r -d com.apple.quarantine /Applications/Godots.app
```

Download any build directly from:
Download any build directly from:
👉 **[Latest Releases](https://github.com/MakovWait/godots/releases)**

---

## **Features**

### **Download & manage any Godot version**

- Fetch any official release from GitHub.
- Keep multiple versions side-by-side.
- Add custom local Godot binaries.

### **Full project manager**

- Add, import, organize, and launch projects.
- Bind specific engine versions to individual projects.
- Launch/edit projects directly with their assigned version.
- Drag & drop `project.godot` or entire project folders.

### **HiDPI / Retina support**

- Sharp, crisp UI on high-resolution displays.

### **Theming**

- Supports custom themes compatible with Godot’s own theming system.
- Guide: 👉 **[Theming Documentation](.github/assets/THEMING.md)**
![image](https://github.com/MakovWait/godots/blob/main/.github/assets/screenshot3.png)
![image](https://github.com/MakovWait/godots/blob/main/.github/assets/screenshot3.png)

### **CLI interface**
- Manage projects and versions through the command line.

- Manage projects and versions through the command line.
Details: 👉 **[CLI Features](.github/assets/FEATURES.md#cli)**

---

## **License**

MIT License — see `LICENSE.md`.
177 changes: 177 additions & 0 deletions install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
#!/bin/env bash

GODOTS_DOWNLOAD_URL="https://github.com/MakovWait/godots/releases/latest/download/LinuxX11.zip"
GODOTS_TMP_DIR="/tmp/godots"

GODOTS_CHECKSUM_URL="https://github.com/MakovWait/godots/releases/latest/download/SHA512-SUMS.txt"

if [[ -z "$XDG_DATA_HOME" ]]; then
GODOTS_INSTALL_DIR="$XDG_DATA_HOME/godots"
else
GODOTS_INSTALL_DIR="$HOME/.local/share/godots"
fi

GODOTS_BIN_PATH="$GODOTS_INSTALL_DIR/Godots.x86_64"

ICON_DOWNLOAD_URL="https://raw.githubusercontent.com/MakovWait/godots/refs/heads/main/icon.svg"

try_download() {
download_url=$1
path=$2
if command -v wget &>/dev/null; then
wget --show-progress --tries=3 -q -P "$path" "$download_url" || {
printf "Error: Download failed.\n"
exit 1
}
elif command -v curl &>/dev/null; then
curl -fSL --progress-bar -O --output-dir "$path" "$download_url" || {
printf "Error: Download failed.\n"
exit 1
}
else
printf "Error: Neither wget nor curl is available to download files, please install one of them and try again.\n"
exit 1
fi
}

rm -rf "$GODOTS_TMP_DIR" || {
printf "Error: Failed to clean up temporary directory.\n"
exit 1
}

mkdir -p "$GODOTS_TMP_DIR" || {
printf "Error: Failed to create temporary directory.\n"
exit 1
}

cd "$GODOTS_TMP_DIR" || {
printf "Error: Failed to access temporary directory.\n"
exit 1
}

printf "Downloading Godots...\n"
try_download "$GODOTS_DOWNLOAD_URL" "$GODOTS_TMP_DIR"

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shasum check should be added
sha256 may be fetched from digest property at https://api.github.com/repos/{owner}/{repo}/releases source

also I added SHA512-SUMS.txt to the latest workflow example

prompt_continue=0

if command -v sha512sum &>/dev/null; then
printf "\nDownloading checksum...\n"
try_download "$GODOTS_CHECKSUM_URL" "$GODOTS_TMP_DIR"

printf "\nVerifying checksum...\n"
sha512sum --check --ignore-missing "$GODOTS_TMP_DIR/SHA512-SUMS.txt" || prompt_continue=1

else
# I think it is part of coreutils, so it should be available on most systems. But just in case.
printf "Error: sha512sum is not available to verify the checksum. Skipping.\n"
prompt_continue=1
fi

if [[ $prompt_continue -eq 1 ]]; then
read -r -p "Checksum verification failed or was skipped. Do you want to continue the installation? (y/N): " choice
case "$choice" in
y | Y)
printf "Continuing installation...\n"
;;
*)
printf "Installation aborted.\n"
exit 1
;;
esac
fi

# Create installation directory
mkdir -p "$GODOTS_INSTALL_DIR" || {
printf "Error: Failed to create installation directory.\n"
exit 1
}

printf "\nExtracting Godots...\n"
if command -v python3 &>/dev/null; then
python3 -c "
import zipfile
import os
import sys

zip_path = '$GODOTS_TMP_DIR/LinuxX11.zip'
extract_dir = os.path.expanduser('$GODOTS_INSTALL_DIR')

# Create target directory if it doesn't exist
os.makedirs(extract_dir, exist_ok=True)

# Extract the zip file
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_dir)

print('Extraction completed successfully!')
" || {
printf "Error: Extraction failed.\n"
exit 1
}
elif command -v unzip &>/dev/null; then
unzip -o "$GODOTS_TMP_DIR/LinuxX11.zip" -d "$GODOTS_INSTALL_DIR" || {
printf "Error: Extraction failed.\n"
exit 1
}
printf "Extraction completed successfully!\n"
else
printf "Error: Neither python3 nor unzip is available to extract the zip file, please install one of them and try again.\n"
exit 1
fi

chmod +x "$GODOTS_INSTALL_DIR/"* || {
printf "Error: Failed to set executable permissions.\n"
exit 1
}

mkdir -p "$HOME/.local/bin" || {
printf "Error: Failed to create ~/.local/bin directory.\n"
exit 1
}

ln -sf "$GODOTS_BIN_PATH" "$HOME/.local/bin/godots" || {
printf "Error: Failed to create symlink in ~/.local/bin.\n"
exit 1
}

printf "\nDownloading icon...\n"
try_download "$ICON_DOWNLOAD_URL" "$GODOTS_INSTALL_DIR"

printf "\nCreating desktop entry..."
mkdir -p ~/.local/share/applications || {
printf "Error: Failed to create applications directory.\n"
exit 1
}

cat <<EOF >~/.local/share/applications/godots.desktop
[Desktop Entry]
Name=Godots
GenericName=Libre game engine version manager
Comment=Ultimate go-to hub for managing your Godot versions and projects!
Exec=$GODOTS_BIN_PATH %U
Icon=$GODOTS_INSTALL_DIR/icon.svg
PrefersNonDefaultGPU=true
Terminal=false
Type=Application
Categories=Development;IDE;
StartupWMClass=Godot
EOF

if [[ ! -f ~/.local/share/applications/godots.desktop ]]; then
printf "Error: Failed to create desktop entry.\n"
exit 1
fi

if command -v update-desktop-database &>/dev/null; then
update-desktop-database -q
fi

if command -v gtk-update-icon-cache &>/dev/null; then
gtk-update-icon-cache
fi

if command -v kbuildsycoca5 &>/dev/null; then
kbuildsycoca5 --noincremental &>/dev/null
fi

printf "\nInstallation completed successfully!\n"