feat: improve dev-components with --extra
This commit is contained in:
@@ -9,16 +9,16 @@
|
|||||||
pkgs.git
|
pkgs.git
|
||||||
packages.git-linearize
|
packages.git-linearize
|
||||||
packages.ggman
|
packages.ggman
|
||||||
|
|
||||||
pkgs.python3
|
pkgs.python3
|
||||||
pkgs.mdbook
|
pkgs.osc
|
||||||
pkgs.marksman
|
|
||||||
pkgs.mdformat
|
|
||||||
pkgs.google-cloud-sdk
|
pkgs.google-cloud-sdk
|
||||||
pkgs.google-cloud-sql-proxy
|
pkgs.google-cloud-sql-proxy
|
||||||
|
|
||||||
packages.ahab
|
packages.ahab
|
||||||
pkgs.just
|
pkgs.just
|
||||||
pkgs.presenterm
|
pkgs.presenterm
|
||||||
pkgs.osc
|
|
||||||
];
|
];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,16 +1,28 @@
|
|||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# composable nix devshell from matej.nix
|
# composable nix devshell from matej.nix
|
||||||
# usage in .envrc: use dev uv_14 pg_18
|
# usage in .envrc: use dev uv_14 pg_18 --extra cairo pkg-config
|
||||||
|
|
||||||
# generates a flake and delegates to use_flake at the calling scope
|
# generates a flake and delegates to use_flake at the calling scope
|
||||||
use_dev() {
|
use_dev() {
|
||||||
local nix_list=""
|
local nix_list="" extra_list="" in_extra=0
|
||||||
for c in "$@"; do
|
for c in "$@"; do
|
||||||
if [[ ! "$c" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
|
if [[ "$c" == "--extra" ]]; then
|
||||||
log_error "use_dev: invalid component name: $c"
|
in_extra=1
|
||||||
return 1
|
continue
|
||||||
|
fi
|
||||||
|
if [[ $in_extra -eq 1 ]]; then
|
||||||
|
if [[ ! "$c" =~ ^[a-zA-Z_][a-zA-Z0-9_-]*$ ]]; then
|
||||||
|
log_error "use_dev: invalid package name: $c"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
extra_list="$extra_list pkgs.$c"
|
||||||
|
else
|
||||||
|
if [[ ! "$c" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
|
||||||
|
log_error "use_dev: invalid component name: $c"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
nix_list="$nix_list \"$c\""
|
||||||
fi
|
fi
|
||||||
nix_list="$nix_list \"$c\""
|
|
||||||
done
|
done
|
||||||
|
|
||||||
local system
|
local system
|
||||||
@@ -64,7 +76,7 @@ use_dev() {
|
|||||||
pkgs = nixpkgs.legacyPackages.\${system};
|
pkgs = nixpkgs.legacyPackages.\${system};
|
||||||
devLib = import "\${dev}/flake/dev-components.nix" { inherit pkgs; lib = nixpkgs.lib; };
|
devLib = import "\${dev}/flake/dev-components.nix" { inherit pkgs; lib = nixpkgs.lib; };
|
||||||
in {
|
in {
|
||||||
devShells.\${system}.default = devLib.mkComponentShell [$nix_list ];
|
devShells.\${system}.default = devLib.mkComponentShell [$nix_list ] [${extra_list} ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
DEVFLAKE
|
DEVFLAKE
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ let
|
|||||||
pkgs.zlib
|
pkgs.zlib
|
||||||
pkgs.openssl
|
pkgs.openssl
|
||||||
pkgs.curl
|
pkgs.curl
|
||||||
|
pkgs.libffi
|
||||||
];
|
];
|
||||||
|
|
||||||
mkNode = nodejs: {
|
mkNode = nodejs: {
|
||||||
@@ -24,12 +25,12 @@ let
|
|||||||
packages = [
|
packages = [
|
||||||
python
|
python
|
||||||
pkgs.uv
|
pkgs.uv
|
||||||
|
pkgs.pkg-config
|
||||||
];
|
];
|
||||||
libraries = pythonLibraries;
|
libraries = pythonLibraries;
|
||||||
env = {
|
env = {
|
||||||
UV_PYTHON_DOWNLOADS = "never";
|
UV_PYTHON_DOWNLOADS = "never";
|
||||||
UV_PYTHON_PREFERENCE = "only-system";
|
UV_PYTHON_PREFERENCE = "only-system";
|
||||||
UV_PYTHON = "${python}/bin/python";
|
|
||||||
};
|
};
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
unset PYTHONPATH
|
unset PYTHONPATH
|
||||||
@@ -44,27 +45,10 @@ let
|
|||||||
uv_13 = mkUv pkgs.python313;
|
uv_13 = mkUv pkgs.python313;
|
||||||
uv_14 = mkUv pkgs.python314;
|
uv_14 = mkUv pkgs.python314;
|
||||||
|
|
||||||
pg_15 = {
|
|
||||||
packages = [ pkgs.postgresql_15 ];
|
|
||||||
};
|
|
||||||
pg_16 = {
|
|
||||||
packages = [ pkgs.postgresql_16 ];
|
|
||||||
};
|
|
||||||
pg_17 = {
|
|
||||||
packages = [ pkgs.postgresql_17 ];
|
|
||||||
};
|
|
||||||
pg_18 = {
|
|
||||||
packages = [ pkgs.postgresql_18 ];
|
|
||||||
};
|
|
||||||
|
|
||||||
node_20 = mkNode pkgs.nodejs_20;
|
node_20 = mkNode pkgs.nodejs_20;
|
||||||
node_22 = mkNode pkgs.nodejs_22;
|
node_22 = mkNode pkgs.nodejs_22;
|
||||||
node_24 = mkNode pkgs.nodejs_24;
|
node_24 = mkNode pkgs.nodejs_24;
|
||||||
|
|
||||||
go = {
|
|
||||||
packages = [ pkgs.go ];
|
|
||||||
};
|
|
||||||
|
|
||||||
rust = {
|
rust = {
|
||||||
packages = [
|
packages = [
|
||||||
pkgs.rustc
|
pkgs.rustc
|
||||||
@@ -75,20 +59,14 @@ let
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
cmake = {
|
|
||||||
packages = [
|
|
||||||
pkgs.cmake
|
|
||||||
pkgs.ninja
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# build a single mkShell from one or more component names
|
# build a single mkShell from one or more component names
|
||||||
mkComponentShell =
|
mkComponentShell =
|
||||||
names:
|
names: extraPackages:
|
||||||
let
|
let
|
||||||
selected = map (n: components.${n}) names;
|
selected = map (n: components.${n}) names;
|
||||||
allPackages = lib.concatMap (c: c.packages or [ ]) selected;
|
allPackages = lib.concatMap (c: c.packages or [ ]) selected ++ extraPackages;
|
||||||
allLibraries = lib.concatMap (c: c.libraries or [ ]) selected;
|
allLibraries = lib.concatMap (c: c.libraries or [ ]) selected;
|
||||||
allHooks = lib.concatMapStrings (c: c.shellHook or "") selected;
|
allHooks = lib.concatMapStrings (c: c.shellHook or "") selected;
|
||||||
allEnvs = lib.foldl' (acc: c: acc // (c.env or { })) { } selected;
|
allEnvs = lib.foldl' (acc: c: acc // (c.env or { })) { } selected;
|
||||||
|
|||||||
Reference in New Issue
Block a user