this repo has no description
1{
2 description = "Yet another Discord mod";
3
4 inputs = {
5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
6 flake-utils.url = "github:numtide/flake-utils";
7 pnpm2nix.url = "github:mojotech/pnpm2nix-nzbr";
8 };
9
10 outputs = { self, nixpkgs, flake-utils, pnpm2nix }:
11 let
12 mkMoonlight = { pkgs, mkPnpmPackage }:
13 mkPnpmPackage rec {
14 workspace = ./.;
15 src = ./.;
16 components = [
17 "packages/core"
18 "packages/core-extensions"
19 "packages/injector"
20 "packages/node-preload"
21 "packages/types"
22 "packages/web-preload"
23 ];
24 distDirs = [ "dist" ];
25
26 copyNodeModules = true;
27 buildPhase = "pnpm run build";
28 installPhase = "cp -r dist $out";
29
30 meta = with pkgs.lib; {
31 description = "Yet another Discord mod";
32 homepage = "https://moonlight-mod.github.io/";
33 license = licenses.lgpl3;
34 maintainers = with maintainers; [ notnite ];
35 };
36 };
37
38 nameTable = {
39 discord = "Discord";
40 discord-ptb = "DiscordPTB";
41 discord-canary = "DiscordCanary";
42 discord-development = "DiscordDevelopment";
43 };
44
45 darwinNameTable = {
46 discord = "Discord";
47 discord-ptb = "Discord PTB";
48 discord-canary = "Discord Canary";
49 discord-development = "Discord Development";
50 };
51
52 mkOverride = prev: moonlight: name:
53 let discord = prev.${name};
54 in discord.overrideAttrs (old: {
55 installPhase = let
56 folderName = nameTable.${name};
57 darwinFolderName = darwinNameTable.${name};
58
59 injected = ''
60 require("${moonlight}/injector").inject(
61 require("path").join(__dirname, "../_app.asar")
62 );
63 '';
64
65 packageJson = ''
66 {"name":"discord","main":"./injector.js","private":true}
67 '';
68
69 in old.installPhase + "\n" + ''
70 resources="$out/opt/${folderName}/resources"
71 if [ ! -d "$resources" ]; then
72 resources="$out/Applications/${darwinFolderName}.app/Contents/Resources"
73 fi
74
75 mv "$resources/app.asar" "$resources/_app.asar"
76 mkdir -p "$resources/app"
77
78 cat > "$resources/app/injector.js" <<EOF
79 ${injected}
80 EOF
81
82 echo '${packageJson}' > "$resources/app/package.json"
83 '';
84 });
85
86 overlay = final: prev: rec {
87 moonlight-mod = mkMoonlight {
88 pkgs = final;
89 mkPnpmPackage = pnpm2nix.packages.${final.system}.mkPnpmPackage;
90 };
91 discord = mkOverride prev moonlight-mod "discord";
92 discord-ptb = mkOverride prev moonlight-mod "discord-ptb";
93 discord-canary = mkOverride prev moonlight-mod "discord-canary";
94 discord-development =
95 mkOverride prev moonlight-mod "discord-development";
96 };
97 in flake-utils.lib.eachDefaultSystem (system:
98 let
99 pkgs = import nixpkgs {
100 inherit system;
101 config.allowUnfree = true;
102 overlays = [ overlay ];
103 };
104 in {
105 packages.default = pkgs.moonlight-mod;
106 packages.moonlight-mod = pkgs.moonlight-mod;
107
108 packages.discord = pkgs.discord;
109 packages.discord-ptb = pkgs.discord-ptb;
110 packages.discord-canary = pkgs.discord-canary;
111 packages.discord-development = pkgs.discord-development;
112 }) // {
113 overlays.default = overlay;
114 };
115}