100 days of code: death of Summer on the Island of NixOS - season 1, episode 1
Tags: codequality, 100daysofcode, nixos, functional
Published: 2020-10-19 06:26:15


We are a hundred days deep in the Lambda Quadrant part of the galaxy, resting on a deep space Moonad, myself and my crew, my parter and my lovematch, our infant son, and a cat. We study the properties and relations of Haskell abstract entities, enjoying meditating the pure functional programming vibe. It is deep work and we take time and turns. We also watch the second season of Star Trek Discovery and enjoy seeing the bright stars of its universe.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/35asq420ah1m4u5ge10p.jpg)

Committing myself to this challenge, reporting it in real time, documenting the entire experience, helps my learning, incrementally deepening my memory and realization, I write daily reports, blog posts, like a public journal, a creative outlet, like an an educational tool. Last time I wrote about the Haskell cloaked operator of function application, the infamous white space. During all that time we kept searching  through the **NixOS** system, one of advanced user Linux distributions, our thought exploring a fully immersive experience of learning how to express meanings with reproducible, a fully functional code. Is it a dream, some kind of unimatrix, a nexus in time and space, a time rift where anything is possible, where there are no gates and locks but free open highways, constructed by functional thought?

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/muzpg5ejeb8cic01s4xb.png)

I felt excited and inspired to devote hundred days of consciously exploring NixOS, writing about its entire amazing like cosmic ecosystem of interlinked tools, how to interact with it, how the nix package manager using the nix expression language builds the package units of the NixOS world. Though untyped, a fully declarative language seems to me as a super cool candidate for hundred days of code. And then there is super interesting Dhall, a programmable configuration language, that can tag the nix expressions with types. There is so much more, I ponder how never before I felt like getting so involved with the system. Even after using Archlinux for some years, imperatively rolling along its axis, I would often come back to Ubuntu land, simply out of convenience, but something else was lurking there I felt it too.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ngx8s2afyzdt6orsbdo5.jpg)

A disclaimer, maybe I should write how I deleted NixOS half a year ago a bit frustrated and overwhelmed, unable to complete the setup of audio programming tools, like *kind* of sound synthesizer called SuperCollider and Tidal cycles, a very nice algorithmic programming library, a DSL implemented in Haskell, a *domain specific language* for sound manipulation. Then there was another Haskell library Euterpea which could not be invoked somehow. The Goddess chose not to utter a sound. What did I do then? Naturally slowly over time I noticed that I have been eyeballing for some time the release date of Ubuntu LTS 20.04, the long term release edition. Still deep in `nix-shell` calling the `ghci`, learning to nix my way through the system I struggled with taking my nix pills. I learned partitioning my configuration file in which I define my NixOS system, open it with `emacs -nw configuration.nix`, the last mission being extracting the configuration logic into several modules and linking them within the `configuration.nix`, for example one of them was `xserver.nix` which contained the definitions about my visual experience, the fonts, window manager, my working desktop environment. 

But first not to get ahead of myself how did NixOS find me and how excited I was when I found out about the functional package manager, finally being able to declaratively explore my linux system, I felt empowered, like new tools have been handed to me. This time I can realize the essence of it, functionally programmed it is transparent, open to the world, unique, always deployable, available.  

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jku81u9b3jeap1mi3092.png)

Are there any goals in this code challenge? Isn't 100 days mission in the NixOS space enough?

* Study the Nix expression language
* Configure the audio settings?
* Learn nixpkgs package managment
* build Haskell with Nix
* deploy a blog with Haskell and Nix
* make at least one contribution to nixpkgs repository
* document everything is I guess the most important
* think through and learn by editing also
* what more?
* Check Dhall language
* No rushing, explore effortlessly
* stop writing long lists? 

It was after I returned from the west worlds, a most intense moment I remember when discovering NixOS, right when I saw it, when I began to realize the implication and the relief upon seeing it unfold on my face. The first time I am hearing about NixOS, some time before I was sent to space with my crew, I am on the 12th floor balcony with my mother overviewing the sea and gardens , we are drinking coffee probably, I think she likes to have them often and short. I am reading the paper printout of the Nix functional package manager doctoral thesis until the mathy parts, but they are cool too, feeling awesome trying to follow through. I feel inspired when reading about NixOS. It reminds me of happy moments when I was twelve, still without a computer, seeing the computer magazine "Bug" monthly cover of Linux penguin the Tux. I would reread these cool whole page stories of Emacs editor, Richard Stallman, Gnome, KDE and an interview with a Slackware maintainer. I liked computer magazines when I was a child and since I had no access to a computer they meant a lot to me. I would smell them too, oh my, I remember the fresh smell of opening a new computer magazine, wrapped in plastic was the rich synthetic fragrance.