This commit introduces a new `store` crate that provides database functionality using redb for storage and bson for serialization. It includes tables for users, servers, and settings, along with async operations for getting, inserting, modifying, and removing data. The store supports UUID keys and integrates with the existing Jellyfin client authentication flow. The changes also include: - Adding new dependencies to Cargo.lock for bitvec, bson, deranged, funty, num-conv, powerfmt, radium, serde_bytes, simdutf8, time, and wyz - Updating Cargo.toml to include the new store crate in workspace members - Modifying ui-iced to use the new database initialization flow with config loading from TOML - Adding a settings module to ui-iced with UI components for managing server and user configuration - Implementing secret string handling for sensitive data like passwords - Updating API client to support pre-authenticated clients with cached tokens
216 lines
6.8 KiB
Nix
216 lines
6.8 KiB
Nix
{
|
|
description = "A Bevy engine flake for building and testing Rust projects with Bevy on Linux and MacOS.";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
crane.url = "github:ipetkov/crane";
|
|
nix-github-actions = {
|
|
url = "github:nix-community/nix-github-actions";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
crates-nix.url = "github:uttarayan21/crates.nix";
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
advisory-db = {
|
|
url = "github:rustsec/advisory-db";
|
|
flake = false;
|
|
};
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
crane,
|
|
flake-utils,
|
|
nixpkgs,
|
|
rust-overlay,
|
|
advisory-db,
|
|
nix-github-actions,
|
|
crates-nix,
|
|
...
|
|
}:
|
|
flake-utils.lib.eachDefaultSystem (
|
|
system: let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
rust-overlay.overlays.default
|
|
];
|
|
};
|
|
inherit (pkgs) lib;
|
|
cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
|
name = cargoToml.package.name;
|
|
|
|
toolchain = pkgs.rust-bin.stable.latest.default;
|
|
toolchainWithLLvmTools = toolchain.override {
|
|
extensions = ["rust-src" "llvm-tools"];
|
|
};
|
|
toolchainWithRustAnalyzer = toolchain.override {
|
|
extensions = ["rust-src" "rust-analyzer"];
|
|
};
|
|
crates = crates-nix.mkLib {inherit pkgs;};
|
|
craneLib = (crane.mkLib pkgs).overrideToolchain toolchain;
|
|
craneLibLLvmTools = (crane.mkLib pkgs).overrideToolchain toolchainWithLLvmTools;
|
|
|
|
src = let
|
|
filterBySuffix = path: exts: lib.any (ext: lib.hasSuffix ext path) exts;
|
|
sourceFilters = path: type: (craneLib.filterCargoSources path type) || filterBySuffix path [".c" ".h" ".hpp" ".cpp" ".cc" "wgsl"];
|
|
in
|
|
lib.cleanSourceWith {
|
|
filter = sourceFilters;
|
|
src = ./.;
|
|
};
|
|
commonArgs = rec {
|
|
inherit src;
|
|
pname = name;
|
|
stdenv = p: p.clangStdenv;
|
|
doCheck = false;
|
|
nativeBuildInputs = with pkgs; [
|
|
pkg-config
|
|
];
|
|
# LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [pkgs.wayland];
|
|
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs;
|
|
# SYSTEM_DEPS_LINK = "static";
|
|
# PKG_CONFIG_ALL_STATIC = "1";
|
|
|
|
buildInputs = with pkgs;
|
|
[
|
|
gst_all_1.gst-libav
|
|
gst_all_1.gst-plugins-base
|
|
gst_all_1.gst-plugins-good
|
|
gst_all_1.gst-plugins-bad
|
|
gst_all_1.gst-plugins-ugly
|
|
gst_all_1.gst-plugins-rs
|
|
gst_all_1.gstreamer
|
|
glib
|
|
glib-networking
|
|
|
|
# bzip2_1_1
|
|
# libsysprof-capture
|
|
# pcre2
|
|
# libunwind
|
|
# elfutils
|
|
# zstd
|
|
|
|
openssl
|
|
vulkan-loader
|
|
]
|
|
++ (lib.optionals pkgs.stdenv.isLinux [
|
|
gst_all_1.gstreamermm
|
|
gst_all_1.gst-vaapi
|
|
|
|
# util-linux
|
|
# libselinux
|
|
# libsepol
|
|
|
|
alsa-lib-with-plugins
|
|
libxkbcommon
|
|
udev
|
|
wayland
|
|
wayland-protocols
|
|
# xorg.libX11
|
|
# xorg.libXi
|
|
# xorg.libXrandr
|
|
])
|
|
++ (lib.optionals pkgs.stdenv.isDarwin [
|
|
libiconv
|
|
apple-sdk_26
|
|
]);
|
|
};
|
|
cargoArtifacts = craneLib.buildPackage commonArgs;
|
|
in {
|
|
checks =
|
|
{
|
|
"${name}-clippy" = craneLib.cargoClippy (commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
|
|
});
|
|
"${name}-docs" = craneLib.cargoDoc (commonArgs // {inherit cargoArtifacts;});
|
|
"${name}-fmt" = craneLib.cargoFmt {inherit src;};
|
|
"${name}-toml-fmt" = craneLib.taploFmt {
|
|
src = pkgs.lib.sources.sourceFilesBySuffices src [".toml"];
|
|
};
|
|
# Audit dependencies
|
|
"${name}-audit" = craneLib.cargoAudit {
|
|
inherit src advisory-db;
|
|
};
|
|
|
|
# Audit licenses
|
|
"${name}-deny" = craneLib.cargoDeny {
|
|
inherit src;
|
|
};
|
|
"${name}-nextest" = craneLib.cargoNextest (commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
partitions = 1;
|
|
partitionType = "count";
|
|
});
|
|
}
|
|
// lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
|
|
"${name}-llvm-cov" = craneLibLLvmTools.cargoLlvmCov (commonArgs // {inherit cargoArtifacts;});
|
|
};
|
|
|
|
packages = let
|
|
pkg = craneLib.buildPackage (commonArgs
|
|
// {inherit cargoArtifacts;}
|
|
// {
|
|
postInstall = ''
|
|
mkdir -p $out/bin
|
|
mkdir -p $out/share/bash-completions
|
|
mkdir -p $out/share/fish/vendor_completions.d
|
|
mkdir -p $out/share/zsh/site-functions
|
|
$out/bin/${name} completions bash > $out/share/bash-completions/${name}.bash
|
|
$out/bin/${name} completions fish > $out/share/fish/vendor_completions.d/${name}.fish
|
|
$out/bin/${name} completions zsh > $out/share/zsh/site-functions/_${name}
|
|
'';
|
|
});
|
|
in {
|
|
"${name}" = pkg;
|
|
default = pkg;
|
|
};
|
|
|
|
devShells = rec {
|
|
rust-shell =
|
|
pkgs.mkShell.override {
|
|
stdenv =
|
|
if pkgs.stdenv.isLinux
|
|
then (pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv)
|
|
else pkgs.clangStdenv;
|
|
} (commonArgs
|
|
// {
|
|
GST_PLUGIN_PATH = "/run/current-system/sw/lib/gstreamer-1.0/";
|
|
GIO_EXTRA_MODULES = "${pkgs.glib-networking}/lib/gio/modules";
|
|
packages = with pkgs;
|
|
[
|
|
toolchainWithRustAnalyzer
|
|
cargo-nextest
|
|
cargo-deny
|
|
cargo-expand
|
|
bacon
|
|
cargo-make
|
|
cargo-hack
|
|
cargo-outdated
|
|
lld
|
|
lldb
|
|
]
|
|
++ (lib.optionals pkgs.stdenv.isDarwin [
|
|
apple-sdk_26
|
|
])
|
|
++ (lib.optionals pkgs.stdenv.isLinux [
|
|
mold
|
|
]);
|
|
});
|
|
default = rust-shell;
|
|
};
|
|
}
|
|
)
|
|
// {
|
|
githubActions = nix-github-actions.lib.mkGithubMatrix {
|
|
checks = nixpkgs.lib.getAttrs ["x86_64-linux"] self.checks;
|
|
};
|
|
};
|
|
}
|