~rprospero/modsquad

A Skyrim mod manager for linux

onli via modsquad

1 year, 1 month ago
2 years ago

#Modsquad

Modsquad is a Skyrim mod manager for Linux. It's not as powerful or friendly as other mod managers, but it was built on and for Linux, in case anyone else out there was having these issues.

#Usage

modsquad tries to follow UNIX command line converstions. To this end, it exists as a series of subcommand that takes data from the standard input and either performs actions on the file-system or provides results on the standard output.

It's best explained via an example. Running modsquad.py mods prints a list of all of the mods that modsquad is aware of. Let's say you find look through that list and find the file supersword.zip and decide that you want to install it. You could then run echo supersword.zip | modsquard.py parts to get the list of mods within the mod. This is necessary because some projects include multiple mods or versions of a mod within a single zip file (e.g. different styling options on a clothing mod.

The example above is already a little awkward. Needing to manually scan through the list and pick the modfile. You then need to pipe it in through echo, which is again a pain. Thankfully, you can make this much simpler with a variety of picker apps. Fzf, Rofi, and Dmenu will take a list of input and let you interactively choose which values you want. Thus, the above example can be simplified down do

modsquad.py mods | fzf | modsquad.py parts

To install multiple mod options, we could run:

modsquad.py mods | rofi -dmenu | modsquad.py parts | fzf -m | modsquad.py install

This would use rofi to select the modfile and then allow you to select multiple mods within the file.

When you get bored of the mod, it could be removed via:

modsquad.py mods | rofi -dmenu | modsquad.py parts | fzf -m | modsquad.py uninstall

One last little note is that modsquad assumes that all mods are contained in zip formatted files. However, you'll probably find that most of the mods you find online are not formatted this way. To handle this, there is the alien subcommand, which lists all the files in your mod directory which aren't zip files, and the convert subcommand, which converts other archive formats into zip files (assuming that atool is installed). Thus, switching the mods over into a format that modsquad can handle is just a matter of:

modsquad.py alien fzf -m | modsquad.py convert

#Configuration

In general, modsquad needs two parameters set on the command line

  • --dir sets the directory where all the mods are stored. Every mod is expected to be in a Zip archive. If the mod is in some other format, you will need to convert it into a zip file.

  • --dest-dir sets the directory where mods are installed. This will be ~/.steam/root/steamapps/common/Skyrim/Data for most common installations, so this is the default value.

Since the dir and dest-dir parameters need to be set on almost every invocation, they can be chosen by a config file. Creating the file ~/.config/modsquad/config.ini and adding the text

[paths]
mods = ~/Downloads
destination = /tmp/mods

is the same as setting the dir parameter to ~/Downloads and the dest-dir parameter to /tmp/mods.

#Issues

Paths on Linux are case sensitive, while paths on Windows are not. As a result, if one mod has a "Textures" folder, another has "TEXTURES", another has "textures", and the last mod has "TeXtUrEs", then you'll wind up with four different folders. It's possible to add normalisation into modsquad, but that wouldn't work well with mods install outside of modsquad. I'm beginning to think that that problem is just inevitable and I will add path normalisation to a later release. In the meanwhile, you might need to condense your folders from time to time.

#FAQ

  • Why is this mod named after an old TV show? Because I'm bad at naming things.
  • Where do I report a bug? You can open a bug ticket on the tracker
  • Where can I get help? You should ask on the mailing list
  • How can I get SKSE running on Linux? That's a really good question that I need to do a full write-up on. I promise that I will do this write-up because I'll forget for myself how I did it if I don't.