@Emma Thanks from me as well for making FF ESR 115 usable again! For me, using the fenix.css
profile, the extensions button and the tab count button overlapped on the bottom, but luckily I could easily change that myself. Thanks again!
Thank you for the appreciation!
Yes, the overlapping of those two buttons was a design choice that I made, in order for everything to be arranged as it is on the Firefox for Android app. Rather than using CSS code to move the Unified Extensions Menu button to the left of the URL Bar, I think it makes much more sense to simply have the user move the button themselves in one of a few different ways.
Edit: This overlapping issue has been completely fixed.
If you are interested, I have a VPS on OVHcloud I can use for hosting a Forgejo instance, among other public services.
https://forums.puri.sm/t/vps-usage-suggestions/21788 (trust level 1 and up)
The condition is that it is gratis until June 4th, 2025, as that is when the VPS contract ends. If you want it to continue past that, we will need to discuss it further within that thread.
Also, this thread is very slow to load using Firefox ESR on the Librem 5, probably due to all the code. If we relocate all of the code to the Forgejo instance, then you can use this thread as a changelog instead.
This thread is so long now that it is difficult to follow the discussion, so excuse me if I post problems that have already been covered.
I have downloaded and copied fenix-one.css and userContent.css to my FF account folder. The issues I am having are:
- Addon-menu flickers and is not usable on mobile
- The addon I use the most, “Mobile View Switcher”, which I have placed left most of all my addons is not visible on mobile, just the button in 1)
- Text on forums.puri.sm (maybe other sites too, but none that I know of) is white on white background, i.e. unreadable
I also have the url bar at the top of the screen and not at the bottom, that was however the same before I upgraded FF and installed the Mobile-Friendly customizations.
Any guidance would be much appreciated.
One more thing. I have some difficulty finding the most recent css files. So far I have copied them from this thread.
Sorry, but I am not interested. This forum is a simple place to post my code for others, and I don’t want to complicate things with repos and hosting fees. I made this code for myself and decided to share it here for other Librem 5 users. Everyone is free to share or host this code wherever they want.
I agree with some others that have said this code should be merged into the firefox-esr-mobile-config
used by PureOS. @nicole.faerber, I know there is a lot of code (and lots of comments), but it would be nice to know that someone from Purism is at least considering reviewing it so it can be merged into (or outright replace) firefox-esr-mobile-config
for Librem 5.
It’s actually due to javascript. If you disable javascript in your browser, this thread loads very quickly, just like all the other posts on this and other forums (and most other sites). The only reason you need to enable javascript on this site is to login, but you don’t need to login to view any of my posts as they are all publicly accessible.
There are two important things to note:
-
These CSS files must be placed into a folder called
chrome
. Thischrome
folder must be placed inside your Firefox profile folder. -
You must have a file named
userContent.css
and a file nameduserChrome.css
in thechrome
folder.
There are two ways that you can use the fenix_one.css
file:
-
Rename the
fenix_one.css
file touserChrome.css
in order to have a single file for alluserChrome
code. -
Create a
userChrome.css
file that imports thefenix_one.css
file:
userChrome.css
/* Copyright 2023 user0
* SPDX-License-Identifier: MPL-2.0 */
/* Source file available here:
https://forums.puri.sm/t/mobile-friendly-firefox-customizations-for-librem-5/20313
*/
@import "fenix_one.css";
So you either placed these files directly into your Firefox profile folder instead of a chrome
folder within your Firefox profile folder, or you didn’t create a userChrome.css
file, or you misspelled one or more files (in your comment, you used fenix-one.css
instead of fenix_one.css
) Either way, PureOS is configured to automatically create a userChrome.css
file in your Firefox profile’s chrome
folder if one does not exist, but it uses the very basic firefox-esr-mobile-config
file, which doesn’t yet contain my code.
So to answer your questions:
Naming the files correctly and placing them into the correct folders will solve this.
I originally designed the true_mobile_mode
and fenix
files assuming that there are no pinned extensions/addons. Your comment has reminded me that this is possible now that extension popups use a dedicated popup instead of relying on the Widget Overflow Menu popup. I have fixed this and will add it soon have updated all true_mobile
and fenix
files to include it. Check the October 2023 Halloween Update (post 55) for updates.
Note that I have just now updated all true_mobile
and fenix
files again to properly allow space for the Tab Manager Menu button and pinned toolbar items. The previous method was not good enough. This new one works much better.
This allows for pinned toolbar items (like extensions/addons), while preventing the overlapping issue noted by @tomoqv (thanks for pointing this out so that I could fix it).
I’m not seeing this issue on my end, and you’re not using my code yet (as explained earlier), so I don’t know what is causing this for you.
This is because you are not yet using my Mobile-Friendly customization, as explained earlier.
Since I am not hosting this code on any repo or similar, this thread is where all of my code is located. As I explained to the other user, if you disable javascript, this thread loads quickly and is much easier to navigate. Each post is numbered, making it easier to find specific posts.
My most recent update post begins with the October 2023 Halloween Update (post 55), and the final post from that multi-post update is Styles & Screenshots (post 61). All of my most recent code is in the posts from that update (posts 55-61), and there is no need to use code from earlier posts.
Thanks for the clear explanation, it works much better now. However, there is some kind of overlap for the buttons still as seen in this screenshot:
I also have two “home” buttons, although the one to the right brings up the addon list.
I am using the firefox-esr system theme and I don’t know if the purple colors come from that one or from the fenix_one.css. I would like a lighter color on toolbar and tabs if possible, how do I change this?
One more thing. I find the popups a bit difficult to use on the mobile, especially scroll between open tabs.
I think I have seen somewhere in this post popups covering the whole screen, but I can’t seem to find that css now.
Thanks for your excellent work on this, very useful!
The one on the left is the real Home button. The one on the right is the Unified Extensions Menu button using the icon of the Home button in order to mimic the Firefox for Android app.
If you don’t like that, you can comment out or remove that section of code from the fenix_one.css
file. It exists in two places in the file in order to theme the icon in portrait and landscape modes.
Here is the code responsible for the theming of the icon:
/* Change Unified Extensions Menu button icon to Home button icon */
#unified-extensions-button {
list-style-image: url("chrome://browser/skin/home.svg") !important;
}
You should save the updated version of the fenix_one.css
file, which properly allows space for the Tab Manager Menu button and toolbar items while fixing the overlapping issue.
I think you should also consider removing some of the other toolbar buttons. I would recommend removing the Refresh button, and the real Home button (currently on the left of your URL Bar). If you have a use for the Widget Overflow Menu (»), you can put the Home button inside of it, otherwise you can remove them both. And you can tap and hold on a blank area of a page to summon a menu popup that includes buttons for Back, Forward, Refresh, and Add Bookmark.
To disable the colorful toolbar, comment out or remove this section of code from the very bottom of the fenix_one.css
file:
/* Private Browsing Mode theme for URL Bar and Nav Bar */
:root {
--toolbar-field-border-color: var(--arrowpanel-background) !important;
--toolbar-field-focus-border-color: var(--arrowpanel-background) !important;
--lwt-toolbar-field-background-color: var(--arrowpanel-background) !important;
--toolbar-field-background-color: var(--arrowpanel-background) !important;
--toolbar-field-focus-background-color: var(--arrowpanel-background) !important;
}
#nav-bar {
background-image: -moz-linear-gradient(to right, rgb(112,34,145), rgb(57,52,115)) !important;
}
#navigator-toolbox {
--lwt-tabs-border-color: rgb(134,93,180) !important;
}
All other colors are managed at the top of the fenix_one.css
and userContent.css (fenix)
files. If you don’t want to apply any color themes, then you should use fenix_fox.css
which is just fenix_one.css
without any color themes applied. I haven’t posted a non-colorized I made a userContent.css
file yet, but I could do that.userContent.css (non-colorized)
file.
Now, when you say you want a lighter color for the tabs, are you talking about the grey bar at the top of your screenshots with the Firefox logo on the left? That looks like the Title Bar to me, which can be disabled using the “Customize Toolbar” feature. Otherwise, what do you mean when you say tabs? The Tab Manager Menu popup? And if so, which part of it?
What you are looking for is one of my dynamic_popups
files, found in True Mobile Modes & Dynamic Popups (post 56). You can see some screenshots of them in Styles & Screenshots (post 61).
For fullscreen popups, you either want dynamic_popups_max.css
or dynamic_popups_pro_max.css
. They are both fullscreen, but the pro
blends the color of the popup container with the popup to make it look truly fullscreen, whereas the other one has a black popup container to show just the rounded popup itself.
Regardless of which dynamic_popups
file you use, if any, you should be able to scroll extensions/addons vertically and/or horizontally, depending on the size and shape of the extension/addon popup.
Thank you for the appreciation and the feedback! It’s nice to see some people trying it out.
Final Updates:
Updated November 5th 2023:
Remember, remember, the fifth of November, the extensions, even, I got;
I know of no reason why the extensions season should ever be forgot!
-
Adjusted the following files to allow for vertical scrolling of extension popups:
extensions_menu.css
true_mobile_landscape-alt.css
true_mobile_landscape.css
dynamic_popups.css
dynamic_popups_plus.css
dynamic_popups_max.css
dynamic_popups_pro.css
dynamic_popups_pro_max.css
fenix_fox-alt.css
fenix_fox.css
fenix_one-alt.css
fenix_one.css
-
Adjusted
userContent.css (fenix)
to apply fenix colors to allabout
pages using regexp and selectively fixabout
pages to better fit display.
Updated November 9th 2023:
- Adjusted
userContent.css (fenix)
to fix a mistake that I had made. Sidebar size variable was in color section at top, being applied to all screen sizes; it is now properly set for smaller screens only, for the specificabout
pages that require it.
Updated November 10th-12th 2023:
-
Added
userContent.css (non-colorized)
. -
Adjusted the following files to properly allow space for Tab Manager Menu button and toolbar items:
single_tab_mode-alt.css
alt-single_tab_mode-alt.css
single_tab_mode.css
true_mobile_landscape-alt.css
true_mobile_landscape.css
true_mobile_mode-alt.css
true_mobile_mode.css
fenix-alt.css
fenix.css
fenix_fox-alt.css
fenix_fox.css
fenix_one-alt.css
fenix_one.css
Updated November 13th 2023:
-
Fixed a typo, changing
4px
to5px
in the following file:- Line 31 of
true_mobile_mode.css
- Line 31 of
-
Changed
--panel-background: none !important;
to--panel-background: var(--toolbar-bgcolor) !important;
in the following files:- Line 52 of
dynamic_popups_pro.css
- Line 66 of
dynamic_popups_pro_max.css
- Line 52 of
Updated November 15th 2023:
-
Added code to allow for fully expanded Tab Manager Menu in landscape mode in the following files:
- Line 114 of
true_mobile_landscape-alt.css
- Line 140 of
true_mobile_landscape.css
- Line 299 of
fenix_fox-alt.css
- Line 320 of
fenix_fox.css
- Line 520 of
fenix_one-alt.css
- Line 541 of
fenix_one.css
- Line 114 of
-
After the additional code was added, changed
207px
to18px
in the following files:- Line 155 of
fenix-alt.css
- Line 155 of
fenix.css
- Line 312 of
fenix_fox-alt.css
- Line 333 of
fenix_fox.css
- Line 533 of
fenix_one-alt.css
- Line 554 of
fenix_one.css
- Line 155 of
-
After the additional code was added, removed a line of code in the following files:
- Line 160 of
fenix-alt.css
- Line 160 of
fenix.css
- Line 317 of
fenix_fox-alt.css
- Line 338 of
fenix_fox.css
- Line 538 of
fenix_one-alt.css
- Line 559 of
fenix_one.css
- Line 160 of
Updated November 17th 2023:
-
Added
fenix_theme.css
for those that want the Firefox for Android (fenix) theme and don’t want to hide the Tab Bar. -
Added file descriptions to some posts.
-
Adjusted the following files to hide the Tab Bar in Fullscreen and to hide the Title Bar (only useful if you modify these files to prevent hiding the Tab Bar):
- Lines 251-254 and Lines 511-514 of
fenix_fox-alt.css
- Lines 251-254 and Lines 542-545 of
fenix_fox.css
- Lines 472-475 and Lines 732-735 of
fenix_one-alt.css
- Lines 472-475 and Lines 763-766 of
fenix_one.css
- Lines 251-254 and Lines 511-514 of
Changed this:
/* Hide Nav Bar when in Fullscreen mode */
#nav-bar[inFullscreen] {
display: none;
}
To this:
/* Hide Nav Bar and Tab Bar when in Fullscreen mode and hide and Title Bar */
#nav-bar[inFullscreen],
#TabsToolbar[inFullscreen],
.titlebar-buttonbox-container {
display: none;
}
Updated November 19th 2023:
-
Renamed
hide_tab_counter.css
tohide_tab_manager_menu_button.css
-
Adjusted the following files for compatibility with all Display Scales (100%-200%):
- Line 5 of
appMenu.css
- Line 5 of
browser.css
- Line 5 of
editBookmarkPanel.css
- Line 5 of
findbar.css
- Line 5 of
popups.css
- Line 5 of
tabmenu.css
- Line 11 of
urlbar.css
- Line 5 of
alt-browser-alt.css
- Line 5 of
tabs_fill_available_width.css
- Line 5 of
numbered_tabs.css
- Line 5 of
extensions_menu.css
- Line 35 of
custom_rules.css
- Line 20 of
single_tab_mode-alt.css
- Line 20 of
alt-single_tab_mode-alt.css
- Line 20 of
single_tab_mode.css
- Line 5 of
hide_tab_manager_menu_button.css
- Line 5 of
hide_newtab_+_new-tab_buttons.css
- Line 5 of
new-tab-button.css
- Line 20 & Line 198 of
true_mobile_landscape-alt.css
- Line 20 & Line 224 of
true_mobile_landscape.css
- Line 20 of
true_mobile_mode-alt.css
- Line 20 of
true_mobile_mode.css
- Line 5 of
dynamic_popups.css
- Line 5 of
dynamic_popups_plus.css
- Line 5 of
dynamic_popups_max.css
- Line 5 of
dynamic_popups_pro.css
- Line 5 of
dynamic_popups_pro_max.css
- Line 106 & Line 219 of
fenix_theme.css
- Line 106 & Line 225 of
fenix-alt.css
- Line 106 & Line 225 of
fenix.css
- Line 181 & Line 436 of
fenix_fox-alt.css
- Line 181 & Line 457 of
fenix_fox.css
- Line 402 & Line 657 of
fenix_one-alt.css
- Line 402 & Line 678 of
fenix_one.css
- Line 155, Lines 171-173, Line 265, Lines 281-283, Lines 316-318, Lines 338-340, Lines 367-369, Lines 465-467, & Lines 504-506 of
userContent.css (fenix)
- Line 8, Lines 24-26, Line 118, Lines 134-136, Lines 169-171, Lines 191-193, Lines 220-222, Lines 318-320, & Lines 357-359 of
userContent.css (non-colorized)
- Line 5 of
Changed this:
@media (max-height: 300px) {
To this:
@media (orientation: landscape) and (max-height: 650px) {
Changed this:
@media (max-width: 700px) {
To this:
@media (orientation: portrait) and (max-width: 720px) {
Changed this:
@media
(max-height: 300px),
(max-width: 700px) {
To this:
@media
(orientation: landscape) and (max-height: 650px),
(orientation: portrait) and (max-width: 720px) {
Updated November 20th 2023:
-
Adjusted the following files for compatibility with New-Tab Button (
new-tab-button.css
):- Line 57 & Line 60 of
single_tab_mode-alt.css
- Line 57 & Line 60 of
alt-single_tab_mode-alt.css
- Line 57 & Line 60 of
single_tab_mode.css
- Line 57 & Line 60 of
Changed this:
/* Expand unpinned active tab */
#tabbrowser-tabs:not([haspinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab[selected] {
min-width: 100vw !important;
}
#tabbrowser-tabs[haspinnedtabs] > #tabbrowser-arrowscrollbox > .tabbrowser-tab:not([pinned])[selected] {
min-width: calc(100vw - 40px) !important;
}
To this:
/* Expand unpinned active tab */
#tabbrowser-tabs:not([haspinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab[selected] {
min-width: 100% !important;
}
#tabbrowser-tabs[haspinnedtabs] > #tabbrowser-arrowscrollbox > .tabbrowser-tab:not([pinned])[selected] {
min-width: 83.5% !important;
}
-
Adjusted the following files to fix a mistake I had made which prevented adding extensions to toolbar:
- Lines 261-265 of
fenix_theme.css
- Lines 278-283 of
fenix-alt.css
- Lines 278-283 of
fenix.css
- Lines 261-265 of
Changed this:
/* Hide Back button and Private Browsing Indicator */
#back-button,
#private-browsing-indicator-with-label {
visibility: collapse !important;
}
To this:
/* Remove Back button */
#back-button {
display: none !important;
}
/* Hide Private Browsing Indicator */
#private-browsing-indicator-with-label {
visibility: collapse !important;
}
Changed this:
/* Hide Back button, Tab Bar, and Private Browsing Indicator */
#back-button,
#tabbrowser-tabs,
#private-browsing-indicator-with-label {
visibility: collapse !important;
}
To this:
/* Remove Back button */
#back-button {
display: none !important;
}
/* Hide Tab Bar and Private Browsing Indicator */
#tabbrowser-tabs,
#private-browsing-indicator-with-label {
visibility: collapse !important;
}
Updated November 21th 2023:
-
Adjusted the following files to better support fully expanded Tab Manager Menu in all Display Scales (100%-200%):
- Line 101 & Line 102 of
tabmenu.css
- Line 117 & Line 118 of
true_mobile_landscape-alt.css
- Line 143 & Line 144 of
true_mobile_landscape.css
- Line 304, Line 305, Line 644 & Line 645 of
fenix_fox-alt.css
- Line 325, Line 326, Line 721 & Line 722 of
fenix_fox.css
- Line 525, Line 526, Line 865 & Line 866 of
fenix_one-alt.css
- Line 546, Line 547, Line 942 & Line 943 of
fenix_one.css
- Line 101 & Line 102 of
Changed this:
/* Expand Tab Manager Menu */
#customizationui-widget-multiview panelview {
max-width: calc(100vw - 10px) !important;
width: calc(100vw - 10px) !important;
}
To this:
/* Expand Tab Manager Menu */
#customizationui-widget-multiview panelview {
max-width: 100% !important;
width: 100% !important;
}
Conclusion:
Okay, I think I am done updating files for a while now.
I have fixed all known issues, and everything works well.
So I think it’s safe for everyone to save the files they need now.
-
The first post is the October 2023 Halloween Update (post 55).
-
The last post is the Styles & Screenshots (post 61).
-
My Mobile-Friendly-Firefox repo on Codeberg:
- You can follow me on the fediverse:
Bonus:
I shifted some colors in my phosh color theme to better match the fenix colors.
For anyone interested, backup the gtk.css
file located in ~/.config/gtk-3.0/
before replacing it with this file:
gtk.css
@define-color accent_color rgb(230,140,255);
@define-color accent_bg_color rgb(190,102,218);
@define-color accent_fg_color #ffffff;
@define-color destructive_color #f66151;
@define-color destructive_bg_color #f66151;
@define-color destructive_fg_color #ffffff;
@define-color success_color #8ff0a4;
@define-color success_bg_color #8ff0a4;
@define-color success_fg_color #ffffff;
@define-color warning_color #f9f06b;
@define-color warning_bg_color #f9f06b;
@define-color warning_fg_color rgba(0, 0, 0, 0.8);
@define-color error_color #f66151;
@define-color error_bg_color #f66151;
@define-color error_fg_color #ffffff;
@define-color window_bg_color #241f31;
@define-color window_fg_color #ffffff;
@define-color view_bg_color #000000;
@define-color view_fg_color #ffffff;
@define-color headerbar_bg_color #241f31;
@define-color headerbar_fg_color #ffffff;
@define-color headerbar_border_color #ffffff;
@define-color headerbar_backdrop_color @window_bg_color;
@define-color headerbar_shade_color rgba(0, 0, 0, 0.36);
@define-color card_bg_color rgba(255, 255, 255, 0.08);
@define-color card_fg_color #ffffff;
@define-color card_shade_color rgba(0, 0, 0, 0.36);
@define-color dialog_bg_color rgb(41,29,79);
@define-color dialog_fg_color #ffffff;
@define-color popover_bg_color rgb(41,29,79);
@define-color popover_fg_color rgb(230,140,255);
@define-color shade_color rgba(0, 0, 0, 0.36);
@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5);
@define-color blue_1 #99c1f1;
@define-color blue_2 #62a0ea;
@define-color blue_3 #3584e4;
@define-color blue_4 #1c71d8;
@define-color blue_5 #1a5fb4;
@define-color green_1 #8ff0a4;
@define-color green_2 #57e389;
@define-color green_3 #33d17a;
@define-color green_4 #2ec27e;
@define-color green_5 #26a269;
@define-color yellow_1 #f9f06b;
@define-color yellow_2 #f8e45c;
@define-color yellow_3 #f6d32d;
@define-color yellow_4 #f5c211;
@define-color yellow_5 #e5a50a;
@define-color orange_1 #ffbe6f;
@define-color orange_2 #ffa348;
@define-color orange_3 #ff7800;
@define-color orange_4 #e66100;
@define-color orange_5 #c64600;
@define-color red_1 #f66151;
@define-color red_2 #ed333b;
@define-color red_3 #e01b24;
@define-color red_4 #c01c28;
@define-color red_5 #a51d2d;
@define-color purple_1 #dc8add;
@define-color purple_2 #c061cb;
@define-color purple_3 #9141ac;
@define-color purple_4 #813d9c;
@define-color purple_5 #613583;
@define-color brown_1 #cdab8f;
@define-color brown_2 #b5835a;
@define-color brown_3 #986a44;
@define-color brown_4 #865e3c;
@define-color brown_5 #63452c;
@define-color light_1 #ffffff;
@define-color light_2 #f6f5f4;
@define-color light_3 #deddda;
@define-color light_4 #c0bfbc;
@define-color light_5 #9a9996;
@define-color dark_1 #77767b;
@define-color dark_2 #5e5c64;
@define-color dark_3 #3d3846;
@define-color dark_4 #241f31;
@define-color dark_5 #000000;
sq_button.sp1_3,
sq_button.sp2_3,
sq_button.sp4_3,
sq_button.sp5_3,
sq_button.vert_spacer,
sq_button.sp1_3:active,
sq_button.sp2_3:active,
sq_button.sp4_3:active,
sq_button.sp5_3:active,
sq_button.vert_spacer
{
background: #000000;
border-color: #000000;
color: #000000;
}
sq_button
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.default_punct
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button.default_punct:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.default_foreign
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button.default_foreign:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.default_calc
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button.default_calc:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.default_prgm
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button.default_prgm:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.default_curr
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button.default_curr:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.default_misc
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button.default_misc:active
{
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.altline,
sq_button.special,
sq_button.wide {
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
sq_button:active,
sq_button.altline:active,
sq_button.special:active,
sq_button.wide:active {
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.latched,
sq_button.altline.latched
{
color: mix(@theme_fg_color, #ffffff, 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
sq_button.locked,
sq_button.altline.locked
{
color: mix(@theme_fg_color, #ffffff, 1.0);
background: mix(@theme_selected_bg_color, rgb(230,140,255), 1.0);
}
#Return {
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(190,102,218), 1.0);
}
#Return:active {
color: mix(@theme_fg_color, #ffffff, 1.0);
border-color: mix(@borders, rgb(190,102,218), 1.0);
background: mix(@theme_bg_color, rgb(230,140,255), 1.0);
}
phosh-top-panel {
color: rgb(230,140,255);
}
phosh-home {
color: rgb(230,140,255);
}
phosh-lockscreen {
color: rgb(230,140,255);
}
I also altered the landscape keyboard, moving the numbers from the right to the left so that the main keyboard is roughly centered. For completeness, I will include both portrait and landscape keyboard files below.
For anyone interested, backup the us.yaml
and us_wide.yaml
files located in ~/.local/share/squeekboard/keyboards/
before replacing them with these files:
us.yaml
---
outlines:
default: { width: 48, height: 55 }
default_punct: { width: 48, height: 55 }
default_foreign: { width: 48, height: 55 }
default_calc: { width: 48, height: 55 }
default_prgm: { width: 48, height: 55 }
default_curr: { width: 48, height: 55 }
default_misc: { width: 48, height: 55 }
sp1_3: { width: 16, height: 55 }
sp2_3: { width: 32, height: 55 }
action: { width: 64, height: 55 }
wide: { width: 80, height: 55 }
sp5_3: { width: 80, height: 52 }
action_short: { width: 64, height: 52 }
altline: { width: 80, height: 52 }
spaceline: { width: 244, height: 52 }
special: { width: 60, height: 52 }
return_bsp: { width: 64, height: 52 }
vert_spacer: { width: 100, height: 0 }
views:
base:
- "Shift_b_ls Ctrl Alt ↑ ↓ ← → BackSpace"
- " 1 2 3 4 5 6 7 8 9 0 -"
- "sp1_3 q w e r t y u i o p sp2_3"
- "sp2_3 a s d f g h j k l ; sp1_3"
- " ' z x c v b n m , . /"
- "Shift_L preferences space show_actions Return"
- "vert_spacer"
upper:
- "Shift_u_us Ctrl Alt ↑ ↓ ← → BackSpace"
- " ! @ # $ % ^ & * ( ) _"
- "sp1_3 Q W E R T Y U I O P sp2_3"
- "sp2_3 A S D F G H J K L : sp1_3"
- " \" Z X C V B N M < > ?"
- "Shift_L preferences space show_actions Return"
- "vert_spacer"
lsyms:
- "Shift_b_ls Ctrl Alt ↑ ↓ ← → BackSpace"
- " ` à â á é î ü ô ö û ó"
- "sp1_3 þ ð č ĵ š ž ǧ ß ʒ ğ sp2_3"
- "sp2_3 θ μ π σ τ φ = · + minus sp1_3"
- " \\ | bang pct amp caret mulsplat divslash √ × ÷"
- "Shift_S preferences space show_actions Return"
- "vert_spacer"
usyms:
- "Shift_u_us Ctrl Alt ↑ ↓ ← → BackSpace"
- " ~ À Â Á É Î Ü Ô Ö Û Ó"
- "sp1_3 Þ Đ Č Ĵ Š Ž Ǧ ʃ Ʒ Ğ sp2_3"
- "sp2_3 « » Σ Δ ¶ ° ® © dollar £ sp1_3"
- " lst gtt lparen rparen [ ] { } hash € ¥"
- "Shift_S preferences space show_actions Return"
- "vert_spacer"
actions:
- "sp5_3 Ctrl Alt ↑ ↓ ← → BackSpace"
- "show_lower F1 F2 F3 F4 Insert Home PgUp"
- "show_upper F5 F6 F7 F8 Del End PgDn"
- "show_lsyms F9 F10 F11 F12 Esc Up Pause"
- "show_usyms Menu Esc Tab Break Left Down Right"
- "sp5_3 preferences space show_actions Return"
- "vert_spacer"
buttons:
sp1_3:
outline: "sp1_3"
keysym: " "
text: " "
sp2_3:
outline: "sp2_3"
keysym: " "
text: " "
sp5_3:
outline: "sp5_3"
keysym: " "
text: " "
vert_spacer:
outline: "vert_spacer"
text: " "
keysym: " "
Shift_L:
action:
locking:
lock_view: "upper"
unlock_view: "base"
outline: "altline"
icon: "key-shift"
Shift_S:
action:
locking:
lock_view: "usyms"
unlock_view: "lsyms"
outline: "altline"
icon: "key-shift"
Shift_b_ls:
action:
locking:
lock_view: "lsyms"
unlock_view: "base"
outline: "altline"
label: "àτ÷"
Shift_u_us:
action:
locking:
lock_view: "usyms"
unlock_view: "upper"
outline: "altline"
label: "ÀΣ€"
show_actions:
action:
locking:
lock_view: "actions"
unlock_view: "base"
outline: "altline"
label: "Fn"
preferences:
action: "show_prefs"
outline: "special"
icon: "keyboard-mode-symbolic"
space:
outline: "spaceline"
text: " "
Return:
outline: "return_bsp"
icon: "key-enter"
keysym: "Return"
BackSpace:
outline: "return_bsp"
icon: "edit-clear-symbolic"
action: erase
Ctrl:
modifier: "Control"
outline: "action_short"
label: "Ctrl"
Alt:
modifier: "Alt"
outline: "action_short"
label: "Alt"
"↑":
outline: "action_short"
keysym: "Up"
"↓":
outline: "action_short"
keysym: "Down"
"←":
outline: "action_short"
keysym: "Left"
"→":
outline: "action_short"
keysym: "Right"
"-":
outline: "default_punct"
";":
outline: "default_punct"
"'":
outline: "default_punct"
",":
outline: "default_punct"
".":
outline: "default_punct"
"?":
outline: "default_punct"
"!":
outline: "default_punct"
"@":
outline: "default_punct"
"#":
outline: "default_punct"
"$":
outline: "default_punct"
"%":
outline: "default_punct"
"^":
outline: "default_punct"
"&":
outline: "default_punct"
"*":
outline: "default_punct"
"(":
outline: "default_punct"
")":
outline: "default_punct"
"_":
outline: "default_punct"
":":
outline: "default_punct"
"\"":
outline: "default_punct"
"<":
outline: "default_punct"
">":
outline: "default_punct"
"/":
outline: "default_punct"
"`":
outline: "default_punct"
"à":
outline: "default_foreign"
"â":
outline: "default_foreign"
"á":
outline: "default_foreign"
"é":
outline: "default_foreign"
"î":
outline: "default_foreign"
"ü":
outline: "default_foreign"
"ô":
outline: "default_foreign"
"ö":
outline: "default_foreign"
"û":
outline: "default_foreign"
"ó":
outline: "default_foreign"
"þ":
outline: "default_foreign"
"ð":
outline: "default_foreign"
"č":
outline: "default_foreign"
"ĵ":
outline: "default_foreign"
"š":
outline: "default_foreign"
"ž":
outline: "default_foreign"
"ǧ":
outline: "default_foreign"
"ß":
outline: "default_foreign"
"ʒ":
outline: "default_foreign"
"ğ":
outline: "default_foreign"
"θ":
outline: "default_foreign"
"μ":
outline: "default_foreign"
"π":
outline: "default_foreign"
"σ":
outline: "default_foreign"
"τ":
outline: "default_foreign"
"φ":
outline: "default_foreign"
"=":
outline: "default_calc"
"·":
outline: "default_calc"
"+":
outline: "default_calc"
minus:
outline: "default_calc"
text: "-"
"\\":
outline: "default_prgm"
"|":
outline: "default_prgm"
bang:
outline: "default_prgm"
text: "!"
pct:
outline: "default_prgm"
text: "%"
amp:
outline: "default_prgm"
text: "&"
caret:
outline: "default_prgm"
text: "^"
mulsplat:
outline: "default_calc"
text: "*"
divslash:
outline: "default_calc"
text: "/"
"√":
outline: "default_calc"
"×":
outline: "default_calc"
"÷":
outline: "default_calc"
"~":
outline: "default_punct"
"À":
outline: "default_foreign"
"Â":
outline: "default_foreign"
"Á":
outline: "default_foreign"
"É":
outline: "default_foreign"
"Î":
outline: "default_foreign"
"Ü":
outline: "default_foreign"
"Ô":
outline: "default_foreign"
"Ö":
outline: "default_foreign"
"Û":
outline: "default_foreign"
"Ó":
outline: "default_foreign"
"Þ":
outline: "default_foreign"
"Đ":
outline: "default_foreign"
"Č":
outline: "default_foreign"
"Ĵ":
outline: "default_foreign"
"Š":
outline: "default_foreign"
"Ž":
outline: "default_foreign"
"Ǧ":
outline: "default_foreign"
"ʃ":
outline: "default_foreign"
"Ʒ":
outline: "default_foreign"
"Ğ":
outline: "default_foreign"
"Σ":
outline: "default_foreign"
"Δ":
outline: "default_foreign"
"«":
outline: "default_foreign"
"»":
outline: "default_foreign"
hash:
outline: "default_prgm"
text: "#"
"°":
outline: "default_misc"
"®":
outline: "default_misc"
"©":
outline: "default_misc"
dollar:
outline: "default_curr"
text: "$"
"£":
outline: "default_curr"
lst:
outline: "default_prgm"
text: "<"
gtt:
outline: "default_prgm"
text: ">"
lparen:
label: "("
outline: "default_prgm"
text: "("
rparen:
outline: "default_prgm"
text: ")"
"[":
outline: "default_prgm"
"]":
outline: "default_prgm"
"{":
outline: "default_prgm"
"}":
outline: "default_prgm"
"¶":
outline: "default_misc"
"€":
outline: "default_curr"
"¥":
outline: "default_curr"
show_lower:
action:
set_view: "base"
outline: "wide"
label: "abc"
show_upper:
action:
set_view: "upper"
outline: "wide"
label: "ABC"
show_lsyms:
action:
set_view: "lsyms"
outline: "wide"
label: "àτ÷"
show_usyms:
action:
set_view: "usyms"
outline: "wide"
label: "ÀΣ€"
F1:
outline: "action"
keysym: "F1"
F2:
outline: "action"
keysym: "F2"
F3:
outline: "action"
keysym: "F3"
F4:
outline: "action"
keysym: "F4"
F5:
outline: "action"
keysym: "F5"
F6:
outline: "action"
keysym: "F6"
F7:
outline: "action"
keysym: "F7"
F8:
outline: "action"
keysym: "F8"
F9:
outline: "action"
keysym: "F9"
F10:
outline: "action"
keysym: "F10"
F11:
outline: "action"
keysym: "F11"
F12:
outline: "action"
keysym: "F12"
Esc:
outline: "action"
keysym: "Escape"
Tab:
outline: "action"
keysym: "Tab"
Del:
outline: "action"
keysym: "Delete"
Insert:
outline: "action"
keysym: "Insert"
Menu:
outline: "action"
keysym: "Menu"
Pause:
outline: "action"
keysym: "Pause"
Break:
outline: "action"
keysym: "Break"
Home:
outline: "action"
keysym: "Home"
End:
outline: "action"
keysym: "End"
PgUp:
outline: "action"
keysym: "Page_Up"
PgDn:
outline: "action"
keysym: "Page_Down"
Up:
label: "↑"
outline: "action"
keysym: "Up"
Left:
label: "←"
outline: "action"
keysym: "Left"
Down:
label: "↓"
outline: "action"
keysym: "Down"
Right:
label: "→"
outline: "action"
keysym: "Right"
us_wide.yaml
---
outlines:
default: { width: 48, height: 70 }
default_punct: { width: 48, height: 70 }
default_foreign: { width: 48, height: 70 }
default_calc: { width: 48, height: 70 }
default_prgm: { width: 48, height: 70 }
default_curr: { width: 48, height: 70 }
default_misc: { width: 48, height: 70 }
sp1_3: { width: 16, height: 70 }
sp2_3: { width: 32, height: 70 }
sp4_3: { width: 64, height: 70 }
action: { width: 64, height: 70 }
altline: { width: 80, height: 70 }
double: { width: 96, height: 70 }
wide5: { width: 80, height: 70 }
spaceline: { width: 212, height: 70 }
widespaceline: { width: 292, height: 70 }
special: { width: 60, height: 70 }
views:
base:
- "7 8 9 minus = sp2_3 q w e r t y u i o p [ ] BackSpace sp2_3 Insert Home PgUp"
- "4 5 6 + · sp2_3 sp1_3 a s d f g h j k l ; ' Return sp2_3 Del End PgDn"
- "1 2 3 ÷ √ sp2_3 sp2_3 z x c v b n m , . / ` \\ sp2_3 sp2_3 sp4_3 ↑ sp4_3"
- "Zero DecimalPt × percent sp2_3 Shift_L preferences Ctrl space Alt Shift_b_ls show_actions sp2_3 ← ↓ →"
upper:
- "7 8 9 minus = sp2_3 Q W E R T Y U I O P { } BackSpace sp2_3 Insert Home PgUp"
- "4 5 6 + · sp2_3 sp1_3 A S D F G H J K L : \" Return sp2_3 Del End PgDn"
- "1 2 3 ÷ √ sp2_3 sp2_3 Z X C V B N M < > ? ~ | sp2_3 sp2_3 sp4_3 ↑ sp4_3"
- "Zero DecimalPt × percent sp2_3 Shift_L preferences Ctrl space Alt Shift_u_us show_actions sp2_3 ← ↓ →"
lsyms:
- "7 8 9 minus = sp2_3 à â á é î ü ô ö û ó & * BackSpace sp2_3 Insert Home PgUp"
- "4 5 6 + · sp2_3 sp1_3 þ ð č ĵ š ž ǧ ß ʒ ğ - Return sp2_3 Del End PgDn"
- "1 2 3 ÷ √ sp2_3 sp2_3 θ μ π σ τ φ ! @ # $ % ^ sp2_3 sp2_3 sp4_3 ↑ sp4_3"
- "Zero DecimalPt × percent sp2_3 Shift_S preferences Ctrl space Alt Shift_b_ls show_actions sp2_3 ← ↓ →"
usyms:
- "7 8 9 minus = sp2_3 À Â Á É Î Ü Ô Ö Û Ó ( ) BackSpace sp2_3 Insert Home PgUp"
- "4 5 6 + · sp2_3 sp1_3 Þ Đ Č Ĵ Š Ž Ǧ ʃ Ʒ Ğ _ Return sp2_3 Del End PgDn"
- "1 2 3 ÷ √ sp2_3 sp2_3 « » Σ Δ ¶ ° ® © dollar £ € ¥ sp2_3 sp2_3 sp4_3 ↑ sp4_3"
- "Zero DecimalPt × percent sp2_3 Shift_S preferences Ctrl space Alt Shift_u_us show_actions sp2_3 ← ↓ →"
actions:
- "7 8 9 minus = sp2_3 show_lower sp1_3 Esc sp2_3 F1 F2 F3 F4 sp2_3 WideBackSpace sp2_3 Insert Home PgUp"
- "4 5 6 + · sp2_3 show_upper sp1_3 Tab sp2_3 F5 F6 F7 F8 sp2_3 Pause sp2_3 Del End PgDn"
- "1 2 3 ÷ √ sp2_3 show_lsyms sp1_3 Menu sp2_3 F9 F10 F11 F12 sp2_3 Break sp2_3 sp4_3 ↑ sp4_3"
- "Zero DecimalPt × percent sp2_3 show_usyms preferences Ctrl widespace Alt show_actions sp2_3 ← ↓ →"
buttons:
sp1_3:
outline: "sp1_3"
keysym: " "
text: " "
sp2_3:
outline: "sp2_3"
keysym: " "
text: " "
sp4_3:
outline: "sp4_3"
keysym: " "
text: " "
Shift_L:
action:
locking:
lock_view: "upper"
unlock_view: "base"
outline: "altline"
icon: "key-shift"
Shift_S:
action:
locking:
lock_view: "usyms"
unlock_view: "lsyms"
outline: "altline"
icon: "key-shift"
Shift_b_ls:
action:
locking:
lock_view: "lsyms"
unlock_view: "base"
outline: "altline"
label: "àτ÷"
Shift_u_us:
action:
locking:
lock_view: "usyms"
unlock_view: "upper"
outline: "altline"
label: "ÀΣ€"
show_actions:
action:
locking:
lock_view: "actions"
unlock_view: "base"
outline: "altline"
label: "Fn"
preferences:
action: "show_prefs"
outline: "special"
icon: "keyboard-mode-symbolic"
space:
outline: "spaceline"
text: " "
widespace:
outline: "widespaceline"
text: " "
Return:
outline: "double"
icon: "key-enter"
keysym: "Return"
BackSpace:
outline: "action"
icon: "edit-clear-symbolic"
action: erase
Ctrl:
modifier: "Control"
outline: "action"
label: "Ctrl"
Alt:
modifier: "Alt"
outline: "action"
label: "Alt"
"↑":
outline: "action"
keysym: "Up"
"↓":
outline: "action"
keysym: "Down"
"←":
outline: "action"
keysym: "Left"
"→":
outline: "action"
keysym: "Right"
"-":
outline: "default_punct"
";":
outline: "default_punct"
"'":
outline: "default_punct"
",":
outline: "default_punct"
".":
outline: "default_punct"
"?":
outline: "default_punct"
"!":
outline: "default_punct"
"@":
outline: "default_punct"
"#":
outline: "default_punct"
"$":
outline: "default_punct"
"%":
outline: "default_punct"
"^":
outline: "default_punct"
"&":
outline: "default_punct"
"*":
outline: "default_punct"
"(":
outline: "default_punct"
")":
outline: "default_punct"
"_":
outline: "default_punct"
":":
outline: "default_punct"
"\"":
outline: "default_punct"
"<":
outline: "default_punct"
">":
outline: "default_punct"
"/":
outline: "default_punct"
"`":
outline: "default_punct"
"à":
outline: "default_foreign"
"â":
outline: "default_foreign"
"á":
outline: "default_foreign"
"é":
outline: "default_foreign"
"î":
outline: "default_foreign"
"ü":
outline: "default_foreign"
"ô":
outline: "default_foreign"
"ö":
outline: "default_foreign"
"û":
outline: "default_foreign"
"ó":
outline: "default_foreign"
"þ":
outline: "default_foreign"
"ð":
outline: "default_foreign"
"č":
outline: "default_foreign"
"ĵ":
outline: "default_foreign"
"š":
outline: "default_foreign"
"ž":
outline: "default_foreign"
"ǧ":
outline: "default_foreign"
"ß":
outline: "default_foreign"
"ʒ":
outline: "default_foreign"
"ğ":
outline: "default_foreign"
"θ":
outline: "default_foreign"
"μ":
outline: "default_foreign"
"π":
outline: "default_foreign"
"σ":
outline: "default_foreign"
"τ":
outline: "default_foreign"
"φ":
outline: "default_foreign"
"=":
outline: "default_calc"
"·":
outline: "default_calc"
"+":
outline: "default_calc"
minus:
outline: "default_calc"
text: "-"
percent:
outline: "default_calc"
text: "%"
"\\":
outline: "default_punct"
"|":
outline: "default_punct"
bang:
outline: "default_punct"
text: "!"
pct:
outline: "default_punct"
text: "%"
amp:
outline: "default_punct"
text: "&"
caret:
outline: "default_punct"
text: "^"
mulsplat:
outline: "default_calc"
text: "*"
divslash:
outline: "default_calc"
text: "/"
"√":
outline: "default_calc"
"×":
outline: "default_calc"
"÷":
outline: "default_calc"
"~":
outline: "default_punct"
"À":
outline: "default_foreign"
"Â":
outline: "default_foreign"
"Á":
outline: "default_foreign"
"É":
outline: "default_foreign"
"Î":
outline: "default_foreign"
"Ü":
outline: "default_foreign"
"Ô":
outline: "default_foreign"
"Ö":
outline: "default_foreign"
"Û":
outline: "default_foreign"
"Ó":
outline: "default_foreign"
"Þ":
outline: "default_foreign"
"Đ":
outline: "default_foreign"
"Č":
outline: "default_foreign"
"Ĵ":
outline: "default_foreign"
"Š":
outline: "default_foreign"
"Ž":
outline: "default_foreign"
"Ǧ":
outline: "default_foreign"
"ʃ":
outline: "default_foreign"
"Ʒ":
outline: "default_foreign"
"Ğ":
outline: "default_foreign"
"Σ":
outline: "default_foreign"
"Δ":
outline: "default_foreign"
"«":
outline: "default_foreign"
"»":
outline: "default_foreign"
hash:
outline: "default_punct"
text: "#"
"°":
outline: "default_misc"
"®":
outline: "default_misc"
"©":
outline: "default_misc"
dollar:
outline: "default_curr"
text: "$"
"£":
outline: "default_curr"
lst:
outline: "default_punct"
text: "<"
gtt:
outline: "default_punct"
text: ">"
lparen:
label: "("
outline: "default_punct"
text: "("
rparen:
outline: "default_punct"
text: ")"
"[":
outline: "default_punct"
"]":
outline: "default_punct"
"{":
outline: "default_punct"
"}":
outline: "default_punct"
"¶":
outline: "default_misc"
"€":
outline: "default_curr"
"¥":
outline: "default_curr"
show_lower:
action:
set_view: "base"
outline: "altline"
label: "abc"
show_upper:
action:
set_view: "upper"
outline: "altline"
label: "ABC"
show_lsyms:
action:
set_view: "lsyms"
outline: "altline"
label: "àτ÷"
show_usyms:
action:
set_view: "usyms"
outline: "altline"
label: "ÀΣ€"
F1:
outline: "wide5"
keysym: "F1"
F2:
outline: "wide5"
keysym: "F2"
F3:
outline: "wide5"
keysym: "F3"
F4:
outline: "wide5"
keysym: "F4"
F5:
outline: "wide5"
keysym: "F5"
F6:
outline: "wide5"
keysym: "F6"
F7:
outline: "wide5"
keysym: "F7"
F8:
outline: "wide5"
keysym: "F8"
F9:
outline: "wide5"
keysym: "F9"
F10:
outline: "wide5"
keysym: "F10"
F11:
outline: "wide5"
keysym: "F11"
F12:
outline: "wide5"
keysym: "F12"
Esc:
outline: "wide5"
keysym: "Escape"
WideBackSpace:
outline: "wide5"
icon: "edit-clear-symbolic"
action: erase
Tab:
outline: "wide5"
keysym: "Tab"
Del:
outline: "action"
keysym: "Delete"
Insert:
outline: "action"
keysym: "Insert"
Menu:
outline: "wide5"
keysym: "Menu"
Pause:
outline: "wide5"
keysym: "Pause"
Break:
outline: "wide5"
keysym: "Break"
Home:
outline: "action"
keysym: "Home"
End:
outline: "action"
keysym: "End"
PgUp:
outline: "action"
keysym: "Page_Up"
PgDn:
outline: "action"
keysym: "Page_Down"
Up:
label: "↑"
outline: "action"
keysym: "Up"
Left:
label: "←"
outline: "action"
keysym: "Left"
Down:
label: "↓"
outline: "action"
keysym: "Down"
Right:
label: "→"
outline: "action"
keysym: "Right"
Zero:
outline: "double"
text: "0"
DecimalPt:
text: "."
period:
outline: "altline"
text: "."
colon:
text: ":"
It’s much better to create a new *.css file like firefoxColors.css
and add just one line into gtk.css: @import url("firefoxColors.css");
If you use another directory, it has to be insert to the url. As you see, it’s similar to what you’re doing on userChrome.css
.
This is really unfortunate, it would make it so much easier for people if you could host the variants in git branches on some code hosting service, be it forgejo on FrankyFlawless’s server, codeberg.org or sr.ht forked from upstream postmarketOS / mobile-config-firefox · GitLab.
Cloning a git repo and running make install
is so much easier than copying a bunch of stuff from forums and making things work somehow.
I have tried to do to bring this into gitlab some weeks ago (with the goal of creating a MR for upstream with the parts that are go beyond ‘different colors’), and (admittedly partially due to not being familiar how firefox-mobile-config combines things) it took me more than an hour) to come up with this Files · user0-css-changes_true_mobile_style-1peter10 · Peter M / mobile-config-firefox · GitLab
I’ll do this again soon, but as I don’t have that much time and enough projects I need to attend, I can’t promise a timeline. I really want to encourage you to put this into some kind of git repo somewhere to make it easier to review your (IMHO great) work to then bring it to PureOS or postmarketOS users without an hour of tediously copying things - I struggle to do this, and I know that people like @dos or ollieparanoid are ususally more busy than I am.
Honestly, I know nothing about creating, cloning, mirroring, and managing repos, and it’s really intimidating.
From all hosting options I’ve seen, Codeberg seems to be the best and the only one that I would be willing to try, but they require a non-disposable email address for communications. I hate email and other platforms that are unsecure and unencrypted by default and require javascript or an app, and I don’t like being forced to use it. This is why I use kbin instead of mastodon. Kbin allows browsing, creating an account, and logging in without javascript, while seemingly all mastodon instances require javascript just to browse, and using mastodon in an app requires an account.
Even if I could easily create an account on a site like Codeberg with no email or javascript requirements, I would still have to learn everything necessary to actually use it. It’s just too much of a hassle for me to deal with all of that. I’m not a software engineer/developer/programmer; I’m just a privacy-oriented linux user.
Thankfully, @Lliure has created a “Git mirror” for my code, making it easier for people to download it.
I understand your perspective very well: I spent the last few years trying to get rid of using an email address and phone number for public correspondence. In the end, I decided to create a dedicated public identity that is easily correlated across the Internet to represent my interests.
Also, services that reject ephemeral email addresses may not be updated for all domain names, so with persistence you may be able to circumvent them. That largely depends of how much value you place in the service(s) to begin with.
I have yet to find a ephemeral email address service that does not require JavaScript while being usable for registrations.
While I’m fully sympathetic with that approach, you might also want to factor into your decision that if you use an ephemeral email for a social coding platform, users of your project may be unable to reach you with issues, pull requests, or mentions. This may or may not be what you want.
Usually the email address is used as a recovery method and email subscriptions to the repository’s activities on the social coding platform. The code maintainer can always use their main credentials to log in as long as they remember it to address those activities.
In other related news, I attempted to register a Codeberg account using an ephemeral email address, here was the response with slight modification:
Your registration was denied (noreply@codeberg.org)
Dear throwaway,
Welcome to Codeberg - we’re sorry to greet you with bad news. Codeberg is moderated by volunteers in their free time. We have to ensure that we save their nerves where possible. Because of that, we denied your registration for Codeberg.org, either because your mail provider is source of heavy spam waves (currently the case e.g. with gmail.com - we currently see no other option than preventing registrations from this source) or because a third-party blocklist we rely on considers example.com as a throwaway email provider. Blocking these saves us a lot of effort in dealing with spam accounts.
Thank you for understanding. Here are your options:
- Register with another name and email, you can change your username later
- wait - your account is removed after it wasn’t activated for 24 to 48 hours
- Contact our support via help@codeberg.org and ask to change your email address, or explain to us why you’d like to this email address, so we can manually confirm it. (Please note that password recovery might require manual action on our side again).
Thank you for your patience.
Your Codeberg Team.
It is not clear what third-party blocklist they rely on, so I may as well attempt to circumvent it.
Well, I already did it, here is what the successful response was, with slight modification:
Please activate your account (noreply@codeberg.org)
throwaway, please activate your account
Hi throwaway, thanks for registering at Codeberg.org!
Please click the following link to activate your account within 3 hours:
Not working? Try copying and pasting it to your browser.
Welcome to Codeberg.org
Codeberg e.V. – Arminiusstraße 2-4 – 10551 Berlin – Germany
Registered at registration court Amtsgericht Charlottenburg VR36929.
Since this is only an issue for @Emma, I will send them a PM of the ephemeral email address service I was using to produce this result.
Codeberg uses ratelimiting based on IP addresses for registrations (up to 2 accounts), so it can be easily circumvented by VPNs or Tor.
I replied to your PM.
For anyone wondering, there is still no solution that is free of javascript and/or javascript-based captchas, but that’s okay. I don’t need my own repo.
Almost perfect:
I wonder what is the difference between having a Sourcehut account or not in this case.
Also:
Alpha caveats
However, we also hold some caveats regarding the alpha.
Payment will be required later
From the beta onwards, unpaid accounts will be limited to read-only access to their own projects. Affected users will be emailed at least 60 days in advance of the transition. Users who host their own instance of Sourcehut, on their own servers, will be unaffected by this. Additionally, financial aid will be provided to those who cannot pay; no one is going to be priced out.
The exact details of any billing changes will be discussed extensively with the community well in advance, and you are welcome to make yourself heard in these discussions.
See the billing FAQ for details.
Some services are incomplete
Some of our services are not complete, and you may notice conspicuously absent features. However, if you find the current featureset meets your needs, it may already be suitable for your use. Our documentation is also incomplete.
Some notable features which are still under development in the alpha period include:
- First-class support for user groups/organizations
- A web-based workflow for submitting and reviewing patches on lists.sr.ht
- Full data autonomy, including account data import & export, account deletion, and username changes
The “beta” label is used on our bug trackers to indicate tickets which are prioritized for the beta.
The API is subject to change
We are developing a new GraphQL API which we intend to support onwards into the future. Users of the legacy API will be notified of any deprecations in advance, and assistance in migrating your software will be offered. The new API, once finalized, will be supported for at least 5 years.
Goals for the beta and beyond
The beta will be considered feature complete, but may be lacking in docs and polish, or have minor known bugs. “Feature complete” is defined as “meeting the basic goals in a stable and consistent package”, but doesn’t necessarily mean that no new features will be developed in the post-beta period. The beta period will be short, we will settle any issues which arise from the payment model changing, polish and document everything, and promote it to the production phase shortly thereafter.