-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflake.nix
106 lines (86 loc) · 3.86 KB
/
flake.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
{
description = "Emulate food order bot — bot to automate everything about food orders";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
gradle2nix.url = "github:tadfisher/gradle2nix/v2";
};
outputs = { self, nixpkgs, flake-utils, gradle2nix }:
flake-utils.lib.eachDefaultSystem (system:
let
project-name = "food-order-bot-emulated";
project-result = "${project-name}.jar";
pkgs = nixpkgs.legacyPackages."${system}";
jdk = pkgs.corretto21;
in
rec {
packages = {
default = gradle2nix.builders."${system}".buildGradlePackage {
pname = project-name;
version = "1.0.0";
src = ./.;
lockFile = ./gradle.lock;
gradleFlags = [ "shadowJar" ];
buildInputs = [ jdk pkgs.glibcLocales ];
nativeBuildInputs = [ pkgs.makeWrapper ];
gradleInstallFlags = [];
installPhase = ''
mkdir -pv "$out/share/java" "$out/bin" "$out/res"
cp -v "./build/libs/${project-result}" $out/share/java/${project-result}
cp -vr $src/src/main/resources/* $out/res
makeWrapper ${jdk}/bin/java $out/bin/${project-name} \
--add-flags "-jar $out/share/java/${project-result}" \
--set RES_HOME $out/res \
\
--set LOCALE_ARCHIVE ${pkgs.glibcLocales}/lib/locale/locale-archive \
\
--set LANG en_US.UTF-8 \
--set LANGUAGE en_US:en \
--set LC_LANG en_US.UTF-8 \
--set LC_ALL en_US.UTF-8 \
'';
};
interactive = pkgs.writeShellScriptBin "${project-name}-interactive" ''
export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
export LANG=en_US.UTF-8
export LANGUAGE=en_US:en
export LC_LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
${pkgs.tmux}/bin/tmux \
new-session \; \
split-window -v -l 70% \; \
send-keys "${pkgs.postgresql}/bin/psql '$(echo "$JDBC_DATABASE_URL" | ${pkgs.gnused}/bin/sed 's/jdbc://')'" C-m \; \
select-pane -t 0 \; \
send-keys '${packages.default}/bin/${project-name} || ${pkgs.tmux}/bin/tmux kill-session' C-m \;
'';
docker = pkgs.dockerTools.buildImage {
name = "${project-name}-dockerized";
tag = "latest";
copyToRoot = with pkgs; [ packages.default ];
config = {
Cmd = [ "${packages.default}/bin/${project-name}" ];
};
};
docker-interactive = pkgs.dockerTools.buildImage {
name = "${project-name}-dockerized-interactive";
tag = "latest";
copyToRoot = with pkgs; [
packages.interactive
pkgs.bash # tmux needs a shell to run
# tmux need /tmp to put it's session file there
(pkgs.runCommand "tmp" {} ''
mkdir $out
mkdir -m 1777 $out/tmp
'')
];
config = {
Cmd = [ "${packages.interactive}/bin/${project-name}-interactive" ];
};
};
devShell = pkgs.mkShell {
buildInputs = packages.default.buildInputs ++ (with pkgs; [ idea-community gradle ]);
};
};
}
);
}