-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
127 lines (106 loc) · 4.16 KB
/
Copy pathflake.nix
File metadata and controls
127 lines (106 loc) · 4.16 KB
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{
description = "Scala development environment for the Telegram bot";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
jdk17 = pkgs.temurin-bin-17;
jdk21 = pkgs.temurin-bin-21;
notebookLmSetup = pkgs.writeShellScriptBin "setup-notebooklm" ''
set -euo pipefail
if [[ -d "./scala-bot" ]]; then
project_dir="./scala-bot"
elif [[ -f "./build.sbt" ]]; then
project_dir="."
else
echo "Run this command from the repository root or from scala-bot/." >&2
exit 1
fi
venv_dir="$project_dir/.venv-notebooklm"
browser_dir="$project_dir/.playwright-browsers"
python_bin="${pkgs.python3}/bin/python3"
uv_bin="${pkgs.uv}/bin/uv"
if [[ ! -d "$venv_dir" ]]; then
"$uv_bin" venv "$venv_dir" --python "$python_bin"
fi
"$uv_bin" pip install \
--python "$venv_dir/bin/python" \
"notebooklm-py[browser]"
mkdir -p "$browser_dir"
PATH="$venv_dir/bin:$PATH" \
PLAYWRIGHT_BROWSERS_PATH="$PWD/$browser_dir" \
"$venv_dir/bin/playwright" install chromium
cat <<EOF
NotebookLM environment is ready.
Next steps:
1. export NOTEBOOKLM_COMMAND="$PWD/$venv_dir/bin/notebooklm"
2. export PATH="$PWD/$venv_dir/bin:\$PATH"
3. export PLAYWRIGHT_BROWSERS_PATH="$PWD/$browser_dir"
4. notebooklm login
5. keep using nix develop for bot runs
EOF
'';
makeDevShell = jdk: pkgs.mkShell {
packages = [
jdk
pkgs.sbt
pkgs.metals
pkgs.python3
pkgs.uv
pkgs.nodejs
pkgs.playwright-driver
notebookLmSetup
];
JAVA_HOME = "${jdk}";
METALS_JAVA_HOME = "${jdk}";
PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = "true";
PLAYWRIGHT_NODEJS_PATH = "${pkgs.nodejs}/bin/node";
shellHook = ''
export TMPDIR=/tmp
export SBT_GLOBAL_BASE=/tmp/engineeringnewsbot-sbt-global
export SBT_BOOT_DIR=/tmp/engineeringnewsbot-sbt-boot
export IVY_HOME=/tmp/engineeringnewsbot-ivy2
export COURSIER_CACHE=/tmp/engineeringnewsbot-coursier
mkdir -p \
"$SBT_GLOBAL_BASE" \
"$SBT_BOOT_DIR" \
"$IVY_HOME" \
"$COURSIER_CACHE"
export JAVA_TOOL_OPTIONS="-Djava.io.tmpdir=/tmp ''${JAVA_TOOL_OPTIONS:-}"
export _JAVA_OPTIONS="-Djava.io.tmpdir=/tmp ''${_JAVA_OPTIONS:-}"
export SBT_OPTS="-Xmx2G -XX:+UseG1GC -Djava.io.tmpdir=/tmp -Dsbt.io.tmpdir=/tmp -Dsbt.global.base=$SBT_GLOBAL_BASE -Dsbt.boot.directory=$SBT_BOOT_DIR -Divy.home=$IVY_HOME ''${SBT_OPTS:-}"
if [[ -d "$PWD/scala-bot" ]]; then
export NOTEBOOKLM_PROJECT_DIR="$PWD/scala-bot"
elif [[ -f "$PWD/build.sbt" ]]; then
export NOTEBOOKLM_PROJECT_DIR="$PWD"
else
export NOTEBOOKLM_PROJECT_DIR="$PWD"
fi
export PLAYWRIGHT_BROWSERS_PATH="$NOTEBOOKLM_PROJECT_DIR/.playwright-browsers"
if [[ -d "$NOTEBOOKLM_PROJECT_DIR/.venv-notebooklm/bin" ]]; then
export PATH="$NOTEBOOKLM_PROJECT_DIR/.venv-notebooklm/bin:$PATH"
fi
if [[ -x "$NOTEBOOKLM_PROJECT_DIR/.venv-notebooklm/bin/notebooklm" ]]; then
export NOTEBOOKLM_COMMAND="$NOTEBOOKLM_PROJECT_DIR/.venv-notebooklm/bin/notebooklm"
fi
echo "Scala dev shell ready"
echo "Java: $(java -version 2>&1 | head -1)"
echo "Use: cd scala-bot && sbt run"
echo "NotebookLM setup: setup-notebooklm"
'';
};
in {
devShells = {
default = makeDevShell jdk17;
jdk17 = makeDevShell jdk17;
jdk21 = makeDevShell jdk21;
};
});
}