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.
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
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
.
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.