Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
8489fcc
Migration: fix indented lists and raw html tables
parulin Aug 1, 2025
db47feb
Fix some missing code blocks inside lists
parulin Aug 1, 2025
c5a053d
Fix missing cell in table
parulin Aug 9, 2025
9e5fa7a
ci: remove gitlab ci
marmarek Aug 8, 2025
4fa0d29
Remove duplicate captions and wrong alt formatting of images
parulin Jul 31, 2025
1f331a4
Introduction: correct an image position
parulin Jul 27, 2025
acc9a5f
Fix Xen link on intro.rst
parulin Aug 2, 2025
4ebc721
Cleanup sphinx and readthedocs configurations
parulin Aug 1, 2025
2531253
Add minimal configuration for linkcheck builder
parulin Aug 4, 2025
f5a6609
Ignore the _build directory
parulin Aug 4, 2025
d541882
Revert some configuration options
parulin Aug 12, 2025
fa7a62b
Use console lexer instead of bash with a prompt
parulin Jul 27, 2025
0ff244e
Correct code-block lexers
parulin Jul 30, 2025
483fce4
Minor cleaning of code highlighting
parulin Jul 31, 2025
bffc808
Two code-block language mistakes
parulin Jul 31, 2025
651229c
Change again some languages
parulin Aug 9, 2025
6c987d0
Add 'Edit on GitHub' Link
maiska Aug 15, 2025
43493b3
Add prompts to all code blocks with bash session
maiska Aug 15, 2025
49c9f9c
Remove obsolete prompts, extract session comments to instructions
maiska Aug 16, 2025
def5eec
Extract session comments into instructions
maiska Aug 16, 2025
5281f04
Trying to fix my mistakes ...
parulin Aug 16, 2025
1154873
Merge branch 'rst' into paragraphs-workaround-2
parulin Aug 16, 2025
dbbed6a
Restoring Fedora and Debian instructions
parulin Aug 18, 2025
08672d4
Restoring @andrewdavidwong commit
parulin Aug 18, 2025
3121b4b
Merge remote-tracking branch 'upstream/rst' into paragraphs-workaround-2
parulin Aug 26, 2025
b02eba0
Fix of tables options and emphasis
parulin Aug 26, 2025
11b2626
Merge branch 'rst' into paragraphs-workaround-2
parulin Aug 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 5 additions & 30 deletions developer/building/qubes-builder-v2.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,36 @@
Qubes builder v2
================


This is a brief introduction to using Qubes Builder v2 to work with Qubes OS sources. It will walk you through installing and configuring Builder v2, and using it to fetch and build Qubes OS packages.

For details and customization, use `Qubes OS v2 builder documentation <https://github.com/QubesOS/qubes-builderv2/>`__.

Overview
--------


In the second generation of Qubes OS builder, container or disposable qube isolation is used to perform every stage of the build and release process. From fetching sources to building, everything is executed inside an isolated *cage* (either a disposable or a container) using an *executor*. For every command that needs to perform an action on sources, like cloning and verifying Git repos, rendering a SPEC file, generating SRPM or Debian source packages, a new cage is used. Only the signing, publishing, and uploading stages are executed locally outside a cage.

Setup
-----


This is a simple setup using a docker executor. This is a good default choice; if you don’t know which executor to use, use docker.

1. First, decide what qube you are going to use when working with Qubes Builder v2. It can be an AppVM or a Standalone qube, with some steps different between the two.

2. Installing dependencies

- If you want to use an app qube for developing, install dependencies in the template. If you are using a standalone, install them in the qube itself. Dependencies are specified in ``dependencies-*. txt`` files in the main builder directory, and you can install them easily in the following ways:



1. for Fedora, use:

If you want to use an app qube for developing, install dependencies in the template. If you are using a standalone, install them in the qube itself. Dependencies are specified in ``dependencies-*. txt`` files in the main builder directory, and you can install them easily in the following ways:

- for Fedora, use:

.. code:: console
.. code:: console

$ sudo dnf install $(cat dependencies-fedora.txt)
$ test -f /usr/share/qubes/marker-vm && sudo dnf install qubes-gpg-split

- for Debian (note: some Debian packages require Debian version 13 or later), use:

2. for Debian (note: some Debian packages require Debian version 13 or later), use:





.. code:: console
.. code:: console

$ sudo apt install $(cat dependencies-debian.txt)
$ test -f /usr/share/qubes/marker-vm && sudo apt install qubes-gpg-split
Expand All @@ -57,7 +45,6 @@ This is a simple setup using a docker executor. This is a good default choice; i
$ git clone https://github.com/QubesOS/qubes-builderv2
$ cd qubes-builderv2/


4. If you haven’t previously used docker in the current qube, you need to set up some permissions. In particular, the user has to be added to the ``docker`` group:

