diff --git a/assets/pkg/nix/get-cfg-file.nix b/assets/pkg/nix/get-cfg-file.nix index a1e3de0..095f589 100644 --- a/assets/pkg/nix/get-cfg-file.nix +++ b/assets/pkg/nix/get-cfg-file.nix @@ -1,13 +1,20 @@ -{ 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 +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" ) diff --git a/assets/pkg/nix/lidm.nix b/assets/pkg/nix/lidm.nix index cbe77b4..37006b7 100644 --- a/assets/pkg/nix/lidm.nix +++ b/assets/pkg/nix/lidm.nix @@ -1,35 +1,44 @@ -{ 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; + 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; + 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 + ''; } diff --git a/assets/pkg/nix/make-cfg.nix b/assets/pkg/nix/make-cfg.nix index 659e9f3..8114c71 100644 --- a/assets/pkg/nix/make-cfg.nix +++ b/assets/pkg/nix/make-cfg.nix @@ -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); } diff --git a/assets/pkg/nix/module.nix b/assets/pkg/nix/module.nix index 4e168b0..9a6bbc0 100644 --- a/assets/pkg/nix/module.nix +++ b/assets/pkg/nix/module.nix @@ -1,55 +1,65 @@ -{ 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"; - }; - config = { - services.displayManager.defaultSession = "lidm"; + 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 = { + 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"; + }; }; + }; } diff --git a/flake.lock b/flake.lock index 5e1e2f1..69ad071 100644 --- a/flake.lock +++ b/flake.lock @@ -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": { diff --git a/flake.nix b/flake.nix index 1633d14..2d9a490 100644 --- a/flake.nix +++ b/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; }; }