chromium,chromedriver: 129.0.6668.91 -> 129.0.6668.100
[NixPkgs.git] / pkgs / by-name / ne / nexusmods-app / package.nix
blob3c311548baa8db0626999731a9ce96c4e3878d7a
2   _7zz,
3   avalonia,
4   buildDotnetModule,
5   copyDesktopItems,
6   desktop-file-utils,
7   dotnetCorePackages,
8   fetchFromGitHub,
9   imagemagick,
10   lib,
11   runCommand,
12   xdg-utils,
13   pname ? "nexusmods-app",
15 let
16   # From https://nexus-mods.github.io/NexusMods.App/developers/Contributing/#for-package-maintainers
17   constants = [
18     # Tell the app it is a distro package; affects wording in update prompts
19     "INSTALLATION_METHOD_PACKAGE_MANAGER"
21     # Don't include upstream's 7zz binary; we use the nixpkgs version
22     "NEXUSMODS_APP_USE_SYSTEM_EXTRACTOR"
23   ];
25 buildDotnetModule (finalAttrs: {
26   inherit pname;
27   version = "0.6.1";
29   src = fetchFromGitHub {
30     owner = "Nexus-Mods";
31     repo = "NexusMods.App";
32     rev = "v${finalAttrs.version}";
33     fetchSubmodules = true;
34     hash = "sha256-OmWDJVsXtUOYBeUXLx6EkQ1/RuH/3wIe40R5KgpmEC4=";
35   };
37   enableParallelBuilding = false;
39   # If the whole solution is published, there seems to be a race condition where
40   # it will sometimes publish the wrong version of a dependent assembly, for
41   # example: Microsoft.Extensions.Hosting.dll 6.0.0 instead of 8.0.0.
42   # https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/7.0/solution-level-output-no-longer-valid
43   # TODO: do something about this in buildDotnetModule
44   projectFile = "src/NexusMods.App/NexusMods.App.csproj";
45   testProjectFile = "NexusMods.App.sln";
47   buildInputs = [
48     # TODO: bump avalonia to 11.1.3
49     # avalonia
50   ];
52   nativeCheckInputs = [ _7zz ];
54   nativeBuildInputs = [
55     copyDesktopItems
56     imagemagick # For resizing SVG icon in postInstall
57   ];
59   nugetDeps = ./deps.nix;
60   mapNuGetDependencies = true;
62   dotnet-sdk = dotnetCorePackages.sdk_8_0;
63   dotnet-runtime = dotnetCorePackages.runtime_8_0;
65   postPatch = ''
66     # for some reason these tests fail (intermittently?) with a zero timestamp
67     touch tests/NexusMods.UI.Tests/WorkspaceSystem/*.verified.png
68   '';
70   makeWrapperArgs = [
71     "--prefix PATH : ${lib.makeBinPath finalAttrs.runtimeInputs}"
72   ];
74   postInstall = ''
75     # Desktop entry
76     # As per #308324, use mainProgram from PATH, instead of $out/bin/NexusMods.App
77     install -D -m 444 -t $out/share/applications src/NexusMods.App/com.nexusmods.app.desktop
78     substituteInPlace $out/share/applications/com.nexusmods.app.desktop \
79       --replace-fail '${"$"}{INSTALL_EXEC}' "${finalAttrs.meta.mainProgram}"
81     # AppStream metadata
82     install -D -m 444 -t $out/share/metainfo src/NexusMods.App/com.nexusmods.app.metainfo.xml
84     # Icon
85     icon=src/NexusMods.App/icon.svg
86     install -D -m 444 -T $icon $out/share/icons/hicolor/scalable/apps/com.nexusmods.app.svg
88     # Bitmap icons
89     for i in 16 24 48 64 96 128 256 512; do
90       size=''${i}x''${i}
91       dir=$out/share/icons/hicolor/$size/apps
92       mkdir -p $dir
93       convert -background none -resize $size $icon $dir/com.nexusmods.app.png
94     done
95   '';
97   runtimeInputs = [
98     _7zz
99     desktop-file-utils
100     xdg-utils
101   ];
103   executables = [ "NexusMods.App" ];
105   dotnetBuildFlags = [
106     # From https://github.com/Nexus-Mods/NexusMods.App/blob/v0.6.1/src/NexusMods.App/app.pupnet.conf#L38
107     "--property:Version=${finalAttrs.version}"
108     "--property:TieredCompilation=true"
109     "--property:PublishReadyToRun=true"
110     "--property:DefineConstants=${lib.strings.concatStringsSep "%3B" constants}"
111   ];
113   doCheck = true;
115   dotnetTestFlags = [
116     "--environment=USER=nobody"
117     "--property:DefineConstants=${lib.strings.concatStringsSep "%3B" constants}"
118   ];
120   testFilters = [
121     "Category!=Disabled"
122     "FlakeyTest!=True"
123     "RequiresNetworking!=True"
124   ];
126   disabledTests =
127     [
128       "NexusMods.UI.Tests.ImageCacheTests.Test_LoadAndCache_RemoteImage"
129       "NexusMods.UI.Tests.ImageCacheTests.Test_LoadAndCache_ImageStoredFile"
130     ]
131     ++ lib.optionals (!_7zz.meta.unfree) [
132       "NexusMods.Games.FOMOD.Tests.FomodXmlInstallerTests.InstallsFilesSimple_UsingRar"
133     ];
135   passthru = {
136     tests =
137       let
138         runTest =
139           name: script:
140           runCommand "${pname}-test-${name}" { nativeBuildInputs = [ finalAttrs.finalPackage ]; } ''
141             ${script}
142             touch $out
143           '';
144       in
145       {
146         serve = runTest "serve" ''
147           NexusMods.App
148         '';
149         help = runTest "help" ''
150           NexusMods.App --help
151         '';
152         associate-nxm = runTest "associate-nxm" ''
153           NexusMods.App associate-nxm
154         '';
155         list-tools = runTest "list-tools" ''
156           NexusMods.App list-tools
157         '';
158       };
159     updateScript = ./update.bash;
160   };
162   meta = {
163     mainProgram = "NexusMods.App";
164     homepage = "https://github.com/Nexus-Mods/NexusMods.App";
165     changelog = "https://github.com/Nexus-Mods/NexusMods.App/releases/tag/${finalAttrs.src.rev}";
166     license = [ lib.licenses.gpl3Plus ];
167     maintainers = with lib.maintainers; [
168       l0b0
169       MattSturgeon
170     ];
171     platforms = lib.platforms.linux;
172     description = "Game mod installer, creator and manager";
173     longDescription = ''
174       A mod installer, creator and manager for all your popular games.
176       Currently experimental and undergoing active development,
177       new releases may include breaking changes!
179       ${
180         if _7zz.meta.unfree then
181           ''
182             This "unfree" variant includes support for mods packaged as RAR archives.
183           ''
184         else
185           ''
186             It is strongly recommended that you use the "unfree" variant of this package,
187             which provides support for mods packaged as RAR archives.
189             You can also enable unrar support manually, by overriding the `_7zz` used:
191             ```nix
192             pkgs.nexusmods-app.override {
193               _7zz = pkgs._7zz-rar;
194             }
195             ```
196           ''
197       }
198     '';
199   };