summaryrefslogtreecommitdiff
path: root/pkgs/unofficial-homestuck-collection/default.nix
blob: ec09b2ba7ca15b01f32cc67ff011bdfb1b4f163a (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
{
  lib,
  stdenv,
  electron,
  fetchFromGitHub,
  fetchurl,
  fetchYarnDeps,
  fixup-yarn-lock,
  replaceVars,
  writableTmpDirAsHomeHook,
  makeWrapper,
  nodejs,
  yarn,
  libglvnd,
}:
stdenv.mkDerivation (finalAttrs: {
  pname = "unofficial-homestuck-collection";
  version = "2.7.0";

  src = fetchFromGitHub {
    owner = "GiovanH";
    repo = "unofficial-homestuck-collection";
    rev = "v${finalAttrs.version}";
    hash = "sha256-hmGvOsx5OUesXD3Nat00IVDra36IpeFLFklwcMu1UTU=";
  };

  patches = [
    (replaceVars ./0001-disable-git-rev-check.patch {
      git_branch = "'main'";
      git_revision = "'${finalAttrs.src.rev}'";
      git_remote = "'${finalAttrs.src.url}'";
    })
    ./0002-disable-update-check.patch
    ./0003-make-compatible-with-native-electron.patch
  ];

  offlineCache = fetchYarnDeps {
    yarnLock = "${finalAttrs.src}/yarn.lock";
    hash = "sha256-mo5Ir/pLoqc6K/0AOJqKC0yup7vx9UrNfQ+casIgBCo=";
  };

  nativeBuildInputs = [
    fixup-yarn-lock
    makeWrapper
    nodejs
    writableTmpDirAsHomeHook
    yarn
  ];

  configurePhase = ''
    runHook preConfigure

    # setup yarn
    fixup-yarn-lock yarn.lock
    yarn config --offline set ignore-engines true
    yarn config --offline set yarn-offline-mirror $offlineCache
    yarn install --offline --frozen-lockfile --ignore-scripts --no-progress
    patchShebangs node_modules

    # fixup node_modules
    echo > node_modules/phantomjs-prebuilt/install.js
    echo > node_modules/electron/index.js

    runHook postConfigure
  '';

  buildPhase = ''
    runHook preBuild

    make src/imods.tar.gz
    make src/js/crc_imods.json
    env NODE_OPTIONS=--max_old_space_size=8192 \
      yarn run vue-cli-service electron:build \
      --dir \
      -c.electronDist=${electron.dist} \
      -c.electronVersion=${electron.version} \
      --config ${./electron-builder.yml}

    runHook postBuild
  '';

  installPhase = ''
    runHook preInstall

    for i in 16x16 24x24 48x48 64x64 128x128 256x256 512x512; do
      install -Dm644 build/icons/$i.png $out/share/icons/hicolor/$i/apps/dev.bambosh.UnofficialHomestuckCollection.png
    done
    install -Dm644 build/dev.bambosh.UnofficialHomestuckCollection.metainfo.xml $out/share/metainfo/dev.bambosh.UnofficialHomestuckCollection.metainfo.xml
    install -Dm644 build/dev.bambosh.UnofficialHomestuckCollection.desktop $out/share/applications/dev.bambosh.UnofficialHomestuckCollection.desktop
    install  -d $out/bin $out/share/unofficial-homestuck-collection
    cp -r dist_electron/*-unpacked/{locales,resources{,.pak}} $out/share/unofficial-homestuck-collection
    makeWrapper ${lib.getExe electron} $out/bin/unofficial-homestuck-collection \
      --add-flags $out/share/unofficial-homestuck-collection/resources/app.asar \
      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
      --add-flags --no-sandbox \
      --set LD_LIBRARY_PATH "${
        lib.makeLibraryPath [
          libglvnd
        ]
      }" \
      --inherit-argv0

    runHook postInstall
  '';

  meta = {
    description = "Offline collection of Homestuck and its related works";
    homepage = "https://homestuck.giovanh.com/unofficial-homestuck-collection/";
    changelog = "https://github.com/GiovanH/unofficial-homestuck-collection/releases/tag/v${finalAttrs.version}";
    license = lib.licenses.gpl3Plus;
    maintainers = with lib.maintainers; [
      kenshineto
    ];
    mainProgram = "unofficial-homestuck-collection";
    # TODO: kenshineto: macos support, i dont own a mac
    platforms = lib.platforms.linux;
  };
})