Files
craft-launcher/flake.nix
T
Gerknis 40f22a612a Fix flake.nix (#526)
* Add experimental flake.nix for NixOS/Linux development

This adds an experimental flake-based development environment and package entry for ArtCraft Launcher.

What this adds:
- `flake.nix` at the repository root
- Rust toolchain via `rust-overlay`
- Required native Linux libraries for the Rust workspace
- A dev shell via `nix develop`
- A package/app target via `nix run` / `nix build`

Why:
ArtCraft Launcher is a Rust workspace and currently has no Nix flake support. This makes local development and installation much easier for NixOS/Linux users.

Notes:
- This is intentionally minimal and experimental.
- It targets the development environment and local package use.
- Additional refinements may be needed for specific Wayland/X11 setups.

* Fix flake metadata to match ArtCraft Launcher and remove GTK dependency

* add flake.lock

* Update flake.nix: replace deprecated xorg packages with their new names

* added runtimeDependencies and fixed nativeBuildInputs: removed ninja and cmake to resolve conflicts with Cargo on app build, added autoPatchelfHook to auto hook runtimeDependencies into the RPATH of bin; added result in .gitignore to prevent build results from project

* Add X11 support libraries

Added X11 support libraries to the flake configuration.

* Nix: build the flake in CI and document nixGL for other distros

The new Nix workflow builds the flake and checks that every library
winit and wgpu dlopen() at runtime is on the binary's RUNPATH, so a
missing runtimeDependencies entry fails CI instead of failing on
`nix run`. It only runs when the flake, Cargo manifests or lockfile
change.

The README gains a short Nix section: the dev shell, `nix run`, and
nixGL for non-NixOS distros, where a Nix-built program can't load the
host's GPU drivers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Drop the local runtime-libs job; it moves to the shared Nix workflow

Per review: the build-and-RUNPATH check belongs in
storytold/craft-common-actions (opt-in check-runtime-libs), so
.github/workflows/nix.yml goes back to main's shared eval job.

---------

Co-authored-by: SaB131X <sea1024wm@gmail.com>
Co-authored-by: skylar taylor-barrick <hi@skylar.cc>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 08:41:02 -04:00

95 lines
2.3 KiB
Nix

{
description = "Experimental Nix flake for ArtCraft Launcher";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs = { self, nixpkgs, flake-utils, rust-overlay }:
flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
};
rust = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rustfmt" "clippy" "rust-src" ];
};
version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).workspace.package.version;
commonDeps = with pkgs; [
pkg-config
openssl
libxkbcommon
libx11
libxcursor
libxrandr
libxi
libxcb
libGL
vulkan-loader
mesa
wayland
wayland-protocols
fontconfig
freetype
alsa-lib
zlib
];
in
{
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
rust
cmake
ninja
libclang
];
buildInputs = commonDeps;
shellHook = ''
export LIBCLANG_PATH="${pkgs.libclang.lib}/lib"
export PKG_CONFIG_PATH="${pkgs.openssl.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"
'';
};
packages.default = pkgs.rustPlatform.buildRustPackage {
pname = "artcraft-launcher";
version = version;
src = ./.;
cargoLock.lockFile = ./Cargo.lock;
nativeBuildInputs = with pkgs; [
pkg-config
libclang
autoPatchelfHook
];
buildInputs = commonDeps;
runtimeDependencies = with pkgs; [
wayland
libxkbcommon
libGL
vulkan-loader
#X11 support
libx11
libxcursor
libxrandr
libxi
libxcb
];
doCheck = false;
};
apps.default = {
type = "app";
program = "${self.packages.${system}.default}/bin/artcraft-launcher";
};
});
}