From 9984b638b55adea11ba90412346fbb8220f05682 Mon Sep 17 00:00:00 2001 From: yavko Date: Tue, 7 Feb 2023 22:30:47 -0800 Subject: [PATCH] feat(nix): initial nix feature flags impl --- README.md | 1 + flake.nix | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index eb1a206..de951ca 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ Here is an example nix flake that uses Ironbar. enable = true; config = {}; style = ""; + package = inputs.ironbar.packageBuilder ["features"]; }; } ]; diff --git a/flake.nix b/flake.nix index 4e129d4..97966d6 100644 --- a/flake.nix +++ b/flake.nix @@ -31,6 +31,15 @@ ]; }; mkRustToolchain = pkgs: pkgs.rust-bin.stable.latest.default; + defaultFeatures = [ + "http" + "config+all" + "clock" + "music+all" + "sys_info" + "tray" + "workspaces+all" + ]; in { overlays.default = final: prev: let rust = mkRustToolchain final; @@ -40,26 +49,29 @@ rustc = rust; }; in { - ironbar = rustPlatform.buildRustPackage { + ironbar = features: rustPlatform.buildRustPackage { pname = "ironbar"; version = self.rev or "dirty"; src = builtins.path { name = "ironbar"; path = prev.lib.cleanSource ./.; }; + buildNoDefaultFeatures = true; + buildFeatures = features; cargoDeps = rustPlatform.importCargoLock {lockFile = ./Cargo.lock;}; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = with prev; [pkg-config]; buildInputs = with prev; [gtk3 gdk-pixbuf gtk-layer-shell libxkbcommon openssl]; }; }; + packageBuilder = genSystems(system: self.packages.${system}.ironbar); packages = genSystems ( system: let pkgs = pkgsFor system; in (self.overlays.default pkgs pkgs) // { - default = self.packages.${system}.ironbar; + default = self.packages.${system}.ironbar defaultFeatures; } ); devShells = genSystems (system: let @@ -87,7 +99,7 @@ ... }: let cfg = config.programs.ironbar; - defaultIronbarPackage = self.packages.${pkgs.hostPlatform.system}.default; + defaultIronbarPackage = self.packages.${pkgs.hostPlatform.system}.default defaultFeatures; jsonFormat = pkgs.formats.json {}; in { options.programs.ironbar = {