diff --git a/source/_static/CC0_button.svg b/source/_static/CC0_button.svg
new file mode 100644
index 0000000..195592b
--- /dev/null
+++ b/source/_static/CC0_button.svg
@@ -0,0 +1,98 @@
+
+
+
+
diff --git a/source/_static/custom.css b/source/_static/custom.css
new file mode 100644
index 0000000..710021c
--- /dev/null
+++ b/source/_static/custom.css
@@ -0,0 +1,71 @@
+@font-face {
+ font-family: andale;
+ src: url("fonts/ANDALEMO.TTF");
+}
+
+.yue h1, .yue h2, .yue h3, .yue h4, .yue h5,
+.t-sidebar h1, .t-sidebar h2, .t-sidebar h3 {
+ font-family: andale;
+ letter-spacing: -2px;
+}
+.yue h1 {
+ background: #111111;
+ color: #efefef;
+ padding-left: 20px;
+ margin-left: -20px;
+ letter-spacing: 0px;
+}
+
+.t-sidebar {
+ background: #111111;
+ font-size: 0.8em;
+}
+
+.t-sidebar .inner {
+ width: auto;
+}
+
+.yue pre {
+ font-family: andale;
+}
+
+.t-sidebar a, .t-sidebar li > a {
+ color: #a9e35a;
+}
+.t-sidebar h1, .t-sidebar h2, .t-sidebar h3,
+.t-sidebar h1 > a, .t-sidebar h2 > a, .t-sidebar h3 > a,
+.yue h1 a {
+ color: #efefef;
+}
+
+.t-sidebar a:hover, .t-sidebar li > a:hover {
+ color: #efefef;
+}
+
+#searchbox .input-group > button {
+ background-color: #dd4444;
+}
+
+.caption-text {
+ font-size: 1.5em;
+ font-weight: bold;
+ font-family: andale;
+ color: #000000;
+}
+
+.cc0 {
+ display:inline-block;
+ padding: 10px 40px;
+ background-image: url("CC0_button.svg");
+ background-repeat: no-repeat;
+ background-size: contain;
+}
+
+a.atom {
+ color: #dd6644;
+ font-weight: bold;
+}
+.atom img {
+ width: 30px;
+ font-family: andale;
+}
diff --git a/source/_static/fonts/ANDALEMO.TTF b/source/_static/fonts/ANDALEMO.TTF
new file mode 100644
index 0000000..40f4e4d
Binary files /dev/null and b/source/_static/fonts/ANDALEMO.TTF differ
diff --git a/source/_static/rss-icon.svg b/source/_static/rss-icon.svg
new file mode 100644
index 0000000..f4df406
--- /dev/null
+++ b/source/_static/rss-icon.svg
@@ -0,0 +1,48 @@
+
+
+
\ No newline at end of file
diff --git a/source/blog/automaticcrm-iso.rst b/source/blog/automaticcrm-iso.rst
new file mode 100644
index 0000000..6cddc35
--- /dev/null
+++ b/source/blog/automaticcrm-iso.rst
@@ -0,0 +1,155 @@
+.. post:: 2019.08.10
+ :tags: howto,ubuntu,gnu/linux,installation
+ :category: gnu/linux
+ :author: vladan
+ :location: Belgrade
+
+===========================
+AutomaticCRM Ubuntu Desktop
+===========================
+
+Below are the steps taken to create the Ubuntu 18.04.2 installer for the needs
+of AutomaticCRM according to the requirements ...
+
+ Operating system
+
+ * Only one domain is allowed ( dev.automaticcrm.ai ) in network adapter
+ * No print screen functionality
+ * No usb memory functionality
+ * No access to the filesystem
+ * No apps except browser
+
+
+
+Steps to set up the build environment
+=====================================
+
+
+.. code-block:: bash
+
+ mkdir disk
+ sudo mount -o ubuntu-18.04.2-desktop-amd64.iso disk
+ rsync --exclude=/casper/filesystem.squashfs -av disk/ livecd/
+
+
+Set up the rootfs
+=================
+
+.. code-block:: bash
+
+ unsquashfs disk/casper/filesystem.squashfs
+ sudo systemd-nspawn \
+ --directory squashfs-root/ \
+ --bind ~/dev/automaticcrm/deb:/opt/deb
+ --bind /etc/resolv.conf /bin/bash
+
+Once in the shell, run these commands:
+
+.. code-block:: bash
+
+ apt-get update
+ apt-get -y purge \
+ usb-creator-common \
+ usb-creator-gtk \
+ thunderbird-gnome-support \
+ thunderbird \
+ remmina-common \
+ remmina \
+ remmina-plugin-rdp \
+ remmina-plugin-vnc \
+ firefox* \
+ libreoffice* \
+ alsa* \
+ cups* \
+ gnome-screenshot \
+ evince \
+ gedit
+
+ dpkg -i /opt/deb/google-chrome-stable_current_amd64.deb
+
+
+Restrict domains
+================
+
+To redirect all domains to localhost, except dev.automaticcrm.ai, create the
+file ``/etc/dnsmasq.d/autocrm.conf`` with these lines:
+
+.. code-block:: ini
+
+ address=/#/127.0.0.1
+ server=/dev.automaticcrm.ai/8.8.8.8
+
+Add this line to /etc/dnsmasq.conf
+
+.. code-block:: ini
+
+ conf-dir=/etc/dnsmasq.d
+
+
+Run Chrome ONLY
+===============
+
+Override the path for all users.
+
+Edit the desktop entry in ``/usr/share/xsessions/ubuntu.desktop`` so it starts
+Chrome in fullscreen mode:
+
+.. code-block:: ini
+
+ [Desktop Entry]
+ Name=Ubuntu
+ Comment=This session logs you into Ubuntu
+ Exec=env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/google-chrome --kiosk https://dev.automaticcrm.ai
+ Type=Application
+ DesktopNames=ubuntu:AutomaticCRM
+ X-Ubuntu-Gettext-Domain=gnome-session-3.0
+
+.. note::
+
+ If you want to change the domain, edit this file and also enable it in the
+ dnsmqsq config above.
+
+Remove USB drivers
+==================
+
+.. code-block:: bash
+
+ printf "\n#AutomaticCRM disabled modules\nblacklist uas\nblacklist usb_storage\n" >> /etc/modprobe.d/blacklist.conf
+
+
+Create the ISO
+==============
+
+Pack the squashfs image and copy it to casper.
+
+.. code-block:: bash
+
+ sudo mksquashfs squashfs-root/ livecd/casper/filesystem.squashfs
+
+
+Recreate installation files and pack the ISO.
+
+.. code-block:: bash
+
+ printf $(sudo du -sx --block-size=1 squashfs-root | cut -f1) > livecd/casper/filesystem.size
+ sudo systemd-nspawn --directory squashfs-root/ dpkg-query -W --showformat='${Package} ${Version}\n' > livecd/casper/filesystem.manifest
+ sudo cp livecd/casper/filesystem.manifest{,-desktop}
+ sudo rm livecd/md5sum.txt && sudo find livecd/ -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee livecd/md5sum.txt
+
+ mkisofs -r \
+ -V "AutomaticCRM Ubuntu Linux" \
+ -cache-inodes \
+ -J -l -b isolinux/isolinux.bin \
+ -c isolinux/boot.cat -no-emul-boot \
+ -boot-load-size 4 \
+ -boot-info-table \
+ -o automaticcrm-ubuntu-18.04.2.iso livecd/
+
+Test the installation in a vm
+=============================
+
+.. code-block:: bash
+
+ rm -f ubuntu.qcow2
+ qemu-img create -f qcow2 ubuntu.qcow2 40G
+ virsh define ./autocrm.xml && virsh start ubuntu18.04
diff --git a/source/conf.py b/source/conf.py
index 91db434..fa28ec0 100644
--- a/source/conf.py
+++ b/source/conf.py
@@ -16,9 +16,8 @@
# -- Project information -----------------------------------------------------
-
project = 'dev notes'
-copyright = '2019, Vladan Popovic'
+copyright = 'No Rights Reserved'
author = 'Vladan Popovic'
@@ -28,25 +27,51 @@ author = 'Vladan Popovic'
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
+ 'ablog',
]
+import ablog
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
+templates_path.append(ablog.get_html_templates_path())
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
-exclude_patterns = []
-
+exclude_patterns = ['cv.rst']
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
-html_theme = 'alabaster'
+#html_theme = 'alabaster'
+html_theme = 'sphinx_typlog_theme'
+import sphinx_typlog_theme
+html_theme_path = [sphinx_typlog_theme.get_path()]
+pygments_style = 'default'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
+html_css_files = [
+ 'custom.css',
+]
+html_sidebars = {
+ '**': [
+ 'localtoc.html',
+ 'relations.html',
+ 'searchbox.html',
+ 'atom.html',
+ ]
+}
+
+# Blog (ablog) config
+blog_authors = {
+ 'vladan': ('Vladan Popovic', 'https://dev.vp.mk'),
+}
+blog_languages = {
+ 'en': ('English', None),
+}
+blog_baseurl = 'localhost'
diff --git a/source/copyright.rst b/source/copyright.rst
new file mode 100644
index 0000000..1579b0a
--- /dev/null
+++ b/source/copyright.rst
@@ -0,0 +1,12 @@
+No Copyright
+============
+
+The person who associated a work with this deed has dedicated the work to the
+public domain by waiving all of his or her rights to the work worldwide under
+copyright law, including all related and neighboring rights, to the extent
+allowed by law.
+
+You can copy, modify, distribute and perform the work, even for commercial
+purposes, all without asking permission. See Other Information below.
+
+
diff --git a/source/index.rst b/source/index.rst
index a83748b..e399a2b 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -1,20 +1,19 @@
-.. dev notes documentation master file, created by
- sphinx-quickstart on Thu Aug 1 23:13:11 2019.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
+================
+Random dev notes
+================
-Welcome to dev notes's documentation!
-=====================================
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
+A pile of random notes while I was debugging, writing things on GNU/Linux,
+programming in Python, Rust, Emacs, VIM, deploying and experimenting with
+containers, virual machines and other randomness on various subjects.
+Recent posts
+============
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
+.. postlist:: 5
+ :author: vladan
+ :date: %A, %B %d, %Y
+ :format: {title} by {author} on {date}
+ :list-style: circle
+ :excerpts:
+ :sort:
diff --git a/tox.ini b/tox.ini
index a201ead..c336556 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,11 +1,16 @@
[tox]
-envlist=py3
+envlist = py3
skipsdist = True
[testenv:blog]
-deps=sphinx
-commands = sphinx-build source/ build/
+deps =
+ sphinx
+ sphinx-autobuild
+ sphinx-typlog-theme
+ ablog
+commands =
+ sphinx-autobuild -b html source/ build/html/
[testenv:cv]
-whitelist_externals=/usr/bin/pandoc
+whitelist_externals = /usr/bin/pandoc
commands = pandoc --from=rst -o build/cv.pdf source/cv.rst