aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell.nix89
1 files changed, 89 insertions, 0 deletions
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..0f0b24a
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,89 @@
+{ pkgs ? import <nixpkgs> {} }:
+let
+
+ shellDrv =
+ {
+ mkShell,
+ mariadb,
+ apacheHttpd,
+ ...
+ }:
+ mkShell {
+ nativeBuildInputs = [
+ mariadb
+ apacheHttpd
+ ];
+
+ # Thanks https://github.com/JianZcar/LAMP-nix-shell-env/blob/main/default.nix
+ shellHook = ''
+ : ''${MYSQL_HOME:="$HOME/.config/mysql"}
+ : ''${MYSQL_DATADIR:="$MYSQL_HOME/data"}
+ : ''${MYSQL_PID_FILE:="$MYSQL_HOME/mysql.pid"}
+ : ''${MYSQL_UNIX_PORT:="$MYSQL_HOME/mysql.sock"}
+ export MYSQL_UNIX_PORT
+
+ __first_time=""
+ if [ ! -d "$MYSQL_HOME" ]
+ then
+ echo 'Installing mysql database...'
+ mkdir -p "$MYSQL_HOME" "$MYSQL_DATADIR"
+ mysql_install_db \
+ --auth-root-authentication-method=normal \
+ --basedir="${mariadb}" \
+ --datadir="$MYSQL_DATADIR" \
+ --pid-file="$MYSQL_PID_FILE" \
+ --user="$USER" >/tmp/install_log 2>&1 || {
+ echo 'Could not install mysql database! Log:';
+ cat /tmp/install_log;
+ exit 1;
+ }
+
+ __first_time="y"
+ fi
+
+ # Start mysql
+ echo 'Starting mysql...'
+ mysqld \
+ --no-defaults \
+ --basedir="${mariadb}" \
+ --datadir="$MYSQL_DATADIR" \
+ --pid-file="$MYSQL_PID_FILE" \
+ --socket="$MYSQL_UNIX_PORT" \
+ --bind-address=0.0.0.0 \
+ --log-error="$MYSQL_HOME"/mysql.err \
+ --user="$USER" >>"$MYSQL_HOME"/mysql.log &
+ MYSQL_PID=$!
+
+ until mysqladmin ping >/dev/null 2>&1
+ do
+ sleep 0.5
+ ps -p $MYSQL_PID >/dev/null 2>&1 || {
+ echo "mysql daemon stopped initializing!";
+ exit 1;
+ }
+ done
+
+ if [ -n "$__first_time" ]
+ then
+ mysql \
+ --user="root" \
+ -e "CREATE USER '$USER'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO '$USER'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;"
+ fi
+ unset __first_time
+
+ # Start user's shell
+ "$(getent passwd $USER | cut -d : -f 7)"
+
+ # Stop mysql
+ echo 'Shutting down mysql...'
+ mysqladmin \
+ --user="root" \
+ --socket="$MYSQL_UNIX_PORT" \
+ shutdown || pkill mysqld
+
+ exit 0
+ '';
+ };
+
+in
+ shellDrv pkgs