Merge branch 'doc' into 'master'
docs: Create with tutorial See merge request Librem5/squeekboard!285
This commit is contained in:
		@ -14,7 +14,16 @@ before_script:
 | 
				
			|||||||
  - echo "deb http://ci.puri.sm/ scratch librem5" > /etc/apt/sources.list.d/ci.list
 | 
					  - echo "deb http://ci.puri.sm/ scratch librem5" > /etc/apt/sources.list.d/ci.list
 | 
				
			||||||
  - wget -O- https://ci.puri.sm/ci-repo.key | apt-key add -
 | 
					  - wget -O- https://ci.puri.sm/ci-repo.key | apt-key add -
 | 
				
			||||||
  - apt-get -y update
 | 
					  - apt-get -y update
 | 
				
			||||||
  - apt-get -y build-dep .
 | 
					
 | 
				
			||||||
 | 
					build_docs:
 | 
				
			||||||
 | 
					  <<: *tags
 | 
				
			||||||
 | 
					  stage: build
 | 
				
			||||||
 | 
					  artifacts:
 | 
				
			||||||
 | 
					    paths:
 | 
				
			||||||
 | 
					      - _build
 | 
				
			||||||
 | 
					  script:
 | 
				
			||||||
 | 
					      - apt-get -y install python3-recommonmark python3-sphinx
 | 
				
			||||||
 | 
					      - ./doc/build.sh _build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
build_meson:
 | 
					build_meson:
 | 
				
			||||||
  <<: *tags
 | 
					  <<: *tags
 | 
				
			||||||
