aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Breakpad.md14
-rw-r--r--doc/Bugs.asciidoc54
-rw-r--r--doc/Building.asciidoc81
-rw-r--r--doc/Building/Breakpad.asciidoc20
-rw-r--r--doc/Building/QtWebEngine.md7
-rw-r--r--doc/Building/Windows.asciidoc26
-rw-r--r--doc/Building/smolbote.md30
-rw-r--r--doc/Development.asciidoc42
-rw-r--r--doc/Development/ManPage.asciidoc7
-rw-r--r--doc/Development/RepositoryCommands.asciidoc6
-rw-r--r--doc/Development/Translating.asciidoc16
-rw-r--r--doc/Development/Updater.asciidoc (renamed from doc/Updater.md)28
-rw-r--r--doc/ManPage.md15
-rw-r--r--doc/RepositoryCommands.md16
-rw-r--r--doc/Translating.md24
-rw-r--r--doc/UrlFilter.md95
-rw-r--r--doc/Usage.asciidoc21
-rw-r--r--doc/Usage/CommandLine.asciidoc (renamed from doc/Usage/CommandLine.md)8
-rw-r--r--doc/Usage/Configuration.asciidoc (renamed from doc/Usage/Configuration.md)29
-rw-r--r--doc/Usage/Profile.asciidoc31
-rw-r--r--doc/Usage/Profile.md17
-rw-r--r--doc/Usage/Session.md30
-rw-r--r--doc/smolbote.7.asciidoc35
23 files changed, 371 insertions, 281 deletions
diff --git a/doc/Breakpad.md b/doc/Breakpad.md
deleted file mode 100644
index d1056a5..0000000
--- a/doc/Breakpad.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## Producing symbols
-
-~~~sh
-tools/linux/dump_syms/dump_syms ./poi > poi.sym
-head -n1 poi.sym
-mkdir -p ./symbols/poi/<hex>
-mv poi.sym ./symbols/poi/<hex>
-~~~
-
-## Processing minidump
-
-~~~sh
-processor/minidump_stackwalk minidump.dmp ./symbols
-~~~
diff --git a/doc/Bugs.asciidoc b/doc/Bugs.asciidoc
new file mode 100644
index 0000000..057fae9
--- /dev/null
+++ b/doc/Bugs.asciidoc
@@ -0,0 +1,54 @@
+== Reporting bugs
+
+=== What to include
+A bug report should contain these 4 things:
+
+==== Environment
+This includes program version; operating system used; version of Qt or other
+libraries; any relevant information if you built from source.
+
+==== Steps to reproduce
+Give detailed steps on how to reproduce the problem. Start from the beginning,
+mention the actions involved, and be verbose.
+
+==== Expected result
+It's important to include the result you were expecting, as it might differ
+from the way the program was designed to work.
+
+==== Actual result
+It is also important to include a good description of the buggy behaviour
+itself as well, because it's possible that following your steps on a different
+system doesn't reproduce the issue.
+
+Send bug reports to _aqua at iserlohn dash fortress dot net_.
+
+_Adapted from the guide in the texmate repository._
+
+== Known bugs
+
+=== databases-incognito in home
+https://bugreports.qt.io/browse/QTBUG-62957
+
+=== loadFinished is not always emitted when loading is finished
+https://bugreports.qt.io/browse/QTBUG-65223
+
+=== QWebEngineView setUrl()/load() methods in some case divide page in two parts
+https://bugreports.qt.io/browse/QTBUG-68224
+
+Only affects Qt 5.11.0. Set __QTBUG_68224_WORKAROUND__.
+
+=== Wayland bugs
+
+=== mainwindow.maximized doesn't work
+setWindowState(Qt::WindowMaximized) has no effect on KDE/Wayland:
+https://community.kde.org/Plasma/Wayland_Showstoppers
+
+=== Windows bugs
+
+=== stdout and stderr
+Starting the application with some command-line options (like --version,
+--help, etc) causes the application to 'stall' on exit.
+
+Starting the application from the command prompt returns after launch, but
+continues outputting stdout and stderr to it.
+
diff --git a/doc/Building.asciidoc b/doc/Building.asciidoc
new file mode 100644
index 0000000..47eb0bb
--- /dev/null
+++ b/doc/Building.asciidoc
@@ -0,0 +1,81 @@
+== Requirements
+
+[cols="1,1,3"]
+|===
+|Name |Version |Notes
+
+| link:https://www.qt.io/[Qt]
+| 5.11.1 or later
+| QtWebEngine should be buildable with older versions of Qt. Please use the
+ latest version.
+
+| link:http://www.boost.org/[boost]
+| Version 1.66
+| Components: program_options
+
+| cmake
+| Version 3.10
+| Anything supporting modern cmake
+
+| Compiler
+| C++17 support
+| gcc 7+; clang 4+; on Windows only MSVC is supported due to QtWebEngine
+
+| asciidoc
+|
+| Only for building manpage
+
+|===
+
+== Building from source
+In short, the generic cmake build loop of 'cmake, make, make install' will
+generate a makefile, build the program and install it.
+
+[source, sh]
+----
+# clone the repository
+git clone https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote.git smolbote.git
+cd smolbote.git
+git submodule init
+git submodule update 3rd-party/SingleApplication/SingleApplication.git
+
+
+# generate makefile
+mkdir build && cd build
+cmake -DCMAKE_BUILD_TYPE=Release ..
+
+# make && make install
+make -j4
+make install
+----
+
+=== vendor.cmake
+vendor.cmake contains various settings to customize the way in which the program
+functions. The available options and their values may change with revisions.
+When changing vendor.cmake, make sure to have all values defined in the preset.
+
+ -DVENDOR=path/to/custom-vendor.cmake
+
+=== Compiler flags
+cmake does not set any C++ flags by default, including no optimization flags.
+You need to set these yourself if your build system doesn't set any either.
+
+- On gcc/clang, no optimize flags are set by default, setting at least -O2 is
+recommended; check vendor.cmake.
+
+=== Install prefix (`-DCMAKE_INSTALL_PREFIX`)
+Sets the install location prefix. Install targets are only set on Release builds.
+
+- windows: Binary is written to bin/, and plugins to bin/plugins.
+- others: Binary will be written to bin/, and plugins to lib/smolbote/.
+
+=== Using libc++
+You can use libc++ over stdlibc++ by setting UseLibCpp to On. Requires clang.
+
+ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DUseLibCpp=On
+
+// Additional items
+
+include::Building/Breakpad.asciidoc[]
+
+include::Building/Windows.asciidoc[]
diff --git a/doc/Building/Breakpad.asciidoc b/doc/Building/Breakpad.asciidoc
new file mode 100644
index 0000000..9cc561e
--- /dev/null
+++ b/doc/Building/Breakpad.asciidoc
@@ -0,0 +1,20 @@
+== Breakpad
+
+=== Enabling breakpad
+Use `-DBreakpad=On` cmake option. This requires either Breakpad be installed as
+a package, or that it is already built. Check 3rd-party/breakpad/CMakeLists.txt.
+
+=== Producing symbols
+[source, sh]
+----
+tools/linux/dump_syms/dump_syms ./poi > poi.sym
+head -n1 poi.sym
+mkdir -p ./symbols/poi/<hex>
+mv poi.sym ./symbols/poi/<hex>
+----
+
+=== Processing minidump
+[source, sh]
+----
+processor/minidump_stackwalk minidump.dmp ./symbols
+----
diff --git a/doc/Building/QtWebEngine.md b/doc/Building/QtWebEngine.md
deleted file mode 100644
index 7d72dd6..0000000
--- a/doc/Building/QtWebEngine.md
+++ /dev/null
@@ -1,7 +0,0 @@
-- download qtwebengine
-
-~~~sh
-mkdir build && cd build
-qmake ../qtwebengine-version-source/qtwebengine.pro
-make
-~~~
diff --git a/doc/Building/Windows.asciidoc b/doc/Building/Windows.asciidoc
new file mode 100644
index 0000000..4c1fc20
--- /dev/null
+++ b/doc/Building/Windows.asciidoc
@@ -0,0 +1,26 @@
+== Building on Windows
+[source, bat]
+----
+set INSTALL_DIR="C:\projects\smolbote-install"
+mkdir %INSTALL_DIR%
+
+mkdir C:\projects\smolbote-build
+cd C:\projects\smolbote-build
+
+set QT="C:\Qt\5.11\msvc2017_64"
+set BOOST_ROOT="C:\Libraries\boost_1_66_0"
+set BOOST_LIBDIR="C:\Libraries\boost_1_66_0\lib64-msvc-14.1"
+
+cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR%
+ -DCMAKE_PREFIX_PATH=%QT%;%BOOST_ROOT%
+ -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBDIR% -DBoost_USE_STATIC_LIBS=On
+ C:\projects\smolbote
+
+cmake --build . --target poi --config Release
+cmake --build . --target install --config Release
+cd %INSTALL_DIR%
+C:\Qt\5.11\msvc2017_64\bin\windeployqt.exe bin\poi.exe
+
+7z a C:\projects\smolbote\build.7z %INSTALL_DIR%
+----
diff --git a/doc/Building/smolbote.md b/doc/Building/smolbote.md
deleted file mode 100644
index e40132c..0000000
--- a/doc/Building/smolbote.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Customizing
-Set through vendor.cmake.
-
-### Configuration defaults
-
-### Version information
-Building without git metadata requires the version be set in vendor.cmake.
-
-
-## Building on Windows
-
-~~~sh
-set INSTALL_DIR="C:\projects\smolbote-install"
-mkdir %INSTALL_DIR%
-
-mkdir C:\projects\smolbote-build
-cd C:\projects\smolbote-build
-
-set QT="C:\Qt\5.11.0\msvc2017_64"
-set BOOST_ROOT="C:\Libraries\boost_1_66_0"
-set BOOST_LIBDIR="C:\Libraries\boost_1_66_0\lib64-msvc-14.1"
-cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_PREFIX_PATH=%QT%;%BOOST_ROOT% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBDIR% -DBoost_USE_STATIC_LIBS=On C:\projects\smolbote-hg
-cmake --build . --target poi --config Release
-cmake --build . --target install --config Release
-cd %INSTALL_DIR%
-C:\Qt\5.10.1\msvc2017_64\bin\windeployqt.exe bin\poi.exe
-
-7z a C:\projects\smolbote-hg\smolbote.7z %INSTALL_DIR%
-~~~
-
diff --git a/doc/Development.asciidoc b/doc/Development.asciidoc
new file mode 100644
index 0000000..41c832d
--- /dev/null
+++ b/doc/Development.asciidoc
@@ -0,0 +1,42 @@
+== Guidelines
+
+=== Qt
+* Check pointers with Q_CHECK_PTR before using or returning them.
+* Avoid using connect SIGNAL and SLOT. Instead use &Class::method. This way, connects are checked during the compile,
+ not at runtime.
+* Where possible, use QVector over QList: http://lists.qt-project.org/pipermail/development/2017-March/029040.html
+
+=== clazy
+You can use [clazy](https://github.com/KDE/clazy) to check Qt semantics.
+Requires clang.
+
+To set check levels, set the CLAZY_CHECKS environment variable to 'level0,level1', etc.
+
+==== Setting up in QtCreator
+The simplest way to set it up is to use _clazy_ instead of _clang_.
+
+1. Go to Tools » Options » Build & Run » Compilers
+2. Clone the clang compiler of your choice
+3. Set _Compiler path_ to _/usr/bin/clazy_
+
+== Licensing
+Smolbote is licensed under GPLv3 _only_. Your code needs to be compatible with it, and have a license header in the
+style used by the project.
+
+- No self-updating "-or-later" licensing.
+
+=== SPDX-License-Identifier
+A full list of license identifiers can be found on [the SPDX website](https://spdx.org/licenses/).
+
+== Style
+There is a clang-format style in .clang-format.
+
+== Format patch for email
+
+~~~ sh
+hg export -r startcommit[:endcommit] -o patchname.txt
+~~~
+
+to export the from _startcommit_ until tip or optionally _endcommit_.
+
+Email the patch file to _aqua at iserlohn dash fortress dot net_.
diff --git a/doc/Development/ManPage.asciidoc b/doc/Development/ManPage.asciidoc
new file mode 100644
index 0000000..4d8c015
--- /dev/null
+++ b/doc/Development/ManPage.asciidoc
@@ -0,0 +1,7 @@
+== manpage
+
+=== Generating manpage
+[code, sh]
+----
+a2x --format=manpage doc/smolbote.7.asciidoc
+----
diff --git a/doc/Development/RepositoryCommands.asciidoc b/doc/Development/RepositoryCommands.asciidoc
new file mode 100644
index 0000000..13e2f8e
--- /dev/null
+++ b/doc/Development/RepositoryCommands.asciidoc
@@ -0,0 +1,6 @@
+== Repository commands
+[code, sh]
+----
+# listing branches
+curl --request GET --url https://neueland.iserlohn-fortress.net/gitea/api/v1/repos/aqua/smolbote/branches
+----
diff --git a/doc/Development/Translating.asciidoc b/doc/Development/Translating.asciidoc
new file mode 100644
index 0000000..f79fa56
--- /dev/null
+++ b/doc/Development/Translating.asciidoc
@@ -0,0 +1,16 @@
+== Translating
+[code, sh]
+----
+# generating translations
+lupdate src/ lib/ -ts lang/<lang-id>.ts
+
+# updating translations
+lupdate src/ lib/ -no-obsolete -ts lang/<lang-id>.ts
+
+# generate lang/<lang-id>.qm
+lrelease lang/<land-id>.ts
+----
+
+=== Using translations
+ --browser.locale # set Qt translation; ex. de
+ --browser.translation # set translation file; ex. /home/user/.config/smolbote/lang/custom-translate.qm
diff --git a/doc/Updater.md b/doc/Development/Updater.asciidoc
index 899240f..a039318 100644
--- a/doc/Updater.md
+++ b/doc/Development/Updater.asciidoc
@@ -1,25 +1,25 @@
-## Updater
+== Updater
-### Manifest
-~~~sh
+=== Creating manifest
+[code, sh]
+----
find windows/ -type f | xargs sha512sum | sed 's/windows\///' > windows-sha512.txt
find windows/ -type d -exec chmod 755 {} +
-~~~
+----
-### Building
+=== Building
You can build for the current system using:
-~~~sh
+[code, sh]
+----
go build
-~~~
+# remove debug information
+strip updater
+----
You can also cross-compile for other systems by setting GOOS and GOARCH. For a
list of supported platforms, use `go tool dist list`.
-~~~sh
+[code, sh]
+----
GOOS=windows GOARCH=amd64 go build
-~~~
-
-#### Removing debug information
-~~~sh
-strip updater
-~~~
+----
diff --git a/doc/ManPage.md b/doc/ManPage.md
deleted file mode 100644
index d3f7c74..0000000
--- a/doc/ManPage.md
+++ /dev/null
@@ -1,15 +0,0 @@
-The manpage format is ridiculous, so they get generated from markdown (which is more sane in comparison)
-
-### with ronn
-~~~sh
-## install
-gem install --user-install ronn
-## generate
-ronn smolbote.7.ronn
-~~~
-
-### with go-md2man
-~~~sh
-go-md2man -in smolbote.md -out smolbote.7
-~~~
-
diff --git a/doc/RepositoryCommands.md b/doc/RepositoryCommands.md
deleted file mode 100644
index 3725b6e..0000000
--- a/doc/RepositoryCommands.md
+++ /dev/null
@@ -1,16 +0,0 @@
-## git commit template
-You can set the commit template with:
-
-~~~sh
-git config commit.template=.git-commit-template
-~~~
-
-## gitea api
-A full list of the api can be found on https://try.gitea.io/api/swagger.
-
-## Listing branches
-
-~~~sh
-curl --request GET --url https://neueland.iserlohn-fortress.net/gitea/api/v1/repos/aqua/smolbote/branches
-~~~
-
diff --git a/doc/Translating.md b/doc/Translating.md
deleted file mode 100644
index fc7bad3..0000000
--- a/doc/Translating.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Generating translations
-
-~~~sh
-lupdate src/ lib/ -ts lang/<lang-id>.ts
-~~~
-
-### Updating translations
-~~~sh
-lupdate src/ lib/ -no-obsolete -ts lang/<lang-id>.ts
-~~~
-
-## Baking translation
-This generates lang/<lang-id>.qm
-
-~~~sh
-lrelease lang/<land-id>.ts
-~~~
-
-## Using translations
-
-~~~sh
---browser.locale # set Qt translation; ex. de
---browser.translation # set translation file; ex. /home/user/.config/smolbote/lang/custom-translate.qm
-~~~
diff --git a/doc/UrlFilter.md b/doc/UrlFilter.md
deleted file mode 100644
index b521228..0000000
--- a/doc/UrlFilter.md
+++ /dev/null
@@ -1,95 +0,0 @@
-## FilterDomain
-Filter Domains are groups of domains that can point to one or more filter
-rules.
-
-### Types
-There are 4 Filter Domain types:
-- AllowOnDomains - only match specified domains
-- BlockOnDomains - match all but specified domains
-- AllowOnAllDomains - match all domains
-- BlockOnAllDomains - match no domains
-
-### JSON
- {
- "type" : "AllowOnDomains",
- "domains" : [ "example.com", "test.example.com" ],
- "rules" : []
- }
-
-## FilterRule
-Filter rules contain information on how a request should be modified.
-
-### Action
-- Whitelist - allow this request
-- Blacklist - block this request
-- Redirect - redirect this request
-- SetHeader - apply a list of headers
-
-### Match Type
-- "regexp"
-- "contains"
-- "endswith"
-- if none is specified, all URLs are matched
-
-### JSON
-Allow all URLs that contain "waifu.png"
- {
- "action" : "Whitelist"
- "contains" : "waifu.png"
- }
-
-Block specific URL
- {
- "action" : "Blacklist"
- "equals" : "example.com/annoying-ad/masquerade/waifu.png"
- }
-
-Block all URLs that contain "banner.gif"
- {
- "action" : "Blacklist",
- "contains" : "banner.gif"
- }
-
-Redirect URLs containing "ads/annoying-spam.gif" to "waifu.tld/waifu.gif"
- {
- "action" : "Redirect"
- "contains" : "ads/annoying-spam.gif"
- "url" : "waifu.tld/waifu.gif"
- }
-
-Set some headers
- {
- "action" : "SetHeader"
- "headers" : [ "DNT:1" ]
- }
-
-## QWebEngineUrlRequestInterceptor
-
-All network requests pass through the request interceptor. It gives the
-following information:
-
-- firstPartyUrl - the page on which the request is made
-- requestUrl - the url of the request
-- requestMethod
-- resourceType
-- navigationType
-
-And provides the following methods:
-
-- block (bool shouldBlock) - can block the request
-- redirect (const QUrl) - can redirect the requestUrl
-- setHttpHeader - can set HTTP headers (such as user agent and do not track)
-
-### Example
-This is a sample request made when loading DuckDuckGo:
-
- firstPartyUrl=https://duckduckgo.com/
- requestUrl=https://duckduckgo.com/o1635.css
-
-## How the filter works
-When a requst comes in, the interceptor extracts the host of the request and
-matches it against the list of FilterDomains.
-
- firstPartyHost=duckduckgo.com
- requestHost=duckduckgo.com
-
diff --git a/doc/Usage.asciidoc b/doc/Usage.asciidoc
new file mode 100644
index 0000000..ee2cc20
--- /dev/null
+++ b/doc/Usage.asciidoc
@@ -0,0 +1,21 @@
+== Keyboard shortcuts
+- F4 to focus the address bar and type an address; F2 show its menu
+- Ctrl + Left/Right - go back/forward
+- Ctrl + T - new tab
+- Ctrl + X - close tab
+- Ctrl + O/P - previous tab/next tab
+- Ctrl + Shift + O/P - move tab left/right
+- Ctrl + B - show/hide bookmarks
+- Ctrl + D - show/hide downloads
+
+== Subwindows
+A subwindow is a multiple document interface window that contains a collection
+of tabs and has a default profile. It can be minimized, resized, moved,
+maximized, tiled (F9) and cascaded (F10) within the main window.
+
+- Ctrl + G - new subwindow
+- Ctrl + W - close subwindow
+
+include::Usage/Profile.asciidoc[]
+
+include::Usage/Configuration.asciidoc[]
diff --git a/doc/Usage/CommandLine.md b/doc/Usage/CommandLine.asciidoc
index 1c532ce..a21b7c2 100644
--- a/doc/Usage/CommandLine.md
+++ b/doc/Usage/CommandLine.asciidoc
@@ -1,12 +1,8 @@
-## Command-line options
+== Command-line Options
-### General
+=== General
* `-h`, `--help`: Display this help.
* `-v`, `--version`: Display version information.
* `--build`: Display build branch and commit.
* `-c`, `--config`: Set configuration file.
* `--no-remote`: Don't check for other instances when starting.
-
-### Tweaking configuration
-You can overwrite options at runtime using the option path as a command line
-parameter.
diff --git a/doc/Usage/Configuration.md b/doc/Usage/Configuration.asciidoc
index 3bf55b9..44e6b92 100644
--- a/doc/Usage/Configuration.md
+++ b/doc/Usage/Configuration.asciidoc
@@ -1,35 +1,38 @@
-## Configuration
+== Configuration
-The Configuration is loaded from _~/.config/smolbote/smolbote.cfg_. Most
+The Configuration is loaded from .config/smolbote/smolbote.cfg. Most
settings are only loaded on launch.
-For a full list of settings, check `--help`.
+For a full list of settings, check '--help'.
-### Browser (group: browser)
+You can overwrite options at runtime using the option path as a command line
+parameter.
-### Main Window (group: mainwindow)
+- Browser (group: browser)
+
+- Main Window (group: mainwindow)
A main window contains one or more subwindows.
-### Subwindow (group: window)
+- Subwindow (group: window)
A subwindow contains multiple tabs and functions similarly to a tab group.
-### Navigation bar (group: navigation)
+- Navigation bar (group: navigation)
The navigation bar is the toolbar that holds the history, reload and home
buttons, as well as the address bar. It can be made movable through the
navigation.movable option.
-### Address bar (group: addressbar)
+- Address bar (group: addressbar)
-### Filter (group: filter)
+- Filter (group: filter)
-### Plugins (group: plugins)
+- Plugins (group: plugins)
Plugins a way of extending smolbote's functionality using the Qt plugin system.
They are not to be confused with NPAPI/PPAPI or WebExtension plugins.
To enable a plugin either copy it or symlink it in the plugins.path location,
or set its absolute path as the plugins.path.
-### Profiles (group: profile)
+- Profiles (group: profile)
A Profile is a collection of settings, policies, scripts, cookies, cache and
history. Profiles can be used to isolate pages from each other.
@@ -47,7 +50,7 @@ site would still be using the default off-the-record profile.
Profile definitions are stored in the profiles.path location. To create a new
profile, create a profile-id.profile file in that location.
-### Bookmarks (group: bookmarks)
+- Bookmarks (group: bookmarks)
-### Downloads (group: downloads)
+- Downloads (group: downloads)
diff --git a/doc/Usage/Profile.asciidoc b/doc/Usage/Profile.asciidoc
new file mode 100644
index 0000000..9b00dbc
--- /dev/null
+++ b/doc/Usage/Profile.asciidoc
@@ -0,0 +1,31 @@
+== Profiles
+A Profile is a collection of settings, policies, scripts, cookies, cache and
+history. Profiles can be used to isolate pages from each other.
+
+Each window has a default profile it uses when opening new tabs. This can be
+changed from the window's menu. Additionally, tabs can have their profiles
+individually changed from their context menu.
+
+Because profiles store all their data separately, you can log in into the same
+site with a different account from each profile. However, links opened into new
+tabs will still use the subwindow's default profile. For example, you can set a
+profile to hold login information for a site, but all new tabs opened from that
+site would still be using the default off-the-record profile.
+
+Profiles are read from profile.path
+
+Settings
+
+- otr (defaults to true) - is this profile off-the-record
+- name (defaults to the configuration file name)
+- search (defaults to profile.search) - search engine url
+- homepage (defaults to profile.homepage)
+- newtab (defaults to profile.newtab)
+
+Properties
+Key is property name; value is property value
+
+Attributes
+see QWebEngineSetting::WebAttribute for list of IDs.
+Key is attribute id; value is attribute value (true/false)
+
diff --git a/doc/Usage/Profile.md b/doc/Usage/Profile.md
deleted file mode 100644
index d205a86..0000000
--- a/doc/Usage/Profile.md
+++ /dev/null
@@ -1,17 +0,0 @@
-Profiles are read from profile.path
-
-## Settings
-
-- otr (defaults to true) - is this profile off-the-record
-- name (defaults to the configuration file name)
-- search (defaults to profile.search) - search engine url
-- homepage (defaults to profile.homepage)
-- newtab (defaults to profile.newtab)
-
-### Properties
-Key is property name; value is property value
-
-### Attributes
-see QWebEngineSetting::WebAttribute for list of IDs.
-Key is attribute id; value is attribute value (true/false)
-
diff --git a/doc/Usage/Session.md b/doc/Usage/Session.md
deleted file mode 100644
index 3018253..0000000
--- a/doc/Usage/Session.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Session format
-A session is a single window, which contains a list of subwindows.
-
-Each subwindow has a profile (profile id), and a list of tabs.
-
-Each tab has a profile (profile id) and url.
-
-~~~json
-{
- "subwindows": [
- {
- "profile": "<profile id>",
- "tabs": [
- {
- "profile": "<profile id>",
- "url": "<url>"
- },
- {
- ...
- }
- ]
- }
- ]
-}
-
-~~~
-
-## --session
-This command-line option causes the browser to load the specified json file.
-
diff --git a/doc/smolbote.7.asciidoc b/doc/smolbote.7.asciidoc
new file mode 100644
index 0000000..ec1150f
--- /dev/null
+++ b/doc/smolbote.7.asciidoc
@@ -0,0 +1,35 @@
+= smolbote(7)
+:doctype: manpage
+:man source: smolbote
+:man manual: smolbote manpage
+:toc:
+:homepage: https://neueland.iserlohn-fortress.net/smolbote/
+
+== Name
+smolbote - yet another no-frills web browser
+
+== Synopsis
+*poi* ['-OPTION' ['...']] ['COMMAND'] ['URL' ['...']]
+
+== Description
+smolbote is a cross-platform keep-it-simple free software web browser based on
+Qt and QtWebEngine.
+
+include::Usage/CommandLine.asciidoc[]
+
+include::Usage/Configuration.asciidoc[]
+
+include::Usage/Profile.asciidoc[]
+
+== Copyright
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 3 as
+published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.