Join WhatsApp
Join Now
Join Telegram
Join Now

Creating Custom Desktop Environments Using Enlightenment Foundation Libraries

By Noman Mohammad

Published on:

Your rating ?

Stop Losing 150 Hours a Year to a Slow Desktop

Three-point-five hours. Every week. Gone.

That’s not a typo. That’s 150 hours a year spent staring at a frozen panel, resizing a laggy window, or waiting for the file manager to remember you exist.

And the worst part? We blame ourselves. “Maybe I opened too many tabs.” “I should restart more often.”

Truth is, your desktop was built for everyone. Which means it fits no one.

My Moment of Truth

Last spring I was deep in a debugging sprint. Terminal on the left. Browser on the right. Slack pinned to the corner.

I hit Alt+Tab to jump back to code… and nothing. Half a second later the switcher blinked in. Then it vanished. My train of thought? Derailed.

I snapped. Closed every app. Opened a new browser tab. Typed:

“lightweight linux desktop I can actually build myself”

That rabbit hole led me to Enlightenment Foundation Libraries. Forty-eight hours later I had a desktop that boots faster than my coffee maker.

What Exactly Is EFL?

Think LEGO bricks for your computer screen.

  • Ecore – the engine that keeps everything running smoothly.
  • Elementary – ready-made buttons, sliders, and lists.
  • Edje – the paint set that lets you make it pretty.
  • Evas – the GPU-powered canvas that never stutters.
  • Wayland & X11 – works today and won’t break tomorrow.

And yep, it’s all open source.

Install EFL in Three Commands

No Snap, no Flatpak, no nonsense. Just clone, build, done.

git clone https://git.enlightenment.org/efl/efl.git
cd efl
meson build && ninja -C build && sudo ninja -C build install

Need it tucked away in a folder? Add --prefix=$HOME/efl and keep your system clean.

Your First App: 19 Lines, Zero Headaches

Create hello.c:

#include <Elementary.h>

EAPI_MAIN void
efl_main(void *d EINA_UNUSED, const Efl_Event *ev EINA_UNUSED) {
    elm_win_util_standard_new("hello", "My Fast Desktop");
}
EFL_MAIN()

Compile and run:

gcc hello.c `pkg-config --cflags --libs elementary` -o hello
./hello

A clean, empty window pops up. Congratulations—you just launched the seed of your future desktop.

Build the Parts That Matter

1. A Window Manager That Feels Instant

Ecore_Evas *ee = ecore_evas_new(NULL, 0, 0, 1920, 1080, NULL);
ecore_evas_show(ee);

No flicker. No tearing. Just pixels exactly when you need them.

2. A Panel That Knows Your Shortcuts

Elm_Box *bar = elm_box_add(win);
elm_box_horizontal_set(bar, EINA_TRUE);

Elm_Button *term = elm_button_add(bar);
elm_object_text_set(term, "Terminal");
evas_object_smart_callback_add(term, "clicked", launch_terminal, NULL);
elm_box_pack_end(bar, term);

One click. Terminal spawns. No hunting through menus.

3. Launcher With Fuzzy Search

Elm_Entry *search = elm_entry_add(win);
evas_object_smart_callback_add(search, "changed", fuzzy_match_apps, NULL);

Type chr and Chrome appears. Type obs and OBS pops in. Muscle memory restored.

Make It Look Like You

Drop this into theme.edc:

group "main" {
  part { name: "bg"; type: RECT;
    description { color: 25 25 28 255; }
  }
  part { name: "accent"; type: RECT;
    description { rel1.to: "bg"; rel2.to: "bg";
      color: 0 188 212 255; }
  }
}

Compile:

edje_cc theme.edc

Load it in two lines of C:

Edje_Object *theme = edje_object_add(evas);
edje_object_file_set(theme, "theme.edj", "main");

Dark mode? Pastel rainbow? Neon cyberpunk? One file swap away.

Keep It Lean, Keep It Fast

  • Use Eina_List instead of std::vector—no hidden mallocs.
  • Cache icon pixmaps with Evas_Object_Image.
  • Profile with perf record -g ./my-de, then trim the fat.

Debug Without Going Crazy

Add these to your shell startup file:

export ELM_ENGINE=wayland
export EINA_LOG_LEVELS=ecore:2,elementary:2

Now run your DE in a nested Wayland session:

weston --width=1280 --height=720 &

Logs show up right in the terminal. No cryptic GUI dialogs.

Package It for Your Friends

meson build --buildtype=release
ninja -C build
DESTDIR=/tmp/pkg ninja -C build install
fpm -s dir -t deb -C /tmp/pkg -n my-de -v 0.1.0

Hand them the .deb. They double-click. Instant envy.

Ready to Reclaim Your 150 Hours?

Grab a coffee. Clone the repo. By tonight you’ll have a desktop that opens apps before your finger leaves the key.

And the next time someone says “Linux desktops are slow”, you’ll just smile and hit Alt+Tab.

Leave a Comment

Exit mobile version