{"id":13478693,"url":"https://github.com/coastalwhite/lemurs","last_synced_at":"2025-05-15T04:04:24.995Z","repository":{"id":37009369,"uuid":"442593367","full_name":"coastalwhite/lemurs","owner":"coastalwhite","description":"A customizable TUI display/login manager written in Rust 🐒","archived":false,"fork":false,"pushed_at":"2025-02-22T12:40:34.000Z","size":386,"stargazers_count":875,"open_issues_count":64,"forks_count":38,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-05-13T09:54:18.227Z","etag":null,"topics":["linux","rust","unix","wayland","window-manager","x11"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coastalwhite.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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":"2021-12-28T21:57:07.000Z","updated_at":"2025-05-11T19:04:04.000Z","dependencies_parsed_at":"2024-03-30T08:28:26.756Z","dependency_job_id":"f4d54c3f-d4a6-40f9-901a-71678258755d","html_url":"https://github.com/coastalwhite/lemurs","commit_stats":{"total_commits":195,"total_committers":12,"mean_commits":16.25,"dds":"0.19999999999999996","last_synced_commit":"1d4be7d0c3f528a0c1e9326ac77f1e8a17161c83"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coastalwhite%2Flemurs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coastalwhite%2Flemurs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coastalwhite%2Flemurs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coastalwhite%2Flemurs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coastalwhite","download_url":"https://codeload.github.com/coastalwhite/lemurs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270641,"owners_count":22042858,"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":["linux","rust","unix","wayland","window-manager","x11"],"created_at":"2024-07-31T16:02:00.944Z","updated_at":"2025-05-15T04:04:24.936Z","avatar_url":"https://github.com/coastalwhite.png","language":"Rust","funding_links":[],"categories":["Rust","Display manager","linux","💻 Apps"],"sub_categories":["Console","🌌 Other"],"readme":"\u003cp align=\"center\"\u003e\n\t\u003c!-- Icon by SVGRepo under CC0. Notice at the end of the file --\u003e\n\t\u003cimg src=\"./assets/text-icon.svg\" height=\"200px\" alt=\"Lemur Icon by SVGRepo\" /\u003e\n\u003c/p\u003e\n\nLemurs is a *Terminal User Interface* (TUI) [Display/Login\nManagers](https://wiki.archlinux.org/title/Display_manager) written in Rust that\nworks on most GNU/Linux and BSD distributions. It can work both\n*with or without* SystemD.\n\n## Goal\n\nThis project creates a small, robust and yet customizable Login Manager which\ncan serve as the front-end to your TTY, X11 or Wayland sessions. Lemurs uses\n[_Pluggable Authentication Modules_][pam] (PAM) as its method of authentication.\n\n## Screenshot\n\n![Cover image](./assets/cover.png)\n\n## Installation\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/lemurs.svg)](https://repology.org/project/lemurs/versions)\n\nInstallation follows three steps.\n\n1. Compile the codebase\n2. Copy all files to correct positions\n3. Enable `init` process to run `lemurs`\n\n### Arch Linux\n\nLemurs can be installed from the [extra](https://archlinux.org/packages/?sort=\u0026q=lemurs\u0026maintainer=\u0026flagged=) repository.\n\n```bash\nsudo pacman -S lemurs\n\n# Not needed if you don't have a window manager yet\nsudo systemctl disable display-manager.service\n\nsudo systemctl enable lemurs.service\n```\n\nAlternatively, [lemurs-git](https://aur.archlinux.org/packages/lemurs-git) is available in the AUR.\n\n### Compiling from source\n\nThe `install.sh` script can be used to compile and setup the display manager on\nyour Unix machine. This will perform multiple steps:\n\n1. Build the project in release mode (requires Rust's _cargo_)\n2. Setup the `/etc/lemurs` folder which contains some of the configuration and\n   necessary files such as your selection of window managers.\n3. Disables the previous Display Manager\n4. Copies over the _systemd_ service and enables it.\n\nAlthough you might first want to set up some window managers (see\n[Usage](#Usage)), upon rebooting you should now see Lemurs.\n\n## Usage\n\nAfter installation you can add your environments by creating runnable scripts.\n\nFor your Xorg put your [xinitrc](https://wiki.archlinux.org/title/Xinit) scripts\nin the `/etc/lemurs/wms` directory. For Wayland, put a script that starts your\ncompositor in the `/etc/lemurs/wayland` directory. For both cases, the name of\nthe runnable script file is the name that is shown in the environment switcher\nwithin lemurs. Multiple Xorg and Wayland environments can exist at the same time.\n\n### Example 1: BSPWM\n\nFor the [bspwm](https://github.com/baskerville/bspwm) window manager, you might\nadd the script `/etc/lemurs/wms/bspwm`.\n\n```bash\n#! /bin/sh\nsxhkd \u0026\nexec bspwm\n```\n\nRemember to make this script runnable. This is done with the `sudo chmod 755\n/etc/lemurs/wms/bspwm` command.\n\nUpon rebooting your new `bspwm` should show up within Lemurs.\n\n### Example 2: Sway\n\nFor the [sway](https://swaywm.org/) compositor and window manager, you might\nadd the script `/etc/lemurs/wayland/sway`. Ensure that you have sway installed\nand added yourself to the `seat` group.\n\n```bash\n#! /bin/sh\nexec sway\n```\n\nRemember to make this script runnable. This is done with the `sudo chmod 755\n/etc/lemurs/wayland/sway` command.\n\nUpon rebooting your new `sway` should show up within Lemurs.\n\n## Configuration\n\nConfiguration is done through a [TOML] file. By default, Lemurs searches for a\n`/etc/lemurs/config.toml` file, but an alternative location can be specified\nusing the `--config \u003cpath/to/config.toml\u003e` flag. The configuration type can\ncontain any subset of the available options. All the options and explanations\nas to what they do can be found in the\n[`extra/config.toml`](./extra/config.toml) file. This file also serves as the\ndefault configuration.\n\nAdditionally, there is the possibility of variables in the configuration file.\nBy default, Lemurs searches for a `/etc/lemurs/variables.toml` file, but an\nalternative location can be specified using the `--variables\n\u003cpath/to/variables.toml`. The `variables.toml` file may contain key-value pairs\nwhich can be referenced from within the main `config.toml` file. \n\nBelow shows an example of how the `variables.toml` and `config.toml` file\ninteract.\n\n```toml\n# variables.toml\nreplacement_char = \"+\"\nshow_pw_title = true\npassword_title = \"Password :)\"\ntitle_color = \"white\"\n\n# config.toml\n[password_field]\ncontent_replacement_character = \"$replacement_char\"\n\n[password_field.style]\nshow_title = \"$show_pw_title\"\ntitle = \"Wow a $password_title\"\ntitle_color = \"$title_color\"\n```\n\nThis will be interpreted as:\n\n```toml\n[password_field]\ncontent_replacement_character = \"+\"\n\n[password_field.style]\nshow_title = true\ntitle = \"Wow a Password :)\"\ntitle_color = \"white\"\n```\n\n## Preview \u0026 Debugging\n\nLemurs logs a lot of information of it running to a logging file. There are 3\nlog files.\n\n- `/var/log/lemurs.log`: This is the main log file that contains information\n  about the control flow and is the first place you should look.\n- `/var/log/lemurs.client.log`: This is the `stdout` and `stderr` of your\n  environment. This can help you debug your scripts in the `/etc/lemurs/wms` or\n  `/etc/lemurs/wayland` folder.\n- `/var/log/lemurs.xorg.log`: This is the `stdout` and `stderr` of the X server.\n  This is only used when you run a X11 based environment.\n\nYou can disable logging with the `--no-log` flag. This flag can be adding into\nyour service manager script if you want to disable logging globally.\n\nIf you want to test the UI generated by your configuration file you can also run\n`lemurs --preview`. This will run a preview instance of your configuration. This\nwill automatically create a `lemurs.log` in the working directory.\n\n## File Structure\n\nBelow is overview of the source files in this project and a short description of\neach of them and their use. This can be used by people who want to contribute or\nwant to tweak details for their own installation.\n\n```\n|- src: Rust Source Code\n|  |- main.rs\n|  |- chvt.rs: UNIX calls to change of TTY\n|  |- cli.rs: CLI argument parsing\n|  |- config.rs: Configuration file format and options\n|  |- env_container.rs: Handles resetting and resetting the environment variables\n|  |- info_caching.rs: Handling cached username and session environment\n|  |- auth: Interaction with PAM modules and UTMPX\n|  |  |- mod.rs\n|  |  |- pam.rs\n|  |  |- utmpx.rs\n|  |- post_login: All logic after authentication\n|  |  |- mod.rs\n|  |  |- env_variables.rs: General environment variables settings\n|  |  |- x.rs: Logic concerning Xorg\n|  |- ui: TUI code\n|  |  |- mod.rs: UI calling logic, separated over 2 threads\n|  |  |- chunks.rs: Division of the TUI screen\n|  |  |- input_field.rs: TUI input field used for username and password\n|  |  |- power_menu.rs: Shutdown and Reboot options UI\n|  |  |- status_message.rs: UI for error and information messages\n|  |  |- switcher.rs: UI for environment switcher\n|- extra: Configuration and extra files needed\n|  |- config.toml: The default configuration file\n|  |- xsetup.sh: Script used to setup a Xorg session\n|  |- lemurs.service: The systemd service used to start at boot\n|  |- lemurs.pam: PAM service configuration\n```\n\n## Shell Keybindings\n\nLemurs has support for some basic shell keybindings.\n\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eA\u003c/kbd\u003e: Go to the beginning of the focused input field\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eE\u003c/kbd\u003e: Go to the end of the focused input field\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eL\u003c/kbd\u003e: Clear the focused input field\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eU\u003c/kbd\u003e: Clear input field text before the cursor\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eK\u003c/kbd\u003e: Clear input field text after the cursor\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eD\u003c/kbd\u003e: Same as \u003ckbd\u003eDelete\u003c/kbd\u003e\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eH\u003c/kbd\u003e: Same as \u003ckbd\u003eBackspace\u003c/kbd\u003e\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eB\u003c/kbd\u003e: Same as \u003ckbd\u003eLeft\u003c/kbd\u003e\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eF\u003c/kbd\u003e: Same as \u003ckbd\u003eRight\u003c/kbd\u003e\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eP\u003c/kbd\u003e: Same as \u003ckbd\u003eUp\u003c/kbd\u003e\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eN\u003c/kbd\u003e: Same as \u003ckbd\u003eDown\u003c/kbd\u003e\n\n## Platforms\n\nTested on\n\n- ArchLinux (Vanilla, ArcoLinux)\n- VoidLinux\n- Ubuntu (make sure to install `build-essential` and `libpam-dev`)\n- OpenSUSE (make sure to install `pam` and `pam-devel`)\n\n## MSRV Policy\n\nLemurs has a _Minimum Supported Rust Version_ policy of _N - 2_. This means that\nwe only use Rust languages features that have been in Rust as of 2 releases.\n\n## License\n\nThe icon used at the top of the repository is not a logo and taken as an icon\nfrom the [SVGRepo](https://www.svgrepo.com/svg/252871/lemur). It is marked\nunder CC0 and therefore freely distributable and amendable under a new\nlicense.\n\nThe project is made available under the MIT and APACHE license. See the\n`LICENSE-MIT` and `LICENSE-APACHE` files, respectively, for more information.\n\n## Contributions\n\nPlease report any bugs and possible improvements as an issue within this\nrepository. Pull requests are also welcome.\n\n[pam]: https://en.wikipedia.org/wiki/Pluggable_authentication_module\n[TOML]: https://toml.io/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoastalwhite%2Flemurs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoastalwhite%2Flemurs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoastalwhite%2Flemurs/lists"}