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
- 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)
- TTF parser
- HTTP client
- SDL2 with
ttf
andimage
- 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)
- XDG Applications
- EWMH based window switching (supports: i3, awesome, xfce, etc.)
tmux
sessionspass
secrets- TODO: Notion Notes
- TODO: Browser tabs (this one is a challenge)
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
- 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
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