aboutsummaryrefslogtreecommitdiff
path: root/modules/pkgs/fluffy-mod-manager.nix
blob: d1dfe8354a4c6955300f6049f426733f1d337b25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
{ ... }:
{
  flake.overlays.fluffy-mod-manager = final: prev: {
    fluffy-mod-manager = final.callPackage (
      {
        lib,
        stdenv,
        makeWrapper,
        wine,
        requireFile,
        copyDesktopItems,
        makeDesktopItem,
        icoutils,
        imagemagick,
        unzip,
      }:
      stdenv.mkDerivation rec {
        pname = "fluffy-mod-manager";
        version = "3.016";

        src = requireFile {
          name = "fluffy-mod-manager.zip";
          url = "https://www.nexusmods.com/residentevil32020/mods/8";
          sha256 = "071sa9a8dw2zzk3pamhalfn8whzjp8ch3a6wjx6jqgp1g60k6ai6";
        };

        nativeBuildInputs = [ makeWrapper copyDesktopItems icoutils imagemagick unzip ];

        sourceRoot = ".";

        desktopItems = [
          (makeDesktopItem {
            name = "fluffy-mod-manager";
            exec = "fluffy-mod-manager";
            icon = "fluffy-mod-manager";
            desktopName = "Fluffy Mod Manager";
            categories = [ "Game" ];
            startupWMClass = "modmanager.exe";
          })
        ];

        installPhase = ''
          runHook preInstall

          mkdir -p $out/share/fluffy-mod-manager
          cp -r * $out/share/fluffy-mod-manager/

          mkdir -p $out/share/pixmaps
          EXE_NAME=$(find . -maxdepth 1 -iname "modmanager.exe" -print -quit)
          if [ -n "$EXE_NAME" ]; then
            wrestool -x -t 14 -n 105 "$EXE_NAME" -o fluffy.ico || true
            if [ -f fluffy.ico ]; then
              magick "fluffy.ico[0]" $out/share/pixmaps/fluffy-mod-manager.png || convert "fluffy.ico[0]" $out/share/pixmaps/fluffy-mod-manager.png || true
            fi
          fi

          mkdir -p $out/bin
          
          makeWrapper ${wine}/bin/wine $out/bin/fluffy-mod-manager \
            --run "export WINEPREFIX=\"''${WINEPREFIX:-\$HOME/.wine}\"" \
            --run "mkdir -p \"\$WINEPREFIX/drive_c/FluffyModManager\"" \
            --run "cp -rn $out/share/fluffy-mod-manager/* \"\$WINEPREFIX/drive_c/FluffyModManager/\"" \
            --run "chmod -R +w \"\$WINEPREFIX/drive_c/FluffyModManager\"" \
            --run "cd \"\$WINEPREFIX/drive_c/FluffyModManager\"" \
            --add-flags "Modmanager.exe"

          runHook postInstall
        '';

        meta = with lib; {
          description = "Mod manager for many Capcom games and others";
          homepage = "https://www.fluffymanager.com/";
          license = licenses.unfree;
          platforms = platforms.linux;
        };
      }
    ) {
      # Use Wow64 package to ensure 64-bit prefix compatibility
      wine = final.wineWow64Packages.waylandFull;
    };
  };

  flake.modules.homeManager.fluffy-mod-manager = { pkgs, ... }: {
    home.packages = [ pkgs.fluffy-mod-manager ];
  };
}