basic functionality on Wayland and X11

This commit is contained in:
mtgmonkey
2025-12-11 18:15:32 +01:00
parent ab69702910
commit 8a16c6695e
16 changed files with 14299 additions and 190 deletions

152
flake.nix
View File

@@ -1,97 +1,79 @@
{
inputs = {
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
self.submodules = true;
};
outputs = {nixpkgs, ...}: let
outputs = {
nixpkgs,
self,
...
}: let
package = {
mkDerivation,
base,
gl,
lib,
libGL,
libX11,
libxkbcommon,
wayland,
xcursor,
xi,
xrandr,
}:
mkDerivation {
pname = "hs-rgfw";
version = "0.1.0.0";
src = ./.;
preBuild = ''
${lib.getExe pkgs.wayland-scanner} public-code ${pkgs.wayland-protocols}/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml ./lib/xdg-shell.c
${lib.getExe pkgs.wayland-scanner} public-code ${pkgs.wayland-protocols}/share/wayland-protocols/staging/xdg-toplevel-icon/xdg-toplevel-icon-v1.xml ./lib/xdg-toplevel-icon-v1.c
${lib.getExe pkgs.wayland-scanner} public-code ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml ./lib/xdg-decoration-unstable-v1.c
${lib.getExe pkgs.wayland-scanner} public-code ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/relative-pointer/relative-pointer-unstable-v1.xml ./lib/relative-pointer-unstable-v1.c
${lib.getExe pkgs.wayland-scanner} public-code ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml ./lib/pointer-constraints-unstable-v1.c
${lib.getExe pkgs.wayland-scanner} public-code ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/xdg-output/xdg-output-unstable-v1.xml ./lib/xdg-output-unstable-v1.c
${lib.getExe pkgs.wayland-scanner} client-header ${pkgs.wayland-protocols}/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml ./lib/xdg-shell.h
${lib.getExe pkgs.wayland-scanner} client-header ${pkgs.wayland-protocols}/share/wayland-protocols/staging/xdg-toplevel-icon/xdg-toplevel-icon-v1.xml ./lib/xdg-toplevel-icon-v1.h
${lib.getExe pkgs.wayland-scanner} client-header ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml ./lib/xdg-decoration-unstable-v1.h
${lib.getExe pkgs.wayland-scanner} client-header ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/relative-pointer/relative-pointer-unstable-v1.xml ./lib/relative-pointer-unstable-v1.h
${lib.getExe pkgs.wayland-scanner} client-header ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml ./lib/pointer-constraints-unstable-v1.h
${lib.getExe pkgs.wayland-scanner} client-header ${pkgs.wayland-protocols}/share/wayland-protocols/unstable/xdg-output/xdg-output-unstable-v1.xml ./lib/xdg-output-unstable-v1.h
'';
libraryHaskellDepends = [
base
];
libraryPkgconfigDepends = [
gl
libGL
libX11
libxkbcommon
wayland
xcursor
xi
xrandr
];
postInstall = ''
'';
homepage = "https://git.mtgmonkey.net/Andromeda/hs-rgfw";
license = lib.licenses.bsd3;
platforms = ["x86_64-linux"];
};
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
debugGhcOptions = pkgs.lib.concatStringsSep " " (debugGhcFlags ++ commonGhcFlags);
debugGhcFlags =
[
"-O0"
"-Wall"
"-Widentities"
"-Wincomplete-record-updates"
"-Wincomplete-uni-patterns"
# "-Wmissing-export-lists"
"-Wmissing-home-modules"
"-Wpartial-fields"
"-Wredundant-constraints"
]
++ commonGhcFlags;
haddockOptions = pkgs.lib.concatStringsSep " " haddockFlags;
haddockFlags = [
"--html"
"--odir docs"
"--optghc=-i./src"
"src/Game.hs"
];
releaseGhcOptions = pkgs.lib.concatStringsSep " " (releaseGhcFlags ++ commonGhcFlags);
releaseGhcFlags =
[
"-O2"
"-threaded"
"-rtsopts"
"-with-rtsopts=-N"
"-main-is Main"
]
++ commonGhcFlags;
noHaddockOptions = "";
commonGhcFlags = [
"-i./src"
"-threaded"
"-rtsopts"
"-with-rtsopts=-N"
"-main-is Main"
];
ghcPackages = p: [
];
buildDeps = [
pkgs.egl-wayland
pkgs.libGL
pkgs.libxkbcommon
pkgs.wayland
pkgs.xorg.libX11
pkgs.xorg.libXcursor
pkgs.xorg.libXi
pkgs.xorg.libXrandr
];
runtimeDeps = [
pkgs.makeWrapper
pkgs.pkg-config
pkgs.wayland-protocols
pkgs.wayland-scanner
];
in {
packages.${system} = {
debug = pkgs.callPackage ./package.nix {
ghcOptions = debugGhcOptions;
haddockOptions = noHaddockOptions;
inherit ghcPackages;
inherit buildDeps;
inherit runtimeDeps;
default = pkgs.haskellPackages.callPackage package {
xcursor = pkgs.xorg.libXcursor;
xi = pkgs.xorg.libXi;
};
release = pkgs.callPackage ./package.nix {
ghcOptions = releaseGhcOptions;
haddockOptions = noHaddockOptions;
inherit ghcPackages;
inherit buildDeps;
inherit runtimeDeps;
};
docs = pkgs.callPackage ./package.nix {
ghcOptions = "--version";
inherit haddockOptions;
inherit ghcPackages;
inherit buildDeps;
inherit runtimeDeps;
};
default = pkgs.callPackage ./package.nix {
ghcOptions = releaseGhcOptions;
inherit haddockOptions;
inherit ghcPackages;
inherit buildDeps;
inherit runtimeDeps;
};
devShells.${system} = {
default = pkgs.mkShell {
packages = [
pkgs.cabal-install
];
inputsFrom = [
self.packages.${system}.default
];
};
};
};