@ -24,6 +33,7 @@ build_meson:
 | 
				
			|||||||
      - _build
 | 
					      - _build
 | 
				
			||||||
    expire_in: 3h
 | 
					    expire_in: 3h
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
 | 
					    - apt-get -y build-dep .
 | 
				
			||||||
    - meson . _build/ -Ddepdatadir=/usr/share
 | 
					    - meson . _build/ -Ddepdatadir=/usr/share
 | 
				
			||||||
    - ninja -C _build install
 | 
					    - ninja -C _build install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -49,6 +59,7 @@ build_deb_aarch64:
 | 
				
			|||||||
      paths:
 | 
					      paths:
 | 
				
			||||||
        - "*.deb"
 | 
					        - "*.deb"
 | 
				
			||||||
    script:
 | 
					    script:
 | 
				
			||||||
 | 
					        - apt-get -y build-dep .
 | 
				
			||||||
        - apt-get -y install devscripts
 | 
					        - apt-get -y install devscripts
 | 
				
			||||||
        - debuild -i -us -uc -b
 | 
					        - debuild -i -us -uc -b
 | 
				
			||||||
        - cp ../*.deb .
 | 
					        - cp ../*.deb .
 | 
				
			||||||
@ -68,4 +79,5 @@ test:
 | 
				
			|||||||
  needs:
 | 
					  needs:
 | 
				
			||||||
    - build_meson
 | 
					    - build_meson
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
 | 
					    - apt-get -y build-dep .
 | 
				
			||||||
    - ninja -C _build test
 | 
					    - ninja -C _build test
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								doc/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								doc/build.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Builds the documentation and places in the selected directory,
 | 
				
			||||||
 | 
					# or the working directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SCRIPT_PATH="$(realpath "$0")"
 | 
				
			||||||
 | 
					DOCS_DIR="$(dirname "$SCRIPT_PATH")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TARGET_DIR="${1:-./}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SPHINX=sphinx-build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! which sphinx-build ; then
 | 
				
			||||||
 | 
					    SPHINX=sphinx-build-3
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					$SPHINX -b html "${DOCS_DIR}" "${TARGET_DIR}"
 | 
				
			||||||
							
								
								
									
										165
									
								
								doc/conf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								doc/conf.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,165 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Configuration file for the Sphinx documentation builder.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file does only contain a selection of the most common options. For a
 | 
				
			||||||
 | 
					# full list see the documentation:
 | 
				
			||||||
 | 
					# http://www.sphinx-doc.org/en/master/config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- Path setup --------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If extensions (or modules to document with autodoc) are in another directory,
 | 
				
			||||||
 | 
					# add these directories to sys.path here. If the directory is relative to the
 | 
				
			||||||
 | 
					# documentation root, use os.path.abspath to make it absolute, like shown here.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# import os
 | 
				
			||||||
 | 
					# import sys
 | 
				
			||||||
 | 
					# sys.path.insert(0, os.path.abspath('.'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- Project information -----------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					project = 'squeekboard'
 | 
				
			||||||
 | 
					copyright = 'Squeekboard contributors'
 | 
				
			||||||
 | 
					author = 'Dorota Czaplejewicz'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The short X.Y version
 | 
				
			||||||
 | 
					version = ''
 | 
				
			||||||
 | 
					# The full version, including alpha/beta/rc tags
 | 
				
			||||||
 | 
					release = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- General configuration ---------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If your documentation needs a minimal Sphinx version, state it here.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# needs_sphinx = '1.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add any Sphinx extension module names here, as strings. They can be
 | 
				
			||||||
 | 
					# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 | 
				
			||||||
 | 
					# ones.
 | 
				
			||||||
 | 
					extensions = [
 | 
				
			||||||
 | 
					    'recommonmark'
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add any paths that contain templates here, relative to this directory.
 | 
				
			||||||
 | 
					templates_path = ['_templates']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The suffix(es) of source filenames.
 | 
				
			||||||
 | 
					# You can specify multiple suffix as a list of string:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# source_suffix = ['.rst', '.md']
 | 
				
			||||||
 | 
					source_suffix = '.md'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The master toctree document.
 | 
				
			||||||
 | 
					master_doc = 'index'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The language for content autogenerated by Sphinx. Refer to documentation
 | 
				
			||||||
 | 
					# for a list of supported languages.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This is also used if you do content translation via gettext catalogs.
 | 
				
			||||||
 | 
					# Usually you set "language" from the command line for these cases.
 | 
				
			||||||
 | 
					language = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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 = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The name of the Pygments (syntax highlighting) style to use.
 | 
				
			||||||
 | 
					pygments_style = 'sphinx'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- 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'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Theme options are theme-specific and customize the look and feel of a theme
 | 
				
			||||||
 | 
					# further.  For a list of options available for each theme, see the
 | 
				
			||||||
 | 
					# documentation.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# html_theme_options = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Custom sidebar templates, must be a dictionary that maps document names
 | 
				
			||||||
 | 
					# to template names.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The default sidebars (for documents that don't match any pattern) are
 | 
				
			||||||
 | 
					# defined by theme itself.  Builtin themes are using these templates by
 | 
				
			||||||
 | 
					# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
 | 
				
			||||||
 | 
					# 'searchbox.html']``.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# html_sidebars = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- Options for HTMLHelp output ---------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Output file base name for HTML help builder.
 | 
				
			||||||
 | 
					htmlhelp_basename = 'squeekboarddoc'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- Options for LaTeX output ------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					latex_elements = {
 | 
				
			||||||
 | 
					    # The paper size ('letterpaper' or 'a4paper').
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # 'papersize': 'letterpaper',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # The font size ('10pt', '11pt' or '12pt').
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # 'pointsize': '10pt',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Additional stuff for the LaTeX preamble.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # 'preamble': '',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Latex figure (float) alignment
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # 'figure_align': 'htbp',
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Grouping the document tree into LaTeX files. List of tuples
 | 
				
			||||||
 | 
					# (source start file, target name, title,
 | 
				
			||||||
 | 
					#  author, documentclass [howto, manual, or own class]).
 | 
				
			||||||
 | 
					latex_documents = [
 | 
				
			||||||
 | 
					    (master_doc, 'squeekboard.tex', 'squeekboard Documentation',
 | 
				
			||||||
 | 
					     'Dorota Czaplejewicz', 'manual'),
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- Options for manual page output ------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# One entry per manual page. List of tuples
 | 
				
			||||||
 | 
					# (source start file, name, description, authors, manual section).
 | 
				
			||||||
 | 
					man_pages = [
 | 
				
			||||||
 | 
					    (master_doc, 'squeekboard', 'squeekboard Documentation',
 | 
				
			||||||
 | 
					     [author], 1)
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -- Options for Texinfo output ----------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Grouping the document tree into Texinfo files. List of tuples
 | 
				
			||||||
 | 
					# (source start file, target name, title, author,
 | 
				
			||||||
 | 
					#  dir menu entry, description, category)
 | 
				
			||||||
 | 
					texinfo_documents = [
 | 
				
			||||||
 | 
					    (master_doc, 'squeekboard', 'squeekboard Documentation',
 | 
				
			||||||
 | 
					     author, 'squeekboard', 'One line description of project.',
 | 
				
			||||||
 | 
					     'Miscellaneous'),
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from recommonmark.transform import AutoStructify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def setup(app):
 | 
				
			||||||
 | 
					    app.add_config_value('recommonmark_config', {
 | 
				
			||||||
 | 
					        'enable_auto_toc_tree': True,
 | 
				
			||||||
 | 
					        'auto_toc_tree_section': 'Contents',
 | 
				
			||||||
 | 
					    }, True)
 | 
				
			||||||
 | 
					    app.add_transform(AutoStructify)
 | 
				
			||||||
							
								
								
									
										21
									
								
								doc/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/index.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					Welcome to squeekboard's documentation!
 | 
				
			||||||
 | 
					=======================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Contents
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [Tutorial](tutorial.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Introduction
 | 
				
			||||||
 | 
					------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Squeekboard is the on-screen keyobard for the Librem 5 phone. For more information, look at the [README](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Layouts
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Squeekboard allows user-provided keyboard layouts. They can be created without recompiling the keyboard code. The tutorial](/tutorial.md) explains the process in detail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Layouts are created using a text-based format, based on YAML.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TODO: Provide a description of the format.
 | 
				
			||||||
							
								
								
									
										53
									
								
								doc/tutorial.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								doc/tutorial.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					Kareema's guide to creating layouts
 | 
				
			||||||
 | 
					===================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It’s long overdue to write a comprehensive guide how to add a keyboard layout from start. But unfortunately, I don’t have much time left ATM. A lot of information can be found in [this ](https://forums.puri.sm/t/using-non-latin-language-on-librem-5/7103/5) thread.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					So at least I will try to start writing a short how-to here and edit this post as I find the time. Hope this helps a bit - comments and corrections welcome.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Get one of the existing keyboard layouts**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* You can get one of the keyboards from the squeekboard git repository : [https://source.puri.sm/Librem5/squeekboard ](https://source.puri.sm/Librem5/squeekboard)
 | 
				
			||||||
 | 
					* The keyboard layouts are located in the subdirectory `data/keyboard/` in the `.yaml` files
 | 
				
			||||||
 | 
					* Take a look and try to understand them :slight_smile:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Fork your own copy of squeekboard**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Best way would be to start with a fork of the squeekboard repository: Create a user account at https://source.puri.sm/, go the the squeekboard git repository, press “Fork” in the web interface. You can find further instructions [here](https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html#creating-a-fork).
 | 
				
			||||||
 | 
					* Clone your fork locally with `git clone` and use the uri of your forked repo there
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Workflow to edit your keyboard and get it merged**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A generic guide how the workflow to contribute works, can be found at https://developer.puri.sm/Librem5/Contact/Contributing.html
 | 
				
			||||||
 | 
					* Create a branch: Name it “keyboard-layout-mylanguage” or whatever
 | 
				
			||||||
 | 
					* Checkout your branch, edit your keyboard layout and commit your changes
 | 
				
			||||||
 | 
					* Push the local changes (to the branch of your fork of squeekboard)
 | 
				
			||||||
 | 
					* Create a merge request for the branch to get your changes merged to the official squeekboard git repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Compile squeekboard**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Follow the instructions found in “Building” section of the squeekboard’s README: Running squeekboard: [https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#building ](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#building)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Running squeekboard**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Follow these instructions to run squeekboard: [https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#running ](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#running)
 | 
				
			||||||
 | 
					* Additionally take a look at https://source.puri.sm/Librem5/squeekboard/blob/master/HACKING.md#testing
 | 
				
			||||||
 | 
					* You can either test it locally on your Linux system or use the [QEMU Librem 5 image ](https://developer.puri.sm/Librem5/Development_Environment/Boards/emulators.html)
 | 
				
			||||||
 | 
					* To test squeekboard locally, you need phoc. Either compile that from the sources as well or use the CI repository ci.puri.sm for Debian based systems:
 | 
				
			||||||
 | 
					`deb [arch=amd64] http://ci.puri.sm/ scratch librem5`
 | 
				
			||||||
 | 
					Squeekboard can be installed from there as a Debian package, too (that’s what I often do). But beware - there be dragons! You could bork your system with these packages and you should probably disable this repository again after installing what you need - these packages are not meant for production systems (or so I heard :wink: )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Creating the keyboard layout**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* To be written: For the time being, take a look at [Using non-latin language on Librem 5 ](https://forums.puri.sm/t/using-non-latin-language-on-librem-5/7103/5)
 | 
				
			||||||
 | 
					* The correct name of the .yaml file can be found with the command `gsettings get org.gnome.desktop.input-sources sources`
 | 
				
			||||||
 | 
					The output should be something like this: `[('xkb', 'us'), ('xkb', 'de')]`
 | 
				
			||||||
 | 
					So f.ex. “de.yaml” would be the correct name for the German keyboard layout.
 | 
				
			||||||
 | 
					* The translations for the keyboard layout names in the different languages can be found at `data/langs/`
 | 
				
			||||||
 | 
					* Don’t forget to add your newly created layout or translation to `src/resources.rs` and the layout to `tests/meson.build` (that’s for me, because I always forget it)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Testing the layout**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Copy your yaml file to `~/.local/share/squeekboard/keyboards/` for testing purposes. From there it should get picked up by squeekboard
 | 
				
			||||||
 | 
					* To test the translations in `data/langs/` , you have to compile squeekboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user