{"id":13439144,"url":"https://github.com/fairyglade/ly","last_synced_at":"2025-07-26T02:19:01.811Z","repository":{"id":36968308,"uuid":"92203868","full_name":"fairyglade/ly","owner":"fairyglade","description":"display manager with console UI","archived":false,"fork":false,"pushed_at":"2024-08-15T13:36:48.000Z","size":591,"stargazers_count":5187,"open_issues_count":110,"forks_count":310,"subscribers_count":44,"default_branch":"master","last_synced_at":"2024-08-18T12:05:10.080Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fairyglade.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","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":"2017-05-23T18:02:53.000Z","updated_at":"2024-08-18T12:05:15.943Z","dependencies_parsed_at":"2024-04-03T00:41:16.508Z","dependency_job_id":"7c16fa4c-8df5-47cf-89ff-9ee1fd399971","html_url":"https://github.com/fairyglade/ly","commit_stats":null,"previous_names":["nullgemm/ly","cylgom/ly"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairyglade%2Fly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairyglade%2Fly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairyglade%2Fly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairyglade%2Fly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fairyglade","download_url":"https://codeload.github.com/fairyglade/ly/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244570881,"owners_count":20474141,"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":[],"created_at":"2024-07-31T03:01:11.506Z","updated_at":"2025-07-26T02:19:01.797Z","avatar_url":"https://github.com/fairyglade.png","language":"Zig","funding_links":[],"categories":["C","Zig","Display Manager","Misc","linux"],"sub_categories":["VSCode"],"readme":"# Ly - a TUI display manager\n\n![Ly screenshot](.github/screenshot.png \"Ly screenshot\")\n\nLy is a lightweight TUI (ncurses-like) display manager for Linux and BSD.\n\nJoin us on Matrix over at [#ly:envs.net](https://matrix.to/#/#ly:envs.net)!\n\n**Note**: Development happens on [Codeberg](https://codeberg.org/AnErrupTion/ly) with a mirror on [GitHub](https://github.com/fairyglade/ly).\n\n## Dependencies\n\n- Compile-time:\n  - zig 0.14.0\n  - libc\n  - pam\n  - xcb (optional, required by default; needed for X11 support)\n- Runtime (with default config):\n  - xorg\n  - xorg-xauth\n  - shutdown\n  - brightnessctl\n\n### Debian\n\n```\n# apt install build-essential libpam0g-dev libxcb-xkb-dev\n```\n\n### Fedora\n\n**Warning**: You may encounter issues with SELinux on Fedora.\nIt is recommended to add a rule for Ly as it currently does not ship one.\n\n```\n# dnf install kernel-devel pam-devel libxcb-devel zig\n```\n\n## Support\n\nThe following desktop environments were tested with success:\n\n[Wayland Environments](#supported-wayland-environments)\n\n[X11 Environments](#supported-x11-environments)\n\nLy should work with any X desktop environment, and provides\nbasic wayland support (sway works very well, for example).\n\n## systemd?\n\nUnlike what you may have heard, Ly does not require `systemd`,\nand was even specifically designed not to depend on `logind`.\nYou should be able to make it work easily with a better init,\nchanging the source code won't be necessary :)\n\n## Cloning and Compiling\n\nClone the repository\n\n```\n$ git clone https://codeberg.org/AnErrupTion/ly\n```\n\nChange the directory to ly\n\n```\n$ cd ly\n```\n\nCompile\n\n```\n$ zig build\n```\n\nTest in the configured tty (tty2 by default)\nor a terminal emulator (but authentication won't work)\n\n```\n$ zig build run\n```\n\n**Important**: Running Ly in a terminal emulator as root is _not_ recommended. If you\nwant to properly test Ly, please enable its service (as described below) and reboot\nyour machine.\n\nInstall Ly for systemd-based systems (the default)\n\n```\n# zig build installexe\n```\n\nInstead of DISPLAY_MANAGER you need to add your DM:\n\n- gdm.service\n- sddm.service\n- lightdm.service\n\n```\n# systemctl disable DISPLAY_MANAGER\n```\n\nEnable the service\n\n```\n# systemctl enable ly.service\n```\n\nIf you need to switch between ttys after Ly's start you also have to\ndisable getty on Ly's tty to prevent \"login\" from spawning on top of it\n\n```\n# systemctl disable getty@tty2.service\n```\n\n### OpenRC\n\n**NOTE 1**: On Gentoo, Ly will disable the `display-manager-init` service in order to run.\n\nClone, compile and test.\n\nInstall Ly and the provided OpenRC service\n\n```\n# zig build installexe -Dinit_system=openrc\n```\n\nEnable the service\n\n```\n# rc-update add ly\n```\n\nYou can edit which tty Ly will start on by editing the `tty` option in the configuration file.\n\nIf you choose a tty that already has a login/getty running (has a basic login prompt),\nthen you have to disable getty, so it doesn't respawn on top of ly\n\n```\n# rc-update del agetty.tty2\n```\n\n**NOTE 2**: To avoid a console spawning on top on Ly, comment out the appropriate line from /etc/inittab (default is 2).\n\n### runit\n\n```\n# zig build installexe -Dinit_system=runit\n# ln -s /etc/sv/ly /var/service/\n```\n\nBy default, ly will run on tty2. To change the tty it must be set in `/etc/ly/config.ini`\n\nYou should as well disable your existing display manager service if needed, e.g.:\n\n```\n# rm /var/service/lxdm\n```\n\nThe agetty service for the tty console where you are running ly should be disabled.\nFor instance, if you are running ly on tty2 (that's the default, check your `/etc/ly/config.ini`)\nyou should disable the agetty-tty2 service like this:\n\n```\n# rm /var/service/agetty-tty2\n```\n\n### s6\n\n```\n# zig build installexe -Dinit_system=s6\n```\n\nThen, edit `/etc/s6/config/ttyX.conf` and set `SPAWN=\"no\"`, where X is the TTY ID (e.g. `2`).\n\nFinally, enable the service:\n\n```\n# s6-service add default ly-srv\n# s6-db-reload\n# s6-rc -u change ly-srv\n```\n\n### dinit\n\n```\n# zig build installexe -Dinit_system=dinit\n# dinitctl enable ly\n```\n\nIn addition to the steps above, you will also have to keep a TTY free within `/etc/dinit.d/config/console.conf`.\n\nTo do that, change `ACTIVE_CONSOLES` so that the tty that ly should use in `/etc/ly/config.ini` is free.\n\n### Updating\n\nYou can also install Ly without overrding the current configuration file. That's called\n_updating_. To update, simply run:\n\n```\n# zig build installnoconf\n```\n\nYou can, of course, still select the init system of your choice when using this command.\n\n## Arch Linux Installation\n\nYou can install ly from the [`[extra]` repos](https://archlinux.org/packages/extra/x86_64/ly/):\n\n```\n# pacman -S ly\n```\n\n## Gentoo Installation\n\nYou can install ly from the GURU repository:\n\nNote: If the package is masked, you may need to unmask it using ~amd64 keyword:\n\n```bash\n# echo 'x11-misc/ly ~amd64' \u003e\u003e /etc/portage/package.accept_keywords\n```\n\n1. Enable the GURU repository:\n\n```bash\n# eselect repository enable guru\n```\n\n2. Sync the GURU repository:\n\n```bash\n# emaint sync -r guru\n```\n\n3. Install ly from source:\n\n```bash\n# emerge --ask x11-misc/ly\n```\n\n## Configuration\n\nYou can find all the configuration in `/etc/ly/config.ini`.\nThe file is commented, and includes the default values.\n\n## Controls\n\nUse the up and down arrow keys to change the current field, and the\nleft and right arrow keys to change the target desktop environment\nwhile on the desktop field (above the login field).\n\n## .xinitrc\n\nIf your .xinitrc doesn't work make sure it is executable and includes a shebang.\nThis file is supposed to be a shell script! Quoting from xinit's man page:\n\n\u003e If no specific client program is given on the command line, xinit will look for a file in the user's home directory called .xinitrc to run as a shell script to start up client programs.\n\nOn Arch Linux, the example .xinitrc (/etc/X11/xinit/xinitrc) starts like this:\n\n```\n#!/bin/sh\n```\n\n## Tips\n\n- The numlock and capslock state is printed in the top-right corner.\n- Use the F1 and F2 keys to respectively shutdown and reboot.\n- Take a look at your .xsession if X doesn't start, as it can interfere\n  (this file is launched with X to configure the display properly).\n\n## Supported Wayland Environments\n\n- budgie\n- cosmic\n- deepin\n- enlightenment\n- gnome\n- hyprland\n- kde\n- labwc\n- niri\n- pantheon\n- sway\n- weston\n\n## Supported X11 Environments\n\n- awesome\n- bspwm\n- budgie\n- cinnamon\n- dwm\n- enlightenment\n- gnome\n- kde\n- leftwm\n- lxde\n- mate\n- maxx\n- pantheon\n- qwm\n- spectrwm\n- windowmaker\n- xfce\n- xmonad\n\n## Additional Information\n\nThe name \"Ly\" is a tribute to the fairy from the game Rayman.\nLy was tested by oxodao, who is some seriously awesome dude.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairyglade%2Fly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffairyglade%2Fly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairyglade%2Fly/lists"}