Skip to content

jqcorreia/tudo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TUDO

TUDO Univeral Desktop Operator
Transforming User-Device Operation
Everything (in Portuguese)
Take a pick at the meaning.

Desktop Omnibar. Type and launch stuff. Pretty simple.
Semi-serious learning project.
Meant to be used as a wristwatch. You want it there but you don't need to look at it all the time.
Maybe just replace the concept of a top/bottom bar with the clock and stuff

Currently looks like this: Alt text

Nice-to-haves and objectives

  • As low latency as possible both in launching and in using
  • Fast indexing
  • Tray icons, interactable
  • TOML configuration (with sane defaults)
  • Extendable in Lua
  • Minimal list of dependencies, i.e no UI toolkit (Gtk, Qt)

Thing I will not implement

  • TTF parser
  • HTTP client

Dependencies

  • SDL2 with ttf and image

Features

  • Application launcher (XDG only)
  • XCB and EWMH based window switching (supports: i2, awesome, xfce, etc.)
  • pass secrets integration
  • (Really) Minimal UI lib with a couple of components and a layout manager
  • Primitive Lua sources support (no function exporting yet)
  • Texture cache (fonts, icons and generic image files)
  • Asynchronous load of item sources in order to reduce startup time (no async/await, simple thread spawn)

Sources

  • XDG Applications
  • EWMH based window switching (supports: i3, awesome, xfce, etc.)
  • tmux sessions
  • pass secrets
  • TODO: Notion Notes
  • TODO: Browser tabs (this one is a challenge)

Keybindings

Ctrl + P - Move selection up
Ctrl + N - Move selection down
Ctrl + Enter - Do selected action

F1 - Show frames per second
F2 - Toggle 60fps framelock
F3 - Debug/Test screen, mostly gibberish

Rolling Dev Notes

  • Solve the mistery of proper font atlas, right now using direct render from SDL2 ttf. It's kerning...
  • action tags and search for action (:run, :window, :secret, etc)
  • Icon files may not exist even if referenced by XDG icon files format
  • Various font sizes and faces. This was hard....
  • Primitive animations
  • tmux list source items, open default terminal in a given session
  • Async load sources
  • Implement drawing 'toolkit' context containing Sdl, Canvas, TextureCreator, etc
  • Show that the sources are still loading (really simple, but working)
  • Prevent from starting multiple instances
  • Create .config folder, need to check if this is cross platform
  • Lua based configuration (very early but promising)
  • Migrate to mlua, due to serde support
  • Support for multiple screens
  • Layout builder and simplified component access
  • Component get_state and set_state
  • Use a new component spinner to sinalize sources loading
  • Extend canvas drawing functions implementing more complex shapes (rounded rect, circle, quadrants, ...)
  • Mouse coords translation to local component coords and list item click
  • Support font family by name, using fc-list for getting installed fonts and filenames
  • Proper XDG standard support for XDG_DATA_DIRS regarding applications and icons
  • Implement component focus.
  • UI reset after soft-close.
  • Implement workspaces! Good enoug progress for now.
  • Smoooooth cursor movement and smoooooth list scrolling with key navigation working.
  • Implement tray! DBus is a mess, but a useful mess... Icon events and refresh is done
  • Standardize button state. Only field is active.
  • Implement textinput cursor movement and Unicode support.
  • Implement by_name_typed in order to get the specific implementation of a given UIComponent
  • Layout container hide/show
  • Calculator command
  • ! Replace SDL2_image with something more light dependency-wise
  • ! Make LayoutManager implement UIComponent so it can be called directly to update and draw
  • Get system default font and use it as a best effort font in case requested font doesn't exist
  • Prompt window available to actions
  • More prettier (this will always be here)
  • Fuzzy search (fzf dependency?)
  • Notion integration for notes. Depends on a prompt action.
  • Investigate async/await for async source loading
  • Dashboard-like widgets for things like metrics
  • Submenus for some actions

! - means ongoing

Wayland support

tudo will try and detect the display manager being used. It uses XDG_SESSION_TYPE for this and sets SDL_VIDEODRIVER to wayland If it doesn't work or you're having issues just add SDL_VIDEODRIVER=wayland to your environment variables

About

Fast, extendable and portable omnibar

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages