Skip to content

ucc-xx/hostcolor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

hostcolor

Script collection to calculate colours from hostnames.

For a given string (hostname) a value in the range 18-229 is calculated, that could be used as an 8-bit colour value. A script should always calculate the same values for the same input.

It uses a md5-hash of the given string (hostname) to determine a value. Only the first two bytes are used and there are only 66 colour families, so there are a lot of collisions.

One example of its use is colour coding a command prompt to not mix up machines: It can be integrated in any provisioning scripts for vms, jails or containers.

how to run it

You can run the scripts from a shell.

./hostcolor.sh --help
./hostcolor.sh [-n] [-p] [-x] [-s salt] hostname [hostname [hostname [...]]]
./hostcolor.sh [--pretty-print] [--hex] [--salt=salt] hostname [hostname [hostname [...]]]

what does it do

From the in-script documentation:

    Takes [hostname] = [label] + [number] (e.g. dns1 or web7) and calculates
    a color (256 Format) for shell use. Color range is 18-229. Only last char
    of [number] is used, null is treated as 0.
    
    This works well for [number] 0-2 and ok up to 3. After that there might be
    collisions. There are up to 66 color families with 3 destinct colors if all
    families stay under 4 members. (e.g. fam0 22-24 and fam1 25-27 overlap
    when the family 0 has a fourth member: fam0-4 is 25).
    
    Notice: abc32xyz1 is interpreted as lable = "abcxyz" number = "321"
    
    Families have a head, defining the name (i.e. fam53), the head is allways
    member #1, not #0. This family name is fam[0-66] and the color of the head
    is calculated by [0-66] * 3 + 23 - so fam0-1 is 23 and fam66-1 is 221.
    
    Even number families count up and jump down after member #5 and continue
    decending until member #9. Odd number families vice versa. The col of any
    familiy member can be calculated as famX-1 col + mod. The mod is obtained
    using the member number. The following table elaborates on this:
    
           mem  col  mod                      mem  col  mod
       fam0-0    22   -1 =  mem-1         fam55-0   189  +1 = (mem-1) *-1
            1    23   +0 =  mem-1               1   188  +0 = (mem-1) *-1
        0   2    24   +1 =  mem-1          5    2   187  -1 = (mem-1) *-1
            3    25   +2 =  mem-1          5    3   186  -2 = (mem-1) *-1
        ^   4    26   +3 =  mem-1               4   185  -3 = (mem-1) *-1
        E   5    27   +4 =  mem-1          ^    5   184  -4 = (mem-1) *-1
        V   6    21   -2 = (mem-4) *-1     O    6   190  +2 =  mem-4
        E   7    20   -3 = (mem-4) *-1     D    7   191  +3 =  mem-4
        N   8    19   -4 = (mem-4) *-1     D    8   192  +4 =  mem-4
            9    18   -5 = (mem-4) *-1          9   193  +5 =  mem-4
    
    Notice: The sh and py versions of host-color have a slight math. varinace
    and are not to be used interchangebly (e.g. web1 sh->50 and py->53).

        -> don't like the colors - use the --salt (-s) to modyfiy.

how to affect the output

-h --help show the version, usage and in-script documentation only.

-n --no-newline do not print a linebreak after each output.

% ./hostcolor.sh -n test foo1 foo2
27 155 156

-p --pretty-print print a table displaying the colour, its number and the tinted hostname.

% ./hostcolor.sh -p test foo1 foo2
 ▒▒▒▒ 27	 test  
 ████ 155	 foo1  
 ▓▓▓▓ 156	 foo2  

…kinda silly without colour.

-x --hex print the colour as an RGB hex value instead of a decimal 256-colour index.

% ./hostcolor.sh -x test foo1 foo2
005fff
afff5f
afff87

-s= --salt= add a salt to the hostnames in case you don't like the colors suggested

% ./hostcolor.sh test foo1 foo2
27
155
156
% ./hostcolor.sh --salt=spice test foo1 foo2
160
209
210

caveat

Default behaviour, uses line breaks.

% ./hostcolor.sh test | xxd
00000000: 3237 0a                                  27.

Suppressing new lines leads to the use of separators.

% ./hostcolor.sh -n test | xxd
00000000: 3237 20                                  27

The separator used may vary depending on the underlying system.

license

As some jurisdictions require a licence, we have opted for Creative Commons Zero v1.0 Universal.

About

Script collection to calculate colours from hostnames.

Topics

Resources

License

Stars

Watchers

Forks

Contributors