tangled
alpha
login
or
join now
notnite.com
/
moonlight
3
fork
atom
this repo has no description
3
fork
atom
overview
issues
pulls
pipelines
Clean up Nix a bit, expose home-manager module
notnite.com
1 year ago
be88233d
54ec0140
+147
-86
4 changed files
expand all
collapse all
unified
split
flake.nix
nix
default.nix
home-manager.nix
overlay.nix
+3
-86
flake.nix
···
8
8
};
9
9
10
10
outputs = { self, nixpkgs, flake-utils, pnpm2nix }:
11
11
-
let
12
12
-
mkMoonlight = { pkgs, mkPnpmPackage }:
13
13
-
mkPnpmPackage rec {
14
14
-
workspace = ./.;
15
15
-
src = ./.;
16
16
-
components = [
17
17
-
"packages/core"
18
18
-
"packages/core-extensions"
19
19
-
"packages/injector"
20
20
-
"packages/node-preload"
21
21
-
"packages/types"
22
22
-
"packages/web-preload"
23
23
-
];
24
24
-
distDirs = [ "dist" ];
25
25
-
26
26
-
copyNodeModules = true;
27
27
-
buildPhase = "pnpm run build";
28
28
-
installPhase = "cp -r dist $out";
29
29
-
30
30
-
meta = with pkgs.lib; {
31
31
-
description = "Yet another Discord mod";
32
32
-
homepage = "https://moonlight-mod.github.io/";
33
33
-
license = licenses.lgpl3;
34
34
-
maintainers = with maintainers; [ notnite ];
35
35
-
};
36
36
-
};
37
37
-
38
38
-
nameTable = {
39
39
-
discord = "Discord";
40
40
-
discord-ptb = "DiscordPTB";
41
41
-
discord-canary = "DiscordCanary";
42
42
-
discord-development = "DiscordDevelopment";
43
43
-
};
44
44
-
45
45
-
darwinNameTable = {
46
46
-
discord = "Discord";
47
47
-
discord-ptb = "Discord PTB";
48
48
-
discord-canary = "Discord Canary";
49
49
-
discord-development = "Discord Development";
50
50
-
};
51
51
-
52
52
-
mkOverride = prev: moonlight: name:
53
53
-
let discord = prev.${name};
54
54
-
in discord.overrideAttrs (old: {
55
55
-
installPhase = let
56
56
-
folderName = nameTable.${name};
57
57
-
darwinFolderName = darwinNameTable.${name};
58
58
-
59
59
-
injected = ''
60
60
-
require("${moonlight}/injector").inject(
61
61
-
require("path").join(__dirname, "../_app.asar")
62
62
-
);
63
63
-
'';
64
64
-
65
65
-
packageJson = ''
66
66
-
{"name":"discord","main":"./injector.js","private":true}
67
67
-
'';
68
68
-
69
69
-
in old.installPhase + "\n" + ''
70
70
-
resources="$out/opt/${folderName}/resources"
71
71
-
if [ ! -d "$resources" ]; then
72
72
-
resources="$out/Applications/${darwinFolderName}.app/Contents/Resources"
73
73
-
fi
74
74
-
75
75
-
mv "$resources/app.asar" "$resources/_app.asar"
76
76
-
mkdir -p "$resources/app"
77
77
-
78
78
-
cat > "$resources/app/injector.js" <<EOF
79
79
-
${injected}
80
80
-
EOF
81
81
-
82
82
-
echo '${packageJson}' > "$resources/app/package.json"
83
83
-
'';
84
84
-
});
85
85
-
86
86
-
overlay = final: prev: rec {
87
87
-
moonlight-mod = mkMoonlight {
88
88
-
pkgs = final;
89
89
-
mkPnpmPackage = pnpm2nix.packages.${final.system}.mkPnpmPackage;
90
90
-
};
91
91
-
discord = mkOverride prev moonlight-mod "discord";
92
92
-
discord-ptb = mkOverride prev moonlight-mod "discord-ptb";
93
93
-
discord-canary = mkOverride prev moonlight-mod "discord-canary";
94
94
-
discord-development =
95
95
-
mkOverride prev moonlight-mod "discord-development";
96
96
-
};
11
11
+
let overlay = import ./nix/overlay.nix { inherit pnpm2nix; };
97
12
in flake-utils.lib.eachDefaultSystem (system:
98
13
let
99
14
pkgs = import nixpkgs {
···
102
17
overlays = [ overlay ];
103
18
};
104
19
in {
20
20
+
# Don't use these unless you're testing things
105
21
packages.default = pkgs.moonlight-mod;
106
22
packages.moonlight-mod = pkgs.moonlight-mod;
107
23
···
111
27
packages.discord-development = pkgs.discord-development;
112
28
}) // {
113
29
overlays.default = overlay;
30
30
+
homeModules.default = ./nix/home-manager.nix;
114
31
};
115
32
}
+28
nix/default.nix
···
1
1
+
{ pkgs, mkPnpmPackage }:
2
2
+
3
3
+
mkPnpmPackage rec {
4
4
+
workspace = ./..;
5
5
+
src = ./..;
6
6
+
7
7
+
# Work around a bug with how it expects dist
8
8
+
components = [
9
9
+
"packages/core"
10
10
+
"packages/core-extensions"
11
11
+
"packages/injector"
12
12
+
"packages/node-preload"
13
13
+
"packages/types"
14
14
+
"packages/web-preload"
15
15
+
];
16
16
+
distDirs = [ "dist" ];
17
17
+
18
18
+
copyNodeModules = true;
19
19
+
buildPhase = "pnpm run build";
20
20
+
installPhase = "cp -r dist $out";
21
21
+
22
22
+
meta = with pkgs.lib; {
23
23
+
description = "Yet another Discord mod";
24
24
+
homepage = "https://moonlight-mod.github.io/";
25
25
+
license = licenses.lgpl3;
26
26
+
maintainers = with maintainers; [ notnite ];
27
27
+
};
28
28
+
}
+56
nix/home-manager.nix
···
1
1
+
{ config, lib, pkgs, ... }:
2
2
+
3
3
+
let cfg = config.programs.moonlight-mod;
4
4
+
in {
5
5
+
options.programs.moonlight-mod = {
6
6
+
enable = lib.mkEnableOption "Yet another Discord mod";
7
7
+
8
8
+
configs = let
9
9
+
# TODO: type this
10
10
+
type = lib.types.nullOr (lib.types.attrs);
11
11
+
default = null;
12
12
+
in {
13
13
+
stable = lib.mkOption {
14
14
+
inherit type default;
15
15
+
description = "Configuration for Discord Stable";
16
16
+
};
17
17
+
18
18
+
ptb = lib.mkOption {
19
19
+
inherit type default;
20
20
+
description = "Configuration for Discord PTB";
21
21
+
};
22
22
+
23
23
+
canary = lib.mkOption {
24
24
+
inherit type default;
25
25
+
description = "Configuration for Discord Canary";
26
26
+
};
27
27
+
28
28
+
development = lib.mkOption {
29
29
+
inherit type default;
30
30
+
description = "Configuration for Discord Development";
31
31
+
};
32
32
+
};
33
33
+
};
34
34
+
35
35
+
config = lib.mkIf cfg.enable {
36
36
+
xdg.configFile."moonlight-mod/stable.json" =
37
37
+
lib.mkIf (cfg.configs.stable != null) {
38
38
+
text = builtins.toJSON cfg.configs.stable;
39
39
+
};
40
40
+
41
41
+
xdg.configFile."moonlight-mod/ptb.json" =
42
42
+
lib.mkIf (cfg.configs.ptb != null) {
43
43
+
text = builtins.toJSON cfg.configs.ptb;
44
44
+
};
45
45
+
46
46
+
xdg.configFile."moonlight-mod/canary.json" =
47
47
+
lib.mkIf (cfg.configs.canary != null) {
48
48
+
text = builtins.toJSON cfg.configs.canary;
49
49
+
};
50
50
+
51
51
+
xdg.configFile."moonlight-mod/development.json" =
52
52
+
lib.mkIf (cfg.configs.development != null) {
53
53
+
text = builtins.toJSON cfg.configs.development;
54
54
+
};
55
55
+
};
56
56
+
}
+60
nix/overlay.nix
···
1
1
+
{ pnpm2nix }:
2
2
+
3
3
+
let
4
4
+
nameTable = {
5
5
+
discord = "Discord";
6
6
+
discord-ptb = "DiscordPTB";
7
7
+
discord-canary = "DiscordCanary";
8
8
+
discord-development = "DiscordDevelopment";
9
9
+
};
10
10
+
11
11
+
darwinNameTable = {
12
12
+
discord = "Discord";
13
13
+
discord-ptb = "Discord PTB";
14
14
+
discord-canary = "Discord Canary";
15
15
+
discord-development = "Discord Development";
16
16
+
};
17
17
+
18
18
+
mkOverride = prev: moonlight: name:
19
19
+
let discord = prev.${name};
20
20
+
in discord.overrideAttrs (old: {
21
21
+
installPhase = let
22
22
+
folderName = nameTable.${name};
23
23
+
darwinFolderName = darwinNameTable.${name};
24
24
+
25
25
+
injected = ''
26
26
+
require("${moonlight}/injector").inject(
27
27
+
require("path").join(__dirname, "../_app.asar")
28
28
+
);
29
29
+
'';
30
30
+
31
31
+
packageJson = ''
32
32
+
{"name":"discord","main":"./injector.js","private":true}
33
33
+
'';
34
34
+
35
35
+
in old.installPhase + "\n" + ''
36
36
+
resources="$out/opt/${folderName}/resources"
37
37
+
if [ ! -d "$resources" ]; then
38
38
+
resources="$out/Applications/${darwinFolderName}.app/Contents/Resources"
39
39
+
fi
40
40
+
41
41
+
mv "$resources/app.asar" "$resources/_app.asar"
42
42
+
mkdir -p "$resources/app"
43
43
+
44
44
+
cat > "$resources/app/injector.js" <<EOF
45
45
+
${injected}
46
46
+
EOF
47
47
+
48
48
+
echo '${packageJson}' > "$resources/app/package.json"
49
49
+
'';
50
50
+
});
51
51
+
in final: prev: rec {
52
52
+
moonlight-mod = final.callPackage ./default.nix {
53
53
+
pkgs = final;
54
54
+
mkPnpmPackage = pnpm2nix.packages.${final.system}.mkPnpmPackage;
55
55
+
};
56
56
+
discord = mkOverride prev moonlight-mod "discord";
57
57
+
discord-ptb = mkOverride prev moonlight-mod "discord-ptb";
58
58
+
discord-canary = mkOverride prev moonlight-mod "discord-canary";
59
59
+
discord-development = mkOverride prev moonlight-mod "discord-development";
60
60
+
}