Commit 235725e274f2

Vincent Demeester <vincent@sbr.pm>
2026-02-03 23:36:54
home/dev: add typescript and javascript development module
Adds a comprehensive TypeScript/JavaScript development environment configuration including: - Runtimes: Node.js, Bun, Deno - Tools: pnpm, Biome, ESLint, Prettier, LSPs - XDG compliance configuration
1 parent ae01877
Changed files (2)
home/common/dev/default.nix
@@ -10,6 +10,7 @@
     ./python.nix
     ./rust.nix
     ./terraform.nix
+    ./typescript.nix
     ./base.nix
   ]
   ++ lib.optional (builtins.isString desktop) ./desktop.nix;
home/common/dev/typescript.nix
@@ -0,0 +1,74 @@
+{ config, pkgs, ... }:
+{
+  home.sessionVariables = {
+    # Use XDG directories for npm/node
+    NPM_CONFIG_USERCONFIG = "${config.xdg.configHome}/npm/npmrc";
+    NPM_CONFIG_CACHE = "${config.xdg.cacheHome}/npm";
+    NPM_CONFIG_PREFIX = "${config.xdg.dataHome}/npm";
+    # pnpm
+    PNPM_HOME = "${config.xdg.dataHome}/pnpm";
+    # Bun
+    BUN_INSTALL = "${config.xdg.dataHome}/bun";
+    # Deno
+    DENO_DIR = "${config.xdg.cacheHome}/deno";
+    DENO_INSTALL_ROOT = "${config.xdg.dataHome}/deno";
+  };
+
+  # Add global npm/pnpm/bun bin directories to PATH
+  home.sessionPath = [
+    "${config.xdg.dataHome}/npm/bin"
+    "${config.xdg.dataHome}/pnpm"
+    "${config.xdg.dataHome}/bun/bin"
+    "${config.xdg.dataHome}/deno/bin"
+  ];
+
+  home.packages = with pkgs; [
+    # Core runtimes
+    nodejs # Node.js LTS (v24)
+    bun # Fast all-in-one JS runtime/bundler/package manager
+    deno # Secure runtime with built-in TypeScript support
+
+    # TypeScript compiler and type checking
+    nodePackages.typescript
+
+    # Package managers
+    nodePackages.pnpm # Fast, disk space efficient package manager
+    corepack # Manage package manager versions (yarn, pnpm)
+
+    # LSP and development tools
+    nodePackages.typescript-language-server # TypeScript/JavaScript LSP
+    nodePackages.vscode-langservers-extracted # HTML/CSS/JSON/ESLint LSPs
+    nodePackages."@tailwindcss/language-server" # TailwindCSS LSP
+    emmet-language-server # Emmet abbreviations LSP
+
+    # Linting and formatting
+    biome # Fast linter/formatter (eslint + prettier alternative)
+    nodePackages.eslint # Traditional linter
+    nodePackages.prettier # Code formatter
+    oxlint # Very fast Rust-based linter
+
+    # Build tools
+    esbuild # Extremely fast bundler
+    swc # Rust-based transpiler
+    turbo # Monorepo build system
+
+    # Node version management (for projects requiring specific versions)
+    fnm # Fast Node version manager
+
+    # CSS tools
+    tailwindcss # Utility-first CSS framework CLI
+    nodePackages.postcss # CSS transformations
+
+    # Utility tools
+    nodePackages.npm-check-updates # Find newer dependency versions
+    npkill # Clean up node_modules folders
+    nodePackages.quicktype # Generate types from JSON/Schema
+  ];
+
+  # Create npm config directory and basic npmrc
+  xdg.configFile."npm/npmrc".text = ''
+    prefix=${config.xdg.dataHome}/npm
+    cache=${config.xdg.cacheHome}/npm
+    init-module=${config.xdg.configHome}/npm/config/npm-init.js
+  '';
+}