mirror of
https://github.com/javalsai/lidm.git
synced 2025-08-30 18:08:00 +02:00
Compare commits
6 Commits
3625aa9426
...
54953a18e8
Author | SHA1 | Date | |
---|---|---|---|
54953a18e8 | |||
a22c6b4597
|
|||
ab7666f561
|
|||
f0ef834eaa
|
|||
d85ebc0e78
|
|||
4611ad87a8
|
@@ -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.*
|
||||
|
48
.github/workflows/make-release.yml
vendored
48
.github/workflows/make-release.yml
vendored
@@ -23,26 +23,13 @@ jobs:
|
||||
id: check-ver-changed
|
||||
run: |
|
||||
GIT_TAG=$(git describe --no-long --abbrev=0 --tags --always)
|
||||
|
||||
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
|
||||
echo "ERR: Git tag matches makefile, did you bump Makefile up?" >&2
|
||||
exit 1
|
||||
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"
|
||||
|
||||
|
||||
@@ -86,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: |
|
||||
@@ -112,3 +98,37 @@ jobs:
|
||||
--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 }}
|
||||
|
17
.github/workflows/push.yml
vendored
17
.github/workflows/push.yml
vendored
@@ -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
|
||||
|
11
INSTALL.md
11
INSTALL.md
@@ -102,21 +102,24 @@ 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";
|
||||
# etc
|
||||
};
|
||||
|
||||
behavior = {
|
||||
include_defshell = true;
|
||||
source = [
|
||||
"path1"
|
||||
"path2"
|
||||
];
|
||||
# etc
|
||||
};
|
||||
# etc
|
||||
|
||||
functions = { poweroff = F1; };
|
||||
|
||||
# etc...
|
||||
};
|
||||
```
|
||||
|
||||
|
@@ -1,13 +1,23 @@
|
||||
{ cfg, src, lib, ... }:
|
||||
{
|
||||
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"
|
||||
)
|
||||
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,35 +1,50 @@
|
||||
{ config, pkgs, lib, ...}:
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg-file = if config.cfg != null then
|
||||
import ./get-cfg-file.nix {
|
||||
inherit lib;
|
||||
inherit (config) cfg src;
|
||||
}
|
||||
else null;
|
||||
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;
|
||||
pname = "lidm";
|
||||
version = config.version;
|
||||
src = config.src;
|
||||
|
||||
nativeBuildInputs = with pkgs; [
|
||||
gcc
|
||||
gnumake
|
||||
linux-pam
|
||||
];
|
||||
nativeBuildInputs = with pkgs; [
|
||||
gcc
|
||||
gnumake
|
||||
linux-pam
|
||||
];
|
||||
|
||||
makeFlags = [
|
||||
"DESTDIR=$(out)"
|
||||
"PREFIX="
|
||||
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}\\\"";
|
||||
++ 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
|
||||
'';
|
||||
fixupPhase = ''
|
||||
rm -rf $out/etc
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
keysEnum = maker.keys-enum;
|
||||
};
|
||||
}
|
||||
|
@@ -1,70 +1,73 @@
|
||||
{ lib, keys-h-file }:
|
||||
|
||||
let
|
||||
double-match-to-nameval = dmatch: { name = builtins.elemAt dmatch 0; value = builtins.elemAt dmatch 1; };
|
||||
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-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)
|
||||
);
|
||||
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
|
||||
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);
|
||||
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;
|
||||
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} = ${
|
||||
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
|
||||
ser-str value
|
||||
else if builtins.isInt value then
|
||||
builtins.toString value
|
||||
builtins.toString value
|
||||
else if builtins.isBool value then
|
||||
ser-bool value
|
||||
ser-bool value
|
||||
else if builtins.isAttrs value then
|
||||
value.__enum_key
|
||||
else builtins.throw "type not supported"
|
||||
}";
|
||||
value.__enum_key
|
||||
else
|
||||
builtins.throw "type not supported"
|
||||
}";
|
||||
|
||||
ser-table = table': let
|
||||
tname = table'.name;
|
||||
table = table'.value;
|
||||
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);
|
||||
"[${tname}]\n" + (concat-with "\n" (map-attrs table ser-kvs));
|
||||
in
|
||||
cfg: concat-with "\n\n" (map-attrs cfg ser-table);
|
||||
}
|
||||
|
@@ -1,55 +1,73 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.lidm;
|
||||
cfg = config.services.lidm;
|
||||
|
||||
dmcfg = config.services.displayManager;
|
||||
desktops = dmcfg.sessionData.desktops;
|
||||
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=";
|
||||
};
|
||||
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";
|
||||
};
|
||||
xsessions = "${desktops}/share/xsessions";
|
||||
wayland-sessions = "${desktops}/share/wayland-sessions";
|
||||
};
|
||||
};
|
||||
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";
|
||||
options = {
|
||||
lidm.keysEnum = lib.mkOption {
|
||||
type = with lib.types; attrs;
|
||||
default = lidm.passthru.keysEnum;
|
||||
readOnly = true;
|
||||
description = "Keys enum constants";
|
||||
};
|
||||
config = {
|
||||
services.displayManager.defaultSession = "lidm";
|
||||
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";
|
||||
};
|
||||
};
|
||||
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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
12
flake.lock
generated
12
flake.lock
generated
@@ -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": {
|
||||
|
14
flake.nix
14
flake.nix
@@ -7,16 +7,18 @@
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ flake-utils, nixpkgs, ... }:
|
||||
{
|
||||
flake-utils,
|
||||
nixpkgs,
|
||||
self,
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (
|
||||
system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
|
||||
name = "lidm";
|
||||
version = builtins.elemAt (
|
||||
builtins.match "VERSION[[:blank:]]*=[[:space:]]*([^\n]*)\n.*" (builtins.readFile ./Makefile)
|
||||
) 0;
|
||||
version = builtins.elemAt (builtins.match "VERSION[[:blank:]]*=[[:space:]]*([^\n]*)\n.*" (builtins.readFile ./Makefile)) 0;
|
||||
|
||||
lidm = pkgs.callPackage assets/pkg/nix/lidm.nix {
|
||||
inherit pkgs;
|
||||
@@ -35,8 +37,10 @@
|
||||
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;
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user