diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..020a4aa --- /dev/null +++ b/flake.nix @@ -0,0 +1,56 @@ +{ + description = "KeSp split keyboard configurator — Slint UI"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + + nativeBuildInputs = with pkgs; [ + pkg-config + cmake + ]; + + buildInputs = with pkgs; [ + fontconfig + libxkbcommon + wayland + udev + ] ++ pkgs.lib.optionals pkgs.stdenv.isLinux [ + xorg.libX11 + xorg.libXcursor + xorg.libXrandr + xorg.libXi + ]; + in + { + packages.default = pkgs.rustPlatform.buildRustPackage { + pname = "kesp-controller"; + version = "1.0.0"; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + + inherit nativeBuildInputs buildInputs; + + # Slint needs to find fontconfig at runtime + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; + + meta = with pkgs.lib; { + description = "Cross-platform configurator for the KeSp split ergonomic keyboard"; + license = licenses.gpl3Only; + mainProgram = "KeSp_controller"; + }; + }; + + devShells.default = pkgs.mkShell { + inherit nativeBuildInputs buildInputs; + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; + packages = with pkgs; [ cargo rustc rust-analyzer clippy ]; + }; + }); +}