{"id":19876445,"url":"https://github.com/foo-dogsquared/nixos-config","last_synced_at":"2025-05-02T11:32:33.891Z","repository":{"id":38416548,"uuid":"287904960","full_name":"foo-dogsquared/nixos-config","owner":"foo-dogsquared","description":"Aiming to be the most overkill NixOS config in the entire world.","archived":false,"fork":false,"pushed_at":"2025-04-28T01:38:39.000Z","size":9277,"stargazers_count":88,"open_issues_count":1,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-28T02:32:42.620Z","etag":null,"topics":["disko-config","home-manager-config","nix-flake","nixos","nixos-config","nixos-configuration","nixos-dotfiles","nixvim-config","wrapper-manager-config"],"latest_commit_sha":null,"homepage":"https://foo-dogsquared.github.io/nixos-config/","language":"Nix","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/foo-dogsquared.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-08-16T08:35:13.000Z","updated_at":"2025-04-28T01:38:43.000Z","dependencies_parsed_at":"2023-10-15T07:52:48.052Z","dependency_job_id":"4c0bd0e1-3216-48ed-8393-dc1a17948bfd","html_url":"https://github.com/foo-dogsquared/nixos-config","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foo-dogsquared%2Fnixos-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foo-dogsquared%2Fnixos-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foo-dogsquared%2Fnixos-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foo-dogsquared%2Fnixos-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foo-dogsquared","download_url":"https://codeload.github.com/foo-dogsquared/nixos-config/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252030286,"owners_count":21683320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["disko-config","home-manager-config","nix-flake","nixos","nixos-config","nixos-configuration","nixos-dotfiles","nixvim-config","wrapper-manager-config"],"created_at":"2024-11-12T16:33:03.722Z","updated_at":"2025-05-02T11:32:33.884Z","avatar_url":"https://github.com/foo-dogsquared.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"= foo-dogsquared's NixOS config\n:toc:\n:devos_link: https://github.com/divnix/digga/tree/580fc57ffaaf9cf3a582372235759dccfe44ac92/examples/devos\n:docs_site: https://foo-dogsquared.github.io/nixos-config\n:canonical_flake_url: github:foo-dogsquared/nixos-config\n:canonical_flake_url_tarball_master: https://github.com/foo-dogsquared/nixos-config/archive/master.tar.gz\n:canonical_flake_url_tarball_specific: https://github.com/foo-dogsquared/nixos-config/archive/35c27749c55077727529f412dade862e4deb2ae8.tar.gz\n\nThis is my NixOS config as a https://www.tweag.io/blog/2020-05-25-flakes/[Nix flake] eventually containing my (almost) complete setup from a desktop, to a server, to a personalized installer, to your mom, almost everything.\nThis configuration setup can be described with a list of features:\n\n* Contain EVERYTHING!\nUnify 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.\nAlso 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.\nThis is basically a monorepo for everything Nix-related needs.\n\n* Fully modular configurations for each of the Nix-configurable environments including my NixOS systems, home-manager configurations, and NixVim builds.\nFurthermore, they can be attached to a wider-scoped environment provided there is an integration for it.\nFor specific examples...\n+\n--\n** We can have our link:./configs/home-manager[home-manager configurations] to be attached to multiple NixOS systems smoothly.\nThey are also available as a standalone configuration to be deployed by `home-manager` tool which is nice.\n\n** We can include link:./configs/nixvim[NixVim configs] into home-manager configs and NixOS systems.\nSimilar to home-manager configurations, they are also available as a standalone configuration found in `nixvimConfigurations` attribute in the flake output.\n\n** We can also include link:./configs/disko/[our Disko configurations] to NixOS systems to quickly include filesystem entries.\nOnce again, also available as a standalone configuration to be usable for `disko` tool.\n\nAll 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.\n--\n\n* 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].\nYou can even configure what nixpkgs branch (and home-manager branch) it will use.\n\n* Features custom desktop configurations as a fully independent desktop session (aka similar to how typical desktop environments are deployed).\nYou can even test them quickly in a VM by running `nix run github:foo-dogsquared/nixos-config#run-workflow-with-vm -- $WORKFLOW_NAME`.\n\n* 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.].\nThis 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.\n\n* Integrate every single component of the Nix ecosystem under the sun (that I use, anyways).\nWant 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?\nlink:./modules/flake-parts/setups/nixos.nix[I wished for it and I got it.]\nThis is mainly powered by flakes with https://flake.parts/[flake-parts] framework allowing me to create bloated abstractions on top.\n\n* It has its own https://foo-dogsquared.github.io/nixos-config[website] fully managed as a separate subproject.\nWhich means that it's cool (or over-the-top, whichever you prefer).\n\nIt'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.].\nBy virtue of being a monorepo AND a personal project, this is basically a platform for me to experiment ANY Nix-related shtick whether be it designing a new NixOS module to be upstreamed at some point or developing an entirely new experimental Nix app for generating a custom lockfile because Nix flakes is a bit of an ass.\n\nAnyways, this project also has a dedicated website at {docs_site} which I recommend to take a gander on how this project structures its configuration (and much of the information is not covered in this README anyways).\nIf you want the local documentation and has angst against online documentation, you can view the source code of the book at link:./docs/[`./docs/`].\n\n\n\n\n== Getting started\n\nThis is an overencumbered set of NixOS configurations for different systems.\nFor this section though, we'll assume you're only interested in installing the desktop configuration.\n\nMy main desktop configuration is quite big to the point where it cannot be completely installed with the regular installer from nixos.org without crashing.\nThis is due to having not enough space given from the official installer (being a 2GB tmpfs space which is enough for most) to build most of the outputs from the desktop derivation.\nFor this, it now requires a modified persistent live installer (thus has a requirement of a larger disk space of \u003e64GB) to be installed first within a NixOS live installer environment first.footnote:[Installing a live installer environment inside of a live installer environment, oooh.]\n\nA persistent live installer should only be intended to install the humungous configuration.\nIt isn't exactly made to be a NixOS-on-a-stick type but simply embiggening the root filesystem should be perfectly cromulent.\n\n[NOTE]\n====\nIf you want to make this into a three-part step, you can install my graphical installer config.\nTake note, it assumes the disk drive is at least \u003c=64GB and will format it into a Btrfs filesystem.\nFor this step, you can simply use my Disko config for the external hard drive I carry around (recommend to back those data up before using).\n\n[source, shell, subs=attributes]\n----\nnix-shell -p disko git\n\n# Run the following commands as root.\ndisko --mode disko [--arg disk \"/dev/sda\"] --flake {canonical_flake_url}#external-hdd\nnixos-install --no-root-passwd --root /mnt --flake {canonical_flake_url}#graphical-installer-x86_64-linux\n\n# As an alternative, you can also run the following command.\ndisko-install --mode disko --flake {canonical_flake_url}#graphical-installer-x86_64-linux\n\n# Or this...\njust nixos-install graphical-installer\n----\n\nAlso, the installer configuration also includes Guix which means it's also a Guix System installer.\n====\n\nOnce you have a live installer in boot, you can then simply install the following commands.\nIt will automate everything for you including the partitioning and mounting steps (powered by Disko).\nNO ADDITIONAL `mount` COMMANDS NEEDED!\n\n[source, shell, subs=attributes]\n----\n# Also run these as root.\ndisko --mode disko [--arg disk \"/dev/nvme0n1\"] --flake {canonical_flake_url}#ni-x86_64-linux\nnixos-install --flake {canonical_flake_url}#ni-x86_64-linux\n\n# Or just run this.\ndisko-install --mode disko --flake {canonical_flake_url}#ni-x86_64-linux\n\n# Or this...\njust nixos-install ni\n----\n\nAnd voilà!\nYou should have my desktop configuration installed perfectly working (assuming no interruptions or crashes went while installing my desktop config).\n\nHowever, it should also be barely usable since there are a couple of missing components that are needed such as the private keys for the desktop which is required for certain tasks such as backup task with Borg among other things.\n\n\n\n\n== Using the flake\n\nIf you want to use the flake as part of the flake inputs for some reason, you can simply include it in your `flake.nix`.\n\n[source, nix]\n----\n{\n    inputs.foodogsquared-flake.url = \"github:foo-dogsquared/nixos-config\";\n}\n----\n\nFor a better experience, I recommend using https://flakehub.com/flake/foo-dogsquared/nixos-config[FlakeHub] (with available instructions in the linked page).\nThe FlakeHub flake follows a rolling release model so all of the releases are under 0.x.\n\n\n\n\n== Stability promise\n\nTHERE'S NO STABILITY PROMISE HERE!\nYOU KNOW WHY!?!\nBECAUSE DEBUGGING IN NIX (whether in nixpkgs' module system or outside of it) IS ONE OF THE MOST PAINFUL EXPERIENCE IT MIGHT AS WELL BE CLASSIFIED AS A TIME MACHINE BECAUSE OF HOW FAR IT SETS YOU BACK, GODDAMN!\nMIGHT AS WELL USE THE BETTER ALTERNATIVE CALLED GUIX AND LEARN GUILE SCHEME FROM SCRATCH INSTEAD. footnote:[Seriously though, it is pretty nice and the community especially its developers does have the advantage of hindsight and using a general-purpose programming language. If you're interested in using declarative operating systems (or even just a home environment), I recommend to try it.]\n\nIf you're one of the unfortunate users for whatever reason, sorry but I'm afraid there's no such word as \"stability\" in this project's dictionary (or most Nix projects, really ;p).\nNot every commit successfully builds because of the way how the project is managed (which is very very badly):\n\n* All of the included changes are pushed in one fell swoop over time instead of carefully testing each of them.\n* There's barely any testing infrastructure set (at least until I set it up).\n* NixOS and home-manager configurations are able to be deployed in pure evaluation mode and suddenly it's not (most of the time, it isn't).\n* Module interfaces change all the time.\n* Packages can be left unmaintained and vanish at any time. footnote:[The ones I actively maintain are in nixpkgs anyways.]\n\nThis is my personal NixOS configuration, after all.\nIt serves more of a platform to experiment with the Nix ecosystem rather than something that it's meant to be used by others.\nThere are some parts of the configuration that eventually sprung as its own project such as the https://github.com/foo-dogsquared/nix-overlay-guix[Guix overlay] (which eventually upstreamed into nixpkgs, hoorah!).\nHopefully, more of them can be like that in the future (provided I still use Nix and have some time for it).\n\n\n\n\n== TODO\n\nIn order of priority:\n\n* [x] Create custom modules.\n* [x] Create a themes system similar to link:https://github.com/hlissner/dotfiles[this NixOS config].\n* [x] Create a good workflow for creating ISOs.\n* [x] Create development shells.\n* [x] Manage secrets with agenix.\n* [ ] Create a good workflow for tests.\n* [x] Automate backups with NixOS config.\n* [x] Create custom packages and export it to flakes. (Maybe consider making it to upstream)\n* [x] Create cluser-wide configs.\n* [x] Create host-wide configs.\n* [x] Create user-specific configs with home-manager.\n* [x] ~Steal~ Get some ideas from link:{devos_link}[this overengineered template].\n* [x] Make use of other established utilities such as link:https://github.com/divnix/digga/[digga], link:https://github.com/gytis-ivaskevicius/flake-utils-plus[flake-utils-plus], and link:https://github.com/nix-community/home-manager[home-manager] once I'm familiar to create my own Nix programs.\n\n\n=== Out of scope:\n\n* Set most program configurations with Nix.\nThis is especially applicable to programs I always use such as my text editor configs.\n\n** The reason: managing them can be chaotic when applied with Nix.\nThe potential for it is pretty nice especially when seen with similar implementations such as Guix home environment.\nHowever, I don't want to rebuild it every time I change it.\n\n* Migration of my link:https://github.com/foo-dogsquared/dotfiles[dotfiles].\nI still use it on other non-NixOS systems.\nlink:./configs/home-manager/foo-dogsquared/modules/dotfiles.nix[Even on NixOS, yes.]\n\n* To be a configuration framework.\nThis is my personal configuration which means experimentation will always be here.\nSudden changes can happen at any point.\n\n\n\n\n== Acknowledgments\n\nThis has been moved into its own dedicated page at the website.\nBut still, we'll list it here.\n\ninclude::./docs/website/content/en/08-acknowledgement/index.adoc[tag=acknowledgement]\n\n\n\n== Copyright\n\nFor those who care, this project is licensed under MIT license.\nI just chose it to make it easier to upstream parts of this project to nixpkgs and to make it easier to copy it without much problems (just don't forget to add attribution as indicated from the license).\nPlease see link:./LICENSE[`./LICENSE`] for the full text.\n\nHowever, various subprojects found in here may be under different licenses.\nAn example of this is the custom GNOME Shell extensions found for my main GNOME configuration which are licensed under GPLv3 only.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoo-dogsquared%2Fnixos-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoo-dogsquared%2Fnixos-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoo-dogsquared%2Fnixos-config/lists"}