This is my multi host, modular Nix config. It declares configs for different programs using Nix language, such as:
- Noctalia shell - desktop components with generous customizability
- Niri - Scrollable Tilling Wayland Compositor via Community Niri-nix module
- And many more with Home-manager, that allows to declare configuration of user programs in Nix language
- Excellent Hjem linker with set of modules of Hjem-rum
I also declare configuration as packages/wrappers that you can try with nix run github:Ladas552/Flake-Ocean#app, replace app with:
- nvf - Nix declared Neovim
- nixvim - another Nix declared Neovim
- rofi-powermenu - power menu made of Rofi with a nice theme
- all the other scripts in pkgs directory
- wrappers directory for apps
- 2 NixOS hosts with Nvidia and Intel, and AMD APU on laptops. Both on ZFS and NixPort is using Impermanence
- Nix-On-Droid on phone, even if unmantained, it still works
- NixOS-WSL for Windows partition
- NixVM for testing, you shouldn't use it unless testing breaking changes
- NixIso for my portable NixOS image
I adopted Dendritic layout for my config. Making all files their own modules that I can import, and if module isn't imported, it doesn't exist. This way most of my config is fairy atomic and you can pop in and out modules as you wish.
Also I made custom.meta options on every host, and depending on host, different variables are used. Options defined in modules/flake-parts/options. And host variables are defined at imports.nix of every host. Even for nvf and nixvim configs.
I also have a lot of unused code that I can import if need be, for example my niri can be managed with hjem and home-manager and result will be identical.
I write comments on things, that might explain certain ways of doing things, or leave not working options in comments for people to find. This is to not look up one thing twice, and just look at the nix file itself.
Also, I have Norg document, containing notes and TODO for the config
I also write some blog posts about Nix, feel free to check it out
I also have inputs in ./_sources/, they are generated with nvfetcher after editing the ./nvfetcher.toml file. Instead of nix flake update, I update them with nix run github:berberman/nvfetcher.
To use them, use inputs from it:
sources = pkgs.callPackage "${self}/_sources/generated.nix" { };Then with sources.<input-name>.src you can skip manual fetching for neovim plugins for example.
I also use nvfetcher to fetch nixos modules, the method described in the flake.nix file.
Yes, it is a JoJo's reference
I take a lot of things from the internet and different configs too. So I credit people in comments to snippets that I stole.
If you want to check every person that I stole things from, go to my List of configs
Also for that one guy who switched to codeberg
Also this post from drupol was huge help in migrating my config to dendritic
Also, thanks to everyone in nix-community for being so awesome, wouldn't be there without ya
