- QML 55.6%
- Python 43.1%
- CMake 1.1%
- Shell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| assets | ||
| docs | ||
| po | ||
| scripts | ||
| src | ||
| .flake8 | ||
| .gitignore | ||
| .isort.cfg | ||
| .pre-commit-config.yaml | ||
| .python-version | ||
| clickable.yaml | ||
| CMakeLists.txt | ||
| LICENSE | ||
| manifest.json.in | ||
| README.md | ||
| snapcraft.yaml | ||
| ut-components.apparmor | ||
| ut-components.desktop.in | ||
Ubuntu Touch Components
Welcome to my personal library of components for Ubuntu Touch. The idea behind this project is to create a reusable system for backend and frontent that will allow rapid creation of Ubuntu Touch Apps.
Demo and Apps
This set of components powers the following applications in OpenStore:
- Picpocket: An Immich Client
- ContactBridge: Sync your Nextcloud (or any CardDAV server) Address Books
Installation
Simply copy the src/qml and src/pyhton folders to your project. For convenience, a install script is supplied that you can run in your git
repository
curl -s https://git.brennoflavio.com.br/brennoflavio/ut-components/raw/branch/master/scripts/install.sh | bash
QML Components
- ActionableList: A list of items (smaller itens with title, subtitle, icon and actions) with search.
- ActionButton: A prominent button component for primary actions, customizable.
- AppHeader: A simplified page header component that provides back navigation and button to settings page.
- BottomBar: A bottom navigation bar component that provides three distinct sections (left, rigth, middle buttons) for organizing actions.
- CardList: A list of Cards (larger components with title, subtitle, icon/thumbnail) with search.
- ConfigurationGroup: A titled container component for grouping related configuration controls.
- Form: A form container that vertically stacks input fields and exposes a single submit button.
- IconButton: A small circular button component that displays an icon with an optional text label below.
- ImageViewer: A reusable image viewer with standardized zoom, panning, and app-driven adjacent navigation.
- InputField: A text input component with built-in validation and error handling for forms and settings.
- KeyboardSpacer: An automatic spacer component that adjusts its height to match the virtual keyboard.
- LoadToast: A full-screen loading overlay component to block the screen in long running functions.
- NumberOption: A numeric input field component with labels and validation for settings and forms.
- ToggleOption: A toggle switch for boolean settings with title and optional subtitle.
- VideoViewer: A reusable video viewer with standardized playback controls and app-driven adjacent navigation.
Python Components
To use this library, you need to setup on each python file before any imports.
from src.lib import setup
setup(app_name="yourapp.name", crash_report_url=None)
from src.lib.kv import KV
...
- setup: Configure global variables for this package
- config: Provide starndard paths (cache, data, config) for your application.
- crash: Implement backend for crash reports, and a decorator to send crashes to a server.
- http: Pure python HTTP client with a requests-like structure, on top of urllib.
- kv: Key-Value storage on top of sqlite3 with ttl and batching support.
- memoize: Memoization support for python function on top of KV.
- mimetypes: Standard mimetype package fixed for Ubuntu Touch.
- notification: Utilities to recieve and send notifications.
- utils: Utility functions. Short random string, dataclass and enum convertion to qml friendly types.
License
Copyright (C) 2025 Brenno Flávio de Almeida
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 warranties of MERCHANTABILITY, SATISFACTORY QUALITY, 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/.