1+ { system ? builtins . currentSystem
2+ , nixpkgs ? import ./nixpkgs.nix { inherit system ; }
3+ } :
4+ let
5+ sources = import ./sources.nix ;
6+ devshell = import sources . devshell { pkgs = nixpkgs ; } ;
7+ tf = nixpkgs . terraform . withPlugins ( p : [
8+ p . aws
9+ p . cloudflare
10+ p . external
11+ p . grafana
12+ ( nixpkgs . callPackage ./pkgs/terraform-provider-htpasswd { } )
13+ p . helm
14+ p . http
15+ p . kafka
16+ p . kubernetes
17+ p . local
18+ p . null
19+ p . random
20+ p . secret
21+ p . template
22+ p . tls
23+ ] ) ;
24+
25+
26+ # Q third-party libs
27+ kfk = nixpkgs . callPackage ./pkgs/kfk { } ; # "kafka-kdb"
28+ log4q = nixpkgs . callPackage ./pkgs/log4q { } ;
29+ protobufkdb = nixpkgs . callPackage ./pkgs/protobufkdb { } ;
30+ qAbiEncode = nixpkgs . callPackage ./pkgs/qAbiEncode { } ;
31+ qbigint = nixpkgs . callPackage ./pkgs/qbigint { } ;
32+ qquartic = nixpkgs . callPackage ./pkgs/qquartic { } ;
33+ qunit = nixpkgs . callPackage ./pkgs/qunit { } ;
34+ qwebapi = nixpkgs . callPackage ./pkgs/qwebapi { } ;
35+ # Bundle them all into one big package
36+ qVendorLibs = nixpkgs . symlinkJoin {
37+ name = "q-libs" ;
38+ paths = [
39+ kfk
40+ log4q
41+ protobufkdb
42+ qAbiEncode
43+ qbigint
44+ qquartic
45+ qunit
46+ qwebapi
47+ ] ;
48+ } ;
49+
50+ q = nixpkgs . callPackage ./pkgs/q {
51+ # Make those part of the base binary
52+ qLibs = qVendorLibs ;
53+ } ;
54+
55+ # kdb source
56+ kdbLibs = nixpkgs . symlinkJoin {
57+ name = "kdb-libs" ;
58+ paths = [
59+ # Get the protobufs
60+ ( nixpkgs . runCommandNoCC "manifold-protos-q" { } ''
61+ mkdir -p $out/q/proto
62+ cp ${ manifoldProtos } /*.proto $out/q/proto
63+ '' )
64+ # Get the rest of the source
65+ ( nixpkgs . runCommandNoCC "manifold-q"
66+ {
67+ src = builtins . path {
68+ path = ../modules/kdb/src/main/q ;
69+ filter = name : type :
70+ with nixpkgs . lib ;
71+ if type == "directory" then
72+ # Avoid adding the old DB folder in there
73+ ! hasSuffix "/db" name
74+ else # regular files
75+ # Only add .q and .sh files
76+ hasSuffix ".q" name || hasSuffix ".sh" name ;
77+ } ;
78+ } ''
79+ mkdir $out
80+ cp -r $src $out/q
81+ chmod +w $out/q
82+ patchShebangs $out/q
83+ '' )
84+ ] ;
85+ } ;
86+
87+ kdb-container = nixpkgs . dockerTools . buildLayeredImage {
88+ name = "<% NAME %>" ;
89+ tag = "dev" ;
90+ contents = [
91+ nixpkgs . bashInteractive # for debugging
92+ nixpkgs . coreutils
93+ nixpkgs . gnused
94+ nixpkgs . dockerTools . fakeNss # otherwise q just outputs pwuid
95+ q
96+ kdbLibs
97+ ] ;
98+ maxLayers = 15 ;
99+ config = {
100+ Cmd = [ "/q/start.sh" ] ;
101+ Env = [
102+ "QHOME=/q"
103+ "QDB=/qdb"
104+ ] ;
105+ Volumes = {
106+ "/qdb" = { } ;
107+ } ;
108+ WorkingDir = "/" ;
109+ } ;
110+ extraCommands = ''
111+ # make sure /tmp exists
112+ mkdir -m 1777 tmp
113+ '' ;
114+ } ;
115+
116+
117+ packages = [
118+ # Used to invoke q scripts
119+ nixpkgs . rlwrap
120+ q
121+
122+
123+ commands = [
124+ { name = "gradle" ; category = "dev" ; help = "gradle build system" ; command = ''$PRJ_ROOT/gradlew "$@"'' ; }
125+ { name = "j" ; category = "dev" ; help = "just a command runner" ; command = ''${ nixpkgs . just } /bin/just "$@"'' ; }
126+ { category = "dev" ; package = nixpkgs . yarn ; }
127+ { name = "tf" ; category = "ops" ; help = "terraform alias" ; command = ''${ tf } /bin/terraform "$@"'' ; }
128+ ] ;
129+ } ;
130+
131+
132+ nixos-configs = ( nixpkgs . lib . recurseIntoAttrs ( import ../ops/nixos/configs { inherit ( nixpkgs ) lib nixos ; } ) ) ;
133+ }
0 commit comments