{
  description = "Flake providing Veloren, a multiplayer voxel RPG written in Rust.";

  inputs.nci.url = "github:yusdacra/nix-cargo-integration";

  outputs = inputs: let
    lib = inputs.nci.inputs.nixpkgs.lib;
    ncl = inputs.nci.lib.nci-lib;

    git = let
      sourceInfo = inputs.self.sourceInfo;
      dateTimeFormat = import ./nix/dateTimeFormat.nix;
      dateTime = dateTimeFormat sourceInfo.lastModified;
      shortRev = sourceInfo.shortRev or "dirty";
    in {
      prettyRev = shortRev + "/" + dateTime;
      tag = "";
    };

    filteredSource = let
      pathsToIgnore = [
        "flake.nix"
        "flake.lock"
        "nix"
        "assets"
        "README.md"
        "CONTRIBUTING.md"
        "CHANGELOG.md"
        "CODE_OF_CONDUCT.md"
        "clippy.toml"
        ".cargo"
      ];
      ignorePaths = path: type: let
        split = lib.splitString "/" path;
        actual = lib.drop 4 split;
        _path = lib.concatStringsSep "/" actual;
      in
        lib.all (n: ! (lib.hasPrefix n _path)) pathsToIgnore;
    in
      builtins.path {
        name = "veloren-source";
        path = toString ./.;
        # filter out unnecessary paths
        filter = ignorePaths;
      };

    wrapWithAssets = common: _: old: let
      pkgs = common.pkgs;
      runtimeLibs = with pkgs; [
        xorg.libX11
        xorg.libXi
        xorg.libxcb
        xorg.libXcursor
        xorg.libXrandr
        libxkbcommon
        shaderc.lib
        udev
        alsa-lib
        vulkan-loader
      ];
      assets = pkgs.runCommand "veloren-assets" {} ''
        mkdir $out
        ln -sf ${./assets} $out/assets
        # check if LFS was setup properly
        checkFile="$out/assets/voxygen/background/bg_main.jpg"
        result="$(${pkgs.file}/bin/file --mime-type $checkFile)"
        if [ "$result" = "$checkFile: image/jpeg" ]; then
          echo "Git LFS seems to be setup properly."
        else
          echo "
            Git Large File Storage (git-lfs) has not been set up correctly.
            Most common reasons:
              - git-lfs was not installed before cloning this repository.
              - This repository was not cloned from the primary GitLab mirror.
              - The GitHub mirror does not support LFS.
            See the book at https://book.veloren.net/ for details.
            Run 'nix-shell -p git git-lfs --run \"git lfs install --local && git lfs fetch && git lfs checkout\"'
            or 'nix shell nixpkgs#git-lfs nixpkgs#git -c sh -c \"git lfs install --local && git lfs fetch && git lfs checkout\"'.
          "
          false
        fi
      '';
      wrapped =
        common.internal.nci-pkgs.utils.wrapDerivation old
        {nativeBuildInputs = [pkgs.makeWrapper];}
        ''
          rm -rf $out/bin
          mkdir $out/bin
          ln -sf ${old}/bin/* $out/bin/
          wrapProgram $out/bin/* \
            ${lib.optionalString (old.pname == "veloren-voxygen") "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath runtimeLibs}"} \
            --set VELOREN_ASSETS ${assets} \
            --set VELOREN_GIT_VERSION "${git.prettyRev}" \
            --set VELOREN_GIT_TAG "${git.tag}"
        '';
    in
      wrapped;
  in
    inputs.nci.lib.makeOutputs {
      root = ./.;
      defaultOutputs = {
        package = "veloren-voxygen";
        app = "veloren-voxygen";
      };
      perCrateOverrides = {
        veloren-voxygen = {
          packageMetadata = _: {
            features = rec {
              release = ["default-publish"];
              debug = release;
              test = release;
            };
          };
          wrapper = wrapWithAssets;
        };
        veloren-server-cli.wrapper = wrapWithAssets;
      };
      disableVendoredCrateOverrides = true;
      overrides = {
        cCompiler = common: common.pkgs.clang;
        crates = common: prev: let
          pkgs = common.pkgs;

          configMoldLinker = ''
            touch $CARGO_HOME/config.toml
            cat >>$CARGO_HOME/config.toml <<EOF
              [target.x86_64-unknown-linux-gnu]
              linker = "clang"
              rustflags = ["-C", "link-arg=-fuse-ld=mold"]
            EOF
          '';
        in rec {
          veloren-common = oldAttrs: {
            # Disable `git-lfs` check here since we check it ourselves
            # We have to include the command output here, otherwise Nix won't run it
            DISABLE_GIT_LFS_CHECK = true;
            # We don't add in any information here because otherwise anything
            # that depends on common will be recompiled. We will set these in
            # our wrapper instead.
            NIX_GIT_HASH = "";
            NIX_GIT_TAG = "";
          };
          veloren-voxygen-deps = oldAttrs: {
            buildInputs = ncl.addBuildInputs prev (
              with pkgs; [
                alsa-lib
                libxkbcommon
                udev
                xorg.libxcb
              ]
            );
            nativeBuildInputs =
              ncl.addNativeBuildInputs prev (with pkgs; [python3 pkg-config mold]);

            SHADERC_LIB_DIR = "${pkgs.shaderc.lib}/lib";

            doCheck = false;

            postConfigure = ''
              ${oldAttrs.postConfigure or ""}
              ${configMoldLinker}
            '';
          };
          veloren-voxygen = prev:
            ncl.computeOverridesResult prev [
              veloren-voxygen-deps
              (oldAttrs: {
                src = filteredSource;

                VELOREN_USERDATA_STRATEGY = "system";

                dontUseCmakeConfigure = true;

                preConfigure = ''
                  ${oldAttrs.preConfigure or ""}
                  substituteInPlace voxygen/src/audio/soundcache.rs \
                    --replace \
                    "../../../assets/voxygen/audio/null.ogg" \
                    "${./assets/voxygen/audio/null.ogg}"
                '';
              })
            ];
          veloren-server-cli-deps = oldAttrs: {
            nativeBuildInputs = ncl.addNativeBuildInputs prev [pkgs.mold];

            doCheck = false;

            postConfigure = ''
              ${oldAttrs.postConfigure or ""}
              ${configMoldLinker}
            '';
          };
          veloren-server-cli = prev:
            ncl.computeOverridesResult prev [
              veloren-server-cli-deps
              (oldAttrs: {
                src = filteredSource;

                VELOREN_USERDATA_STRATEGY = "system";
              })
            ];
        };
      };
    };
}