-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevenv.nix
112 lines (94 loc) · 2.51 KB
/
devenv.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
{ pkgs, lib, inputs, ... }:
let
pkgs-unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.system; };
# Generate a random number using a shell command
randomSuffix = builtins.readFile (pkgs.runCommand "random-suffix" {} ''
printf $((RANDOM % 10000)) > $out
'');
localtunnel-subdomain = "tololo-" + randomSuffix;
in
{
devcontainer.enable = true;
languages.elixir = {
enable = true;
package = pkgs-unstable.beamMinimal26Packages.elixir;
};
# https://devenv.sh/common-patterns/#configure-the-shell-based-on-the-current-machine
packages = [
pkgs.openssh
pkgs.less
pkgs.git
pkgs.gnumake
pkgs.grafana
pkgs.prometheus
pkgs.gnumake
pkgs.antora
pkgs.nodePackages_latest.localtunnel
pkgs.zsh
pkgs.oh-my-zsh
] ++ lib.optionals pkgs.stdenv.isLinux [
# for ExUnit notifier
pkgs.libnotify
# for package - file_system
pkgs.inotify-tools
] ++
# Darwin only
lib.optionals pkgs.stdenv.isDarwin [
# for ExUnit notifier
pkgs.terminal-notifier
# for package - file_system
pkgs.darwin.apple_sdk.frameworks.CoreFoundation
pkgs.darwin.apple_sdk.frameworks.CoreServices
];
# for Antora extensions
languages.javascript.enable = true;
languages.javascript.yarn = {
enable = true;
install.enable = true;
};
enterShell = ''
export PATH="$HOME/.mix/escripts:$PATH"
if [ ! -d ".devenv/state/grafana" ]; then
cp -rL .devenv/profile/share/grafana .devenv/state/grafana
chmod 777 -R .devenv/state/grafana
fi
if [ ! -d ".devenv/state/prometheus" ]; then
mkdir .devenv/state/prometheus
fi
'';
enterTest = ''
cd tololo
mix test
mix credo
'';
tasks = {
"mix:deps" = {
# overrides the imported task to cd
exec = ''
cd tololo
mix deps.get
'';
};
"mix:format" = {
# overrides the imported task to cd
exec = ''
cd tololo
mix format --check-formatted
'';
};
};
processes = {
grafana.exec = "grafana server --homepath .devenv/state/grafana";
prometheus.exec = "prometheus --storage.tsdb.path .devenv/state/prometheus/data";
localtunnel.exec = "lt -p 4000 -s ${localtunnel-subdomain}";
};
services.kafka.enable = true;
services.postgres = {
enable = true;
initialScript = ''
CREATE ROLE postgres WITH SUPERUSER LOGIN PASSWORD 'postgres';
'';
};
env.ADMIN_API_KEY = "test";
env.TELEGRAM_WEBHOOK = "https://${localtunnel-subdomain}.loca.lt/telegram";
}