Skip to main content
Before you start customizing this configuration, please consider supporting the project:
This repository contains personal configurations that won’t work out of the box without modifications. All secrets are encrypted and need to be replaced with your own.

Customization workflow

Follow these steps to adapt the configuration for your own use:
1

Rename the user

The first step is to rename the default isabel user to your own username.
  1. Edit /modules/base/users/options.nix and change the default user from isabel to your username:
modules/base/users/options.nix
users = mkOption {
  type = listOf str;
  default = [ "yourname" ]; # Change this
  description = '''
    A list of users that you wish to declare as your non-system users.
  ''';
};
  1. Create your user configuration file at /modules/base/users/<user>.nix with your SSH key:
modules/base/users/yourname.nix
{
  lib,
  config,
  ...
}:
let
  inherit (lib) elem mkIf;
in
{
  config = mkIf (elem "yourname" config.garden.system.users) {
    users.users.yourname = {
      openssh.authorizedKeys.keys = [
        "ssh-ed25519 AAAA...your-key-here"
      ];
    };
  };
}
  1. Add your hashed password to /modules/nixos/users/<user>.nix:
modules/nixos/users/yourname.nix
{
  lib,
  config,
  ...
}:
let
  inherit (lib) elem mkIf;
in
{
  config = mkIf (elem "yourname" config.garden.system.users) {
    users.users.yourname = {
      hashedPassword = "$y$j9T$..."; # Generate with mkpasswd
    };
  };
}
Generate a hashed password using mkpasswd command from the mkpasswd package.
2

Configure your system

Find a host configuration that matches your hardware by reviewing the systems architecture.
  1. Rename the directory to your preferred hostname in /systems/<hostname>
  2. Edit the system configuration to match your hardware
  3. Update the home-manager users in the users.nix file:
systems/yoursystem/users.nix
{
  garden.system = {
    mainUser = "yourname";
    users = [ "yourname" ];
  };

  # Add home-manager configuration for your user
  home-manager.users.yourname.garden = {
    # Your user-specific settings
  };
}
  1. Register your system in /systems/default.nix:
systems/default.nix
hosts = {
  yoursystem = {
    # arch = "x86_64"; # or "aarch64"
    # class = "nixos"; # or "darwin", "iso", "wsl"
  };
};
3

Set locale and timezone

Edit /modules/nixos/environment/locale.nix to configure your timezone and locale:
modules/nixos/environment/locale.nix
{
  time = {
    timeZone = "America/New_York"; # Your timezone
    hardwareClockInLocalTime = true;
  };

  i18n = {
    defaultLocale = "en_US.UTF-8"; # Your locale

    extraLocales = [
      "en_US.UTF-8/UTF-8"
    ];
  };
}
4

Remove unnecessary configurations

This repository has a lot of personal configurations you may not need:
  • Remove unused system configurations from /systems/
  • Clean up service configurations in /modules/nixos/services/ that you don’t use
  • Remove GUI applications you don’t need from home-manager configurations
  • Update the flake inputs to remove dependencies you won’t use
Be careful when removing modules - some configurations may have dependencies on each other.
5

Configure secrets

All secrets in the /secrets/ directory are encrypted with sops-nix and won’t work without your own keys.See the Secrets Management guide for detailed instructions on setting up your own secrets.

What you get

After customization, you’ll have:
  • Modular configuration - Add or remove parts easily
  • Sensible defaults - Get started quickly with working configurations
  • Catppuccin theming - Consistent aesthetics across all applications
  • Modern tooling - Up-to-date packages from nixpkgs-unstable

Next steps

Add systems

Configure additional machines

Add users

Set up more user accounts

Manage secrets

Configure encrypted secrets

Troubleshooting

Fix common issues

Build docs developers (and LLMs) love