nix-dotfiles/extra/palette/default.nix

111 lines
4.3 KiB
Nix

{ pkgs, color, lib, ... }:
let
inherit (builtins) isString;
inherit (lib.attrsets) mapAttrsRecursiveCond;
in
rec{
# Palette constructor
# Produces a palette of colors starting from sane defaults
# Override the inputs with your favorite colors
palette =
{ black ? color.black
, red ? color.red
, green ? color.green
, yellow ? color.yellow
, blue ? color.blue
, magenta ? color.magenta
, cyan ? color.cyan
, white ? color.white
, bright-black ? color.brighten black "10%"
, bright-red ? color.brighten red "10%"
, bright-green ? color.brighten green "10%"
, bright-yellow ? color.brighten yellow "10%"
, bright-blue ? color.brighten blue "10%"
, bright-magenta ? color.brighten magenta "10%"
, bright-cyan ? color.brighten cyan "10%"
, bright-white ? color.brighten white "10%"
, dim-black ? color.darken black "10%"
, dim-red ? color.darken red "10%"
, dim-green ? color.darken green "10%"
, dim-yellow ? color.darken yellow "10%"
, dim-blue ? color.darken blue "10%"
, dim-magenta ? color.darken magenta "10%"
, dim-cyan ? color.darken cyan "10%"
, dim-white ? color.darken white "10%"
, primary-background ? black
, primary-foreground ? white
, primary-dim_foreground ? color.darken primary-foreground "10%"
, cursor-text ? primary-background
, cursor-cursor ? primary-foreground
, vi-cursor-text ? cursor-text
, vi-cursor-cursor ? cursor-cursor
}: {
normal = {
black = assert(color.isRgba black); black;
red = assert(color.isRgba red); red;
green = assert(color.isRgba green); green;
yellow = assert(color.isRgba yellow); yellow;
blue = assert(color.isRgba blue); blue;
magenta = assert(color.isRgba magenta); magenta;
cyan = assert(color.isRgba cyan); cyan;
white = assert(color.isRgba white); white;
};
bright = {
black = assert(color.isRgba bright-black); bright-black;
red = assert(color.isRgba bright-red); bright-red;
green = assert(color.isRgba bright-green); bright-green;
yellow = assert(color.isRgba bright-yellow); bright-yellow;
blue = assert(color.isRgba bright-blue); bright-blue;
magenta = assert(color.isRgba bright-magenta); bright-magenta;
cyan = assert(color.isRgba bright-cyan); bright-cyan;
white = assert(color.isRgba bright-white); bright-white;
};
dim = {
black = assert(color.isRgba dim-black); dim-black;
red = assert(color.isRgba dim-red); dim-red;
green = assert(color.isRgba dim-green); dim-green;
yellow = assert(color.isRgba dim-yellow); dim-yellow;
blue = assert(color.isRgba dim-blue); dim-blue;
magenta = assert(color.isRgba dim-magenta); dim-magenta;
cyan = assert(color.isRgba dim-cyan); dim-cyan;
white = assert(color.isRgba dim-white); dim-white;
};
primary = {
background = assert(color.isRgba primary-background); primary-background;
foreground = assert(color.isRgba primary-foreground); primary-foreground;
dim_foreground = assert(color.isRgba primary-dim_foreground);primary-dim_foreground;
};
cursor = {
cursor = assert(color.isRgba cursor-cursor); cursor-cursor;
text = assert(color.isRgba cursor-text); cursor-text;
};
vi_mode_cursor = {
cursor = assert(color.isRgba cursor-cursor); cursor-cursor;
text = assert(color.isRgba cursor-text); cursor-text;
};
};
## TRANSFORM
tPalette = f: p: mapAttrsRecursiveCond (v: !color.isRgba v) (a: v: f v) p;
## SERIALIZATION
# Try to convert input colors to a lowercase hex encoded RGBA color
toRgbaHex = tPalette color.toRgbaHex;
# Try to convert input colors to a uppercase hex encoded RGBA color
toRGBAHex = tPalette color.toRGBAHex;
# Try to convert input colors to a lowercase hex encoded RGB color
toRgbHex = tPalette color.toRgbHex;
# Try to convert input colors to a lowercase hex encoded RGB color
toRGBHex = tPalette color.toRGBHex;
# Try to convert input colors to a uppercase hex encoded RGB color in the form ARGB (Polybar uses this format)
toARGBHex = tPalette color.toARGBHex;
# Try to convert input colors to a lowercase hex encoded RGB color in the form argb (Polybar uses this format)
toArgbHex = tPalette color.toArgbHex;
}