Gemalaya is a keyboard-driven Gemini browser written in QML (with PySide6).
- Everything can be done from the keyboard
- No tabs, no tab bar, just a stack of gemspaces that you can cycle through with Ctrl+Tab
- Supports automatic http-to-gemini proxying via levior (another project of mine)
- misfin integration: create a misfin identity and send misfin messages from the browser.
- Links can be displayed in grids
- Supports loading multimedia content (be sure to have gstreamer installed)
- Text-to-speech (TTS): Tired of reading ? Just let the lady read the text for you.
- Text translations
- Transparently renders Atom & RSS feeds as gemini tinylogs
Screenshots | Issues | Contact | Donate (ko-fi) | Donate (liberapay)
AppImage¶
Download Gemalaya's latest AppImage (x86_64)
Be sure to have all the xcb libraries installed on your system before running the AppImage (run with QT_DEBUG_PLUGINS=1 if you get an error about the xcb plugin failing to load)
The AppImage will download updates automatically, you only need to download the AppImage once.
Demos¶
Text-to-speech demo
Usage¶
Gemalaya doesn't use a tab bar, there's just a stack layout with gemspaces in it, you'll see the gemspace index on the top-left corner. The browser will automatically generate a certificate, if you want to use an already generated certificate, copy it as $HOME/.config/gemalaya/client.{crt,key}.
To change the keyboard shortcuts, press F12 to open the configuration settings dialog.
Each link in a gemini page is assigned a number. To follow a link, just type in the number of the link on the keyboard. The link is opened after a certain timeout (you can change the timeout in the settings).
Gemalaya supports the automatic proxying of web (http/https) content by running an instance of levior. When levior is running, regular web pages can be accessed and rendered as gemtext transparently. The proxy can be disabled in the config or by passing --no-proxy when running the app.
Address bar¶
-
The address bar has a rather conventional behaviour. Entering a domain name (without the gemini:// protocol prefix) will visit the gemini capsule for that domain.
-
You can request http/https URLs like you would in a regular browser and they will be rendered as gemtext by levior.
-
Autocompletion for the bookmarks stored in the bookmarks database
-
When the address bar is empty, pressing the Down key will open a popup showing all the bookmarks.
Search macros¶
In the address bar you can also use certain keywords that will be translated to a gemini URL. Here are the default keywords:
-
gs search-query: Runs a search with the geminispace.info capsule. Example: type in "gs gemini browser" to search for "gemini browser".
-
a search-query: Runs a search with the auragem capsule. Example: type in "a gemimi browser" to search for "gemini browser".
-
am mime-type: Runs a MIME-type search with the auragem capsule. Example: type in "am image/gif" to search for gif animations. Example: type in "am video/mp4" to search for mp4 videos.
-
bbsup user post-text: Make a user post on bbs.geminispace.org (commonly referred to as "BBS"). It takes 2 arguments, the username and the post's body.
Text-to-speech¶
gemalaya can do text-to-speech conversion on the text contained in the Gemini pages that you browse.
To enable the text-to-speech feature, press F12, go to UI settings and check Enable text-to-speech conversion. There are 3 TTS engines supported:
- NanoTTS (default, recommended): a fork of PicoTTS. This is the recommended engine as it doesn't require any external service. It is bundled in the AppImage since version 0.5.3.
- PicoTTS: a lightweight offline text-to-speech engine. It is bundled in the AppImage since version 0.5.2 (If you have issues with this engine and you use a Debian-based distribution, install the libttspico-data package).
- gtts (Google Translate): uses the google translate service for TTS. WARNING: Using gtts violates privacy as it will send each chunk of text to a remote google server.
If the Automatically play audio after conversion setting is enabled, when you change the focus to a text item in the page, the TTS audio file will be played automatically without requiring any user intervention. If it's not enabled, all you need to do to play the audio is to press Space or r (for read). See the TTS player shortcuts section below for a list of all the supported keyboard shortcuts by the TTS player.
Links layout¶
You can choose between 2 different layout modes for links:
- list (default mode): Links are displayed vertically
- group: Links are arranged in a grid layout.
Links groups¶
- Pressing Tab will focus the next link in the grid.
- Pressing i (the default skipLinksGrid shortcut), when one of the links in a grid has the focus, will "skip" this grid and focus the next element after this grid in the page, allowing you to quickly navigate between groups of links.
There are a few config settings for links groups:
- Number of columns in the grid
- Space between rows (in pixels)
- Limit grid height: Some pages (especially if you're browsing a proxied web page) can have a large number of links. Using this setting allows you to limit the height of all grids in the page, and show them in a collapsed (compacted) visual state by default. When one of the links in the grid is focused, the grid will be expanded so that you can see all the links, and when no link is focused it will be collapsed again.
- Maximum grid height (in pixels): The default maximum grid height in the collapsed state.
Keyboard shortcuts¶
Navigating between items¶
When you access a new page (or switch between gemspaces), the top element in the page will get the focus.
These shortcuts allow you to change the currently focused item in the page. They cannot be changed (see QML's KeyNavigation docs). Pressing Tab or Shift+Tab from a links grid will cycle between the links in the grid.
- Tab: change the focus to the next element in the page
- Shift+Tab (Backtab): change the focus to the previous element in the page
Main shortcuts¶
- F12: Open the configuration settings dialog
- F10: Open the link stored in the clipboard into a new gemspace
- Ctrl+d: bookmark the current gemspace's URL
- Ctrl+t: open up a new gemspace
- Ctrl+k: go back in the history
- Ctrl+o: Change the target for links opened in this page (the target indicator is shown right next to the URL):
- H (yellow): open here (the default)
- T (blue): open in a new tab/gemspace
- W (red): open in a new window (can be opened in the same gemspace or in a new gemspace)
- Ctrl+b: go to the previous gemspace
- Ctrl+n: go to the next gemspace
- Ctrl+f: run a text search on the page (press Escape to exit the search mode)
- Ctrl+Tab: cycle between gemspaces in the stack layout
- Ctrl+y: cycle between the available themes
- Ctrl++: Increase the font size (and save the settings)
- Ctrl+-: Decrease the font size (and save the settings)
- Ctrl+q: quit
Address bar shortcuts¶
- Down: show all bookmarks (when the address bar is empty)
Text Item shortcuts¶
These are keyboards shortcuts specific to text items, and will only work when some text is being focused. Enable text translation first in the settings if you want to use any of the text translation shortcuts.
- t: Translate the focused text to the language with the highest priority
- l: Change the translation language to the next language in the list and run the text translation again
TTS player shortcuts¶
These are keyboards shortcuts specific to the text-to-speech audio player
- Left: seek the audio backward
- Right: seek the audio forward
- r: Play the audio file (use this shortcut if autoplay is disabled)
- Space: pause or resume the audio
- Ctrl+Space: Read through the whole page: run TTS on every text element in the page
- n: Run the TTS on the next element in the page (Read-through mode only)
- z: decrease the playback rate
- x: increase the playback rate
Links shortcuts¶
These are keyboards shortcuts specific to links, and will only work when a link is being focused.
- Ctrl+s: download and save this object to the downloads directory
- i: ignore/skip the links grid that this link belongs to, and focus the next element in the page layout
Scrolling the page¶
Press the Up, PageUp, or Down, PageDown keys to scroll the page up or down. Holding the Control and/or Shift keys while doing so will amplify the scrolling/flicking speed (the fastest being when you hold both Control and Shift).
- Up, Down: scroll up or down
- Ctrl+Up, Ctrl+Down: scroll up or down (fast)
- Ctrl+Shift+Up, Ctrl+Shift+Down keys: scroll up or down (faster)
- Ctrl+PageUp, Ctrl+PageDown keys: scroll up or down (even faster)
- Ctrl+Shift+PageUp, Ctrl+Shift+PageDown keys: scroll up or down (fastest)
To go to the top of the page, press the Home key. To go to the bottom of the page, press the End key.
Default locations¶
The main config file is stored in the following file:
$HOME/.config/gemalaya/config.yaml
The default downloads directory is:
$HOME/Downloads/gemalaya
gemalaya uses a client library called ignition, which stores the known gemini certificate fingerprints ("known hosts") in the following file:
$HOME/.local/share/gemalaya/ignition_known_hosts
Delete the known hosts file if a gemini capsule has changed its certificate after you've visited it and you see a "Untrusted certificate" message !
Themes¶
You can write your own theme, it should be a YAML file with the following path (on Linux), theme_name being the name of your theme. Look in the gemalaya/themes directory for an example.
$HOME/.config/gemalaya/themes/theme_name/theme_name.yaml
Then set the ui.theme config setting in the main config file which is stored in:
$HOME/.config/gemalaya/config.yaml