32 Commits

Author SHA1 Message Date
54953a18e8 Merge branch 'master' into fix-51 2025-07-07 04:28:01 +02:00
a22c6b4597 checks: add AUR codespell ignore path 2025-07-07 04:26:27 +02:00
ab7666f561 ci(perf): only run push build checks if code changed 2025-07-07 04:25:43 +02:00
f0ef834eaa ci(release): add nix module version&sha256 bump 2025-07-07 04:03:10 +02:00
d85ebc0e78 feat(nix): add keys enum to global cfg 2025-07-07 03:23:14 +02:00
4611ad87a8 fmt(nix): add nix fmt, fmt and update flake.lock 2025-07-07 02:38:04 +02:00
3625aa9426 docs(nix module): add 2025-07-06 23:26:58 +02:00
fcc8be77ee dev(ci): add nix version check to pre-release ci checks 2025-07-06 23:14:04 +02:00
2f2a2c2696 fix(cfg): parser bugs on missing final newline 2025-07-06 23:03:41 +02:00
9af69c2417 fix(nix module): typo
howtf did it work in my VM, oh nvm
2025-07-06 22:56:38 +02:00
16901b14c8 feat: nixos module is configurable now 2025-07-06 22:53:09 +02:00
2574ef4ac0 Merge branch 'master' into fix-51 2025-07-06 05:22:54 +02:00
689c962cc9 fix: necessary code changes for nix configurability 2025-07-06 05:13:09 +02:00
be6e039a9b feat: make a complete nix module 2025-07-06 05:06:54 +02:00
6cac2f91ed fix: neccessary code changes for nix 2025-07-06 04:21:49 +02:00
ee244be195 fix: oopsie path
istg if I keep making these silly mistakes...
2025-07-06 01:54:23 +02:00
b580b6917b feat(nix): reorganize nix flake for modularity and flexibility 2025-07-06 01:24:43 +02:00
22c75a37e1 feat(nix): make flake read version from makefile 2025-07-05 22:28:02 +02:00
3ad16d3a3c fix: Makefile 2025-07-05 20:16:40 +02:00
df6a565874 release: v1.2.1 2025-07-05 19:01:55 +02:00
310b0a87dc Merge pull request #55 from javalsai/fix_makefile_rsync
fix: makefile rsync dependency, runit installation
2025-07-05 18:45:02 +02:00
6384a94f61 pkg(Makefile): make services packaging easier 2025-07-05 18:27:29 +02:00
56e8897565 fix(Makefile): wrong path 2025-07-05 18:23:05 +02:00
f67e30991a fix(Makedile): proper service install recipes
update docs too
2025-07-05 17:53:53 +02:00
grialion
e8a9e57af9 fix(Makefile): comprehensive runit installation 2025-07-05 15:19:39 +02:00
31c3ad6d42 fix(Makefile): duplicated s6 install 2025-07-05 14:52:13 +02:00
a00a73756c fix: support /etc/sv/ and /etc/<init>/sv 2025-07-05 14:50:43 +02:00
grialion
51c12eefdc fix: makefile rsync dependency, runit installation 2025-07-05 11:16:02 +02:00
f678056c5b Merge pull request #54 from javalsai/actions/update-aur-
[AUR update]: Bump to v1.2.0
2025-07-04 22:53:04 +02:00
3a7bd6f9f5 fix(ci,aur): empty version strings 2025-07-04 22:50:45 +02:00
5207e1e94b Merge branch 'master' into actions/update-aur- 2025-07-04 22:49:01 +02:00
GitHub Actions
69d48d32d6 Update AUR pkgs to v 2025-07-04 20:47:25 +00:00
23 changed files with 476 additions and 84 deletions

View File

