[TOOL] RMM: Spoon's Open Source Mod Manager for Linux

Started by spoons, October 11, 2021, 11:27:15 PM

Previous topic - Next topic

spoons

RMM is an open source RimWorld mod manager designed primarily for Linux. It is effectively APT or Pacman for RimWorld. However, it is not affiliated with those projects.

RMM allows you to easily download, update, and synchronize your mods with the Steam Workshop while maintaining anonymous login. The intention behind its creation was to provide an easy modding experience for the GOG version of the game.

RMM has no internal database, minimal dependencies, and will happily work along side other mod managing tools such as Steam Workshop subscriptions and Rimpy.

I highly suggest using this tool in conjunction with Fluffy's Mod Manager. RMM should work on MacOS and WSL, although it has not been tested for that. It does work with the Windows version in Wine. However, you need to point RMM_PATH to the 'Mods' folder specifically for this use case.

I am open to feedback on this program and will take any input into consideration. As I continue development of this tool, I intend to expand its capabilities. All features mentioned below are implemented and tested. When you encounter an issue, create a ticket on the github repo describing the issue or leave a comment here and I'll take a look. There is additional documentation in the Github repo which I recommend reading it. Ideally, you will find the tool intuitive to use.


Demo
https://asciinema.org/a/s0mgvwuwE9pi1bP2AXyLas52F

Requirements

  • Steamcmd is installed on your system and available via the PATH shell variable.
  • Unix like platform with Python 3.8 or greater.

Installation

# install from pypi
python3 -m pip install --user rmm-spoons
# set path to game directory
echo 'export RMM_PATH="$HOME/GOG\ Games/RimWorld"' >> ~/.bashrc
# optional: add "~/.local/bin" to your PATH
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc


If the 'rmm' command is not available after installation, you probably do not have the pip bin directory on your PATH variable. You can follow the third step above to add it, if you use bash.

Additionally, you can always access RMM through 'python -m rmm'

Notice
This is alpha software. It comes with no warranty and should be used with discretion.

License
GPLv3

Useage
The available commands are:
    backup      Creates an archive of the package library
    export      Saves package library state to a file
    list        List installed packages
    remove      Removes a package or modlist
    search      Searches the workshop for mod
    sync        Installs a package or modlist
    update      Update all packages
    query       Search for a locally installed mod


List installed packages
rmm list

Search workshop packages
rmm search modname

Search locally installed mods
rmm query modname

Install package
rmm sync rimhud

Removing a package
rmm remove fuzzy

Saving a mod list
rmm export ~/modlist.txt

Install mod list
rmm sync -f ~/modlist.txt

Update all packages
rmm update

Backup mod directory
rmm backup ~/rimworld.tar

Source
https://github.com/spoons/rmm

License
GPLv3

spoons

Road Map
Roughly in order of priority.

  • Complete integration tests
  • CLI code refactor
  • Web UI for workshop browsing
  • Git repo support
  • steamworkshopdownloader.io api backend support

Version History

  • Release of v0.0.3 - Oct 16, 2021
    Adds support for RimWorld installed by Steam
    Adds support for mods installed by Workshop
  • Release of v0.0.2 - Oct 16, 2021
    Fixes issue with mod cache and improves installation logic
  • Published v0.0.1 - Oct 5, 2021
    Released minimum viable product

deeprest

Thank you Spoon!

I'm on MacOS and ran into a problem when running "rmm update". 
Here's my setup:
1. Downloaded steamcmd according to instructions here:  https://developer.valvesoftware.com/wiki/SteamCMD#macOS
2. Added that directory to my path in ~/.bash_profile.  Running "steamcmd" works.
3. exported RMM_PATH correctly.  Mine is "/Applications/RimWorldMac.app/Mods" because I download manually. Am I supposed to export RMM_WORKSHOP_PATH and RMM_USER_PATH also?
4. Now when I run "rmm update" I get this:
% rmm update
Ignoring /Applications/RimWorldMac.app/Mods/Place mods here.txt
Preparing to update following packages:


The action will overwrite any changes to the mod directory
Add a .rmm_ignore to your mod directory to exclude it frome this list.
Would you like to continue? [y/n]
y
Ignoring /Applications/RimWorldMac.app/Mods/Place mods here.txt
Redirecting stderr to '/var/folders/7f/qck02p1s53v9q_cbyd5w0ggm0000gn/T/rmm-9c8lza82/Library/Application Support/Steam/logs/stderr.txt'
[  0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation - version 1679680174
-- type 'quit' to exit --
Loading Steam API...OK

Connecting anonymously to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
ERROR! Missing parameters.
Traceback (most recent call last):
  File "/Users/zero/Library/Python/3.10/bin/rmm", line 8, in <module>
    sys.exit(run())
  File "/Users/zero/Library/Python/3.10/lib/python/site-packages/rmm/cli.py", line 548, in run
    globals()[command](sys.argv, manager)
  File "/Users/zero/Library/Python/3.10/lib/python/site-packages/rmm/cli.py", line 96, in wrapper_func
    func(*args, **kwargs)
  File "/Users/zero/Library/Python/3.10/lib/python/site-packages/rmm/cli.py", line 367, in update
    manager.sync_mods(manager.installed_mods())
  File "/Users/zero/Library/Python/3.10/lib/python/site-packages/rmm/manager.py", line 71, in sync_mods
    steam_mods, steam_cache_path = SteamDownloader.download(
  File "/Users/zero/Library/Python/3.10/lib/python/site-packages/rmm/steam.py", line 102, in download
    util.run_sh(query)
  File "/Users/zero/Library/Python/3.10/lib/python/site-packages/rmm/util.py", line 36, in run_sh
    return subprocess.check_output(cmd, text=True, shell=True).strip()
  File "/usr/local/Cellar/[email protected]/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 420, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/usr/local/Cellar/[email protected]/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 524, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command 'env HOME="/var/folders/7f/qck02p1s53v9q_cbyd5w0ggm0000gn/T/rmm-9c8lza82" steamcmd +login anonymous  +workshop_download_item 294100  +quit >&2' returned non-zero exit status 10.


Something about missing parameters.  Any ideas?