summaryrefslogtreecommitdiffstats
path: root/lib/theme.nix
blob: 72e43bcf14d5ec2b08dcabcb9bf292e760e17a8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{ lib, ... }:

with lib;
let
  # Convert 2 consecutive characters from a string from hexadecimal to decimal
  hex2dec = str: start:
    let
      conversionTable = {
        "0" = 0; "1" = 1; "2" = 2; "3" = 3; "4" = 4;
        "5" = 5; "6" = 6; "7" = 7; "8" = 8; "9" = 9;
        "a" = 10; "b" = 11; "c" = 12;
        "d" = 13; "e" = 14; "f" = 15;
      };
      firstHexDigit  = toLower (elemAt (stringToCharacters str) start);
      secondHexDigit = toLower (elemAt (stringToCharacters str) (start + 1));
    in conversionTable.${firstHexDigit} * 16 + conversionTable.${secondHexDigit};

  makeColorCode = color:
    let genComponent = hex2dec color;
    in "${toString (genComponent 1)};${toString (genComponent 3)};${toString (genComponent 5)}";

  hex2RGB = color:
    let genComponent = hex2dec color;
    in {
      red = genComponent 1;
      green = genComponent 3;
      blue = genComponent 5;
    };

  fgEscapeCode = hexCode: "[38;2;${makeColorCode hexCode}m";
  bgEscapeCode = hexCode: "[48;2;${makeColorCode hexCode}m";
in
{
  inherit fgEscapeCode bgEscapeCode hex2RGB;
}