Example custom emoji-keyboard replacing the stock one

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.

8 Likes

Havenโ€™t dried that yet, but one question: Is there numbers visiblle aboce letters.

No. Extra empty line that is useless in this particular keyboard comes from text predict component, unfortunately.

Cool!

Of course you donโ€™t need to be modifying the original file.

You can give it a name like my-emoji.qml, and then add a file beside it called layouts_my-emojis.conf with the content:

[my-emoji.qml]
name=My Emoji
languageCode= 
type=emojis
6 Likes

Thanks nephros! :slightly_smiling_face: I adjusted the original message for this change. Lasts better through the OS updates.

1 Like

cool, for sure i had to replace one for :goat:
Goats should not be discriminated :smiley: :smiley: :smiley:

lets make this as patch for patchmanager, it is best so far until emoji+ will get fix for sf5.2

3 Likes