diff --git a/flake.lock b/flake.lock index 91e7d5d..223980b 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,22 @@ { "nodes": { - "flake-utils": { + "flake-parts": { "inputs": { - "systems": "systems" + "nixpkgs-lib": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, @@ -36,7 +38,7 @@ }, "root": { "inputs": { - "flake-utils": "flake-utils", + "flake-parts": "flake-parts", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" } @@ -60,21 +62,6 @@ "repo": "rust-overlay", "type": "github" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 7e35c69..47aa4b8 100644 --- a/flake.nix +++ b/flake.nix @@ -1,80 +1,101 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - flake-utils.url = "github:numtide/flake-utils"; + 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 = {self, nixpkgs, flake-utils, rust-overlay}: - flake-utils.lib.eachDefaultSystem (system: - let - overlays = [ (import rust-overlay) ]; - pkgs = import nixpkgs { - inherit system overlays; - }; + outputs = + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ + "x86_64-linux" + "aarch64-linux" + ]; - 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"; - }; + perSystem = + { + pkgs, + system, + ... + }: + let + overlays = [ (import inputs.rust-overlay) ]; + pkgs' = import inputs.nixpkgs { + inherit system overlays; + }; - 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="; + 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; }; - buildAndTestSubdir = crate; + in + { + devShells.default = pkgs'.mkShell { + buildInputs = [ rustToolchain ]; env = buildEnvVars; }; - in - { - devShells.default = pkgs.mkShell { - buildInputs = [ rustToolchain ]; - env = buildEnvVars; + + packages.sidebus-agent = rustPackage "sidebus-agent"; + packages.sidebus-broker = rustPackage "sidebus-broker"; }; - packages.sidebus-agent = rustPackage "sidebus-agent"; - packages.sidebus-broker = rustPackage "sidebus-broker"; - - 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 = "${rustPackage "sidebus-agent"}/bin/sidebus-agent"; - ImportCredential = "sidebus.*"; + 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" ]; }; - 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" ]; + } + ]; }; - systemd.mounts = [ - { - type = "virtiofs"; - what = "vm-doc-portal"; - where = "/run/vm-doc-portal"; - wantedBy = [ "multi-user.target" ]; - } - ]; - }; - } - ); + }; + }; }