121 lines
2.6 KiB
Nix
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
|
|
'';
|
|
};
|
|
};
|
|
}
|