cgit — CSS Theming

Overview

cgit ships with a comprehensive CSS stylesheet (cgit.css) that controls the visual appearance of all pages. The stylesheet is designed with a light color scheme and semantic CSS classes that map directly to cgit's HTML structure.

Source file: cgit.css (~450 lines).

Loading Stylesheets

CSS files are specified via the css configuration directive:

css=/cgit/cgit.css

Multiple stylesheets can be loaded by repeating the directive:

css=/cgit/cgit.css
css=/cgit/custom.css

Stylesheets are included in document order in the <head> section via cgit_print_docstart() in ui-shared.c.

Page Structure

The HTML layout uses this basic structure:

<body>
  <div id='cgit'>
    <table id='header'>...</table>      <!-- site header with logo -->
    <table id='navigation'>...</table>  <!-- tab navigation -->
    <div id='content'>                  <!-- page content -->
      <!-- page-specific content -->
    </div>
    <div class='footer'>...</div>       <!-- footer -->
  </div>
</body>

Base Styles

Body and Layout

body {
    font-family: sans-serif;
    font-size: 11px;
    color: #000;
    background: white;
    padding: 4px;
}

div#cgit {
    padding: 0;
    margin: 0;
    font-family: monospace;
    font-size: 12px;
}

Header

table#header {
    width: 100%;
    margin-bottom: 1em;
}

table#header td.logo {
    /* logo cell */
}

table#header td.main {
    font-size: 250%;
    font-weight: bold;
    vertical-align: bottom;
    padding-left: 10px;
}

table#header td.sub {
    color: #999;
    font-size: 75%;
    vertical-align: top;
    padding-left: 10px;
}

Navigation Tabs

table#navigation {
    width: 100%;
}

table#navigation a {
    padding: 2px 6px;
    color: #000;
    text-decoration: none;
}

table#navigation a:hover {
    color: #00f;
}

Content Areas

Repository List

table.list {
    border-collapse: collapse;
    border: solid 1px #aaa;
    width: 100%;
}

table.list th {
    text-align: left;
    font-weight: bold;
    background: #ddd;
    border-bottom: solid 1px #aaa;
    padding: 2px 4px;
}

table.list td {
    padding: 2px 4px;
    border: none;
}

table.list tr:hover {
    background: #eee;
}

table.list td a {
    color: #00f;
    text-decoration: none;
}

table.list td a:hover {
    text-decoration: underline;
}

Sections

div.section-header {
    background: #eee;
    border: solid 1px #ddd;
    padding: 2px 4px;
    font-weight: bold;
    margin-top: 1em;
}

Diff Styles

Diffstat

table.diffstat {
    border-collapse: collapse;
    border: solid 1px #aaa;
}

table.diffstat td {
    padding: 1px 4px;
    border: none;
}

table.diffstat td.mode {
    font-weight: bold;
    /* status indicator: A/M/D/R */
}

table.diffstat td.graph {
    width: 500px;
}

table.diffstat td.graph span.add {
    background: #5f5;
    /* green bar for additions */
}

table.diffstat td.graph span.rem {
    background: #f55;
    /* red bar for deletions */
}

table.diffstat .total {
    font-weight: bold;
    text-align: center;
}

Unified Diff

table.diff {
    width: 100%;
}

table.diff td div.head {
    font-weight: bold;
    margin-top: 1em;
    color: #000;
}

table.diff td div.hunk {
    color: #009;
    /* hunk header @@ ... @@ */
}

table.diff td div.add {
    color: green;
    background: #dfd;
}

table.diff td div.del {
    color: red;
    background: #fdd;
}

Side-by-Side Diff

table.ssdiff {
    width: 100%;
}

table.ssdiff td {
    font-family: monospace;
    font-size: 12px;
    padding: 1px 4px;
    vertical-align: top;
}

table.ssdiff td.lineno {
    text-align: right;
    width: 3em;
    background: #eee;
    color: #999;
}

table.ssdiff td.add {
    background: #dfd;
}

table.ssdiff td.del {
    background: #fdd;
}

table.ssdiff td.changed {
    background: #ffc;
}

table.ssdiff span.add {
    background: #afa;
    font-weight: bold;
}

