{"id":19704147,"url":"https://github.com/eylles/shed","last_synced_at":"2025-04-29T14:31:11.926Z","repository":{"id":56037329,"uuid":"523404648","full_name":"eylles/shed","owner":"eylles","description":"init independient user services and graceful gui session log out","archived":false,"fork":false,"pushed_at":"2025-04-03T04:46:03.000Z","size":155,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-03T05:27:25.555Z","etag":null,"topics":["0ver","daemon","linux","posix-sh","posix-shell","session-management","shell","shell-script","user-services"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eylles.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-10T15:49:26.000Z","updated_at":"2025-04-03T04:46:07.000Z","dependencies_parsed_at":"2022-08-15T12:00:20.836Z","dependency_job_id":"63354e71-baa1-45e6-8f47-1a34286f677c","html_url":"https://github.com/eylles/shed","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eylles%2Fshed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eylles%2Fshed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eylles%2Fshed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eylles%2Fshed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eylles","download_url":"https://codeload.github.com/eylles/shed/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251518956,"owners_count":21602238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["0ver","daemon","linux","posix-sh","posix-shell","session-management","shell","shell-script","user-services"],"created_at":"2024-11-11T21:20:28.585Z","updated_at":"2025-04-29T14:31:06.918Z","avatar_url":"https://github.com/eylles.png","language":"Shell","funding_links":["https://liberapay.com/eylles/donate"],"categories":[],"sub_categories":[],"readme":"# SHED\n\nAn init and service manager for user services\n\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/eylles/shed\" alt=\"GitHub\"\u003e\u003cimg src=\"https://img.shields.io/badge/Github-2B3137?style=for-the-badge\u0026logo=Github\u0026logoColor=FFFFFF\"\u003e\u003c/a\u003e\n\u003ca href=\"https://gitlab.com/eylles/shed\" alt=\"GitLab\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gitlab-380D75?style=for-the-badge\u0026logo=Gitlab\"\u003e\u003c/a\u003e\n\u003ca href=\"https://codeberg.org/eylles/shed\" alt=\"CodeBerg\"\u003e\u003cimg src=\"https://img.shields.io/badge/Codeberg-2185D0?style=for-the-badge\u0026logo=codeberg\u0026logoColor=F2F8FC\"\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-GPL--3.0-green.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://liberapay.com/eylles/donate\"\u003e\u003cimg alt=\"Donate using Liberapay\" src=\"https://img.shields.io/liberapay/receives/eylles.svg?logo=liberapay\"\u003e\u003c/a\u003e\n\u003ca href=\"https://liberapay.com/eylles/donate\"\u003e\u003cimg alt=\"Donate using Liberapay\" src=\"https://img.shields.io/liberapay/patrons/eylles.svg?logo=liberapay\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## what?\n\nSession services, programs that run as part of your graphical session, for example in x11 you have the compositor, keyring, maybe a clipboard daemon and perhaps pulseaudio or pipewire\n\n\n## dependencies\n\n- a posix compatible shell interpreter\n- core unix utilities (date, mkdir, awk, kill, mkfifo, cat)\n- ~~inotifywait from the inotify-tools package (i know freebsd got the program but not what to use in other unices)~~ no longer needed, now a named pipe is used.\n\n\n## why ?\n\nSome programs have the tendency to missbehave when started in a session process in non systemd distros, the prime example right now being pipewire which has spawned this [pipewire #1099](https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1099) and this [pipewire #1135](https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1135) as the issue comments say, this problem forced gentoo to write a wrapper and slackware to roll out a custom [daemon](https://github.com/raforg/daemon) program written in C, in my opinion both of these solutions are less than ideal, on gentoo's case they now have to roll out similar wrappers for other missbehaving programs, the slackware program looks unnecessarily overengineered as it still needs more programs to be started correctly.\n\nAnd the elephant in the room, both these solutions come out as inferior to the likes of systemd units and runit user services as they don't support restarting for reloading configurations nor a correct way for them to be started and stopped by the user.\n\nThat is why i came up with this solution that takes a lot of inspiration from the sysvinit architecture with the aim of keeping simple, intuitive and completely agnostic from any window manager and desktop environment, potentially even agnostic to any graphical environment (altho i personally only care or x11)\n\nTODO:\n\n- [ ] rewrite readme\n- [x] move the details of how shed works to another .md file\n- [x] add check if the service is running in start, kill and hup\n- [x] add service status action to shedc\n- [x] add service restart action to shedc\n- [x] add a shed daemon reply socket, so that shedc can wait that shed is reloaded.\n- [x] make shedc tail and read the reply socket\n- [ ] write bash completion scripts\n- [ ] write zsh completion scripts\n- [ ] draw a logo/icon for shed to use in the repo\n\n\n## DO NOT USE THE GIT MASTER EVER!\n\nThe git master is unstable and may break without notice, always use shed from a release tag.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feylles%2Fshed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feylles%2Fshed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feylles%2Fshed/lists"}