This repository contains my personal NixOS configurations, built using flakes. It provides a declarative and reproducible way to define and manage my system configuration.
NixOS is a Linux distribution that provides a purely functional approach to system configuration management. With NixOS, the entire operating system, including packages, libraries, and configuration files, is built using the Nix package manager.
This repository contains my personal NixOS configurations, tailored to my specific needs and preferences. It aims to provide a solid foundation for my development environment, system settings, and installed packages.
My goal is to evolve that configuration to have less manual setup on install (more imperative) and have more things synced between systems (or through the cloud). Basically the dream is to eliminate configuration drift.
- Built with flakes for reproducibility and declarative configuration.
- Modular configuration structure for easy organization and customization.
- Includes common system settings, user configuration, and package installations.
- Supports multiple hardware configurations and profiles.
- Provides a convenient way to manage dotfiles and additional customizations.
- Everything built around single user
- currently no nice way to build multi-user version of systems
- Limited machine specific config
- cli greeter, using vulkan backend for sway breaks gui greeters with my graphics cards
- hyper-optimized to my specific use cases
- the following build instructions were generated by chatGPT. Use at own risk while this small disclaimer still exists! (probably after that too, lets be honest)
- reduce the above limitations
- add more hosts
- Naydra (NAS currently with containers)
- Gleeok (VPS currently with mailserver/more containers)
- rpi - any use for this with nix?
- router - currently OPNSense. Consider trying nixos-router project
- impermanence <- wipe the system every reboot and only persist necessary data
- build container images with nixos
- rewrite build/configuration instructions in README
- PROPER documentation
- if anyone somehow stumbles across this greasy little horror show then lets make their life a little easier, nix can be so confusing!
- also for me as I'll forget why I did half the things I did 😅
- add comments throughout
- add READMEs in each major section to explain choices/motivations
- add some extra contact links for anyone crazy enough to base their own config on mine 🤓
For more detailed plans see TODO
Please be careful with the following, generated by AI and needs rewriting to be specific to this repo
### Prerequisites
Before using these configurations, make sure you have the following prerequisites installed on your system:
- [Nix](https://nixos.org/download.html) - The Nix package manager.
### Installation
1. Clone this repository to your local machine:
`git clone https://github.com/yourusername/your-repo-name.git`
2. Change to the repository directory:
`cd your-repo-name`
3. Build and activate the NixOS system configuration:
`nixos-rebuild switch --flake .`
This command will build and activate the NixOS system configuration defined in `flake.nix` and `nixos/configuration.nix`.
### Usage
- To rebuild and activate the configuration:
`nixos-rebuild switch --flake .`
- To update the system and installed packages:
`nixos-rebuild switch --upgrade`
- To rollback to the previous configuration:
`nixos-rebuild boot --rollback`
## Configuration
The main configuration files can be found in the `hosts` and `modules` directories. The `modules/core` directory defines the system-wide configuration, while the `modules/home` directory contains user-specific configurations.
Feel free to modify and extend these files to suit your needs. Add or remove packages, tweak system settings, or create new modules as necessary.
## Customization
To customize your NixOS configuration, you can:
- Edit the existing configuration files to modify system settings or package installations.
- Create new NixOS modules in the `modules` directory and import them into the main configuration file.
The modular structure of this configuration repository allows you to easily organize and extend your setup according to your preferences.
Contributions are welcome! If you have any suggestions, improvements, or bug fixes, please open an issue or submit a pull request.
When contributing, please ensure that your changes align with the existing code style and conventions.
If you have any questions about the how or why of anything in here then please don't hesitate to reach out! Or even just if you found value and want to say thanks, I'd love to hear from you! I can be reached through any of the links below:
- Email - will.featherston@gmail.com
- Matrix - @fitzhawke:matrix.org
- LinkedIn - Will Featherston
These work too, but not as actively monitored
- Twitter - @FitzHawke
If none of the above work you can always open an issue here too! 😄
This project is licensed under the MIT License. Feel free to use and modify the configurations as you see fit.
A list of people whose amazing configs served as a reference while I fumbled my way through building my own. I love you all!