This is a continuation of my on-going development blog on the solile desktop. I would highly recommend checking out my previous post to get some context if you have not already.
Now, into the nitty-gritty…
Dock
I chose the dock as the first development target as it is theoretically easy to implement the basics of app launching and desktop file listings. The basic framework of the dock has been written using iced for the UI and iced_layershell for bindings to wlr-layer-shell-unstable-v1. This allows me to write the dock as if it were a normal iced app and then just stick it to the side of the screen. I’ve been following the development of iced_layershell for quite a while now and it seems to be pretty actively developed and is pretty stable for basic usecases. libcosmic is becoming less enticing as I see what I can implement with raw iced, even though I might end up using bits and pieces of it for underlying stuff like theming or accessibility. Currently, I am still working on the actual layout and icons for the dock, but I expect that by next week I should have a working PoC to post images and publish the code for.
One thing I have been thinking a lot about is how to handle the app grid. I want it to be Unity-styled in that when you click the logo button or swipe from the side of the screen it opens smoothly. I could either do this by opening another window and displaying it with an animation, or I could write another application that communicates with the dock to know when to display. I am going to play with both to see which is more resource efficient, but I am leaning towards multi-window, just to share code without having to write a tiny library that implements the dock.
Compositor
For the compositor, I have finally decided upon a language! It is neither Rust nor Haskell, but Hare! Hare was chosen for a variety of reasons. First, it is C-like, meaning it feels very comfortable to write in for somebody like me who likes the C-like style, but dislikes C itself. Second, it is very small and the code is concise and readable. Since I want this project to be approachable to as many contributors as possible, readable code is extremely important. (Even though Hare is new and not many people know it, it is pretty easy to pick up on if you know another systems language.) Third, Hare is efficent, which is very important for something as critical as a compositor. Finally, Hare has great C interop, so I can use something like wlroots without having to write full bindings. I probably will write some in the long run, but for a quick PoC, C interop is really nice.
Now, some of you may be sad that I am not writing a “full Rust” desktop, but I feel like the language matters less than the implementation. Yes, Hare is less safe than Rust, but it also gives more freedom and just feels nicer to write in. For a hobby project like this where I want to have fun, having a break from Rust-land to use another language will help prevent me from burning out and make the process more enjoyable.
As I touched on previously, I am also switching from using Smithay to using wlroots. This isn’t a philosophical choice, but just one brought about by the switch from Rust to Hare. Features of the compositor will not change since the two are pretty much analogous in protocol implementations, just they will be in Hare instead of Rust.
Artistic Choices
Now onto the non-programming bits. I have been hard at work researching user-friendly design rules and how I would like to show them in solile. The key to this is a consistent color scheme and clean font choice.
For the font I wanted to use a classic sans-serif font so as to make the design as clean as possible. The choices were either Noto Sans or some other geometric font. In the end, I went with Figtree by Erik Kennedy since it fits all my requirements and has a very clean and professional look to it. It is also licensed OFL-1.1, so there should be no licensing issues as long as I don’t lose it and start selling the font or something. For alphabets that are not supported by Figtree, Noto Sans will still be used.
I have not finalized the whole color pallet yet, but I am thinking of using a pink or magenta as the main accent color (with the user able to choose from a selection of a few others). I chose pink because I cannot think of another desktop that uses that as its main accent, along with wanting to stick close to the Unity purple while retaining a unique identity.
Closing
That is all for this week! I got less done than I was hoping for, but I still think I made some decent progress. As stated previously, there should be a PoC done by next week, so make sure to look for it on the Pijul Nest! (Or just wait for the announcment I guess.)