+4
.gitignore
+4
.gitignore
+61
flake.lock
+61
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"flake-utils": {
4
+
"inputs": {
5
+
"systems": "systems"
6
+
},
7
+
"locked": {
8
+
"lastModified": 1701680307,
9
+
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
10
+
"owner": "numtide",
11
+
"repo": "flake-utils",
12
+
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
13
+
"type": "github"
14
+
},
15
+
"original": {
16
+
"owner": "numtide",
17
+
"repo": "flake-utils",
18
+
"type": "github"
19
+
}
20
+
},
21
+
"nixpkgs": {
22
+
"locked": {
23
+
"lastModified": 1704295289,
24
+
"narHash": "sha256-9WZDRfpMqCYL6g/HNWVvXF0hxdaAgwgIGeLYiOhmes8=",
25
+
"owner": "NixOS",
26
+
"repo": "nixpkgs",
27
+
"rev": "b0b2c5445c64191fd8d0b31f2b1a34e45a64547d",
28
+
"type": "github"
29
+
},
30
+
"original": {
31
+
"owner": "NixOS",
32
+
"ref": "nixos-23.11",
33
+
"repo": "nixpkgs",
34
+
"type": "github"
35
+
}
36
+
},
37
+
"root": {
38
+
"inputs": {
39
+
"flake-utils": "flake-utils",
40
+
"nixpkgs": "nixpkgs"
41
+
}
42
+
},
43
+
"systems": {
44
+
"locked": {
45
+
"lastModified": 1681028828,
46
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
47
+
"owner": "nix-systems",
48
+
"repo": "default",
49
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
50
+
"type": "github"
51
+
},
52
+
"original": {
53
+
"owner": "nix-systems",
54
+
"repo": "default",
55
+
"type": "github"
56
+
}
57
+
}
58
+
},
59
+
"root": "root",
60
+
"version": 7
61
+
}
+95
flake.nix
+95
flake.nix
···
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
+
};
8
+
9
+
outputs = { self, nixpkgs, flake-utils }:
10
+
flake-utils.lib.eachDefaultSystem (system:
11
+
let
12
+
pkgs = import nixpkgs {
13
+
inherit system;
14
+
config.allowUnfree = true;
15
+
};
16
+
17
+
version = "1.0.7";
18
+
hash = "sha256-jqy9RM2/9i/o4TTzKG1FvnoUCjwslBaHVG2tIx/T2f4=";
19
+
20
+
# pnpm2nix is unmaintained, forks of it don't support pnpm workspaces
21
+
# Downloading tarballs from GitHub releases will have to do
22
+
moonlight = pkgs.stdenv.mkDerivation {
23
+
name = "moonlight";
24
+
version = version;
25
+
src = pkgs.fetchurl {
26
+
url =
27
+
"https://github.com/moonlight-mod/moonlight/releases/download/v${version}/dist.tar.gz";
28
+
sha256 = hash;
29
+
};
30
+
31
+
buildInputs = [ pkgs.gnutar ];
32
+
buildPhase = ''
33
+
mkdir -p $out
34
+
tar -xzf $src -C $out
35
+
'';
36
+
37
+
meta = with pkgs.lib; {
38
+
description = "Yet another Discord mod";
39
+
homepage = "https://moonlight-mod.github.io/";
40
+
license = licenses.agpl3;
41
+
maintainers = with maintainers; [ notnite ];
42
+
};
43
+
};
44
+
45
+
mkOverride = discord: name:
46
+
discord.overrideAttrs (old: {
47
+
installPhase = let
48
+
origAsar = "$out/opt/${name}/resources/app.asar";
49
+
movedAsar = "$out/opt/${name}/resources/_app.asar";
50
+
app = "$out/opt/${name}/resources/app";
51
+
52
+
injected = ''
53
+
require("${moonlight}/injector").inject(
54
+
require("path").join(__dirname, "../_app.asar")
55
+
);
56
+
'';
57
+
58
+
packageJson = ''
59
+
{"name":"discord","main":"./injector.js","private":true}
60
+
'';
61
+
62
+
in old.installPhase + "\n" + ''
63
+
mv ${origAsar} ${movedAsar}
64
+
mkdir -p ${app}
65
+
66
+
cat > ${app}/injector.js <<EOF
67
+
${injected}
68
+
EOF
69
+
70
+
echo '${packageJson}' > ${app}/package.json
71
+
'';
72
+
});
73
+
74
+
overlay = final: prev: {
75
+
discord = mkOverride prev.discord "Discord";
76
+
discord-ptb = mkOverride prev.discord-ptb "DiscordPTB";
77
+
discord-canary = mkOverride prev.discord-canary "DiscordCanary";
78
+
discord-development =
79
+
mkOverride prev.discord-development "DiscordDevelopment";
80
+
};
81
+
82
+
pkgsWithOverlay = import nixpkgs {
83
+
inherit system;
84
+
config.allowUnfree = true;
85
+
overlays = [ overlay ];
86
+
};
87
+
in {
88
+
packages.default = moonlight;
89
+
overlays.default = overlay;
90
+
packages.discord = pkgsWithOverlay.discord;
91
+
packages.discord-ptb = pkgsWithOverlay.discord-ptb;
92
+
packages.discord-canary = pkgsWithOverlay.discord-canary;
93
+
packages.discord-development = pkgsWithOverlay.discord-development;
94
+
});
95
+
}