2026-05-02 09:53:27 +02:00
|
|
|
# hosts/common/users/m3tam3re.nix — Central user definition with m3ta-home integration.
|
|
|
|
|
#
|
|
|
|
|
# This module:
|
|
|
|
|
# 1. Creates the m3tam3re NixOS user
|
|
|
|
|
# 2. Loads the m3ta-home profile system via mkHome
|
|
|
|
|
# 3. Sets per-host feature flags based on a host profile mapping
|
|
|
|
|
# 4. Imports per-host home.nix overrides (monitors, HW-specific config)
|
2024-10-20 00:30:58 +02:00
|
|
|
{
|
|
|
|
|
config,
|
|
|
|
|
pkgs,
|
|
|
|
|
inputs,
|
|
|
|
|
...
|
2026-05-02 09:53:27 +02:00
|
|
|
}: let
|
|
|
|
|
hostname = config.networking.hostName;
|
|
|
|
|
|
|
|
|
|
# ── Per-host profile mapping ──
|
|
|
|
|
# Determines which m3ta-home context and sets each host gets.
|
|
|
|
|
# To add a new host: add an entry here + create hosts/<hostname>/home.nix if needed.
|
|
|
|
|
hostProfiles = {
|
|
|
|
|
m3-ares = {
|
|
|
|
|
context = "desktop";
|
|
|
|
|
sets = ["coding" "gaming" "media"];
|
|
|
|
|
};
|
|
|
|
|
m3-kratos = {
|
|
|
|
|
context = "desktop";
|
|
|
|
|
sets = ["coding" "gaming" "media"];
|
|
|
|
|
};
|
|
|
|
|
m3-atlas = {
|
|
|
|
|
context = "server";
|
|
|
|
|
sets = ["coding"];
|
|
|
|
|
};
|
|
|
|
|
m3-helios = {
|
|
|
|
|
context = "server";
|
|
|
|
|
sets = [];
|
|
|
|
|
};
|
|
|
|
|
m3-hermes = {
|
|
|
|
|
context = "server";
|
|
|
|
|
sets = [];
|
|
|
|
|
};
|
|
|
|
|
m3-aether = {
|
|
|
|
|
context = "server";
|
|
|
|
|
sets = [];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
profile = hostProfiles.${hostname} or {context = "server"; sets = [];};
|
|
|
|
|
m3ta-lib = inputs.m3ta-home.lib;
|
|
|
|
|
|
|
|
|
|
# Check if a per-host home.nix exists
|
|
|
|
|
hostHomeFile = ./../../${hostname}/home.nix;
|
|
|
|
|
hostHomeExists = builtins.pathExists hostHomeFile;
|
|
|
|
|
in {
|
|
|
|
|
# ── NixOS user definition ──
|
2024-10-20 00:30:58 +02:00
|
|
|
users.users.m3tam3re = {
|
|
|
|
|
password = "12345";
|
|
|
|
|
isNormalUser = true;
|
|
|
|
|
description = "m3tam3re";
|
|
|
|
|
extraGroups = [
|
|
|
|
|
"wheel"
|
|
|
|
|
"networkmanager"
|
|
|
|
|
"libvirtd"
|
|
|
|
|
"flatpak"
|
|
|
|
|
"audio"
|
|
|
|
|
"video"
|
|
|
|
|
"plugdev"
|
|
|
|
|
"input"
|
|
|
|
|
"kvm"
|
|
|
|
|
"qemu-libvirtd"
|
2025-03-24 13:05:28 +01:00
|
|
|
"adbusers"
|
2024-10-20 00:30:58 +02:00
|
|
|
];
|
|
|
|
|
openssh.authorizedKeys.keys = [
|
|
|
|
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC3YEmpYbM+cpmyD10tzNRHEn526Z3LJOzYpWEKdJg8DaYyPbDn9iyVX30Nja2SrW4Wadws0Y8DW+Urs25/wVB6mKl7jgPJVkMi5hfobu3XAz8gwSdjDzRSWJrhjynuaXiTtRYED2INbvjLuxx3X8coNwMw58OuUuw5kNJp5aS2qFmHEYQErQsGT4MNqESe3jvTP27Z5pSneBj45LmGK+RcaSnJe7hG+KRtjuhjI7RdzMeDCX73SfUsal+rHeuEw/mmjYmiIItXhFTDn8ZvVwpBKv7xsJG90DkaX2vaTk0wgJdMnpVIuIRBa4EkmMWOQ3bMLGkLQeK/4FUkNcvQ/4+zcZsg4cY9Q7Fj55DD41hAUdF6SYODtn5qMPsTCnJz44glHt/oseKXMSd556NIw2HOvihbJW7Rwl4OEjGaO/dF4nUw4c9tHWmMn9dLslAVpUuZOb7ykgP0jk79ldT3Dv+2Hj0CdAWT2cJAdFX58KQ9jUPT3tBnObSF1lGMI7t77VU= m3tam3re@m3-nix"
|
2026-03-02 19:24:28 +01:00
|
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBZcjCKl0DRuOUOMXbM0GKY5JjvmyFpVZ/tRlTKWu/zp razr"
|
2026-04-24 21:38:57 +02:00
|
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEZbg/Z9mnflXuLahGY8WOSBMqbgeqVIkIwRkquys1Ml sascha.koenig@azintec.com"
|
2024-10-20 00:30:58 +02:00
|
|
|
];
|
2025-10-22 19:48:25 +02:00
|
|
|
packages = [inputs.home-manager.packages.${pkgs.stdenv.hostPlatform.system}.default];
|
2024-10-20 00:30:58 +02:00
|
|
|
};
|
2026-05-02 09:53:27 +02:00
|
|
|
|
|
|
|
|
# ── Home-Manager configuration via m3ta-home ──
|
|
|
|
|
home-manager.users.m3tam3re = {
|
|
|
|
|
imports =
|
|
|
|
|
[
|
|
|
|
|
# Load m3ta-home composition engine
|
|
|
|
|
(m3ta-lib.mkHome {
|
|
|
|
|
user = "m3tam3re";
|
|
|
|
|
identity = "private";
|
|
|
|
|
inherit (profile) context sets;
|
|
|
|
|
})
|
|
|
|
|
]
|
|
|
|
|
# Per-host feature flag overrides
|
|
|
|
|
++ (
|
|
|
|
|
if hostname == "m3-ares" || hostname == "m3-kratos"
|
|
|
|
|
then [
|
|
|
|
|
# Desktop feature flags (both desktop hosts are identical)
|
|
|
|
|
{
|
|
|
|
|
base = {
|
|
|
|
|
shell = {
|
|
|
|
|
fish.enable = true;
|
|
|
|
|
nushell.enable = true;
|
|
|
|
|
starship.enable = true;
|
|
|
|
|
};
|
|
|
|
|
cliTools = {
|
|
|
|
|
fzf.enable = true;
|
|
|
|
|
nitch.enable = true;
|
|
|
|
|
television.enable = true;
|
|
|
|
|
};
|
|
|
|
|
secrets.enable = true;
|
|
|
|
|
};
|
|
|
|
|
desktop = {
|
|
|
|
|
wm = {
|
|
|
|
|
hyprland.enable = true;
|
|
|
|
|
rofi.enable = true;
|
|
|
|
|
wayland.enable = true;
|
|
|
|
|
};
|
|
|
|
|
apps = {
|
|
|
|
|
crypto.enable = true;
|
|
|
|
|
obsidian.enable = true;
|
|
|
|
|
office.enable = true;
|
|
|
|
|
};
|
|
|
|
|
theme = {
|
|
|
|
|
fonts.enable = true;
|
|
|
|
|
wallpapers.enable = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
coding = {
|
|
|
|
|
editors = {
|
|
|
|
|
neovim.enable = true;
|
|
|
|
|
zed.enable = true;
|
|
|
|
|
};
|
|
|
|
|
lsp.enable = true;
|
|
|
|
|
packages.enable = true;
|
|
|
|
|
languages = {
|
|
|
|
|
python.enable = true;
|
|
|
|
|
javascript.enable = true;
|
|
|
|
|
rustToolchain.enable = true;
|
|
|
|
|
go.enable = true;
|
|
|
|
|
typescript.enable = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
profiles.gaming = {
|
|
|
|
|
steam.enable = true;
|
|
|
|
|
gamescope.enable = true;
|
|
|
|
|
};
|
|
|
|
|
profiles.media = {
|
|
|
|
|
obs.enable = true;
|
|
|
|
|
ffmpeg.enable = true;
|
|
|
|
|
kdenlive.enable = true;
|
|
|
|
|
ytDlp.enable = true;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
else if hostname == "m3-atlas"
|
|
|
|
|
then [
|
|
|
|
|
{
|
|
|
|
|
base = {
|
|
|
|
|
shell = {
|
|
|
|
|
nushell.enable = true;
|
|
|
|
|
starship.enable = true;
|
|
|
|
|
};
|
|
|
|
|
cliTools = {
|
|
|
|
|
fzf.enable = true;
|
|
|
|
|
nitch.enable = true;
|
|
|
|
|
zellij.enable = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
coding.editors.neovim.enable = true;
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
else
|
|
|
|
|
# m3-helios, m3-hermes, m3-aether — minimal server
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
base = {
|
|
|
|
|
shell = {
|
|
|
|
|
fish.enable = true;
|
|
|
|
|
starship.enable = true;
|
|
|
|
|
};
|
|
|
|
|
cliTools = {
|
|
|
|
|
fzf.enable = true;
|
|
|
|
|
nitch.enable = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
# Per-host home.nix (Hyprland monitors, HW-specific overrides)
|
|
|
|
|
++ (
|
|
|
|
|
if hostHomeExists
|
|
|
|
|
then [hostHomeFile]
|
|
|
|
|
else []
|
|
|
|
|
);
|
|
|
|
|
};
|
2024-10-20 00:30:58 +02:00
|
|
|
}
|