111 lines
3.5 KiB
Nix
111 lines
3.5 KiB
Nix
# This is a helper file for people using NixOS as their operating system.
|
|
# If you don't know what this file does, you can safely ignore it.
|
|
# This file defines the reproducible development environment for the project.
|
|
#
|
|
# Development Environment:
|
|
# - Provides all necessary tools for Rust/Wasm development
|
|
# - Includes dependencies for desktop app development
|
|
# - Sets up profiling and debugging tools
|
|
# - Configures mold as the default linker for faster builds
|
|
#
|
|
# Usage:
|
|
# - Development shell: `nix develop .nix` from the project root
|
|
# - Run in dev shell with direnv: add `use flake` to .envrc
|
|
{
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
crane.url = "github:ipetkov/crane";
|
|
|
|
# This is used to provide a identical development shell at `shell.nix` for users that do not use flakes
|
|
flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";
|
|
};
|
|
|
|
outputs =
|
|
inputs:
|
|
(
|
|
let
|
|
systems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
];
|
|
forAllSystems = f: inputs.nixpkgs.lib.genAttrs systems (system: f system);
|
|
args =
|
|
system:
|
|
(
|
|
let
|
|
lib = inputs.nixpkgs.lib // {
|
|
call = p: import p args;
|
|
};
|
|
|
|
pkgs = import inputs.nixpkgs {
|
|
inherit system;
|
|
overlays = [ (import inputs.rust-overlay) ];
|
|
};
|
|
|
|
info = {
|
|
pname = "graphite";
|
|
version = "unstable";
|
|
src = inputs.nixpkgs.lib.cleanSourceWith {
|
|
src = ./..;
|
|
filter = path: type: !(type == "directory" && builtins.baseNameOf path == ".nix");
|
|
};
|
|
cargoVendored = deps.crane.lib.vendorCargoDeps { inherit (info) src; };
|
|
};
|
|
|
|
deps = {
|
|
crane = lib.call ./deps/crane.nix;
|
|
cef = lib.call ./deps/cef.nix;
|
|
rustGPU = lib.call ./deps/rust-gpu.nix;
|
|
};
|
|
|
|
args = {
|
|
inherit system;
|
|
inherit (inputs) self;
|
|
inherit inputs;
|
|
inherit pkgs;
|
|
inherit lib;
|
|
inherit info;
|
|
inherit deps;
|
|
}
|
|
// inputs;
|
|
in
|
|
args
|
|
);
|
|
withArgs = f: forAllSystems (system: f (args system));
|
|
in
|
|
{
|
|
packages = withArgs (
|
|
{ lib, ... }:
|
|
rec {
|
|
default = graphite;
|
|
graphite = (lib.call ./pkgs/graphite.nix) { };
|
|
graphite-dev = (lib.call ./pkgs/graphite.nix) { dev = true; };
|
|
graphite-raster-nodes-shaders = lib.call ./pkgs/graphite-raster-nodes-shaders.nix;
|
|
graphite-branding = lib.call ./pkgs/graphite-branding.nix;
|
|
graphite-bundle = lib.call ./pkgs/graphite-bundle.nix;
|
|
graphite-flatpak-manifest = lib.call ./pkgs/graphite-flatpak-manifest.nix;
|
|
|
|
# TODO: graphene-cli = lib.call ./pkgs/graphene-cli.nix;
|
|
|
|
tools = {
|
|
third-party-licenses = lib.call ./pkgs/tools/third-party-licenses.nix;
|
|
};
|
|
}
|
|
);
|
|
|
|
devShells = withArgs (
|
|
{ lib, ... }:
|
|
{
|
|
default = lib.call ./dev.nix;
|
|
}
|
|
);
|
|
|
|
formatter = withArgs ({ pkgs, ... }: pkgs.nixfmt-tree);
|
|
}
|
|
);
|
|
}
|