Documentation · Features · Looks . Get Started · Report a bug
The inLimbo project aims to be a new upcoming TUI music player for UNIX based systems that gives music lovers a clean and efficient environment to browse, play and interact with your favourite offline music.
There are a dozen of great music players out there that do a really good job of making my music experience top notch, but nothing was ever perfect. So I tried making something that in my opinion comes closest to my ideal TUI music player.
Why would you want to stay in Limbo?
Sometimes it feels good to be stuck in a weird place in your life, and it feels even better to be stuck in Limbo with music :)
config.toml
file located in $HOME/.config/inLimbo/config.toml
SIGSEGV
, SIGABRT
./tests/
), and in the future, inLimbo may have features to embed your desired metadata to an audio file. Dependency | Ubuntu | Fedora | Arch Linux |
---|---|---|---|
TagLib | libtag1-dev | taglib-devel | taglib |
Gio | libgio-2.0-dev | glib2-devel | glib2 |
GLib | libglib-2.0-dev | glib2-devel | glib2 |
pkg-config | pkg-config | pkgconf | pkgconf |
ImageMagick | imagemagick | ImageMagick | imagemagick |
X11 | libx11-dev | libX11-devel | libx11 |
PNG | libpng-dev | libpng-devel | libpng |
cereal | libcereal-dev | libcereal-devel | cereal |
FTXUI is fetched from GitHub here itself during building so NO need to install it separately.
The goal of this project is just to find peace and solitude for me as I try to create something I wanted for a long time
Here are a few novelties that may or may not have been added yet:
You will need CMake and Make (GNU Make for BSD) for this (and git obvi)
A simple command using makefile should build everything you want:
For a GLOBAL BUILD:
Check out BUILD.md for more options to build targets
To get started with inLimbo, run the following command:
To get help regarding the command-line arguments available with inLimbo, you can use the --help
option:
If you update the song directory in config.toml
, inLimbo does not automatically remove the static serialized lib.bin
file, which is used to load the song map.
To ensure that inLimbo loads the directory dynamically, use the following command:
You can also merge the dynamic load with other arguments like so:
Note that this will result in slower song map times as the song map is generated dynamically on each run.
--help
Description: Display help information about available arguments for inLimbo.--version
Description: Display the version number of inLimbo.--clear-cache
Description: Clear cached data, which includes the song map and other temporary data stored by the application.--show-config-file
Description: Display the path to the configuration file used by inLimbo.--show-log-dir
Description: Show the directory path where logs are stored for inLimbo.--show-dbus-name
Description: Show the DBus service name used by inLimbo.--update-cache-run
Description: Update the cache file and run the application. This will make inLimbo load the directory dynamically every time (note that this will result in slower song map times).--print-song-tree
Description: Print the song map parsed from the directory. This shows the structure of the song tree and how songs are organized.--print-artists-all
Description: Print all parsed artists from the song map. This will list all artists found in the directory and their corresponding songs.--print-songs-by-artist
Description: Print all the songs of a given artist. This argument requires you to specify the artist’s name, and it will list all songs by that artist.--print-songs-by-genre-all
Description: Print all parsed genres and their song mappings. This will show all the genres available in the song map and list songs under each genre.--print-song-info
Description: Print every parsed information (even default info) regarding a song (Arguments: Can take SONG NAME or FILE PATH)less
/bat
that allows for neat terminal output traversal (will allow for you to view the entire song tree parsing) There will be more command-line arguments in the future...
There is quite a lot to configure in the inLimbo project. A basic config file will be setup in your $HOME/.config/inLimbo/
directory while using CMake to build
COLORS FORMAT
-> Hexadecimal #RRGGBB
format
-> TrueColors (Solid predefined colors):
inLimbo
DEFAULT KEYBINDS
Keybind | Action |
---|---|
q | Quit the application |
Tab | Toggle focus between the "Artists" and "Songs" panes |
? | Show or hide the help menu |
/ | Open the search menu |
Keybind | Action |
---|---|
j | Scroll down (move selection down in the list) |
k | Scroll up (move selection up in the list) |
0 | Move to the next search result (if search is active) |
9 | Move to the previous search result (if search is active) |
Keybind | Action |
---|---|
Space | Toggle play/pause for the currently playing song |
Enter | Play the currently selected song |
n | Play the next song in the queue |
p | Play the previous song in the queue |
r | Replay the current song |
m | Toggle mute on/off |
Keybind | Action |
---|---|
h | Seek backward by 5 seconds |
l | Seek forward by 5 seconds |
= | Increase volume |
- | Decrease volume |
w | Toggle between available audio devices |
Keybind | Action |
---|---|
a | Add the currently selected song to the queue |
e | Add all songs of the selected artist to the queue |
b | Play this song next (insert it into the queue immediately after the current song) |
d | Remove the currently selected song from the queue |
3 | View the current song queue |
Keybind | Action |
---|---|
1 | Go to the main UI screen |
2 or L | View lyrics of the currently playing song |
i | View detailed information about the current song |
Keybind | Action |
---|---|
true/false (UI setting) | Show or hide bitrate information in the status bar |
inLimbo is in active development and is prone to having A LOT of issues
-> Makefile also allows for building and running of a debug build.
To try out DEBUG BUILD to find bugs/issues:
AddressSanitizer
(ASan):Thread Sanitizer
(TSan):The DEBUG BUILD will account for the following issues:
-> Threads
-> Address Sanitation (ASan)
-> Undefined Behaviour Sanitation (UBSan)
inLimbo reads a directory and attempts to parse each inode for its metadata using TagLib, and accordingly creates a song map datastructure that is utilized to efficiently traverse the required artist, album, song etc.
To know more about inLimbo Project's logical flow on creating a song map, visit SONGMAP
The inLimbo project is aiming to be more aware of how bad its codebase is, hence I am setting up unit tests for most if not all functions/classes that should:
The testing is done using GTest, read TESTS.md to understand more on how tests are configured and built
There is a primitive Doxygen documention set up for the inLimbo project, that should explain a lot more about the thought process and idea behind every aspect of the codebase.
Man page is also under progress
To generate and view doxygen documentation locally:
It is much easier to use the script make_docs.sh
Or you could just visit inLimbo Website
LOGO:
DISCLAIMER: This is not an original logo nor was it commisioned by me
It is a basic stock image found online. I got it from here
TOML PARSER:
To parse the config.toml is thanks to TOML++
AUDIO PLAYBACK & API:
Audio playback and capture is thanks to miniaudio
INSPIRATIONS:
This music player's UI flow is heavily inspired by CMUS, it seemed (to me atleast) the fastest and most responsive and logical UI/UX design of a TUI that has a great balance between looking good and feeling smooth
inLimbo is Free and Open Source Software Licensed under GNU GPL v3