{ config, inputs, lib, pkgs, ... }: let packages = builtins.attrValues { inherit (pkgs) nodejs; # Node.js runtime inherit (pkgs.nodePackages) pnpm; # Fast package manager alternative to npm }; in { options = { my.dev.javascript = { enable = lib.mkEnableOption "Install JavaScript tooling globally"; users = lib.mkOption { type = inputs.self.lib.usersOptionType lib; default = config.my.toggleUsers.dev; description = "Users to install JavaScript packages for"; }; }; devShells.javascript = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { inherit packages; name = "javascript-dev-shell"; shellHook = '' echo "📦 JavaScript dev environment" ''; }; description = "JavaScript/Node development shell with npm/pnpm support"; }; }; config = lib.mkMerge [ (lib.mkIf config.my.dev.javascript.enable { users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.javascript.users { inherit packages; }; }) { home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.dev.javascript.users (_user: { xdg.configFile = { "npm/npmrc".source = ../../dotfiles/npmrc; "configstore/update-notifier-npm-check.json".text = builtins.toJSON { optOut = false; lastUpdateCheck = 1646662583446; }; }; }); environment.variables = { NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc"; PNPM_HOME = "\${XDG_DATA_HOME}/pnpm"; PATH = [ "\${XDG_DATA_HOME}/npm/bin" "\${XDG_DATA_HOME}/pnpm" ]; }; } ]; }