Select Git revision
-
Will McCutchen authoredWill McCutchen authored
flake.nix 4.40 KiB
{
description = "Configuration is a library";
inputs = {
nixpkgs = {url = "github:nixos/nixpkgs/nixos-24.05";};
nixpkgsUnstable = {url = "github:nixos/nixpkgs/nixos-unstable";};
flakeUtils = {url = "github:numtide/flake-utils";};
commonFlake = {
url = "git+https://gitlab.schukai.com/schukai/entwicklung/nix-flakes.git?dir=common";
flake = true;
};
versionFlake = {
url = "git+https://gitlab.schukai.com/oss/utilities/version.git";
flake = true;
};
};
outputs = {
self,
nixpkgs,
nixpkgsUnstable,
flake-utils,
versionFlake,
commonFlake,
...
} @ inputs:
flake-utils.lib.eachDefaultSystem (system: let
inherit (nixpkgs.lib) optional;
commonPck = commonFlake.packages.${system}.common;
versionPck = versionFlake.packages.${system}.version;
pkgs' = import nixpkgs {
inherit system;
overlays = [
(final: prev: {
common = commonPck;
})
(final: prev: {
version = versionPck;
})
(final: prev: {
dolt =
(import nixpkgsUnstable {
inherit system;
})
.dolt;
})
];
};
in {
packages = rec {
manual = pkgs'.callPackage ./nix/packages/manual.nix {inherit self pkgs';};
};
devShells = {
default = let
commonPck = commonFlake.packages.${system}.common;
commonScript = commonPck + "/bin/common";
versionPck = versionFlake.packages.${system}.version;
versionBin = versionPck + "/bin/version";
scriptGoTask = import ./nix/scripts/go-task.nix {inherit self pkgs' system;};
commonPackages = import ./nix/config/common-packages.nix {inherit pkgs';};
extendedPackages = [
scriptGoTask
];
scriptPackages = [
versionPck
];
shellPackages =
commonPackages
++ extendedPackages
++ scriptPackages;
in
pkgs'.mkShell {
nativeBuildInputs = shellPackages;
shellHook = ''
source ${commonScript}
if [ -n "$CI_JOB_TOKEN" ]; then
echo_fail "You are in a CI environment, this shell is not intended for CI, but for local development"
exit 1
fi
echo_header "Configuration Lib development shell"
readonly worktree=$(get_working_dir)
echo_hint "Working directory: ''${worktree}"
currentVersion=$(${versionBin} print -g)
if [ -z "''${currentVersion}" ]; then
echo_fail "No version found, check your git tags"
else
echo_hint "Current version: ''${currentVersion}"
fi
currentGitBranch=$(git rev-parse --abbrev-ref HEAD)
echo_hint "Current branch: ''${currentGitBranch}"
echo_hint "You can run the task command to see the available tasks"
echo_section "Happy hacking!"
'';
};
gitlab = let
commonPck = commonFlake.packages.${system}.common;
commonScript = commonPck + "/bin/common";
versionPck = versionFlake.packages.${system}.version;
scriptCleanUp = pkgs'.callPackage ./nix/scripts/clean-up.nix {inherit pkgs';};
scriptRunCITests = pkgs'.callPackage ./nix/scripts/run-ci-tests.nix {inherit pkgs';};
scriptRelease = pkgs'.callPackage ./nix/scripts/release.nix {inherit pkgs';};
commonPackages = import ./nix/config/common-packages.nix {inherit pkgs';};
extendedPackages = [
scriptCleanUp
scriptRunCITests
scriptRelease
];
scriptPackages = [
versionPck
];
shellPackages =
commonPackages
++ extendedPackages
++ scriptPackages;
in
pkgs'.mkShell {
nativeBuildInputs = shellPackages;
shellHook = ''
source ${commonScript}
if [ -z "$CI_JOB_TOKEN" ]; then
echo_fail "You are not in a CI environment, this shell is intended for CI, but for local development"
exit 1
fi
cd ''${CI_PROJECT_DIR} || exit 1
'';
};
};
});
}