{ config, pkgs, lib, ... }: let cfg = config.homeModules.javascript; in lib.mkIf cfg.enable { home.packages = with pkgs; [ nodejs_20 # default fallback Node.js yarn # optional global package manager pnpm typescript nodePackages.eslint nodePackages.prettier #nodePackages.npm-check-updates #nodePackages.astro #nodePackages."@angular/cli" #nodePackages.create-react-app #nodePackages."@next/bundle-analyzer" #nodePackages.vite ]; programs.zsh = { shellAliases = { nrun = "npx"; nstart = "npm run start"; dev = "pnpm dev || npm run dev || yarn dev"; build = "pnpm build || npm run build || yarn build"; }; initContent = '' export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion ''; }; # nvm installed manually; Nixpkgs does not manage dynamic Node versions well home.file.".nvm/nvm.sh".source = pkgs.fetchurl { url = "https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/nvm.sh"; sha256 = "sha256-EPSUbf93oq1jyzCRAZLRqkK15Y3EsA92Qpxq6mw8N1c="; }; home.sessionVariables = { NODE_ENV = "development"; NVM_DIR = "${config.home.homeDirectory}/.nvm"; PNPM_HOME = "${config.home.homeDirectory}/.local/share/pnpm"; # in _home.nix PATH = lib.mkBefore "$PNPM_HOME"; }; # Auto-completions and formatting helpers programs.direnv.enable = true; programs.direnv.nix-direnv.enable = true; programs.vscode = { enable = true; profiles.default.extensions = with pkgs.vscode-extensions; [ esbenp.prettier-vscode dbaeumer.vscode-eslint astro-build.astro-vscode angular.ng-template ]; profiles.default.userSettings = { "editor.formatOnSave" = true; "typescript.tsdk" = "node_modules/typescript/lib"; "eslint.validate" = [ "javascript" "typescript" "javascriptreact" "typescriptreact" ]; "prettier.requireConfig" = true; }; }; }