aboutsummaryrefslogtreecommitdiff
path: root/example/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'example/flake.nix')
-rw-r--r--example/flake.nix88
1 files changed, 88 insertions, 0 deletions
diff --git a/example/flake.nix b/example/flake.nix
new file mode 100644
index 0000000..8557265
--- /dev/null
+++ b/example/flake.nix
@@ -0,0 +1,88 @@
1{
2 description = "Example of a Flake using flaky-utils.";
3
4 inputs = {
5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
6 flake-utils.url = "github:numtide/flake-utils";
7 flaky-utils.url = "git+https://cgit.pacien.net/libs/flaky-utils";
8 };
9
10 outputs = { self, nixpkgs, flake-utils, flaky-utils }:
11 flake-utils.lib.eachDefaultSystem (system: let
12 pkgs = import nixpkgs { inherit system; };
13 in pkgs.lib.fold pkgs.lib.recursiveUpdate { } [
14
15 {
16 # Convenience development shell providing some tools.
17 #
18 # The binaries made available and the environment variable set are
19 # printed when entering the shell.
20 #
21 # The user's default shell is used instead of Bash (sacrifying a bit of
22 # reproducibility for convenience).
23 #
24 devShell = flaky-utils.lib.mkDevShell {
25 inherit pkgs;
26
27 tools = with pkgs; [
28 postgresql_14
29 pgcli
30 ];
31
32 envVars = rec {
33 PGDATA = "$PWD/development_database/pgdata";
34 PGHOST = "$PWD/development_database";
35 PGPORT = "5432";
36 PGDATABASE = "app";
37 DATABASE_URL = "postgresql:///${PGDATABASE}?host=${PGHOST}";
38 };
39
40 shell = null;
41 };
42 }
43
44 # Convenience isolated environment using a QEMU virtual machine.
45 #
46 # This defines a triplet of nixosConfiguration, package and app with the
47 # given name, so that the virtual machine can be launched using
48 # a command like `nix run .#sandbox`.
49 #
50 # By default, the VM is launched in the current console without a graphical
51 # interface, dropping to a shell for the default dummy user within.
52 #
53 # The current working directory from which the Flake is run is mounted and
54 # made available within the virtual machine in /mnt. The root filesystem
55 # is ephemeral (written to a temporary file in /tmp).
56 #
57 # The virtual machine's network is isolated by default: it cannot access
58 # the Internet nor the host's local network. Ports may nevertheless be
59 # forwarded explicitly from host to guest and vice-versa.
60 #
61 (flaky-utils.lib.mkSandboxSystem {
62 inherit nixpkgs system;
63
64 name = "sandbox";
65 user = "dummy";
66
67 config = {
68 virtualisation.forwardPorts = [
69 { from = "host"; host.port = 5432; guest.port = 5432; } # postgres
70 ];
71
72 services.postgresql = {
73 enable = true;
74 enableTCPIP = true;
75
76 authentication = ''
77 host all all 0.0.0.0/0 trust
78 '';
79
80 initialScript = pkgs.writeText "init.sql" ''
81 create role dummy login superuser;
82 '';
83 };
84 };
85 })
86
87 ]);
88}