%title Getting Web-Services to run on NixOS
:ops:bowl:nix:reflection:
%date 2020-11-18 15:22

= Summary = 
Shaarli
- Haven't configured a systemd service to ln -s the nix derivation yet

Wallabag
- Upstream seems broken
- Docker works, but data is not persistent
- Find a way to use overlay so I can use an older version

Wireguard
- broken on 20.09
- not sure what to do

LUKS / LVM
- does not mount the big partition
- not sure why

Borg 
- Unconfigured
- Need to restore nextcloud data
- Most other data is missing

Basically I've learnt that running php web-apps are a nightmare, and that I don't really understand nginx, fastcgi, phpfpm at all really. 
For the past ~2 weeks I've been trying to rebuild [[bowl]] to be running on NixOS, and I've come up against many difficulties, and lost all the data in both of these services... 

I had issues with getting shaarli to read the environment variable as defined in it's nix derivation. So instead, Timo (the package maintainer) told me another solution is to just `ln -s` the package directory into somewhere it can read/write to since that's what the environment variable is supposed to do anyway. Once I did this it was easy enough to get Shaarli running. I did have to be careful with the nginx config because I'd accidentally disabled the API. Currently my Shaarli install 

Wallabag has been another story. It seems like upstream is broken because it's overwriting a php function (`mb_string` is the package and `mb_str_replace` is the function) that php says it can't overwrite. 

Before I managed to get these to run on bare metal, I was using docker once again to run the services. But since Nix is declarative, and I have no idea how docker volumes work, it wiped everytime I ran `nixos-rebuild switch`, which remains a problem I haven't quite solved. I somehow managed to get the docker install working, but I don't believe it to be declarative because I did exec into the docker container and ran some esoteric database migration in order to get it to work. 

Further more my main issue currently is that in order to do anything in nixOS I need to be able to write the language, understand the options, and then all the services that the options declaratively define. The way I currently run any of the infrastructure is through googling around and hoping to find a module or someone else trying to run the same software, but more profficient at nixOS than I am. That needs to change, since even for services written in easy to run languages like Go, I can't write the nix file to get them to work.
