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?

  • vendion@lemmy.mlOP
    link
    fedilink
    English
    arrow-up
    0
    ·
    9 months ago

    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 and nix-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 to trap like in the blog post then mariadbd doesn’t start (or starts and immedently gets killed).

    • onlinepersona@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      arrow-down
      2
      ·
      5 months ago

      mariadb doesn’t get backgrounded? Are you sure? Are you able to type commands and see their output? Also, what happens when putting set -x at the start of your shell hook? You should see the last line printed e.g MYSQL_PID=12345

      Anti Commercial-AI license

  • Rikudou_Sage@lemmings.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    9 months ago

    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.

    • rutrum@lm.paradisus.day
      link
      fedilink
      English
      arrow-up
      0
      ·
      9 months ago

      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?

      • linearchaos@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        8 months ago

        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.