diff options
author | pacien | 2021-07-24 13:03:57 +0200 |
---|---|---|
committer | pacien | 2021-07-24 13:03:57 +0200 |
commit | 14f70e92e249f56ecf413fa8f262cb6120ea3350 (patch) | |
tree | c7c0a7d1d2a27adb02f09765a2c5b06059ee9a82 | |
parent | 431fca39b8ea7ed55d2e6aafede28145009a8727 (diff) | |
download | uge_l2_rdbms_python_proto-14f70e92e249f56ecf413fa8f262cb6120ea3350.tar.gz |
flake: add devel env with isolated postgresql
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | flake.nix | 82 |
2 files changed, 83 insertions, 0 deletions
@@ -1,3 +1,4 @@ | |||
1 | development_database | ||
1 | *~ | 2 | *~ |
2 | *.swp | 3 | *.swp |
3 | *.swo | 4 | *.swo |
diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..e09265f --- /dev/null +++ b/flake.nix | |||
@@ -0,0 +1,82 @@ | |||
1 | # UGE / L2 / Intro to relational databases / Python project prototype | ||
2 | # Author: Pacien TRAN-GIRARD | ||
3 | # Licence: EUPL-1.2 | ||
4 | |||
5 | { | ||
6 | inputs = { | ||
7 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-21.05"; | ||
8 | flake-utils.url = "github:numtide/flake-utils"; | ||
9 | }; | ||
10 | |||
11 | outputs = { self, nixpkgs, flake-utils }: | ||
12 | flake-utils.lib.eachDefaultSystem (system: | ||
13 | with import nixpkgs { inherit system; }; | ||
14 | let | ||
15 | |||
16 | develPackagesAndScripts = [ | ||
17 | postgresql_13 # PostgreSQL server with the standard admin tools. | ||
18 | |||
19 | # More pleasant alternative to psql, with colours and auto-completion. | ||
20 | # Custom configuration to suppress irrelevant warnings and messages. | ||
21 | (writeShellScriptBin "pgcli" '' | ||
22 | ${pgcli}/bin/pgcli --pgclirc "${writeText "pgclirc" '' | ||
23 | [main] | ||
24 | keyring = False | ||
25 | less_chatty = True | ||
26 | ''}" "$@" | ||
27 | '') | ||
28 | |||
29 | # Script for initialising an independent development database. | ||
30 | # This creates a default empty database name "postgres" and owned by the | ||
31 | # current user. Data are stored in ./development_database/pgdata. | ||
32 | (writeShellScriptBin "dev-initdb" '' | ||
33 | initdb \ | ||
34 | --no-locale \ | ||
35 | --encoding UTF8 \ | ||
36 | --auth-host reject \ | ||
37 | --auth-local peer \ | ||
38 | "$@" | ||
39 | '') | ||
40 | |||
41 | # Script for starting an independent development posgresql server. | ||
42 | # Accepts connections only through a local UNIX-domain socket. | ||
43 | (writeShellScriptBin "dev-postgres" '' | ||
44 | postgres \ | ||
45 | -h "" \ | ||
46 | -k "$PGHOST" \ | ||
47 | -d 2 \ | ||
48 | "$@" | ||
49 | '') | ||
50 | ]; | ||
51 | |||
52 | exportEnvVar = k: v: ''export ${k}="${v}"; echo ${k}=\"${v}\"''; | ||
53 | exportDevelEnvVars = lib.mapAttrsToList exportEnvVar develEnvVars; | ||
54 | develEnvVars = rec { | ||
55 | PGDATA = "$PWD/development_database/pgdata"; | ||
56 | PGHOST = "$PWD/development_database"; | ||
57 | PGPORT = "5432"; | ||
58 | PGDATABASE = "app"; | ||
59 | }; | ||
60 | |||
61 | in { | ||
62 | |||
63 | devShell = mkShell rec { | ||
64 | buildInputs = develPackagesAndScripts; | ||
65 | |||
66 | shellHook = '' | ||
67 | echo -e "\nDEVSHELL ENVIRONMENT VARIABLES:" | ||
68 | ${lib.concatStringsSep "\n" exportDevelEnvVars} | ||
69 | |||
70 | echo -e "\nDEVSHELL COMMANDS:" | ||
71 | ls "${symlinkJoin { name = "env"; paths = buildInputs; }}/bin" | ||
72 | |||
73 | # Use the default user shell instead of Bash | ||
74 | $(${finger_bsd}/bin/finger $USER \ | ||
75 | | ${gnugrep}/bin/grep -oP 'Shell: \K.*') | ||
76 | |||
77 | exit $? | ||
78 | ''; | ||
79 | }; | ||
80 | |||
81 | }); | ||
82 | } | ||