Stats

5
Projects
45
Devlogs
100
Votes
3
Ships

Coding Time

All Time: 195h 19m
Today: 0h 20m

Member Since

June 16, 2025

Badges

2
Ballot Stuffer
vote 100 times.
🚢
Maiden Voyage
you shipped your first project! the journey begins...

Projects

5
Zipline Android App
2 devlogs 3 days ago
My Personal Website V2
1 devlog about 1 month ago
Discord Create Addon Notifier
4 devlogs about 1 month ago
Linux Custom Desktop Shell
25 devlogs about 2 months ago
NixOS Dots

NixOS Dots

Shipped
13 devlogs about 2 months ago

Activity

Created AuthContext (user role) & ZiplineContext (public server settings) to avoid fetching the settings on every page change (not yet applied to the app)
Increased minimum Zipline version to 4.2.3 as it's the only version with /api/server/public & /api/server/settings/web
Added functions to fetch /api/server/public & /api/server/settings/web & their types

Update attachment

Fixed an issue where tray's popovers would have no padding or border-radius (i think it's an AGS issue since just removing the class property and using popover instead of .tray-popover works fine)

Update attachment

In the last commits i updated all the app code so it targets as main android SDK 35 instead of SDK 34 since play store was complaining about it and fixed some issues reported by the few people who enrolled in the play store 14 days closed testing period

Update attachment
Stef
Stef created a project
2d ago

Zipline Android App

