Nix package manager isn’t restricted to Nix language. Guix uses Nix under the hood but all the expressions are in Guile.
Nix has an intermediate, compiled expressions called .drv
files. It is no longer in Nix language, it is Python language!
In [1]: class Derive:
...: def __init__(self, *args): self.derivation = args
...:
In [2]: from pprint import pprint
In [3]: def readDrv(drv): return eval(open(drv).read()).derivation
In [4]: pprint(readDrv('/nix/store/gmxsxf5gbipxwhl8s35jzqz2xgvkfpz2-hello-2.10.drv'))
([('out', '/nix/store/234v87nsmj70i1592h713i6xidfkqyjw-hello-2.10', '', '')],
[('/nix/store/1p7mib5jjp6kqij706y2j6pjmadhx5ly-stdenv-linux.drv', ['out']),
('/nix/store/b3x96w1hy6sxlxk1a1i5fd24b4z6xvv0-hello-2.10.tar.gz.drv',
['out']),
('/nix/store/ij7yr26mjpnpj78min707x88cbg35sl8-bash-4.4-p23.drv', ['out'])],
['/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh'],
'x86_64-linux',
'/nix/store/xb062l4b76zyhq6grqf4iyfdikkpg8fl-bash-4.4-p23/bin/bash',
['-e', '/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh'],
[('buildInputs', ''),
('builder',
'/nix/store/xb062l4b76zyhq6grqf4iyfdikkpg8fl-bash-4.4-p23/bin/bash'),
('configureFlags', ''),
('depsBuildBuild', ''),
('depsBuildBuildPropagated', ''),
('depsBuildTarget', ''),
('depsBuildTargetPropagated', ''),
('depsHostHost', ''),
('depsHostHostPropagated', ''),
('depsTargetTarget', ''),
('depsTargetTargetPropagated', ''),
('doCheck', '1'),
('doInstallCheck', ''),
('name', 'hello-2.10'),
('nativeBuildInputs', ''),
('out', '/nix/store/234v87nsmj70i1592h713i6xidfkqyjw-hello-2.10'),
('outputs', 'out'),
('patches', ''),
('pname', 'hello'),
('propagatedBuildInputs', ''),
('propagatedNativeBuildInputs', ''),
('src', '/nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz'),
('stdenv', '/nix/store/cis5rcj9qvm94wq7ch500jnszshc3wx8-stdenv-linux'),
('strictDeps', ''),
('system', 'x86_64-linux'),
('version', '2.10')])