A comprehensive automated setup script for transforming fresh Linux installations into fully configured development and gaming workstations. Supports multiple distributions and handles both workstation and server configurations.
- Python 3.12 with pip
- Docker Engine with Compose and NVIDIA container runtime support
- Visual Studio Code with extensions support
- Tailscale VPN for secure networking
- Nextcloud Desktop client for file synchronization
- LibreOffice productivity suite
- System utilities (htop, CIFS/SMB tools)
- Steam gaming platform
- Proton-GE compatibility layer for Windows games
- Game Launchers:
- Battle.net (Blizzard games)
- EA App (Electronic Arts games)
- Epic Games Launcher (Epic Games Store)
- NVIDIA: Proprietary drivers, CUDA toolkit, cuDNN
- AMD: Mesa drivers and utilities
- Intel: Mesa drivers with hardware acceleration
- Manjaro Linux (Arch-based)
- Raw Arch Linux (with GNOME installation option)
- Fedora Linux (with RPM Fusion)
- Ubuntu Linux (with official repositories)
- Fresh Linux installation (one of the supported distributions)
- Internet connection for downloading packages and installers
- User account with sudo privileges
- At least 10GB free disk space for gaming components
-
Download the script:
git clone https://github.com/nuniesmith/personal_linux.git cd personal_linux chmod +x setup.sh -
Run with default settings:
sudo ./setup.sh
-
Run interactively (recommended for first-time users):
./setup.sh # Answer 'y' when prompted for interactive mode
The script can be configured by editing boolean flags at the top of setup.sh:
# Master Boolean Flags
INSTALL_PYTHON=true
INSTALL_DOCKER=true
INSTALL_VSCODE=true
INSTALL_TAILSCALE=true
INSTALL_NEXTCLOUD=true
INSTALL_LIBREOFFICE=true
INSTALL_HTOP=true
INSTALL_CIFS=true
INSTALL_STEAM=true
INSTALL_PROTON=true
INSTALL_BATTLENET=true
INSTALL_EA=true
INSTALL_EPIC=true
INSTALL_GPU_DRIVERS=true
INSTALL_EXTRA_CUDA=true- Workstation: Full installation including GUI applications and gaming
- Server: CLI-only installation, skips GUI and gaming components
After installation, the following launcher scripts are created:
- Location:
~/Desktop/battlenet.shand~/bin/battlenet.sh - Usage:
./battlenet.shorbattlenet.sh(if ~/bin is in PATH) - Method: Uses Bottles (Flatpak) for better compatibility and ease of use
- Setup: Configure Battle.net in Bottles GUI after first launch
- Configuration: See
BOTTLES_CONFIG.mdfor community-tested setup - Games: World of Warcraft, Overwatch, Diablo series, StarCraft, Call of Duty, etc.
- Location:
~/Desktop/ea-app.shand~/bin/ea-app.sh - Usage:
./ea-app.shorea-app.sh - Method: Uses Proton-GE (can also use Bottles - see
BOTTLES_CONFIG.md) - Games: FIFA, Battlefield, The Sims, Need for Speed, Apex Legends, etc.
- Location:
~/Desktop/epic-games.shand~/bin/epic-games.sh - Usage:
./epic-games.shorepic-games.sh - Method: Uses Proton-GE (can also use Bottles - see
BOTTLES_CONFIG.md) - Games: Fortnite, Rocket League, Fall Guys, free weekly games, etc.
A convenient interactive menu to launch all your game clients:
~/Desktop/game.sh
# or simply:
gameQuick Launch Commands:
game battlenet # Launch Battle.net
game ea # Launch EA App
game epic # Launch Epic Games
game steam # Launch Steam
game all # Launch all game clients
game status # Check installation status
game kill # Stop all game processesInteractive Mode:
Simply run game without arguments to see an interactive menu with all options!
A comprehensive gaming management script is also created:
~/Desktop/gaming-utils.sh [command]Available commands:
launch [battlenet|ea|epic]- Launch specific game clientconfig [battlenet|ea|epic]- Open Wine configurationkill [battlenet|ea|epic]- Terminate client processeslogs [battlenet|ea|epic]- Show client logswinetricks [battlenet|ea|epic]- Run winetricks for prefixreset [battlenet|ea|epic]- Reset Wine prefix (WARNING: removes all data)
Game launchers use isolated Wine environments:
- Battle.net: Managed by Bottles (stored in
~/.var/app/com.usebottles.bottles/) - EA App:
~/.wine-ea/pfx/(Proton-GE) or Bottles - Epic Games:
~/.wine-epic/pfx/(Proton-GE) or Bottles
📚 For detailed Bottles configuration with community-tested settings, see BOTTLES_CONFIG.md
The script automatically downloads and installs the latest Proton-GE release:
- Location:
~/.proton/current/(symlink to latest version) - Source: GloriousEggroll/proton-ge-custom
- Compatibility: Optimized for gaming with latest fixes
For NVIDIA systems, Docker is configured with:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}The script automatically detects your GPU and installs appropriate drivers:
# Auto-detection logic
if lspci | grep -i nvidia; then
GPU_TYPE="nvidia"
elif lspci | grep -i amd; then
GPU_TYPE="amd"
elif lspci | grep -i intel; then
GPU_TYPE="intel"
fi📚 For detailed troubleshooting and configuration, see BOTTLES_CONFIG.md
-
For Battle.net (Bottles):
# Check if Bottles is installed flatpak list | grep bottles # Launch Bottles GUI to check configuration flatpak run com.usebottles.bottles # Verify Battle.net bottle exists in Bottles GUI # See BOTTLES_CONFIG.md for community-tested dependencies
-
For EA App and Epic Games (Proton):
# Check Wine prefix integrity ls -la ~/.wine-ea/pfx/drive_c/ ls -la ~/.wine-epic/pfx/drive_c/ # Verify Proton installation ls -la ~/.proton/current/proton
-
Check for conflicting processes:
ps aux | grep -E "(Battle.net|EA|Epic)" pkill -f "Battle.net" # Kill if needed
Battle.net (Bottles): Bottles automatically handles rendering and compatibility settings through its GUI. If you experience issues:
- Open Bottles GUI
- Select your Battle.net bottle
- Adjust settings in Preferences → Runner or Graphics
EA App and Epic Games (Proton): If launchers show display problems:
-
Software rendering mode (default in our scripts):
export PROTON_USE_WINED3D=1 -
Alternative: Hardware rendering mode:
export PROTON_USE_WINED3D=0
# Add user to docker group
sudo usermod -aG docker $USER
# Log out and log back in, or use:
newgrp docker# Check NVIDIA container runtime
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smiIf launcher scripts fail, use these manual commands:
# Launch Bottles GUI
flatpak run com.usebottles.bottles
# Or if Battle.net is configured, you can launch directly from Bottles CLI
flatpak run --command=bottles-cli com.usebottles.bottles run -b "Battle.net" -p "Battle.net"export STEAM_COMPAT_CLIENT_INSTALL_PATH=~/.steam
export STEAM_COMPAT_DATA_PATH=~/.wine-ea
export WINEPREFIX=~/.wine-ea/pfx
~/.proton/GE-Proton10-21/files/bin/wine "~/.wine-ea/pfx/drive_c/Program Files/Electronic Arts/EA Desktop/EA Desktop/EADesktop.exe"export STEAM_COMPAT_CLIENT_INSTALL_PATH=~/.steam
export STEAM_COMPAT_DATA_PATH=~/.wine-epic
export WINEPREFIX=~/.wine-epic/pfx
~/.proton/GE-Proton10-21/files/bin/wine "~/.wine-epic/pfx/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win32/EpicGamesLauncher.exe"- Setup script logs:
/tmp/setup_script.log - Battle.net logs: Check in Bottles GUI → Battle.net bottle → Programs → Battle.net → View logs
- Bottles logs:
~/.var/app/com.usebottles.bottles/data/bottles/bottles/ - EA App logs:
~/.wine-ea/pfx/drive_c/users/steamuser/AppData/Local/Electronic Arts/EA Desktop/ - Epic Games logs:
~/.wine-epic/pfx/drive_c/users/steamuser/AppData/Local/EpicGamesLauncher/Saved/Logs/
# Manual update to latest Proton-GE
cd ~/.proton
rm current
# Download latest release
latest_release=$(curl -s https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases/latest)
asset_url=$(echo "$latest_release" | jq -r '.assets[] | select(.name | endswith(".tar.gz")) .browser_download_url')
asset_name=$(echo "$latest_release" | jq -r '.assets[] | select(.name | endswith(".tar.gz")) .name')
curl -L -o "$asset_name" "$asset_url"
tar -xzf "$asset_name"
rm "$asset_name"
folder_name="${asset_name%.tar.gz}"
ln -s "$folder_name" currentGame launchers typically update themselves automatically when launched. If you encounter issues:
-
Battle.net (Bottles):
- Updates are managed within Bottles
- Open Bottles GUI and update the Battle.net program if needed
- To reinstall: Delete the bottle and create a new one following the setup guide
-
EA App and Epic Games (Proton) - Reset Wine prefix (
⚠️ WARNING: Removes all installed games):~/Desktop/gaming-utils.sh reset ea # or epic # Then re-run the setup script with only gaming flags enabled
-
Reinstall specific launcher:
# Edit setup.sh to set only the desired launcher to true INSTALL_BATTLENET=true # or INSTALL_EA=true or INSTALL_EPIC=true # Set all others to false, then run: sudo ./setup.sh
After installation, your system will have the following structure:
~/
├── .proton/
│ ├── current/ # Symlink to latest Proton-GE
│ └── GE-Proton10-21/ # Actual Proton installation
├── .var/app/com.usebottles.bottles/
│ └── data/bottles/bottles/ # Bottles data (Battle.net)
├── .wine-ea/
│ └── pfx/drive_c/ # EA App Wine prefix
├── .wine-epic/
│ └── pfx/drive_c/ # Epic Games Wine prefix
├── Desktop/
│ ├── battlenet.sh # Battle.net launcher (Bottles)
│ ├── ea-app.sh # EA App launcher
│ ├── epic-games.sh # Epic Games launcher
│ ├── gaming-utils.sh # Gaming management utilities
│ └── game.sh # Interactive game launcher menu
└── bin/ # Copies of all launcher scripts
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes and test thoroughly
- Commit your changes:
git commit -am 'Add feature-name' - Push to the branch:
git push origin feature-name - Create a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- GloriousEggroll for Proton-GE
- Valve for Steam and Proton
- Wine development team
- Linux gaming community for compatibility fixes and testing
- Enable Steam Proton: Steam → Settings → Steam Play → Enable Steam Play for all other titles
- Check ProtonDB: Visit ProtonDB for game compatibility ratings
- Install additional fonts: Some games need Windows fonts for proper display
- Monitor performance: Use built-in Steam FPS counter or MangoHud
- Keep drivers updated: Especially important for NVIDIA users
- Join communities: r/linux_gaming, Discord servers for troubleshooting
Created with ❤️ for the Linux Gaming Community