An android app to manage your self-hosted Zipline instance (zipline is https://zipline.diced.sh)

Zipline Android App
2 devlogs 0 followers
Stef
Stef worked on NixOS Dots
5h 47m 5 days ago

In the last commits:
- Fixed server modules nginx config as addSSL and forceSSL are mutually exclusive
- Fixed Ntfy user script to run after Ntfy itself instead of before (this script is temporary until ntfy on nixpkgs is updated to v2.14.0 which has built-in declarative users and access list)
- Fixed glance throwing errors and causing the system rebuild to fail as it'd try to get the domain variable from services which don't have a domain
- Improve SSH setup
- Fixed Mailcow Dockerized + Roundcube installation script and added a Mailcow Dockerized uninstallation script
- Opened TCP port 80, 443 on the firewall for Nginx
- Open TCP ports 22000 and UDP ports 22000 & 21027 on the firewall for Syncthing
- Open TCP ports 25, 465, 587, 143, 993, 110, 995 & 4190 on the firewall for Mailcow Dockerized
- Updated allt he server modules' ports from 1234:1234 to 127.0.0.1:1234:1234 to avoid publishing all the ports publicly
- Installed GIMP, rclone & Java JDK

Update attachment

In the last 6 commits:
- Fixed an issue that would cause the bar to error and not display if Spotify was not running when it started
- Updated the getMainInterface() function to get the correct main network interface
- Increased bar height delay from 500ms to 5 seconds as before it was too quick and sometimes was set too soom, causing the notification panel and other UIs to go partially under the bar
- Updated README to add few required details in the How to Run section
- Fixed an error in the URL RegExp that would cause some notifications to appear as blank because of markup issues
- Fixed an error in the URL RegExp that would cause discord formatted urls ([example](<https://example.com>)) to return the url as https://example.com&gt;
- Fixed an error in the italic RegExp that would cause it o return blank text or * because it would match the * from bold or _ from underline

Update attachment
Stef
Stef worked on NixOS Dots
15h 29m 23 days ago

finally finished setting up the server module and applied the settings to the server itself

Update attachment
Stef
Stef worked on NixOS Dots
2h 25m 28 days ago

Added my personal API to the server modules

Updated ntfy module:
- declaratively create & delete users
- declaratively create & delete topics/permissions (access list)

Update attachment
Stef
Stef worked on NixOS Dots
4h 31m 29 days ago

Added other server modules:
- Wireguard VPN (incomplete)
- Mailcow (untested but web UI seems to work)
- Nginx for all the modules

Update attachment

Added other server modules:
- Discod Create Addon Notifier (by me)
- Telegram Create Addon Notifier (by me)
- Crate Addons Website (by me & a friend)
- Personal Site (by me)
- Receiptify (by me)

Update attachment

Added other server modules:
- Apprise API
- Discord User Apps bot (by me)
- Grafana
- Prometheus
- Prometheus node_exporter
- Lyrics API (by me)
- Pi-Hole
- Syncthing
- SearXNG

Fix Linkwarden + Meilisearch modules

Updated yourspotify modules:
- yourspotify.web -> yourspotify-web
- yourspotify.api -> your_spotify-api

Update attachment

Add server modules that i'll use on my VPS once finished
- Zipline
- SearXNG
- ConvertX
- your_spotify
- Filebrowser
- Glance
- IT-Tools
- Jellyfin
- PostgreSQL
- Linkwarden
- Ntfy
- speedtest-tracker
- Umami
- Vaultwarden

Update attachment

Added /mod command to get info about a specific create addon
Added /search to search through create addons
Formatted code with biomejs

Update attachment

Only 1 devlog cuz I started coding this some months ago with a friend (orangci), then kinda abandoned it and finshed it now, anyway:

Fixed tooltip going out of the screen when close to the edge
Fixed Skip Loading text not bing displayed on smaller screens
Add Skip Animation button in the about me code block
Added credits for Maia and Vaporwave oneko variants
Removed aspect ratio on the rabbit images

Update attachment
Stef
Stef created a project
38d ago

My Personal Website V2

V2 of my personal website (I started coding this some months ago with a friend (orangci), then kinda abandoned it and finshed it now)

My Personal Website V2
1 devlog 0 followers

Fixed an issue where it would not parse correctly the variables
Moved the variables from a normal message to a message that uses Discord's components V2 to make it look nicer (platform buttons inside the container and addon icon as thumbnail when available)
Added edit new addon and updated addon message to the settings
Moved button & select handler in the components folder and added modal handler too
fix a typo (findConditinals => findConditionals)
remove url parser from parseVariables as i realized it was completely useless
Added /help command
Added /preview command

The video shows the bot working all together (using a local create addons website (modified to fetch only 10 mods instead of thousands) just to test the websocket messages)

Added event handlers
Added /settings using components V2 to manage the bot settings along with button and select menu handlers for it
Added /setchannel to set the channel where the bot will send the notifications
Updated README.md with a guide on how to selfhost it
Added WebSocket handler (untested)

Update attachment

Made the basic bot code and took the websocket types from th create addons website code itself
ws handler is partially added, still missing the actual addon message handling

Update attachment
Stef
Stef created a project
41d ago

Discord Create Addon Notifier

A Discord bot that connects to the Create Addons website's websocket (wss://create-addons.stefdp.com/ws) and notifies all configured guilds whenever a new addon for the Minecraft "Create" mod has been created or updated This bot is mainly for people who play the minecraft "Create" mod or made a modpack with it and want to be up to date with its new & updated addons (The bot was made for th Converge YSWS) used copilot autocomplete suggestions

Discord Create Addon Notifier
4 devlogs 2 followers Shipped

Fixed an issue where fetch would not be sending headers
Removed Math.min and Math.max from volume handlers as the lib already handles it
Right clicking media module now copies the track ID (needed for the lyrics through local file)
add a config file in ~/.config/stef-shell/config.json that allows you to configure some parts of the desktop shell
lyrics can now be imported from a local file as long as it's a file matching this name .lrc and is inside the lyrics folder (configurable)

Update attachment

Fixed notification overflowing when too long and now the notification center closes on middle and right click too

Update attachment

Styled scrolledwindow's scrollbar
Added pointer cursor to all the buttons and DND switch
added pointer cursor to each app launcher's app along with a 1px border on hover
added transition for button background color which changes on hover

Update attachment

fixed an issue where lyrics click/middle click would error with file already exists
fixed notifications having a wrong input region cuz of the animation
made a few changes to the readme
- added a preview/showcase video
- added required libraries to run it and how to run it

Update attachment

Added more keybinds for the app launcher
- Tab & Arrow Down: focus next app
- Shift + Tab & Arrow Up: focus previous app
- Backspace (when not focused): fucus text input & run backspace
- Cancel/Delete (when not focused): focus text input & run cancel/delete
- Any other (non-special) key: focus text input & type the key using String.fromCharCode()

those following ones already existed but i'll list them so people know they exist
- Alt + 0-9: open app at position (0 = 10)
- Enter: open focused app
- Esc: close app launcher

Update attachment

Added animations:
- launcher toggles with a fade in/out animation
- OSD toggles with a fade in/out animation
- notification center toggles with a slide left/right animation
- noitification popup toggles with a slide left/right animation
- popovers open with a fade in animation (i can't handle close cuz it's closed by GTK4, not code managed by me)
- session menu toggles with a fade in/out animation

Fixed an issue where pressing enter in the app launcher would not reset the app list but only the entry (literally 1 line)

Update attachment

Configured everything to use my AGS dekstop shell and remove waybar + swaync

Update attachment

Now OSD and notification popup are hidden when session menu is open

Update attachment

Sorted imports cuz yes.
formatted code with biomejs
fixed 2 bugs in the launcher
- every typed character would bring the cursor to the start of the entry (so if you were to type OBS it would've written SBO)
- when closed it would not clear the search apps (so if search for prism, then close and reopen the entry would be empty but the apps would still be filtered for prism)
better handling of the opening of any window from a source that is not ags request

Update attachment

Modified the Hyprland window rules so now
- my desktop shell windows float, do not have blurred bg, do not have animations (i'll add them later in the desktop shell itself) and 2 of the windows are pinned (notification center & session menu)

43 minutes cuz it took me a while to discover the existance of negative:... i was doing with a negative lookahead which apparently is noy supported..

Update attachment
  • added a session menu (same as the bar button but full screen)
  • improved apps tray styling
  • notifications now have a pointer cursor when they have a default action
  • switched non layered stuff to Gtk.Window instead of window
  • updated README.md
Update attachment

installed some other util apps (cloc for code line count and lm_sensors for sensors info) and modified hyprland config (apps can now request t raise themselves, disabled animation on selection layer to avoid black border)

Update attachment

Added click handlers for the media buttons:
- left click on the song's cover art opens it in your default file viewer
- middle click on the song's cover art saves it in $HOME/Music/spotifyData/.png
- middle click on the song artist & title raises spotify as a ctive window
- left click on the lyrics opens the lyrics in your default editor
- middle click on the lyrics saves the lyrics in $HOME/Music/spotifyData/.lrc.

Also calculator launcher now clears the last result on close and added the pointer cursor to tray items and media modules

Update attachment

I modified the bar modules ordering and added 2 new modules, power (lock, sleep, hybernate, shutdown, reboot, reboot to BIOS/UEFI, task manager, logout) and system tray integration.
Also modified the icons so instead of nerd font icons it uses adwaita icons (just for mic, speaker, wifi & battery) and material symbols (for everything else).
Also slightly modified lyrics so it shouldn't update the current lyrics with the previous fetch if you switch too fast (hopefully, not tested)
I also probably optimized it a bit while changing the icons, now the icons will only re-render if they change rather than re-render even on volume change, same for labels & tooltips of most bar modules

Update attachment

yoinked the screenrec module from orangc
added syncthing module so i can thing my fils between my phone and my laptop (with my VPS as middleware)

Update attachment

moved all the data for config inside the constants folder and handle invalid inputs for the calculator launcher

Update attachment

Renamed the AppLauncher to just Launcher because now it can serve multiple purposes:
- Normal app launcher as it was before
- Calculator (using qalc)
- Clipboard (disabled until i find a way to get the clipboard from cliphist without errors caused by raw binary image data)

Also notification popup now stays hidden when DND is enabled

Update attachment

Now notification support markup (parsing MD to Pango markup), also now the clicks on the OSD pass through it as an intentional feature

and just formatted code with biomejs so it looks better

Update attachment

Added a OSD (On Screen Display) for microphone (default mic of the system), speaker (default speaker of the system) and screen brightness.
Also styled the calendar opened by right-clicking the time on the top bar to match more the bar styling.

still has some issues like OSD displays on startup and you can click through OSD except the startup run which blocks all the inputs in the middle of the screen, i'll try to fix those

This video shows how it all looks together

i created an application launcher which can be opened with ags request toggle-applauncher, it displays all the app with their icon, name and description (if avaible) and they can also be filtered with a fuzzy search thanks to AstalApps library

next i'll start working on the OSD

Update attachment

Fixed notifications taking more space than needed (using input area, ty mabi19 on discord for the help).
Fixed an issue where the current playing media would show null - null when spotify is closed.
Added a notification center (can be toggled with ags request toggle-notif or by pressing the notification icon on the top bar) to view all notifications (sorted by date), they're grouped by app with a button to close/dismiss all notifs by that app, and also a button to dismiss all notifications by all apps.

Update attachment

I improved the notification popup, now it has a custom progress bar to show when it expires, it correctly follows the timeout set by the app but that can be paused on hover
now it also handles the default action as notification left click instead of displaying a button

also fixed an issue where if a notification timeout expired and later it was replaced, it wouldn't be displayed and issue where transient notification would be stored anyways instead of being dismissed right away

Update attachment

Continued implementing the notification daemon, now the notifications received by it are displayed on the top right corner of the screen, they support image, icon, body, summary and actions like all notification daemons (still gotta fix some stuff like the overlay of the notifs either takes too much un-needed space or doesn't take enough space, i want it to take only the required space, eventually growing on new notifs and start to scroll only at around half screen).

Next I'll do a notification center to watch all received notifs and once i finish that i'll make an app launcher, after that i'll make a OSD (on screen display, the thing that appears when you change the volume/brightness etc.)

Update attachment

Finally finished the bar (well technically still missing the notification list but for that i'll have to first a notif view and notif popup with the astal notif daemon)

styled the bar and moved its tsx file along with its modules in the bar/ folder, so it'll be more ordered and clean.
ordered imports by length cuz yes.

Update attachment

I managed to fix the lyrics issue by subscribing just to the notify::metadata event instead of notify::position, notify::trackid and notify::volume

also added the catpuccin macchiato colors in the styles.scss file and constants/colors.ts which will be used for styling

Update attachment

I set the VSCodium font to FiraCode Nerd Font so i can see the icons directly in VSCode (needed for my linux widget with AGS v3 & Astal), and well, for that to work also installed the font itself.
Also enabled the gnome keyring pam SDDM service (for some reasons vscode complained otherwise and would have forced me to use weaker encryption)

how that took me 26m? first i didn't know the correct vscode setting name so i tried diff ones (i couldn't just set it through vscode and copy cuz nix saves its setting file as read-only meaning i can only edit it through nix) and also i couldn't find how to fix the vscode encryption thing so i tried diff things before ending up with this + setting "password-store": "gnome-libsecret" in the vscode runtime args

Update attachment

This widget is still very work in progress, i still haven't styled it, just added some of the modules (CPU, RAM, Disk, Battery. Clock, Speaker, Microphone, Network, Media), later i'll add other modules (just notifications for now and maybe hyprland workspaces).

Currently I'm tryna fix an issue where the media module shows the correct lyrics and metadata (artist, track etc.) for the first song but for the next ones shows correct metadata but the lyrics of the previous song (if anyone wanna help, the fetching is handled in utils/lyrics.ts)

(in the picture the red line is to be ignored cuz it's waybar, and the main modules are the unstyled stuff in the blue rectangle, other stuff is debug/test)

Update attachment
Stef
Stef created a project
54d ago

Linux Custom Desktop Shell

Made completely by myself with TSX, AGS & Astal libraries This desktop shell includes: - A top bar for my desktop as a replacement for "waybar" - A custom notification daemon using AGS and Astal as a replacement for "swaync" - A launcher (apps & calculator) - An OSD (On Screen Display for speaker, microphone and screen brightness) - A session menu (lock, sleep, logout, task manager, hibernate, shutdown, reboot, reboot in UEFI/BIOS) using Astal & AGS v3 features used copilot autocomplete suggestions

Linux Custom Desktop Shell
25 devlogs 6 followers Shipped

I switched to NixOS around a week ago and I started configuring my system using NixOS' flakes (basing myself on a friends' dots, orangci/dots, as startup).

Following orangc's model I kept adding any app i needed in the modules so i can just install/uninstall it by changing a boolean value in hosts/nixos/(config | home).nix.

The waybar on top is just temporary, i'm currently working on making a custom bar on the top using Astal and AGS.

This is what the system currently looks like:

Update attachment
Stef
Stef created a project
55d ago

NixOS Dots

I switched to NixOS just a few days before SOM started, so i thought, "why not ship my dotfiles too" since technically nix is a language Basically these are my NixOS dots (Thanks orangci for helping me start with nix)

NixOS Dots
13 devlogs 0 followers Shipped
Stef
Stef joined Summer of Making
60d ago

This was widely regarded as a great move by everyone.