nix: minor flake refactor; provide GTK and QT theme packages

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I136253e0d928e71e61824bc3f3b5a0726a6a6964
This commit is contained in:
raf 2026-05-14 11:32:16 +03:00
commit 571f60b1a0
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
5 changed files with 346 additions and 21 deletions

View file

@ -2,48 +2,91 @@
description = "Base16/Base24 schemes for Nix";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = inputs @ {
outputs = {
flake-parts,
self,
...
}:
flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"];
perSystem = {pkgs, ...}: {
} @ inputs:
flake-parts.lib.mkFlake {inherit inputs;} (let
systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin"];
# FWIW this could also be lib.extend but lib.extend itself claims that
# it should not be used, so we do this instead.
inherit (inputs.nixpkgs) lib;
basixLib = import ./lib.nix {inherit lib;};
mkThemeAttrSet = pkgs: schemes: let
mkGtkTheme = pkgs.callPackage ./packages/gtk/package.nix {basixLib = self.lib;};
mkQtctTheme = pkgs.callPackage ./packages/qtct/package.nix {basixLib = self.lib;};
mkKvantumTheme = pkgs.callPackage ./packages/kvantum/package.nix {basixLib = self.lib;};
in
lib.mapAttrs (slug: scheme:
pkgs.symlinkJoin {
name = "basix-theme-${self.lib.sanitizeSlug slug}";
paths = [
(mkGtkTheme {inherit slug scheme;})
(mkQtctTheme {inherit slug scheme;})
(mkKvantumTheme {inherit slug scheme;})
];
})
schemes;
mkSystemThemePackages = system: let
pkgs = import inputs.nixpkgs {inherit system;};
in {
base16 = mkThemeAttrSet pkgs self.schemeData.base16;
base24 = mkThemeAttrSet pkgs self.schemeData.base24;
};
in {
inherit systems;
perSystem = {
pkgs,
system,
...
}: let
themePackages = self.themePackages.${system};
in {
packages = {
# Converts YAML -> JSON
convert-scheme = pkgs.callPackage ./packages/convert-scheme/package.nix {};
# Theme collections
themes-base16 = pkgs.symlinkJoin {
name = "basix-themes-base16";
paths = lib.attrValues themePackages.base16;
};
themes-base24 = pkgs.symlinkJoin {
name = "basix-themes-base24";
paths = lib.attrValues themePackages.base24;
};
themes-all = pkgs.symlinkJoin {
name = "basix-themes-all-${system}";
paths = (lib.attrValues themePackages.base16) ++ (lib.attrValues themePackages.base24);
};
};
};
flake = let
inherit (inputs.nixpkgs) lib;
evalSchemeData = lib.flip lib.pipe [
builtins.unsafeDiscardStringContext
lib.filesystem.listFilesRecursive
(builtins.filter (lib.hasSuffix ".json"))
(map (n: {
name = lib.removePrefix ((dirOf n) + "/") (lib.removeSuffix ".json" n);
value = lib.importJSON n;
}))
lib.listToAttrs
];
inherit (basixLib) evalSchemeData;
in {
lib = {
inherit evalSchemeData;
};
lib = basixLib;
schemeData = {
base16 = evalSchemeData "${self}/json/base16";
base24 = evalSchemeData "${self}/json/base24";
};
themePackages = lib.genAttrs systems mkSystemThemePackages;
};
};
});
}