

h1. Branding the Console

This chapter will show you how to customize the user interface of the Karaf console, making  
changes such as a new welcome message and console prompt.  This is what we refer to as "branding" Karaf.

h2. Create your branding bundle

At startup, Karaf is looking for a bundle which exports the {{org.apache.karaf.branding}} package containing a {{branding.properties}}
file.

So you need to create a very simple bundle containing just a {{org/apache/karaf/branding/branding.properties}} file.

The Maven POM of your branding bundle should look like this:

{code:lang=xml}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>your.group.id</groupId>
    <artifactId>your.branding.artifact.id</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>bundle</packaging>
    <name>Your Branding Bundle Name</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.2</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</bundle-SymbolicName>
                        <Import-Package>*</Import-Package>
                        <Private-Package>!*</Private-Package>
                        <Export-Package>
                            org.apache.karaf.branding
                        </Export-Package>
                        <Spring-Context>*;public-context:=false</Spring-Context>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
{code}

Now, add a {{src/main/resources/org/apache/karaf/branding/branding.properties}} similar to:

{{code}}
welcome = \
\u001B[36m        __ __                  ____      \u001B[0m\r\n\
\u001B[36m       / //_/____ __________ _/ __/      \u001B[0m\r\n\
\u001B[36m      / ,<  / __ `/ ___/ __ `/ /_        \u001B[0m\r\n\
\u001B[36m     / /| |/ /_/ / /  / /_/ / __/        \u001B[0m\r\n\
\u001B[36m    /_/ |_|\\__,_/_/   \\__,_/_/         \u001B[0m\r\n\
\r\n\
\u001B[1m  Apache Karaf\u001B[0m (${project.version})\r\n\
\r\n\
Hit '\u001B[1m<tab>\u001B[0m' for a list of available commands\r\n\
   and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\r\n\
Hit '\u001B[1m<ctrl-d>\u001B[0m' or '\u001B[1mosgi:shutdown\u001B[0m' to shutdown Karaf.\r\n

prompt = \u001B[1m${USER}@${APPLICATION}\u001B[0m>
{{code}}

As you can see, the {{branding.properties}} contains two properties:
* welcome is the welcome message displayed when you start Karaf.
* prompt is the string used to display the console prompt. This string supports variables:
** ${USER}} defines the user name of the prompt. Caveat -- the user name is presently static and hardcoded to "karaf",
however you can override here with your own static user name.
** ${{APPLICATION}} defines the Karaf instance name.

As you can see, both strings support ASCII escaped format. For instance \u001B[1m switches the foreground to bold and \u001B[0m
switches it back to normal.

Some examples of customized prompts:

{code}
# Define a user with fancy colors
prompt = \u001B[36mmy-karaf-user\u001B[0m\u001B[1m@\u001B[0m\u001B[34m${APPLICATION}\u001B[0m>
{code}

{code}
# Static sober prompt
prompt = my-user@my-karaf>
{code}

h2. Configuring Karaf to use the branding bundle

In order for Karaf to pick up the branding jar please edit the 
$KARAF_HOME/etc/custom.properties file to include the following: 

  org.osgi.framework.system.packages.extra = \ 
    org.apache.karaf.branding


h2. Installing the branding bundle

Build your branding bundle:

{code}
mvn install
{code}

and simply drop the generated jar file into the Karaf lib directory.

Start Karaf and you will see your branded Karaf console.
