refactor: centralize workstation HM base and derive terminal from user metadata
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
{
|
||||
lib,
|
||||
terminalPackage,
|
||||
}:
|
||||
{
|
||||
settingsVersion = 53;
|
||||
bar = {
|
||||
@@ -255,7 +259,7 @@
|
||||
pinnedApps = [ ];
|
||||
useApp2Unit = false;
|
||||
sortByMostUsed = true;
|
||||
terminalCommand = "kitty -e";
|
||||
terminalCommand = "${lib.getExe terminalPackage} -e";
|
||||
customLaunchPrefixEnabled = false;
|
||||
customLaunchPrefix = "";
|
||||
viewMode = "grid";
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
homeModules = config.flake.modules.homeManager;
|
||||
in
|
||||
{
|
||||
flake.modules.homeManager.cli-base = {
|
||||
imports = [
|
||||
homeModules.terminal
|
||||
homeModules.shell
|
||||
homeModules.neovim
|
||||
homeModules.nh
|
||||
homeModules.git
|
||||
homeModules.dev-tools
|
||||
homeModules.podman
|
||||
homeModules.ai
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -4,13 +4,6 @@ let
|
||||
in
|
||||
{
|
||||
flake.modules.homeManager.ergon-workstation = {
|
||||
imports = [
|
||||
homeModules.cli-base
|
||||
homeModules.desktop-session
|
||||
homeModules.personal-productivity
|
||||
homeModules.ssh-client
|
||||
homeModules.sops
|
||||
homeModules.nix
|
||||
];
|
||||
imports = [ homeModules.workstation-base ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
homeModules = config.flake.modules.homeManager;
|
||||
in
|
||||
{
|
||||
flake.modules.homeManager.kiri-server = {
|
||||
imports = [
|
||||
homeModules.cli-base
|
||||
homeModules.syncthing
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -5,12 +5,7 @@ in
|
||||
{
|
||||
flake.modules.homeManager.kiri-workstation = {
|
||||
imports = [
|
||||
homeModules.cli-base
|
||||
homeModules.desktop-session
|
||||
homeModules.personal-productivity
|
||||
homeModules.ssh-client
|
||||
homeModules.sops
|
||||
homeModules.nix
|
||||
homeModules.workstation-base
|
||||
homeModules.syncthing
|
||||
homeModules.qbittorrent-client
|
||||
];
|
||||
|
||||
@@ -35,6 +35,10 @@ let
|
||||
type = lib.types.str;
|
||||
};
|
||||
|
||||
terminalPackageAttr = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
};
|
||||
|
||||
nixosConfigurationPath = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "${config.homeDirectory}/.config/nixos";
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
lib,
|
||||
terminalPackage,
|
||||
}:
|
||||
{
|
||||
"Mod+Return" = {
|
||||
action.spawn = "kitty";
|
||||
action.spawn = "${lib.getExe terminalPackage}";
|
||||
hotkey-overlay.title = "Terminal";
|
||||
};
|
||||
"Mod+B" = {
|
||||
|
||||
@@ -41,8 +41,27 @@
|
||||
inherit (display) mode;
|
||||
}
|
||||
) config.meta.host.displays;
|
||||
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr;
|
||||
terminalAttrPath =
|
||||
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then
|
||||
builtins.tail rawTerminalAttrPath
|
||||
else
|
||||
rawTerminalAttrPath;
|
||||
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
|
||||
hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram;
|
||||
in
|
||||
{
|
||||
assertions = [
|
||||
{
|
||||
assertion = terminalPackage != null;
|
||||
message = "Unknown terminal package `${config.meta.user.terminalPackageAttr}` for user `${config.meta.user.name}`.";
|
||||
}
|
||||
{
|
||||
assertion = hasMainProgram;
|
||||
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must define `meta.mainProgram`.";
|
||||
}
|
||||
];
|
||||
|
||||
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
|
||||
dconf.settings = {
|
||||
@@ -123,7 +142,16 @@
|
||||
mouse.accel-speed = 0.4;
|
||||
};
|
||||
|
||||
binds = import ./_bindings.nix;
|
||||
binds =
|
||||
if hasMainProgram then
|
||||
import ./_bindings.nix {
|
||||
inherit
|
||||
lib
|
||||
terminalPackage
|
||||
;
|
||||
}
|
||||
else
|
||||
{ };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
}:
|
||||
let
|
||||
homeModules = config.flake.modules.homeManager;
|
||||
baseSettings = import ./_noctalia-config.nix;
|
||||
portableSettings = lib.recursiveUpdate baseSettings {
|
||||
mkPortableSettings =
|
||||
baseSettings:
|
||||
lib.recursiveUpdate baseSettings {
|
||||
bar.widgets.right = baseSettings.bar.widgets.right ++ [
|
||||
{
|
||||
id = "Battery";
|
||||
@@ -18,13 +19,45 @@ in
|
||||
flake.modules.homeManager.noctalia =
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr;
|
||||
terminalAttrPath =
|
||||
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then
|
||||
builtins.tail rawTerminalAttrPath
|
||||
else
|
||||
rawTerminalAttrPath;
|
||||
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
|
||||
hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram;
|
||||
baseSettings =
|
||||
if hasMainProgram then
|
||||
import ./_noctalia-config.nix {
|
||||
inherit
|
||||
lib
|
||||
terminalPackage
|
||||
;
|
||||
}
|
||||
else
|
||||
{ };
|
||||
in
|
||||
{
|
||||
imports = [ inputs.noctalia.homeModules.default ];
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = terminalPackage != null;
|
||||
message = "Unknown terminal package `${config.meta.user.terminalPackageAttr}` for user `${config.meta.user.name}`.";
|
||||
}
|
||||
{
|
||||
assertion = hasMainProgram;
|
||||
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must define `meta.mainProgram`.";
|
||||
}
|
||||
];
|
||||
|
||||
programs.noctalia-shell = {
|
||||
enable = true;
|
||||
package = lib.mkForce (
|
||||
@@ -37,9 +70,37 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
flake.modules.homeManager.noctalia-portable = {
|
||||
flake.modules.homeManager.noctalia-portable =
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr;
|
||||
terminalAttrPath =
|
||||
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then
|
||||
builtins.tail rawTerminalAttrPath
|
||||
else
|
||||
rawTerminalAttrPath;
|
||||
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
|
||||
hasMainProgram = terminalPackage != null && terminalPackage ? meta.mainProgram;
|
||||
baseSettings =
|
||||
if hasMainProgram then
|
||||
import ./_noctalia-config.nix {
|
||||
inherit
|
||||
lib
|
||||
terminalPackage
|
||||
;
|
||||
}
|
||||
else
|
||||
{ };
|
||||
in
|
||||
{
|
||||
imports = [ homeModules.noctalia ];
|
||||
|
||||
programs.noctalia-shell.settings = lib.mkForce portableSettings;
|
||||
programs.noctalia-shell.settings = lib.mkForce (
|
||||
if hasMainProgram then mkPortableSettings baseSettings else { }
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,10 +1,47 @@
|
||||
{
|
||||
flake.modules.homeManager.terminal =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
rawTerminalAttrPath = lib.splitString "." config.meta.user.terminalPackageAttr;
|
||||
terminalAttrPath =
|
||||
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then
|
||||
builtins.tail rawTerminalAttrPath
|
||||
else
|
||||
rawTerminalAttrPath;
|
||||
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
|
||||
hasTerminalPackage = terminalPackage != null;
|
||||
hasMainProgram = hasTerminalPackage && terminalPackage ? meta.mainProgram;
|
||||
terminalDesktopId =
|
||||
if hasMainProgram then "${terminalPackage.meta.mainProgram}.desktop" else null;
|
||||
in
|
||||
{
|
||||
assertions = [
|
||||
{
|
||||
assertion = hasTerminalPackage;
|
||||
message = "Unknown terminal package `${config.meta.user.terminalPackageAttr}` for user `${config.meta.user.name}`.";
|
||||
}
|
||||
{
|
||||
assertion = hasMainProgram;
|
||||
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must define `meta.mainProgram`.";
|
||||
}
|
||||
{
|
||||
assertion = hasMainProgram && builtins.pathExists "${terminalPackage}/share/applications/${terminalDesktopId}";
|
||||
message = "Terminal package `${config.meta.user.terminalPackageAttr}` must provide `${terminalDesktopId}`.";
|
||||
}
|
||||
{
|
||||
assertion = hasMainProgram && terminalPackage.meta.mainProgram == "kitty";
|
||||
message = "The terminal feature currently only supports kitty-specific Home Manager configuration.";
|
||||
}
|
||||
];
|
||||
|
||||
xdg.terminal-exec = {
|
||||
enable = true;
|
||||
settings.default = [ "kitty.desktop" ];
|
||||
settings.default = lib.optional (terminalDesktopId != null) terminalDesktopId;
|
||||
};
|
||||
|
||||
programs.kitty = {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{ config, ... }:
|
||||
let
|
||||
nixosModules = config.flake.modules.nixos;
|
||||
homeModules = config.flake.modules.homeManager;
|
||||
in
|
||||
{
|
||||
flake.modules.nixos.workstation-base = {
|
||||
@@ -26,4 +27,22 @@ in
|
||||
programs.nix-ld.enable = true;
|
||||
environment.localBinInPath = true;
|
||||
};
|
||||
|
||||
flake.modules.homeManager.workstation-base = {
|
||||
imports = [
|
||||
homeModules.terminal
|
||||
homeModules.shell
|
||||
homeModules.neovim
|
||||
homeModules.nh
|
||||
homeModules.git
|
||||
homeModules.dev-tools
|
||||
homeModules.podman
|
||||
homeModules.ai
|
||||
homeModules.desktop-session
|
||||
homeModules.personal-productivity
|
||||
homeModules.ssh-client
|
||||
homeModules.sops
|
||||
homeModules.nix
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,8 +10,33 @@ let
|
||||
in
|
||||
{
|
||||
flake.modules.nixos.orion-admin =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
rawTerminalAttrPath = lib.splitString "." config.meta.host.users.kiri.terminalPackageAttr;
|
||||
terminalAttrPath =
|
||||
if rawTerminalAttrPath != [ ] && builtins.head rawTerminalAttrPath == "pkgs" then
|
||||
builtins.tail rawTerminalAttrPath
|
||||
else
|
||||
rawTerminalAttrPath;
|
||||
terminalPackage = lib.attrByPath terminalAttrPath null pkgs;
|
||||
in
|
||||
{
|
||||
assertions = [
|
||||
{
|
||||
assertion = terminalPackage != null;
|
||||
message = "Unknown terminal package `${config.meta.host.users.kiri.terminalPackageAttr}` for user `kiri`.";
|
||||
}
|
||||
{
|
||||
assertion = terminalPackage != null && lib.elem "terminfo" terminalPackage.outputs;
|
||||
message = "Terminal package `${config.meta.host.users.kiri.terminalPackageAttr}` must provide a `terminfo` output for `orion`.";
|
||||
}
|
||||
];
|
||||
|
||||
users.users.kiri = {
|
||||
linger = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
@@ -20,8 +45,9 @@ in
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.kitty
|
||||
];
|
||||
] ++ lib.optional (terminalPackage != null && lib.elem "terminfo" terminalPackage.outputs) (
|
||||
lib.getOutput "terminfo" terminalPackage
|
||||
);
|
||||
};
|
||||
|
||||
flake.modules.nixos.orion = metaLib.mkHost {
|
||||
@@ -45,7 +71,11 @@ in
|
||||
(metaLib.mkHostUser {
|
||||
account = metaLib.users.kiri;
|
||||
needsPassword = false;
|
||||
homeImports = [ homeModules.kiri-server ];
|
||||
homeImports = [
|
||||
homeModules.shell
|
||||
homeModules.git
|
||||
homeModules.syncthing
|
||||
];
|
||||
})
|
||||
./_hardware.nix
|
||||
./_disk.nix
|
||||
|
||||
@@ -4,6 +4,7 @@ let
|
||||
name = "kiri";
|
||||
realName = "Jelle Spreeuwenberg";
|
||||
homeDirectory = "/home/kiri";
|
||||
terminalPackageAttr = "kitty";
|
||||
emails = {
|
||||
main = {
|
||||
address = "mail@jelles.net";
|
||||
@@ -32,6 +33,7 @@ let
|
||||
name = "ergon";
|
||||
realName = "Jelle Spreeuwenberg";
|
||||
homeDirectory = "/home/ergon";
|
||||
terminalPackageAttr = "kitty";
|
||||
emails = {
|
||||
work = {
|
||||
address = "jelle.spreeuwenberg@yookr.org";
|
||||
|
||||
Reference in New Issue
Block a user