redvault-ai/flake.nix

201 lines
6.5 KiB
Nix
Raw Normal View History

2024-07-21 02:42:48 +02:00
{
description = "A Nix-flake-based Rust development environment";
nixConfig = {
2024-09-09 14:56:13 +02:00
extra-substituters = [
# "https://nixcache.vlt81.de"
2024-09-09 14:56:13 +02:00
"https://llama-cpp.cachix.org"
"https://cuda-maintainers.cachix.org"
];
extra-trusted-public-keys = [
# "nixcache.vlt81.de:nw0FfUpePtL6P3IMNT9X6oln0Wg9REZINtkkI9SisqQ="
2024-09-09 14:56:13 +02:00
"llama-cpp.cachix.org-1:H75X+w83wUKTIPSO1KWy9ADUrzThyGs8P5tmAbkWhQc="
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
];
2024-07-21 02:42:48 +02:00
};
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small";
2024-07-21 02:42:48 +02:00
rust-overlay.url = "github:oxalica/rust-overlay";
flake-utils.url = "github:numtide/flake-utils";
2024-09-09 14:56:13 +02:00
flake-parts.url = "github:hercules-ci/flake-parts";
2024-07-21 02:42:48 +02:00
devshell.url = "github:numtide/devshell";
npmlock2nix = {
url = "github:nix-community/npmlock2nix";
flake = false;
};
2024-09-09 14:56:13 +02:00
llama-cpp = {
url = "github:ggerganov/llama.cpp/b4418";
2024-09-09 14:56:13 +02:00
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
2024-07-21 02:42:48 +02:00
};
outputs =
{ self
, nixpkgs
, rust-overlay
, flake-utils
, devshell
, npmlock2nix
2024-09-09 14:56:13 +02:00
, llama-cpp
, ...
2024-07-21 02:42:48 +02:00
}:
flake-utils.lib.eachDefaultSystem
(system:
let
overlays = [
2024-09-09 14:56:13 +02:00
llama-cpp.overlays.default
2024-07-21 02:42:48 +02:00
rust-overlay.overlays.default
devshell.overlays.default
(final: prev: {
customRustToolchain = prev.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
})
(final: prev: {
nodejs-16_x = prev.nodePackages.nodejs; # needed for npmlock2nix
})
2024-07-21 02:42:48 +02:00
(final: prev: {
npmlock2nix = import npmlock2nix { pkgs = prev; };
})
2024-10-08 13:01:55 +02:00
(final: prev: {
prev.rocmPackages.clr = prev.rocmPackages.clr.overrideDerivation (oldAttrs: {
passthru = {
gpuTargets = rocmTargets;
updateScript = oldAttrs.passthru.updateScript;
impureTests = oldAttrs.passthru.impureTests;
};
});
})
2024-07-21 02:42:48 +02:00
];
pkgs = import nixpkgs {
inherit system overlays;
2024-09-09 14:56:13 +02:00
config = {
allowUnfree = true;
rocmSupport = true;
};
2024-07-21 02:42:48 +02:00
};
customNodeModules = pkgs.npmlock2nix.v2.node_modules {
src = ./.;
nodejs = pkgs.nodejs_22;
2024-07-21 02:42:48 +02:00
};
buildInputs = with pkgs; [
harfbuzz
openssl
pango
sqlite
mariadb
zlib
clang
libclang
gzip
coreutils
2024-09-05 22:33:13 +02:00
gdb
2024-07-21 02:42:48 +02:00
glib
glibc
2024-09-05 22:33:13 +02:00
wayland-utils
waylandpp
kdePackages.wayland
libxkbcommon
webkitgtk_4_1
libsoup_3
gtk3
libGL
wayland
2024-07-21 02:42:48 +02:00
];
2024-09-09 14:56:13 +02:00
rocmTargets = [
"gfx1100"
"gfx1102"
2024-10-08 13:01:55 +02:00
"gfx1103"
2024-09-09 14:56:13 +02:00
];
2024-07-21 02:42:48 +02:00
in
{
apps.devshell = self.outputs.devShells.${system}.default.flakeApp;
packages = {
cargo-leptos = pkgs.callPackage ./.nix/cargo-leptos.nix { };
2024-09-09 14:56:13 +02:00
# llama-cpp = pkgs.callPackage "${llama-cpp}/.devops/nix/scope.nix" { };
myllamacpp = with pkgs;
llamaPackages.llama-cpp.overrideDerivation (oldAttrs: {
# speeds up builts by only building for a needed rocmTargets...
cmakeFlags = [
(lib.cmakeBool "LLAMA_BUILD_SERVER" true)
(lib.cmakeBool "BUILD_SHARED_LIBS" true)
(lib.cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
(lib.cmakeBool "LLAMA_CURL" true)
(lib.cmakeBool "GGML_NATIVE" true)
(lib.cmakeBool "GGML_BLAS" false)
(lib.cmakeBool "GGML_CUDA" false)
(lib.cmakeBool "GGML_HIP" true) # new one ? kinda undocumented ?
(lib.cmakeBool "GGML_HIPBLAS" true) # seems to be depr
2024-09-09 14:56:13 +02:00
(lib.cmakeBool "GGML_METAL" false)
(lib.cmakeBool "GGML_VULKAN" false)
(lib.cmakeBool "GGML_STATIC" false)
(lib.cmakeBool "GGML_FMA" true)
(lib.cmakeBool "GGML_F16C" true)
(lib.cmakeBool "GGML_AVX2" true)
(lib.cmakeBool "GGML_AVX512" false)
2024-09-09 14:56:13 +02:00
(lib.cmakeFeature "CMAKE_HIP_COMPILER" "${rocmPackages.llvm.clang}/bin/clang")
(lib.cmakeFeature "CMAKE_HIP_ARCHITECTURES" (builtins.concatStringsSep ";" rocmTargets))
(lib.cmakeFeature "AMDGPU_TARGETS" (builtins.concatStringsSep ";" rocmTargets))
2024-09-09 14:56:13 +02:00
];
});
2024-07-21 02:42:48 +02:00
};
devShells.default = pkgs.mkShell {
packages = with pkgs;
[
customNodeModules
customRustToolchain
2024-09-09 14:56:13 +02:00
self.packages.${system}.myllamacpp
bacon
2024-07-21 02:42:48 +02:00
binaryen
cacert
cargo-bloat
cargo-docset
cargo-machete
cargo-limit
cargo-deny
cargo-edit
cargo-watch
cargo-make
2024-09-05 22:33:13 +02:00
cargo-generate
2024-07-21 02:42:48 +02:00
cargo-udeps
self.packages.${system}.cargo-leptos
(wasm-bindgen-cli.override {
2024-09-05 22:33:13 +02:00
version = "0.2.93";
hash = "sha256-DDdu5mM3gneraM85pAepBXWn3TMofarVR4NbjMdz3r0=";
cargoHash = "sha256-birrg+XABBHHKJxfTKAMSlmTVYLmnmqMDfRnmG6g/YQ=";
2024-07-21 02:42:48 +02:00
})
cargo-outdated
cargo-release
calc
# jre8 # needed for xmlls
2024-07-21 02:42:48 +02:00
dart-sass
fish
inotify-tools
leptosfmt
mold
# nodejs_20
2024-07-21 02:42:48 +02:00
pkg-config
rustywind
sccache
sqlx-cli
unzip
rocmPackages.rocminfo
2024-07-21 02:42:48 +02:00
]
++ buildInputs;
buildInputs = buildInputs;
shellHook = ''
# setup node-modules
export NPM_LOCAL_PREFIX=${customNodeModules}/node_modules
(ln -s $NPM_LOCAL_PREFIX ./node_modules 2>/dev/null || unlink ./node_modules) && ln -s $NPM_LOCAL_PREFIX ./node_modules 2>/dev/null
2024-09-05 22:33:13 +02:00
# export NIX_LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath buildInputs}:$NIX_LD_LIBRARY_PATH
2024-09-05 22:33:13 +02:00
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath buildInputs}"
export LEPTOS_SASS_VERSION=1.71.0
export LEPTOS_TAILWIND_VERSION=3.4.1
export MALLOC_CONF=thp:always,metadata_thp:always
2024-07-21 02:42:48 +02:00
'';
};
});
}