{
  description = "Job Queues 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 "Job Queues 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

            '';
          };
      };
    });
}