nodejs-tdd
Comprehensive Node.js development skill with best practices for project structure, coding patterns, and Test-Driven Development. Use this skill when building Node.js applications, APIs, or backend services. Covers project layout, ES modules, async patterns, error handling, security, and implements TDD with a structured workflow (Investigate → Reproduce → Test → Fix → Validate → Finalize).
SKILL.md
| Name | nodejs-tdd |
| Description | Comprehensive Node.js development skill with best practices for project structure, coding patterns, and Test-Driven Development. Use this skill when building Node.js applications, APIs, or backend services. Covers project layout, ES modules, async patterns, error handling, security, and implements TDD with a structured workflow (Investigate → Reproduce → Test → Fix → Validate → Finalize). |
Curts Nix Config
Nix Config
This repository is used for configuring dotfiles and packages across several systems. Current systems used are:
- 2 x Mac M* Laptops
- 1 x AMD Gaming PC running NixOS
- 3 x Kubernetes nodes running NixOS
Design
When using Nix, on the of the key things to understand is that Nix is a system that builds up its final config into what it calls as derivation. It is layer upon layer upon layer and each layer can overwrite pieces of another.
For my setup it follows:
- Linux: flake (flake.nix) -> systems (/systems) -> nixos (/modules/nixos) -> home (/modules/home)
- Mac: flake (flake.nix) -> systems (/systems) -> darwin (/modules/nixos) -> home (/modules/home)
Most of my packages are in /modules/home as those are shared across all computers I used (ghostty, zsh, scripts, etc). Nixos packages are linux only packages that don't make sense on Mac (hyprland, waybar, etc)
Options
Some packages can be turned on and off which allows for an easy way to toggle features. There are two sets of options, NixOS and Home Manager. Macs only use Home Manager while NixOS machines use both.
Example options:
- NixOS: NixOS services + Home Manager
- Mac: Home Manager
An example of creating an option
Installation
This repository is not meant to be installed but can be used as a frame of reference for your own nix conifg.
Of note though is that I use the Determinate Systems Nix Installer on Mac
Libraries / Packages of Note
Snowfall lib
After several itterations of layouts and custom support libraries I decided to use Snowfall lib to base the layout of my Nix config on. It was the closest layout and supporting package that I could find that was "standard". If you look at other peoples nix configs you will often notice that they have their own /lib directory containing several scripts. There are enough things to learn about Nix as it is that I didn't need to write my own custom libraries too!
sops-nix
Sops lets you store secrets in your git repository. The secrets are encrypted at rest and can be safely checked into git. When you run nix, the secrets are unencrypted and extracted to /run/secrets.d (or /var/folders/random on Mac). There are a few other packages that you can use for secrets but sops was pretty straight toward to us
curtbushko/neovim flake
I was using LazyVim for quite a while (Thanks Folke!) but it kept on breaking on me. I decided to go all in and create my own neovim flake to use everywhere. It took a while to setup but it was worth it as it never breaks on me now (unless I change it)
stylix
Stylix is is this useful nix package that provides default styling to tools as an overlay. For example, if you installed 'bat', it would set the colours for that tool. My setup is a little custom as I created my own styles and I feed the colours into several modules. This is odd but there are places, such as waybar, where I want my own custom styles.
Inspiration:
All of the repositories below use Snowfall and have served as references to my config.
- Jake Hamilton - huge Snowfall contributor
- IogaMaster
- Khaneliman