URI: 
       tMerge pull request #6836 from SomberNight/202012_kivy_fix_paths - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 093a03ebcfbac74314fd3bd912f566eb03270510
   DIR parent b6f63e1abf2cc3faa9c504e73af656889b9fab9e
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Thu, 10 Dec 2020 11:01:02 +0100
       
       Merge pull request #6836 from SomberNight/202012_kivy_fix_paths
       
       kivy: fix some resource path issues
       Diffstat:
         M electrum/gui/kivy/__init__.py       |       3 +++
         M electrum/gui/kivy/main.kv           |      13 +++++++------
         M electrum/gui/kivy/main_window.py    |      27 +++++++++++++++------------
         M electrum/gui/kivy/uix/dialogs/inst… |      13 +++++++------
         M electrum/gui/kivy/uix/dialogs/invo… |       6 ++++--
         M electrum/gui/kivy/uix/dialogs/labe… |       6 ++++--
         M electrum/gui/kivy/uix/dialogs/ligh… |      10 ++++++----
         M electrum/gui/kivy/uix/dialogs/pass… |       5 +++--
         M electrum/gui/kivy/uix/dialogs/qr_d… |       4 +++-
         M electrum/gui/kivy/uix/dialogs/qr_s… |       4 +++-
         M electrum/gui/kivy/uix/dialogs/requ… |       6 ++++--
         M electrum/gui/kivy/uix/dialogs/sett… |       4 +++-
         M electrum/gui/kivy/uix/dialogs/tx_d… |       3 ++-
         M electrum/gui/kivy/uix/screens.py    |      11 ++++++-----
         M electrum/gui/kivy/uix/ui_screens/h… |       5 +++--
         M electrum/gui/kivy/uix/ui_screens/r… |      13 +++++++------
         M electrum/gui/kivy/uix/ui_screens/s… |      19 ++++++++++---------
         M run_electrum                        |       3 ---
       
       18 files changed, 90 insertions(+), 65 deletions(-)
       ---
   DIR diff --git a/electrum/gui/kivy/__init__.py b/electrum/gui/kivy/__init__.py
       t@@ -29,6 +29,9 @@ import sys
        import os
        from typing import TYPE_CHECKING
        
       +KIVY_GUI_PATH = os.path.abspath(os.path.dirname(__file__))
       +os.environ['KIVY_DATA_DIR'] = os.path.join(KIVY_GUI_PATH, 'data')
       +
        try:
            sys.argv = ['']
            import kivy
   DIR diff --git a/electrum/gui/kivy/main.kv b/electrum/gui/kivy/main.kv
       t@@ -2,6 +2,7 @@
        #:import Window kivy.core.window.Window
        #:import Factory kivy.factory.Factory
        #:import _ electrum.gui.kivy.i18n._
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        
        
        ###########################
       t@@ -211,7 +212,7 @@
                Color:
                    rgba: 0.192, .498, 0.745, 1
                BorderImage:
       -            source: 'atlas://electrum/gui/kivy/theming/light/card_bottom'
       +            source: f'atlas://{KIVY_GUI_PATH}/theming/light/card_bottom'
                    size: self.size
                    pos: self.pos
        
       t@@ -225,7 +226,7 @@
                        Color:
                                rgba: 0.192, .498, 0.745, 1
                        BorderImage:
       -                        source: 'atlas://electrum/gui/kivy/theming/light/card_bottom'
       +                        source: f'atlas://{KIVY_GUI_PATH}/theming/light/card_bottom'
                                size: self.size
                                pos: self.pos
        
       t@@ -238,7 +239,7 @@
                        Color:
                                rgba: 0.192, .498, 0.745, 1
                BorderImage:
       -            source: 'atlas://electrum/gui/kivy/theming/light/card_bottom'
       +            source: f'atlas://{KIVY_GUI_PATH}/theming/light/card_bottom'
                    size: self.size
                    pos: self.pos
        
       t@@ -326,8 +327,8 @@
            valign: 'middle'
            bold: True
            font_size: '12.5sp'
       -    background_normal: 'atlas://electrum/gui/kivy/theming/light/tab_btn'
       -    background_down: 'atlas://electrum/gui/kivy/theming/light/tab_btn_pressed'
       +    background_normal: f'atlas://{KIVY_GUI_PATH}/theming/light/tab_btn'
       +    background_down: f'atlas://{KIVY_GUI_PATH}/theming/light/tab_btn_pressed'
        
        
        <ColoredLabel@Label>:
       t@@ -417,7 +418,7 @@ BoxLayout:
                    rgb: .6, .6, .6
                Rectangle:
                    size: self.size
       -            source: 'electrum/gui/kivy/data/background.png'
       +            source: f'{KIVY_GUI_PATH}/data/background.png'
        
            ActionBar:
        
   DIR diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py
       t@@ -23,6 +23,7 @@ from electrum.network import Network, TxBroadcastError, BestEffortRequestFailed
        from electrum.interface import PREFERRED_NETWORK_PROTOCOL, ServerAddr
        from electrum.logging import Logger
        from .i18n import _
       +from . import KIVY_GUI_PATH
        
        from kivy.app import App
        from kivy.core.window import Window
       t@@ -68,11 +69,13 @@ Factory.register('TabbedCarousel', module='electrum.gui.kivy.uix.screens')
        # Register fonts without this you won't be able to use bold/italic...
        # inside markup.
        from kivy.core.text import Label
       -Label.register('Roboto',
       -               'electrum/gui/kivy/data/fonts/Roboto.ttf',
       -               'electrum/gui/kivy/data/fonts/Roboto.ttf',
       -               'electrum/gui/kivy/data/fonts/Roboto-Bold.ttf',
       -               'electrum/gui/kivy/data/fonts/Roboto-Bold.ttf')
       +Label.register(
       +    'Roboto',
       +    KIVY_GUI_PATH + '/data/fonts/Roboto.ttf',
       +    KIVY_GUI_PATH + '/data/fonts/Roboto.ttf',
       +    KIVY_GUI_PATH + '/data/fonts/Roboto-Bold.ttf',
       +    KIVY_GUI_PATH + '/data/fonts/Roboto-Bold.ttf',
       +)
        
        
        from electrum.util import (NoDynamicFeeEstimates, NotEnoughFunds,
       t@@ -530,7 +533,7 @@ class ElectrumWindow(App, Logger):
                currentActivity.startActivity(it)
        
            def build(self):
       -        return Builder.load_file('electrum/gui/kivy/main.kv')
       +        return Builder.load_file(KIVY_GUI_PATH + '/main.kv')
        
            def _pause(self):
                if platform == 'android':
       t@@ -724,7 +727,7 @@ class ElectrumWindow(App, Logger):
                elif name == 'wallets':
                    self.wallets_dialog()
                elif name == 'status':
       -            popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/'+name+'.kv')
       +            popup = Builder.load_file(KIVY_GUI_PATH + f'/uix/ui_screens/{name}.kv')
                    master_public_keys_layout = popup.ids.master_public_keys
                    for xpub in self.wallet.get_master_public_keys()[1:]:
                        master_public_keys_layout.add_widget(TopLabel(text=_('Master Public Key')))
       t@@ -736,7 +739,7 @@ class ElectrumWindow(App, Logger):
                elif name.endswith("_dialog"):
                    getattr(self, name)()
                else:
       -            popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/'+name+'.kv')
       +            popup = Builder.load_file(KIVY_GUI_PATH + f'/uix/ui_screens/{name}.kv')
                    popup.open()
        
            @profiler
       t@@ -766,7 +769,7 @@ class ElectrumWindow(App, Logger):
                self.history_screen = None
                self.send_screen = None
                self.receive_screen = None
       -        self.icon = "electrum/gui/icons/electrum.png"
       +        self.icon = os.path.dirname(KIVY_GUI_PATH) + "/icons/electrum.png"
                self.tabs = self.root.ids['tabs']
        
            def update_interfaces(self, dt):
       t@@ -968,7 +971,7 @@ class ElectrumWindow(App, Logger):
                self.qr_dialog(label.name, label.data, True)
        
            def show_error(self, error, width='200dp', pos=None, arrow_pos=None,
       -                   exit=False, icon='atlas://electrum/gui/kivy/theming/light/error', duration=0,
       +                   exit=False, icon=f'atlas://{KIVY_GUI_PATH}/theming/light/error', duration=0,
                           modal=False):
                ''' Show an error Message Bubble.
                '''
       t@@ -980,7 +983,7 @@ class ElectrumWindow(App, Logger):
                          exit=False, duration=0, modal=False):
                ''' Show an Info Message Bubble.
                '''
       -        self.show_error(error, icon='atlas://electrum/gui/kivy/theming/light/important',
       +        self.show_error(error, icon=f'atlas://{KIVY_GUI_PATH}/theming/light/important',
                    duration=duration, modal=modal, exit=exit, pos=pos,
                    arrow_pos=arrow_pos)
        
       t@@ -1021,7 +1024,7 @@ class ElectrumWindow(App, Logger):
                    info_bubble.show_arrow = False
                    img.allow_stretch = True
                    info_bubble.dim_background = True
       -            info_bubble.background_image = 'atlas://electrum/gui/kivy/theming/light/card'
       +            info_bubble.background_image = f'atlas://{KIVY_GUI_PATH}/theming/light/card'
                else:
                    info_bubble.fs = False
                    info_bubble.icon = icon
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/installwizard.py b/electrum/gui/kivy/uix/dialogs/installwizard.py
       t@@ -34,6 +34,7 @@ if TYPE_CHECKING:
        Builder.load_string('''
        #:import Window kivy.core.window.Window
        #:import _ electrum.gui.kivy.i18n._
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        
        
        <WizardTextInput@TextInput>
       t@@ -43,8 +44,8 @@ Builder.load_string('''
            background_color: (1, 1, 1, 1) if self.focus else (0.454, 0.698, 0.909, 1)
            foreground_color: (0.31, 0.31, 0.31, 1) if self.focus else (0.835, 0.909, 0.972, 1)
            hint_text_color: self.foreground_color
       -    background_active: 'atlas://electrum/gui/kivy/theming/light/create_act_text_active'
       -    background_normal: 'atlas://electrum/gui/kivy/theming/light/create_act_text_active'
       +    background_active: f'atlas://{KIVY_GUI_PATH}/theming/light/create_act_text_active'
       +    background_normal: f'atlas://{KIVY_GUI_PATH}/theming/light/create_act_text_active'
            size_hint_y: None
            height: '48sp'
        
       t@@ -93,7 +94,7 @@ Builder.load_string('''
                        size_hint: 1, None
                        height: self.texture_size[1] if self.opacity else 0
                        font_size: '33sp'
       -                font_name: 'electrum/gui/kivy/data/fonts/tron/Tr2n.ttf'
       +                font_name: f'{KIVY_GUI_PATH}/data/fonts/tron/Tr2n.ttf'
                GridLayout:
                    cols: 1
                    id: crcontent
       t@@ -314,7 +315,7 @@ Builder.load_string('''
            font_size: '18dp'
            text_size: self.width - dp(24), self.height - dp(12)
            color: .1, .1, .1, 1
       -    background_normal: 'atlas://electrum/gui/kivy/theming/light/white_bg_round_top'
       +    background_normal: f'atlas://{KIVY_GUI_PATH}/theming/light/white_bg_round_top'
            background_down: self.background_normal
            size_hint_y: None
        
       t@@ -343,7 +344,7 @@ Builder.load_string('''
                height: '30dp'
                width: '30dp'
                size_hint: 1, None
       -        icon: 'atlas://electrum/gui/kivy/theming/light/gear'
       +        icon: f'atlas://{KIVY_GUI_PATH}/theming/light/gear'
                on_release:
                    root.options_dialog() if root.options_dialog else None
        
       t@@ -479,7 +480,7 @@ Builder.load_string('''
                    id: scan
                    height: '48sp'
                    on_release: root.scan_xpub()
       -            icon: 'atlas://electrum/gui/kivy/theming/light/camera'
       +            icon: f'atlas://{KIVY_GUI_PATH}/theming/light/camera'
                    size_hint: 1, None
                WizardButton:
                    text: _('Paste')
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/invoice_dialog.py b/electrum/gui/kivy/uix/dialogs/invoice_dialog.py
       t@@ -15,6 +15,8 @@ if TYPE_CHECKING:
        
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
       +
        <InvoiceDialog@Popup>
            id: popup
            amount_str: ''
       t@@ -66,12 +68,12 @@ Builder.load_string('''
                            text: _('Delete')
                            on_release: root.delete_dialog()
                        IconButton:
       -                    icon: 'atlas://electrum/gui/kivy/theming/light/copy'
       +                    icon: f'atlas://{KIVY_GUI_PATH}/theming/light/copy'
                            size_hint: 0.5, None
                            height: '48dp'
                            on_release: root.copy_to_clipboard()
                        IconButton:
       -                    icon: 'atlas://electrum/gui/kivy/theming/light/share'
       +                    icon: f'atlas://{KIVY_GUI_PATH}/theming/light/share'
                            size_hint: 0.5, None
                            height: '48dp'
                            on_release: root.do_share()
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/label_dialog.py b/electrum/gui/kivy/uix/dialogs/label_dialog.py
       t@@ -4,6 +4,8 @@ from kivy.properties import ObjectProperty
        from kivy.lang import Builder
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
       +
        <LabelDialog@Popup>
            id: popup
            title: ''
       t@@ -21,8 +23,8 @@ Builder.load_string('''
                    pos_hint: {'center_y':.5}
                    text:''
                    multiline: False
       -            background_normal: 'atlas://electrum/gui/kivy/theming/light/tab_btn'
       -            background_active: 'atlas://electrum/gui/kivy/theming/light/textinput_active'
       +            background_normal: f'atlas://{KIVY_GUI_PATH}/theming/light/tab_btn'
       +            background_active: f'atlas://{KIVY_GUI_PATH}/theming/light/textinput_active'
                    hint_text_color: self.foreground_color
                    foreground_color: 1, 1, 1, 1
                    font_size: '16dp'
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py b/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py
       t@@ -18,6 +18,8 @@ if TYPE_CHECKING:
        
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
       +
        <LightningOpenChannelDialog@Popup>
            id: s
            name: 'lightning_open_channel'
       t@@ -38,7 +40,7 @@ Builder.load_string('''
                        size_hint: 1, None
                        height: blue_bottom.item_height
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/globe'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/globe'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -51,7 +53,7 @@ Builder.load_string('''
                        size_hint: 1, None
                        height: blue_bottom.item_height
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/calculator'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/calculator'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -64,12 +66,12 @@ Builder.load_string('''
                    size_hint: 1, None
                    height: '48dp'
                    IconButton:
       -                icon: 'atlas://electrum/gui/kivy/theming/light/copy'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/copy'
                        size_hint: 0.5, None
                        height: '48dp'
                        on_release: s.do_paste()
                    IconButton:
       -                icon: 'atlas://electrum/gui/kivy/theming/light/camera'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/camera'
                        size_hint: 0.5, None
                        height: '48dp'
                        on_release: app.scan_qr(on_complete=s.on_qr)
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/password_dialog.py b/electrum/gui/kivy/uix/dialogs/password_dialog.py
       t@@ -21,6 +21,7 @@ if TYPE_CHECKING:
            from electrum.storage import WalletStorage
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        
        <PasswordDialog@Popup>
            id: popup
       t@@ -47,7 +48,7 @@ Builder.load_string('''
                    IconButton:
                        size_hint: 0.15, None
                        height: '40dp'
       -                icon: 'atlas://electrum/gui/kivy/theming/light/btn_create_account'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/btn_create_account'
                        on_release: root.select_file()
                        disabled: root.is_change
                        opacity: 0 if root.is_change else 1
       t@@ -81,7 +82,7 @@ Builder.load_string('''
                    IconButton:
                        height: '40dp'
                        size_hint: 0.15, None
       -                icon: 'atlas://electrum/gui/kivy/theming/light/eye1'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/eye1'
                        icon_size: '40dp'
                        on_release:
                            textinput_generic_password.password = False if textinput_generic_password.password else True
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/qr_dialog.py b/electrum/gui/kivy/uix/dialogs/qr_dialog.py
       t@@ -13,6 +13,8 @@ if TYPE_CHECKING:
        
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
       +
        <QRDialog@Popup>
            id: popup
            title: ''
       t@@ -47,7 +49,7 @@ Builder.load_string('''
                            on_release:
                                root.copy_to_clipboard()
                        IconButton:
       -                    icon: 'atlas://electrum/gui/kivy/theming/light/share'
       +                    icon: f'atlas://{KIVY_GUI_PATH}/theming/light/share'
                            size_hint: 0.6, None
                            height: '48dp'
                            on_release: root.do_share()
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/qr_scanner.py b/electrum/gui/kivy/uix/dialogs/qr_scanner.py
       t@@ -21,6 +21,8 @@ class QrScannerDialog(Factory.AnimatedPopup):
        
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
       +
        <QrScannerDialog>
            title:
                _(\
       t@@ -33,7 +35,7 @@ Builder.load_string('''
            #separator_color: .89, .89, .89, 1
            #separator_height: '1.2dp'
            #title_color: .437, .437, .437, 1
       -    #background: 'atlas://electrum/gui/kivy/theming/light/dialog'
       +    #background: f'atlas://{KIVY_GUI_PATH}/theming/light/dialog'
            on_activate:
                qrscr.start()
                qrscr.size = self.size
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/request_dialog.py b/electrum/gui/kivy/uix/dialogs/request_dialog.py
       t@@ -15,6 +15,8 @@ if TYPE_CHECKING:
        
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
       +
        <RequestDialog@Popup>
            id: popup
            amount_str: ''
       t@@ -66,12 +68,12 @@ Builder.load_string('''
                            text: _('Delete')
                            on_release: root.delete_dialog()
                        IconButton:
       -                    icon: 'atlas://electrum/gui/kivy/theming/light/copy'
       +                    icon: f'atlas://{KIVY_GUI_PATH}/theming/light/copy'
                            size_hint: 0.5, None
                            height: '48dp'
                            on_release: root.copy_to_clipboard()
                        IconButton:
       -                    icon: 'atlas://electrum/gui/kivy/theming/light/share'
       +                    icon: f'atlas://{KIVY_GUI_PATH}/theming/light/share'
                            size_hint: 0.5, None
                            height: '48dp'
                            on_release: root.do_share()
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/settings.py b/electrum/gui/kivy/uix/dialogs/settings.py
       t@@ -9,6 +9,8 @@ from electrum.gui.kivy.i18n import _
        from electrum.plugin import run_hook
        from electrum import coinchooser
        
       +from electrum.gui.kivy import KIVY_GUI_PATH
       +
        from .choice_dialog import ChoiceDialog
        
        Builder.load_string('''
       t@@ -193,7 +195,7 @@ class SettingsDialog(Factory.Popup):
                        net_params = net_params._replace(proxy=proxy)
                        network.run_from_another_thread(network.set_parameters(net_params))
                        item.status = self.proxy_status()
       -            popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/proxy.kv')
       +            popup = Builder.load_file(KIVY_GUI_PATH + '/uix/ui_screens/proxy.kv')
                    popup.ids.mode.text = proxy.get('mode') if proxy else 'None'
                    popup.ids.host.text = proxy.get('host') if proxy else ''
                    popup.ids.port.text = proxy.get('port') if proxy else ''
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/tx_dialog.py b/electrum/gui/kivy/uix/dialogs/tx_dialog.py
       t@@ -25,6 +25,7 @@ if TYPE_CHECKING:
        
        
        Builder.load_string('''
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        
        <TxDialog>
            id: popup
       t@@ -102,7 +103,7 @@ Builder.load_string('''
                    IconButton:
                        size_hint: 0.5, None
                        height: '48dp'
       -                icon: 'atlas://electrum/gui/kivy/theming/light/qrcode'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/qrcode'
                        on_release: root.show_qr()
                    Button:
                        size_hint: 0.5, None
   DIR diff --git a/electrum/gui/kivy/uix/screens.py b/electrum/gui/kivy/uix/screens.py
       t@@ -40,6 +40,7 @@ from electrum.logging import Logger
        from .dialogs.question import Question
        from .dialogs.lightning_open_channel import LightningOpenChannelDialog
        
       +from electrum.gui.kivy import KIVY_GUI_PATH
        from electrum.gui.kivy.i18n import _
        
        if TYPE_CHECKING:
       t@@ -96,9 +97,9 @@ TX_ICONS = [
        ]
        
        
       -Builder.load_file('electrum/gui/kivy/uix/ui_screens/history.kv')
       -Builder.load_file('electrum/gui/kivy/uix/ui_screens/send.kv')
       -Builder.load_file('electrum/gui/kivy/uix/ui_screens/receive.kv')
       +Builder.load_file(KIVY_GUI_PATH + '/uix/ui_screens/history.kv')
       +Builder.load_file(KIVY_GUI_PATH + '/uix/ui_screens/send.kv')
       +Builder.load_file(KIVY_GUI_PATH + '/uix/ui_screens/receive.kv')
        
        
        class HistoryScreen(CScreen):
       t@@ -132,7 +133,7 @@ class HistoryScreen(CScreen):
                if is_lightning:
                    status = 0
                    status_str = 'unconfirmed' if timestamp is None else format_time(int(timestamp))
       -            icon = "atlas://electrum/gui/kivy/theming/light/lightning"
       +            icon = f'atlas://{KIVY_GUI_PATH}/theming/light/lightning'
                    message = tx_item['label']
                    fee_msat = tx_item['fee_msat']
                    fee = int(fee_msat/1000) if fee_msat else None
       t@@ -144,7 +145,7 @@ class HistoryScreen(CScreen):
                                                conf=tx_item['confirmations'],
                                                timestamp=tx_item['timestamp'])
                    status, status_str = self.app.wallet.get_tx_status(tx_hash, tx_mined_info)
       -            icon = "atlas://electrum/gui/kivy/theming/light/" + TX_ICONS[status]
       +            icon = f'atlas://{KIVY_GUI_PATH}/theming/light/' + TX_ICONS[status]
                    message = tx_item['label'] or tx_hash
                    fee = tx_item['fee_sat']
                    fee_text = '' if fee is None else 'fee: %d sat'%fee
   DIR diff --git a/electrum/gui/kivy/uix/ui_screens/history.kv b/electrum/gui/kivy/uix/ui_screens/history.kv
       t@@ -1,6 +1,7 @@
        #:import _ electrum.gui.kivy.i18n._
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        #:import Factory kivy.factory.Factory
       -#:set font_light 'electrum/gui/kivy/data/fonts/Roboto-Condensed.ttf'
       +#:set font_light f'{KIVY_GUI_PATH}/data/fonts/Roboto-Condensed.ttf'
        #:set btc_symbol chr(171)
        #:set mbtc_symbol chr(187)
        
       t@@ -15,7 +16,7 @@
        
        
        <HistoryItem@CardItem>
       -    icon: 'atlas://electrum/gui/kivy/theming/light/important'
       +    icon: f'atlas://{KIVY_GUI_PATH}/theming/light/important'
            message: ''
            fee_text: ''
            is_mine: True
   DIR diff --git a/electrum/gui/kivy/uix/ui_screens/receive.kv b/electrum/gui/kivy/uix/ui_screens/receive.kv
       t@@ -1,11 +1,12 @@
        #:import _ electrum.gui.kivy.i18n._
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        #:import pr_color electrum.invoices.pr_color
        #:import PR_UNKNOWN electrum.invoices.PR_UNKNOWN
        #:import Factory kivy.factory.Factory
        #:import Decimal decimal.Decimal
        #:set btc_symbol chr(171)
        #:set mbtc_symbol chr(187)
       -#:set font_light 'electrum/gui/kivy/data/fonts/Roboto-Condensed.ttf'
       +#:set font_light f'{KIVY_GUI_PATH}/data/fonts/Roboto-Condensed.ttf'
        
        
        <RequestLabel@Label>
       t@@ -85,7 +86,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/lightning' if root.is_lightning else 'atlas://electrum/gui/kivy/theming/light/globe'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/lightning' if root.is_lightning else f'atlas://{KIVY_GUI_PATH}/theming/light/globe'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -102,7 +103,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/calculator'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/calculator'
                            opacity: 0.7
                            size_hint: None, None
                            size: '22dp', '22dp'
       t@@ -122,7 +123,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/pen'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/pen'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -134,12 +135,12 @@
                    size_hint: 1, None
                    height: '48dp'
                    IconButton:
       -                icon: 'atlas://electrum/gui/kivy/theming/light/delete'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/delete'
                        size_hint: 0.5, None
                        height: '48dp'
                        on_release: Clock.schedule_once(lambda dt: s.clear_requests_dialog())
                    IconButton:
       -                icon: 'atlas://electrum/gui/kivy/theming/light/clock1'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/clock1'
                        size_hint: 0.5, None
                        height: '48dp'
                        on_release: Clock.schedule_once(lambda dt: s.expiration_dialog(s))
   DIR diff --git a/electrum/gui/kivy/uix/ui_screens/send.kv b/electrum/gui/kivy/uix/ui_screens/send.kv
       t@@ -1,11 +1,12 @@
        #:import _ electrum.gui.kivy.i18n._
       +#:import KIVY_GUI_PATH electrum.gui.kivy.KIVY_GUI_PATH
        #:import pr_color electrum.invoices.pr_color
        #:import PR_UNKNOWN electrum.invoices.PR_UNKNOWN
        #:import Factory kivy.factory.Factory
        #:import Decimal decimal.Decimal
        #:set btc_symbol chr(171)
        #:set mbtc_symbol chr(187)
       -#:set font_light 'electrum/gui/kivy/data/fonts/Roboto-Condensed.ttf'
       +#:set font_light f'{KIVY_GUI_PATH}/data/fonts/Roboto-Condensed.ttf'
        
        <PaymentLabel@Label>
            #color: .305, .309, .309, 1
       t@@ -85,7 +86,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/lightning' if root.is_lightning else 'atlas://electrum/gui/kivy/theming/light/globe'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/lightning' if root.is_lightning else f'atlas://{KIVY_GUI_PATH}/theming/light/globe'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -102,7 +103,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/calculator'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/calculator'
                            opacity: 0.7
                            size_hint: None, None
                            size: '22dp', '22dp'
       t@@ -121,7 +122,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/pen'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/pen'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -137,7 +138,7 @@
                        height: blue_bottom.item_height
                        spacing: '5dp'
                        Image:
       -                    source: 'atlas://electrum/gui/kivy/theming/light/star_big_inactive'
       +                    source: f'atlas://{KIVY_GUI_PATH}/theming/light/star_big_inactive'
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       t@@ -150,20 +151,20 @@
                    size_hint: 1, None
                    height: '48dp'
                    IconButton:
       -                icon: 'atlas://electrum/gui/kivy/theming/light/delete'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/delete'
                        size_hint: 0.5, 1
                        on_release: Clock.schedule_once(lambda dt: s.clear_invoices_dialog())
                    IconButton:
                        size_hint: 0.5, 1
                        on_release: s.do_save()
       -                icon: 'atlas://electrum/gui/kivy/theming/light/save'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/save'
                    IconButton:
                        size_hint: 0.5, 1
                        on_release: s.do_clear()
       -                icon: 'atlas://electrum/gui/kivy/theming/light/closebutton'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/closebutton'
                    IconButton:
                        size_hint: 0.5, 1
       -                icon: 'atlas://electrum/gui/kivy/theming/light/copy'
       +                icon: f'atlas://{KIVY_GUI_PATH}/theming/light/copy'
                        on_release: s.do_paste()
                    Button:
                        id: qr
   DIR diff --git a/run_electrum b/run_electrum
       t@@ -49,9 +49,6 @@ if is_local:  # running from source
            # developers should probably see all deprecation warnings.
            warnings.simplefilter('default', DeprecationWarning)
        
       -# move this back to gui/kivy/__init.py once plugins are moved
       -os.environ['KIVY_DATA_DIR'] = os.path.abspath(os.path.dirname(__file__)) + '/electrum/gui/kivy/data/'
       -
        if is_local or is_android:
            sys.path.insert(0, os.path.join(script_dir, 'packages'))