diff --git a/imgsrc/srv/angle-down.svg b/imgsrc/srv/angle-down.svg
new file mode 100644
index 0000000000..ac44b2a3c9
--- /dev/null
+++ b/imgsrc/srv/angle-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgsrc/srv/book.svg b/imgsrc/srv/book.svg
new file mode 100644
index 0000000000..2c1ee42305
--- /dev/null
+++ b/imgsrc/srv/book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgsrc/srv/bug.svg b/imgsrc/srv/bug.svg
new file mode 100644
index 0000000000..0d6bfb91e0
--- /dev/null
+++ b/imgsrc/srv/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgsrc/srv/close.svg b/imgsrc/srv/close.svg
new file mode 100644
index 0000000000..f063b3df42
--- /dev/null
+++ b/imgsrc/srv/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgsrc/srv/cloud-download.svg b/imgsrc/srv/cloud-download.svg
new file mode 100644
index 0000000000..ec183b7ae6
--- /dev/null
+++ b/imgsrc/srv/cloud-download.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/imgsrc/srv/cog.svg b/imgsrc/srv/cog.svg
new file mode 100644
index 0000000000..c8705ea3c8
--- /dev/null
+++ b/imgsrc/srv/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgsrc/srv/ellipsis-v.svg b/imgsrc/srv/ellipsis-v.svg
new file mode 100644
index 0000000000..a1e574c812
--- /dev/null
+++ b/imgsrc/srv/ellipsis-v.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgsrc/srv/generate.py b/imgsrc/srv/generate.py
new file mode 100644
index 0000000000..c2a8ae9f14
--- /dev/null
+++ b/imgsrc/srv/generate.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python2
+# vim:fileencoding=utf-8
+# License: GPLv3 Copyright: 2016, Kovid Goyal
+
+from __future__ import (unicode_literals, division, absolute_import,
+ print_function)
+import os, re, sys
+
+from lxml import etree
+
+SVG_NS = 'http://www.w3.org/2000/svg'
+XLINK_NS = 'http://www.w3.org/1999/xlink'
+
+def clone_node(node, parent):
+ ans = parent.makeelement(node.tag)
+ for k in node.keys():
+ ans.set(k, node.get(k))
+ ans.text, ans.tail = node.text, node.tail
+ for child in node.iterchildren('*'):
+ clone_node(child, ans)
+ parent.append(ans)
+ return ans
+
+def merge():
+ base = os.path.dirname(os.path.abspath(__file__))
+ ans = etree.fromstring('' % (SVG_NS, XLINK_NS))
+ for f in os.listdir(base):
+ if not f.endswith('.svg'):
+ continue
+ with open(os.path.join(base, f), 'rb') as ff:
+ raw = ff.read()
+ svg = etree.fromstring(raw)
+ symbol = ans.makeelement('{%s}symbol' % SVG_NS)
+ symbol.set('viewBox', svg.get('viewBox'))
+ symbol.set('id', 'icon-' + f.rpartition('.')[0])
+ for child in svg.iterchildren('*'):
+ clone_node(child, symbol)
+ ans.append(symbol)
+ ans = etree.tostring(ans, encoding=unicode, pretty_print=True, with_tail=False)
+ ans = re.sub('