forked from lix-project/lix
flake: refactor devShell creation
Now instead of a derivation overridden from Lix, we use a mkShell
derivation parameterized on an already called package.nix. This also
lets callPackage take care of the buildPackages distinction for the
devShell.
Change-Id: I5ddfec40d83fa6136032da7606fe6d3d5014ef42
This commit is contained in:
parent
8822fd7dd5
commit
044ed2b0a7
75
flake.nix
75
flake.nix
|
@ -366,82 +366,11 @@
|
||||||
nix = pkgs.callPackage ./package.nix {
|
nix = pkgs.callPackage ./package.nix {
|
||||||
inherit stdenv versionSuffix;
|
inherit stdenv versionSuffix;
|
||||||
busybox-sandbox-shell = pkgs.busybox-sandbox-shell or pkgs.default-busybox-sandbox;
|
busybox-sandbox-shell = pkgs.busybox-sandbox-shell or pkgs.default-busybox-sandbox;
|
||||||
forDevShell = true;
|
internalApiDocs = true;
|
||||||
};
|
};
|
||||||
pre-commit = self.hydraJobs.pre-commit.${pkgs.system} or { };
|
pre-commit = self.hydraJobs.pre-commit.${pkgs.system} or { };
|
||||||
in
|
in
|
||||||
(nix.override {
|
pkgs.callPackage nix.mkDevShell { pre-commit-checks = pre-commit; inherit contribNotice; };
|
||||||
buildUnreleasedNotes = true;
|
|
||||||
officialRelease = false;
|
|
||||||
}).overrideAttrs
|
|
||||||
(
|
|
||||||
prev:
|
|
||||||
{
|
|
||||||
# Required for clang-tidy checks
|
|
||||||
buildInputs =
|
|
||||||
prev.buildInputs
|
|
||||||
++ [
|
|
||||||
pkgs.just
|
|
||||||
pkgs.nixfmt
|
|
||||||
]
|
|
||||||
++ lib.optional (pre-commit ? enabledPackages) pre-commit.enabledPackages
|
|
||||||
++ lib.optionals (stdenv.cc.isClang) [
|
|
||||||
pkgs.llvmPackages.llvm
|
|
||||||
pkgs.llvmPackages.clang-unwrapped.dev
|
|
||||||
];
|
|
||||||
nativeBuildInputs =
|
|
||||||
prev.nativeBuildInputs
|
|
||||||
++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) pkgs.buildPackages.bear
|
|
||||||
# Required for clang-tidy checks
|
|
||||||
++ lib.optionals (stdenv.cc.isClang) [
|
|
||||||
pkgs.buildPackages.cmake
|
|
||||||
pkgs.buildPackages.ninja
|
|
||||||
pkgs.buildPackages.llvmPackages.llvm.dev
|
|
||||||
]
|
|
||||||
++
|
|
||||||
lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform)
|
|
||||||
# for some reason that seems accidental and was changed in
|
|
||||||
# NixOS 24.05-pre, clang-tools is pinned to LLVM 14 when
|
|
||||||
# default LLVM is newer.
|
|
||||||
(pkgs.buildPackages.clang-tools.override { inherit (pkgs.buildPackages) llvmPackages; })
|
|
||||||
++
|
|
||||||
lib.optionals (lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.buildPackages.clangbuildanalyzer)
|
|
||||||
[ pkgs.buildPackages.clangbuildanalyzer ];
|
|
||||||
|
|
||||||
src = null;
|
|
||||||
|
|
||||||
strictDeps = false;
|
|
||||||
|
|
||||||
shellHook = ''
|
|
||||||
PATH=$prefix/bin:$PATH
|
|
||||||
unset PYTHONPATH
|
|
||||||
export MANPATH=$out/share/man:$MANPATH
|
|
||||||
|
|
||||||
# Make bash completion work.
|
|
||||||
XDG_DATA_DIRS+=:$out/share
|
|
||||||
|
|
||||||
${lib.optionalString (pre-commit ? shellHook) pre-commit.shellHook}
|
|
||||||
# Allow `touch .nocontribmsg` to turn this notice off.
|
|
||||||
if ! [[ -f .nocontribmsg ]]; then
|
|
||||||
cat ${contribNotice}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install the Gerrit commit-msg hook.
|
|
||||||
# (git common dir is the main .git, including for worktrees)
|
|
||||||
if gitcommondir=$(git rev-parse --git-common-dir 2>/dev/null) && [[ ! -f "$gitcommondir/hooks/commit-msg" ]]; then
|
|
||||||
echo 'Installing Gerrit commit-msg hook (adds Change-Id to commit messages)' >&2
|
|
||||||
mkdir -p "$gitcommondir/hooks"
|
|
||||||
curl -s -Lo "$gitcommondir/hooks/commit-msg" https://gerrit.lix.systems/tools/hooks/commit-msg
|
|
||||||
chmod u+x "$gitcommondir/hooks/commit-msg"
|
|
||||||
fi
|
|
||||||
unset gitcommondir
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs (stdenv.buildPlatform.isLinux && pkgs.glibcLocales != null) {
|
|
||||||
# Required to make non-NixOS Linux not complain about missing locale files during configure in a dev shell
|
|
||||||
LOCALE_ARCHIVE = "${lib.getLib pkgs.glibcLocales}/lib/locale/locale-archive";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
in
|
in
|
||||||
forAllSystems (
|
forAllSystems (
|
||||||
system:
|
system:
|
||||||
|
|
86
package.nix
86
package.nix
|
@ -57,8 +57,6 @@
|
||||||
# Set to true to build the release notes for the next release.
|
# Set to true to build the release notes for the next release.
|
||||||
buildUnreleasedNotes ? false,
|
buildUnreleasedNotes ? false,
|
||||||
internalApiDocs ? false,
|
internalApiDocs ? false,
|
||||||
# Avoid setting things that would interfere with a functioning devShell
|
|
||||||
forDevShell ? false,
|
|
||||||
|
|
||||||
# Not a real argument, just the only way to approximate let-binding some
|
# Not a real argument, just the only way to approximate let-binding some
|
||||||
# stuff for argument defaults.
|
# stuff for argument defaults.
|
||||||
|
@ -241,7 +239,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
]
|
]
|
||||||
++ lib.optional stdenv.hostPlatform.isLinux util-linuxMinimal
|
++ lib.optional stdenv.hostPlatform.isLinux util-linuxMinimal
|
||||||
++ lib.optional (!officialRelease && buildUnreleasedNotes) build-release-notes
|
++ lib.optional (!officialRelease && buildUnreleasedNotes) build-release-notes
|
||||||
++ lib.optional (internalApiDocs || forDevShell) doxygen;
|
++ lib.optional internalApiDocs doxygen;
|
||||||
|
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[
|
[
|
||||||
|
@ -379,5 +377,87 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
# flake.nix exports that into its overlay.
|
# flake.nix exports that into its overlay.
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit (__forDefaults) boehmgc-nix build-release-notes libseccomp-nix;
|
inherit (__forDefaults) boehmgc-nix build-release-notes libseccomp-nix;
|
||||||
|
|
||||||
|
# The collection of dependency logic for this derivation is complicated enough that
|
||||||
|
# it's easier to parameterize the devShell off an already called package.nix.
|
||||||
|
mkDevShell =
|
||||||
|
{
|
||||||
|
mkShell,
|
||||||
|
just,
|
||||||
|
nixfmt,
|
||||||
|
glibcLocales,
|
||||||
|
bear,
|
||||||
|
pre-commit-checks,
|
||||||
|
clang-tools,
|
||||||
|
llvmPackages,
|
||||||
|
clangbuildanalyzer,
|
||||||
|
contribNotice,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
glibcFix = lib.optionalAttrs (stdenv.buildPlatform.isLinux && glibcLocales != null) {
|
||||||
|
# Required to make non-NixOS Linux not complain about missing locale files during configure in a dev shell
|
||||||
|
LOCALE_ARCHIVE = "${lib.getLib pkgs.glibcLocales}/lib/locale/locale-archive";
|
||||||
|
};
|
||||||
|
# for some reason that seems accidental and was changed in
|
||||||
|
# NixOS 24.05-pre, clang-tools is pinned to LLVM 14 when
|
||||||
|
# default LLVM is newer.
|
||||||
|
clang-tools_llvm = clang-tools.override { inherit llvmPackages; };
|
||||||
|
|
||||||
|
# pkgs.mkShell uses pkgs.stdenv by default, regardless of inputsFrom.
|
||||||
|
actualMkShell = mkShell.override { inherit stdenv; };
|
||||||
|
in
|
||||||
|
actualMkShell (
|
||||||
|
glibcFix
|
||||||
|
// {
|
||||||
|
|
||||||
|
inputsFrom = [ finalAttrs ];
|
||||||
|
|
||||||
|
# For Meson to find Boost.
|
||||||
|
env = finalAttrs.env;
|
||||||
|
|
||||||
|
packages =
|
||||||
|
[
|
||||||
|
just
|
||||||
|
nixfmt
|
||||||
|
# Load-bearing order. Must come before clang-unwrapped below.
|
||||||
|
stdenv.cc
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.cc.isClang [
|
||||||
|
# Required for clang-tidy checks.
|
||||||
|
llvmPackages.llvm
|
||||||
|
llvmPackages.clang-unwrapped.dev
|
||||||
|
]
|
||||||
|
++ lib.optional (pre-commit-checks ? enabledPackages) pre-commit-checks.enabledPackages
|
||||||
|
++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) bear
|
||||||
|
++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) clang-tools_llvm
|
||||||
|
++ lib.optional (lib.meta.availableOn stdenv.buildPlatform clangbuildanalyzer) clangbuildanalyzer
|
||||||
|
++ finalAttrs.checkInputs;
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
PATH=$prefix/bin:$PATH
|
||||||
|
unset PYTHONPATH
|
||||||
|
export MANPATH=$out/share/man:$MANPATH
|
||||||
|
|
||||||
|
# Make bash completion work.
|
||||||
|
XDG_DATA_DIRS+=:$out/share
|
||||||
|
|
||||||
|
${lib.optionalString (pre-commit-checks ? shellHook) pre-commit-checks.shellHook}
|
||||||
|
# Allow `touch .nocontribmsg` to turn this notice off.
|
||||||
|
if ! [[ -f .nocontribmsg ]]; then
|
||||||
|
cat ${contribNotice}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install the Gerrit commit-msg hook.
|
||||||
|
# (git common dir is the main .git, including for worktrees)
|
||||||
|
if gitcommondir=$(git rev-parse --git-common-dir 2>/dev/null) && [[ ! -f "$gitcommondir/hooks/commit-msg" ]]; then
|
||||||
|
echo 'Installing Gerrit commit-msg hook (adds Change-Id to commit messages)' >&2
|
||||||
|
mkdir -p "$gitcommondir/hooks"
|
||||||
|
curl -s -Lo "$gitcommondir/hooks/commit-msg" https://gerrit.lix.systems/tools/hooks/commit-msg
|
||||||
|
chmod u+x "$gitcommondir/hooks/commit-msg"
|
||||||
|
fi
|
||||||
|
unset gitcommondir
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue