cicd schemes

This commit is contained in:
Danilo Reyes 2025-10-02 22:08:00 -06:00
parent 1ba04c465f
commit e15b93c43a
4 changed files with 161 additions and 0 deletions

52
.github/workflows/build-schemes.yml vendored Normal file
View File

@ -0,0 +1,52 @@
name: Build All Color Schemes
on:
push:
paths:
- 'config/schemes.nix'
- 'config/scheme-utils.nix'
workflow_dispatch:
jobs:
build-schemes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Nix
uses: cachix/install-nix-action@v23
with:
nix_path: nixpkgs=channel:nixpkgs-unstable
- name: Get available schemes
id: schemes
run: |
SCHEMES=$(nix eval --raw --expr '
let
pkgs = import <nixpkgs> {};
inputs = {};
utils = import ./scripts/scheme-utils.nix { inherit pkgs inputs; };
in
builtins.concatStringsSep " " utils.availableSchemes
')
echo "schemes=$SCHEMES" >> $GITHUB_OUTPUT
echo "Available schemes: $SCHEMES"
- name: Build all schemes
run: |
for scheme in ${{ steps.schemes.outputs.schemes }}; do
echo "Building scheme: $scheme"
nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \
--override-input stylix-scheme $scheme \
--out-link ./result-$scheme &
done
wait
echo "All schemes built successfully!"
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: nixos-configurations
path: ./result-*
retention-days: 7

View File

@ -0,0 +1,34 @@
{
pkgs,
inputs,
hostname ? "server",
}:
let
utils = import ./scheme-utils.nix { inherit pkgs inputs; };
schemes = utils.availableSchemes;
mkBuildScript =
scheme:
pkgs.writeShellScript "build-${scheme}" ''
echo "Building NixOS configuration with scheme: ${scheme}"
nix build .#nixosConfigurations.${hostname}.config.system.build.toplevel \
--override-input stylix-scheme ${scheme} \
--out-link ./result-${scheme}
echo "Build completed for scheme: ${scheme}"
'';
buildAllScript = pkgs.writeShellScript "build-all-schemes" ''
echo "Building all ${toString (builtins.length schemes)} schemes in parallel..."
echo "Schemes: ${builtins.concatStringsSep " " schemes}"
${builtins.concatStringsSep "\n" (map (scheme: "${mkBuildScript scheme} &") schemes)}
wait
echo "All schemes built successfully!"
echo "Results available in ./result-* directories"
'';
in
{
inherit schemes buildAllScript;
buildScripts = builtins.listToAttrs (
map (scheme: pkgs.lib.nameValuePair "build-${scheme}" (mkBuildScript scheme)) schemes
);
inherit (utils) lightSchemes darkSchemes availableColors;
}

47
scripts/list-schemes.sh Executable file
View File

@ -0,0 +1,47 @@
#!/usr/bin/env bash
# Script to list all available schemes from schemes.nix
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "Available schemes:"
nix eval --raw --impure --expr "
let
pkgs = import <nixpkgs> {};
inputs = {};
utils = import ./scripts/scheme-utils.nix { inherit pkgs inputs; };
in
builtins.concatStringsSep \"\n\" utils.availableSchemes
"
echo -e "\nLight schemes:"
nix eval --raw --impure --expr "
let
pkgs = import <nixpkgs> {};
inputs = {};
utils = import ./scripts/scheme-utils.nix { inherit pkgs inputs; };
in
builtins.concatStringsSep \"\n\" utils.lightSchemes
"
echo -e "\nDark schemes:"
nix eval --raw --impure --expr "
let
pkgs = import <nixpkgs> {};
inputs = {};
utils = import ./scripts/scheme-utils.nix { inherit pkgs inputs; };
in
builtins.concatStringsSep \"\n\" utils.darkSchemes
"
echo -e "\nAvailable colors:"
nix eval --raw --impure --expr "
let
pkgs = import <nixpkgs> {};
inputs = {};
utils = import ./scripts/scheme-utils.nix { inherit pkgs inputs; };
in
builtins.concatStringsSep \"\n\" utils.availableColors
"

28
scripts/scheme-utils.nix Normal file
View File

@ -0,0 +1,28 @@
{ pkgs, inputs }:
let
schemesConfig = import ../config/schemes.nix { inherit pkgs inputs; };
availableSchemes = builtins.attrNames schemesConfig.schemes;
in
{
inherit availableSchemes;
lightSchemes = builtins.filter (
name: schemesConfig.schemes.${name}.polarity == "light"
) availableSchemes;
darkSchemes = builtins.filter (
name: schemesConfig.schemes.${name}.polarity == "dark"
) availableSchemes;
schemesByColor =
color: builtins.filter (name: schemesConfig.schemes.${name}.color == color) availableSchemes;
getScheme = name: schemesConfig.schemes.${name};
isValidScheme = name: builtins.hasAttr name schemesConfig.schemes;
availableColors = pkgs.lib.unique (
builtins.filter (color: color != null) (
builtins.map (name: schemesConfig.schemes.${name}.color) availableSchemes
)
);
availableBase16Schemes = pkgs.lib.unique (
builtins.filter (name: name != null) (
builtins.map (name: schemesConfig.schemes.${name}.name) availableSchemes
)
);
}