feat: add dev host

This commit is contained in:
Dominik Polakovics Polakovics 2026-02-01 10:52:59 +01:00
parent cabf453a5d
commit 6d7db643bc
4 changed files with 163 additions and 0 deletions

View file

@ -0,0 +1,65 @@
{ config, lib, pkgs, ... }:
let
# === CONFIGURABLE SETTINGS ===
projectsDir = "projects"; # Relative to /home/dominik
repositories = [
{ url = "gitea@git.cloonar.com:Cloonar/wohnservice-wien-typo3.git"; path = "projects/cloonar/wohnservice-wien"}
# Add repos here: { url = "git@..."; path = "relative/path"; }
];
# === END CONFIGURABLE ===
cloneScript = pkgs.writeShellScript "clone-repos" ''
set -eu
HOME_DIR="/home/dominik"
PROJECTS_DIR="$HOME_DIR/${projectsDir}"
mkdir -p "$PROJECTS_DIR"
chown dominik:users "$PROJECTS_DIR"
${lib.concatMapStrings (repo: ''
if [ ! -d "$PROJECTS_DIR/${repo.path}" ]; then
${pkgs.sudo}/bin/sudo -u dominik ${pkgs.git}/bin/git clone ${repo.url} "$PROJECTS_DIR/${repo.path}" || true
fi
'') repositories}
'';
in
{
imports = [
./modules/dev-tools.nix
];
networking.hostName = "dev";
system.stateVersion = "22.05";
time.timeZone = "Europe/Vienna";
# User configuration
users.users.dominik = {
isNormalUser = true;
home = "/home/dominik";
extraGroups = [ "wheel" "docker" ];
openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDN/2SAFm50kraB1fepAizox/QRXxB7WbqVbH+5OPalDT47VIJGNKOKhixQoqhABHxEoLxdf/C83wxlCVlPV9poLfDgVkA3Lyt5r3tSFQ6QjjOJAgchWamMsxxyGBedhKvhiEzcr/Lxytnoz3kjDG8fqQJwEpdqMmJoMUfyL2Rqp16u+FQ7d5aJtwO8EUqovhMaNO7rggjPpV/uMOg+tBxxmscliN7DLuP4EMTA/FwXVzcFNbOx3K9BdpMRAaSJt4SWcJO2cS2KHA5n/H+PQI7nz5KN3Yr/upJN5fROhi/SHvK39QOx12Pv7FCuWlc+oR68vLaoCKYhnkl3DnCfc7A7"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRQuPqH5fdX3KEw7DXzWEdO3AlUn1oSmtJtHB71ICoH Generated By Termius"
];
};
users.groups.users = {};
services.openssh.enable = true;
programs.zsh.enable = true;
users.defaultUserShell = pkgs.zsh;
# Clone repos as dominik user on boot
systemd.services.clone-repos = {
description = "Clone configured git repositories";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = cloneScript;
RemainAfterExit = true;
};
};
}

View file

@ -0,0 +1,36 @@
{ pkgs, ... }:
{
nixpkgs.overlays = [
(import ../../utils/overlays/packages.nix)
];
environment.systemPackages = with pkgs; [
# Development tools
ddev
docker-compose
git
git-lfs
# PHP
php
# Node.js
nodejs_22
# AI coding
claude-code
# Utilities
jq
unzip
vim
wget
curl
htop
tmux
];
# Docker for ddev
virtualisation.docker.enable = true;
users.users.dominik.extraGroups = [ "docker" ];
}

1
hosts/fw/dev Symbolic link
View file

@ -0,0 +1 @@
../dev

View file

@ -0,0 +1,61 @@
{ lib, pkgs, config, ... }:
let
hostname = "dev";
in
{
microvm.vms.dev = {
config = {
imports = [
../dev/configuration.nix
./network-prefix.nix
];
networkPrefix = config.networkPrefix;
microvm = {
mem = 4096;
vcpu = 2;
shares = [
{
source = "/nix/store";
mountPoint = "/nix/.ro-store";
tag = "ro-store";
proto = "virtiofs";
}
{
source = "/var/lib/microvms/persist/dev";
mountPoint = "/persist";
tag = "persist";
proto = "virtiofs";
}
{
source = "/var/lib/microvms/persist/dev/home";
mountPoint = "/home";
tag = "home";
proto = "virtiofs";
}
];
volumes = [{
image = "rootfs.img";
mountPoint = "/";
size = 51200;
}];
interfaces = [{
type = "tap";
id = "vm-${hostname}";
mac = "02:00:00:00:02:01";
}];
};
systemd.network.networks."10-lan" = {
matchConfig.PermanentMACAddress = "02:00:00:00:02:01";
address = [ "${config.networkPrefix}.97.15/24" ];
gateway = [ "${config.networkPrefix}.97.1" ];
dns = [ "${config.networkPrefix}.97.1" ];
};
};
};
}