{ pkgs, inputs, phps, lib, config, modulesPath,... }:

{

  env.APP_NAME = "configuration";

  # https://devenv.sh/packages/
  packages = [
    inputs.version.defaultPackage."${builtins.currentSystem}"
    pkgs.git
    pkgs.gcc12
    pkgs.go-task
    pkgs.blackbox
    pkgs.blackbox-terminal
    pkgs.jq
    pkgs.delve
    pkgs.gdlv
    pkgs.wget
    pkgs.glab
    pkgs.unixtools.xxd
    pkgs.libffi
    pkgs.zlib
    pkgs.procps
    pkgs.php81Extensions.xdebug
    pkgs.ranger
    pkgs.meld
    pkgs.gnused
    pkgs.coreutils-full
    pkgs.gnugrep
    pkgs.gnumake
    pkgs.util-linux
    pkgs.httpie
    pkgs.netcat
    pkgs.memcached
    pkgs.fd    
  ];


  # https://devenv.sh/languages/
  # languages.nix.enable = true;
  languages = {
    go = { enable = true; };
  };
  
   difftastic.enable = true;

    
  # This script is executed when the app is built
  # You can use it to build the app  
  scripts.test-lib.exec =  ''
#!${pkgs.bash}/bin/bash
#set -euo pipefail
set -x

PATH="''${PATH}":${pkgs.coreutils}/bin
PATH="''${PATH}":${pkgs.findutils}/bin
PATH="''${PATH}":${pkgs.jq}/bin/
PATH="''${PATH}":${pkgs.rsync}/bin/
PATH="''${PATH}":${pkgs.bash}/bin/
PATH="''${PATH}":${pkgs.curl}/bin/
PATH="''${PATH}":${pkgs.moreutils}/bin/
PATH="''${PATH}":${pkgs.gnutar}/bin
PATH="''${PATH}":${pkgs.gzip}/bin/
PATH="''${PATH}":${pkgs.procps}/bin/
PATH="''${PATH}":${pkgs.exa}/bin/
PATH="''${PATH}":${pkgs.git}/bin/
PATH="''${PATH}":${pkgs.gnugrep}/bin/
PATH="''${PATH}":${inputs.version.defaultPackage."${builtins.currentSystem}"}/bin/

export -f PATH

task test

'';

  # This scritp is used to deploy the app to the gitlab registry
  # It is used by the gitlab-ci.yml file
  # The environment variables are set in the gitlab project settings
  scripts.deploy-lib.exec =  ''
#!${pkgs.bash}/bin/bash

PATH="''${PATH}":${pkgs.coreutils}/bin
PATH="''${PATH}":${pkgs.jq}/bin/
PATH="''${PATH}":${pkgs.curl}/bin/
PATH="''${PATH}":${pkgs.moreutils}/bin/
PATH="''${PATH}":${pkgs.gnutar}/bin
PATH="''${PATH}":${pkgs.gzip}/bin/
PATH="''${PATH}":${pkgs.exa}/bin/
PATH="''${PATH}":${pkgs.git}/bin/
PATH="''${PATH}":${inputs.version.defaultPackage."${builtins.currentSystem}"}/bin/

export PATH

if [[ -f .env-gitlab-ci ]]; then
    source .env-gitlab-ci
    rm .env-gitlab-ci
fi

set -x
## if $HOME not set, set it to current directory
if [[ -z "''${HOME}" ]]; then
    HOME=$(pwd)
fi

export HOME

git config user.email "''${GITLAB_USER_EMAIL}"
git config user.name "''${GITLAB_USER_NAME:-"Gitlab CI"}"
git config pull.rebase true
git config http.sslVerify "false"
git remote set-url origin https://pad:''${GITLAB_TOKEN}@''${CI_REPOSITORY_URL#*@}

git fetch --all --tags --unshallow
git reset --hard origin/master
git checkout $CI_COMMIT_REF_NAME
git pull origin $CI_COMMIT_REF_NAME

if [ ! -z "''${CI_PROJECT_DIR}" ]; then
    echo "CI_PROJECT_DIR is set, using it as project root."
    project_root=$(realpath "''${CI_PROJECT_DIR}")/
elif [ ! -z "''${DEVENV_ROOT}" ]; then
    echo "DEVENV_ROOT is set, using it as project root."
    project_root=$(realpath "''${DEVENV_ROOT}")/
else
    echo "Error: DEVENV_ROOT or CI_PROJECT_DIR environment variables are not set."
    exit 1  
fi

if [ ! -d "''${project_root}" ]; then
    echo "Error: Project root directory does not seem to be valid."
    echo "Check the DEVENV_ROOT or CI_PROJECT_DIR environment variables."
    exit 1
fi

if [ -z "'CI_JOB_TOKEN" ]; then
    echo "Error: CI_JOB_TOKEN variable is not set."
    exit 1
fi

git --no-pager log --decorate=short --pretty=oneline

## the version should be the same as in the build task
if ! version auto --git --verbose
then
    echo "ERROR: Could not update version."
    exit 1
fi 

git --no-pager log --decorate=short --pretty=oneline

gitVersion=v$(version predict)
git tag -a $gitVersion 

git push -o ci.skip origin ''${CI_COMMIT_REF_NAME} --tags

echo "done"

'';


}