mirror of
https://github.com/javalsai/lidm.git
synced 2025-08-30 09:58:00 +02:00
feat: nixos module is configurable now
This commit is contained in:
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";
|
||||
version = config.version;
|
||||
src = config.src;
|
||||
@@ -16,7 +25,9 @@
|
||||
++ lib.optional (config.xsessions != null)
|
||||
"CPPFLAGS+=-DSESSIONS_XSESSIONS=\\\"${config.xsessions}\\\""
|
||||
++ 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 = ''
|
||||
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, ... }:
|
||||
|
||||
let
|
||||
cfg = config.services.lidm;
|
||||
|
||||
dmcfg = config.services.displayManager;
|
||||
desktops = dmcfg.sessionData.desktops;
|
||||
|
||||
@@ -9,6 +11,7 @@ let
|
||||
inherit pkgs;
|
||||
config = {
|
||||
inherit version lib;
|
||||
cfg = cfg.config;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "javalsai";
|
||||
repo = "lidm";
|
||||
@@ -22,6 +25,11 @@ let
|
||||
};
|
||||
in
|
||||
{
|
||||
options.services.lidm.conig = 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";
|
||||
|
||||
|
Reference in New Issue
Block a user