table.ssdiff span.del {
    background: #faa;
    font-weight: bold;
}

Blob/Tree View

table.blob {
    border-collapse: collapse;
    width: 100%;
}

table.blob td {
    font-family: monospace;
    font-size: 12px;
    padding: 0 4px;
    vertical-align: top;
}

table.blob td.linenumbers {
    text-align: right;
    color: #999;
    background: #eee;
    width: 3em;
    border-right: solid 1px #ddd;
}

table.blob td.lines {
    white-space: pre;
}

Tree Listing

table.list td.ls-mode {
    font-family: monospace;
    width: 10em;
}

table.list td.ls-size {
    text-align: right;
    width: 5em;
}

Commit View

table.commit-info {
    border-collapse: collapse;
    border: solid 1px #aaa;
    margin-bottom: 1em;
}

table.commit-info th {
    text-align: left;
    font-weight: bold;
    padding: 2px 6px;
    vertical-align: top;
}

table.commit-info td {
    padding: 2px 6px;
}

div.commit-subject {
    font-weight: bold;
    font-size: 125%;
    margin: 1em 0 0.5em;
}

div.commit-msg {
    white-space: pre;
    font-family: monospace;
}

div.notes-header {
    font-weight: bold;
    padding-top: 1em;
}

div.notes {
    white-space: pre;
    font-family: monospace;
    border-left: solid 3px #dd5;
    padding: 0.5em;
    background: #ffe;
}

Log View

div.commit-graph {
    font-family: monospace;
    white-space: pre;
    color: #000;
}

/* Column colors for commit graph */
.column1  { color: #a00; }
.column2  { color: #0a0; }
.column3  { color: #00a; }
.column4  { color: #aa0; }
.column5  { color: #0aa; }
.column6  { color: #a0a; }

Stats View

table.stats {
    border-collapse: collapse;
    border: solid 1px #aaa;
}

table.stats th {
    text-align: left;
    padding: 2px 6px;
    background: #ddd;
}

table.stats td {
    padding: 2px 6px;
}

div.stats-graph {
    /* bar chart container */
}

Form Elements

div.cgit-panel {
    float: right;
    margin: 0 0 0.5em 0.5em;
    padding: 4px;
    border: solid 1px #aaa;
    background: #eee;
}

div.cgit-panel b {
    display: block;
    margin-bottom: 2px;
}

div.cgit-panel select,
div.cgit-panel input {
    font-size: 11px;
}

Customization Strategies

Method 1: Override Stylesheet

Create a custom CSS file that overrides specific rules:

/* /cgit/custom.css */
body {
    background: #1a1a2e;
    color: #e0e0e0;
}

div#cgit {
    background: #16213e;
}

table.list th {
    background: #0f3460;
    color: #e0e0e0;
}
css=/cgit/cgit.css
css=/cgit/custom.css

Method 2: Replace Stylesheet

Replace the default stylesheet entirely:

css=/cgit/mytheme.css

Method 3: head-include

Inject inline styles via the head-include directive:

head-include=/etc/cgit/extra-head.html
<!-- /etc/cgit/extra-head.html -->
<style>
  body { background: #f0f0f0; }
</style>

CSS Classes Reference

Layout Classes

Class/ID Element Description
#cgit div Main container
#header table Site header
#navigation table Tab navigation
#content div Page content area
.footer div Page footer

Content Classes

Class Element Description
.list table Data listing (repos, files, refs)
.blob table File content display
.diff table Unified diff
.ssdiff table Side-by-side diff
.diffstat table Diff statistics
.commit-info table Commit metadata
.stats table Statistics data
.cgit-panel div Control panel

Diff Classes

Class Element Description
.add div/span Added lines/chars
.del div/span Deleted lines/chars
.hunk div Hunk header
.ctx div Context lines
.head div File header
.changed td Modified line (ssdiff)
.lineno td Line number column

Status Classes

Class Description
.upd Modified file
.add Added file
.del Deleted file
.mode File mode indicator
.graph Graph bar container

Was this handbook page helpful?

This page is part of the Project Tick Handbook, which is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license. View full license details.
Last updated: April 18, 2026