nix: add panel and container packages

This commit is contained in:
Matthew Penner 2022-11-29 10:48:14 -07:00
parent 56839a14c5
commit 16e34af773
No known key found for this signature in database
3 changed files with 546 additions and 31 deletions

View file

@ -1,5 +1,150 @@
{ {
"nodes": { "nodes": {
"alejandra": {
"inputs": {
"fenix": "fenix",
"flakeCompat": "flakeCompat",
"nixpkgs": [
"dream2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1658427149,
"narHash": "sha256-ToD/1z/q5VHsLMrS2h96vjJoLho59eNRtknOUd19ey8=",
"owner": "kamadorueda",
"repo": "alejandra",
"rev": "f5a22afd2adfb249b4e68e0b33aa1f0fb73fb1be",
"type": "github"
},
"original": {
"owner": "kamadorueda",
"repo": "alejandra",
"type": "github"
}
},
"all-cabal-json": {
"flake": false,
"locked": {
"lastModified": 1665552503,
"narHash": "sha256-r14RmRSwzv5c+bWKUDaze6pXM7nOsiz1H8nvFHJvufc=",
"owner": "nix-community",
"repo": "all-cabal-json",
"rev": "d7c0434eebffb305071404edcf9d5cd99703878e",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "hackage",
"repo": "all-cabal-json",
"type": "github"
}
},
"crane": {
"flake": false,
"locked": {
"lastModified": 1661875961,
"narHash": "sha256-f1h/2c6Teeu1ofAHWzrS8TwBPcnN+EEu+z1sRVmMQTk=",
"owner": "ipetkov",
"repo": "crane",
"rev": "d9f394e4e20e97c2a60c3ad82c2b6ef99be19e24",
"type": "github"
},
"original": {
"owner": "ipetkov",
"repo": "crane",
"type": "github"
}
},
"devshell": {
"flake": false,
"locked": {
"lastModified": 1663445644,
"narHash": "sha256-+xVlcK60x7VY1vRJbNUEAHi17ZuoQxAIH4S4iUFUGBA=",
"owner": "numtide",
"repo": "devshell",
"rev": "e3dc3e21594fe07bdb24bdf1c8657acaa4cb8f66",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"dream2nix": {
"inputs": {
"alejandra": "alejandra",
"all-cabal-json": "all-cabal-json",
"crane": "crane",
"devshell": "devshell",
"flake-parts": "flake-parts",
"flake-utils-pre-commit": "flake-utils-pre-commit",
"ghc-utils": "ghc-utils",
"gomod2nix": "gomod2nix",
"mach-nix": "mach-nix",
"nix-pypi-fetcher": "nix-pypi-fetcher",
"nixpkgs": [
"nixpkgs"
],
"poetry2nix": "poetry2nix",
"pre-commit-hooks": "pre-commit-hooks"
},
"locked": {
"lastModified": 1669743839,
"narHash": "sha256-zxnaRaWfCJxy0JlORD4Kmtzd0pfpcGLnyaCIJY8OlIo=",
"owner": "nix-community",
"repo": "dream2nix",
"rev": "b6af93946130748f72671dfd2ab84a5aeaf1f191",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "dream2nix",
"type": "github"
}
},
"fenix": {
"inputs": {
"nixpkgs": [
"dream2nix",
"alejandra",
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1657607339,
"narHash": "sha256-HaqoAwlbVVZH2n4P3jN2FFPMpVuhxDy1poNOR7kzODc=",
"owner": "nix-community",
"repo": "fenix",
"rev": "b814c83d9e6aa5a28d0cf356ecfdafb2505ad37d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1668450977,
"narHash": "sha256-cfLhMhnvXn6x1vPm+Jow3RiFAUSCw/l1utktCw5rVA4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "d591857e9d7dd9ddbfba0ea02b43b927c3c0f1fa",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1667395993, "lastModified": 1667395993,
@ -15,13 +160,132 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils-pre-commit": {
"locked": {
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flakeCompat": {
"flake": false,
"locked": {
"lastModified": 1650374568,
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"ghc-utils": {
"flake": false,
"locked": {
"lastModified": 1662774800,
"narHash": "sha256-1Rd2eohGUw/s1tfvkepeYpg8kCEXiIot0RijapUjAkE=",
"ref": "refs/heads/master",
"rev": "bb3a2d3dc52ff0253fb9c2812bd7aa2da03e0fea",
"revCount": 1072,
"type": "git",
"url": "https://gitlab.haskell.org/bgamari/ghc-utils"
},
"original": {
"type": "git",
"url": "https://gitlab.haskell.org/bgamari/ghc-utils"
}
},
"gomod2nix": {
"flake": false,
"locked": {
"lastModified": 1627572165,
"narHash": "sha256-MFpwnkvQpauj799b4QTBJQFEddbD02+Ln5k92QyHOSk=",
"owner": "tweag",
"repo": "gomod2nix",
"rev": "67f22dd738d092c6ba88e420350ada0ed4992ae8",
"type": "github"
},
"original": {
"owner": "tweag",
"repo": "gomod2nix",
"type": "github"
}
},
"mach-nix": {
"flake": false,
"locked": {
"lastModified": 1634711045,
"narHash": "sha256-m5A2Ty88NChLyFhXucECj6+AuiMZPHXNbw+9Kcs7F6Y=",
"owner": "DavHau",
"repo": "mach-nix",
"rev": "4433f74a97b94b596fa6cd9b9c0402104aceef5d",
"type": "github"
},
"original": {
"id": "mach-nix",
"type": "indirect"
}
},
"mk-node-package": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
],
"npmlock2nix": "npmlock2nix",
"pnpm2nix": "pnpm2nix"
},
"locked": {
"lastModified": 1633790997,
"narHash": "sha256-1mk4EwNkWtTNpeRivZmJTzB+92g07maeFRVUMnnRh1U=",
"owner": "winston0410",
"repo": "mkNodePackage",
"rev": "a7eca5e027c8b260dca4ece7d8dd187f92420611",
"type": "github"
},
"original": {
"owner": "winston0410",
"repo": "mkNodePackage",
"type": "github"
}
},
"nix-pypi-fetcher": {
"flake": false,
"locked": {
"lastModified": 1669065297,
"narHash": "sha256-UStjXjNIuIm7SzMOWvuYWIHBkPUKQ8Id63BMJjnIDoA=",
"owner": "DavHau",
"repo": "nix-pypi-fetcher",
"rev": "a9885ac6a091576b5195d547ac743d45a2a615ac",
"type": "github"
},
"original": {
"owner": "DavHau",
"repo": "nix-pypi-fetcher",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1669140675, "lastModified": 1669542132,
"narHash": "sha256-npzfyfLECsJWgzK/M4gWhykP2DNAJTYjgY2BWkz/oEQ=", "narHash": "sha256-DRlg++NJAwPh8io3ExBJdNW7Djs3plVI5jgYQ+iXAZQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2788904d26dda6cfa1921c5abb7a2466ffe3cb8c", "rev": "a115bb9bd56831941be3776c8a94005867f316a7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -31,11 +295,124 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1665349835,
"narHash": "sha256-UK4urM3iN80UXQ7EaOappDzcisYIuEURFRoGQ/yPkug=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "34c5293a71ffdb2fe054eb5288adc1882c1eb0b1",
"type": "github"
},
"original": {
"dir": "lib",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"npmlock2nix": {
"flake": false,
"locked": {
"lastModified": 1633729941,
"narHash": "sha256-v2YPcEWI1Wz8ErivorubgLcDT06H6YzFT7uhp1ymqnE=",
"owner": "winston0410",
"repo": "npmlock2nix",
"rev": "6ade47a330b6919defb45c0eb984a64234aa8468",
"type": "github"
},
"original": {
"owner": "winston0410",
"ref": "issue113",
"repo": "npmlock2nix",
"type": "github"
}
},
"pnpm2nix": {
"flake": false,
"locked": {
"lastModified": 1594396611,
"narHash": "sha256-UXOUQ+2A89/zaxYhTHiRrRBU5exbUWrg+FoJYMcNwuI=",
"owner": "nix-community",
"repo": "pnpm2nix",
"rev": "f67be0925a91b92f54d99dbdead7a06920b979ac",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "pnpm2nix",
"type": "github"
}
},
"poetry2nix": {
"flake": false,
"locked": {
"lastModified": 1666918719,
"narHash": "sha256-BkK42fjAku+2WgCOv2/1NrPa754eQPV7gPBmoKQBWlc=",
"owner": "nix-community",
"repo": "poetry2nix",
"rev": "289efb187123656a116b915206e66852f038720e",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "1.36.0",
"repo": "poetry2nix",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-utils": [
"dream2nix",
"flake-utils-pre-commit"
],
"nixpkgs": [
"dream2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1646153636,
"narHash": "sha256-AlWHMzK+xJ1mG267FdT8dCq/HvLCA6jwmx2ZUy5O8tY=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "b6bc0b21e1617e2b07d8205e7fae7224036dfa4b",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"dream2nix": "dream2nix",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"mk-node-package": "mk-node-package",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1657557289,
"narHash": "sha256-PRW+nUwuqNTRAEa83SfX+7g+g8nQ+2MMbasQ9nt6+UM=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "caf23f29144b371035b864a1017dbc32573ad56d",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

189
flake.nix
View file

@ -2,19 +2,42 @@
description = "Pterodactyl Panel"; description = "Pterodactyl Panel";
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; dream2nix = {
flake-utils.url = "github:numtide/flake-utils"; url = "github:nix-community/dream2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils = {
url = "github:numtide/flake-utils";
};
mk-node-package = {
url = "github:winston0410/mkNodePackage";
inputs = {
flake-utils.follows = "flake-utils";
nixpkgs.follows = "nixpkgs";
};
};
nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
}; };
outputs = { outputs = {
self, self,
nixpkgs, dream2nix,
flake-utils, flake-utils,
mk-node-package,
nixpkgs,
... ...
}: }:
flake-utils.lib.eachDefaultSystem ( flake-utils.lib.eachDefaultSystem (
system: let system: let
version = "latest";
pkgs = import nixpkgs {inherit system;}; pkgs = import nixpkgs {inherit system;};
mkNodePackage = mk-node-package.lib."${system}".mkNodePackage;
php81WithExtensions = with pkgs; (php81.buildEnv { php81WithExtensions = with pkgs; (php81.buildEnv {
extensions = { extensions = {
@ -30,6 +53,7 @@
xdebug.mode=debug xdebug.mode=debug
''; '';
}); });
composer = with pkgs; (php81Packages.composer.override {php = php81WithExtensions;});
caCertificates = pkgs.runCommand "ca-certificates" {} '' caCertificates = pkgs.runCommand "ca-certificates" {} ''
mkdir -p $out/etc/ssl/certs $out/etc/pki/tls/certs mkdir -p $out/etc/ssl/certs $out/etc/pki/tls/certs
@ -98,34 +122,147 @@
ln -s ${caddyfile} $out/etc/caddy/Caddyfile ln -s ${caddyfile} $out/etc/caddy/Caddyfile
ln -s ${phpfpmConf} $out/etc/php-fpm.conf ln -s ${phpfpmConf} $out/etc/php-fpm.conf
''; '';
src = with pkgs.lib;
cleanSource (cleanSourceWith {
filter = name: type: let
baseName = baseNameOf (toString name);
in
!(builtins.elem baseName [
".direnv"
".github"
"bootstrap/cache"
"node_modules"
"public/build"
"public/hot"
"storage"
"vendor"
".editorconfig"
".env"
".env.testing"
".envrc"
".gitignore"
".php-cs-fixer.cache"
".phpunit.result.cache"
"BUILDING.md"
"CODE_OF_CONDUCT.md"
"CONTRIBUTING.md"
"docker-compose.development.yaml"
"docker-compose.example.yaml"
"docker-compose.yaml"
"flake.lock"
"flake.nix"
"shell.nix"
]);
src = ./.;
});
app =
(dream2nix.lib.makeFlakeOutputs {
config.projectRoot = src;
source = src;
settings = [
{
translator = "composer-lock";
subsystemInfo.noDev = true;
}
];
systems = [system];
})
.packages
."${system}"
."pterodactyl/panel";
ui = mkNodePackage {
inherit src version;
pname = "pterodactyl";
buildInputs = [];
buildPhase = ''
yarn run build
'';
installPhase = ''
mkdir -p $out
cp -r public/build $out
'';
};
panel = pkgs.stdenv.mkDerivation {
inherit src version;
pname = "pterodactyl";
buildInputs = [app ui];
installPhase = ''
cp -r ${app}/lib/vendor/pterodactyl/panel $out
chmod 755 $out
chmod 755 $out/public
mkdir -p $out/public/build
cp -r ${ui}/build/* $out/public/build
rm $out/composer.json.orig
'';
};
in { in {
devShell = import ./shell.nix {inherit pkgs php81WithExtensions;}; defaultPackage = panel;
devShell = import ./shell.nix {inherit composer php81WithExtensions pkgs;};
packages = { packages = {
development = pkgs.dockerTools.buildImage { inherit panel;
name = "pterodactyl/development";
tag = "panel";
copyToRoot = pkgs.buildEnv { development = with pkgs;
name = "image-root"; dockerTools.buildImage {
paths = with pkgs; [ name = "pterodactyl/development";
dockerTools.fakeNss tag = "panel";
caCertificates
caddy copyToRoot = pkgs.buildEnv {
configs name = "image-root";
coreutils paths = [
mysql80 dockerTools.fakeNss
nodejs-18_x caCertificates
nodePackages.npm caddy
nodePackages.pnpm composer
nodePackages.yarn configs
php81WithExtensions coreutils
(php81Packages.composer.override {php = php81WithExtensions;}) mysql80
postgresql_14 nodejs-18_x
]; nodePackages.npm
pathsToLink = ["/bin" "/etc"]; nodePackages.pnpm
nodePackages.yarn
php81WithExtensions
postgresql_14
];
pathsToLink = ["/bin" "/etc"];
};
};
oci = with pkgs;
dockerTools.buildImage {
name = "pterodactyl/panel";
tag = version;
copyToRoot = buildEnv {
name = "image-root";
paths = [
dockerTools.fakeNss
caCertificates
caddy
configs
php81WithExtensions
panel
];
pathsToLink = ["/bin" "/etc"];
};
config = {
Cmd = [];
};
}; };
};
}; };
} }
); );

View file

@ -1,14 +1,15 @@
{ {
composer ? null,
php81WithExtensions ? null,
pkgs ? import <nixpkgs> {}, pkgs ? import <nixpkgs> {},
php81WithExtensions,
}: }:
with pkgs; with pkgs;
mkShell rec { mkShell rec {
buildInputs = [ buildInputs = [
alejandra alejandra
composer
nodejs-18_x nodejs-18_x
nodePackages.yarn nodePackages.yarn
php81WithExtensions php81WithExtensions
(php81Packages.composer.override {php = php81WithExtensions;})
]; ];
} }