141 lines
4.0 KiB
Nix
Executable File
141 lines
4.0 KiB
Nix
Executable File
{
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
nixgl.url = "github:guibou/nixGL";
|
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, nixgl, rust-overlay, ... }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
overlays = [ nixgl.overlay (import rust-overlay) ];
|
|
pkgs = import nixpkgs {
|
|
inherit system overlays;
|
|
};
|
|
local-rust = pkgs.rust-bin.stable.latest.default.override {
|
|
extensions = [ "rust-analysis" ];
|
|
};
|
|
tree-sitter-odin = pkgs.stdenv.mkDerivation {
|
|
pname = "tree-sitter-odin";
|
|
version = "1.3.0";
|
|
|
|
src = builtins.fetchGit {
|
|
url = "https://github.com/tree-sitter-grammars/tree-sitter-odin.git";
|
|
rev = "e8adc739b78409a99f8c31313f0bb54cc538cf73";
|
|
};
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/lib
|
|
cp libtree-sitter-odin.a $out/lib
|
|
'';
|
|
};
|
|
tree-sitter-json = pkgs.stdenv.mkDerivation {
|
|
pname = "tree-sitter-json";
|
|
version = "0.24.8";
|
|
|
|
src = builtins.fetchGit {
|
|
url = "https://github.com/tree-sitter/tree-sitter-json.git";
|
|
rev = "ee35a6ebefcef0c5c416c0d1ccec7370cfca5a24";
|
|
};
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/lib
|
|
cp libtree-sitter-json.a $out/lib
|
|
'';
|
|
};
|
|
tree-sitter-rust = pkgs.stdenv.mkDerivation {
|
|
pname = "tree-sitter-rust";
|
|
version = "0.24.0";
|
|
|
|
src = builtins.fetchGit {
|
|
url = "https://github.com/tree-sitter/tree-sitter-rust.git";
|
|
rev = "18b0515fca567f5a10aee9978c6d2640e878671a";
|
|
};
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/lib
|
|
cp libtree-sitter-rust.a $out/lib
|
|
'';
|
|
};
|
|
grep-lib = pkgs.rustPlatform.buildRustPackage rec {
|
|
name = "grep-lib";
|
|
src = ./src/pkg/grep_lib;
|
|
nativeBuildInputs = [ local-rust ];
|
|
|
|
cargoLock = {
|
|
lockFile = ./src/pkg/grep_lib/Cargo.lock;
|
|
};
|
|
|
|
# lol, why does `buildRustPackage` not work without this?
|
|
# postPatch = ''
|
|
# ln -sf ${./src/pkg/grep_lib/Cargo.lock} Cargo.lock
|
|
# '';
|
|
};
|
|
tree-sitter = pkgs.stdenv.mkDerivation {
|
|
name = "tree-sitter";
|
|
src = ./third_party/tree-sitter;
|
|
nativeBuildInputs = [ pkgs.clang ];
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/lib
|
|
cp libtree-sitter.a $out/lib
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
devShell = pkgs.mkShell {
|
|
buildInputs = with pkgs; (if pkgs.system == "aarch64-darwin" || pkgs.system == "x86_64-darwin" then [
|
|
git
|
|
local-rust
|
|
odin
|
|
ols
|
|
SDL2
|
|
SDL2_ttf
|
|
] else if pkgs.system == "x86_64-linux" then [
|
|
pkg-config
|
|
binutils
|
|
odin
|
|
ols
|
|
local-rust
|
|
libGL
|
|
xorg.libX11
|
|
xorg.libXi
|
|
xorg.xinput
|
|
xorg.libXcursor
|
|
xorg.libXrandr
|
|
xorg.libXinerama
|
|
pkgs.nixgl.nixGLIntel
|
|
] else throw "unsupported system" );
|
|
};
|
|
|
|
packages = {
|
|
editor = pkgs.stdenv.mkDerivation rec {
|
|
pname = "editor";
|
|
version = "0.1";
|
|
src = ./.;
|
|
|
|
buildInputs = with pkgs; [
|
|
tree-sitter-odin
|
|
tree-sitter-json
|
|
tree-sitter-rust
|
|
tree-sitter
|
|
grep-lib
|
|
local-rust
|
|
binutils
|
|
clang
|
|
odin
|
|
ols
|
|
SDL2
|
|
SDL2_ttf
|
|
];
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp bin/editor $out/bin/editor
|
|
'';
|
|
};
|
|
};
|
|
}
|
|
);
|
|
}
|