111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  description = "zoo.dev modeling-app";
 | 
						|
 | 
						|
  inputs = {
 | 
						|
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
 | 
						|
    rust-overlay.url = "github:oxalica/rust-overlay";
 | 
						|
    naersk.url = "github:nix-community/naersk";
 | 
						|
  };
 | 
						|
 | 
						|
  outputs = {
 | 
						|
    self,
 | 
						|
    nixpkgs,
 | 
						|
    rust-overlay,
 | 
						|
    naersk,
 | 
						|
  }: let
 | 
						|
    overlays = [
 | 
						|
      (import rust-overlay)
 | 
						|
      (self: super: {
 | 
						|
        rustToolchain = super.rust-bin.stable.latest.default.override {
 | 
						|
          targets = ["wasm32-unknown-unknown"];
 | 
						|
          extensions = ["rustfmt" "llvm-tools-preview" "rust-src"];
 | 
						|
        };
 | 
						|
 | 
						|
        # stand-alone nightly formatter so we get the fancy unstable flags
 | 
						|
        nightlyRustfmt = super.rust-bin.selectLatestNightlyWith (toolchain:
 | 
						|
          toolchain.default.override {
 | 
						|
            extensions = ["rustfmt"]; # just the formatter
 | 
						|
          });
 | 
						|
      })
 | 
						|
    ];
 | 
						|
 | 
						|
    allSystems = [
 | 
						|
      "x86_64-linux"
 | 
						|
      "aarch64-linux"
 | 
						|
      "x86_64-darwin"
 | 
						|
      "aarch64-darwin"
 | 
						|
    ];
 | 
						|
 | 
						|
    forAllSystems = f:
 | 
						|
      nixpkgs.lib.genAttrs allSystems (system:
 | 
						|
        f {
 | 
						|
          pkgs = import nixpkgs {
 | 
						|
            inherit overlays system;
 | 
						|
          };
 | 
						|
          system = system;
 | 
						|
        });
 | 
						|
  in {
 | 
						|
    devShells = forAllSystems ({pkgs, ...}: {
 | 
						|
      default = pkgs.mkShell {
 | 
						|
        packages =
 | 
						|
          (with pkgs; [
 | 
						|
            rustToolchain
 | 
						|
            nightlyRustfmt
 | 
						|
            cargo-criterion
 | 
						|
            cargo-nextest
 | 
						|
            cargo-sort
 | 
						|
            just
 | 
						|
            postgresql.lib
 | 
						|
            openssl
 | 
						|
            pkg-config
 | 
						|
            nodejs_22
 | 
						|
            electron
 | 
						|
            playwright-driver.browsers
 | 
						|
            chromedriver
 | 
						|
            wasm-pack
 | 
						|
            python3Full
 | 
						|
          ])
 | 
						|
          ++ pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs; [
 | 
						|
            libiconv
 | 
						|
            darwin.apple_sdk.frameworks.Security
 | 
						|
          ]);
 | 
						|
 | 
						|
        TARGET_CC = "${pkgs.stdenv.cc}/bin/${pkgs.stdenv.cc.targetPrefix}cc";
 | 
						|
        LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
 | 
						|
        ELECTRON_OVERRIDE_DIST_PATH =
 | 
						|
          if pkgs.stdenv.isDarwin
 | 
						|
          then "${pkgs.electron}/Applications/Electron.app/Contents/MacOS/"
 | 
						|
          else "${pkgs.electron}/bin";
 | 
						|
        PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = true;
 | 
						|
        PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH = "${pkgs.playwright-driver.browsers}/chromium-1091/chrome-linux/chrome";
 | 
						|
        PLAYWRIGHT_BROWSERS_PATH = "${pkgs.playwright-driver.browsers}";
 | 
						|
        NODE_ENV = "development";
 | 
						|
        RUSTFMT = "${pkgs.nightlyRustfmt}/bin/rustfmt";
 | 
						|
        CHROMEDRIVER = "${pkgs.chromedriver}/bin/chromedriver";
 | 
						|
      };
 | 
						|
    });
 | 
						|
 | 
						|
    packages = forAllSystems ({
 | 
						|
      pkgs,
 | 
						|
      system,
 | 
						|
    }: let
 | 
						|
      naersk-lib = pkgs.callPackage naersk {
 | 
						|
        cargo = pkgs.rustToolchain;
 | 
						|
        rustc = pkgs.rustToolchain;
 | 
						|
      };
 | 
						|
    in {
 | 
						|
      kcl-language-server = naersk-lib.buildPackage {
 | 
						|
        pname = "kcl-language-server";
 | 
						|
        version = "0.1.0";
 | 
						|
        release = true;
 | 
						|
 | 
						|
        src = ./rust;
 | 
						|
 | 
						|
        cargoBuildOptions = opt: opt ++ ["-p" "kcl-language-server"];
 | 
						|
        buildInputs = [pkgs.openssl pkgs.pkg-config];
 | 
						|
      };
 | 
						|
      default = self.packages.${system}.kcl-language-server;
 | 
						|
    });
 | 
						|
  };
 | 
						|
}
 |