about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-02-06T21·39+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-02-07T11·01+0000
commitb47ca8b8769883557ac1ef62a6fb1cd815f08fb6 (patch)
tree3f4e7443b5c50c9489d3332360b61af3d53e1608
parenta91d00fd94817453c0be43b87d722153cc35c03d (diff)
Support lorri
From what I currently understand, lorri is a tool (sponsored by Target) that
uses nix and direnv to build and switch between environments quickly and
easily.

When you run `lorri init` inside of a directory, lorri creates a shell.nix and
an .envrc file. The .envrc file calls `eval "$(lorri direnv)"` and the shell.nix
calls `<nixpkgs>.mkShell`, which creates a shell environment exposing
dependencies on $PATH and environment variables. lorri uses direnv to ensure
that $PATH and the environment variables are available depending on your CWD.

lorri becomes especially powerful because of Emacs's `direnv-mode`, which
ensures that Emacs buffers can access anything exposed by direnv as well.

I still need to learn more about how lorri works and how it will affect my
workflow, but I'm enjoying what I've seen thus far, and I'm optimistic about the
road ahead.
-rw-r--r--.envrc8
-rw-r--r--monzo_ynab/.envrc5
-rw-r--r--monzo_ynab/shell.nix9
-rw-r--r--shell.nix14
4 files changed, 29 insertions, 7 deletions
diff --git a/.envrc b/.envrc
index 1e44420ed401..051d09d292a8 100644
--- a/.envrc
+++ b/.envrc
@@ -1,7 +1 @@
-export BRIEFCASE=~/briefcase
-export DEPOT=~/depot
-export NIXPKGS=$HOME/nixpkgs
-export DESKTOP=zeno.lon.corp.google.com
-export LAPTOP=seneca
-export CLOUDTOP=wpcarro.c.googlers.com
-NIX_PATH=nixpkgs=$NIXPKGS:depot=$DEPOT:briefcase=$BRIEFCASE
+eval "$(lorri direnv)"
diff --git a/monzo_ynab/.envrc b/monzo_ynab/.envrc
index 265077343800..121cc134de18 100644
--- a/monzo_ynab/.envrc
+++ b/monzo_ynab/.envrc
@@ -1,5 +1,10 @@
 # source_up traversing up directories until it finds the nearest .envrc file,
 # which it uses to extend the environment in this .envrc.
+#
+# Since ../.envrc calls `eval "$(lorri direnv)"`, the buildInputs and variables
+# definitions inside of the attribute set passed to pkgs.mkShell become
+# available here as well.
 source_up
 export client_id="$(pass show finance/monzo/client-id)"
 export client_secret="$(pass show finance/monzo/client-secret)"
+eval "$(lorri direnv)"
diff --git a/monzo_ynab/shell.nix b/monzo_ynab/shell.nix
new file mode 100644
index 000000000000..836718d85f29
--- /dev/null
+++ b/monzo_ynab/shell.nix
@@ -0,0 +1,9 @@
+{ pkgs ? import <nixpkgs> {}, ... }:
+
+pkgs.mkShell {
+  buildInputs = [
+    pkgs.go
+    pkgs.goimports
+    pkgs.godef
+  ];
+}
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 000000000000..ef8960b822db
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,14 @@
+{ pkgs ? import <nixpkgs> {}, ... }:
+
+pkgs.mkShell rec {
+  buildInputs = [];
+  # TODO(wpcarro): How does pkgs.mkShell handle exported and non-exported
+  # variable definitions?
+  BRIEFCASE = builtins.toPath ~/briefcase;
+  DEPOT = builtins.toPath ~/depot;
+  NIXPKGS = builtins.toPath ~/nixpkgs;
+  NIX_PATH="nixpkgs=${NIXPKGS}:depot=${DEPOT}:briefcase=${BRIEFCASE}";
+  DESKTOP = "zeno.lon.corp.google.com";
+  LAPTOP = "seneca";
+  CLOUDTOP = "wpcarro.c.googlers.com";
+}