You are not logged in.
one thing
there's a lack of really good and clear documentation to write man pages, i know there are videos out there, forum posts and articles about writing documents with roff and some even delve on the differences between roff dialects and implementations like groff, nroff, troff, etc... but they all have the same problem, they are written as narrations/articles which isn't the ideal form to ingest information dense topics, i find the best way to ingest and digest any topic with high information density is through the structured sections of wiki pages and ironically man pages as those are also structured by sections...
so, knowing that there are man pages that need to be written for this project it would be nice to have a wiki page and a manpage about writing manpages, and i know there will be some that will say "just write in asciidoc and convert to a manpage" and i'm not invalidating that but a manpage is not a mystical lost language, it is just roff, which is admittedly not great to write by hand but not impossible, so covering how to write a manpage by hand shouldn't really be a "no one will ever do that", that said for the task of writing the wiki page and the manpage that are to have the refference on how to write manpages both by hand and asciidoc it would make sense to write the source in asciidoc so it can be "easily" converted to both formats
for some repos i write manpages directly in roff and they come out okay cuz i cheat copying the manpages of other projects as template/base (usually the sxiv/nsxiv manpage) and editing it, but doing that has limits like when i want to add some usage or even code examples onto the manpage which i've had to format in less than ideal manners...
some news, on the development of shed:
- "on demand" services are now a thing shed can support, there simply is the need for a program to run shedc start <service> when it starts and then run shedc stop <service> on exit, for programs that natively support configurable/programmable hooks that's not an issue, for others the need will arise to have wrappers that simply run the commands calling starting/stopping their required service
- "start-stop-daemon" has been integrated into shed as an optional backend for starting, stopping, hupping processes, the integration currently is experimental but should work, by default shed will not use start-stop-daemon but it's own methods, to enable usage of start-stop-daemon a file in the session config dir named use-start-stop-daemon.rc must be present and contain USE_SSD=true, as per regular shed functions the strings "true", "yes", "on", "t", "y" case insensitive as well as '1' are taken as true while everything else as false, empty string included, 'start-stop-daemon' should also be available to run by the user, the check is done with command -v
other than that i'm not sure what else to add before cutting the next release or if trying to keep chewing through the current pending points of the roadmap, been thinking about adding some form of service auto-restarting on crash but i'm not fully convinced as that is not a feature of sysvinit, the architecture of which i'm basing shed off, not that i'm opposed to the idea but i'm not sure if that should be a component of shed or rather a separate utility, even a separate daemon to be more re-usable across the whole range of init implementations.
well the welcome app could take notes from bunsenlab's bunsen-welcome and antix's antix-control-center
So lately i've been refining shed, from making the daemon have a threaded non
blocking handling of the named pipe used as an IPC socket to improving fallbacks
to determine the XDG_SESSION_ID as well as modularizing functions into hubs to
prepare for possible ports to the multiple BSDs and maybe even to illumos, but
i got no idea of how to continue in terms of improving the portability so i'll
just post on the FreeBSD forums about shed to see if there's some interest in
what it is, what it does and if besides the parts i know need porting there's
something else i missed, after that i'll look into adding optional support for
leveraging the start-stop-daemon program (apt and openrc) if available so that
it won't be a hard dependency, not sure if that would be enough to justify a
new release of shed but i'm very aware i'm using this as an excuse to avoid
trying to create a package for shed in any distro.
rather than a begginers manual i'd push the idea of a "welcome app", which is to be a sort of "hub" app that autostarts and is available to run as is, the hub app would show options to launch things like the helpsystem, manual page search, software installation (name your favourite "software store" type program from synaptic to aptitude or apt-ui), set alternatives, etc...
something that definitely helps for streamlining the usage of manpages is the capability to fuzzy search manpages with in search previews of the manpage, that way you can read some of what information it has before opening it with man proper
and as it turns out i happpen to have a script for that leveraging fzf
https://github.com/eylles/mansearch
could probably write a manpage for it, put out a release tag and maybe look to package it for debian if there's any interest
not rushing to witch hunt? where is the fun in that?
there are more coreutils implementations than just gnu and uutils, like the bsd and the solaris ones, and those are not released under the GPL.
if i had to guess why microsoft used uutils as base for their core utils i'd say it is because the solaris and bsd implementations are more closely tied to the rest of their userland or even their kernel while uutils were more readily capable of working in the microsoft environment without much modifcation
as for "...rewriting applications to release them under a different license from the original is unethical and without honor..." may i remind you that both the GNU and the BSD implementations of the core utilities (grep, awk, cat, head, tail, date, ls, stat, cp, mv, rm, mkdir, wc, sleep, pwd, ETC...) were "re-written" from scratch off the original bell labs/at&t unix core utilites to avoid being subject to the UNIX licensing terms, so please write richard stallman an email about how "unethical and honor-less" he, the FSF's GNU team as well as the BSD developers from back in the day were for re-creating software that already existed but in licenses that undermined the original bell labs authors.
so it was recently published on reddit that the NetBSD init was ported to linux, in specific the target was debian, poster says the repo is not public yet as there are things to iron out and the team behind it has not yet decided on an adequate license for the port
personally i think it is a shame as flatpak is/was a great tool to supplement software when some package is not available or has usability downgrades in a distro, as examples i still use flatpak for primehack (a fork-mod of the dolphin gamecube and wii emulator that focuses on modern fps style mouse+keyboard and gamepad controls for metroid prime) which is so niche i doubt it will ever be packaged for debian, zoom since i really don't want the zoom software to be a too integrated part of my system when i've needed to take video conferences, adwsteamgtk which lets me theme steam to look like a gtk program using my custom stylesheet for adw-gtk3
i also use krita and kdenlive from flatpak and was counting on flatpak as a way to keep using krita and kdenlive after they drop support for x11 since the nice cool thing about flatpak is you can install older builds of the flatpak than the most recent release...
some other programs i use flatpak for cuz i've been lazy i can switch to the debian package, like obs studio, retroarch which i've been using from flatpak since the debian package had the online core downloader disabled and the emulator core list was heavily curated now it is just a matter of configuration altho annoying the default is to disable the core downloader and not have the emulator core dir set to a user writeable one but meh is just config, one that will be annoying long term in the future is the gnome-authenticator which in spite of being a seemingly simple program is fully commited to libadwaita so when that drops x11 the program is kill for my environment even from the debian repo and alternatives aren't great as otpclient currently is a gtk3 app on the repos but upstream has transitioned to libadwaita too leaving only cotp which is TUI but also rust, which here is the least of issues really but still makes me want to write my own tui program for that....
tangent aside, perhaps this could be the call to fork flatpak, i mean the current software works so a tentative fork would be really just a maintenance one rather than rushing to add every feature under the sun, question is if other systemd free distros like void linux, artix and chimaera would be interested to collab on forking flatpak and possibly even the flathub just to keep the convenience that currently exists, no idea about alpine as the distro is continually moving towards having greater systemd compatibility even now
from the mouth of Jorge Castro flathub org member, and the motion has support from reddit users.
if he ain't just bullshitting then anyone whom depends on software only available through flatpaks will have to help maintaining a fork of flatpak that does not depend on systemd and maybe even a repository of builds of flatpaks that do not need systemd, maybe even a fork of the whole of flathub.
gnome is the one desktop environment where the desired behaviour happens because of a bug, at this point anyone who like the gnome ecosystem but don't want mandatory systemd should look into forking gnome for the long term.
so there are rumors that now that gnome os is using systemd-homed by default there are plans for gnome to become the first desktop environment to make the usage of systemd-homed mandatory.
you could always look into building a display manager for the framebuffer, that way it won't use neither x11 nor wayland, and you can make it to your own desires.
i mean, writing the software i want to use is what i do when the existing software doesn't work the way i want and i cannot reconcile with the codebase to work on fixing existing software.
as of the release v0.3.0 of shed you can set up 2 files to imitate the x11 dbus activation environment, within the shallow.d subdir of the session config dir put the following in a file named something like dbus-launch.env
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
eval $(/usr/bin/dbus-launch --exit-with-session --sh-syntax)
fihaving that in the shallow will allow hyprland to inherit the $DBUS_SESSION_BUS_ADDRESS as part of the environment, then in the env.d subdir we can have dbus-update-activation.env
if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] && \
[ -x "/usr/bin/dbus-update-activation-environment" ]; then
# subshell so we can unset environment variables
(
# unset login-session-specifics
unset XDG_SEAT
unset XDG_SEAT_PATH
unset XDG_SESSION_ID
unset XDG_SESSION_PATH
unset XDG_VTNR
# tell dbus-daemon --session (and systemd --user, if running)
# to put the session's environment in activated services'
# environments
dbus-update-activation-environment --verbose --systemd --all
)
fithat is outright a copy of the /etc/X11/Xsession.d/95dbus_update-activation-env file that debian provides for x11 sessions.
so i was not happy with the icon i had drawn, anyway that is just a cosmetic and there's more of
shed to develop in the future as this release is more to get the ball rolling as shed is now easier
to use than ever, i can take the time and draw an svg with patience for the cycle of v0.4.0, for
now there is no icon nor logo whatsoever but that is not important.
shed v0.3.0 is finally out, all tweaks and last minute changes were made so that it would still
release on May 14 at least in UTC -0600...
anyway, go have fun setting up shed on your system, i'll try to cobble a package through the
weekend, once i got something that builds with debian tooling i'll look to get the package on
debian, ought to wonder if the people working on init diversity would be interested in shed or
they'll prefer to invest into another solution, regardless now i can look on ways to get the
ball rolling.
great news everyone, 222 commits after the release of v0.2.0 i am pleased to announce that all
technical and documentation requirements are met for the release of shed v0.3.0, which is scheduled
to take place Thursday May 14 2026 at some time after 13:00:00 UTC -0600 if all goes as planned.
so far other than more testing is supplying some example files, drawing a logo (working on that rn)
that can be installed if the distribution so desires, bumping the version, creating release tag,
pushing tag, making latest release off the tag.
all left to say is give it a spin and have some fun taking more control over your computing!
i personally keep using github for visibility of my projects, i'm just slow at mirroring everything to other forges like gitlab and codeberg.
ya know, instead of managing the pipewire services as exec inside hyprland why not use shed, it provides an implementation of user services and can handle wayland sessions.
https://github.com/eylles/shed
the manpage provides an example for using with sway, my latest shed development related forum post gives some insight on what shed can do and how it may be used for wayland sessions, mind you i got no idea how those are started beyond that the compositor is also the windowing server so it needs to have environment preparation before running, which shed can do
https://dev1galaxy.org/viewtopic.php?pid=63141#p63141
mind you my only frame of refference for wayland stuff is https://wiki.gentoo.org/wiki/Sway#Starting_Sway
but i can guarantee you that in my x11 setup shed is able to perfectly manage pipewire.
the state of shed as of today, year 2026, month 04 (april) day 10
this is to address what works, which features ara available and how shed can be used as of the latest commit to master (c4f77b1), what is still to be implemented, what features does shed need and also as a request for feedback from prospective users to gather interest on either cutting a release of shed this week or wait until more capabilities are implemented, any further commits pushed today to the repo will only be documentation related.
What shed can do right now:
shed can run as the x session process leader, that is if you use startx to start your x11 session from tty your .xinitrc (or .xsession in debian and all derivates) file can perfectly well be just a shebang with the line "exec shed" right below, shed will work as the session process and so long as you logout with "shedc logout" the session will be terminated correctly.
shed can also be used as the session process for a wayland session, however i'm barely versed in wayland beyond the minimum needed to make shed into something that can work for the architecture of how a wayland's session leader is not just their window manager but their compositor and actual windowing server.
that said in the current state both x11 and wayland sessions can be started from a display manager like sddm just needing the correct .desktop files to be provided, for example:
the current shed x11 session could be /usr/share/xsessions/shed.desktop
[Desktop Entry]
Name=shed
Comment=an x11 session in shed
Exec=shed
Type=Applicationthe current shed wayland session could be /usr/share/wayland-sessions/shed.desktop
[Desktop Entry]
Name=shed
Comment=a wayland session in shed
Exec=shed
Type=Applicationof note to the interest of wayland users, as far as i know shed is the only tool out there that can be a viable alternative to the Universal Wayland Session Manager (UWSM), which is the only other generic tool for managing wayland compositors and it does so with systemd units.
current capabilities of a shed session daemon are:
set XDG_RUNTIME_DIR - meaning you can even run without elogind, just shed.
set XDG_SESSION_ID - the only feature so far that CANNOT be used as is in *BSD as it gets the session id from cgroups
set XDG_SESSION_DESKTOP and XDG_CURRENT_DESKTOP - env vars used to identify the desktop environment AND xdg-portals config for using the xdg-portals
set xdg home dirs - the XDG_DATA_HOME as $HOME/.local/share, XDG_CACHE_HOME as $HOME/.cache, XDG_STATE_HOME as $HOME/.local/state, not to mention XDG_DESKTOP_DIR, XDG_DOWNLOAD_DIR, XDG_TEMPLATES_DIR, XDG_PUBLICSHARE_DIR, XDG_DOCUMENTS_DIR, XDG_MUSIC_DIR, XDG_PICTURES_DIR, XDG_VIDEOS_DIR, defined with xdg-user-dirs-update, worth mentioning that for this purpose shed only exports their ENV var values it however does not initialize (mkdir) the directories as that step is not a strong requirement imposed on all session processes as far as i know.
can also export an "exports" file in shell loadable format containing the values of XDG_RUNTIME_DIR, XDG_SESSION_ID and shed's own SHED_SESSION_PID, this was an option that previously could be a requirement back when shed could not run as the session process, i'm keeping it for the time being as an option that may be of use to someone tho removal of this capability is open to possibility.
besides the configuration file shed supports:
loading of .env files to set up the environment during session initialization and before starting of components and services, .env files are just posix compliant shell scripts (no bashisms) which are to be stored in ${XDG_CONFIG_HOME:-${HOME}/.config}/shed/shallow.d for the files to be loaded during the shallow phase and ${XDG_CONFIG_HOME:-${HOME}/.config}/shed/env.d for the ones to be loaded during the transient phase, shed will only ever load them during the initial run as loading of .env files is ignored during reloads such as when calling shedc reload and shedc relaunch.
starting session components, session component definitions are stored in ${XDG_CONFIG_HOME:-${HOME}/.config}/shed/components, session components are services that will only be started at session start and terminated upon logout, meaning no attempt is made to start them from shed re-executions.
starting and managing user-services, one of the main reasons i wrote shed and the core functionality that was extended to session components, service definition files are stored in ${XDG_CONFIG_HOME:-${HOME}/.config}/shed/services, oneshot and daemon type services are supported, worth mentioning that with daemon type services the called program must NOT fork to background and exec to daemonize itself, such behaviour breaks the way that shed manages services, i know sysvinit in debian has no problem with that thanks to leveraging start-stop-daemon but shed does not use that program instead going for pure shell in hopes of portability.
do a shallow to transient initialization process in which shed starts in shallow mode only setting up the environment, then checks for a "transient" script which should be executable, if the check succeeds the script is ran with exec allowing it to inherit the PID of the shed instance, then it has to execute the program that will become session leader (also with exec so it inherites the session pid) and then the program has to launch a new instance of shed as a child, if the check fails shed will simply execute itself again, at this point execution of shed converging and completeing the session by starting session components and user services
what shed cannot do:
start programs from the xdg-autostart spec, in theory user services are better as they are explicit with their lifecycle behaviour (daemon or oneshot), tho a way to support xdg-autostart entries would be to run a script to parse and convert them into the shed service definition format, an additional feature would be required from shed when starting services to keep polling on the pid for a while and checking the exec name and flags to ensure it is the same program and so determine if it is a daemon or was a one shot, for that reason i did not have support for xdg-autostart as a goal for release v0.3.0 from the start of the development cycle.
use a proper implementation of the XDG_CONFIG standar, in fact shed only supports to have ONE set of configurations for ONE session, changes are planned to re-structure the shed configuration from:
$XDG_CONFIG_HOME/shed/
|- shed.rc
|- shallow.d/
|- env.d/
|- components/
|- services/
|- transientto:
/etc/shed
|- sessions/
|- session_name/
|- shed.rc
|- shallow.d/
|- env.d/
|- components/
|- services/
|- transient$XDG_CONFIG_HOME/shed
|- sessions
|- session_name
|- shed.rc
|- shallow.d/
|- env.d/
|- components/
|- services/
|- transient
as this schema would allow for distributors to ship sessions, say if tomorrow someone wanted to create their own "desktop environment" using shed, say it was named Joe's Desktop Environment, and it was to use pekwm, picom, pipewire, xfce-polkit, and betterxsecurelock, then the default files that would be shipped for that session would be:
/etc/shed
|- sessions/
|- JDM/
|- shed.rc
|- shallow.d/
|- env.d/
|- xrdb.env
|- components/
|- 99x11-windowmanager
|- services/
|- compositor
|- pipewire-daemon
|- pipewire-daemon-pulse
|- pipewire-media-session
|- polkit-agent
|- xscreenlocker
however i'm very tempted to make the release of shed v0.3.0 and just leave these pending features for the dev cycle of v0.4.0 as i personally have no use for them and so far i feel shed has not gained enough traction to justify working on them.
well oneshots are finally handled reliably and i think every part of shed that needed to be refactored in preparation for session components has been refactored, i'll work on the session components tomorrow and making shed a more proper x-session-manager, i feel tempted to cut the release for shed v0.3.0 at just being able to use shed as an x-session-manager that works for minimal x11 pseudo-desktops, ie; environments built upon window managers and independent components much in the style of the bunsenlabs desktop, antix, miyo and mabox, cuz adding support for stuff like wayland and more traditional desktop environment setups requires a lot more work like introducing the architecture of "shed shallow" -> "gui leader" - "shed transient", which for example in a wayland setup would be:
a "shallow" shed instance, which just sets up the environment vars like the XDG_RUNTIME_DIR if needed, loads the user profile into the environment if indicated, then proceeds to write it's pid onto a file and export it as the SESSION_LEADER to then exec the wayland compositor from the corresponding session component definition file, so that the wayland compositor can become that PID.
the wayland compositor then comes, does the setting of GUI environments it requires to do, starts a new shed instance within it's environment.
the "transient" shed instance then writes it's own pid at the shed.started file and continues starting all the other session components and services needed for completeing the session.but yeh that is a workload i'm considering leaving for the v0.4.0 dev cycle, anyway onto my videogames i go
yeh, i know that the way i'm using pid files is not the best, cleanest or even most reliable, i did have my eyes set on leveraging the start-stop-daemon program early on but decided against it at the start of the project as a proof of concept to see if i could get away without as a dependency, i do want to add use of start-stop-daemon to shed before the v0.3.0 release but as a soft dependency rather than a hard one, as in "do we got 'start-stop-daemon'? yes we do, that will be used and things will be more reliable. no we don't but we can fallback to the less reliable shell backend, that is okay." rather than "ya didn't install 'start-stop-daemon' in this thing? lol get rekt nothing works lmao"
as a sidenote, maybe i should try passing shed as a suckless program, say label it like a "suckless session process", perhaps it would generate more interest that way...
with enough luck by the end of this year (knocking on wood it will be sooner than that) shed will be able to provide a proper x-session-manager + user services in a way that can work with any non Desktop Environment in devuan stable.
@coder-hase ya could always look into "breaking up" components form pico-init to a collection of smaller utilities, ya know to cheat the whole line count.
as for shed i've been working on it and i'm quite satisfied that many of the commits from this week have incurred in deduplication and generalization of code as that has vastly cleaned up the project.