mirror of
https://github.com/Jokiller230/puzzlevision.git
synced 2025-06-23 09:09:09 +00:00
🚧 Finish user configuration loading and implement working workstation setup
This commit is contained in:
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
users
systems/x86_64-nixos/puzzlevision
18
README.md
18
README.md
|
@ -6,22 +6,30 @@
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
## 🚧 State of development
|
## 🚧 State of development
|
||||||
Version 2.0 is still very much an experiment and not ready to be used in a production
|
All the basic functionality of v2 should be working correctly, including:
|
||||||
environment. If you must, try running it within a VM using the provided deployment
|
|
||||||
instructions.
|
- 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
|
## 🚀 Deployment
|
||||||
To deploy a system run the following command in your terminal of choice.
|
To deploy a system run the following command in your terminal of choice.
|
||||||
|
|
||||||
```sh
|
```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,
|
If you're interested in a quick way to experiment with this configuration,
|
||||||
you may use the following command to build a VM.
|
you may use the following command to build a VM.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo nixos-rebuild build-vm --flake .#hostname
|
sudo nixos-rebuild build-vm --flake .#hostname --accept-flake-config
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📝 Goals and improvements
|
## 📝 Goals and improvements
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
vscodium
|
zed-editor
|
||||||
cmatrix
|
firefox
|
||||||
];
|
];
|
||||||
|
|
||||||
home.stateVersion = "25.05";
|
home.stateVersion = "25.05";
|
||||||
|
|
32
modules/nixos/archetypes/workstation/default.nix
Normal file
32
modules/nixos/archetypes/workstation/default.nix
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
20
modules/nixos/services/docker/default.nix
Normal file
20
modules/nixos/services/docker/default.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
22
modules/nixos/system/kernel/default.nix
Normal file
22
modules/nixos/system/kernel/default.nix
Normal 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};
|
||||||
|
};
|
||||||
|
}
|
19
modules/nixos/system/networking/default.nix
Normal file
19
modules/nixos/system/networking/default.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
|
@ -39,6 +39,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
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;
|
# Manage users declaratively and map userConfig to users.users by name;
|
||||||
users.mutableUsers = false;
|
users.mutableUsers = false;
|
||||||
users.users = lib.mapAttrs (username: userConfig:
|
users.users = lib.mapAttrs (username: userConfig:
|
||||||
|
|
|
@ -10,14 +10,34 @@
|
||||||
extraGroups = ["wheel"];
|
extraGroups = ["wheel"];
|
||||||
};
|
};
|
||||||
|
|
||||||
desktop.gnome.enable = true;
|
users.jo = {
|
||||||
system.grub.enable = true;
|
enable = true;
|
||||||
|
password = "jo"; # For testing only, replace with sops secret before production use
|
||||||
|
extraGroups = ["wheel"];
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
archetypes.workstation.enable = true;
|
||||||
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";
|
system.stateVersion = "25.05";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue