dotfiles

My PC Dotfiles & Website

sql.nix (956B)


pkgs: let
  pkg = pkgs.mariadb;
in {
  name = "SQL";
  packages = [pkg];
  shellHook = ''
    alias mysql='mysql -u root'
    MYSQL_HOME=$HOME/.mysql
    MYSQL_DATADIR=$MYSQL_HOME/data
    export MYSQL_UNIX_PORT=$MYSQL_HOME/mysql.sock
    MYSQL_PID_FILE=$MYSQL_HOME/mysql.pid

    if [ ! -d "$MYSQL_HOME" ]
    then
      # Make sure to use normal authentication method
      # otherwise we can only connect with unix account
      # but users do not actually exist in NixOS
      mysql_install_db --auth-root-authentication-method=normal \
        --datadir=$MYSQL_DATADIR --basedir=${pkg} \
        --pid-file=$MYSQL_PID_FILE
    fi

    # Starts the daemon
    mysqld --datadir=$MYSQL_DATADIR --pid-file=$MYSQL_PID_FILE \
      --socket=$MYSQL_UNIX_PORT 2> $MYSQL_HOME/mysql.log &
    MYSQL_PID=$!

    finish() {
      mysqladmin -u root --socket=$MYSQL_UNIX_PORT shutdown
      kill $MYSQL_PID
      wait $MYSQL_PID
    }
    trap finish EXIT
  '';
}