🚧 Finish user configuration loading and implement working workstation setup

This commit is contained in:
Jo 2025-04-27 17:37:30 +02:00
parent 54edba0070
commit 09c06d34e5
8 changed files with 137 additions and 16 deletions
README.md
homes/x86_64-linux/jo
modules/nixos
archetypes/workstation
services/docker
system
kernel
networking
users
systems/x86_64-nixos/puzzlevision

View file

@ -6,22 +6,30 @@
<br>
## 🚧 State of development
Version 2.0 is still very much an experiment and not ready to be used in a production
environment. If you must, try running it within a VM using the provided deployment
instructions.
All the basic functionality of v2 should be working correctly, including:
- The custom lib implementation at self.lib, recursively built from the contents of the `lib` directory.
- Loading of systems from the `systems` directory, using easy-hosts.
- A basic workstation archetype for desktop systems.
- Creating users in your systems through ${self.namespace}.users,
automatically maps home-manager configurations from the `homes` directory to their corresponding users.
Nonetheless, one should still consider this implementation experimental,
once I start using this on my laptop,
I'll aim for production grade stability.
## 🚀 Deployment
To deploy a system run the following command in your terminal of choice.
```sh
sudo nixos-rebuild switch --flake .#hostname
sudo nixos-rebuild switch --flake .#hostname --accept-flake-config
```
If you're interested in a quick way to experiment with this configuration,
you may use the following command to build a VM.
```sh
sudo nixos-rebuild build-vm --flake .#hostname
sudo nixos-rebuild build-vm --flake .#hostname --accept-flake-config
```
## 📝 Goals and improvements

View file

@ -1,10 +1,7 @@
{
pkgs,
...
}: {
{pkgs, ...}: {
home.packages = with pkgs; [
vscodium
cmatrix
zed-editor
firefox
];
home.stateVersion = "25.05";

View file

@ -0,0 +1,32 @@
{
lib,
self,
config,
...
}: let
inherit (lib) mkEnableOption mkIf mkDefault;
inherit (self) namespace;
cfg = config.${namespace}.archetypes.workstation;
in {
options.${namespace}.archetypes.workstation = {
enable = mkEnableOption "the workstation archetype.";
};
config = mkIf cfg.enable {
${namespace} = {
# Basic system functionality
system.grub.enable = true;
system.networking.enable = true;
system.kernel.enable = true;
# Services
services.docker.enable = true;
# Desktop environment
desktop.gnome.enable = true;
};
time.timeZone = mkDefault "Europe/Berlin";
};
}

View file

@ -0,0 +1,20 @@
{
lib,
self,
config,
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (self) namespace;
cfg = config.${namespace}.services.docker;
in {
options.${namespace}.services.docker = {
enable = mkEnableOption "the docker service.";
};
config = mkIf cfg.enable {
# Enable docker
virtualisation.docker.enable = true;
};
}

View file

@ -0,0 +1,22 @@
{
lib,
pkgs,
self,
config,
...
}: let
inherit (lib) mkEnableOption mkIf;
inherit (self) namespace;
inherit (self.lib) mkOpt;
cfg = config.${namespace}.system.kernel;
in {
options.${namespace}.system.kernel = {
enable = mkEnableOption "Modify the standard kernel settings";
version = mkOpt lib.types.str "linuxPackages_latest" "Set the kernel version to be used by your system";
};
config = mkIf cfg.enable {
boot.kernelPackages = pkgs.${cfg.version};
};
}

View file

@ -0,0 +1,19 @@
{
lib,
self,
config,
...
}: let
inherit (lib) mkEnableOption mkIf;
inherit (self) namespace;
cfg = config.${namespace}.system.networking;
in {
options.${namespace}.system.networking = {
enable = mkEnableOption "networking.";
};
config = mkIf cfg.enable {
networking.networkmanager.enable = true;
};
}

View file

@ -39,6 +39,9 @@ in {
};
config = {
# TODO: fix this
#nix.settings.trusted-users = ["root" (lib.forEach cfg (username: toString username))];
# Manage users declaratively and map userConfig to users.users by name;
users.mutableUsers = false;
users.users = lib.mapAttrs (username: userConfig:

View file

@ -10,14 +10,34 @@
extraGroups = ["wheel"];
};
desktop.gnome.enable = true;
system.grub.enable = true;
users.jo = {
enable = true;
password = "jo"; # For testing only, replace with sops secret before production use
extraGroups = ["wheel"];
};
archetypes.workstation.enable = true;
};
environment.systemPackages = with pkgs; [
ghostty
firefox
# Configure 8GB SWAP partition
swapDevices = [
{
device = "/swapfile";
size = 8 * 1024;
}
];
boot = {
# Configure additional kernel modules.
extraModulePackages = [
pkgs.linuxPackages_latest.rtl8821ce # Use custom network-card driver.
];
blacklistedKernelModules = [
"rtw88_8821ce" # Block the default network-card driver.
];
};
networking.hostName = "puzzlevision";
system.stateVersion = "25.05";
}