.. code:: console
Expand All @@ -78,14 +65,9 @@ This is a simple setup using a docker executor. This is a good default choice; i

binds+=( '/var/lib/docker' )





Configuration
-------------


To use Qubes OS Builder v2, you need to have a ``builder.yml`` configuration file. You can use one of the sample files from the ``example-configs/`` directory; for a more readable ``builder.yml``, you can also include one of the files from that directory in your ``builder.yml``. An example ``builder.yml`` is:

.. code:: yaml
Expand Down Expand Up @@ -116,19 +98,15 @@ To use Qubes OS Builder v2, you need to have a ``builder.yml`` configuration fil
options:
image: "qubes-builder-fedora:latest"



Using Builder v2
----------------


To fetch sources - in this example, for the ``core-admin-client`` package, you can use the following command:

.. code:: console

$ ./qb -c core-admin-client package fetch


This will fetch the sources for the listed package and place them in ``artifacts/sources`` directory.

To build a package (from sources in the ``artifacts/sources`` directory), use:
Expand All @@ -137,19 +115,16 @@ To build a package (from sources in the ``artifacts/sources`` directory), use:

$ ./qb -c core-admin-client package fetch prep build


or, if you want to build for a specific target (``host-fc37`` is a ``dom0`` using Fedora 37, ``vm-fc40`` would be a qube using Fedora 40 etc.), use:

.. code:: console

$ ./qb -c core-admin-client -d host-fc37 package fetch prep build


If you want to fetch the entire Qubes OS source use the following:

.. code:: console

$ ./qb package fetch


