chore: switch to direnv-based dev-shell
This commit is contained in:
parent
dbec1e213a
commit
add7672c9b
4
.gitignore
vendored
4
.gitignore
vendored
@ -44,4 +44,6 @@ tunnel.log
|
|||||||
/sessions
|
/sessions
|
||||||
/changelog.json
|
/changelog.json
|
||||||
/.current-version
|
/.current-version
|
||||||
/.current-changelog.md
|
/.current-changelog.md
|
||||||
|
**/.direnv
|
||||||
|
.develop.env
|
||||||
44
flake.lock
Normal file
44
flake.lock
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1619345332,
|
||||||
|
"narHash": "sha256-qHnQkEp1uklKTpx3MvKtY6xzgcqXDsz5nLilbbuL+3A=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "2ebf2558e5bf978c7fb8ea927dfaed8fefab2e28",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1620323686,
|
||||||
|
"narHash": "sha256-+gfcE3YTGl+Osc8HzOUXSFO8/0PAK4J8ZxCXZ4hjXHI=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "dfacb8329b2236688b9a1e705116203a213b283a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
27
flake.nix
Normal file
27
flake.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs = {
|
||||||
|
type = "github";
|
||||||
|
owner = "NixOS";
|
||||||
|
repo = "nixpkgs";
|
||||||
|
ref = "master";
|
||||||
|
};
|
||||||
|
flake-utils = {
|
||||||
|
type = "github";
|
||||||
|
owner = "numtide";
|
||||||
|
repo = "flake-utils";
|
||||||
|
ref = "master";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem
|
||||||
|
(system:
|
||||||
|
let pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
devShell = import ./shell.nix { inherit pkgs; };
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
213
shell.nix
213
shell.nix
@ -1,12 +1,8 @@
|
|||||||
{ nixpkgs ? import ./nixpkgs.nix {} }:
|
{ pkgs ? (import ./nixpkgs.nix {}).pkgs }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (nixpkgs {}) pkgs;
|
|
||||||
# haskellPackages = import ./stackage.nix { inherit nixpkgs; };
|
|
||||||
haskellPackages = pkgs.haskellPackages;
|
haskellPackages = pkgs.haskellPackages;
|
||||||
|
|
||||||
drv = haskellPackages.callPackage ./uniworx.nix {};
|
|
||||||
|
|
||||||
postgresSchema = pkgs.writeText "schema.sql" ''
|
postgresSchema = pkgs.writeText "schema.sql" ''
|
||||||
CREATE USER uniworx WITH SUPERUSER;
|
CREATE USER uniworx WITH SUPERUSER;
|
||||||
CREATE DATABASE uniworx_test;
|
CREATE DATABASE uniworx_test;
|
||||||
@ -19,129 +15,144 @@ let
|
|||||||
local all all trust
|
local all all trust
|
||||||
'';
|
'';
|
||||||
|
|
||||||
override = oldAttrs: {
|
develop = pkgs.writeScriptBin "develop" ''
|
||||||
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ (with pkgs; [ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client ]) ++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]);
|
#!${pkgs.zsh}/bin/zsh
|
||||||
shellHook = ''
|
|
||||||
export PROMPT_INFO="${oldAttrs.name}"
|
|
||||||
|
|
||||||
export PORT_OFFSET=$(((16#$(whoami | sha256sum | head -c 16)) % 1000))
|
cleanup() {
|
||||||
|
set +e -x
|
||||||
|
type cleanup_postgres &>/dev/null && cleanup_postgres
|
||||||
|
type cleanup_widget_memcached &>/dev/null && cleanup_widget_memcached
|
||||||
|
type cleanup_session_memcached &>/dev/null && cleanup_session_memcached
|
||||||
|
type cleanup_cache_memcached &>/dev/null && cleanup_cache_memcached
|
||||||
|
type cleanup_minio &>/dev/null && cleanup_minio
|
||||||
|
|
||||||
cleanup() {
|
[ -f "''${basePath}/.develop.env" ] && rm -vf "''${basePath}/.develop.env"
|
||||||
set +e -x
|
set +x
|
||||||
type cleanup_postgres &>/dev/null && cleanup_postgres
|
}
|
||||||
type cleanup_widget_memcached &>/dev/null && cleanup_widget_memcached
|
|
||||||
type cleanup_session_memcached &>/dev/null && cleanup_session_memcached
|
trap cleanup EXIT
|
||||||
type cleanup_cache_memcached &>/dev/null && cleanup_cache_memcached
|
|
||||||
type cleanup_minio &>/dev/null && cleanup_minio
|
basePath=$(pwd)
|
||||||
set +x
|
|
||||||
|
echo "" > ''${basePath}/.develop.env
|
||||||
|
|
||||||
|
PORT_OFFSET=$(((16#$(whoami | sha256sum | head -c 16)) % 1000))
|
||||||
|
echo "PORT_OFFSET=''${PORT_OFFSET}" >> ''${basePath}/.develop.env
|
||||||
|
|
||||||
|
if [[ -z "$PGHOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
pgDir=$(mktemp -d)
|
||||||
|
pgSockDir=$(mktemp -d)
|
||||||
|
pgLogFile=$(mktemp)
|
||||||
|
initdb --no-locale -D ''${pgDir}
|
||||||
|
pg_ctl start -D ''${pgDir} -l ''${pgLogFile} -w -o "-k ''${pgSockDir} -c listen_addresses=''' -c hba_file='${postgresHba}' -c unix_socket_permissions=0700 -c max_connections=9990 -c shared_preload_libraries=pg_stat_statements -c auto_explain.log_min_duration=100ms"
|
||||||
|
psql -h ''${pgSockDir} -f ${postgresSchema} postgres
|
||||||
|
printf "Postgres logfile is %s\nPostgres socket directory is %s\n" ''${pgLogFile} ''${pgSockDir}
|
||||||
|
|
||||||
|
cleanup_postgres() {
|
||||||
|
set +e -x
|
||||||
|
pg_ctl stop -D ''${pgDir}
|
||||||
|
rm -rvf ''${pgDir} ''${pgSockDir} ''${pgLogFile}
|
||||||
|
set +x
|
||||||
}
|
}
|
||||||
|
|
||||||
trap cleanup EXIT
|
set +xe
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -z "$PGHOST" ]]; then
|
echo "PGHOST=''${pgSockDir}" >> ''${basePath}/.develop.env
|
||||||
set -xe
|
echo "PGLOG=''${pgLogFile}" >> ''${basePath}/.develop.env
|
||||||
|
|
||||||
pgDir=$(mktemp -d)
|
if [[ -z "$WIDGET_MEMCACHED_HOST" ]]; then
|
||||||
pgSockDir=$(mktemp -d)
|
set -xe
|
||||||
pgLogFile=$(mktemp)
|
|
||||||
initdb --no-locale -D ''${pgDir}
|
|
||||||
pg_ctl start -D ''${pgDir} -l ''${pgLogFile} -w -o "-k ''${pgSockDir} -c listen_addresses=''' -c hba_file='${postgresHba}' -c unix_socket_permissions=0700 -c max_connections=9990 -c shared_preload_libraries=pg_stat_statements -c auto_explain.log_min_duration=100ms"
|
|
||||||
export PGHOST=''${pgSockDir} PGLOG=''${pgLogFile}
|
|
||||||
psql -f ${postgresSchema} postgres
|
|
||||||
printf "Postgres logfile is %s\nPostgres socket directory is %s\n" ''${pgLogFile} ''${pgSockDir}
|
|
||||||
|
|
||||||
cleanup_postgres() {
|
memcached -l localhost -p $(($PORT_OFFSET + 11211)) &>/dev/null &
|
||||||
set +e -x
|
widget_memcached_pid=$!
|
||||||
pg_ctl stop -D ''${pgDir}
|
|
||||||
rm -rvf ''${pgDir} ''${pgSockDir} ''${pgLogFile}
|
|
||||||
set +x
|
|
||||||
}
|
|
||||||
|
|
||||||
set +xe
|
cleanup_widget_memcached() {
|
||||||
fi
|
[[ -n "$widget_memcached_pid" ]] && kill $widget_memcached_pid
|
||||||
|
}
|
||||||
|
|
||||||
if [[ -z "$WIDGET_MEMCACHED_HOST" ]]; then
|
set +xe
|
||||||
set -xe
|
fi
|
||||||
|
|
||||||
memcached -l localhost -p $(($PORT_OFFSET + 11211)) &>/dev/null &
|
echo "WIDGET_MEMCACHED_HOST=localhost" >> ''${basePath}/.develop.env
|
||||||
widget_memcached_pid=$?
|
echo "WIDGET_MEMCACHED_PORT=$(($PORT_OFFSET + 11211))" >> ''${basePath}/.develop.env
|
||||||
|
|
||||||
cleanup_widget_memcached() {
|
echo "PGLOG=''${PGLOG}" >> ''${basePath}/.develop.env
|
||||||
[[ -n "$widget_memcached_pid" ]] && kill $widget_memcached_pid
|
|
||||||
}
|
|
||||||
|
|
||||||
export WIDGET_MEMCACHED_HOST=localhost WIDGET_MEMCACHED_PORT=$(($PORT_OFFSET + 11211))
|
if [[ -z "$SESSION_MEMCACHED_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
set +xe
|
memcached -l localhost -p $(($PORT_OFFSET + 11212)) &>/dev/null &
|
||||||
fi
|
session_memcached_pid=$!
|
||||||
|
|
||||||
if [[ -z "$SESSION_MEMCACHED_HOST" ]]; then
|
cleanup_session_memcached() {
|
||||||
set -xe
|
[[ -n "$session_memcached_pid" ]] && kill $session_memcached_pid
|
||||||
|
}
|
||||||
|
|
||||||
memcached -l localhost -p $(($PORT_OFFSET + 11212)) &>/dev/null &
|
set +xe
|
||||||
session_memcached_pid=$?
|
fi
|
||||||
|
|
||||||
cleanup_session_memcached() {
|
echo "SESSION_MEMCACHED_HOST=localhost" >> ''${basePath}/.develop.env
|
||||||
[[ -n "$session_memcached_pid" ]] && kill $session_memcached_pid
|
echo "SESSION_MEMCACHED_PORT=$(($PORT_OFFSET + 11212))" >> ''${basePath}/.develop.env
|
||||||
}
|
|
||||||
|
|
||||||
export SESSION_MEMCACHED_HOST=localhost SESSION_MEMCACHED_PORT=$(($PORT_OFFSET + 11212))
|
if [[ -z "$MEMCACHED_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
set +xe
|
memcached -l localhost -p $(($PORT_OFFSET + 11213)) &>/dev/null &
|
||||||
fi
|
memcached_pid=$!
|
||||||
|
|
||||||
if [[ -z "$MEMCACHED_HOST" ]]; then
|
cleanup_session_memcached() {
|
||||||
set -xe
|
[[ -n "$memcached_pid" ]] && kill $memcached_pid
|
||||||
|
}
|
||||||
|
|
||||||
memcached -l localhost -p $(($PORT_OFFSET + 11213)) &>/dev/null &
|
set +xe
|
||||||
memcached_pid=$?
|
fi
|
||||||
|
|
||||||
cleanup_session_memcached() {
|
echo "MEMCACHED_HOST=localhost" >> ''${basePath}/.develop.env
|
||||||
[[ -n "$memcached_pid" ]] && kill $memcached_pid
|
echo "MEMCACHED_PORT=$(($PORT_OFFSET + 11212))" >> ''${basePath}/.develop.env
|
||||||
}
|
|
||||||
|
|
||||||
export MEMCACHED_HOST=localhost MEMCACHED_PORT=$(($PORT_OFFSET + 11212))
|
if [[ -z "$UPLOAD_S3_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
set +xe
|
cleanup_minio() {
|
||||||
fi
|
[[ -n "$minio_pid" ]] && kill $minio_pid
|
||||||
|
[[ -n "$minio_dir" ]] && rm -rvf ''${minio_dir}
|
||||||
|
[[ -n "MINIO_LOGFILE" ]] && rm -rvf ''${MINIO_LOGFILE}
|
||||||
|
}
|
||||||
|
|
||||||
if [[ -z "$UPLOAD_S3_HOST" ]]; then
|
MINIO_DIR=$(mktemp -d)
|
||||||
set -xe
|
MINIO_LOGFILE=$(mktemp --tmpdir minio.XXXXXX.log)
|
||||||
|
MINIO_ACCESS_KEY=$(${pkgs.pwgen}/bin/pwgen -s 16 1)
|
||||||
|
MINIO_SECRET_KEY=$(${pkgs.pwgen}/bin/pwgen -s 32 1)
|
||||||
|
|
||||||
cleanup_minio() {
|
minio server --address localhost:$(($PORT_OFFSET + 9000)) ''${MINIO_DIR} &>''${MINIO_LOGFILE} &
|
||||||
[[ -n "$minio_pid" ]] && kill $minio_pid
|
minio_pid=$!
|
||||||
[[ -n "$minio_dir" ]] && rm -rvf ''${minio_dir}
|
|
||||||
[[ -n "MINIO_LOGFILE" ]] && rm -rvf ''${MINIO_LOGFILE}
|
|
||||||
}
|
|
||||||
|
|
||||||
export MINIO_DIR=$(mktemp -d)
|
sleep 1
|
||||||
export MINIO_LOGFILE=$(mktemp --tmpdir minio.XXXXXX.log)
|
|
||||||
export MINIO_ACCESS_KEY=$(${pkgs.pwgen}/bin/pwgen -s 16 1)
|
|
||||||
export MINIO_SECRET_KEY=$(${pkgs.pwgen}/bin/pwgen -s 32 1)
|
|
||||||
|
|
||||||
minio server --address localhost:$(($PORT_OFFSET + 9000)) ''${MINIO_DIR} &>''${MINIO_LOGFILE} &
|
set +xe
|
||||||
minio_pid=$?
|
fi
|
||||||
|
|
||||||
sleep 1
|
echo "MINIO_DIR=''${MINIO_DIR}" >> ''${basePath}/.develop.env
|
||||||
|
echo "MINIO_LOGFILE=''${MINIO_LOGFILE}" >> ''${basePath}/.develop.env
|
||||||
|
echo "UPLOAD_S3_HOST=localhost" >> ''${basePath}/.develop.env
|
||||||
|
echo "UPLOAD_S3_PORT=$(($PORT_OFFSET + 9000))" >> ''${basePath}/.develop.env
|
||||||
|
echo "UPLOAD_S3_SSL=false" >> ''${basePath}/.develop.env
|
||||||
|
echo "UPLOAD_S3_KEY_ID=''${MINIO_ACCESS_KEY}" >> ''${basePath}/.develop.env
|
||||||
|
echo "UPLOAD_S3_KEY=''${MINIO_SECRET_KEY}" >> ''${basePath}/.develop.env
|
||||||
|
|
||||||
export UPLOAD_S3_HOST=localhost UPLOAD_S3_PORT=$(($PORT_OFFSET + 9000)) UPLOAD_S3_SSL=false UPLOAD_S3_KEY_ID=''${MINIO_ACCESS_KEY} UPLOAD_S3_KEY=''${MINIO_SECRET_KEY}
|
if [ -n "$ZSH_VERSION" ]; then
|
||||||
|
autoload -U +X compinit && compinit
|
||||||
|
autoload -U +X bashcompinit && bashcompinit
|
||||||
|
fi
|
||||||
|
eval "$(stack --bash-completion-script stack)"
|
||||||
|
|
||||||
set +xe
|
$(getent passwd $USER | cut -d: -f 7)
|
||||||
fi
|
'';
|
||||||
|
in pkgs.mkShell {
|
||||||
if [ -n "$ZSH_VERSION" ]; then
|
name = "uni2work";
|
||||||
autoload -U +X compinit && compinit
|
|
||||||
autoload -U +X bashcompinit && bashcompinit
|
nativeBuildInputs = [develop] ++ (with pkgs; [ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client ]) ++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]);
|
||||||
fi
|
}
|
||||||
eval "$(stack --bash-completion-script stack)"
|
|
||||||
|
|
||||||
${oldAttrs.shellHook}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
dummy = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "interactive-uniworx-environment";
|
|
||||||
shellHook = "";
|
|
||||||
};
|
|
||||||
in pkgs.stdenv.lib.overrideDerivation dummy override
|
|
||||||
#pkgs.stdenv.lib.overrideDerivation drv.env override
|
|
||||||
|
|||||||
Reference in New Issue
Block a user