Refactor plugin registry into separate files per plugin
This commit is contained in:
+6
-10
@@ -59,7 +59,9 @@ plugin-helper/
|
||||
DESIGN.md
|
||||
README.md
|
||||
registry/
|
||||
plugins.toml
|
||||
plugins/
|
||||
songcore.toml
|
||||
bsipa.toml
|
||||
locks/
|
||||
1.40.8.lock.toml
|
||||
src/plugin_helper/
|
||||
@@ -124,21 +126,15 @@ Artifact source preference:
|
||||
Example:
|
||||
|
||||
```toml
|
||||
[[plugins]]
|
||||
id = "songcore"
|
||||
name = "SongCore"
|
||||
repo = "Kylemc1413/SongCore"
|
||||
asset_patterns = ["*SongCore*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[plugins.compatibility]
|
||||
source = "metadata-or-release-notes"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bs-utils"
|
||||
constraint = ">=1.0"
|
||||
required = true
|
||||
dependencies = [
|
||||
{ id = "bs-utils", constraint = ">=1.0" },
|
||||
]
|
||||
```
|
||||
|
||||
Important fields:
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Plugin Registry
|
||||
|
||||
Each plugin lives in its own TOML file under `plugins/`.
|
||||
|
||||
```toml
|
||||
id = "example"
|
||||
name = "Example"
|
||||
repo = "owner/example"
|
||||
asset_patterns = ["Example-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
```
|
||||
|
||||
Dependencies are inline arrays on the plugin that owns them, so there is no
|
||||
implicit relationship with a preceding TOML table.
|
||||
@@ -1,965 +0,0 @@
|
||||
# Human-maintained plugin registry.
|
||||
#
|
||||
# Example:
|
||||
# [[plugins]]
|
||||
# id = "songcore"
|
||||
# name = "SongCore"
|
||||
# repo = "Kylemc1413/SongCore"
|
||||
# asset_patterns = ["*SongCore*.zip"]
|
||||
# install_strategy = "bsipa-zip"
|
||||
# category = "library"
|
||||
#
|
||||
# [[plugins.dependencies]]
|
||||
# id = "bs-utils"
|
||||
# constraint = ">=1.0"
|
||||
# required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "accsaber-reloaded"
|
||||
name = "AccSaber Reloaded"
|
||||
repo = "not-dexter/accsaber-reloaded-plugin"
|
||||
asset_patterns = ["1.40.8.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "leaderboard"
|
||||
|
||||
[[plugins]]
|
||||
id = "bsipa"
|
||||
name = "BSIPA"
|
||||
repo = "nike4613/BeatSaber-IPA-Reloaded"
|
||||
asset_patterns = ["BSIPA-net472-x64.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "core"
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
name = "BeatSaberMarkupLanguage"
|
||||
repo = "monkeymanboy/BeatSaberMarkupLanguage"
|
||||
asset_patterns = ["*RELEASE.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "bettersonglist"
|
||||
name = "BetterSongList"
|
||||
repo = "kinsi55/BeatSaber_BetterSongList"
|
||||
asset_patterns = ["BetterSongList.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "ui"
|
||||
|
||||
[[plugins]]
|
||||
id = "hitscorevisualizer"
|
||||
name = "HitScoreVisualizer"
|
||||
repo = "ErisApps/HitScoreVisualizer"
|
||||
asset_patterns = ["HitScoreVisualizer-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "ditails"
|
||||
name = "DiTails"
|
||||
repo = "Auros/DiTails"
|
||||
asset_patterns = ["DiTails-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsaversharp"
|
||||
constraint = ">=3.4.5"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "hidethelogo"
|
||||
name = "HideTheLogo"
|
||||
repo = "TheBlackParrot/HideTheLogo"
|
||||
asset_patterns = ["HideTheLogo-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
|
||||
[[plugins]]
|
||||
id = "songchartvisualizer"
|
||||
name = "SongChartVisualizer"
|
||||
repo = "NuggoDEV/SongChartVisualizer"
|
||||
asset_patterns = ["SongChartVisualizer-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "sirautil"
|
||||
name = "SiraUtil"
|
||||
repo = "Auros/SiraUtil"
|
||||
asset_patterns = ["SiraUtil-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "songcore"
|
||||
name = "SongCore"
|
||||
repo = "Kylemc1413/SongCore"
|
||||
asset_patterns = ["SongCore-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "core"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "customjsondata"
|
||||
name = "CustomJSONData"
|
||||
repo = "Aeroluna/CustomJSONData"
|
||||
asset_patterns = ["CustomJSONData-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "heck"
|
||||
name = "Heck"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["Heck-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "customjsondata"
|
||||
constraint = ">=2.6.8"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "lookupid"
|
||||
name = "LookupID"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["LookupID-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "chroma"
|
||||
name = "Chroma"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["Chroma-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "mapping"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "heck"
|
||||
constraint = ">=1.8.3"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "customjsondata"
|
||||
constraint = ">=2.6.8"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "lookupid"
|
||||
constraint = ">=1.0.1"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "noodleextensions"
|
||||
name = "Noodle Extensions"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["NoodleExtensions-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "mapping"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "heck"
|
||||
constraint = ">=1.8.3"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "customjsondata"
|
||||
constraint = ">=2.6.8"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "camerautils"
|
||||
name = "CameraUtils"
|
||||
repo = "Reezonate/CameraUtils"
|
||||
asset_patterns = ["CameraUtils-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "assetbundleloadingtools"
|
||||
name = "AssetBundleLoadingTools"
|
||||
repo = "nicoco007/AssetBundleLoadingTools"
|
||||
asset_patterns = ["AssetBundleLoadingTools-*.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression"
|
||||
constraint = ">=4.6.57"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression-filesystem"
|
||||
constraint = ">=4.7.3056"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "vivify"
|
||||
name = "Vivify"
|
||||
repo = "Aeroluna/Vivify"
|
||||
asset_patterns = ["Vivify-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "mapping"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "heck"
|
||||
constraint = ">=1.8.3"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "customjsondata"
|
||||
constraint = ">=2.6.8"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "camerautils"
|
||||
constraint = ">=1.0.8"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "assetbundleloadingtools"
|
||||
constraint = ">=1.1.13"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "iniparser"
|
||||
name = "Ini Parser"
|
||||
repo = "rickyah/ini-parser"
|
||||
asset_patterns = ["IniParser-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "bs-utils"
|
||||
name = "BS Utils"
|
||||
repo = "Kylemc1413/Beat-Saber-Utils"
|
||||
asset_patterns = ["BSUtils-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "iniparser"
|
||||
constraint = ">=2.5.9"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "system-io-compression"
|
||||
name = "System.IO.Compression"
|
||||
asset_patterns = ["System.IO.Compression-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "system-io-compression-filesystem"
|
||||
name = "System.IO.Compression.FileSystem"
|
||||
asset_patterns = ["System.IO.Compression.FileSystem-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression"
|
||||
constraint = ">=4.6.57"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "imagesharp"
|
||||
name = "ImageSharp"
|
||||
repo = "SixLabors/ImageSharp"
|
||||
asset_patterns = ["ImageSharp-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsaberplaylistslib"
|
||||
name = "BeatSaberPlaylistsLib"
|
||||
repo = "Meivyn/BeatSaberPlaylistsLib"
|
||||
asset_patterns = ["BeatSaberPlaylistsLib-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "imagesharp"
|
||||
constraint = ">=2.0.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression"
|
||||
constraint = ">=4.6.57"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsaversharp"
|
||||
name = "BeatSaverSharp"
|
||||
repo = "Auros/BeatSaverSharper"
|
||||
asset_patterns = ["BeatSaverSharp-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "scoresabersharp"
|
||||
name = "ScoreSaberSharp"
|
||||
asset_patterns = ["ScoreSaberSharp-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "scoresaber"
|
||||
name = "ScoreSaber"
|
||||
repo = "ScoreSaber/pc-mod"
|
||||
asset_patterns = ["ScoreSaber-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "leaderboard"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "leaderboardcore"
|
||||
name = "LeaderboardCore"
|
||||
repo = "NSGolova/LeaderboardCore"
|
||||
asset_patterns = ["LeaderboardCore-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "protobuf-net"
|
||||
name = "protobuf-net"
|
||||
repo = "protobuf-net/protobuf-net"
|
||||
asset_patterns = ["protobuf-net-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins]]
|
||||
id = "songdetailscache"
|
||||
name = "SongDetailsCache"
|
||||
repo = "kinsi55/BeatSaber_SongDetails"
|
||||
asset_patterns = ["SongDetailsCache.BS.Lib.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "protobuf-net"
|
||||
constraint = ">=3.0.102"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "songrankedbadge"
|
||||
name = "SongRankedBadge"
|
||||
repo = "qe201020335/SongRankedBadge"
|
||||
asset_patterns = ["SongRankedBadge-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songdetailscache"
|
||||
constraint = ">=1.4.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "beatleader"
|
||||
name = "BeatLeader"
|
||||
repo = "BeatLeader/beatleader-mod"
|
||||
asset_patterns = ["BeatLeader-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "leaderboard"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bs-utils"
|
||||
constraint = ">=1.14.3"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsaverdownloader"
|
||||
name = "BeatSaverDownloader"
|
||||
repo = "Top-Cat/BeatSaverDownloader"
|
||||
asset_patterns = ["BeatSaverDownloader-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "downloader"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bs-utils"
|
||||
constraint = ">=1.14.3"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "scoresabersharp"
|
||||
constraint = ">=0.1.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression-filesystem"
|
||||
constraint = ">=4.7.3056"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsaversharp"
|
||||
constraint = ">=3.4.5"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsaverupdater"
|
||||
name = "BeatSaverUpdater"
|
||||
repo = "ibillingsley/BeatSaverUpdater"
|
||||
asset_patterns = ["BeatSaverUpdater-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "downloader"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsaversharp"
|
||||
constraint = ">=3.4.5"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "playlistmanager"
|
||||
name = "PlaylistManager"
|
||||
repo = "rithik-b/PlaylistManager"
|
||||
asset_patterns = ["PlaylistManager-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "playlist"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsaberplaylistslib"
|
||||
constraint = ">=1.7.2"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression-filesystem"
|
||||
constraint = ">=4.7.3056"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsaversharp"
|
||||
constraint = ">=3.4.5"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "system-io-compression"
|
||||
constraint = ">=4.6.57"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsavervoting"
|
||||
name = "BeatSaverVoting"
|
||||
repo = "Top-Cat/BeatSaverVoting"
|
||||
asset_patterns = ["BeatSaverVoting-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "downloader"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bs-utils"
|
||||
constraint = ">=1.14.3"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "songcore"
|
||||
constraint = ">=3.16.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "setlist"
|
||||
name = "Setlist"
|
||||
asset_patterns = ["Setlist.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "ui"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatleader"
|
||||
constraint = ">=0.9.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "playlistmanager"
|
||||
constraint = ">=1.7.0"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsaberplaylistslib"
|
||||
constraint = ">=1.7.0"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "introskip"
|
||||
name = "IntroSkip"
|
||||
repo = "Loloppe/Intro-Skip"
|
||||
asset_patterns = ["IntroSkip-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "failbutton"
|
||||
name = "FailButton"
|
||||
repo = "qe201020335/FailButton"
|
||||
asset_patterns = ["FailButton-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins]]
|
||||
id = "easyoffset"
|
||||
name = "EasyOffset"
|
||||
repo = "Reezonate/EasyOffset"
|
||||
asset_patterns = ["EasyOffset.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins]]
|
||||
id = "gottagofast"
|
||||
name = "GottaGoFast"
|
||||
repo = "kinsi55/CS_BeatSaber_GottaGoFast"
|
||||
asset_patterns = ["GottaGoFast.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins]]
|
||||
id = "hitsoundtweaks"
|
||||
name = "HitsoundTweaks"
|
||||
repo = "GalaxyMaster2/HitsoundTweaks"
|
||||
asset_patterns = ["HitsoundTweaks-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins]]
|
||||
id = "keepmyoverridespls"
|
||||
name = "KeepMyOverridesPls"
|
||||
repo = "qqrz997/KeepMyOverridesPls"
|
||||
asset_patterns = ["KeepMyOverridesPls-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins]]
|
||||
id = "soundreplacer"
|
||||
name = "SoundReplacer"
|
||||
repo = "Meivyn/SoundReplacer"
|
||||
asset_patterns = ["SoundReplacer-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "keyremapper"
|
||||
name = "KeyRemapper"
|
||||
repo = "lyyQwQ/KeyRemapper"
|
||||
asset_patterns = ["KeyRemapper-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "squattobegin"
|
||||
name = "SquatToBegin"
|
||||
repo = "kinsi55/BeatSaber_SquatToBegin"
|
||||
asset_patterns = ["SquatToBegin.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "adblocker"
|
||||
name = "AdBlocker"
|
||||
repo = "JonnyVR1/AdBlocker"
|
||||
asset_patterns = ["AdBlocker-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "cosmetic"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "highlightbombs"
|
||||
name = "HighlightBombs"
|
||||
repo = "Meivyn/HighlightBombs"
|
||||
asset_patterns = ["HighlightBombs-*.zip", "HighlightBombs.dll"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "cosmetic"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "pitchblack"
|
||||
name = "PitchBlack"
|
||||
repo = "Loloppe/BeatSaber_PitchBlack"
|
||||
asset_patterns = ["PitchBlack-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "lighting"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "reecamera"
|
||||
name = "ReeCamera"
|
||||
repo = "Reezonate/ReeCamera"
|
||||
asset_patterns = ["ReeCamera.*.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "camera"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "camerautils"
|
||||
constraint = ">=1.0.8"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "jdfixer"
|
||||
name = "JDFixer"
|
||||
repo = "zeph-yr/JDFixer"
|
||||
asset_patterns = ["JDFixer.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "beatsabermarkuplanguage"
|
||||
constraint = ">=1.14.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "sirautil"
|
||||
constraint = ">=3.3.1"
|
||||
required = true
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "beatsaberplus"
|
||||
name = "BeatSaberPlus"
|
||||
repo = "discord/BeatSaberPlus"
|
||||
asset_patterns = ["BeatSaberPlus_*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "streaming"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
|
||||
[[plugins]]
|
||||
id = "naluluna"
|
||||
name = "Naluluna"
|
||||
repo = "patreon/NalulunaModAssistant"
|
||||
asset_patterns = ["Naluluna-*-installed-bundle.zip", "NalulunaUtils-*.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "cosmetic"
|
||||
|
||||
[[plugins.dependencies]]
|
||||
id = "bsipa"
|
||||
constraint = ">=4.3.7"
|
||||
required = true
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "accsaber-reloaded"
|
||||
name = "AccSaber Reloaded"
|
||||
repo = "not-dexter/accsaber-reloaded-plugin"
|
||||
asset_patterns = ["1.40.8.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "leaderboard"
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "adblocker"
|
||||
name = "AdBlocker"
|
||||
repo = "JonnyVR1/AdBlocker"
|
||||
asset_patterns = ["AdBlocker-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "cosmetic"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
id = "assetbundleloadingtools"
|
||||
name = "AssetBundleLoadingTools"
|
||||
repo = "nicoco007/AssetBundleLoadingTools"
|
||||
asset_patterns = ["AssetBundleLoadingTools-*.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "system-io-compression", constraint = ">=4.6.57" },
|
||||
{ id = "system-io-compression-filesystem", constraint = ">=4.7.3056" },
|
||||
]
|
||||
@@ -0,0 +1,14 @@
|
||||
id = "beatleader"
|
||||
name = "BeatLeader"
|
||||
repo = "BeatLeader/beatleader-mod"
|
||||
asset_patterns = ["BeatLeader-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "leaderboard"
|
||||
dependencies = [
|
||||
{ id = "bs-utils", constraint = ">=1.14.3" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "system-io-compression", constraint = ">=4.6.0" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "beatsabermarkuplanguage"
|
||||
name = "BeatSaberMarkupLanguage"
|
||||
repo = "monkeymanboy/BeatSaberMarkupLanguage"
|
||||
asset_patterns = ["*RELEASE.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
id = "beatsaberplaylistslib"
|
||||
name = "BeatSaberPlaylistsLib"
|
||||
repo = "Meivyn/BeatSaberPlaylistsLib"
|
||||
asset_patterns = ["BeatSaberPlaylistsLib-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "imagesharp", constraint = ">=2.0.0" },
|
||||
{ id = "system-io-compression", constraint = ">=4.6.57" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "beatsaberplus"
|
||||
name = "BeatSaberPlus"
|
||||
repo = "discord/BeatSaberPlus"
|
||||
asset_patterns = ["BeatSaberPlus_*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "streaming"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,15 @@
|
||||
id = "beatsaverdownloader"
|
||||
name = "BeatSaverDownloader"
|
||||
repo = "Top-Cat/BeatSaverDownloader"
|
||||
asset_patterns = ["BeatSaverDownloader-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "downloader"
|
||||
dependencies = [
|
||||
{ id = "bs-utils", constraint = ">=1.14.3" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "scoresabersharp", constraint = ">=0.1.0" },
|
||||
{ id = "system-io-compression-filesystem", constraint = ">=4.7.3056" },
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "beatsaversharp", constraint = ">=3.4.5" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "beatsaversharp"
|
||||
name = "BeatSaverSharp"
|
||||
repo = "Auros/BeatSaverSharper"
|
||||
asset_patterns = ["BeatSaverSharp-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,13 @@
|
||||
id = "beatsaverupdater"
|
||||
name = "BeatSaverUpdater"
|
||||
repo = "ibillingsley/BeatSaverUpdater"
|
||||
asset_patterns = ["BeatSaverUpdater-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "downloader"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "beatsaversharp", constraint = ">=3.4.5" },
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
id = "beatsavervoting"
|
||||
name = "BeatSaverVoting"
|
||||
repo = "Top-Cat/BeatSaverVoting"
|
||||
asset_patterns = ["BeatSaverVoting-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "downloader"
|
||||
dependencies = [
|
||||
{ id = "bs-utils", constraint = ">=1.14.3" },
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "bettersonglist"
|
||||
name = "BetterSongList"
|
||||
repo = "kinsi55/BeatSaber_BetterSongList"
|
||||
asset_patterns = ["BetterSongList.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "ui"
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "bs-utils"
|
||||
name = "BS Utils"
|
||||
repo = "Kylemc1413/Beat-Saber-Utils"
|
||||
asset_patterns = ["BSUtils-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "iniparser", constraint = ">=2.5.9" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "bsipa"
|
||||
name = "BSIPA"
|
||||
repo = "nike4613/BeatSaber-IPA-Reloaded"
|
||||
asset_patterns = ["BSIPA-net472-x64.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "core"
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "camerautils"
|
||||
name = "CameraUtils"
|
||||
repo = "Reezonate/CameraUtils"
|
||||
asset_patterns = ["CameraUtils-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "chroma"
|
||||
name = "Chroma"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["Chroma-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "mapping"
|
||||
dependencies = [
|
||||
{ id = "heck", constraint = ">=1.8.3" },
|
||||
{ id = "customjsondata", constraint = ">=2.6.8" },
|
||||
{ id = "lookupid", constraint = ">=1.0.1" },
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "customjsondata"
|
||||
name = "CustomJSONData"
|
||||
repo = "Aeroluna/CustomJSONData"
|
||||
asset_patterns = ["CustomJSONData-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
id = "ditails"
|
||||
name = "DiTails"
|
||||
repo = "Auros/DiTails"
|
||||
asset_patterns = ["DiTails-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "beatsaversharp", constraint = ">=3.4.5" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "easyoffset"
|
||||
name = "EasyOffset"
|
||||
repo = "Reezonate/EasyOffset"
|
||||
asset_patterns = ["EasyOffset.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "failbutton"
|
||||
name = "FailButton"
|
||||
repo = "qe201020335/FailButton"
|
||||
asset_patterns = ["FailButton-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "gottagofast"
|
||||
name = "GottaGoFast"
|
||||
repo = "kinsi55/CS_BeatSaber_GottaGoFast"
|
||||
asset_patterns = ["GottaGoFast.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "heck"
|
||||
name = "Heck"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["Heck-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "customjsondata", constraint = ">=2.6.8" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "hidethelogo"
|
||||
name = "HideTheLogo"
|
||||
repo = "TheBlackParrot/HideTheLogo"
|
||||
asset_patterns = ["HideTheLogo-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "highlightbombs"
|
||||
name = "HighlightBombs"
|
||||
repo = "Meivyn/HighlightBombs"
|
||||
asset_patterns = ["HighlightBombs-*.zip", "HighlightBombs.dll"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "cosmetic"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "hitscorevisualizer"
|
||||
name = "HitScoreVisualizer"
|
||||
repo = "ErisApps/HitScoreVisualizer"
|
||||
asset_patterns = ["HitScoreVisualizer-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "hitsoundtweaks"
|
||||
name = "HitsoundTweaks"
|
||||
repo = "GalaxyMaster2/HitsoundTweaks"
|
||||
asset_patterns = ["HitsoundTweaks-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "imagesharp"
|
||||
name = "ImageSharp"
|
||||
repo = "SixLabors/ImageSharp"
|
||||
asset_patterns = ["ImageSharp-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "iniparser"
|
||||
name = "Ini Parser"
|
||||
repo = "rickyah/ini-parser"
|
||||
asset_patterns = ["IniParser-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "introskip"
|
||||
name = "IntroSkip"
|
||||
repo = "Loloppe/Intro-Skip"
|
||||
asset_patterns = ["IntroSkip-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "jdfixer"
|
||||
name = "JDFixer"
|
||||
repo = "zeph-yr/JDFixer"
|
||||
asset_patterns = ["JDFixer.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "keepmyoverridespls"
|
||||
name = "KeepMyOverridesPls"
|
||||
repo = "qqrz997/KeepMyOverridesPls"
|
||||
asset_patterns = ["KeepMyOverridesPls-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "keyremapper"
|
||||
name = "KeyRemapper"
|
||||
repo = "lyyQwQ/KeyRemapper"
|
||||
asset_patterns = ["KeyRemapper-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "leaderboardcore"
|
||||
name = "LeaderboardCore"
|
||||
repo = "NSGolova/LeaderboardCore"
|
||||
asset_patterns = ["LeaderboardCore-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "lookupid"
|
||||
name = "LookupID"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["LookupID-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "naluluna"
|
||||
name = "Naluluna"
|
||||
repo = "patreon/NalulunaModAssistant"
|
||||
asset_patterns = ["Naluluna-*-installed-bundle.zip", "NalulunaUtils-*.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "cosmetic"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "noodleextensions"
|
||||
name = "Noodle Extensions"
|
||||
repo = "Aeroluna/Heck"
|
||||
asset_patterns = ["NoodleExtensions-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "mapping"
|
||||
dependencies = [
|
||||
{ id = "heck", constraint = ">=1.8.3" },
|
||||
{ id = "customjsondata", constraint = ">=2.6.8" },
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "pitchblack"
|
||||
name = "PitchBlack"
|
||||
repo = "Loloppe/BeatSaber_PitchBlack"
|
||||
asset_patterns = ["PitchBlack-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "lighting"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
id = "playlistmanager"
|
||||
name = "PlaylistManager"
|
||||
repo = "rithik-b/PlaylistManager"
|
||||
asset_patterns = ["PlaylistManager-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "playlist"
|
||||
dependencies = [
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "beatsaberplaylistslib", constraint = ">=1.7.2" },
|
||||
{ id = "system-io-compression-filesystem", constraint = ">=4.7.3056" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "beatsaversharp", constraint = ">=3.4.5" },
|
||||
{ id = "system-io-compression", constraint = ">=4.6.57" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
id = "protobuf-net"
|
||||
name = "protobuf-net"
|
||||
repo = "protobuf-net/protobuf-net"
|
||||
asset_patterns = ["protobuf-net-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "reecamera"
|
||||
name = "ReeCamera"
|
||||
repo = "Reezonate/ReeCamera"
|
||||
asset_patterns = ["ReeCamera.*.zip"]
|
||||
install_strategy = "root-zip"
|
||||
category = "camera"
|
||||
dependencies = [
|
||||
{ id = "camerautils", constraint = ">=1.0.8" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
id = "scoresaber"
|
||||
name = "ScoreSaber"
|
||||
repo = "ScoreSaber/pc-mod"
|
||||
asset_patterns = ["ScoreSaber-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "leaderboard"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
id = "scoresabersharp"
|
||||
name = "ScoreSaberSharp"
|
||||
asset_patterns = ["ScoreSaberSharp-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,10 @@
|
||||
id = "setlist"
|
||||
name = "Setlist"
|
||||
asset_patterns = ["Setlist.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "beatleader", constraint = ">=0.9.0" },
|
||||
{ id = "playlistmanager", constraint = ">=1.7.0" },
|
||||
{ id = "beatsaberplaylistslib", constraint = ">=1.7.0" },
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "sirautil"
|
||||
name = "SiraUtil"
|
||||
repo = "Auros/SiraUtil"
|
||||
asset_patterns = ["SiraUtil-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "songchartvisualizer"
|
||||
name = "SongChartVisualizer"
|
||||
repo = "NuggoDEV/SongChartVisualizer"
|
||||
asset_patterns = ["SongChartVisualizer-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "songcore"
|
||||
name = "SongCore"
|
||||
repo = "Kylemc1413/SongCore"
|
||||
asset_patterns = ["SongCore-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "core"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "songdetailscache"
|
||||
name = "SongDetailsCache"
|
||||
repo = "kinsi55/BeatSaber_SongDetails"
|
||||
asset_patterns = ["SongDetailsCache.BS.Lib.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "protobuf-net", constraint = ">=3.0.102" },
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
id = "songrankedbadge"
|
||||
name = "SongRankedBadge"
|
||||
repo = "qe201020335/SongRankedBadge"
|
||||
asset_patterns = ["SongRankedBadge-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "songcore", constraint = ">=3.16.0" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "songdetailscache", constraint = ">=1.4.0" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,11 @@
|
||||
id = "soundreplacer"
|
||||
name = "SoundReplacer"
|
||||
repo = "Meivyn/SoundReplacer"
|
||||
asset_patterns = ["SoundReplacer-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "gameplay"
|
||||
dependencies = [
|
||||
{ id = "sirautil", constraint = ">=3.3.1" },
|
||||
{ id = "beatsabermarkuplanguage", constraint = ">=1.14.1" },
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
id = "squattobegin"
|
||||
name = "SquatToBegin"
|
||||
repo = "kinsi55/BeatSaber_SquatToBegin"
|
||||
asset_patterns = ["SquatToBegin.dll"]
|
||||
install_strategy = "dll-to-plugins"
|
||||
category = "gameplay"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
@@ -0,0 +1,8 @@
|
||||
id = "system-io-compression-filesystem"
|
||||
name = "System.IO.Compression.FileSystem"
|
||||
asset_patterns = ["System.IO.Compression.FileSystem-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
dependencies = [
|
||||
{ id = "system-io-compression", constraint = ">=4.6.57" },
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
id = "system-io-compression"
|
||||
name = "System.IO.Compression"
|
||||
asset_patterns = ["System.IO.Compression-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "library"
|
||||
@@ -0,0 +1,12 @@
|
||||
id = "vivify"
|
||||
name = "Vivify"
|
||||
repo = "Aeroluna/Vivify"
|
||||
asset_patterns = ["Vivify-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "mapping"
|
||||
dependencies = [
|
||||
{ id = "heck", constraint = ">=1.8.3" },
|
||||
{ id = "customjsondata", constraint = ">=2.6.8" },
|
||||
{ id = "camerautils", constraint = ">=1.0.8" },
|
||||
{ id = "assetbundleloadingtools", constraint = ">=1.1.13" },
|
||||
]
|
||||
@@ -106,7 +106,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
parents=[_common_parent()],
|
||||
)
|
||||
installed.add_argument("--instance", required=True)
|
||||
installed.add_argument("--registry", default="registry/plugins.toml")
|
||||
installed.add_argument("--registry", default="registry/plugins")
|
||||
installed.add_argument("--lockfile")
|
||||
installed.add_argument("--json", action="store_true", help="Print full JSON output")
|
||||
|
||||
@@ -116,7 +116,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
parents=[_common_parent()],
|
||||
)
|
||||
check.add_argument("--instance", required=True)
|
||||
check.add_argument("--registry", default="registry/plugins.toml")
|
||||
check.add_argument("--registry", default="registry/plugins")
|
||||
check.add_argument("--lockfile")
|
||||
check.add_argument("--json", action="store_true", help="Print full JSON check output")
|
||||
|
||||
@@ -126,7 +126,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
parents=[_common_parent()],
|
||||
)
|
||||
bootstrap.add_argument("--instance", required=True)
|
||||
bootstrap.add_argument("--registry", default="registry/plugins.toml")
|
||||
bootstrap.add_argument("--registry", default="registry/plugins")
|
||||
bootstrap.add_argument("--lockfile")
|
||||
bootstrap.add_argument("--proton", help="Path to Proton executable (Linux/Proton installs)")
|
||||
bootstrap.add_argument("--native", action="store_true", help="Run IPA.exe -n natively instead of through Proton")
|
||||
@@ -146,7 +146,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
parents=[_common_parent()],
|
||||
)
|
||||
updates.add_argument("--instance", required=True)
|
||||
updates.add_argument("--registry", default="registry/plugins.toml")
|
||||
updates.add_argument("--registry", default="registry/plugins")
|
||||
updates.add_argument("--lockfile")
|
||||
updates.add_argument("--plugin", action="append", help="Check only this locked plugin id; repeatable")
|
||||
updates.add_argument("--include-prerelease", action="store_true", help="Include prerelease GitHub releases")
|
||||
@@ -158,7 +158,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
parents=[_common_parent()],
|
||||
)
|
||||
plan.add_argument("--instance", required=True)
|
||||
plan.add_argument("--registry", default="registry/plugins.toml")
|
||||
plan.add_argument("--registry", default="registry/plugins")
|
||||
plan.add_argument("--lockfile")
|
||||
plan.add_argument("--plugin", "--update", action="append", help="Plan only this locked plugin id; repeatable")
|
||||
|
||||
@@ -193,7 +193,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
parents=[_common_parent()],
|
||||
)
|
||||
enable.add_argument("--instance", required=True)
|
||||
enable.add_argument("--registry", default="registry/plugins.toml")
|
||||
enable.add_argument("--registry", default="registry/plugins")
|
||||
enable.add_argument("--lockfile")
|
||||
enable.add_argument("plugin")
|
||||
|
||||
|
||||
@@ -58,12 +58,7 @@ def _load_toml(path: Path) -> dict[str, Any]:
|
||||
return tomllib.load(handle)
|
||||
|
||||
|
||||
def load_registry(path: Path) -> Registry:
|
||||
if not path.exists():
|
||||
return Registry()
|
||||
data = _load_toml(path)
|
||||
plugins: dict[str, RegistryPlugin] = {}
|
||||
for item in data.get("plugins", []):
|
||||
def _registry_plugin_from_item(item: dict[str, Any], source: Path) -> RegistryPlugin:
|
||||
dependencies = tuple(
|
||||
Dependency(
|
||||
id=dep["id"],
|
||||
@@ -74,8 +69,8 @@ def load_registry(path: Path) -> Registry:
|
||||
)
|
||||
strategy = item.get("install_strategy", "manual")
|
||||
if strategy not in VALID_STRATEGIES:
|
||||
raise ValueError(f"{path}: invalid install_strategy for {item['id']}: {strategy}")
|
||||
plugin = RegistryPlugin(
|
||||
raise ValueError(f"{source}: invalid install_strategy for {item['id']}: {strategy}")
|
||||
return RegistryPlugin(
|
||||
id=item["id"],
|
||||
name=item.get("name", item["id"]),
|
||||
repo=item.get("repo"),
|
||||
@@ -84,7 +79,30 @@ def load_registry(path: Path) -> Registry:
|
||||
category=item.get("category"),
|
||||
dependencies=dependencies,
|
||||
)
|
||||
|
||||
|
||||
def _add_registry_plugin(plugins: dict[str, RegistryPlugin], plugin: RegistryPlugin, source: Path) -> None:
|
||||
if plugin.id in plugins:
|
||||
raise ValueError(f"{source}: duplicate plugin id: {plugin.id}")
|
||||
plugins[plugin.id] = plugin
|
||||
|
||||
|
||||
def load_registry(path: Path) -> Registry:
|
||||
if not path.exists():
|
||||
legacy_path = path.with_suffix(".toml")
|
||||
if path.name == "plugins" and legacy_path.exists():
|
||||
return load_registry(legacy_path)
|
||||
return Registry()
|
||||
plugins: dict[str, RegistryPlugin] = {}
|
||||
if path.is_dir():
|
||||
for item_path in sorted(path.glob("*.toml")):
|
||||
data = _load_toml(item_path)
|
||||
_add_registry_plugin(plugins, _registry_plugin_from_item(data, item_path), item_path)
|
||||
return Registry(plugins)
|
||||
|
||||
data = _load_toml(path)
|
||||
for item in data.get("plugins", []):
|
||||
_add_registry_plugin(plugins, _registry_plugin_from_item(item, path), path)
|
||||
return Registry(plugins)
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ def enable_disabled_plugin(
|
||||
instance_path: Path,
|
||||
state_root: Path,
|
||||
plugin_id: str,
|
||||
registry: str = "registry/plugins.toml",
|
||||
registry: str = "registry/plugins",
|
||||
lockfile: str | None = None,
|
||||
repo: Path | None = None,
|
||||
progress: Callable[[str], None] | None = None,
|
||||
@@ -85,7 +85,7 @@ def enable_disabled_plugins(
|
||||
instance_path: Path,
|
||||
state_root: Path,
|
||||
plugin_ids: list[str],
|
||||
registry: str = "registry/plugins.toml",
|
||||
registry: str = "registry/plugins",
|
||||
lockfile: str | None = None,
|
||||
repo: Path | None = None,
|
||||
progress: Callable[[str], None] | None = None,
|
||||
|
||||
@@ -65,6 +65,26 @@ def _asset_matches_patterns(name: str, patterns: tuple[str, ...]) -> bool:
|
||||
return not patterns or any(fnmatch.fnmatch(name, pattern) for pattern in patterns)
|
||||
|
||||
|
||||
def _expand_required_dependencies(selected_ids: set[str], registry: Registry, lockfile: Lockfile) -> set[str]:
|
||||
locked_ids = {plugin.id for plugin in lockfile.plugins}
|
||||
expanded = set(selected_ids)
|
||||
pending = list(selected_ids)
|
||||
while pending:
|
||||
plugin_id = pending.pop()
|
||||
registry_plugin = registry.get(plugin_id)
|
||||
if not registry_plugin:
|
||||
continue
|
||||
for dependency in registry_plugin.dependencies:
|
||||
if not dependency.required:
|
||||
continue
|
||||
if dependency.id not in locked_ids:
|
||||
raise ValueError(f"{plugin_id}: required dependency is not locked for this instance: {dependency.id}")
|
||||
if dependency.id not in expanded:
|
||||
expanded.add(dependency.id)
|
||||
pending.append(dependency.id)
|
||||
return expanded
|
||||
|
||||
|
||||
def create_plan(
|
||||
*,
|
||||
instance: str,
|
||||
@@ -77,7 +97,11 @@ def create_plan(
|
||||
selected: set[str] | None = None,
|
||||
require_bootstrap: bool = True,
|
||||
) -> tuple[dict[str, Any], Path]:
|
||||
selected_ids = selected or {plugin.id for plugin in lockfile.plugins}
|
||||
selected_ids = (
|
||||
_expand_required_dependencies(selected, registry, lockfile)
|
||||
if selected is not None
|
||||
else {plugin.id for plugin in lockfile.plugins}
|
||||
)
|
||||
changes: list[dict[str, Any]] = []
|
||||
warnings: list[str] = []
|
||||
|
||||
|
||||
@@ -269,7 +269,7 @@ class PluginHelperTui(App[int]):
|
||||
lockfile = load_lockfile(self.repo_root / "locks" / f"{target.instance_name}.lock.toml")
|
||||
report = installed_plugins_report(
|
||||
installed_state=load_installed_state(target.state_root, target.instance_name),
|
||||
registry=load_registry(self.repo_root / "registry" / "plugins.toml"),
|
||||
registry=load_registry(self.repo_root / "registry" / "plugins"),
|
||||
lockfile=lockfile,
|
||||
)
|
||||
self.plugin_rows = report["plugins"]
|
||||
|
||||
+137
-1
@@ -22,7 +22,7 @@ from plugin_helper.config import is_windows, load_local_config, resolve_runtime_
|
||||
from plugin_helper.fsutil import sha256_file
|
||||
from plugin_helper.installer import apply_plan, disable_plugin, uninstall_plugin
|
||||
from plugin_helper.instances import get_instance, list_instances
|
||||
from plugin_helper.models import Lockfile, LockedPlugin, Registry, RegistryPlugin
|
||||
from plugin_helper.models import Dependency, Lockfile, LockedPlugin, Registry, RegistryPlugin, load_registry
|
||||
from plugin_helper.operations import enable_disabled_plugin
|
||||
from plugin_helper.planner import create_plan
|
||||
from plugin_helper.scanner import scan_bootstrap_files, scan_instance
|
||||
@@ -40,6 +40,35 @@ from plugin_helper.userdata import (
|
||||
|
||||
|
||||
class PluginHelperTests(unittest.TestCase):
|
||||
def test_load_registry_reads_plugin_directory(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
registry_dir = root / "registry" / "plugins"
|
||||
registry_dir.mkdir(parents=True)
|
||||
(registry_dir / "example.toml").write_text(
|
||||
"""
|
||||
id = "example"
|
||||
name = "Example"
|
||||
repo = "owner/example"
|
||||
asset_patterns = ["Example-*.zip"]
|
||||
install_strategy = "bsipa-zip"
|
||||
category = "ui"
|
||||
dependencies = [
|
||||
{ id = "bsipa", constraint = ">=4.3.7" },
|
||||
]
|
||||
""".lstrip(),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
registry = load_registry(registry_dir)
|
||||
|
||||
plugin = registry.get("example")
|
||||
self.assertIsNotNone(plugin)
|
||||
assert plugin is not None
|
||||
self.assertEqual(plugin.name, "Example")
|
||||
self.assertEqual(plugin.asset_patterns, ("Example-*.zip",))
|
||||
self.assertEqual(plugin.dependencies, (Dependency(id="bsipa", constraint=">=4.3.7"),))
|
||||
|
||||
def test_normalize_beatmods_current_nested_response(self) -> None:
|
||||
payload = {
|
||||
"mods": [
|
||||
@@ -872,6 +901,113 @@ sha256 = "{sha256_file(asset)}"
|
||||
|
||||
self.assertEqual(plan["changes"][0]["source"], str(asset))
|
||||
|
||||
def test_plan_expands_required_dependencies_for_selected_plugin(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
work = Path(tmp)
|
||||
instance = work / "instances" / "1.40.8"
|
||||
state = work / "state"
|
||||
instance.mkdir(parents=True)
|
||||
(instance / "Beat Saber_Data").mkdir()
|
||||
plugin_asset = plugin_downloads_dir(state, "1.40.8", "example") / "Example.dll"
|
||||
dependency_asset = plugin_downloads_dir(state, "1.40.8", "dependency") / "Dependency.dll"
|
||||
plugin_asset.write_bytes(b"managed dll")
|
||||
dependency_asset.write_bytes(b"dependency dll")
|
||||
|
||||
plan, _ = create_plan(
|
||||
instance="1.40.8",
|
||||
instance_path=instance,
|
||||
beat_saber_version="1.40.8",
|
||||
registry=Registry(
|
||||
{
|
||||
"example": RegistryPlugin(
|
||||
id="example",
|
||||
name="Example",
|
||||
repo=None,
|
||||
install_strategy="dll-to-plugins",
|
||||
dependencies=(Dependency(id="dependency"),),
|
||||
),
|
||||
"dependency": RegistryPlugin(
|
||||
id="dependency",
|
||||
name="Dependency",
|
||||
repo=None,
|
||||
install_strategy="dll-to-plugins",
|
||||
),
|
||||
}
|
||||
),
|
||||
lockfile=Lockfile(
|
||||
beat_saber_version="1.40.8",
|
||||
instance="1.40.8",
|
||||
plugins=(
|
||||
LockedPlugin(
|
||||
id="example",
|
||||
repo=None,
|
||||
tag=None,
|
||||
asset="Example.dll",
|
||||
sha256=sha256_file(plugin_asset),
|
||||
),
|
||||
LockedPlugin(
|
||||
id="dependency",
|
||||
repo=None,
|
||||
tag=None,
|
||||
asset="Dependency.dll",
|
||||
sha256=sha256_file(dependency_asset),
|
||||
),
|
||||
),
|
||||
),
|
||||
state_root=state,
|
||||
repo_root=work,
|
||||
selected={"example"},
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
{change["plugin"] for change in plan["changes"]},
|
||||
{"example", "dependency"},
|
||||
)
|
||||
|
||||
def test_plan_rejects_selected_plugin_with_unlocked_required_dependency(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
work = Path(tmp)
|
||||
instance = work / "instances" / "1.40.8"
|
||||
state = work / "state"
|
||||
instance.mkdir(parents=True)
|
||||
(instance / "Beat Saber_Data").mkdir()
|
||||
asset = plugin_downloads_dir(state, "1.40.8", "example") / "Example.dll"
|
||||
asset.write_bytes(b"managed dll")
|
||||
|
||||
with self.assertRaisesRegex(ValueError, "required dependency is not locked"):
|
||||
create_plan(
|
||||
instance="1.40.8",
|
||||
instance_path=instance,
|
||||
beat_saber_version="1.40.8",
|
||||
registry=Registry(
|
||||
{
|
||||
"example": RegistryPlugin(
|
||||
id="example",
|
||||
name="Example",
|
||||
repo=None,
|
||||
install_strategy="dll-to-plugins",
|
||||
dependencies=(Dependency(id="missing"),),
|
||||
),
|
||||
}
|
||||
),
|
||||
lockfile=Lockfile(
|
||||
beat_saber_version="1.40.8",
|
||||
instance="1.40.8",
|
||||
plugins=(
|
||||
LockedPlugin(
|
||||
id="example",
|
||||
repo=None,
|
||||
tag=None,
|
||||
asset="Example.dll",
|
||||
sha256=sha256_file(asset),
|
||||
),
|
||||
),
|
||||
),
|
||||
state_root=state,
|
||||
repo_root=work,
|
||||
selected={"example"},
|
||||
)
|
||||
|
||||
def test_zip_member_cannot_escape_instance(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
work = Path(tmp)
|
||||
|
||||
Reference in New Issue
Block a user