mirror of
https://github.com/javalsai/lidm.git
synced 2025-09-03 11:48:00 +02:00
Compare commits
1 Commits
v1.2.2
...
d0bfb069bc
Author | SHA1 | Date | |
---|---|---|---|
d0bfb069bc
|
@@ -1,2 +1,2 @@
|
|||||||
[codespell]
|
[codespell]
|
||||||
skip = ./assets/pkg/aur/*/src,./assets/pkg/aur/*/*/objects,./assets/pkg/aur/*/*.tar.*
|
skip = ./assets/pkg/aur/*/src,./assets/pkg/aur/*/*/objects
|
||||||
|
38
.github/workflows/make-release.yml
vendored
38
.github/workflows/make-release.yml
vendored
@@ -16,8 +16,6 @@ jobs:
|
|||||||
packages: "git"
|
packages: "git"
|
||||||
version: 1.0
|
version: 1.0
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Check Version Changed
|
- name: Check Version Changed
|
||||||
id: check-ver-changed
|
id: check-ver-changed
|
||||||
@@ -29,7 +27,6 @@ jobs:
|
|||||||
echo "ERR: Git tag matches makefile, did you bump Makefile up?" >&2
|
echo "ERR: Git tag matches makefile, did you bump Makefile up?" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "VERSION=$MAKE_TAG" >> "$GITHUB_OUTPUT"
|
echo "VERSION=$MAKE_TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
|
||||||
@@ -73,6 +70,7 @@ jobs:
|
|||||||
needs: [ release-checks, release ]
|
needs: [ release-checks, release ]
|
||||||
steps:
|
steps:
|
||||||
- run: pacman -Sy --noconfirm git github-cli base-devel pacman-contrib
|
- run: pacman -Sy --noconfirm git github-cli base-devel pacman-contrib
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- run: |
|
- run: |
|
||||||
@@ -98,37 +96,3 @@ jobs:
|
|||||||
--body "*This PR was created automatically*"
|
--body "*This PR was created automatically*"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
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 }}
|
|
||||||
|
17
.github/workflows/push.yml
vendored
17
.github/workflows/push.yml
vendored
@@ -12,24 +12,7 @@ jobs:
|
|||||||
name: Check
|
name: Check
|
||||||
uses: ./.github/workflows/check.yml
|
uses: ./.github/workflows/check.yml
|
||||||
permissions: write-all
|
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:
|
build:
|
||||||
name: Build
|
name: Build
|
||||||
needs: check_paths
|
|
||||||
if: github.event_name != 'push' || needs.check_paths.outputs.code_changed == 'true'
|
|
||||||
uses: ./.github/workflows/build.yml
|
uses: ./.github/workflows/build.yml
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
|
55
INSTALL.md
55
INSTALL.md
@@ -4,7 +4,6 @@
|
|||||||
- [Installing from Source](#installing-from-source)
|
- [Installing from Source](#installing-from-source)
|
||||||
- [AUR](#aur)
|
- [AUR](#aur)
|
||||||
- [Nix Flake](#nix-flake)
|
- [Nix Flake](#nix-flake)
|
||||||
- [Nix Module](#nix-module)
|
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> I encourage you to read the manual installation steps to understand what will get installed in your computer by this package.
|
> I encourage you to read the manual installation steps to understand what will get installed in your computer by this package.
|
||||||
@@ -74,57 +73,3 @@ nix run github:javalsai/lidm
|
|||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> This doesn't include [service files](./assets/pkg/aur#services) neither
|
> 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
|
|
||||||
|
34
Makefile
34
Makefile
@@ -1,4 +1,4 @@
|
|||||||
VERSION = 1.2.2
|
VERSION = 1.2.1
|
||||||
.DEFAULT_GOAL := lidm
|
.DEFAULT_GOAL := lidm
|
||||||
|
|
||||||
CDIR=src
|
CDIR=src
|
||||||
@@ -10,9 +10,7 @@ PREFIX=/usr
|
|||||||
|
|
||||||
CC?=gcc
|
CC?=gcc
|
||||||
CFLAGS?=-O3 -Wall
|
CFLAGS?=-O3 -Wall
|
||||||
# C PreProcessor flags, not C Plus Plus
|
ALLFLAGS=$(CFLAGS) -I$(IDIR)
|
||||||
CPPFLAGS?=
|
|
||||||
ALLFLAGS=$(CFLAGS) $(CPPFLAGS) -I$(IDIR)
|
|
||||||
|
|
||||||
LIBS=-lpam
|
LIBS=-lpam
|
||||||
|
|
||||||
@@ -74,7 +72,7 @@ install-service:
|
|||||||
elif command -v rc-update &> /dev/null; then \
|
elif command -v rc-update &> /dev/null; then \
|
||||||
make install-service-openrc; \
|
make install-service-openrc; \
|
||||||
elif command -v s6-service &> /dev/null; then \
|
elif command -v s6-service &> /dev/null; then \
|
||||||
if [ -d /etc/sv ]; then \
|
if [ -d /etc/sv ]; then\
|
||||||
make install-service-s6; \
|
make install-service-s6; \
|
||||||
elif [ -d /etc/r6nit/sv ]; then \
|
elif [ -d /etc/r6nit/sv ]; then \
|
||||||
make install-service-s6-etc; \
|
make install-service-s6-etc; \
|
||||||
@@ -82,7 +80,7 @@ install-service:
|
|||||||
printf '\033[31m%s\033[0m\n' "Unknown init system structure, skipping service install..." >&2; \
|
printf '\033[31m%s\033[0m\n' "Unknown init system structure, skipping service install..." >&2; \
|
||||||
fi \
|
fi \
|
||||||
else \
|
else \
|
||||||
printf '\033[1;31m%s\033[0m\n' "Unknown init system, skipping service install..." >&2; \
|
printf '\033[1;31m%s\033[0m\n' "Unknown init system, skipping service install..." >&"; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
install-service-systemd:
|
install-service-systemd:
|
||||||
@@ -93,18 +91,18 @@ install-service-dinit:
|
|||||||
@printf '\033[1m%s\033[0m\n\n' " don't forget to run 'dinitctl enable lidm'"
|
@printf '\033[1m%s\033[0m\n\n' " don't forget to run 'dinitctl enable lidm'"
|
||||||
install-service-runit:
|
install-service-runit:
|
||||||
@if [ ! -e /etc/sv ] && [ -d /etc/runit/sv ] && [ -z "$FORCE" ]; then \
|
@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' "/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; \
|
printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-runit-etc'" >&2 \
|
||||||
exit 1; \
|
exit 1 \
|
||||||
fi
|
fi
|
||||||
mkdir -p ${DESTDIR}/etc/sv/lidm
|
mkdir -p ${DESTDIR}/etc/sv/lidm
|
||||||
cp -r --update=all ./assets/services/runit/* ${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"
|
@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:
|
install-service-runit-etc:
|
||||||
@if [ ! -e /etc/runit/sv ] && [ -d /etc/sv ] && [ -z "$FORCE" ]; then \
|
@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' "/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; \
|
printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-runit'" >&2 \
|
||||||
exit 1; \
|
exit 1 \
|
||||||
fi
|
fi
|
||||||
mkdir -p ${DESTDIR}/etc/runit/sv/lidm
|
mkdir -p ${DESTDIR}/etc/runit/sv/lidm
|
||||||
cp -r --update=all ./assets/services/runit/* ${DESTDIR}/etc/runit/sv/lidm/
|
cp -r --update=all ./assets/services/runit/* ${DESTDIR}/etc/runit/sv/lidm/
|
||||||
@@ -114,18 +112,18 @@ install-service-openrc:
|
|||||||
@printf '\033[1m%s\033[0m\n\n' " don't forget to run 'rc-update add lidm'"
|
@printf '\033[1m%s\033[0m\n\n' " don't forget to run 'rc-update add lidm'"
|
||||||
install-service-s6:
|
install-service-s6:
|
||||||
@if [ ! -e /etc/sv ] && [ -d /etc/s6/sv ] && [ -z "$FORCE" ]; then \
|
@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' "/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; \
|
printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-s6-etc'" >&2 \
|
||||||
exit 1; \
|
exit 1 \
|
||||||
fi
|
fi
|
||||||
mkdir -p ${DESTDIR}/etc/sv/lidm
|
mkdir -p ${DESTDIR}/etc/sv/lidm
|
||||||
cp -r --update=all ./assets/services/s6/* ${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'"
|
@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:
|
install-service-s6-etc:
|
||||||
@if [ ! -e /etc/s6/sv ] && [ -d /etc/sv ] && [ -z "$FORCE" ]; then \
|
@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' "/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; \
|
printf '\033[31m%s\033[0m\n' "you probably meant to 'make install-service-s6'" >&2 \
|
||||||
exit 1; \
|
exit 1 \
|
||||||
fi
|
fi
|
||||||
mkdir -p ${DESTDIR}/etc/s6/sv/lidm
|
mkdir -p ${DESTDIR}/etc/s6/sv/lidm
|
||||||
cp -r --update=all ./assets/services/s6/* ${DESTDIR}/etc/s6/sv/lidm/
|
cp -r --update=all ./assets/services/s6/* ${DESTDIR}/etc/s6/sv/lidm/
|
||||||
|
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
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"
|
|
||||||
);
|
|
||||||
}
|
|
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
@@ -1,73 +0,0 @@
|
|||||||
{ 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);
|
|
||||||
}
|
|
@@ -1,73 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.lidm;
|
|
||||||
|
|
||||||
dmcfg = config.services.displayManager;
|
|
||||||
desktops = dmcfg.sessionData.desktops;
|
|
||||||
|
|
||||||
version = "1.2.2";
|
|
||||||
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";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
@@ -5,9 +5,9 @@ After=systemd-user-sessions.service plymouth-quit-wait.service
|
|||||||
[Service]
|
[Service]
|
||||||
Type=idle
|
Type=idle
|
||||||
ExecStart=/usr/bin/lidm 7
|
ExecStart=/usr/bin/lidm 7
|
||||||
|
StandardError=journal
|
||||||
StandardInput=tty
|
StandardInput=tty
|
||||||
StandardOutput=tty
|
StandardOutput=tty
|
||||||
StandardError=tty
|
|
||||||
TTYPath=/dev/tty7
|
TTYPath=/dev/tty7
|
||||||
TTYReset=yes
|
TTYReset=yes
|
||||||
TTYVHangup=yes
|
TTYVHangup=yes
|
||||||
|
12
flake.lock
generated
12
flake.lock
generated
@@ -5,11 +5,11 @@
|
|||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1710146030,
|
||||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -20,11 +20,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751637120,
|
"lastModified": 1724224976,
|
||||||
"narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=",
|
"narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3",
|
"rev": "c374d94f1536013ca8e92341b540eba4c22f9c62",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
50
flake.nix
50
flake.nix
@@ -1,46 +1,46 @@
|
|||||||
{
|
{
|
||||||
description = "A ✨fully✨ colorful customizable TUI display manager made in C for simplicity.";
|
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{
|
{ flake-utils, nixpkgs, ... }:
|
||||||
flake-utils,
|
|
||||||
nixpkgs,
|
|
||||||
self,
|
|
||||||
}:
|
|
||||||
flake-utils.lib.eachDefaultSystem (
|
flake-utils.lib.eachDefaultSystem (
|
||||||
system:
|
system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs { inherit system; };
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
|
||||||
name = "lidm";
|
name = "lidm";
|
||||||
version = builtins.elemAt (builtins.match "VERSION[[:blank:]]*=[[:space:]]*([^\n]*)\n.*" (builtins.readFile ./Makefile)) 0;
|
version = "0.0.2";
|
||||||
|
|
||||||
|
lidm = (
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
|
pname = name;
|
||||||
|
version = version;
|
||||||
|
|
||||||
lidm = pkgs.callPackage assets/pkg/nix/lidm.nix {
|
|
||||||
inherit pkgs;
|
|
||||||
lib = pkgs.lib;
|
|
||||||
config = {
|
|
||||||
inherit version;
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
xsessions = null;
|
|
||||||
wayland-sessions = null;
|
nativeBuildInputs = with pkgs; [
|
||||||
cfg = null;
|
gcc
|
||||||
# cfg = "cherry";
|
gnumake
|
||||||
};
|
linux-pam
|
||||||
};
|
];
|
||||||
|
|
||||||
|
makeFlags = [
|
||||||
|
"DESTDIR=$(out)"
|
||||||
|
"PREFIX="
|
||||||
|
];
|
||||||
|
|
||||||
|
fixupPhase = ''
|
||||||
|
rm -rf $out/etc
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
);
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
defaultApp = flake-utils.lib.mkApp { drv = defaultPackage; };
|
defaultApp = flake-utils.lib.mkApp { drv = defaultPackage; };
|
||||||
defaultPackage = lidm;
|
defaultPackage = lidm;
|
||||||
devShell = pkgs.mkShell { buildInputs = lidm.nativeBuildInputs ++ [ pkgs.clang-tools ]; };
|
devShell = pkgs.mkShell { buildInputs = lidm.nativeBuildInputs ++ [ pkgs.clang-tools ]; };
|
||||||
formatter = nixpkgs.legacyPackages.${system}.nixfmt-tree;
|
|
||||||
}
|
}
|
||||||
)
|
);
|
||||||
// {
|
|
||||||
nixosModules.lidm = assets/pkg/nix/module.nix;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,6 @@
|
|||||||
#ifndef MACROSH_
|
#ifndef MACROSH_
|
||||||
#define 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??
|
// Do we just replace the compiler with clang??
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
#define NULLABLE _Nullable
|
#define NULLABLE _Nullable
|
||||||
|
11
src/config.c
11
src/config.c
@@ -12,7 +12,6 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "desktop.h"
|
#include "desktop.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "macros.h"
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#define UPPER_HALF_BYTE 4
|
#define UPPER_HALF_BYTE 4
|
||||||
@@ -241,10 +240,12 @@ struct status config_line_handler(void* _config, char* table, char* k,
|
|||||||
int parse_config(struct config* NNULLABLE config, char* NNULLABLE path) {
|
int parse_config(struct config* NNULLABLE config, char* NNULLABLE path) {
|
||||||
FILE* fd = fopen(path, "r");
|
FILE* fd = fopen(path, "r");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
log_perror("fopen");
|
perror("fopen");
|
||||||
log_printf(" [I] No config, place one at " LIDM_CONF_PATH
|
(void)fputs(
|
||||||
" or set the LIDM_CONF env variable");
|
"Please place a config file at /etc/lidm.ini or set the LIDM_CONF "
|
||||||
return 0; // Its fine now anyways
|
"env variable",
|
||||||
|
stderr);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ret = read_desktop(fd, config, config_line_handler);
|
bool ret = read_desktop(fd, config, config_line_handler);
|
||||||
|
@@ -66,8 +66,7 @@ int read_desktop(FILE* fd, void* ctx,
|
|||||||
buf_start[eq_idx] = '\0'; // the equal
|
buf_start[eq_idx] = '\0'; // the equal
|
||||||
key = trim_str(key);
|
key = trim_str(key);
|
||||||
char* value = &buf_start[eq_idx + 1];
|
char* value = &buf_start[eq_idx + 1];
|
||||||
if(buf_start[read_size - 1] == '\n')
|
buf_start[read_size - 1] = '\0'; // the newline
|
||||||
buf_start[read_size - 1] = '\0';
|
|
||||||
value = trim_str(value);
|
value = trim_str(value);
|
||||||
|
|
||||||
// Callback
|
// Callback
|
||||||
|
@@ -72,10 +72,9 @@ int main(int argc, char* argv[]) {
|
|||||||
chvt_str(argv[1]);
|
chvt_str(argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy
|
|
||||||
struct config config = DEFAULT_CONFIG;
|
struct config config = DEFAULT_CONFIG;
|
||||||
char* conf_override = getenv("LIDM_CONF");
|
char* conf_override = getenv("LIDM_CONF");
|
||||||
char* conf_path = conf_override ? conf_override : LIDM_CONF_PATH;
|
char* conf_path = conf_override ? conf_override : "/etc/lidm.ini";
|
||||||
if (parse_config(&config, conf_path) != 0) {
|
if (parse_config(&config, conf_path) != 0) {
|
||||||
(void)fputs("error parsing config\n", stderr);
|
(void)fputs("error parsing config\n", stderr);
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -16,16 +16,9 @@ struct source_dir {
|
|||||||
enum session_type type;
|
enum session_type type;
|
||||||
char* dir;
|
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[] = {
|
static const struct source_dir SOURCES[] = {
|
||||||
{XORG, SESSIONS_XSESSIONS},
|
{XORG, "/usr/share/xsessions"},
|
||||||
{WAYLAND, SESSIONS_WAYLAND},
|
{WAYLAND, "/usr/share/wayland-sessions"},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct Vector* cb_sessions = NULL;
|
static struct Vector* cb_sessions = NULL;
|
||||||
|
Reference in New Issue
Block a user