mirror of
https://github.com/javalsai/lidm.git
synced 2025-08-31 18:38:00 +02:00
Compare commits
5 Commits
2574ef4ac0
...
3625aa9426
Author | SHA1 | Date | |
---|---|---|---|
3625aa9426
|
|||
fcc8be77ee
|
|||
2f2a2c2696
|
|||
9af69c2417
|
|||
16901b14c8
|
16
.github/workflows/make-release.yml
vendored
16
.github/workflows/make-release.yml
vendored
@@ -16,17 +16,33 @@ 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
|
||||||
run: |
|
run: |
|
||||||
GIT_TAG=$(git describe --no-long --abbrev=0 --tags --always)
|
GIT_TAG=$(git describe --no-long --abbrev=0 --tags --always)
|
||||||
|
|
||||||
MAKE_TAG=$(make print-version)
|
MAKE_TAG=$(make print-version)
|
||||||
|
NIX_VER=$(sed -nE \
|
||||||
|
's/.*version\s*=\s*"([0-9.]*)".*/\1/p' \
|
||||||
|
assets/pkg/nix/module.nix
|
||||||
|
)
|
||||||
|
|
||||||
if [[ "$GIT_TAG" == "v$MAKE_TAG" ]]; then
|
if [[ "$GIT_TAG" == "v$MAKE_TAG" ]]; then
|
||||||
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
|
||||||
|
if [[ "$GIT_TAG" == "v$NIX_VER" ]]; then
|
||||||
|
echo "ERR: Nix module version matches git, did you bump Nix up?" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ "$NIX_VER" == "$MAKE_TAG" ]]; then
|
||||||
|
echo "ERR: Nix module version and make tag don't match" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
echo "VERSION=$MAKE_TAG" >> "$GITHUB_OUTPUT"
|
echo "VERSION=$MAKE_TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
|
||||||
|
52
INSTALL.md
52
INSTALL.md
@@ -4,6 +4,7 @@
|
|||||||
- [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.
|
||||||
@@ -73,3 +74,54 @@ 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
|
||||||
|
{
|
||||||
|
strings = {
|
||||||
|
f_poweroff = "custom_poweroff";
|
||||||
|
# etc
|
||||||
|
};
|
||||||
|
behavior = {
|
||||||
|
include_defshell = true;
|
||||||
|
source = [
|
||||||
|
"path1"
|
||||||
|
"path2"
|
||||||
|
];
|
||||||
|
# etc
|
||||||
|
};
|
||||||
|
# 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
|
||||||
|
13
assets/pkg/nix/get-cfg-file.nix
Normal file
13
assets/pkg/nix/get-cfg-file.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{ cfg, src, lib, ... }:
|
||||||
|
let
|
||||||
|
maker = import ./make-cfg.nix {
|
||||||
|
inherit lib;
|
||||||
|
keys-h-file = builtins.readFile "${src}/include/keys.h";
|
||||||
|
};
|
||||||
|
in 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,4 +1,13 @@
|
|||||||
{ config, pkgs, lib, ...}: pkgs.stdenv.mkDerivation rec {
|
{ config, pkgs, lib, ...}:
|
||||||
|
let
|
||||||
|
cfg-file = if config.cfg != null then
|
||||||
|
import ./get-cfg-file.nix {
|
||||||
|
inherit lib;
|
||||||
|
inherit (config) cfg src;
|
||||||
|
}
|
||||||
|
else null;
|
||||||
|
in
|
||||||
|
pkgs.stdenv.mkDerivation rec {
|
||||||
pname = "lidm";
|
pname = "lidm";
|
||||||
version = config.version;
|
version = config.version;
|
||||||
src = config.src;
|
src = config.src;
|
||||||
@@ -16,7 +25,9 @@
|
|||||||
++ lib.optional (config.xsessions != null)
|
++ lib.optional (config.xsessions != null)
|
||||||
"CPPFLAGS+=-DSESSIONS_XSESSIONS=\\\"${config.xsessions}\\\""
|
"CPPFLAGS+=-DSESSIONS_XSESSIONS=\\\"${config.xsessions}\\\""
|
||||||
++ lib.optional (config.wayland-sessions != null)
|
++ lib.optional (config.wayland-sessions != null)
|
||||||
"CPPFLAGS+=-DSESSIONS_WAYLAND=\\\"${config.wayland-sessions}\\\"";
|
"CPPFLAGS+=-DSESSIONS_WAYLAND=\\\"${config.wayland-sessions}\\\""
|
||||||
|
++ lib.optional (cfg-file != null)
|
||||||
|
"CPPFLAGS+=-DLIDM_CONF_PATH=\\\"${cfg-file}\\\"";
|
||||||
|
|
||||||
fixupPhase = ''
|
fixupPhase = ''
|
||||||
rm -rf $out/etc
|
rm -rf $out/etc
|
||||||
|
70
assets/pkg/nix/make-cfg.nix
Normal file
70
assets/pkg/nix/make-cfg.nix
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
{ 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,6 +1,8 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
cfg = config.services.lidm;
|
||||||
|
|
||||||
dmcfg = config.services.displayManager;
|
dmcfg = config.services.displayManager;
|
||||||
desktops = dmcfg.sessionData.desktops;
|
desktops = dmcfg.sessionData.desktops;
|
||||||
|
|
||||||
@@ -9,6 +11,7 @@ let
|
|||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
config = {
|
config = {
|
||||||
inherit version lib;
|
inherit version lib;
|
||||||
|
cfg = cfg.config;
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
owner = "javalsai";
|
owner = "javalsai";
|
||||||
repo = "lidm";
|
repo = "lidm";
|
||||||
@@ -22,6 +25,11 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
options.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 = {
|
config = {
|
||||||
services.displayManager.defaultSession = "lidm";
|
services.displayManager.defaultSession = "lidm";
|
||||||
|
|
||||||
|
@@ -26,6 +26,8 @@
|
|||||||
src = ./.;
|
src = ./.;
|
||||||
xsessions = null;
|
xsessions = null;
|
||||||
wayland-sessions = null;
|
wayland-sessions = null;
|
||||||
|
cfg = null;
|
||||||
|
# cfg = "cherry";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
@@ -66,7 +66,8 @@ 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];
|
||||||
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);
|
value = trim_str(value);
|
||||||
|
|
||||||
// Callback
|
// Callback
|
||||||
|
Reference in New Issue
Block a user