docs: update project README

This commit is contained in:
Gabriel Arazas 2024-05-20 09:27:37 +08:00
parent 8e7a3e6277
commit 546caa6e69
No known key found for this signature in database
GPG Key ID: 62104B43D00AA360

View File

@ -10,33 +10,42 @@ This is my NixOS config as a https://www.tweag.io/blog/2020-05-25-flakes/[Nix fl
This configuration setup can be described with a list of features:
* Contain EVERYTHING!
Unify https://github.com/nix-community/nixos-generators[home-manager] and NixOS configuration (and maybe other environments such as nix-darwin and system-manager in case I have use cases for those) into one flake.
Unify https://github.com/nix-community/home-manager[home-manager] and NixOS configuration (and maybe other environments such as nix-darwin and system-manager in case I have use cases for those) into one flake.
Also throw in some NixVim configs in there, some Disko configurations, and make a sticky note about systems-manager and nix-darwin for the near future.
This is basically a monorepo for everything Nix-related needs.
* Fully modular configurations for each of the Nix-configurable environments including my NixOS systems, home-manager configurations, and NixVim builds.
Furthermore, they can be attached to a wider-scoped environment provided there is an integration for it.
For specific examples...
+
--
** We can have our link:./configs/home-manager[home-manager configurations] to be attached to multiple NixOS systems smoothly.
They are also available as a standalone configuration to be deployed by `home-manager` tool which is nice.
** We can include link:./configs/nixvim[NixVim configs] into home-manager configs and NixOS systems.
Similar to home-manager configurations, they are also available as a standalone configuration found in `nixvimConfigurations` attribute in the flake output.
** We can also include link:./configs/disko/[our Disko configurations] to NixOS systems to quickly include filesystem entries.
Once again, also available as a standalone configuration to be usable for `disko` tool.
All of these is made possible with https://flake.parts[flake-parts] with flake modules encouraging each of the configuration to be as composable as the functional paradigm that Nix encourages.
--
* Deploy the same NixOS configuration for more than one system, in multiple output images generated with https://github.com/nix-community/nixos-generators[nixos-generators], and as part of the deployment cluster with https://github.com/serokell/deploy-rs[deploy-rs].
You can even configure what nixpkgs branch (and home-manager branch) it will use.
* Features custom desktop configurations as a fully independent desktop session (aka similar to how typical desktop environments are deployed).
You can even test them quickly in a VM by running `nix run github:foo-dogsquared/nixos-config#run-workflow-with-vm -- $WORKFLOW_NAME`.
* Take full advantage of Nix module system with the cluster-wide custom modules footnote:[Most of them are patterned similarly from nixpkgs which made easy to be upstreamed just in case.].
This design bleeds into configuring the NixOS systems and home-manager users by designing https://foo-dogsquared.github.io/nixos-config/04-nixos-modules/04-host-specific-modules/[host-specific modules] and https://foo-dogsquared.github.io/nixos-config/05-home-manager/#_user_specific_modules[user-specific modules], respectively.
* Integrate every single component of the Nix ecosystem under the sun (that I use, anyways).
Want to declare a NixOS system with two already existing home-manager users as a separate NixOS configuration (`nixosConfigurations`) and as a buildable ISO in the flake output AND have it deployable with deploy-rs?
link:./modules/flake-parts/setups/nixos.nix[I wished for it and I got it.]
This is mainly powered by flakes with https://flake.parts/[Flake Parts] framework allowing me to create bloated abstractions on top.
This is mainly powered by flakes with https://flake.parts/[flake-parts] framework allowing me to create bloated abstractions on top.
* Deploy the same NixOS configuration for more than one system and in multiple output images.
This is configured in link:./configs/flake-parts/nixos.nix[`./configs/flake-parts/nixos.nix`] where not only you can deploy them with https://github.com/serokell/deploy-rs[deploy-rs] but build them as generated by https://github.com/nix-community/nixos-generators[nixos-generators].
You can even configure what nixpkgs branch (and home-manager branch) it will use.
* Similarly, deploy the same home-manager configuration for more than one system.
This time, it is configured with the link:./configs/flake-parts/home-manager.nix[`./configs/flake-parts/home-manager.nix`] file which you can configure what nixpkgs branch it will use.
You can even include link:./configs/home-manager[those same home-manager users] in NixOS systems smoothly.
* OK, OK, deploy EVERYTHING for more than one system with as much customizability and integration with other components as possible (I said this already, right?).
Right now, we will quickly list them like so...
** We have NixVim where we can include link:./configs/nixvim[those same NixVim configs] into home-manager configs and NixOS systems.
** We can also include link:./configs/disko/[our Disko configurations] to NixOS systems to quickly include filesystem entries while being usable in `disko` CLI.
* It has its own https://foo-dogsquared.github.io/nixos-config[website].
* It has its own https://foo-dogsquared.github.io/nixos-config[website] fully managed as a separate subproject.
Which means that it's cool (or over-the-top, whichever you prefer).
It's basically my personal version of nixpkgs: a monorepo of everything I need for Nix-related things unless it sprung into life as its own project footnote:[Speaking of which, I also have some other Nix-related projects stored in this very repo.].