I just switched one of my systems over to NixOS from Arch and so far it seems interesting. One question I had is regarding the nix-shell. So I get the basic concept of it and that it allows creating a shell that has packages installed with that shell making ideal for dev environments. I’ve even seen talks where the suggest nix-shells over docker/podman, my question is how is persistent data (like databases) handled?
Okay, hopefully someone here can point out where I am going wrong with setting up my dev shell the way I want. I am currently using
direnv
andnix-direnv
to manage the dev shell, and I found this blog post which shows a way to start and stop MySQL/Mariadb but I am having some weird issues with it.Currently my flake looks like this:
{ description = "A basic flake with a shell"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { nixpkgs, flake-utils, ... }@inputs: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; in { devShells.default = pkgs.mkShell { packages = with pkgs; [ bashInteractive php ]; buildInputs = [ pkgs.mariadb ]; shellHook = '' export MYSQL_BASEDIR=${pkgs.mariadb} export MYSQL_HOME=$PWD/.direnv/mysql export MYSQL_DATADIR=$MYSQL_HOME/data export MYSQL_UNIX_PORT=$MYSQL_HOME/mysql.sock export MYSQL_PID_FILE=$MYSQL_HOME/mysql.pid alias mysql='mysql -u root' if [[ ! -d $MYSQL_HOME ]]; then mariadb-install-db --auth-root-authentication-method=normal \ --datadir="$MYSQL_DATADIR" --basedir="$MYSQL_BASEDIR" \ --pid-file="$MYSQL_PID_FILE" fi mariadbd --datadir=$MYSQL_DATADIR --pid-file=$MYSQL_PID_FILE \ --socket=$MYSQL_UNIX_PORT --tmpdir='/tmp' 2>/dev/null & MYSQL_PID=$! ''; }; }); }
When I run it like this
mariadbd
starts just fine, but doesn’t get backgrounded dispite the&
making that shell session useless which is not what I want as I have to spawn a second shell just to do anything.Even weirder is when I add the
finish()
function and the call totrap
like in the blog post thenmariadbd
doesn’t start (or starts and immedently gets killed).mariadb
doesn’t get backgrounded? Are you sure? Are you able to type commands and see their output? Also, what happens when puttingset -x
at the start of your shell hook? You should see the last line printed e.gMYSQL_PID=12345
Nix shell basically just downloads the software (if it’s not already downloaded) and then modifies your PATH to include the new software.
Persistent data stay persistent.
Nix shell has one use case common with docker (local development), but other than that the solutions are not similar at all.
I just heard about NixOS today and decided to blow away my ubuntu that was laggy and try it. So far i like what i see, but i can tell i have some learning to do. I really need to learn to compile from source and how to fix build errors. Theres a package ubuntu has that only comes in a .deb or source.
https://github.com/haveno-dex/haveno
https://github.com/haveno-dex/haveno/blob/master/docs/installing.md
How do you use your computer? Did you really just blow away your OS and jump to one you just heard about? I ask because I spend many months preparing to make the move, and I’m still working at a deficit, since my 4 year old OS had so many hours of tinkering that went undocumented and forgotten. Im still slowly configuring my nixos box. How did you use your computer?
I backed up my 2 year old Debian 2 weeks ago and burned it down for NixOs. With the exception of getting Nvidia prime straight and having to learn configs multiple times as I did the start with flakes or home manager, It’s been incredibly smooth sailing.
It took me two or three days on Debian to get OBS and plugins straightened out. Nix worked with just a couple lines of config. I had Nix back to where I left off with Debian after approximately 2 days.
Being able to see other people’s configs and dork around with what other people are playing with without screwing up my system we’re going through dependency hell is nothing short of amazing.