I made this custom emoji keyboad layout when I got annoyed that SFOS 5.2 still had the very limited one in JP2026.
Run:
devel-su;
Create and edit file:
pkcon install nano;
nano /usr/share/maliit/plugins/com/jolla/layouts/my-emoji.qml;
Paste:
import QtQuick 2.0
import com.jolla.keyboard 1.0
import ".."
KeyboardLayout {
splitSupported: false
KeyboardRow {
FittedCharacterKey { caption: "๐"; symView: "๐ฑ"; }
FittedCharacterKey { caption: "๐"; symView: "๐บ"; }
FittedCharacterKey { caption: "๐"; symView: "๐ธ"; }
FittedCharacterKey { caption: "๐"; symView: "๐น"; }
FittedCharacterKey { caption: "๐"; symView: "๐ป"; }
FittedCharacterKey { caption: "๐"; symView: "๐ผ"; }
FittedCharacterKey { caption: "๐"; symView: "๐ฝ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐ฟ"; }
FittedCharacterKey { caption: "๐"; symView: "๐พ"; }
FittedCharacterKey { caption: "๐ฎ"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐ถ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
}
KeyboardRow {
FittedCharacterKey { caption: "๐"; symView: "๐คช"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐ข"; symView: "๐"; }
FittedCharacterKey { caption: "๐ญ"; symView: "๐"; }
FittedCharacterKey { caption: "๐ "; symView: "๐"; }
FittedCharacterKey { caption: "๐ฃ"; symView: "๐
"; }
FittedCharacterKey { caption: "๐ด"; symView: "๐ฅฑ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐ป"; }
FittedCharacterKey { caption: "๐"; symView: "๐ถ"; }
FittedCharacterKey { caption: "๐"; symView: "โ
"; }
FittedCharacterKey { caption: "๐"; symView: "๐งป"; }
FittedCharacterKey { caption: "๐ฑ"; symView: "๐ฌ"; }
FittedCharacterKey { caption: "๐ก"; symView: "โต"; }
}
KeyboardRow {
FittedCharacterKey { caption: "โน"; symView: "๐ค"; }
FittedCharacterKey { caption: "๐ฌ"; symView: "๐ธ"; }
FittedCharacterKey { caption: "๐คฌ"; symView: "โ"; }
FittedCharacterKey { caption: "๐ฅถ"; symView: "๐"; }
FittedCharacterKey { caption: "๐ฅต"; symView: "โ"; }
FittedCharacterKey { caption: "๐คฏ"; symView: "๐ฝ"; }
FittedCharacterKey { caption: "๐ค"; symView: "๐ดโโ ๏ธ"; }
FittedCharacterKey { caption: "๐คญ"; symView: "๐น"; }
FittedCharacterKey { caption: "๐ค"; symView: "๐ป"; }
FittedCharacterKey { caption: "๐ฅณ"; symView: "๐ฅ"; }
FittedCharacterKey { caption: "๐คฉ"; symView: "๐พ"; }
FittedCharacterKey { caption: "๐ฅฐ"; symView: "๐ค "; }
FittedCharacterKey { caption: "๐ง"; symView: "๐ช"; }
FittedCharacterKey { caption: "๐"; symView: "๐ฟ"; }
}
KeyboardRow {
FittedCharacterKey { caption: "๐ค"; symView: "๐ฐ"; }
FittedCharacterKey { caption: "๐ฅ"; symView: "๐ฟ"; }
FittedCharacterKey { caption: "๐ฉ"; symView: "โ "; }
FittedCharacterKey { caption: "๐"; symView: "๐จ"; }
FittedCharacterKey { caption: "๐"; symView: "โ"; }
FittedCharacterKey { caption: "๐ช"; symView: "โ"; }
FittedCharacterKey { caption: "๐"; symView: "๐ฅ"; }
FittedCharacterKey { caption: "๐"; symView: "๐จ"; }
FittedCharacterKey { caption: "๐ค"; symView: "๐งธ"; }
FittedCharacterKey { caption: "โ"; symView: "โจ"; }
FittedCharacterKey { caption: "โ"; symView: "๐ฃ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐ค"; symView: "๐ง"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
}
KeyboardRow {
FittedCharacterKey { caption: "โค"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐ฉ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐ฏ"; symView: "๐ฆ"; }
FittedCharacterKey { caption: "๐"; symView: "๐ฆฆ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
FittedCharacterKey { caption: "๐"; symView: "๐ค"; }
FittedCharacterKey { caption: "๐ฅ"; symView: "๐"; }
FittedCharacterKey { caption: "๐ฆ"; symView: "๐"; }
FittedCharacterKey { caption: "๐ข"; symView: "๐"; }
FittedCharacterKey { caption: "๐ง"; symView: "๐ฆ"; }
FittedCharacterKey { caption: "๐"; symView: "๐"; }
}
KeyboardRow {
SymbolKey {
caption: "SYM"
}
FunctionKey {
caption: "ABC"
implicitWidth: functionKeyWidth
keyType: KeyType.SymbolKey
onClicked: canvas.switchToPreviousCharacterLayout()
}
SpacebarKey {}
SpacebarKey {
active: splitActive
languageLabel: ""
}
EnterKey {}
BackspaceKey {}
}
}
Create and edit file:
nano /usr/share/maliit/plugins/com/jolla/layouts/layouts_my-emojis.conf;
Paste:
[my-emoji.qml]
name=My Emoji
languageCode=
type=emojis
Set privileges to defaults for group root (write privilege only for user root, not for group root):
chmod g-w /usr/share/maliit/plugins/com/jolla/layouts/my-emoji.qml;
chmod g-w /usr/share/maliit/plugins/com/jolla/layouts/layouts_my-emojis.conf;
To activate changes:
systemctl --user restart maliit-server;
Select the keyboard called My Emoji as an addition virtual keyboard in SFOS settings. Swipe the keyboard to switch between regular keyboard and emoji keyboard.
Pressing SYM key switches between two sets of emojis on this keyboard. Iโm sure there are better ways to do this, but I gathered that it would have required editing system layouts that other keyboards are dependant of as well.
Again, I understand there are also better ways to distribute these kind of changes, but it may be useful for people to know how the default one can be changed for ones taste as well. The amount of unicode emojis is staggering these days, so I understand why no-one at Jolla has taken this task to themselves.
For those who run SFOS on anything else than Jolla Phone 2026, particularly the narrow X10III one; To be able to use this layout well in landscape mode and not just in vertical position you may have to edit one row completely off from the layout. Otherwise there is no room to see what you are typing.