gitextract_0tdm8aod/ ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── build.yml │ ├── main.yml │ ├── manual-all.yml │ ├── manual-one.yml │ └── release.yml ├── .gitignore ├── .idea/ │ ├── .gitignore │ ├── dictionaries/ │ │ └── project.xml │ ├── flowkeeper-python.iml │ ├── inspectionProfiles/ │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── vcs.xml │ └── watcherTasks.xml ├── LICENSE ├── README.md ├── TODO.md ├── doc/ │ ├── actions.md │ ├── build-alpine.md │ ├── data-model.md │ ├── design.md │ ├── events.md │ ├── pipeline.md │ ├── release.md │ └── strategies.md ├── requirements-test.txt ├── requirements.txt ├── res/ │ ├── CHANGELOG.txt │ ├── CREDITS.txt │ ├── LICENSE.txt │ ├── about.ui │ ├── core.ui │ ├── icons/ │ │ ├── dark/ │ │ │ └── index.theme │ │ ├── light/ │ │ │ └── index.theme │ │ └── mixed/ │ │ └── index.theme │ ├── sound/ │ │ └── Madelene.m4a │ ├── stats.ui │ ├── style-beach.json │ ├── style-dark.json │ ├── style-desert.json │ ├── style-highlight.json │ ├── style-light.json │ ├── style-lime.json │ ├── style-mixed.json │ ├── style-motel.json │ ├── style-purple.json │ ├── style-resort.json │ ├── style-template.qss │ ├── style-terra.json │ └── summary.ui ├── run-tests.sh ├── run.sh ├── scripts/ │ ├── README.md │ ├── bsd/ │ │ └── README.md │ ├── common/ │ │ ├── generate-resources.sh │ │ ├── get-version.sh │ │ └── pyinstaller/ │ │ ├── entitlements.plist │ │ ├── normal.spec │ │ └── portable.spec │ ├── linux/ │ │ ├── appimage/ │ │ │ ├── install-appimage.sh │ │ │ └── package-appimage.sh │ │ ├── common/ │ │ │ ├── flowkeeper │ │ │ ├── org.flowkeeper.Flowkeeper.desktop │ │ │ └── org.flowkeeper.Flowkeeper.metainfo.xml │ │ ├── debian/ │ │ │ ├── debian-control │ │ │ ├── debian-control-min │ │ │ ├── package-deb-min.sh │ │ │ └── package-deb.sh │ │ ├── flatpak/ │ │ │ └── README.md │ │ ├── obs/ │ │ │ ├── README.md │ │ │ └── obs.spec │ │ ├── package-nuitka.sh │ │ └── rpm/ │ │ └── package-rpm-min.sh │ ├── macos/ │ │ ├── create-dmg.sh │ │ ├── create-icons.sh │ │ ├── install-certificates.sh │ │ ├── install-create-dmg.sh │ │ ├── notarize-dmg.sh │ │ ├── package-macos-pkg.sh │ │ └── package-nuitka.sh │ └── windows/ │ ├── generate-resources-windows.sh │ ├── install-innosetup.sh │ ├── package-installer.sh │ └── windows-installer.iss ├── src/ │ └── fk/ │ ├── __init__.py │ ├── core/ │ │ ├── __init__.py │ │ ├── abstract_cryptograph.py │ │ ├── abstract_data_container.py │ │ ├── abstract_data_item.py │ │ ├── abstract_event_emitter.py │ │ ├── abstract_event_source.py │ │ ├── abstract_filesystem_watcher.py │ │ ├── abstract_serializer.py │ │ ├── abstract_settings.py │ │ ├── abstract_strategy.py │ │ ├── abstract_timer.py │ │ ├── abstract_timer_display.py │ │ ├── backlog.py │ │ ├── backlog_strategies.py │ │ ├── ephemeral_event_source.py │ │ ├── event_source_factory.py │ │ ├── event_source_holder.py │ │ ├── events.py │ │ ├── fernet_cryptograph.py │ │ ├── file_event_source.py │ │ ├── import_export.py │ │ ├── integration_executor.py │ │ ├── interruption.py │ │ ├── mock_settings.py │ │ ├── no_cryptograph.py │ │ ├── pomodoro.py │ │ ├── pomodoro_strategies.py │ │ ├── sandbox.py │ │ ├── simple_serializer.py │ │ ├── strategy_factory.py │ │ ├── tag.py │ │ ├── tags.py │ │ ├── tenant.py │ │ ├── timer.py │ │ ├── timer_data.py │ │ ├── timer_strategies.py │ │ ├── user.py │ │ ├── user_strategies.py │ │ ├── workitem.py │ │ └── workitem_strategies.py │ ├── desktop/ │ │ ├── __init__.py │ │ ├── application.py │ │ ├── config_wizard.py │ │ ├── desktop.py │ │ ├── desktop_strategies.py │ │ ├── export_wizard.py │ │ ├── import_wizard.py │ │ ├── interruption_dialog.py │ │ ├── settings.py │ │ ├── stats_window.py │ │ ├── tutorial.py │ │ └── work_summary_window.py │ ├── e2e/ │ │ ├── __init__.py │ │ ├── abstract_e2e_test.py │ │ ├── all-tests.json │ │ ├── backlog_e2e.py │ │ ├── screenshot.py │ │ └── screenshots_e2e.py │ ├── qt/ │ │ ├── __init__.py │ │ ├── about_window.py │ │ ├── abstract_drop_model.py │ │ ├── abstract_item_delegate.py │ │ ├── abstract_tableview.py │ │ ├── actions.py │ │ ├── app_version.py │ │ ├── audio_player.py │ │ ├── backlog_model.py │ │ ├── backlog_tableview.py │ │ ├── backlog_widget.py │ │ ├── configurable_toolbar.py │ │ ├── connection_widget.py │ │ ├── flow_layout.py │ │ ├── focus_widget.py │ │ ├── heartbeat.py │ │ ├── info_overlay.py │ │ ├── oauth.py │ │ ├── pomodoro_delegate.py │ │ ├── progress_widget.py │ │ ├── qt_filesystem_watcher.py │ │ ├── qt_invoker.py │ │ ├── qt_settings.py │ │ ├── qt_timer.py │ │ ├── render/ │ │ │ ├── __init__.py │ │ │ ├── abstract_timer_renderer.py │ │ │ ├── classic_timer_renderer.py │ │ │ └── minimal_timer_renderer.py │ │ ├── resize_event_filter.py │ │ ├── search_completer.py │ │ ├── tags_widget.py │ │ ├── theme_change_event_filter.py │ │ ├── threaded_event_source.py │ │ ├── timer_widget.py │ │ ├── tray_icon.py │ │ ├── user_model.py │ │ ├── user_tableview.py │ │ ├── websocket_event_source.py │ │ ├── workitem_model.py │ │ ├── workitem_state_delegate.py │ │ ├── workitem_tableview.py │ │ ├── workitem_text_delegate.py │ │ └── workitem_widget.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── abstract_test_case.py │ │ ├── data_generator.py │ │ ├── fixtures/ │ │ │ ├── random-dump.txt │ │ │ ├── random.txt │ │ │ └── test-tags.txt │ │ ├── test_backlogs.py │ │ ├── test_events.py │ │ ├── test_file_event_source.py │ │ ├── test_import_export.py │ │ ├── test_pomodoros.py │ │ ├── test_settings.py │ │ ├── test_tags.py │ │ ├── test_users.py │ │ ├── test_utils.py │ │ └── test_workitems.py │ └── tools/ │ ├── __init__.py │ ├── cli.py │ ├── minimal_actions.py │ ├── minimal_audio.py │ ├── minimal_auth.py │ ├── minimal_backlogs.py │ ├── minimal_common.py │ ├── minimal_focus.py │ ├── minimal_settings.py │ ├── minimal_timer_widget.py │ ├── minimal_tray.py │ ├── minimal_tutorial.py │ ├── minimal_update.py │ ├── minimal_users.py │ └── minimal_workitems.py └── ws-tests.md