feat: initial NixOS home lab infrastructure setup

- Add modular flake-based NixOS configuration
- Implement GitOps foundation with CI/CD pipeline
- Create comprehensive documentation and branching strategy
- Add modular desktop environments (GNOME, Cosmic, Sway)
- Configure virtualization stack (Incus, Libvirt, Podman)
- Set up development tools and hardware-specific modules
- Establish user configuration with literate programming support

This commit represents the completion of Phase 1: Flakes Migration
with modular configuration, virtualization, and GitOps foundation.
This commit is contained in:
Geir Okkenhaug Jerstad 2025-06-04 16:10:13 +02:00
commit f30013723e
43 changed files with 4220 additions and 0 deletions

View file

@ -0,0 +1,29 @@
{ config, pkgs, ... }: {
# Common desktop configuration shared across all environments
# XDG Portal configuration for Wayland/X11 compatibility
xdg.portal = {
enable = true;
wlr.enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
# Display manager and session management
services.dbus.enable = true;
# Common desktop packages
environment.systemPackages = with pkgs; [
# Basic desktop tools
firefox
alacritty
nautilus
# Media and graphics
vlc
gimp
# Utilities
gnome-tweaks
dconf-editor
];
}

View file

@ -0,0 +1,11 @@
{ config, pkgs, ... }: {
# Cosmic Desktop Environment (System76's new Rust-based DE)
services.desktopManager.cosmic.enable = true;
services.displayManager.cosmic-greeter.enable = true;
services.desktopManager.cosmic.xwayland.enable = true;
# Cosmic-specific packages
environment.systemPackages = with pkgs; [
# Cosmic is still in development, most packages come with the DE
];
}

22
modules/desktop/gnome.nix Normal file
View file

@ -0,0 +1,22 @@
{ config, pkgs, ... }: {
# GNOME Desktop Environment
services.xserver = {
enable = true;
desktopManager.gnome.enable = true;
xkb.layout = "no";
};
# GNOME-specific packages
environment.systemPackages = with pkgs; [
gnome-extension-manager
gnome-shell-extensions
dconf-editor
gnome-tweaks
];
# GNOME services
services.gnome = {
gnome-keyring.enable = true;
glib-networking.enable = true;
};
}

28
modules/desktop/sway.nix Normal file
View file

@ -0,0 +1,28 @@
{ config, pkgs, ... }: {
# Sway Window Manager (Wayland-based i3 replacement)
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
};
# Sway-specific packages
environment.systemPackages = with pkgs; [
# Core Sway tools
swaylock
swayidle
swaybg
# Wayland utilities
waybar # Status bar
fuzzel # Application launcher
gammastep # Blue light filter
mako # Notification daemon
flameshot # Screenshot tool
wl-clipboard # Clipboard utilities
# Additional Wayland tools
grim # Screenshot utility
slurp # Screen area selection
wf-recorder # Screen recorder
];
}