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