-
Notifications
You must be signed in to change notification settings - Fork 168
Expand file tree
/
Copy pathflake.nix
More file actions
145 lines (129 loc) · 3.51 KB
/
flake.nix
File metadata and controls
145 lines (129 loc) · 3.51 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
{
description = "MoQ - Media over QUIC";
# For pre-built binaries (faster builds), add our Cachix cache to your Nix config:
# extra-substituters = https://kixelated.cachix.org
# extra-trusted-public-keys = kixelated.cachix.org-1:CmFcV0lyM6KuVM2m9mih0q4SrAa0XyCsiM7GHrz3KKk=
#
# Or run: cachix use kixelated
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
crane.url = "github:ipetkov/crane";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
flake-utils,
crane,
rust-overlay,
...
}:
{
nixosModules = {
moq-relay = import ./nix/modules/moq-relay.nix;
};
overlays.default = import ./nix/overlay.nix { inherit crane; };
}
// flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ (import rust-overlay) ];
};
rust-toolchain = pkgs.rust-bin.stable.latest.default.override {
extensions = [
"rust-src"
"rust-analyzer"
];
targets = pkgs.lib.optionals pkgs.stdenv.isDarwin [
"x86_64-apple-darwin"
"aarch64-apple-darwin"
];
};
# GStreamer dependencies (for moq-gst plugin)
gstreamerDeps = with pkgs; [
gst_all_1.gstreamer
gst_all_1.gstreamer.dev
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
];
# Rust dependencies
rustDeps = with pkgs; [
rust-toolchain
just
git
cmake
pkg-config
glib
libressl
ffmpeg
curl
cargo-sort
cargo-shear
cargo-edit
cargo-sweep
cargo-semver-checks
]
++ gstreamerDeps
++ pkgs.lib.optionals (!pkgs.stdenv.isDarwin) [
# Marked broken on Darwin in nixpkgs, but builds fine on Linux.
pkgs.release-plz
];
# JavaScript dependencies
jsDeps = with pkgs; [
bun
# Only for NPM publishing
nodejs_24
];
# Python dependencies
pyDeps = with pkgs; [
uv
python3
];
# CDN/deployment dependencies
cdnDeps = with pkgs; [
opentofu
];
# Apply our overlay to get the package definitions
overlayPkgs = pkgs.extend self.overlays.default;
in
{
packages = rec {
default = pkgs.symlinkJoin {
name = "moq-all";
paths = [
moq-relay
moq-clock
moq-cli
moq-token-cli
];
};
# Inherit packages from the overlay
inherit (overlayPkgs)
moq-relay
moq-clock
moq-cli
moq-token-cli
moq-boy
;
};
devShells.default = pkgs.mkShell {
packages = rustDeps ++ jsDeps ++ pyDeps ++ cdnDeps;
# jemalloc's configure uses -O0 test builds, which conflict with
# Nix's _FORTIFY_SOURCE hardening (requires -O).
hardeningDisable = [ "fortify" ];
shellHook = ''
export LIBCLANG_PATH="${pkgs.libclang.lib}/lib"
'';
};
formatter = pkgs.nixfmt-tree;
}
);
}