@@ -1,2 +1,2 @@
[codespell]
skip = ./assets/pkg/aur/*/src,./assets/pkg/aur/*/*/objects
skip = ./assets/pkg/aur/*/src,./assets/pkg/aur/*/*/objects,./assets/pkg/aur/*/*.tar.*

View File

@@ -16,6 +16,8 @@ jobs:
packages: "git"
version: 1.0
- uses: actions/checkout@v4
with:
fetch-tags: true
- name: Check Version Changed
id: check-ver-changed
@@ -27,6 +29,7 @@ jobs:
echo "ERR: Git tag matches makefile, did you bump Makefile up?" >&2
exit 1
fi
echo "VERSION=$MAKE_TAG" >> "$GITHUB_OUTPUT"
@@ -70,7 +73,6 @@ jobs:
needs: [ release-checks, release ]
steps:
- run: pacman -Sy --noconfirm git github-cli base-devel pacman-contrib
- uses: actions/checkout@v4
- run: |
@@ -84,15 +86,49 @@ jobs:
chown $UID:$(id -g) . -R
- run: |
BRANCH=actions/update-aur-${{ inputs.version }}
BRANCH=actions/update-aur-${{ needs.release-checks.outputs.VERSION }}
git config --global --add safe.directory $GITHUB_WORKSPACE
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git checkout -b $BRANCH
git commit -am "Update AUR pkgs to v${{ inputs.version }}"
git commit -am "Update AUR pkgs to v${{ needs.release-checks.outputs.VERSION }}"
git push -u origin $BRANCH
gh pr create --head $BRANCH \
--title "[AUR update]: Bump to ${{ inputs.version }}" \
--title "[AUR update]: Bump to ${{ needs.release-checks.outputs.VERSION }}" \
--body "*This PR was created automatically*"
env:
GH_TOKEN: ${{ github.token }}
nix-update:
name: Update NixOS module
runs-on: ubuntu-24.04
permissions: write-all
needs: [ release-checks, release ]
steps:
- uses: cachix/install-nix-action@v31
- uses: actions/checkout@v4
with:
fetch-tags: true
- run: |
tmpdir=$(mktemp -d)
git archive v${{ needs.release-checks.outputs.VERSION }} | tar -xC "$tmpdir"
sha256sum=$(nix hash path "$tmpdir")
sed -i -E 's/(.*version\s*=\s*")[0-9.]*(".*)/\1'${{ needs.release-checks.outputs.VERSION }}'\2/' assets/pkg/nix/module.nix
sed -i -E 's/(.*sha256\s*=\s*")[^"]*(".*)/\1'"$sha256sum"'\2/' assets/pkg/nix/module.nix
# would be cool to be able to check the new module.nix builds
- run: |
BRANCH=actions/update-nix-${{ needs.release-checks.outputs.VERSION }}
git config --global --add safe.directory $GITHUB_WORKSPACE
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git checkout -b $BRANCH
git commit -am "Update NixOS module to v${{ needs.release-checks.outputs.VERSION }}"
git push -u origin $BRANCH
gh pr create --head $BRANCH \
--title "[Nix update]: Bump to ${{ needs.release-checks.outputs.VERSION }}" \
--body "*This PR was created automatically*"
env:
GH_TOKEN: ${{ github.token }}

View File

@@ -12,7 +12,24 @@ jobs:
name: Check
uses: ./.github/workflows/check.yml
permissions: write-all
check_paths:
name: Paths Filter
runs-on: ubuntu-latest
outputs:
code_changed: ${{ steps.filter.outputs.code }}
steps:
- uses: actions/checkout@v4
- id: filter
uses: dorny/paths-filter@v3
with:
filters: |
code:
- Makefile
- 'src/**'
- 'include/**'
build:
name: Build
needs: check_paths
if: github.event_name != 'push' || needs.check_paths.outputs.code_changed == 'true'
uses: ./.github/workflows/build.yml
permissions: write-all

View File

@@ -4,6 +4,7 @@
- [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.
@@ -39,9 +40,15 @@ 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
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
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/<init>/sv
# to better isolate their packages while other distros (e.g. Void) just put it
# in /etc/sv
```
# AUR
@@ -67,3 +74,57 @@ nix run github:javalsai/lidm
> [!CAUTION]
> This doesn't include [service files](./assets/pkg/aur#services) neither
# Nix Module
<details>
<summary>Sidenote</summary>
The nix module lacks on several aspects, if you know much about nix and know
how to improve this package, feel free to open an issue or a PR to help. The
nix package maintainer position is open too.
</details>
Lidm includes a nix module in `assets/pkg/nix/module.nix` that you can add
(along the included nix files) and import in your `configuration.nix`.
Once imported you'll need to add:
```nix
services.displayManager.enable = true;
systemd.services.lidm.enable = true;
```
Optionally, you can configure it setting `services.lidm.config`. You can either
pass:
* A string to copy the config from a theme in `themes/` with said name
(**name**, e.g `"cherry"`).
* An attribute tree with the same names as the config file, e.g:
```nix
with config.lidm.keysEnum; {
strings = {
f_poweroff = "custom_poweroff";
};
behavior = {
include_defshell = true;
source = [
"path1"
"path2"
];
};
functions = { poweroff = F1; };
# etc...
};
```
> *it's not necessary to cover all keys and anything can be put there, even if
> its not valid config*
> [!NOTE]
> [service files](./assets/pkg/aur#services) **are** included and enabled

View File

@@ -1,4 +1,4 @@
VERSION = 1.2.0
VERSION = 1.2.1
.DEFAULT_GOAL := lidm
CDIR=src
@@ -10,7 +10,9 @@ PREFIX=/usr
CC?=gcc
CFLAGS?=-O3 -Wall
ALLFLAGS=$(CFLAGS) -I$(IDIR)
# C PreProcessor flags, not C Plus Plus
CPPFLAGS?=
ALLFLAGS=$(CFLAGS) $(CPPFLAGS) -I$(IDIR)
LIBS=-lpam
@@ -54,7 +56,7 @@ install: lidm
uninstall:
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 /etc/systemd/system/lidm.service /etc/dinit.d/lidm /etc/runit/sv/lidm
rm -rf ${DESTDIR}/etc/systemd/system/lidm.service ${DESTDIR}/etc/dinit.d/lidm ${DESTDIR}/etc/runit/sv/lidm
install-service:
@if command -v systemctl &> /dev/null; then \
@@ -62,30 +64,72 @@ install-service:
elif command -v dinitctl &> /dev/null; then \
make install-service-dinit; \
elif command -v sv &> /dev/null; then \
make install-service-runit; \
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 \
make install-service-s6; \
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 '\x1b[1;31m%s\x1b[0m\n' "Unknown init system, skipping service install..."; \
printf '\033[1;31m%s\033[0m\n' "Unknown init system, skipping service install..." >&2; \
fi
install-service-systemd:
install -m644 ./assets/services/systemd.service /etc/systemd/system/lidm.service
@printf '\x1b[1m%s\x1b[0m\n\n' " don't forget to run 'systemctl enable lidm'"
install -m644 ./assets/services/systemd.service ${DESTDIR}/etc/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 /etc/dinit.d/lidm
@printf '\x1b[1m%s\x1b[0m\n\n' " don't forget to run 'dinitctl enable lidm'"
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:
rsync -a --no-owner --no-group ./assets/services/runit/. /etc/runit/sv/lidm
@printf '\x1b[1m%s\x1b[0m\n\n' " don't forget to run 'ln -s /etc/runit/sv/lidm /run/runit/service' and 'sv enable lidm'"
@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 /etc/init.d/lidm
@printf '\x1b[1m%s\x1b[0m\n\n' " don't forget to run 'rc-update add lidm'"
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:
rsync -a --no-owner --no-group ./assets/services/s6/. /etc/s6/sv/lidm
@printf '\x1b[1m%s\x1b[0m\n\n' " don't forget to run 's6-service add default lidm' and 's6-db-reload'"
@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'"
pre-commit:
codespell
@@ -100,8 +144,10 @@ print-version:
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 \

View File

@@ -1,6 +1,6 @@
pkgbase = lidm-bin
pkgdesc = A fully colorful customizable TUI display manager made in C. (release binary)
pkgver = 1.1.1
pkgver = 1.2.0
pkgrel = 1
url = https://github.com/javalsai/lidm
arch = x86_64
@@ -8,13 +8,13 @@ pkgbase = lidm-bin
depends = pam
provides = lidm
conflicts = lidm
source = lidm::https://github.com/javalsai/lidm/releases/download/v1.1.1/lidm-amd64
source = default-theme.ini::https://raw.githubusercontent.com/javalsai/lidm/v1.1.1/themes/default.ini
source = lidm.1::https://raw.githubusercontent.com/javalsai/lidm/v1.1.1/assets/man/lidm.1
source = lidm-config.5::https://raw.githubusercontent.com/javalsai/lidm/v1.1.1/assets/man/lidm-config.5
sha256sums = c4e82ae2c08c223ef417edca50f86f516e3f9154339f67110c87d01855673fcf
sha256sums = a8d29e220c23b48b5cd3aac0c0e395e90a9d6c9ca9c9c35a45ad6f3df5f55542
source = lidm::https://github.com/javalsai/lidm/releases/download/v1.2.0/lidm-amd64
source = default-theme.ini::https://raw.githubusercontent.com/javalsai/lidm/v1.2.0/themes/default.ini
source = lidm.1::https://raw.githubusercontent.com/javalsai/lidm/v1.2.0/assets/man/lidm.1
source = lidm-config.5::https://raw.githubusercontent.com/javalsai/lidm/v1.2.0/assets/man/lidm-config.5
sha256sums = 6bf4403c21bd26607302d99d7bd1a129822e7d2506e949fb483ea445e022eb6d
sha256sums = ffaa5fe2cf5011bf53c90f81bfec8585158d35f72c0666db0bd4d3866ae041ca
sha256sums = 7f2fb91f55088be1a9b1c93ecf5d6c1e437f369b56df2eacc9d10b00c93c39f8
sha256sums = 5dbe088ce29c95a400080190560d4308c10519a953e83d2d5020dfdf47dd830f
sha256sums = 0aa5755bdcc60ea80cd9ee0f89233ffaf22c6cee9db9da277274a62c6ed477d9
pkgname = lidm-bin

View File

@@ -1,7 +1,7 @@
# shellcheck disable=SC2034,SC2148,SC2128,SC2154,SC2164
# Maintainer: javalsai <javalsai@proton.me>
pkgname=lidm-bin
pkgver=1.1.1
pkgver=1.2.0
pkgrel=1
depends=('pam')
pkgdesc="A fully colorful customizable TUI display manager made in C. (release binary)"
@@ -16,10 +16,10 @@ source=(
"lidm.1::https://raw.githubusercontent.com/javalsai/lidm/v$pkgver/assets/man/lidm.1"
"lidm-config.5::https://raw.githubusercontent.com/javalsai/lidm/v$pkgver/assets/man/lidm-config.5"
)
sha256sums=('c4e82ae2c08c223ef417edca50f86f516e3f9154339f67110c87d01855673fcf'
'a8d29e220c23b48b5cd3aac0c0e395e90a9d6c9ca9c9c35a45ad6f3df5f55542'
sha256sums=('6bf4403c21bd26607302d99d7bd1a129822e7d2506e949fb483ea445e022eb6d'
'ffaa5fe2cf5011bf53c90f81bfec8585158d35f72c0666db0bd4d3866ae041ca'
'7f2fb91f55088be1a9b1c93ecf5d6c1e437f369b56df2eacc9d10b00c93c39f8'
'5dbe088ce29c95a400080190560d4308c10519a953e83d2d5020dfdf47dd830f')
'0aa5755bdcc60ea80cd9ee0f89233ffaf22c6cee9db9da277274a62c6ed477d9')
package() {
install -Dm755 lidm "${pkgdir}/usr/bin/lidm"

View File

@@ -1,7 +1,7 @@
# shellcheck disable=SC2034,SC2148,SC2128,SC2154,SC2164
# Maintainer: javalsai <javalsai@proton.me>
pkgname=lidm-git
pkgver=1.1.1.r0.g3bfc2f5
pkgver=1.2.0.r0.g7f75b8e
pkgrel=1
depends=('pam')
makedepends=('git' 'make' 'gcc')

View File

@@ -1,6 +1,6 @@
pkgbase = lidm
pkgdesc = A fully colorful customizable TUI display manager made in C. (build latest tag)
pkgver = 1.1.1
pkgver = 1.2.0
pkgrel = 1
url = https://github.com/javalsai/lidm
arch = any
@@ -8,7 +8,7 @@ pkgbase = lidm
makedepends = git
makedepends = gcc
depends = pam
source = tarball.tar.gz::https://github.com/javalsai/lidm/archive/refs/tags/v1.1.1.tar.gz
sha256sums = 915dc5acce413d5d32bb52c6f9980661a389a0939a49ac31bc250b2d162a5479
source = tarball.tar.gz::https://github.com/javalsai/lidm/archive/refs/tags/v1.2.0.tar.gz
sha256sums = 0dffded5fcef45cb45fe88358b0cba8de04f614e323a9c6e4162f84b6e3a50b6
pkgname = lidm

View File

@@ -1,7 +1,7 @@
# shellcheck disable=SC2034,SC2148,SC2128,SC2154,SC2164
# Maintainer: javalsai <javalsai@proton.me>
pkgname=lidm
pkgver=1.1.1
pkgver=1.2.0
pkgrel=1
depends=('pam')
makedepends=('git' 'gcc')
@@ -10,7 +10,7 @@ arch=('any')
url="https://github.com/javalsai/lidm"
license=('GPL')
source=("tarball.tar.gz::https://github.com/javalsai/lidm/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('915dc5acce413d5d32bb52c6f9980661a389a0939a49ac31bc250b2d162a5479')
sha256sums=('0dffded5fcef45cb45fe88358b0cba8de04f614e323a9c6e4162f84b6e3a50b6')
build() {
tar -xzf "tarball.tar.gz"

View File

@@ -0,0 +1,23 @@
{
cfg,
src,
lib,
...
}:
let
maker = import ./make-cfg.nix {
inherit lib;
keys-h-file = builtins.readFile "${src}/include/keys.h";
};
in
{
inherit maker;
file = builtins.toFile "lidm.conf" (
if builtins.isString cfg then
builtins.readFile "${src}/themes/${cfg}.ini"
else if builtins.isAttrs cfg then
maker.make cfg
else
builtins.throw "invalid cfg type, expected str or attrs"
);
}

50
assets/pkg/nix/lidm.nix Normal file
View File

@@ -0,0 +1,50 @@
{
config,
pkgs,
lib,
...
}:
let
get-cfg =
if config.cfg != null then
import ./get-cfg-file.nix {
inherit lib;
inherit (config) cfg src;
}
else
null;
cfg-file = get-cfg.file;
maker = get-cfg.maker;
in
pkgs.stdenv.mkDerivation rec {
pname = "lidm";
version = config.version;
src = config.src;
nativeBuildInputs = with pkgs; [
gcc
gnumake
linux-pam
];
makeFlags =
[
"DESTDIR=$(out)"
"PREFIX="
]
++ lib.optional (
config.xsessions != null
) "CPPFLAGS+=-DSESSIONS_XSESSIONS=\\\"${config.xsessions}\\\""
++ lib.optional (
config.wayland-sessions != null
) "CPPFLAGS+=-DSESSIONS_WAYLAND=\\\"${config.wayland-sessions}\\\""
++ lib.optional (cfg-file != null) "CPPFLAGS+=-DLIDM_CONF_PATH=\\\"${cfg-file}\\\"";
fixupPhase = ''
rm -rf $out/etc
'';
passthru = {
keysEnum = maker.keys-enum;
};
}

View File

@@ -0,0 +1,73 @@
{ lib, keys-h-file }:
let
double-match-to-nameval = dmatch: {
name = builtins.elemAt dmatch 0;
value = builtins.elemAt dmatch 1;
};
keys-enum =
let
key-names = builtins.replaceStrings [ "\n" " " ] [ "" "" ] (
builtins.elemAt (builtins.match ".*KEY_NAMES\\[][[:blank:]]*=[[:blank:]]*\\{([^}]*)}.*" keys-h-file) 0
);
keys-2d-list = builtins.map (builtins.match "\\[(.*)]=\"(.*)\"") (
builtins.filter (s: builtins.isString s && s != "") (builtins.split "," key-names)
);
in
builtins.listToAttrs (
builtins.map (
k:
k
// {
value = {
__enum_key = k.value;
};
}
) (builtins.map double-match-to-nameval keys-2d-list)
);
in
{
inherit keys-enum;
make =
let
name-val-to-attrs = (name: value: { inherit name value; });
map-attrs = attrset: fn: lib.map fn (lib.attrsets.mapAttrsToList name-val-to-attrs attrset);
try-foldl' =
op: nul: list:
if (builtins.length list) == 0 then "" else builtins.foldl' op nul list;
concat-with = sepr: list: try-foldl' (x: y: if x == null then y else x + sepr + y) null list;
ser-bool = bool: if bool then "true" else "false";
ser-str = str: "\"${builtins.replaceStrings [ "\n" "\"" ] [ "\\n" "\\\"" ] str}\"";
ser-kvs =
{ name, value }:
if builtins.isList value then
concat-with "\n" (builtins.map (value: ser-kvs { inherit name value; }) value)
else
"${name} = ${
if builtins.isString value then
ser-str value
else if builtins.isInt value then
builtins.toString value
else if builtins.isBool value then
ser-bool value
else if builtins.isAttrs value then
value.__enum_key
else
builtins.throw "type not supported"
}";
ser-table =
table':
let
tname = table'.name;
table = table'.value;
in
"[${tname}]\n" + (concat-with "\n" (map-attrs table ser-kvs));
in
cfg: concat-with "\n\n" (map-attrs cfg ser-table);
}

73
assets/pkg/nix/module.nix Normal file
View File

@@ -0,0 +1,73 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.lidm;
dmcfg = config.services.displayManager;
desktops = dmcfg.sessionData.desktops;
version = "1.2.1";
lidmPkg = pkgs.callPackage ./lidm.nix {
inherit pkgs;
config = {
inherit version lib;
cfg = cfg.config;
src = pkgs.fetchFromGitHub {
owner = "javalsai";
repo = "lidm";
rev = "v${version}";
sha256 = "sha256-3CgUI8PUs4c1bfBrykPw87SSa4lzrh4E4Hug7cGRKFk=";
};
xsessions = "${desktops}/share/xsessions";
wayland-sessions = "${desktops}/share/wayland-sessions";
};
};
in
{
options = {
lidm.keysEnum = lib.mkOption {
type = with lib.types; attrs;
default = lidm.passthru.keysEnum;
readOnly = true;
description = "Keys enum constants";
};
services.lidm.config = lib.mkOption {
type =
with lib.types;
oneOf [
str
attrs
];
default = { };
description = "Config options for lidm | Either attr tree or name of bundled themes";
};
};
config = {
services.displayManager.defaultSession = "lidm";
systemd.services.lidm = {
description = "TUI display manager";
aliases = [ "display-manager.service" ];
after = [
"systemd-user-sessions.service"
"plymouth-quit-wait.service"
];
serviceConfig = {
Type = "idle";
ExecStart = "${lidmPkg}/bin/lidm 7";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "tty";
TTYPath = "/dev/tty7";
TTYReset = "yes";
TTYVHangup = "yes";
};
};
};
}

View File

@@ -4,7 +4,7 @@ This folder contains the files necessary to set up lidm on start up for the supp
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`. `make install-service` will attempt to detect the init system in use and install for it.
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:

View File

@@ -5,9 +5,9 @@ After=systemd-user-sessions.service plymouth-quit-wait.service
[Service]
Type=idle
ExecStart=/usr/bin/lidm 7
StandardError=journal
StandardInput=tty
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty7
TTYReset=yes
TTYVHangup=yes

12
flake.lock generated
View File

@@ -5,11 +5,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@@ -20,11 +20,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1724224976,
"narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=",
"lastModified": 1751637120,
"narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c374d94f1536013ca8e92341b540eba4c22f9c62",
"rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3",
"type": "github"
},
"original": {

View File

@@ -1,46 +1,46 @@
{
description = "A fully colorful customizable TUI display manager made in C for simplicity.";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs =
{ flake-utils, nixpkgs, ... }:
{
flake-utils,
nixpkgs,
self,
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs { inherit system; };
name = "lidm";
version = "0.0.2";
lidm = (
pkgs.stdenv.mkDerivation {
pname = name;
version = version;
version = builtins.elemAt (builtins.match "VERSION[[:blank:]]*=[[:space:]]*([^\n]*)\n.*" (builtins.readFile ./Makefile)) 0;
lidm = pkgs.callPackage assets/pkg/nix/lidm.nix {
inherit pkgs;
lib = pkgs.lib;
config = {
inherit version;
src = ./.;
nativeBuildInputs = with pkgs; [
gcc
gnumake
linux-pam
];
makeFlags = [
"DESTDIR=$(out)"
"PREFIX="
];
fixupPhase = ''
rm -rf $out/etc
'';
}
);
xsessions = null;
wayland-sessions = null;
cfg = null;
# cfg = "cherry";
};
};
in
rec {
defaultApp = flake-utils.lib.mkApp { drv = defaultPackage; };
defaultPackage = lidm;
devShell = pkgs.mkShell { buildInputs = lidm.nativeBuildInputs ++ [ pkgs.clang-tools ]; };
formatter = nixpkgs.legacyPackages.${system}.nixfmt-tree;
}
);
)
// {
nixosModules.lidm = assets/pkg/nix/module.nix;
};
}

View File

@@ -1,6 +1,11 @@
#ifndef MACROSH_
#define MACROSH_
// More like constants but I'm not making yet another header file just for this
#ifndef LIDM_CONF_PATH
#define LIDM_CONF_PATH "/etc/lidm.ini"
#endif
// Do we just replace the compiler with clang??
#if defined(__clang__)
#define NULLABLE _Nullable

View File

@@ -12,6 +12,7 @@
#include "config.h"
#include "desktop.h"
#include "log.h"
#include "macros.h"
#include "util.h"
#define UPPER_HALF_BYTE 4
@@ -240,12 +241,10 @@ struct status config_line_handler(void* _config, char* table, char* k,
int parse_config(struct config* NNULLABLE config, char* NNULLABLE path) {
FILE* fd = fopen(path, "r");
if (fd == NULL) {
perror("fopen");
(void)fputs(
"Please place a config file at /etc/lidm.ini or set the LIDM_CONF "
"env variable",
stderr);
return -1;
log_perror("fopen");
log_printf(" [I] No config, place one at " LIDM_CONF_PATH
" or set the LIDM_CONF env variable");
return 0; // Its fine now anyways
}
bool ret = read_desktop(fd, config, config_line_handler);

View File

@@ -66,7 +66,8 @@ int read_desktop(FILE* fd, void* ctx,
buf_start[eq_idx] = '\0'; // the equal
key = trim_str(key);
char* value = &buf_start[eq_idx + 1];
buf_start[read_size - 1] = '\0'; // the newline
if(buf_start[read_size - 1] == '\n')
buf_start[read_size - 1] = '\0';
value = trim_str(value);
// Callback

View File

@@ -72,9 +72,10 @@ int main(int argc, char* argv[]) {
chvt_str(argv[1]);
}
// Copy
struct config config = DEFAULT_CONFIG;
char* conf_override = getenv("LIDM_CONF");
char* conf_path = conf_override ? conf_override : "/etc/lidm.ini";
char* conf_path = conf_override ? conf_override : LIDM_CONF_PATH;
if (parse_config(&config, conf_path) != 0) {
(void)fputs("error parsing config\n", stderr);
return 1;

View File

@@ -16,9 +16,16 @@ struct source_dir {
enum session_type type;
char* dir;
};
#ifndef SESSIONS_XSESSIONS
#define SESSIONS_XSESSIONS "/usr/share/xsessions"
#endif
#ifndef SESSIONS_WAYLAND
#define SESSIONS_WAYLAND "/usr/share/wayland-sessions"
#endif
static const struct source_dir SOURCES[] = {
{XORG, "/usr/share/xsessions"},
{WAYLAND, "/usr/share/wayland-sessions"},
{XORG, SESSIONS_XSESSIONS},
{WAYLAND, SESSIONS_WAYLAND},
};
static struct Vector* cb_sessions = NULL;