Skip to content

hackardoX/nix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

272 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Avatar

NixOS Nix config for hackardoX

Last commit Nix Flakes Ready

Welcome to my personal Nix configuration repository. This repository contains my nix-darwin configuration for macOS, built using flake-parts and following the dendritic pattern.

Table of Contents

  1. Getting Started
  2. Features
  3. Architecture
  4. Resources

Getting Started

Before diving in, ensure that you have Nix installed on your system. If not, you can download and install it from the official Nix website or from the Determinate Systems installer.

Clone this repository to your local machine

# New machine without git
nix-shell -p git

# Clone
git clone https://github.com/hackardoX/nix.git
cd nix

# First run without nix-darwin:
nix run github:lnl7/nix-darwin#darwin-rebuild -- switch --flake github:hackardoX/nix
# or
nix build github:hackardoX/nix#darwinConfigurations.Andrea-MacBook-Air.system
sudo ./result/sw/bin/darwin-rebuild switch --flake .#Andrea-MacBook-Air

# Subsequent runs:
darwin-rebuild switch --flake .

# Or with nh (recommended):
nh darwin switch

Remote Deployment

For NixOS nodes (like Hetzner VPS), I use nixos-anywhere for the initial unattended installation and deploy-rs for subsequent updates.

Initial Provisioning

To install NixOS on a fresh machine (ensure the machine is in a Rescue/Live environment with SSH access):

nix run github:nix-community/nixos-anywhere -- --flake .#<nix_host> --build-on remote <user>@<ip_address>

Updates

Once provisioned, deploy changes safely using deploy-rs:

nix run github:serokell/deploy-rs .#<nix_host>

Features

Here's an overview of what my Nix configuration offers:

  • Flake-parts Architecture: Modular flake structure using flake-parts for better composability and organization.

  • Dendritic Pattern: Configuration follows the dendritic pattern for a clean, modular structure.

  • External Dependency Integrations:

    • Nixvim for Neovim configuration.
    • Catppuccin for consistent, high-quality system-wide theming.
    • Git-hooks for automated commit validation (Commitizen, Sign-offs).
    • Treefmt-nix for a unified formatting interface.
  • macOS Support: Seamlessly configure and manage Nix on macOS using nix-darwin.

  • Home Manager: Manage your dotfiles, home environment, and user-specific configurations with Home Manager.

  • DevShell Support: The flake provides a development shell for convenient development and maintenance of your Nix environment.

  • CI with Cachix: Continuous integration that pushes built artifacts to Cachix for efficient builds.

  • Secret Management: Secure handling of sensitive information with opnix.

  • Remote Deployment: Easily deploy Nix configuration with deploy-rs

Architecture

This configuration uses flake-parts with the dendritic pattern for a modular and composable structure.

Dendritic Pattern

The dendritic pattern organizes Nix configurations into small, focused modules that compose together like dendrites in a neural network. Each module defines a specific piece of functionality and declares its dependencies explicitly.

Key benefits:

  • Modularity: Each feature is isolated in its own module
  • Composability: Modules combine freely and can be reused across configurations
  • Clarity: Module relationships and dependencies are explicit and declarative

Learn more at the dendritic pattern documentation.

Directory Structure

.
├── flake.nix              # Main flake entry point
└── modules/
    ├── darwin/            # nix-darwin modules
    ├── homeManager/       # Home Manager modules
    ├── nixvim/            # Nixvim configuration
    ├── hosts/             # Host-specific configurations
    └── ...                # Additional feature modules

All modules are discovered recursively using flake-parts' import-tree. The modules/hosts/ directory contains host-specific configurations that select which modules to enable for each machine.

Module Organization

Configuration is organized into focused modules by functionality (e.g., shell, git, editor, fonts). Each host configuration in modules/hosts/ selects which modules to enable and provides host-specific settings like username and system version.

Resources

Configurations that inspired this setup:

Documentation:

About

A repository containing my configuration for nix

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors