From 978aaad19933dcc28cb5e785e0ea654cf479ff96 Mon Sep 17 00:00:00 2001 From: javalsai Date: Tue, 20 Jan 2026 23:33:28 +0100 Subject: [PATCH] chore: misc (#100) (this makes 2.0.0) Co-authored-by: grialion <48643945+grialion@users.noreply.github.com> - Fix license ambiguity (#88) - just the only/or-later ambiguity point, not adding SPDX identifyiers unless more people request it - Better document kmscon (#91) - Make 2.0.0 already to close #86 - Add a changelog - Add packagers info (acutally just add them to install guide) - Add AUR service packages (I'll take care of systemd and dinit, let others package the rest and leave systemd open for someone who actually uses it in docs) - Make sure all makefile installs to `/usr/local` by default - Simplify Makefile complexity by several orders --- .gitignore | 2 - CHANGELOG.md | 10 ++ Makefile | 140 +++++-------------------- README.md | 11 +- assets/pkg/aur/lidm-bin/.SRCINFO | 5 +- assets/pkg/aur/lidm-bin/PKGBUILD | 6 +- assets/pkg/aur/lidm-dinit/.SRCINFO | 12 +++ assets/pkg/aur/lidm-dinit/.gitignore | 3 + assets/pkg/aur/lidm-dinit/PKGBUILD | 17 +++ assets/pkg/aur/lidm-git/.SRCINFO | 7 +- assets/pkg/aur/lidm-git/PKGBUILD | 8 +- assets/pkg/aur/lidm-systemd/.SRCINFO | 12 +++ assets/pkg/aur/lidm-systemd/.gitignore | 3 + assets/pkg/aur/lidm-systemd/PKGBUILD | 17 +++ assets/pkg/aur/lidm/.SRCINFO | 5 +- assets/pkg/aur/lidm/PKGBUILD | 6 +- assets/pkg/aur/makepkg-clean.sh | 2 +- assets/pkg/aur/test-makepkg.sh | 2 +- assets/pkg/aur/update-pkgs.sh | 2 +- assets/services/README.md | 17 +-- docs/INSTALL.md | 134 ++++++++++++++++------- docs/PACKAGERS.md | 6 +- services.mk | 90 ++++++++++++++++ src/main.c | 1 - 24 files changed, 330 insertions(+), 188 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 assets/pkg/aur/lidm-dinit/.SRCINFO create mode 100644 assets/pkg/aur/lidm-dinit/.gitignore create mode 100644 assets/pkg/aur/lidm-dinit/PKGBUILD create mode 100644 assets/pkg/aur/lidm-systemd/.SRCINFO create mode 100644 assets/pkg/aur/lidm-systemd/.gitignore create mode 100644 assets/pkg/aur/lidm-systemd/PKGBUILD create mode 100644 services.mk diff --git a/.gitignore b/.gitignore index 34588b2..097f96e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,3 @@ valgrind-out.txt # nix build result result - -include/version.h diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5e55b19 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ + + + + + + +- Most stuff (most of `/etc` being a notable exception) now installs to `/usr/local` by default, check [`docs/PACKAGERS.md`](./docs/PACKAGERS.md). +- Added a changelog. +- Finally add proper (experimental) xorg support. +- Systemd service install path changed to `/usr/local/lib/systemd`, there could be a leftover file at `/etc/systemd/system/lidm.service`. diff --git a/Makefile b/Makefile index 0f6460d..2baa46f 100644 --- a/Makefile +++ b/Makefile @@ -1,41 +1,32 @@ -VERSION = 1.2.3 +VERSION = 2.0.0 .DEFAULT_GOAL := lidm -CDIR=src -LDIR=lib -IDIR=include -ODIR=dist +CDIR = src +LDIR = lib +IDIR = include +ODIR = dist -PREFIX=/usr +PREFIX = /usr/local -CC?=gcc -CFLAGS?=-O3 -Wall -Wextra -fdata-sections -ffunction-sections +INFO_GIT_REV ?= $(shell git describe --long --tags --always || echo '?') +INFO_BUILD_TS ?= $(shell date +%s) + +CFLAGS ?= -O3 -Wall -Wextra -fdata-sections -ffunction-sections # C PreProcessor flags, not C Plus Plus -CPPFLAGS?= -ALLFLAGS=$(CFLAGS) $(CPPFLAGS) -I$(IDIR) -LDFLAGS?=-Wl,--gc-sections +CPPFLAGS ?= +_DFLAGS?= \ + -DLIDM_VERSION=\"$(VERSION)\" \ + -DLIDM_GIT_REV=\"$(INFO_GIT_REV)\" \ + -DLIDM_BUILD_TS=$(INFO_BUILD_TS) +ALLFLAGS = $(_DFLAGS) $(CFLAGS) $(CPPFLAGS) -I$(IDIR) +LDFLAGS ?= -Wl,--gc-sections -LIBS=-lpam +LIBS = -lpam -_DEPS = version.h log.h util.h ui.h ui_state.h config.h pam.h desktop.h desktop_exec.h auth.h ofield.h efield.h keys.h users.h sessions.h chvt.h macros.h launch_state.h signal_handler.h -DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) - -_OBJ = main.o log.o util.o ui.o ui_state.o config.o pam.o desktop.o desktop_exec.o auth.o ofield.o efield.o users.o sessions.o chvt.o launch_state.o signal_handler.o -OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) - -INFO_GIT_REV?=$$(git describe --long --tags --always || echo '?') -INFO_BUILD_TS?=$$(date +%s) - -$(IDIR)/version.h: Makefile - @tmp=$$(mktemp); \ - printf '' > $$tmp; \ - echo '#define LIDM_VERSION "'$(VERSION)'"' >> $$tmp; \ - echo '#define LIDM_GIT_REV "'$(INFO_GIT_REV)'"' >> $$tmp; \ - echo '#define LIDM_BUILD_TS '$(INFO_BUILD_TS) >> $$tmp; \ - if ! cmp -s $$tmp $@; then \ - mv $$tmp $@; \ - fi; \ - rm -f $$tmp; +# includes all headers in `$(IDIR)` and compiles everything in `$(CDIR)` +DEPS = $(wildcard $(IDIR)/*.h) +_SOURCES = $(notdir $(wildcard $(CDIR)/*.c)) +OBJ = $(patsubst %.c,$(ODIR)/%.o,$(_SOURCES)) $(ODIR)/%.o: $(CDIR)/%.c $(DEPS) @mkdir -p $(ODIR) @@ -47,7 +38,6 @@ lidm: $(OBJ) clean: rm -f $(ODIR)/*.o lidm -# Copy lidm to ${DESTDIR}${PREFIX}/bin (/usr/bin) install: lidm mkdir -p ${DESTDIR}${PREFIX}/bin ${DESTDIR}${PREFIX}/share/man/man{1,5} install -Dm755 ./lidm ${DESTDIR}${PREFIX}/bin/ @@ -55,83 +45,11 @@ install: lidm install -Dm644 ./assets/man/lidm.1 ${DESTDIR}${PREFIX}/share/man/man1/ install -Dm644 ./assets/man/lidm-config.5 ${DESTDIR}${PREFIX}/share/man/man5/ -uninstall: +uninstall: uninstall-service rm -rf ${DESTDIR}${PREFIX}/bin/lidm ${DESTDIR}/etc/lidm.ini - rm -rf ${DESTDIR}/usr/share/man/man{1/lidm.1,5/lidm-config.5}.gz - rm -rf ${DESTDIR}/usr/local/lib/systemd/system/lidm.service ${DESTDIR}/etc/dinit.d/lidm ${DESTDIR}/etc/runit/sv/lidm + rm -rf ${DESTDIR}${PREFIX}/share/man/man{1/lidm.1,5/lidm-config.5}.gz -install-service: - @if command -v systemctl &> /dev/null; then \ - make install-service-systemd; \ - elif command -v dinitctl &> /dev/null; then \ - make install-service-dinit; \ - elif command -v sv &> /dev/null; then \ - if [ -d /etc/sv ]; then \ - make install-service-runit; \ - elif [ -d /etc/runit/sv ]; then \ - make install-service-runit-etc; \ - else \ - printf '\033[31m%s\033[0m\n' "Unknown init system structure, skipping service install..." >&2; \ - fi \ - elif command -v rc-update &> /dev/null; then \ - make install-service-openrc; \ - elif command -v s6-service &> /dev/null; then \ - if [ -d /etc/sv ]; then \ - make install-service-s6; \ - elif [ -d /etc/r6nit/sv ]; then \ - make install-service-s6-etc; \ - else \ - printf '\033[31m%s\033[0m\n' "Unknown init system structure, skipping service install..." >&2; \ - fi \ - else \ - printf '\033[1;31m%s\033[0m\n' "Unknown init system, skipping service install..." >&2; \ - fi - -install-service-systemd: - install -Dm644 ./assets/services/systemd.service ${DESTDIR}/usr/local/lib/systemd/system/lidm.service - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'systemctl enable lidm'" -install-service-dinit: - install -m644 ./assets/services/dinit ${DESTDIR}/etc/dinit.d/lidm - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'dinitctl enable lidm'" -install-service-runit: - @if [ ! -e /etc/sv ] && [ -d /etc/runit/sv ] && [ -z "$FORCE" ]; then \ - printf '\033[31m%s\033[0m\n' "/etc/sv doesn't exist but /etc/runit/sv does" >&2; \ - printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-runit-etc'" >&2; \ - exit 1; \ - fi - mkdir -p ${DESTDIR}/etc/sv/lidm - cp -r --update=all ./assets/services/runit/* ${DESTDIR}/etc/sv/lidm/ - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'ln -s ${DESTDIR}/etc/sv/lidm /var/service' or your distro equivalent" -install-service-runit-etc: - @if [ ! -e /etc/runit/sv ] && [ -d /etc/sv ] && [ -z "$FORCE" ]; then \ - printf '\033[31m%s\033[0m\n' "/etc/runit/sv doesn't exist but /etc/sv does" >&2; \ - printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-runit'" >&2; \ - exit 1; \ - fi - mkdir -p ${DESTDIR}/etc/runit/sv/lidm - cp -r --update=all ./assets/services/runit/* ${DESTDIR}/etc/runit/sv/lidm/ - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'ln -s ${DESTDIR}/etc/runit/sv/lidm /run/runit/service' or your distro equivalent" -install-service-openrc: - install -m755 ./assets/services/openrc ${DESTDIR}/etc/init.d/lidm - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'rc-update add lidm'" -install-service-s6: - @if [ ! -e /etc/sv ] && [ -d /etc/s6/sv ] && [ -z "$FORCE" ]; then \ - printf '\033[31m%s\033[0m\n' "/etc/sv doesn't exist but /etc/s6/sv does" >&2; \ - printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-s6-etc'" >&2; \ - exit 1; \ - fi - mkdir -p ${DESTDIR}/etc/sv/lidm - cp -r --update=all ./assets/services/s6/* ${DESTDIR}/etc/sv/lidm/ - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 's6-service add default lidm' and 's6-db-reload'" -install-service-s6-etc: - @if [ ! -e /etc/s6/sv ] && [ -d /etc/sv ] && [ -z "$FORCE" ]; then \ - printf '\033[31m%s\033[0m\n' "/etc/s6/sv doesn't exist but /etc/sv does" >&2; \ - printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-s6'" >&2; \ - exit 1; \ - fi - mkdir -p ${DESTDIR}/etc/s6/sv/lidm - cp -r --update=all ./assets/services/s6/* ${DESTDIR}/etc/s6/sv/lidm/ - @printf '\033[1m%s\033[0m\n\n' " don't forget to run 's6-service add default lidm' and 's6-db-reload'" +include services.mk pre-commit: codespell @@ -147,13 +65,5 @@ print-version: .PHONY: clean \ install uninstall \ - install-service \ - install-service-s6 \ - install-service-s6-etc \ - install-service-dinit \ - install-service-runit \ - install-service-runit-etc \ - install-service-openrc \ - install-service-systemd \ pre-commit \ print-version diff --git a/README.md b/README.md index ecbea96..efd7dcf 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,16 @@ LiDM is like any [Display Manager](https://en.wikipedia.org/wiki/X_display_manag shown as in a featured terminal emulator, actual linux console doesn't support as much color and decorations -If you want to add fancy color and font support to your TTYs you can wrap lidm in [`kmscon`](https://wiki.archlinux.org/title/KMSCON). (edit appropriate service files). e.g: +If you want to add fancy color and font support to your TTYs you can try wrapping lidm in [`kmscon`](https://wiki.archlinux.org/title/KMSCON). (edit appropriate service files). e.g: ```sh kmscon -l --vt /dev/tty7 --font-name "Cascadia Code" -- /usr/bin/lidm ``` +Kmscon is NOT officially supported so you are on your own when trying this, [according to the arch wiki](https://wiki.archlinux.org/title/KMSCON#Window_managers_cannot_be_started_from_KMS_console) it's not possible to start window managers if you do this. + +But [according to farouk](https://github.com/javalsai/lidm/issues/91#issuecomment-3708503568) you can make it work if you tell kmscon to work in `no-drm` mode. There's still input grabbing issues which cause Ctrl + C to kill lidm, they are likely fixable though. + > _however, all colors and strings are fully customizable_ @@ -44,6 +48,7 @@ kmscon -l --vt /dev/tty7 --font-name "Cascadia Code" -- /usr/bin/lidm - [Configuring](#configuring) - [PAM](#pam) - [Contributing](#contributing) +- [License](#license) - [Inspiration](#inspiration) - [Contributors](#contributors) @@ -117,6 +122,10 @@ When the env variable is empty it defaults to the `login` PAM service or whateve If you want to contribute check the [contribution guide](docs/CONTRIBUTING.md). +# License + +This project is licensed under the GNU General Public License v3.0 **only**. + # Inspiration This project was started after facing some issues building [ly](https://github.com/fairyglade/ly) on an ancient laptop, the UI is heavily inspired by it. diff --git a/assets/pkg/aur/lidm-bin/.SRCINFO b/assets/pkg/aur/lidm-bin/.SRCINFO index cd50a98..5900dff 100644 --- a/assets/pkg/aur/lidm-bin/.SRCINFO +++ b/assets/pkg/aur/lidm-bin/.SRCINFO @@ -1,15 +1,16 @@ pkgbase = lidm-bin pkgdesc = A fully colorful customizable TUI display manager made in C. (release binary) pkgver = 1.2.3 - pkgrel = 3 + pkgrel = 4 url = https://github.com/javalsai/lidm arch = x86_64 arch = i686 arch = aarch64 arch = armv7h arch = riscv64 - license = GPL + license = GPL-3.0-only depends = libpam.so + depends = lidm-service provides = lidm conflicts = lidm source = lidm-default-theme-1.2.3.ini::https://raw.githubusercontent.com/javalsai/lidm/v1.2.3/themes/default.ini diff --git a/assets/pkg/aur/lidm-bin/PKGBUILD b/assets/pkg/aur/lidm-bin/PKGBUILD index db9293c..d69fa06 100644 --- a/assets/pkg/aur/lidm-bin/PKGBUILD +++ b/assets/pkg/aur/lidm-bin/PKGBUILD @@ -2,12 +2,12 @@ # Maintainer: javalsai pkgname=lidm-bin pkgver=1.2.3 -pkgrel=3 -depends=('libpam.so') +pkgrel=4 +depends=('libpam.so' 'lidm-service') pkgdesc="A fully colorful customizable TUI display manager made in C. (release binary)" arch=('x86_64' 'i686' 'aarch64' 'armv7h' 'riscv64') url="https://github.com/javalsai/lidm" -license=('GPL') +license=('GPL-3.0-only') provides=('lidm') conflicts=('lidm') source=( diff --git a/assets/pkg/aur/lidm-dinit/.SRCINFO b/assets/pkg/aur/lidm-dinit/.SRCINFO new file mode 100644 index 0000000..8831cc8 --- /dev/null +++ b/assets/pkg/aur/lidm-dinit/.SRCINFO @@ -0,0 +1,12 @@ +pkgbase = lidm-dinit + pkgdesc = A fully colorful customizable TUI display manager made in C. (dinit service files) + pkgver = 1.2.3 + pkgrel = 1 + url = https://github.com/javalsai/lidm + arch = any + license = GPL-3.0-only + provides = lidm-service + source = lidm-dinit-1.2.3-dinit::https://raw.githubusercontent.com/javalsai/lidm/v1.2.3/assets/services/dinit + sha256sums = 185cd76c1d29ddc73cf96be999f13278a427bb80aa9169f25f30673ad2de3770 + +pkgname = lidm-dinit diff --git a/assets/pkg/aur/lidm-dinit/.gitignore b/assets/pkg/aur/lidm-dinit/.gitignore new file mode 100644 index 0000000..1d65adf --- /dev/null +++ b/assets/pkg/aur/lidm-dinit/.gitignore @@ -0,0 +1,3 @@ +* +!PKGBUILD +!.SRCINFO diff --git a/assets/pkg/aur/lidm-dinit/PKGBUILD b/assets/pkg/aur/lidm-dinit/PKGBUILD new file mode 100644 index 0000000..06f0771 --- /dev/null +++ b/assets/pkg/aur/lidm-dinit/PKGBUILD @@ -0,0 +1,17 @@ +# shellcheck disable=SC2034,SC2154,SC2164 +# Maintainer: javalsai +pkgname=lidm-dinit +pkgver=1.2.3 +pkgrel=1 +pkgdesc="A fully colorful customizable TUI display manager made in C. (dinit service files)" +provides=('lidm-service') +arch=('any') +url="https://github.com/javalsai/lidm" +license=('GPL-3.0-only') +source=("${pkgname}-${pkgver}-dinit::https://raw.githubusercontent.com/javalsai/lidm/v1.2.3/assets/services/dinit") +sha256sums=('185cd76c1d29ddc73cf96be999f13278a427bb80aa9169f25f30673ad2de3770') + +package() { + cd "$srcdir" + install -Dm0644 "${pkgname}-${pkgver}-dinit" "$pkgdir/etc/dinit.d/lidm" +} diff --git a/assets/pkg/aur/lidm-git/.SRCINFO b/assets/pkg/aur/lidm-git/.SRCINFO index 76f624b..c52fcd7 100644 --- a/assets/pkg/aur/lidm-git/.SRCINFO +++ b/assets/pkg/aur/lidm-git/.SRCINFO @@ -1,12 +1,13 @@ pkgbase = lidm-git pkgdesc = A fully colorful customizable TUI display manager made in C. (last git commit) - pkgver = 1.2.3.r3.g363deea - pkgrel = 3 + pkgver = 1.2.3.r12.g7e7a297 + pkgrel = 1 url = https://github.com/javalsai/lidm arch = any - license = GPL + license = GPL-3.0-only makedepends = git depends = pam + depends = lidm-service provides = lidm conflicts = lidm source = lidm::git+https://github.com/javalsai/lidm diff --git a/assets/pkg/aur/lidm-git/PKGBUILD b/assets/pkg/aur/lidm-git/PKGBUILD index 9918e09..bb67661 100644 --- a/assets/pkg/aur/lidm-git/PKGBUILD +++ b/assets/pkg/aur/lidm-git/PKGBUILD @@ -1,14 +1,14 @@ # shellcheck disable=SC2034,SC2154,SC2164 # Maintainer: javalsai pkgname=lidm-git -pkgver=1.2.3.r3.g363deea -pkgrel=3 -depends=('pam') +pkgver=1.2.3.r13.g9cf5297 +pkgrel=1 +depends=('pam' 'lidm-service') makedepends=('git') pkgdesc="A fully colorful customizable TUI display manager made in C. (last git commit)" arch=('any') url="https://github.com/javalsai/lidm" -license=('GPL') +license=('GPL-3.0-only') provides=('lidm') conflicts=('lidm') source=("lidm::git+https://github.com/javalsai/lidm") diff --git a/assets/pkg/aur/lidm-systemd/.SRCINFO b/assets/pkg/aur/lidm-systemd/.SRCINFO new file mode 100644 index 0000000..3a3a0e0 --- /dev/null +++ b/assets/pkg/aur/lidm-systemd/.SRCINFO @@ -0,0 +1,12 @@ +pkgbase = lidm-systemd + pkgdesc = A fully colorful customizable TUI display manager made in C. (systemd service files) + pkgver = 1.2.3 + pkgrel = 1 + url = https://github.com/javalsai/lidm + arch = any + license = GPL-3.0-only + provides = lidm-service + source = lidm-systemd-1.2.3-systemd::https://raw.githubusercontent.com/javalsai/lidm/v1.2.3/assets/services/systemd.service + sha256sums = e63464441a97102194994adc82159871ccd3f23d5e97224f21a460e4296364cc + +pkgname = lidm-systemd diff --git a/assets/pkg/aur/lidm-systemd/.gitignore b/assets/pkg/aur/lidm-systemd/.gitignore new file mode 100644 index 0000000..1d65adf --- /dev/null +++ b/assets/pkg/aur/lidm-systemd/.gitignore @@ -0,0 +1,3 @@ +* +!PKGBUILD +!.SRCINFO diff --git a/assets/pkg/aur/lidm-systemd/PKGBUILD b/assets/pkg/aur/lidm-systemd/PKGBUILD new file mode 100644 index 0000000..1ba2e1b --- /dev/null +++ b/assets/pkg/aur/lidm-systemd/PKGBUILD @@ -0,0 +1,17 @@ +# shellcheck disable=SC2034,SC2154,SC2164 +# Maintainer: javalsai +pkgname=lidm-systemd +pkgver=1.2.3 +pkgrel=1 +pkgdesc="A fully colorful customizable TUI display manager made in C. (systemd service files)" +provides=('lidm-service') +arch=('any') +url="https://github.com/javalsai/lidm" +license=('GPL-3.0-only') +source=("${pkgname}-${pkgver}-systemd::https://raw.githubusercontent.com/javalsai/lidm/v1.2.3/assets/services/systemd.service") +sha256sums=('e63464441a97102194994adc82159871ccd3f23d5e97224f21a460e4296364cc') + +package() { + cd "$srcdir" + install -Dm0644 "${pkgname}-${pkgver}-systemd" "$pkgdir/usr/lib/systemd/system/lidm.service" +} diff --git a/assets/pkg/aur/lidm/.SRCINFO b/assets/pkg/aur/lidm/.SRCINFO index f1b126b..a54ca11 100644 --- a/assets/pkg/aur/lidm/.SRCINFO +++ b/assets/pkg/aur/lidm/.SRCINFO @@ -1,11 +1,12 @@ pkgbase = lidm pkgdesc = A fully colorful customizable TUI display manager made in C. (build latest tag) pkgver = 1.2.3 - pkgrel = 3 + pkgrel = 5 url = https://github.com/javalsai/lidm arch = any - license = GPL + license = GPL-3.0-only depends = pam + depends = lidm-service source = lidm-1.2.3.tar.gz::https://github.com/javalsai/lidm/archive/refs/tags/v1.2.3.tar.gz sha256sums = 1ce414b510c5bbc3e32ea882f915b4d3958cb82eb1fbb5cf33e62f69c844bf93 diff --git a/assets/pkg/aur/lidm/PKGBUILD b/assets/pkg/aur/lidm/PKGBUILD index 395c37e..fa9bdb2 100644 --- a/assets/pkg/aur/lidm/PKGBUILD +++ b/assets/pkg/aur/lidm/PKGBUILD @@ -2,13 +2,13 @@ # Maintainer: javalsai pkgname=lidm pkgver=1.2.3 -pkgrel=3 -depends=('pam') +pkgrel=5 +depends=('pam' 'lidm-service') makedepends=() pkgdesc="A fully colorful customizable TUI display manager made in C. (build latest tag)" arch=('any') url="https://github.com/javalsai/lidm" -license=('GPL') +license=('GPL-3.0-only') source=("${pkgname}-${pkgver}.tar.gz::https://github.com/javalsai/lidm/archive/refs/tags/v$pkgver.tar.gz") sha256sums=('1ce414b510c5bbc3e32ea882f915b4d3958cb82eb1fbb5cf33e62f69c844bf93') diff --git a/assets/pkg/aur/makepkg-clean.sh b/assets/pkg/aur/makepkg-clean.sh index 2015f81..5e93671 100755 --- a/assets/pkg/aur/makepkg-clean.sh +++ b/assets/pkg/aur/makepkg-clean.sh @@ -5,7 +5,7 @@ MYSELF=$(realpath "$0") MYDIR=$(dirname "$MYSELF") cd "$MYDIR" -typeset -a pkgs=(lidm{,-git,-bin}) +typeset -a pkgs=(lidm{,-git,-bin,-systemd,-dinit}) for pkg in "${pkgs[@]}"; do printf "\x1b[mEntering '%s'\x1b[0m\n" "$pkg" diff --git a/assets/pkg/aur/test-makepkg.sh b/assets/pkg/aur/test-makepkg.sh index 7eb0abe..f9b99f3 100755 --- a/assets/pkg/aur/test-makepkg.sh +++ b/assets/pkg/aur/test-makepkg.sh @@ -5,7 +5,7 @@ MYSELF=$(realpath "$0") MYDIR=$(dirname "$MYSELF") cd "$MYDIR" -typeset -a pkgs=(lidm{,-git,-bin}) +typeset -a pkgs=(lidm{,-git,-bin,-systemd,-dinit}) for pkg in "${pkgs[@]}"; do printf "\x1b[mEntering '%s'\x1b[0m\n" "$pkg" diff --git a/assets/pkg/aur/update-pkgs.sh b/assets/pkg/aur/update-pkgs.sh index 46e4866..0b4f48a 100755 --- a/assets/pkg/aur/update-pkgs.sh +++ b/assets/pkg/aur/update-pkgs.sh @@ -11,7 +11,7 @@ fi version="$1" printf "\x1b[34mINF: Using '%s' version\x1b[0m\n" "$version" -for pkg in "$MYDIR"/lidm{,-bin}/; do +for pkg in "$MYDIR"/lidm{,-bin,-systemd,-dinit}/; do cd "$pkg" printf "\x1b[1mEntering '%s'\x1b[0m\n" "$pkg" sed -i "s/pkgver=.*/pkgver=$1/" PKGBUILD diff --git a/assets/services/README.md b/assets/services/README.md index 561eb0d..f95a3eb 100644 --- a/assets/services/README.md +++ b/assets/services/README.md @@ -2,18 +2,17 @@ This folder contains the files necessary to set up lidm on start up for the supported init systems, all of them are configured for tty7. +If you're using lidm from a packaged source, this should be included with the package. Only read this for manual installations, if you are packaging or if your package exceptionally doesn't include them. + If you don't know what a init system is, you're certainly using `systemd`. There's make scripts to automatically copy the service files to the proper locations, you just have to run `make install-service-$INIT` (or `make install-service-$INIT-etc`). `make install-service` will attempt to detect the init system in use and install for it. The manual steps for installation are: -> [!IMPORTANT] -> If you think this should be packaged too, there's [a discussion](https://github.com/javalsai/lidm/discussions/39) to talk about this. - ## Systemd -- Copy `systemd.service` to `/usr/local/lib/systemd/system/lidm.service` (if the directory doesn't exist, create it first) +- Copy `systemd.service` to `/usr/local/lib/systemd/system/lidm.service` (if the directory doesn't exist, create it first) or `/usr/lib/systemd/system/lidm.service` (if you wish to install along your system files). - To enable it you can run `systemctl enable lidm` ## Dinit @@ -23,8 +22,10 @@ The manual steps for installation are: ## Runit -- Copy `runit/` to `/etc/runit/sv/lidm/` -- Add the service with `ln -s /etc/runit/sv/lidm /run/runit/service` +Your runit service path can be either `/etc/runit/sv` or `/etc/sv`. + +- Copy `runit/` to `runit-path/lidm/` +- Add the service with `ln -s runit-path/lidm /run/runit/service` - And to enable it `sv enable lidm` ## OpenRC @@ -34,7 +35,9 @@ The manual steps for installation are: ## S6 -- Copy `s6/` to `/etc/s6/sv/lidm/` +Your S6 service path can be either `/etc/s6/sv` or `/etc/sv`. + +- Copy `s6/` to `s6-path/lidm/` - Add the service with `s6-service add default lidm` - Reload the database with `s6-db-reload` (you might have to run this every time the service file changes) diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 1ef037e..79e1320 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -1,63 +1,73 @@ # Table of Contents +- [Packages](#packages) + - [Void Linux](#void-linux) + - [Fedora](#fedora) + - [AUR](#aur) + - [Nix Flake](#nix-flake) + - [Nix Module](#nix-module) - [Installing from Source](#installing-from-source) -- [AUR](#aur) -- [Nix Flake](#nix-flake) -- [Nix Module](#nix-module) -> [!CAUTION] -> I encourage you to read the manual installation steps to understand what will get installed in your computer by this package. +# Packages -# Installing from Source +Lidm relies on its community to package lidm for distributions and make the installation easier for everyone. Please raise any issues on the packages themselves and not the source repository. -Firstly, you'll need to build the package, this also includes man pages, default config, themes and other files you might need. +If you packaged lidm for any distribution not listed here or keep your own version of an inactive package, feel free to contact me to be added here. (could be a GitHub discussion or an email if you don't use GitHub) -To build it you only need to have some basic packages (should come pre-installed in almost all distros): `make`, `gcc` or another `gcc`ish compiler, and libpam headers. If it builds, it surely works anyways. +These packages just install lidm, once installed you have to enable it. It depends on your init system, but if you're using systemd (most likely), first find your currently active display manager (if any, examples are `sddm`, `gdm`, `ly`) and disable it: ```sh -git clone https://github.com/javalsai/lidm.git -cd lidm -make # 👍 +systemctl disable ``` -> [!NOTE] -> There's pre-built binaries on the [releases tab](https://github.com/javalsai/lidm/releases) too. - -Then you can install the files onto your filesystem with: +And then enable lidm: ```sh -make install +systemctl enable lidm ``` -And additionally, to install service files (start-up behavior). [more docs](../assets/services/README.md) +Lidm now should show on the next boot! + +If you are on a TTY and don't wish to reboot, you should be able to use `--now` with both commands. It's likely to kill your current desktop environment if it was launched from it. + +## Void Linux + +Lidm can be installed from the official Void Linux packages: ```sh -# automatically detects your init system -# and install service file (for tty7) -make install-service - -# or if you don't like autodetection -make install-service-systemd # systemd -make install-service-dinit # dinit -make install-service-runit # runit (/etc/sv) -make install-service-runit-etc # runit (/etc/runit/sv) -make install-service-openrc # openrc -make install-service-s6 # s6 (/etc/sv) -make install-service-s6-etc # s6 (/etc/s6/sv) - -# For runit and s6, some distros (e.g. Artix) like to put it in /etc//sv -# to better isolate their packages while other distros (e.g. Void) just put it -# in /etc/sv +xbps-install lidm ``` -# AUR +To enable the service that starts on boot: -[AUR packages](https://aur.archlinux.org/packages?K=lidm&SeB=n) will automatically install most files. +```sh +ln -s /etc/sv/lidm /var/service/ +``` -> [!CAUTION] -> [service files](../assets/pkg/aur#services) have to be manually installed by now. +It is recommended to disable any other display managers that are still enabled: -# Nix Flake +```sh +touch /etc/sv/lightdm/down # replace lightdm with your previous display manager (e.g., sddm, gdm) +``` + + +## Fedora + +Thanks to @KernelFreeze there's a COPR repo available at to install lidm. () + +## AUR + +There are several [AUR packages](https://aur.archlinux.org/packages?K=lidm&SeB=n) for most things. You only need to install one of the following: + +* `lidm` +* `lidm-bin` +* `lidm-git` + +Each of those depend on `lidm-service` which is provided by `lidm-systemd` and `lidm-dinit` (you'll have to pick one). I maintain both but I'm open to anyone that actually uses systemd to take the first one. + +There's packagers needed for openrc, s6 and runit. If you know how to make AUR packages, feel free to take any of those if you use each init system. + +## Nix Flake You can install by doing @@ -72,9 +82,9 @@ nix run github:javalsai/lidm ``` > [!CAUTION] -> This doesn't include [service files](../assets/pkg/aur#services) neither +> This doesn't include [service files](../assets/pkg/aur#services) -# Nix Module +## Nix Module
Sidenote @@ -126,3 +136,47 @@ with config.lidm.keysEnum; { > [!NOTE] > [service files](../assets/pkg/aur#services) **are** included and enabled + +# Installing from Source + +Firstly, you'll need to build the package, this also includes man pages, default config, themes and other files you might need. + +To build it you only need to have some basic packages (should come pre-installed in almost all distros): `make`, `gcc` or another `gcc`ish compiler, and libpam headers. If it builds, it surely works anyways. + +```sh +git clone https://github.com/javalsai/lidm.git +cd lidm +make # 👍 +``` + +> [!NOTE] +> There are pre-built binaries on the [releases tab](https://github.com/javalsai/lidm/releases) too. + +Then you can install the files onto your filesystem with: + +```sh +make install +``` + +This will install mostly into `/usr/local` by default, this path is mostly unused nowadays (systemd can load services from it but man usually doesn't find manual pages in there) and could feel like lidm didn't install at all. You can add `PREFIX=/usr` to install along the rest of your system packages if you wish. + +And additionally, to install service files (start-up behavior). [more docs](../assets/services/README.md) + +```sh +# automatically detects your init system +# and install service file (for tty7) +make install-service + +# or if you don't like autodetection +make install-service-systemd # systemd +make install-service-dinit # dinit +make install-service-runit # runit (/etc/sv) +make install-service-runit-etc # runit (/etc/runit/sv) +make install-service-openrc # openrc +make install-service-s6 # s6 (/etc/sv) +make install-service-s6-etc # s6 (/etc/s6/sv) + +# For runit and s6, some distros (e.g. Artix) like to put it in /etc//sv +# to better isolate their packages while other distros (e.g. Void) just put it +# in /etc/sv +``` diff --git a/docs/PACKAGERS.md b/docs/PACKAGERS.md index 758d3f6..0269458 100644 --- a/docs/PACKAGERS.md +++ b/docs/PACKAGERS.md @@ -53,7 +53,9 @@ But this can be changed by just passing those env variables, for example, in the ## Target Directory -`DESTDIR` can be used to for installation recipes to install on alternative root directories. Along with `PREFIX` (defaults to `/usr`) for systems which don't use the common `/usr` structure. e.g. `make install DESTDIR=$out PREFIX=` +`DESTDIR` can be used to for installation recipes to install on alternative root directories. Along with `PREFIX` (defaults to `/usr/local`, packaging this you'll probably want to make it `/usr`) for systems which don't use the common `/usr` structure. e.g. `make install DESTDIR=$out PREFIX=` + +`/etc` is sometimes in that `PREFIX` and sometimes not, be careful. ```txt $ fd -t f . --base-directory $out @@ -69,7 +71,7 @@ To ease most of the installation process there's several `make` recipes to insta - `make` / `make lidm`: Builds the app binary. - `make install`: Attempts to install the binary, place a default config file in `/etc/lidm.ini` and install the man pages. -- `make install-service-(systemd|dinit|runit|openrc|s6)(|-etc)`: Just check the source, service files for different init systems and `-etc` variants for alternative paths. +- `make install-service-(systemd|dinit|runit|openrc|s6)(|-etc)`: Just check the source, service files for different init systems and `-etc` variants for alternative paths. You might need `FORCE=1` in the environment if you are packaging for other init system or scripting. - `make print-version`: Outputs the current version in the `Makefile` for scripts that might want to extract that info. You can choose to use these packages or create your own service files / etc. There's are merely suggestions on what to use. diff --git a/services.mk b/services.mk new file mode 100644 index 0000000..c09c360 --- /dev/null +++ b/services.mk @@ -0,0 +1,90 @@ +install-service: + @if command -v systemctl &> /dev/null; then \ + make install-service-systemd; \ + elif command -v dinitctl &> /dev/null; then \ + make install-service-dinit; \ + elif command -v sv &> /dev/null; then \ + if [ -d /etc/sv ]; then \ + make install-service-runit; \ + elif [ -d /etc/runit/sv ]; then \ + make install-service-runit-etc; \ + else \ + printf '\033[31m%s\033[0m\n' "Unknown init system structure, skipping service install..." >&2; \ + fi \ + elif command -v rc-update &> /dev/null; then \ + make install-service-openrc; \ + elif command -v s6-service &> /dev/null; then \ + if [ -d /etc/sv ]; then \ + make install-service-s6; \ + elif [ -d /etc/r6nit/sv ]; then \ + make install-service-s6-etc; \ + else \ + printf '\033[31m%s\033[0m\n' "Unknown init system structure, skipping service install..." >&2; \ + fi \ + else \ + printf '\033[1;31m%s\033[0m\n' "Unknown init system, skipping service install..." >&2; \ + fi + +install-service-systemd: + install -Dm644 ./assets/services/systemd.service ${DESTDIR}${PREFIX}/lib/systemd/system/lidm.service + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'systemctl enable lidm'" +install-service-dinit: + install -m644 ./assets/services/dinit ${DESTDIR}/etc/dinit.d/lidm + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'dinitctl enable lidm'" +install-service-runit: + @if [ ! -e /etc/sv ] && [ -d /etc/runit/sv ] && [ -z "$$FORCE" ]; then \ + printf '\033[31m%s\033[0m\n' "/etc/sv doesn't exist but /etc/runit/sv does" >&2; \ + printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-runit-etc'" >&2; \ + exit 1; \ + fi + mkdir -p ${DESTDIR}/etc/sv/lidm + cp -r --update=all ./assets/services/runit/* ${DESTDIR}/etc/sv/lidm/ + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'ln -s ${DESTDIR}/etc/sv/lidm /var/service' or your distro equivalent" +install-service-runit-etc: + @if [ ! -e /etc/runit/sv ] && [ -d /etc/sv ] && [ -z "$$FORCE" ]; then \ + printf '\033[31m%s\033[0m\n' "/etc/runit/sv doesn't exist but /etc/sv does" >&2; \ + printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-runit'" >&2; \ + exit 1; \ + fi + mkdir -p ${DESTDIR}/etc/runit/sv/lidm + cp -r --update=all ./assets/services/runit/* ${DESTDIR}/etc/runit/sv/lidm/ + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'ln -s ${DESTDIR}/etc/runit/sv/lidm /run/runit/service' or your distro equivalent" +install-service-openrc: + install -m755 ./assets/services/openrc ${DESTDIR}/etc/init.d/lidm + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 'rc-update add lidm'" +install-service-s6: + @if [ ! -e /etc/sv ] && [ -d /etc/s6/sv ] && [ -z "$$FORCE" ]; then \ + printf '\033[31m%s\033[0m\n' "/etc/sv doesn't exist but /etc/s6/sv does" >&2; \ + printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-s6-etc'" >&2; \ + exit 1; \ + fi + mkdir -p ${DESTDIR}/etc/sv/lidm + cp -r --update=all ./assets/services/s6/* ${DESTDIR}/etc/sv/lidm/ + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 's6-service add default lidm' and 's6-db-reload'" +install-service-s6-etc: + @if [ ! -e /etc/s6/sv ] && [ -d /etc/sv ] && [ -z "$$FORCE" ]; then \ + printf '\033[31m%s\033[0m\n' "/etc/s6/sv doesn't exist but /etc/sv does" >&2; \ + printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-s6'" >&2; \ + exit 1; \ + fi + mkdir -p ${DESTDIR}/etc/s6/sv/lidm + cp -r --update=all ./assets/services/s6/* ${DESTDIR}/etc/s6/sv/lidm/ + @printf '\033[1m%s\033[0m\n\n' " don't forget to run 's6-service add default lidm' and 's6-db-reload'" + +uninstall-service: + rm -rf \ + ${DESTDIR}${PREFIX}/lib/systemd/system/lidm.service \ + ${DESTDIR}/etc/dinit.d/lidm \ + ${DESTDIR}/etc/sv/lidm \ + ${DESTDIR}/etc/runit/sv/lidm \ + ${DESTDIR}/etc/init.d/lidm \ + ${DESTDIR}/etc/s6/sv/lidm + +.PHONY: install-service uninstall-service \ + install-service-s6 \ + install-service-s6-etc \ + install-service-dinit \ + install-service-runit \ + install-service-runit-etc \ + install-service-openrc \ + install-service-systemd diff --git a/src/main.c b/src/main.c index 484ac2e..1b0a43c 100644 --- a/src/main.c +++ b/src/main.c @@ -16,7 +16,6 @@ #include "ui.h" #include "users.h" #include "util.h" -#include "version.h" #define DATESTR_MAXBUFSIZE 0x20