Files

121 lines
2.6 KiB
Nix

{
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
inputs.self.submodules = true;
outputs =
{ nixpkgs, ... }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
mruby = pkgs.stdenv.mkDerivation {
pname = "mruby";
version = "0.0.1";
src = pkgs.lib.cleanSourceWith {
src = ./libs;
name = "mruby-src";
};
patches = [ ./libs/changes.patch ];
nativeBuildInputs = with pkgs; [
ruby
gnumake
gcc
];
buildPhase = ''
(cd mruby && rake)
'';
installPhase = ''
mkdir -p $out
cp -r mruby/build/host/lib $out/
'';
};
kutu = pkgs.stdenv.mkDerivation {
pname = "kutu";
version = "0.1.0";
src = ./.;
nativeBuildInputs = with pkgs; [
dune_3
ocaml
ocamlPackages.findlib
];
buildInputs = with pkgs; [
libxcb
xcbutilwm
ocamlPackages.ctypes
ocamlPackages.ctypes-foreign
mruby
];
buildPhase = ''
export MRUBY_LIB=${mruby}/lib
dune build src/main.exe --release
'';
installPhase = ''
mkdir -p $out/bin
cp _build/default/src/main.exe $out/bin/kutu
'';
};
in
{
packages.${system} = {
default = kutu;
kutu = kutu;
mruby = mruby;
};
apps.${system}.default = {
type = "app";
program = "${pkgs.writeShellScript "kutu-run" ''
set -e
if [ -z "$DISPLAY" ]; then
exec ${pkgs.xinit}/bin/startx \
${kutu}/bin/kutu \
-- \
${pkgs.xorg-server}/bin/X
else
DISPLAY_NUM=:100
${pkgs.xorg-server}/bin/Xephyr \
$DISPLAY_NUM \
-screen 1280x720 \
-ac \
> /tmp/kutu-xephyr.log 2>&1 &
XEPHYR_PID=$!
cleanup() { kill "$XEPHYR_PID" 2>/dev/null || true; }
trap cleanup EXIT INT TERM
sleep 1
DISPLAY=$DISPLAY_NUM ${kutu}/bin/kutu
echo "Returned: $?"
fi
''}";
};
devShells.${system}.default = pkgs.mkShell {
inputsFrom = [ kutu ];
packages = with pkgs; [
ocamlPackages.utop
ocamlPackages.ocaml-lsp
ocamlPackages.ocamlformat
];
shellHook = ''
export CC=clang
export CXX=clang++
export LD=clang
export MRUBY_LIB=${mruby}/lib
'';
};
};
}