Quick Start
Installation
Add cattery as a flake input:
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
cattery-modules.url = "https://flakehub.com/f/nixcafe/cattery-modules/*.tar.gz";
};
}NixOS (Full System)
The most common setup — full NixOS system with all modules available:
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
cattery-modules.url = "https://flakehub.com/f/nixcafe/cattery-modules/*.tar.gz";
};
outputs = { nixpkgs, cattery-modules, ... }: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
cattery-modules.nixosModules.default
./configuration.nix
];
};
};
}# configuration.nix
{ ... }: {
cattery = {
room.desktop.dev.enable = true;
user.name = "alice";
};
}Run nixos-rebuild switch and you're done.
home-manager (User-Level)
Standalone home-manager (Linux/macOS, no root access needed):
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
cattery-modules.url = "https://flakehub.com/f/nixcafe/cattery-modules/*.tar.gz";
};
outputs = { nixpkgs, home-manager, cattery-modules, ... }: {
homeConfigurations.alice = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [
cattery-modules.homeModules.default
{
cattery = {
room.desktop.dev.enable = true;
user.name = "alice";
};
}
];
};
};
}home-manager switch --flake .#alicenix-darwin (macOS)
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
darwin.url = "github:nix-darwin/nix-darwin";
cattery-modules.url = "https://flakehub.com/f/nixcafe/cattery-modules/*.tar.gz";
};
outputs = { darwin, cattery-modules, ... }: {
darwinConfigurations.macbook = darwin.lib.darwinSystem {
system = "aarch64-darwin";
modules = [
cattery-modules.darwinModules.default
{
cattery = {
room.basis.enable = true;
user.name = "alice";
};
}
];
};
};
}darwin-rebuild switch --flake .#macbookNixOS-WSL
{
cattery = {
room.desktop.wsl.enable = true;
user.name = "alice";
};
}Proxmox LXC Container
{
cattery = {
room.container.enable = true;
system.proxmox.lxc.manageNetwork = true;
user.name = "alice";
};
}Picking Individual Modules
Don't want a full room? Enable modules one at a time:
{
cattery = {
desktop.hyprland.enable = true;
themes.catppuccin.enable = true;
services.tailscale.enable = true;
cli-apps.dev-kit.git.enable = true;
cli-apps.dev-kit.rust.enable = true;
cli-apps.shell.fish.enable = true;
user.name = "alice";
};
}Customizing Rooms
Rooms use lib.mkDefault for sub-module enables — you can opt out of anything:
{
cattery = {
room.desktop.dev.enable = true;
# Override room defaults:
cli-apps.dev-kit.javascript.enable = false; # I use bun standalone
desktop.hyprland.enable = false; # I prefer Niri
desktop.niri.enable = true;
};
}Setting User Info
Many modules use cattery.user for defaults (git identity, email, GPG, shell):
{
cattery.user = {
name = "alice";
email = {
address = "[email protected]";
userName = "Alice";
};
defaultUserShell = "fish"; # auto-enables fish module
gpg.signKey = "ABCD1234";
};
}Next Steps
- Rooms — see what each room includes
- Modules — browse all 244+ modules
- Secrets & agenix — set up encrypted secrets