this repo has no description

Clean up Nix a bit, expose home-manager module

+147 -86
+3 -86
flake.nix
··· 8 8 }; 9 9 10 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 - }; 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 + # 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 + homeModules.default = ./nix/home-manager.nix; 114 31 }; 115 32 }
+28
nix/default.nix
··· 1 + { pkgs, mkPnpmPackage }: 2 + 3 + mkPnpmPackage rec { 4 + workspace = ./..; 5 + src = ./..; 6 + 7 + # Work around a bug with how it expects dist 8 + components = [ 9 + "packages/core" 10 + "packages/core-extensions" 11 + "packages/injector" 12 + "packages/node-preload" 13 + "packages/types" 14 + "packages/web-preload" 15 + ]; 16 + distDirs = [ "dist" ]; 17 + 18 + copyNodeModules = true; 19 + buildPhase = "pnpm run build"; 20 + installPhase = "cp -r dist $out"; 21 + 22 + meta = with pkgs.lib; { 23 + description = "Yet another Discord mod"; 24 + homepage = "https://moonlight-mod.github.io/"; 25 + license = licenses.lgpl3; 26 + maintainers = with maintainers; [ notnite ]; 27 + }; 28 + }
+56
nix/home-manager.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + let cfg = config.programs.moonlight-mod; 4 + in { 5 + options.programs.moonlight-mod = { 6 + enable = lib.mkEnableOption "Yet another Discord mod"; 7 + 8 + configs = let 9 + # TODO: type this 10 + type = lib.types.nullOr (lib.types.attrs); 11 + default = null; 12 + in { 13 + stable = lib.mkOption { 14 + inherit type default; 15 + description = "Configuration for Discord Stable"; 16 + }; 17 + 18 + ptb = lib.mkOption { 19 + inherit type default; 20 + description = "Configuration for Discord PTB"; 21 + }; 22 + 23 + canary = lib.mkOption { 24 + inherit type default; 25 + description = "Configuration for Discord Canary"; 26 + }; 27 + 28 + development = lib.mkOption { 29 + inherit type default; 30 + description = "Configuration for Discord Development"; 31 + }; 32 + }; 33 + }; 34 + 35 + config = lib.mkIf cfg.enable { 36 + xdg.configFile."moonlight-mod/stable.json" = 37 + lib.mkIf (cfg.configs.stable != null) { 38 + text = builtins.toJSON cfg.configs.stable; 39 + }; 40 + 41 + xdg.configFile."moonlight-mod/ptb.json" = 42 + lib.mkIf (cfg.configs.ptb != null) { 43 + text = builtins.toJSON cfg.configs.ptb; 44 + }; 45 + 46 + xdg.configFile."moonlight-mod/canary.json" = 47 + lib.mkIf (cfg.configs.canary != null) { 48 + text = builtins.toJSON cfg.configs.canary; 49 + }; 50 + 51 + xdg.configFile."moonlight-mod/development.json" = 52 + lib.mkIf (cfg.configs.development != null) { 53 + text = builtins.toJSON cfg.configs.development; 54 + }; 55 + }; 56 + }
+60
nix/overlay.nix
··· 1 + { pnpm2nix }: 2 + 3 + let 4 + nameTable = { 5 + discord = "Discord"; 6 + discord-ptb = "DiscordPTB"; 7 + discord-canary = "DiscordCanary"; 8 + discord-development = "DiscordDevelopment"; 9 + }; 10 + 11 + darwinNameTable = { 12 + discord = "Discord"; 13 + discord-ptb = "Discord PTB"; 14 + discord-canary = "Discord Canary"; 15 + discord-development = "Discord Development"; 16 + }; 17 + 18 + mkOverride = prev: moonlight: name: 19 + let discord = prev.${name}; 20 + in discord.overrideAttrs (old: { 21 + installPhase = let 22 + folderName = nameTable.${name}; 23 + darwinFolderName = darwinNameTable.${name}; 24 + 25 + injected = '' 26 + require("${moonlight}/injector").inject( 27 + require("path").join(__dirname, "../_app.asar") 28 + ); 29 + ''; 30 + 31 + packageJson = '' 32 + {"name":"discord","main":"./injector.js","private":true} 33 + ''; 34 + 35 + in old.installPhase + "\n" + '' 36 + resources="$out/opt/${folderName}/resources" 37 + if [ ! -d "$resources" ]; then 38 + resources="$out/Applications/${darwinFolderName}.app/Contents/Resources" 39 + fi 40 + 41 + mv "$resources/app.asar" "$resources/_app.asar" 42 + mkdir -p "$resources/app" 43 + 44 + cat > "$resources/app/injector.js" <<EOF 45 + ${injected} 46 + EOF 47 + 48 + echo '${packageJson}' > "$resources/app/package.json" 49 + ''; 50 + }); 51 + in final: prev: rec { 52 + moonlight-mod = final.callPackage ./default.nix { 53 + pkgs = final; 54 + mkPnpmPackage = pnpm2nix.packages.${final.system}.mkPnpmPackage; 55 + }; 56 + discord = mkOverride prev moonlight-mod "discord"; 57 + discord-ptb = mkOverride prev moonlight-mod "discord-ptb"; 58 + discord-canary = mkOverride prev moonlight-mod "discord-canary"; 59 + discord-development = mkOverride prev moonlight-mod "discord-development"; 60 + }