There is not so much of a difference in this project, but it means adding this project to clan is one less flake input and also more consistent with other projects in clan.
101 lines
3.3 KiB
Nix
101 lines
3.3 KiB
Nix
{
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
|
flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs";
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
inputs@{ flake-parts, ... }:
|
|
flake-parts.lib.mkFlake { inherit inputs; } {
|
|
systems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
];
|
|
|
|
perSystem =
|
|
{
|
|
pkgs,
|
|
system,
|
|
...
|
|
}:
|
|
let
|
|
overlays = [ (import inputs.rust-overlay) ];
|
|
pkgs' = import inputs.nixpkgs {
|
|
inherit system overlays;
|
|
};
|
|
|
|
buildEnvVars = {
|
|
BIN_XDG_PERMISSION_STORE = "${pkgs.xdg-desktop-portal}/libexec/xdg-permission-store";
|
|
BIN_XDG_DOCUMENT_PORTAL = "${pkgs.xdg-desktop-portal}/libexec/xdg-document-portal";
|
|
BIN_VIRTIOFSD = "${pkgs.virtiofsd}/bin/virtiofsd";
|
|
};
|
|
|
|
rustToolchain = pkgs'.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
|
|
rustPlatform = pkgs'.makeRustPlatform {
|
|
cargo = rustToolchain;
|
|
rustc = rustToolchain;
|
|
};
|
|
|
|
rustPackage =
|
|
crate:
|
|
let
|
|
cargoToml = builtins.fromTOML (builtins.readFile ./${crate}/Cargo.toml);
|
|
in
|
|
rustPlatform.buildRustPackage {
|
|
inherit (cargoToml.package) name version;
|
|
src = ./.;
|
|
cargoLock.lockFile = ./Cargo.lock;
|
|
cargoLock.outputHashes = {
|
|
"zbus-5.9.0" = "sha256-uaHPHdmDWYy0jeKPd0/eCUupID2tswGHmEmscp6fCII=";
|
|
"busd-0.4.0" = "sha256-hIvjt3v6AYc7URLFknXTmSc+NdxOlN/2RGXVsuoNgA4=";
|
|
};
|
|
buildAndTestSubdir = crate;
|
|
env = buildEnvVars;
|
|
};
|
|
in
|
|
{
|
|
devShells.default = pkgs'.mkShell {
|
|
buildInputs = [ rustToolchain ];
|
|
env = buildEnvVars;
|
|
};
|
|
|
|
packages.sidebus-agent = rustPackage "sidebus-agent";
|
|
packages.sidebus-broker = rustPackage "sidebus-broker";
|
|
};
|
|
|
|
flake = {
|
|
nixosModules.sidebus-vm =
|
|
{ ... }:
|
|
{
|
|
environment.sessionVariables.DBUS_SESSION_BUS_ADDRESS = "unix:path=/run/sidebus.sock";
|
|
systemd.sockets.sidebus-agent = {
|
|
# SocketMode= is 0666 by default
|
|
listenStreams = [ "/run/sidebus.sock" ];
|
|
wantedBy = [ "sockets.target" ];
|
|
documentation = [ "https://git.clan.lol/valpackett/sidebus" ];
|
|
};
|
|
systemd.services.sidebus-agent = {
|
|
# TODO: confinement (can do a lot)
|
|
serviceConfig = {
|
|
ExecStart = throw "sidebus-vm module requires setting systemd.services.sidebus-agent.serviceConfig.ExecStart to a sidebus-agent package";
|
|
ImportCredential = "sidebus.*";
|
|
};
|
|
documentation = [ "https://git.clan.lol/valpackett/sidebus" ];
|
|
};
|
|
systemd.mounts = [
|
|
{
|
|
type = "virtiofs";
|
|
what = "vm-doc-portal";
|
|
where = "/run/vm-doc-portal";
|
|
wantedBy = [ "multi-user.target" ];
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|