71 lines
2.1 KiB
Nix
71 lines
2.1 KiB
Nix
{ 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;
|
|
};
|
|
};
|
|
}
|