1. Go to this page and download the library: Download svanderburg/pndp library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
svanderburg / pndp example snippets
namespace Pkgs;
use PNDP\AST\NixFunInvocation;
use PNDP\AST\NixExpression;
class Stdenv
{
public function mkDerivation(array $args)
{
return new NixFunInvocation(new NixExpression("pkgs.stdenv.mkDerivation"), $args);
}
}
namespace Pkgs;
use PNDP\AST\NixURL;
class Hello
{
public static function composePackage(object $args)
{
return $args->stdenv->mkDerivation(array(
"name" => "hello-2.10",
"src" => $args->fetchurl(array(
"url" => new NixURL("mirror://gnu/hello/hello-2.10.tar.gz"),
"sha256" => "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
)),
"doCheck" => true,
"meta" => array(
"description" => "A program that produces a familiar, friendly greeting",
"homepage" => new NixURL("http://www.gnu.org/software/hello/manual"),
"license" => "GPLv3+"
)
));
}
}
class Pkgs
{
public $stdenv;
public function __construct()
{
$this->stdenv = new Pkgs\Stdenv();
}
public function fetchurl(array $args)
{
return Pkgs\Fetchurl::composePackage($this, $args);
}
public function hello()
{
return Pkgs\Hello::composePackage($this);
}
}
public function __call(string $name, array $arguments)
{
// Compose the classname from the function name
$className = ucfirst($name);
// Compose the name of the method to compose the package
$methodName = 'Pkgs\\'.$className.'::composePackage';
// Prepend $this so that it becomes the first function parameter
array_unshift($arguments, $this);
// Dynamically the invoke the class' composition method with $this as first parameter and the remaining parameters
return call_user_func_array($methodName, $arguments);
}
namespace Pkgs;
use PNDP\AST\NixInlinePHP;
use PNDP\AST\NixURL;
class CreateFileWithMessageTest
{
public static function composePackage(object $args)
{
$buildCommand = <<<EOT
mkdir(getenv("out"));
file_put_contents(getenv("out")."/message.txt", "Hello world written through inline PHP!");
EOT;
return $args->stdenv->mkDerivation(array(
"name" => "createFileWithMessageTest",
"buildCommand" => new NixInlinePHP($buildCommand)
));
}
}
class HelloSourceModel
{
private object $args;
private string $src;
private string $sha256;
public function __construct(object $args)
{
$this->args = $args;
$this->src = "mirror://gnu/hello/hello-2.10.tar.gz";
$this->sha256 = "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i";
}
}
use PNDP\AST\NixASTNode;
use PNDP\AST\NixURL;
class HelloSourceModel extends NixASTNode
{
...
/**
* @see NixASTConvertable::toNixAST()
*/
public function toNixAST()
{
return $this->args->fetchurl(array(
"url" => new NixURL($this->src),
"sha256" => $this->sha256
));
}
}
class HelloModel
{
private object $args;
private string $name;
private HelloSourceModel $source;
private array $meta;
public function __construct(object $args)
{
$this->args = $args;
$this->name = "hello-2.10";
$this->source = new HelloSourceModel($args);
$this->meta = array(
"description" => "A program that produces a familiar, friendly greeting",
"homepage" => "http://www.gnu.org/software/hello/manual",
"license" => "GPLv3+"
);
}
}
use PNDP\AST\NixASTNode;
class HelloModel extends NixASTNode
{
...
/**
* @see NixASTConvertable::toNixAST()
*/
public function toNixAST()
{
return $this->args->stdenv->mkDerivation(array(
"name" => $this->name,
"src" => $this->source,
"doCheck" => true,
"meta" => $this->meta
));
}
}
use PNDP\AST\NixASTConvertable;
use PNDP\AST\NixURL;
class MetaDataWrapper implements NixASTConvertable
{
private array $meta;
public function __construct(array $meta)
{
$this->meta = $meta;
}
public function toNixAST()
{
return array(
"description" => $this->meta["description"],
"homepage" => new NixURL($this->meta["homepage"]),
"license" => $this->meta["license"]
);
}
}