Declarative system configuration for macOS using Nix, bringing NixOS-like management to Apple computers.
nix-darwin is a collection of Nix modules that enables declarative system configuration for macOS, similar to how NixOS works for Linux. It allows users to manage their entire macOS environment—including installed packages, system services, and user settings—through a single Nix configuration file, providing reproducibility and version control for system state.
macOS users and system administrators who want reproducible, declarative system management using Nix, particularly those familiar with NixOS or looking to apply infrastructure-as-code principles to their personal computers.
Developers choose nix-darwin because it brings the powerful declarative configuration model of NixOS to macOS, enabling reproducible system setups, easy rollbacks, and centralized management of both system and user environments through the Nix ecosystem.
Manage your macOS using Nix
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Enables defining the entire macOS configuration in a single Nix file, ensuring reproducibility and version control as per the project's philosophy.
Built around Nixpkgs for access to thousands of packages and mirrors the NixOS module system, allowing seamless use of existing Nix knowledge.
Recommends using Nix flakes for configuration, providing improved dependency management and isolation, even though flakes are an experimental Nix feature.
Uses `darwin-rebuild switch` to apply changes, leveraging Nix's transactional model for safe updates and rollbacks, similar to NixOS.
The recommended setup relies on Nix flakes, which are still experimental in Nix, potentially causing instability or breaking changes, as acknowledged in the README.
Installation involves multiple steps with sudo commands and channel or flake management, which can be daunting for newcomers, as detailed in the getting started guide.
While it manages system settings, some macOS-specific features or GUI configurations may not be fully supported by available modules, requiring custom workarounds.