refactor: use terminal package attr paths with shared resolver

This commit is contained in:
2026-04-21 22:48:00 +02:00
parent 4781cc60be
commit 8de3bc1b72
7 changed files with 61 additions and 49 deletions
+2 -2
View File
@@ -42,8 +42,8 @@ let
type = lib.types.str; type = lib.types.str;
}; };
terminalPackageAttr = lib.mkOption { terminalPackagePath = lib.mkOption {
type = lib.types.str; type = lib.types.listOf lib.types.str;
}; };
nixosConfigurationPath = lib.mkOption { nixosConfigurationPath = lib.mkOption {
+14 -10
View File
@@ -1,4 +1,11 @@
{ inputs, ... }: {
inputs,
config,
...
}:
let
metaLib = config.meta.lib;
in
{ {
flake.modules.nixos.niri = flake.modules.nixos.niri =
{ pkgs, ... }: { pkgs, ... }:
@@ -43,13 +50,10 @@
inherit (display) mode; inherit (display) mode;
} }
) config.meta.host.displays; ) config.meta.host.displays;
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr; terminalPackage = metaLib.resolvePackagePath {
terminalAttrPath = inherit pkgs;
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then path = config.meta.user.terminalPackagePath;
builtins.tail rawTerminalAttrPath };
else
rawTerminalAttrPath;
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram; hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram;
mouseSettings = lib.filterAttrs (_: value: value != null) { mouseSettings = lib.filterAttrs (_: value: value != null) {
@@ -77,11 +81,11 @@
assertions = [ assertions = [
{ {
assertion = terminalPackage != null; assertion = terminalPackage != null;
message = "Unknown terminal package `${config.meta.user.terminalPackageAttr}` for user `${config.meta.user.name}`."; message = "Unknown terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` for user `${config.meta.user.name}`.";
} }
{ {
assertion = hasMainProgram; assertion = hasMainProgram;
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must define `meta.mainProgram`."; message = "Terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` must define `meta.mainProgram`.";
} }
]; ];
+11 -16
View File
@@ -5,6 +5,7 @@
}: }:
let let
homeModules = config.flake.modules.homeManager; homeModules = config.flake.modules.homeManager;
metaLib = config.meta.lib;
mkPortableSettings = mkPortableSettings =
baseSettings: baseSettings:
lib.recursiveUpdate baseSettings { lib.recursiveUpdate baseSettings {
@@ -37,13 +38,10 @@ in
... ...
}: }:
let let
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr; terminalPackage = metaLib.resolvePackagePath {
terminalAttrPath = inherit pkgs;
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then path = config.meta.user.terminalPackagePath;
builtins.tail rawTerminalAttrPath };
else
rawTerminalAttrPath;
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram; hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram;
baseSettings = baseSettings =
if hasMainProgram then if hasMainProgram then
@@ -62,11 +60,11 @@ in
assertions = [ assertions = [
{ {
assertion = terminalPackage != null; assertion = terminalPackage != null;
message = "Unknown terminal package `${config.meta.user.terminalPackageAttr}` for user `${config.meta.user.name}`."; message = "Unknown terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` for user `${config.meta.user.name}`.";
} }
{ {
assertion = hasMainProgram; assertion = hasMainProgram;
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must define `meta.mainProgram`."; message = "Terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` must define `meta.mainProgram`.";
} }
]; ];
@@ -90,13 +88,10 @@ in
... ...
}: }:
let let
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr; terminalPackage = metaLib.resolvePackagePath {
terminalAttrPath = inherit pkgs;
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then path = config.meta.user.terminalPackagePath;
builtins.tail rawTerminalAttrPath };
else
rawTerminalAttrPath;
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram; hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram;
baseSettings = baseSettings =
if hasMainProgram then if hasMainProgram then
+11 -10
View File
@@ -1,3 +1,7 @@
{ config, ... }:
let
metaLib = config.meta.lib;
in
{ {
flake.modules.homeManager.terminal = flake.modules.homeManager.terminal =
{ {
@@ -7,13 +11,10 @@
... ...
}: }:
let let
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr; terminalPackage = metaLib.resolvePackagePath {
terminalAttrPath = inherit pkgs;
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then path = config.meta.user.terminalPackagePath;
builtins.tail rawTerminalAttrPath };
else
rawTerminalAttrPath;
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
hasTerminalPackage = terminalPackage != null; hasTerminalPackage = terminalPackage != null;
hasMainProgram = hasTerminalPackage && terminalPackage ? meta.mainProgram; hasMainProgram = hasTerminalPackage && terminalPackage ? meta.mainProgram;
terminalDesktopId = terminalDesktopId =
@@ -23,15 +24,15 @@
assertions = [ assertions = [
{ {
assertion = hasTerminalPackage; assertion = hasTerminalPackage;
message = "Unknown terminal package `${config.meta.user.terminalPackageAttr}` for user `${config.meta.user.name}`."; message = "Unknown terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` for user `${config.meta.user.name}`.";
} }
{ {
assertion = hasMainProgram; assertion = hasMainProgram;
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must define `meta.mainProgram`."; message = "Terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` must define `meta.mainProgram`.";
} }
{ {
assertion = hasMainProgram && builtins.pathExists "${terminalPackage}/share/applications/${terminalDesktopId}"; assertion = hasMainProgram && builtins.pathExists "${terminalPackage}/share/applications/${terminalDesktopId}";
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must provide `${terminalDesktopId}`."; message = "Terminal package `${lib.showAttrPath config.meta.user.terminalPackagePath}` must provide `${terminalDesktopId}`.";
} }
{ {
assertion = hasMainProgram && terminalPackage.meta.mainProgram == "kitty"; assertion = hasMainProgram && terminalPackage.meta.mainProgram == "kitty";
+6 -9
View File
@@ -17,23 +17,20 @@ in
... ...
}: }:
let let
rawTerminalAttrPath = lib.splitString "." config.meta.host.users.kiri.terminalPackageAttr; terminalPackage = metaLib.resolvePackagePath {
terminalAttrPath = inherit pkgs;
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then path = config.meta.host.users.kiri.terminalPackagePath;
builtins.tail rawTerminalAttrPath };
else
rawTerminalAttrPath;
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
in in
{ {
assertions = [ assertions = [
{ {
assertion = terminalPackage != null; assertion = terminalPackage != null;
message = "Unknown terminal package `${config.meta.host.users.kiri.terminalPackageAttr}` for user `kiri`."; message = "Unknown terminal package `${lib.showAttrPath config.meta.host.users.kiri.terminalPackagePath}` for user `kiri`.";
} }
{ {
assertion = terminalPackage != null && lib.elem "terminfo" terminalPackage.outputs; assertion = terminalPackage != null && lib.elem "terminfo" terminalPackage.outputs;
message = "Terminal package `${config.meta.host.users.kiri.terminalPackageAttr}` must provide a `terminfo` output for `orion`."; message = "Terminal package `${lib.showAttrPath config.meta.host.users.kiri.terminalPackagePath}` must provide a `terminfo` output for `orion`.";
} }
]; ];
+15
View File
@@ -56,6 +56,13 @@ let
''; '';
}; };
resolvePackagePath =
{
pkgs,
path,
}:
lib.attrByPath path null pkgs;
mkHostUser = mkHostUser =
{ {
account, account,
@@ -136,6 +143,13 @@ in
readOnly = true; readOnly = true;
}; };
options.meta.lib.resolvePackagePath = lib.mkOption {
type = lib.types.raw;
description = "Internal helper to resolve package attr paths against the local pkgs set.";
internal = true;
readOnly = true;
};
options.meta.lib.users = lib.mkOption { options.meta.lib.users = lib.mkOption {
type = lib.types.attrs; type = lib.types.attrs;
description = "Canonical user attrsets shared by host definitions."; description = "Canonical user attrsets shared by host definitions.";
@@ -148,6 +162,7 @@ in
mkCaddyReverseProxy mkCaddyReverseProxy
mkHost mkHost
mkHostUser mkHostUser
resolvePackagePath
; ;
}; };
} }
+2 -2
View File
@@ -4,7 +4,7 @@ let
name = "kiri"; name = "kiri";
realName = "Jelle Spreeuwenberg"; realName = "Jelle Spreeuwenberg";
homeDirectory = "/home/kiri"; homeDirectory = "/home/kiri";
terminalPackageAttr = "kitty"; terminalPackagePath = [ "kitty" ];
emails = { emails = {
main = { main = {
address = "mail@jelles.net"; address = "mail@jelles.net";
@@ -33,7 +33,7 @@ let
name = "ergon"; name = "ergon";
realName = "Jelle Spreeuwenberg"; realName = "Jelle Spreeuwenberg";
homeDirectory = "/home/ergon"; homeDirectory = "/home/ergon";
terminalPackageAttr = "kitty"; terminalPackagePath = [ "kitty" ];
emails = { emails = {
work = { work = {
address = "jelle.spreeuwenberg@yookr.org"; address = "jelle.spreeuwenberg@yookr.org";