refactor: use terminal package attr paths with shared resolver
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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`.";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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`.";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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";
|
||||||
|
|||||||
Reference in New Issue
Block a user