/ devenv.nix
devenv.nix
  1  {
  2    pkgs,
  3    config,
  4    ...
  5  }:
  6  
  7  {
  8    # https://devenv.sh/basics/
  9    env.GREET = "devenv";
 10    env.TEST_ONLY_DO_FILES_PATH = "${config.devenv.root}/backend/src/divinum-officium/web/www/missa";
 11  
 12    # https://devenv.sh/packages/
 13    packages = [
 14      pkgs.git
 15      pkgs.black
 16      pkgs.ty
 17      pkgs.isort
 18    ];
 19  
 20    # https://devenv.sh/languages/
 21    languages = {
 22      python = {
 23        enable = true;
 24        directory = "./backend";
 25        uv = {
 26          enable = true;
 27          sync.enable = true;
 28        };
 29        # NOTE(shackra): required for ty
 30        venv = {
 31          enable = true;
 32        };
 33      };
 34  
 35      javascript = {
 36        enable = true;
 37        directory = "./frontend";
 38        yarn = {
 39          enable = true;
 40          # install.enable = true;
 41        };
 42      };
 43    };
 44  
 45    # https://devenv.sh/processes/
 46    # processes.cargo-watch.exec = "cargo-watch";
 47  
 48    # https://devenv.sh/services/
 49    # services.postgres.enable = true;
 50  
 51    # https://devenv.sh/scripts/
 52    scripts.hello.exec = ''
 53      echo hello from $GREET
 54    '';
 55  
 56    scripts.format.exec = ''
 57      echo "isort"
 58      ${pkgs.isort}/bin/isort --sg 'src/divinum-officium/**/*.py' --om ${config.devenv.root}/backend
 59      echo "black"
 60      ${pkgs.black}/bin/black --exclude 'src/divinum-officium/.*/.*\.py' ${config.devenv.root}/backend
 61    '';
 62  
 63    scripts.check.exec = ''
 64      cd ${config.devenv.root}/backend
 65      ${pkgs.ty}/bin/ty check
 66    '';
 67  
 68    enterShell = ''
 69      hello
 70      git --version
 71      echo "yarn version `yarn --version`"
 72      uv --version
 73    '';
 74  
 75    # https://devenv.sh/tasks/
 76    # tasks = {
 77    #   "myproj:setup".exec = "mytool build";
 78    #   "devenv:enterShell".after = [ "myproj:setup" ];
 79    # };
 80  
 81    # https://devenv.sh/tests/
 82    enterTest = ''
 83      cd ${config.devenv.root}/backend
 84      pytest --failed-first .
 85    '';
 86  
 87    # https://devenv.sh/git-hooks/
 88    git-hooks.hooks = {
 89      shellcheck.enable = true;
 90      black.enable = true;
 91      uv-check.enable = true;
 92      uv-lock.enable = true;
 93      isort.enable = true;
 94      mypy = {
 95        enable = true;
 96        settings = {
 97          binPath = "${config.devenv.root}/.devenv/state/venv/bin/mypy";
 98        };
 99      };
100      biome.enable = true;
101      nil.enable = true;
102      commitizen.enable = true;
103    };
104  
105    # See full reference at https://devenv.sh/reference/options/
106  }