aboutsummaryrefslogtreecommitdiff
path: root/nix
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2020-07-16 15:32:30 -0400
committerGitHub <noreply@github.com>2020-07-16 15:32:30 -0400
commit385d25c9f96c0acd5d932488e3bd0ed36ceb4dd7 (patch)
treeaf789f7250519b23038a7e5ea0ae7f4f4c1ffdfc /nix
parent449e934246c82d90dd0aac2644d67f928befeeb4 (diff)
downloadxesite-385d25c9f96c0acd5d932488e3bd0ed36ceb4dd7.tar.xz
xesite-385d25c9f96c0acd5d932488e3bd0ed36ceb4dd7.zip
Rewrite site backend in Rust (#178)
* add shell.nix changes for Rust #176 * set up base crate layout * add first set of dependencies * start adding basic app modules * start html templates * serve index page * add contact and feeds pages * add resume rendering support * resume cleanups * get signalboost page working * rewrite config to be in dhall * more work * basic generic post loading * more tests * initial blog index support * fix routing? * render blogposts * X-Clacks-Overhead * split blog handlers into blog.rs * gallery index * gallery posts * fix hashtags * remove instantpage (it messes up the metrics) * talk support + prometheus * Create rust.yml * Update rust.yml * Update codeql-analysis.yml * add jsonfeed library * jsonfeed support * rss/atom * go mod tidy * atom: add posted date * rss: add publishing date * nix: build rust program * rip out go code * rip out go templates * prepare for serving in docker * create kubernetes deployment * create automagic deployment * build docker images on non-master * more fixes * fix timestamps * fix RSS/Atom/JSONFeed validation errors * add go vanity import redirecting * templates/header: remove this * atom feed: fixes * fix? * fix?? * fix rust tests * Update rust.yml * automatically show snow during the winter * fix dates * show commit link in footer * sitemap support * fix compiler warning * start basic patreon client * integrate kankyo * fix patreon client * add patrons page * remove this * handle patron errors better * fix build * clean up deploy * sort envvars for deploy * remove deps.nix * shell.nix: remove go * update README * fix envvars for tests * nice * blog: add rewrite in rust post * blog/site-update: more words
Diffstat (limited to 'nix')
-rw-r--r--nix/deps.nix588
-rw-r--r--nix/sources.json12
2 files changed, 12 insertions, 588 deletions
diff --git a/nix/deps.nix b/nix/deps.nix
deleted file mode 100644
index 0bc6d12..0000000
--- a/nix/deps.nix
+++ /dev/null
@@ -1,588 +0,0 @@
-# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
-[
- {
- goPackagePath = "cloud.google.com/go";
- fetch = {
- type = "git";
- url = "https://code.googlesource.com/gocloud";
- rev = "v0.34.0";
- sha256 = "1kclgclwar3r37zbvb9gg3qxbgzkb50zk3s9778zlh2773qikmai";
- };
- }
- {
- goPackagePath = "github.com/alecthomas/template";
- fetch = {
- type = "git";
- url = "https://github.com/alecthomas/template";
- rev = "fb15b899a751";
- sha256 = "1vlasv4dgycydh5wx6jdcvz40zdv90zz1h7836z7lhsi2ymvii26";
- };
- }
- {
- goPackagePath = "github.com/alecthomas/units";
- fetch = {
- type = "git";
- url = "https://github.com/alecthomas/units";
- rev = "c3de453c63f4";
- sha256 = "0js37zlgv37y61j4a2d46jh72xm5kxmpaiw0ya9v944bjpc386my";
- };
- }
- {
- goPackagePath = "github.com/beorn7/perks";
- fetch = {
- type = "git";
- url = "https://github.com/beorn7/perks";
- rev = "v1.0.1";
- sha256 = "17n4yygjxa6p499dj3yaqzfww2g7528165cl13haj97hlx94dgl7";
- };
- }
- {
- goPackagePath = "github.com/celrenheit/sandflake";
- fetch = {
- type = "git";
- url = "https://github.com/celrenheit/sandflake";
- rev = "50a943690bc2";
- sha256 = "0ji76y79xqlx60bfxcik8zy5ha4gzhhi9qw020dkwqhbnbpaj6w2";
- };
- }
- {
- goPackagePath = "github.com/cespare/xxhash";
- fetch = {
- type = "git";
- url = "https://github.com/cespare/xxhash";
- rev = "v2.1.1";
- sha256 = "0rl5rs8546zj1vzggv38w93wx0b5dvav7yy5hzxa8kw7iikv1cgr";
- };
- }
- {
- goPackagePath = "github.com/davecgh/go-spew";
- fetch = {
- type = "git";
- url = "https://github.com/davecgh/go-spew";
- rev = "v1.1.1";
- sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
- };
- }
- {
- goPackagePath = "github.com/fsnotify/fsnotify";
- fetch = {
- type = "git";
- url = "https://github.com/fsnotify/fsnotify";
- rev = "v1.4.7";
- sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
- };
- }
- {
- goPackagePath = "github.com/go-kit/kit";
- fetch = {
- type = "git";
- url = "https://github.com/go-kit/kit";
- rev = "v0.9.0";
- sha256 = "09038mnw705h7isbjp8dzgp2i04bp5rqkmifxvwc5xkh75s00qpw";
- };
- }
- {
- goPackagePath = "github.com/go-logfmt/logfmt";
- fetch = {
- type = "git";
- url = "https://github.com/go-logfmt/logfmt";
- rev = "v0.4.0";
- sha256 = "06smxc112xmixz78nyvk3b2hmc7wasf2sl5vxj1xz62kqcq9lzm9";
- };
- }
- {
- goPackagePath = "github.com/go-stack/stack";
- fetch = {
- type = "git";
- url = "https://github.com/go-stack/stack";
- rev = "v1.8.0";
- sha256 = "0wk25751ryyvxclyp8jdk5c3ar0cmfr8lrjb66qbg4808x66b96v";
- };
- }
- {
- goPackagePath = "github.com/gogo/protobuf";
- fetch = {
- type = "git";
- url = "https://github.com/gogo/protobuf";
- rev = "v1.1.1";
- sha256 = "1525pq7r6h3s8dncvq8gxi893p2nq8dxpzvq0nfl5b4p6mq0v1c2";
- };
- }
- {
- goPackagePath = "github.com/golang/protobuf";
- fetch = {
- type = "git";
- url = "https://github.com/golang/protobuf";
- rev = "v1.4.0";
- sha256 = "1fjvl5n77abxz5qsd4mgyvjq19x43c5bfvmq62mq3m5plx6zksc8";
- };
- }
- {
- goPackagePath = "github.com/google/go-cmp";
- fetch = {
- type = "git";
- url = "https://github.com/google/go-cmp";
- rev = "v0.4.0";
- sha256 = "1x5pvl3fb5sbyng7i34431xycnhmx8xx94gq2n19g6p0vz68z2v2";
- };
- }
- {
- goPackagePath = "github.com/google/gofuzz";
- fetch = {
- type = "git";
- url = "https://github.com/google/gofuzz";
- rev = "v1.0.0";
- sha256 = "0qz439qvccm91w0mmjz4fqgx48clxdwagkvvx89cr43q1d4iry36";
- };
- }
- {
- goPackagePath = "github.com/gorilla/feeds";
- fetch = {
- type = "git";
- url = "https://github.com/gorilla/feeds";
- rev = "v1.1.1";
- sha256 = "1lwqibra4hyzx0jhaz12rfhfnw73bmdf8cn9r51nqidk8k7zf7sg";
- };
- }
- {
- goPackagePath = "github.com/hpcloud/tail";
- fetch = {
- type = "git";
- url = "https://github.com/hpcloud/tail";
- rev = "v1.0.0";
- sha256 = "1njpzc0pi1acg5zx9y6vj9xi6ksbsc5d387rd6904hy6rh2m6kn0";
- };
- }
- {
- goPackagePath = "github.com/joho/godotenv";
- fetch = {
- type = "git";
- url = "https://github.com/joho/godotenv";
- rev = "v1.3.0";
- sha256 = "0ri8if0pc3x6jg4c3i8wr58xyfpxkwmcjk3rp8gb398a1aa3gpjm";
- };
- }
- {
- goPackagePath = "github.com/json-iterator/go";
- fetch = {
- type = "git";
- url = "https://github.com/json-iterator/go";
- rev = "v1.1.9";
- sha256 = "0pkn2maymgl9v6vmq9q1si8xr5bbl88n6981y0lx09px6qxb29qx";
- };
- }
- {
- goPackagePath = "github.com/julienschmidt/httprouter";
- fetch = {
- type = "git";
- url = "https://github.com/julienschmidt/httprouter";
- rev = "v1.2.0";
- sha256 = "1k8bylc9s4vpvf5xhqh9h246dl1snxrzzz0614zz88cdh8yzs666";
- };
- }
- {
- goPackagePath = "github.com/konsorten/go-windows-terminal-sequences";
- fetch = {
- type = "git";
- url = "https://github.com/konsorten/go-windows-terminal-sequences";
- rev = "v1.0.1";
- sha256 = "1lchgf27n276vma6iyxa0v1xds68n2g8lih5lavqnx5x6q5pw2ip";
- };
- }
- {
- goPackagePath = "github.com/kr/logfmt";
- fetch = {
- type = "git";
- url = "https://github.com/kr/logfmt";
- rev = "b84e30acd515";
- sha256 = "02ldzxgznrfdzvghfraslhgp19la1fczcbzh7wm2zdc6lmpd1qq9";
- };
- }
- {
- goPackagePath = "github.com/kr/pretty";
- fetch = {
- type = "git";
- url = "https://github.com/kr/pretty";
- rev = "v0.1.0";
- sha256 = "18m4pwg2abd0j9cn5v3k2ksk9ig4vlwxmlw9rrglanziv9l967qp";
- };
- }
- {
- goPackagePath = "github.com/kr/pty";
- fetch = {
- type = "git";
- url = "https://github.com/kr/pty";
- rev = "v1.1.1";
- sha256 = "0383f0mb9kqjvncqrfpidsf8y6ns5zlrc91c6a74xpyxjwvzl2y6";
- };
- }
- {
- goPackagePath = "github.com/kr/text";
- fetch = {
- type = "git";
- url = "https://github.com/kr/text";
- rev = "v0.1.0";
- sha256 = "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1";
- };
- }
- {
- goPackagePath = "github.com/leanovate/gopter";
- fetch = {
- type = "git";
- url = "https://github.com/leanovate/gopter";
- rev = "634a59d12406";
- sha256 = "0rjx9niww7qxiqch6lwq9gibvxi41nm112yg5mzl3hpi084mb94c";
- };
- }
- {
- goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
- fetch = {
- type = "git";
- url = "https://github.com/matttproud/golang_protobuf_extensions";
- rev = "v1.0.1";
- sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
- };
- }
- {
- goPackagePath = "github.com/modern-go/concurrent";
- fetch = {
- type = "git";
- url = "https://github.com/modern-go/concurrent";
- rev = "bacd9c7ef1dd";
- sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
- };
- }
- {
- goPackagePath = "github.com/modern-go/reflect2";
- fetch = {
- type = "git";
- url = "https://github.com/modern-go/reflect2";
- rev = "v1.0.1";
- sha256 = "06a3sablw53n1dqqbr2f53jyksbxdmmk8axaas4yvnhyfi55k4lf";
- };
- }
- {
- goPackagePath = "github.com/mwitkow/go-conntrack";
- fetch = {
- type = "git";
- url = "https://github.com/mwitkow/go-conntrack";
- rev = "cc309e4a2223";
- sha256 = "0nbrnpk7bkmqg9mzwsxlm0y8m7s9qd9phr1q30qlx2qmdmz7c1mf";
- };
- }
- {
- goPackagePath = "github.com/mxpv/patreon-go";
- fetch = {
- type = "git";
- url = "https://github.com/mxpv/patreon-go";
- rev = "646111f1d983";
- sha256 = "0cksf3andl8z04lychay2j0l8wrpdq7j5pdb6zy5yr4990iab6aa";
- };
- }
- {
- goPackagePath = "github.com/onsi/ginkgo";
- fetch = {
- type = "git";
- url = "https://github.com/onsi/ginkgo";
- rev = "v1.7.0";
- sha256 = "14wgpdrvpc35rdz3859bz53sc1g4vpr1fysy15wy3ff9gmqs14yg";
- };
- }
- {
- goPackagePath = "github.com/onsi/gomega";
- fetch = {
- type = "git";
- url = "https://github.com/onsi/gomega";
- rev = "v1.4.3";
- sha256 = "1c8rqg5i2hz3snmq7s41yar1zjnzilb0fyiyhkg83v97afcfx79v";
- };
- }
- {
- goPackagePath = "github.com/philandstuff/dhall-golang";
- fetch = {
- type = "git";
- url = "https://github.com/philandstuff/dhall-golang";
- rev = "v1.0.0";
- sha256 = "1ir3yhjbkqgk1z1q2v6vgbrw4q1n086mi9mbxpjrn2yn09k1h8l1";
- };
- }
- {
- goPackagePath = "github.com/pkg/errors";
- fetch = {
- type = "git";
- url = "https://github.com/pkg/errors";
- rev = "v0.8.1";
- sha256 = "0g5qcb4d4fd96midz0zdk8b9kz8xkzwfa8kr1cliqbg8sxsy5vd1";
- };
- }
- {
- goPackagePath = "github.com/pmezard/go-difflib";
- fetch = {
- type = "git";
- url = "https://github.com/pmezard/go-difflib";
- rev = "v1.0.0";
- sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
- };
- }
- {
- goPackagePath = "github.com/povilasv/prommod";
- fetch = {
- type = "git";
- url = "https://github.com/povilasv/prommod";
- rev = "v0.0.12";
- sha256 = "1fcmlrx0hyvwxk67p01avaz3myis3jyamhfwmyx4crgyhdc6pbb7";
- };
- }
- {
- goPackagePath = "github.com/prometheus/client_golang";
- fetch = {
- type = "git";
- url = "https://github.com/prometheus/client_golang";
- rev = "v1.6.0";
- sha256 = "0wwkx69in9dy5kzd3z6rrqf5by8cwl9r7r17fswcpx9rl3g61x1l";
- };
- }
- {
- goPackagePath = "github.com/prometheus/client_model";
- fetch = {
- type = "git";
- url = "https://github.com/prometheus/client_model";
- rev = "v0.2.0";
- sha256 = "0jffnz94d6ff39fr96b5w8i8yk26pwnrfggzz8jhi8k0yihg2c9d";
- };
- }
- {
- goPackagePath = "github.com/prometheus/common";
- fetch = {
- type = "git";
- url = "https://github.com/prometheus/common";
- rev = "v0.9.1";
- sha256 = "12pyywb02p7d30ccm41mwn69qsgqnsgv1w9jlqrrln2f1svnbqch";
- };
- }
- {
- goPackagePath = "github.com/prometheus/procfs";
- fetch = {
- type = "git";
- url = "https://github.com/prometheus/procfs";
- rev = "v0.0.11";
- sha256 = "1msc8bfywsmrgr2ryqjdqwkxiz1ll08r3qgvaka2507z1wpcpj2c";
- };
- }
- {
- goPackagePath = "github.com/russross/blackfriday";
- fetch = {
- type = "git";
- url = "https://github.com/russross/blackfriday";
- rev = "v2.0.0";
- sha256 = "10xh4zak0qbdi15nik2y72c7nn0k6vsc1iawkwx5v38cwp6hzszl";
- };
- }
- {
- goPackagePath = "github.com/sebest/xff";
- fetch = {
- type = "git";
- url = "https://github.com/sebest/xff";
- rev = "6c115e0ffa35";
- sha256 = "0l11d8mc870vxzgi74cc9dqr7kgxjmbfkfi53gc30rsyx877jx4h";
- };
- }
- {
- goPackagePath = "github.com/shurcooL/sanitized_anchor_name";
- fetch = {
- type = "git";
- url = "https://github.com/shurcooL/sanitized_anchor_name";
- rev = "v1.0.0";
- sha256 = "1gv9p2nr46z80dnfjsklc6zxbgk96349sdsxjz05f3z6wb6m5l8f";
- };
- }
- {
- goPackagePath = "github.com/sirupsen/logrus";
- fetch = {
- type = "git";
- url = "https://github.com/sirupsen/logrus";
- rev = "v1.4.2";
- sha256 = "087k2lxrr9p9dh68yw71d05h5g9p5v26zbwd6j7lghinjfaw334x";
- };
- }
- {
- goPackagePath = "github.com/snabb/diagio";
- fetch = {
- type = "git";
- url = "https://github.com/snabb/diagio";
- rev = "v1.0.0";
- sha256 = "0g4swgx30gaq0a0l71qd7c1q3dq6q8xcdnwp8063lrv8vqf3xplg";
- };
- }
- {
- goPackagePath = "github.com/snabb/sitemap";
- fetch = {
- type = "git";
- url = "https://github.com/snabb/sitemap";
- rev = "v1.0.0";
- sha256 = "0mb8r4r7dqqwdi3f9brcsqp469rsn621x9h2ahc601arjiv1zk0c";
- };
- }
- {
- goPackagePath = "github.com/stretchr/objx";
- fetch = {
- type = "git";
- url = "https://github.com/stretchr/objx";
- rev = "v0.1.1";
- sha256 = "0iph0qmpyqg4kwv8jsx6a56a7hhqq8swrazv40ycxk9rzr0s8yls";
- };
- }
- {
- goPackagePath = "github.com/stretchr/testify";
- fetch = {
- type = "git";
- url = "https://github.com/stretchr/testify";
- rev = "v1.5.1";
- sha256 = "09r89m1wy4cjv2nps1ykp00qjpi0531r07q3s34hr7m6njk4srkl";
- };
- }
- {
- goPackagePath = "github.com/ugorji/go";
- fetch = {
- type = "git";
- url = "https://github.com/ugorji/go";
- rev = "a2c9fa250719";
- sha256 = "10l24bp2vj5c99lxlkzm9icja265jmpki813v3s32ibam590virx";
- };
- }
- {
- goPackagePath = "golang.org/x/crypto";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/crypto";
- rev = "c2843e01d9a2";
- sha256 = "01xgxbj5r79nmisdvpq48zfy8pzaaj90bn6ngd4nf33j9ar1dp8r";
- };
- }
- {
- goPackagePath = "golang.org/x/net";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/net";
- rev = "d28f0bde5980";
- sha256 = "18xj31h70m7xxb7gc86n9i21w6d7djbjz67zfaljm4jqskz6hxkf";
- };
- }
- {
- goPackagePath = "golang.org/x/oauth2";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/oauth2";
- rev = "bf48bf16ab8d";
- sha256 = "1sirdib60zwmh93kf9qrx51r8544k1p9rs5mk0797wibz3m4mrdg";
- };
- }
- {
- goPackagePath = "golang.org/x/sync";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/sync";
- rev = "cd5d95a43a6e";
- sha256 = "1nqkyz2y1qvqcma52ijh02s8aiqmkfb95j08f6zcjhbga3ds6hds";
- };
- }
- {
- goPackagePath = "golang.org/x/sys";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/sys";
- rev = "1957bb5e6d1f";
- sha256 = "0imqk4l9785rw7ddvywyf8zn7k3ga6f17ky8rmf8wrri7nknr03f";
- };
- }
- {
- goPackagePath = "golang.org/x/text";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/text";
- rev = "v0.3.0";
- sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
- };
- }
- {
- goPackagePath = "golang.org/x/xerrors";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/xerrors";
- rev = "9bdfabe68543";
- sha256 = "1yjfi1bk9xb81lqn85nnm13zz725wazvrx3b50hx19qmwg7a4b0c";
- };
- }
- {
- goPackagePath = "google.golang.org/appengine";
- fetch = {
- type = "git";
- url = "https://github.com/golang/appengine";
- rev = "v1.4.0";
- sha256 = "06zl7w4sxgdq2pl94wy9ncii6h0z3szl4xpqds0sv3b3wbdlhbnn";
- };
- }
- {
- goPackagePath = "google.golang.org/protobuf";
- fetch = {
- type = "git";
- url = "https://go.googlesource.com/protobuf";
- rev = "v1.21.0";
- sha256 = "12bwln8z1lf9105gdp6ip0rx741i4yfz1520gxnp8861lh9wcl63";
- };
- }
- {
- goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
- fetch = {
- type = "git";
- url = "https://gopkg.in/alecthomas/kingpin.v2";
- rev = "v2.2.6";
- sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
- };
- }
- {
- goPackagePath = "gopkg.in/check.v1";
- fetch = {
- type = "git";
- url = "https://gopkg.in/check.v1";
- rev = "41f04d3bba15";
- sha256 = "0vfk9czmlxmp6wndq8k17rhnjxal764mxfhrccza7nwlia760pjy";
- };
- }
- {
- goPackagePath = "gopkg.in/fsnotify.v1";
- fetch = {
- type = "git";
- url = "https://gopkg.in/fsnotify.v1";
- rev = "v1.4.7";
- sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
- };
- }
- {
- goPackagePath = "gopkg.in/tomb.v1";
- fetch = {
- type = "git";
- url = "https://gopkg.in/tomb.v1";
- rev = "dd632973f1e7";
- sha256 = "1lqmq1ag7s4b3gc3ddvr792c5xb5k6sfn0cchr3i2s7f1c231zjv";
- };
- }
- {
- goPackagePath = "gopkg.in/yaml.v2";
- fetch = {
- type = "git";
- url = "https://gopkg.in/yaml.v2";
- rev = "v2.2.8";
- sha256 = "1inf7svydzscwv9fcjd2rm61a4xjk6jkswknybmns2n58shimapw";
- };
- }
- {
- goPackagePath = "within.website/ln";
- fetch = {
- type = "git";
- url = "https://github.com/Xe/ln";
- rev = "v0.9.0";
- sha256 = "1djbjwkyqlvf5gy5jvx0z9mm3g56fg2jjmv0ghwzlvwwpx5h338l";
- };
- }
-]
diff --git a/nix/sources.json b/nix/sources.json
index 670fcbd..50de672 100644
--- a/nix/sources.json
+++ b/nix/sources.json
@@ -11,6 +11,18 @@
"url": "https://github.com/justinwoo/easy-dhall-nix/archive/735ad924fd829c9bbee0a167e0b2bbbf91e2cad5.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
+ "naersk": {
+ "branch": "master",
+ "description": "Build rust crates in Nix. No configuration, no code generation, no IFD. Sandbox friendly.",
+ "homepage": "",
+ "owner": "nmattia",
+ "repo": "naersk",
+ "rev": "d5a23213d561893cebdf0d251502430334673036",
+ "sha256": "0ifvqv3vjg80hhgxr7b22i22gh2gxw0gm5iijd9r7y4qd7n2yrcp",
+ "type": "tarball",
+ "url": "https://github.com/nmattia/naersk/archive/d5a23213d561893cebdf0d251502430334673036.tar.gz",
+ "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
+ },
"niv": {
"branch": "master",
"description": "Easy dependency management for Nix projects",