**caution**: some repositories might have additional requirements. You can disable repositories that are not needed in the ``example-configs/*.yml`` file you are using by commenting them out. In particular, ``python-fido2``, ``lvm`` and ``windows``-related repositories have special requirements.
70 changes: 4 additions & 66 deletions developer/general/usability-ux.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,15 @@
Usability & UX
==============


Software that is too complicated to use, is often unused. Because we want as many people as possible to benefit from its unique security properties, the usability and user experience of Qubes OS is an utmost priority!

We ask anyone developing for Qubes OS to please read through this guide to better understand the user experience we strive to achieve. We also ask them to review `our visual style guide <https://www.qubes-os.org/doc/visual-style-guide/>`__ for other design related information.


----


Easy To Use
-----------


An ideal user experience is friendly, and it beckons a new user to explore the interface. In this process, they can naturally discover how to use the software. Below are some guidelines that will help you design a user interface that accomplishes this goal.

|redx| **Interfaces Should Not**
Expand All @@ -27,8 +23,6 @@ An ideal user experience is friendly, and it beckons a new user to explore the i

- Overwhelm the user with too much information and cognitive load



Perhaps the most common cause of mistakes is complexity. If there is a configuration setting that will significantly affect the user’s experience, choose a safe and smart default then tuck this setting in an ``Advanced Settings`` panel.

|checkmark| **Interfaces Should**
Expand All @@ -41,18 +35,13 @@ Perhaps the most common cause of mistakes is complexity. If there is a configura

- Choose intelligent defaults for settings



In making software easy to use, it is crucial to be mindful of `cognitive load <https://en.wikipedia.org/wiki/Cognitive_load>`__ which dictates that *“humans are generally able to hold only seven +/- two units of information in short-term memory.”* Making sure your interfaces don’t pass this short-term memory limit is perhaps the most important factor in helping a user feel comfortable instead of overwhelmed.


----


Easy to Understand
------------------


There will always be the need to communicate things to users. In these cases, an interface should aim to make this information easy to understand. The following are simple guides to help achieve this - none of these are absolute maxims!

|redx| **Avoid Acronyms**
Expand All @@ -67,8 +56,6 @@ Acronyms are compact and make good names for command line tools. They do not mak

- ``NetVM`` - Networking Virtual Machine



Despite this rule, some acronyms like ``USB`` are widely used and understood due to being in common use for over a decade. It is good to use these acronyms when the full words like ``Universal Serial Bus`` are more likely to confuse users.

|checkmark| **Use Simple Words**
Expand All @@ -83,12 +70,8 @@ Use the minimum amount of words needed to be descriptive, but also informative.

- Use ``Networking`` or ``Networking Qube`` instead of ``NetVM`` given context




----


|redx| **Avoid Technical Words**

Technical words are usually more accurate, but they often *only* make sense to technical users and are confusing and unhelpful to non-technical users. Examples of technical words that might show up in Qubes OS are:
Expand All @@ -99,8 +82,6 @@ Technical words are usually more accurate, but they often *only* make sense to t

- ``qrexec-daemon``



These are all terms that have at some point showed up in users’ notification messages. Each term is very specific, but requires the user to understand virtualization to interpret.

|checkmark| **Use Common Concepts**
Expand All @@ -113,14 +94,10 @@ Large amounts of the global population have been using computers for one or two

- Use ``Qubes`` instead of ``qrexec-daemon`` as it gives better context on what is happening



These words are more abstract and user relevant- they help a user understand what is happening based on already known concepts (disk space) or start to form a mental model of something new (Qubes).


----


|redx| **Avoid Inconsistencies**

It is easy to start abbreviating (or making acronyms) of long terms like ``Disposable Virtual Machine`` depending on where the term shows up in an interface.
Expand All @@ -131,8 +108,6 @@ It is easy to start abbreviating (or making acronyms) of long terms like ``Dispo

- ``DisposableVM``



This variation in terms can cause new users to question or second guess what the three different variations mean, which can lead to inaction or mistakes.

|checkmark| **Make Things Consistent**
Expand All @@ -141,14 +116,10 @@ Always strive to keep things consistent in the interfaces as well as documentati

- Use ``Disposable Qube`` at all times as it meets other criteria as well.



By using the same term throughout an interface, a user can create a mental model and relationship with that term allowing them to feel empowered.


----


|redx| **Avoid Duplicate Words**

It is easy to add words like ``Domain`` before items in a list or menu in an attempt to be descriptive, such as:
Expand All @@ -160,8 +131,6 @@ It is easy to add words like ``Domain`` before items in a list or menu in an att
- Domain: banking
- Domain: personal



The repeated use of the word ``Domain`` requires a user to read it for each item in the list, which makes extra work for the eye in parsing out the relevant word like ``work, banking, or personal``. This also affects horizontal space on fixed width lines.

|checkmark| **Create Groups & Categories**
Expand All @@ -175,16 +144,11 @@ It is more efficient to group things under headings instead as this allows the e
- Banking
- Personal




----


Easy To Complete
----------------


Lastly, expected (and unexpected) situations often require user actions or input. Make resolving these occurences as easy as possible to complete the action.

|redx| **Don’t Leave Users Stranded**
Expand All @@ -195,8 +159,6 @@ Consider the following notifications:

- ``There was an error saving Qube "Personal"``



Instead of displaying solvable errors like these and neglecting to provide a fix:

|checkmark| **Offer Actionable Solutions**
Expand All @@ -207,14 +169,10 @@ Error messages and limits such as those in the previous example can be greatly i

- Add a link to a documentation page called ``Troubleshoot saving data``



In adhering to these principles, you’ll make undesirable situations more manageable for users instead of feeling stranded.


----


|checkmark| **Minimize Repetitive Steps**

There are many cases where a user wants to perform an action on more than one file or folder. However in order to do the action, the user must repeat certain steps such as:
Expand All @@ -223,26 +181,18 @@ There are many cases where a user wants to perform an action on more than one fi

2. Navigate through file system

- Click Folder One

- Click Folder Two

- Click Folder One

- Click Folder Two

- Click Folder Three

- Click Folder Four

- Click Folder Three

- Click Folder Four

3. Select proper file

4. Complete task on file





That subtle act of clicking through a file system can prove to be significant if a user needs to open more than a couple files in the same directory. We can alleviate some of the work by changing the process:

1. Click on ``Open File`` from a menu or button
Expand All @@ -253,18 +203,13 @@ That subtle act of clicking through a file system can prove to be significant if

4. Complete task



Clearly, cutting out something as simple as navigating through the file system can save a user quite a bit of time. Alternatively, adding a button or menu item like ``Open Multiple Files`` might be even better, because remembering and using relevant hotkeys is often something only power users know how to do!


----


GNOME, KDE, and Xfce
--------------------


The desktop GUIs that QubesOS versions 1 - 4.1 offer are `KDE <https://kde.org>`__ and `Xfce <https://xfce.org>`__. We are currently migrating towards using `GNOME <https://www.gnome.org>`__. We know some people prefer KDE, but we believe Gnome is easier to use for average non-technical users. Xfce will always be supported, and technical users will always have the choice to use KDE or other desktop environments.

This change means you should use `GTK <https://gtk.org/>`__ rather than Qt for new GUIs.
Expand All @@ -277,16 +222,11 @@ All three of these mentioned desktop environments have their own `human interfac

- `Xfce UI Guidlines <https://wiki.xfce.org/dev/hig/general>`__




----


Further Learning & Inspiration
------------------------------


Learning to make well designing intuitive interfaces and software is specialized skillset that can take years to cultivate, but if you are interested in furthering your understanding, we suggest the following resources:

- `Learn Design Principles <https://web.archive.org/web/20180101172357/http://learndesignprinciples.com/>`__ by Melissa Mandelbaum
Expand All @@ -301,7 +241,5 @@ Learning to make well designing intuitive interfaces and software is specialized

- `Hack Design <https://hackdesign.org/>`__ - online learning program



.. |checkmark| image:: /attachment/doc/checkmark.png
.. |redx| image:: /attachment/doc/red_x.png
Loading