There's no overall goal to the project. It's just the result of me tinkering
with my systems from time to time (I'm allocating a bit less than three hours
each day to coding on personal projects to improve my skills, some of that time
flows into my nixos config).
I am very new to nixOS and am interested in it. Specifically for ansible
scripts to build out easily replicateable docker hosts for lab.
I've extensively used docker/compose before I switched my systems to NixOS,
since then I've barely touched it.
The thing with Ansible and Docker is that you mostly define the steps you want
your systems to automatically go through to reach a specific state.
Nix[^1] approaches the problem the other way around. You define the state you
want to have, and Nix solves for the steps that need to be taken to reach that
state.
If you want to try your hands at that concept, I recommend installing just Nix
on one of your test machines and trying out development shells/devshells
with it.
For example the SwayFX
repo contains a flake.nix providing a devShell. This allows everyone
working on the project to just run nix develop in the cloned repo, or
nix develop github:WillPower3309/swayfx without cloning the repo to enter
the development environment.
This can be combined with tools like direnv
to automatically setup development environments, based on the current directory.
If you want a more encompassing example of what Nix can provide, take a look at:
This presentation by Matthew
Croughan on Nix-Flakes and Dockerfiles.
[^1]: The "package manager" that NixOS is build around. Though I think of it
more as a "build system" - not to be confused with Nix, the language the
build "scripts" are written in.
I have also considered it for switching my primary desktop and laptops as being able to have the same OS with everything the way I like it is also intriguing.
While I personally think NixOS is one of the most potent software in existence,
and a computer without feels less capable for me, I do not recommend it easily.
Just take a look at hlissner's FAQ
on his system config (which I greatly agree with).
That said, I initially tried NixOS on my PC and pushed the config to a
git-forge. I then installed the base NixOS ISO on my laptop and told
it to build the config from git. And that worked flawlessly.
In leaving the PC unattended for about 20mins, it went from a full Gnome
desktop to my Sway setup.
That's the point when I was sold.
Sorry for theate response. P.S. I love your wallpaper.
Don't worry about the late reponse ^^
The wallpaper can be build with nix build sourcehut:~sntx/nix-bg#abstract-liquid btw.
There are scripts for yt-dlp out there that allow you to automatically download an entire artists discography (yt), which I recommend if it's legal in your country.
There are also these two blog posts by elis on setting up tmpfs specifically.
Though these posts rather are setup guides, than "talking about the philosophy" of systems design.
My system configuration can be found on git.sr.ht/~sntx/flake.
I've linked the file tree pinned to the version 0.1.1 of my config, since I'm currrently restructuring the entire config[1] as the current tree is non-optimal[2].
The documentation in the README in combination with the files should cover most of what I've described, with the following exception: disko is not present to the repo yet, since I've set it up with a forked version of my config and the merge depends on finishing the restructuring of my system configuration.
You can take a look at these (non-declarative) installation steps to get an idea on how TMPFS as root can be setup
If you're interested, I can also DM you the disko expression for it
[^1]: The goal is to provide definitions for desktops, user-packages, system-packages, themes and users.
Each system can then enable a set of users, which in turn have their own desktop, user-packages and theme.
A system can also enable system-packages for itself, independent of users. If a user is enabled that has a desktop set, the system will need to have display-manager set as well, which should launch the users configured desktop.
[^2]: The current config assumes a primary user, and can only configure a single DE and apply the application/service configs only to that user.
I'm suprised nobody mentioned nebula: A scalable overlay networking tool with a focus on performance, simplicity and security.
I've been running it for about two years on multiple machines and it worked flawlessly so far.
Even connecting two hosts, both behind mullvad-vpn tunnels.
The only downside is, that you have to host your own discovery server (callled "lighthouses").
One is fine, but running at least two removes the single point of failure from the network.
After that, add Omniscience