_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' meta: version: PLCN_v3 update_url: 'https://raw.githubusercontent.com/pelican-eggs/games-steamcmd/refs/heads/main/valheim/valheim_bepinex/egg-valheim-bep-i-nex.json' exported_at: '2026-01-03T15:22:56+00:00' name: 'Valheim BepINex' author: eggs@goover.dev uuid: 7cf84d70-b857-4167-b051-ca3e3855c5d7 description: |- A brutal exploration and survival game for 1-10 players, set in a procedurally-generated purgatory inspired by viking culture incl the Plugin Framework BepInEx image: null tags: { } features: - steam_disk_space docker_images: 'ghcr.io/parkervcp/games:valheim': 'ghcr.io/parkervcp/games:valheim' file_denylist: { } startup_commands: Default: 'export DOORSTOP_ENABLED=1; export DOORSTOP_TARGET_ASSEMBLY=./BepInEx/core/BepInEx.Preloader.dll; export LD_LIBRARY_PATH="./doorstop_libs:./linux64:$LD_LIBRARY_PATH"; export LD_PRELOAD="libdoorstop_x64.so:$LD_PRELOAD"; export LD_LIBRARY_PATH="./linux64:$LD_LIBRARY_PATH"; export SteamAppId=892970; ./valheim_server.x86_64 -nographics -batchmode -name "{{SERVER_NAME}}" -port {{SERVER_PORT}} -world "{{WORLD}}" -password "{{PASSWORD}}" -public {{PUBLIC_SERVER}} -saveinterval {{BACKUP_INTERVAL}} -backups {{BACKUP_COUNT}} -backupshort {{BACKUP_SHORTTIME}} -backuplong {{BACKUP_LONGTIME}} $( [[ {{ENABLE_CROSSPLAY}} -eq 1 ]] && echo " -crossplay ") > >(sed -uE "{{CONSOLE_FILTER}}")' config: files: { } startup: done: 'Game server connected' logs: { } stop: ^C scripts: installation: script: |- #!/bin/bash # Valheim Installation Script # # Server Files: /mnt/server # Image to install with is 'debian:buster-slim' apt -y update apt -y --no-install-recommends --no-install-suggests install wget ## just in case someone removed the defaults. if [ "${STEAM_USER}" == "" ]; then echo -e "steam user is not set. " echo -e "Using anonymous user. " # ------------------------------ # Steam user defaults # ------------------------------ : "${STEAM_USER:=anonymous}" : "${STEAM_PASS:=}" : "${STEAM_AUTH:=}" else echo -e "user set to ${STEAM_USER}" fi ## download and install steamcmd cd /tmp mkdir -p /mnt/server/steamcmd curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd cd /mnt/server/steamcmd # SteamCMD fails otherwise for some reason, even running as root. # This is changed at the end of the install process anyways. chown -R root:root /mnt export HOME=/mnt/server ## install game using steamcmd ./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit ## set up 32 bit libraries mkdir -p /mnt/server/.steam/sdk32 cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so ## set up 64 bit libraries mkdir -p /mnt/server/.steam/sdk64 cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so echo "-------------------------------------------------------" echo "installing BepInEx and Selected ModPacks..." echo "-------------------------------------------------------" if ! api_response=$(curl -sfSL -H "accept: application/json" "$BEPINEX_URL"); then fatal "Error: could not retrieve BepInEx release info from Thunderstore.io API" fi download_url=$(jq -r ".latest.download_url" <<< "$api_response" ) version_number=$(jq -r ".latest.version_number" <<< "$api_response" ) if [ ! -z "$V_MODPACK" ] then #Modpack Name dashes to slashes for URL V_MODPACK=$(echo "$V_MODPACK" | sed 's/-/\//g') #Extract dependencies from ModPack JSON data V_MODPACK_DEPENDENCIES=$(curl -sfSL -H "accept: application/json" "https://thunderstore.io/api/experimental/package/${V_MODPACK}" | jq -r '.dependencies[]') fi cd /mnt/server #echo $download_url wget --content-disposition $download_url unzip -o denikson-BepInExPack_Valheim-${version_number}.zip cp -r /mnt/server/BepInExPack_Valheim/* /mnt/server if [ ! -z "$V_MODPACK" ] then #Delete Old Mods rm -rf /mnt/server/BepInEx/plugins/* #Download and extract the modpack dlls files for V_MODPACK_DEPENDENCY in $V_MODPACK_DEPENDENCIES; do #ignore bepinex if [[ "$V_MODPACK_DEPENDENCY" == *"denikson-BepInExPack_Valheim"* ]]; then continue # Skip this dependency fi #replace dashes with slashes for url V_MODPACK_DEPENDENCY_WITH_SLASH=$(echo "$V_MODPACK_DEPENDENCY" | sed 's/-/\//g') #download dependencies wget -O "$V_MODPACK_DEPENDENCY.zip" "https://thunderstore.io/package/download/$V_MODPACK_DEPENDENCY_WITH_SLASH" #Set the destination directory and ensure it exists destination_directory="/mnt/server/BepInEx/plugins" if [ ! -d "$destination_directory" ]; then mkdir -p "$destination_directory" fi #Extract DLL files from the ZIP and delete the zip file unzip -j "$V_MODPACK_DEPENDENCY.zip" "*.dll" -d "$destination_directory" #Cleanup rm $V_MODPACK_DEPENDENCY.zip done fi ##cleanup echo "-------------------------------------------------------" echo "cleanup files..." echo "-------------------------------------------------------" rm -fR BepInExPack_Valheim rm -fR icon.png rm -fR denikson-BepInExPack_Valheim-* rm -fR manifest.json rm -fR README.m #rm -fR start_* echo "-------------------------------------------------------" echo "Installation completed" echo "-------------------------------------------------------" container: 'ghcr.io/parkervcp/installers:debian' entrypoint: bash variables: - sort: 5 name: 'Auto Update' description: '' env_variable: AUTO_UPDATE default_value: 1 user_viewable: true user_editable: true rules: - boolean - sort: 10 name: 'Backup Count' description: |- Sets how many automatic backups will be kept. The first is the 'short' backup length, and the rest are the 'long' backup length. When default values are used means one backup that is 2 hours old, and 3 backups that are 12 hours apart. Default: 4. env_variable: BACKUP_COUNT default_value: 4 user_viewable: true user_editable: true rules: - required - numeric - 'min:0' - sort: 9 name: 'Backup Interval' description: 'Change how often the world will save in seconds. Default: 1800 (30 minutes).' env_variable: BACKUP_INTERVAL default_value: 1800 user_viewable: true user_editable: true rules: - required - numeric - 'min:0' - sort: 12 name: 'Backup Longtime' description: 'Sets the interval between the subsequent automatic backups in seconds. Default: 43200 (12 hours).' env_variable: BACKUP_LONGTIME default_value: 43200 user_viewable: true user_editable: true rules: - required - numeric - 'min:0' - sort: 11 name: 'Backup Shorttime' description: 'Sets the interval between the first automatic backups in seconds. Default: 7200 (2 hours).' env_variable: BACKUP_SHORTTIME default_value: 7200 user_viewable: true user_editable: true rules: - required - numeric - 'min:0' - sort: 17 name: '[System] BepInEx URL' description: '' env_variable: BEPINEX_URL default_value: 'https://thunderstore.io/api/experimental/package/denikson/BepInExPack_Valheim/' user_viewable: false user_editable: false rules: - required - url - sort: 14 name: '[System] Console Filter' description: 'Remove unwanted outputs from the console.' env_variable: CONSOLE_FILTER default_value: '/^\(Filename:.*Line:[[:space:]]+[[:digit:]]+\)$/d; /^([[:space:]]+)?$/d' user_viewable: false user_editable: false rules: - string - sort: 6 name: 'Enable Crossplay' description: 'Enable crossplay support' env_variable: ENABLE_CROSSPLAY default_value: 0 user_viewable: true user_editable: true rules: - boolean - sort: 16 name: '[System] LD Library Path' description: 'Required to load server libraries.' env_variable: LD_LIBRARY_PATH default_value: ./linux64 user_viewable: false user_editable: false rules: - required - string - sort: 2 name: 'Server Password' description: 'Server password.' env_variable: PASSWORD default_value: secret user_viewable: true user_editable: true rules: - required - string - 'min:5' - 'max:20' - sort: 4 name: 'Public Server' description: '' env_variable: PUBLIC_SERVER default_value: 1 user_viewable: true user_editable: true rules: - boolean - sort: 1 name: 'Server Name' description: 'Name that appears in server browser.' env_variable: SERVER_NAME default_value: 'My Server' user_viewable: true user_editable: true rules: - required - string - 'max:60' - sort: 15 name: '[System] App ID' description: 'Valheim steam app id for auto updates.' env_variable: SRCDS_APPID default_value: 896660 user_viewable: true user_editable: false rules: - nullable - numeric - sort: 7 name: 'Beta Branch' description: '' env_variable: SRCDS_BETAID default_value: '' user_viewable: true user_editable: true rules: - 'max:30' - sort: 8 name: 'Beta Password' description: '' env_variable: SRCDS_BETAPASS default_value: '' user_viewable: true user_editable: true rules: - 'max:30' - sort: 13 name: ModPack description: "Enter the Dependency String name for a ModPack to automatically be installed\r\nNOTE: If the modpack Updates, you will need to update this variable with the new Dependency String.\nThis is done to allow Old Versions to be used.\r\nCHANGING THIS REQUIRES A SERVER REINSTALL" env_variable: V_MODPACK default_value: '' user_viewable: true user_editable: true rules: - string - nullable - sort: 3 name: 'World Name' description: 'Name to load if switching between multiple saved worlds.' env_variable: WORLD default_value: Dedicated user_viewable: true user_editable: true rules: - required - string - 'max:20'