Skip to content

Contributing

Code Contributions

Prerequisites

There are also some Item Templates for Avalonia that can be very useful to have, helping you make things like new 'Windows' and 'Controls' easier.

Running the project

  • Clone the repository (optionally make a fork first)
  • Ensure submodules have been cloned as well, you may use git submodule update --init --recursive to do so
  • Build and run the NexusMods.App project from your IDE to start the app, or use dotnet run --project src/NexusMods.App/NexusMods.App.csproj

Writing code

Make sure to follow our Development Guidelines.

Translations

Translations are currently handled via the IDE. See this issue for more details.

For Package Maintainers

If you want to create a package for your distribution, here are some helpful tips to get started. If you have questions or want to let us know about your new package, consider joining our Discord.

If possible, use nexusmods-app for the package name and com.nexusmods.app as the rDNS ID for Flatpaks and similar. See Linux Dependencies for a list of dependencies.

There are various build variables you should consider using. You can set compile constants using -p:DefineConstants="NAME" with dotnet build or dotnet publish. For a full list of available application-specific compile constants, see Directory.Build.props:

  • NEXUSMODS_APP_USE_SYSTEM_EXTRACTOR: We ship a build of 7zz that you can disable. Setting this constant will force the code to use 7zz available in PATH. See #1306 for details. Do note that some versions of 7zz don't support RAR files, due to licensing issues. The build that the App ships with supports RAR files. Many mods still come in RAR archives, for a better user experience, we expect 7zz to support RAR files. We won't accept issues around extraction failures for builds that don't support RAR archives.
  • INSTALLATION_METHOD_PACKAGE_MANAGER: This constant will prevent the App from generating a .desktop file at runtime, and will change the update notification that notifies the user about new versions. If this constant is set, the App will tell the user to update using their package manager.

We publish the App using PupNet. Releases are built using GitHub Actions, see build-linux-pupnet.yaml for details. PupNet will use dotnet publish before packaging the result in some specialized format.

If you don't wish to use PupNet, you should still prefer dotnet publish over dotnet build. The arguments we use with dotnet publish can be found in app.pupnet.conf. Also see the dotnet publish documentation for a list of options.

We provide a Desktop Entry file called com.nexusmods.app.desktop. When building the package, you should use this file and replace ${INSTALL_EXEC} with an absolute path to the NexusMods.App binary.

The App will generate this .desktop file and replace the placeholder with the absolute path to the executable if INSTALLATION_METHOD_PACKAGE_MANAGER is not set.

Besides the Desktop Entry file, we also provide the following files that you should make use of, if possible: