mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-15 02:36:16 +02:00
Factor out the dev shell
It had gotten rather big. Hopefully we'll eventually have some generic infra for a "multi-package dev shell" and not need so much code for this, but until then it's better in a separate file.
This commit is contained in:
parent
b4c05a18b4
commit
39fd4705ac
2 changed files with 96 additions and 89 deletions
91
flake.nix
91
flake.nix
|
@ -294,95 +294,8 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
devShells = let
|
devShells = let
|
||||||
makeShell = pkgs: stdenv: (pkgs.nix.override { inherit stdenv; forDevShell = true; }).overrideAttrs (attrs:
|
makeShell = import ./packaging/dev-shell.nix { inherit lib devFlake; };
|
||||||
let
|
in
|
||||||
buildCanExecuteHost = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
|
|
||||||
modular = devFlake.getSystem stdenv.buildPlatform.system;
|
|
||||||
transformFlag = prefix: flag:
|
|
||||||
assert builtins.isString flag;
|
|
||||||
let
|
|
||||||
rest = builtins.substring 2 (builtins.stringLength flag) flag;
|
|
||||||
in
|
|
||||||
"-D${prefix}:${rest}";
|
|
||||||
havePerl = stdenv.buildPlatform == stdenv.hostPlatform && stdenv.hostPlatform.isUnix;
|
|
||||||
ignoreCrossFile = flags: builtins.filter (flag: !(lib.strings.hasInfix "cross-file" flag)) flags;
|
|
||||||
in {
|
|
||||||
pname = "shell-for-" + attrs.pname;
|
|
||||||
|
|
||||||
# Remove the version suffix to avoid unnecessary attempts to substitute in nix develop
|
|
||||||
version = lib.fileContents ./.version;
|
|
||||||
name = attrs.pname;
|
|
||||||
|
|
||||||
installFlags = "sysconfdir=$(out)/etc";
|
|
||||||
shellHook = ''
|
|
||||||
PATH=$prefix/bin:$PATH
|
|
||||||
unset PYTHONPATH
|
|
||||||
export MANPATH=$out/share/man:$MANPATH
|
|
||||||
|
|
||||||
# Make bash completion work.
|
|
||||||
XDG_DATA_DIRS+=:$out/share
|
|
||||||
'';
|
|
||||||
|
|
||||||
# We use this shell with the local checkout, not unpackPhase.
|
|
||||||
src = null;
|
|
||||||
|
|
||||||
env = {
|
|
||||||
# Needed for Meson to find Boost.
|
|
||||||
# https://github.com/NixOS/nixpkgs/issues/86131.
|
|
||||||
BOOST_INCLUDEDIR = "${lib.getDev pkgs.nixDependencies.boost}/include";
|
|
||||||
BOOST_LIBRARYDIR = "${lib.getLib pkgs.nixDependencies.boost}/lib";
|
|
||||||
# For `make format`, to work without installing pre-commit
|
|
||||||
_NIX_PRE_COMMIT_HOOKS_CONFIG =
|
|
||||||
"${(pkgs.formats.yaml { }).generate "pre-commit-config.yaml" modular.pre-commit.settings.rawConfig}";
|
|
||||||
};
|
|
||||||
|
|
||||||
mesonFlags =
|
|
||||||
map (transformFlag "libutil") (ignoreCrossFile pkgs.nixComponents.nix-util.mesonFlags)
|
|
||||||
++ map (transformFlag "libstore") (ignoreCrossFile pkgs.nixComponents.nix-store.mesonFlags)
|
|
||||||
++ map (transformFlag "libfetchers") (ignoreCrossFile pkgs.nixComponents.nix-fetchers.mesonFlags)
|
|
||||||
++ lib.optionals havePerl (map (transformFlag "perl") (ignoreCrossFile pkgs.nixComponents.nix-perl-bindings.mesonFlags))
|
|
||||||
++ map (transformFlag "libexpr") (ignoreCrossFile pkgs.nixComponents.nix-expr.mesonFlags)
|
|
||||||
++ map (transformFlag "libcmd") (ignoreCrossFile pkgs.nixComponents.nix-cmd.mesonFlags)
|
|
||||||
;
|
|
||||||
|
|
||||||
nativeBuildInputs = attrs.nativeBuildInputs or []
|
|
||||||
++ pkgs.nixComponents.nix-util.nativeBuildInputs
|
|
||||||
++ pkgs.nixComponents.nix-store.nativeBuildInputs
|
|
||||||
++ pkgs.nixComponents.nix-fetchers.nativeBuildInputs
|
|
||||||
++ lib.optionals havePerl pkgs.nixComponents.nix-perl-bindings.nativeBuildInputs
|
|
||||||
++ lib.optionals buildCanExecuteHost pkgs.nixComponents.nix-manual.externalNativeBuildInputs
|
|
||||||
++ pkgs.nixComponents.nix-internal-api-docs.nativeBuildInputs
|
|
||||||
++ pkgs.nixComponents.nix-external-api-docs.nativeBuildInputs
|
|
||||||
++ pkgs.nixComponents.nix-functional-tests.externalNativeBuildInputs
|
|
||||||
++ lib.optional
|
|
||||||
(!buildCanExecuteHost
|
|
||||||
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
|
|
||||||
&& !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin)
|
|
||||||
&& stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages
|
|
||||||
&& lib.meta.availableOn stdenv.buildPlatform (stdenv.hostPlatform.emulator pkgs.buildPackages))
|
|
||||||
pkgs.buildPackages.mesonEmulatorHook
|
|
||||||
++ [
|
|
||||||
pkgs.buildPackages.cmake
|
|
||||||
pkgs.buildPackages.shellcheck
|
|
||||||
pkgs.buildPackages.changelog-d
|
|
||||||
modular.pre-commit.settings.package
|
|
||||||
(pkgs.writeScriptBin "pre-commit-hooks-install"
|
|
||||||
modular.pre-commit.settings.installationScript)
|
|
||||||
]
|
|
||||||
# TODO: Remove the darwin check once
|
|
||||||
# https://github.com/NixOS/nixpkgs/pull/291814 is available
|
|
||||||
++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) pkgs.buildPackages.bear
|
|
||||||
++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) (lib.hiPrio pkgs.buildPackages.clang-tools);
|
|
||||||
|
|
||||||
buildInputs = attrs.buildInputs or []
|
|
||||||
++ [
|
|
||||||
pkgs.gtest
|
|
||||||
pkgs.rapidcheck
|
|
||||||
]
|
|
||||||
++ lib.optional havePerl pkgs.perl
|
|
||||||
;
|
|
||||||
});
|
|
||||||
in
|
|
||||||
forAllSystems (system:
|
forAllSystems (system:
|
||||||
let
|
let
|
||||||
makeShells = prefix: pkgs:
|
makeShells = prefix: pkgs:
|
||||||
|
|
94
packaging/dev-shell.nix
Normal file
94
packaging/dev-shell.nix
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
{ lib, devFlake }:
|
||||||
|
|
||||||
|
pkgs: stdenv:
|
||||||
|
|
||||||
|
(pkgs.nix.override { forDevShell = true; }).overrideAttrs (attrs:
|
||||||
|
|
||||||
|
let
|
||||||
|
buildCanExecuteHost = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
|
||||||
|
modular = devFlake.getSystem stdenv.buildPlatform.system;
|
||||||
|
transformFlag = prefix: flag:
|
||||||
|
assert builtins.isString flag;
|
||||||
|
let
|
||||||
|
rest = builtins.substring 2 (builtins.stringLength flag) flag;
|
||||||
|
in
|
||||||
|
"-D${prefix}:${rest}";
|
||||||
|
havePerl = stdenv.buildPlatform == stdenv.hostPlatform && stdenv.hostPlatform.isUnix;
|
||||||
|
ignoreCrossFile = flags: builtins.filter (flag: !(lib.strings.hasInfix "cross-file" flag)) flags;
|
||||||
|
in {
|
||||||
|
pname = "shell-for-" + attrs.pname;
|
||||||
|
|
||||||
|
# Remove the version suffix to avoid unnecessary attempts to substitute in nix develop
|
||||||
|
version = lib.fileContents ../.version;
|
||||||
|
name = attrs.pname;
|
||||||
|
|
||||||
|
installFlags = "sysconfdir=$(out)/etc";
|
||||||
|
shellHook = ''
|
||||||
|
PATH=$prefix/bin:$PATH
|
||||||
|
unset PYTHONPATH
|
||||||
|
export MANPATH=$out/share/man:$MANPATH
|
||||||
|
|
||||||
|
# Make bash completion work.
|
||||||
|
XDG_DATA_DIRS+=:$out/share
|
||||||
|
'';
|
||||||
|
|
||||||
|
# We use this shell with the local checkout, not unpackPhase.
|
||||||
|
src = null;
|
||||||
|
|
||||||
|
env = {
|
||||||
|
# Needed for Meson to find Boost.
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/86131.
|
||||||
|
BOOST_INCLUDEDIR = "${lib.getDev pkgs.nixDependencies.boost}/include";
|
||||||
|
BOOST_LIBRARYDIR = "${lib.getLib pkgs.nixDependencies.boost}/lib";
|
||||||
|
# For `make format`, to work without installing pre-commit
|
||||||
|
_NIX_PRE_COMMIT_HOOKS_CONFIG =
|
||||||
|
"${(pkgs.formats.yaml { }).generate "pre-commit-config.yaml" modular.pre-commit.settings.rawConfig}";
|
||||||
|
};
|
||||||
|
|
||||||
|
mesonFlags =
|
||||||
|
map (transformFlag "libutil") (ignoreCrossFile pkgs.nixComponents.nix-util.mesonFlags)
|
||||||
|
++ map (transformFlag "libstore") (ignoreCrossFile pkgs.nixComponents.nix-store.mesonFlags)
|
||||||
|
++ map (transformFlag "libfetchers") (ignoreCrossFile pkgs.nixComponents.nix-fetchers.mesonFlags)
|
||||||
|
++ lib.optionals havePerl (map (transformFlag "perl") (ignoreCrossFile pkgs.nixComponents.nix-perl-bindings.mesonFlags))
|
||||||
|
++ map (transformFlag "libexpr") (ignoreCrossFile pkgs.nixComponents.nix-expr.mesonFlags)
|
||||||
|
++ map (transformFlag "libcmd") (ignoreCrossFile pkgs.nixComponents.nix-cmd.mesonFlags)
|
||||||
|
;
|
||||||
|
|
||||||
|
nativeBuildInputs = attrs.nativeBuildInputs or []
|
||||||
|
++ pkgs.nixComponents.nix-util.nativeBuildInputs
|
||||||
|
++ pkgs.nixComponents.nix-store.nativeBuildInputs
|
||||||
|
++ pkgs.nixComponents.nix-fetchers.nativeBuildInputs
|
||||||
|
++ pkgs.nixComponents.nix-expr.nativeBuildInputs
|
||||||
|
++ lib.optionals havePerl pkgs.nixComponents.nix-perl-bindings.nativeBuildInputs
|
||||||
|
++ lib.optionals buildCanExecuteHost pkgs.nixComponents.nix-manual.externalNativeBuildInputs
|
||||||
|
++ pkgs.nixComponents.nix-internal-api-docs.nativeBuildInputs
|
||||||
|
++ pkgs.nixComponents.nix-external-api-docs.nativeBuildInputs
|
||||||
|
++ pkgs.nixComponents.nix-functional-tests.externalNativeBuildInputs
|
||||||
|
++ lib.optional
|
||||||
|
(!buildCanExecuteHost
|
||||||
|
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
|
||||||
|
&& !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin)
|
||||||
|
&& stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages
|
||||||
|
&& lib.meta.availableOn stdenv.buildPlatform (stdenv.hostPlatform.emulator pkgs.buildPackages))
|
||||||
|
pkgs.buildPackages.mesonEmulatorHook
|
||||||
|
++ [
|
||||||
|
pkgs.buildPackages.cmake
|
||||||
|
pkgs.buildPackages.shellcheck
|
||||||
|
pkgs.buildPackages.changelog-d
|
||||||
|
modular.pre-commit.settings.package
|
||||||
|
(pkgs.writeScriptBin "pre-commit-hooks-install"
|
||||||
|
modular.pre-commit.settings.installationScript)
|
||||||
|
]
|
||||||
|
# TODO: Remove the darwin check once
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/291814 is available
|
||||||
|
++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) pkgs.buildPackages.bear
|
||||||
|
++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) (lib.hiPrio pkgs.buildPackages.clang-tools);
|
||||||
|
|
||||||
|
buildInputs = attrs.buildInputs or []
|
||||||
|
++ [
|
||||||
|
pkgs.gtest
|
||||||
|
pkgs.rapidcheck
|
||||||
|
]
|
||||||
|
++ lib.optional havePerl pkgs.perl
|
||||||
|
;
|
||||||
|
})
|
Loading…
Reference in a new issue