From 17de32268d61ceef0ddbae937403f4ee21598bec Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 17 Jul 2026 22:05:43 +0200 Subject: [PATCH] feat: port Phase 1 foundational modules and setup comin in flake.nix --- flake.nix | 65 ++++++++++++++++++++++++ modules/common/default.nix | 16 ++++++ modules/default.nix | 7 +++ modules/services/default.nix | 5 ++ modules/services/openssh/default.nix | 20 ++++++++ modules/virtualisation/default.nix | 5 ++ modules/virtualisation/guest/default.nix | 34 +++++++++++++ users/admin/default.nix | 39 ++++++++++++++ users/default.nix | 5 ++ 9 files changed, 196 insertions(+) create mode 100644 flake.nix create mode 100644 modules/common/default.nix create mode 100644 modules/default.nix create mode 100644 modules/services/default.nix create mode 100644 modules/services/openssh/default.nix create mode 100644 modules/virtualisation/default.nix create mode 100644 modules/virtualisation/guest/default.nix create mode 100644 users/admin/default.nix create mode 100644 users/default.nix diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..5589e5a --- /dev/null +++ b/flake.nix @@ -0,0 +1,65 @@ +{ + description = "Homelab configuration using flakes (v2 GitOps)"; + + inputs = { + nixpkgs.url = "nixpkgs/nixos-unstable"; + + flake-utils.url = "github:numtide/flake-utils"; + + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + utils = { + url = "github:gytis-ivaskevicius/flake-utils-plus"; + inputs.flake-utils.follows = "flake-utils"; + }; + + comin = { + url = "github:nlewo/comin"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = inputs@{ + self, nixpkgs, + flake-utils, sops-nix, utils, comin, + ... + }: + let + system = utils.lib.system.x86_64-linux; + in + utils.lib.mkFlake { + inherit self inputs; + + hostDefaults = { + inherit system; + + modules = [ + ./modules + ./users + + sops-nix.nixosModules.sops + comin.nixosModules.comin + + # Base comin configuration for all nodes + ({ config, pkgs, ... }: { + services.comin = { + enable = true; + remotes = [{ + name = "origin"; + # Replace with actual internal forgejo URL once available + url = "https://github.com/example/nix-config.git"; + branches.main.name = "v2"; + }]; + }; + }) + ]; + }; + + hosts = { + # Hosts will be populated here as they are migrated to the v2 branch. + }; + }; +} diff --git a/modules/common/default.nix b/modules/common/default.nix new file mode 100644 index 0000000..44309f5 --- /dev/null +++ b/modules/common/default.nix @@ -0,0 +1,16 @@ +{ + config = { + homelab = { + services.openssh.enable = true; + users.admin.enable = true; + }; + + nix.settings.experimental-features = [ + "flakes" + "nix-command" + ]; + + # Set your time zone. + time.timeZone = "Europe/Brussels"; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..6d76ee2 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./common + ./services + ./virtualisation + ]; +} diff --git a/modules/services/default.nix b/modules/services/default.nix new file mode 100644 index 0000000..f7295a5 --- /dev/null +++ b/modules/services/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./openssh + ]; +} diff --git a/modules/services/openssh/default.nix b/modules/services/openssh/default.nix new file mode 100644 index 0000000..4b9cb5e --- /dev/null +++ b/modules/services/openssh/default.nix @@ -0,0 +1,20 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.homelab.services.openssh; +in { + options.homelab.services.openssh.enable = lib.mkEnableOption "OpenSSH daemon"; + + config = lib.mkIf cfg.enable { + services.openssh = { + # Enable the OpenSSH daemon. + enable = true; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + # Disable keyboard-interactive authentication. + KbdInteractiveAuthentication = false; + }; + }; + }; +} diff --git a/modules/virtualisation/default.nix b/modules/virtualisation/default.nix new file mode 100644 index 0000000..50418a4 --- /dev/null +++ b/modules/virtualisation/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./guest + ]; +} diff --git a/modules/virtualisation/guest/default.nix b/modules/virtualisation/guest/default.nix new file mode 100644 index 0000000..bbb9a50 --- /dev/null +++ b/modules/virtualisation/guest/default.nix @@ -0,0 +1,34 @@ +{ config, lib, modulesPath, ... }: + +let + cfg = config.homelab.virtualisation.guest; +in { + options.homelab.virtualisation.guest.enable = lib.mkEnableOption "Settings for devices running on virtualisation, e.g. Proxmox"; + + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + config = lib.mkIf cfg.enable { + boot = { + # Whether to enable growing the root partition on boot. + growPartition = true; + # Use Grub bootloader + loader.grub = { + enable = true; + devices = [ + "nodev" + ]; + }; + }; + + fileSystems."/" = lib.mkDefault { + device = "/dev/disk/by-label/nixos"; + autoResize = true; + fsType = "ext4"; + }; + + # Enable QEMU Guest for Proxmox + services.qemuGuest.enable = true; + }; +} diff --git a/users/admin/default.nix b/users/admin/default.nix new file mode 100644 index 0000000..dc01c81 --- /dev/null +++ b/users/admin/default.nix @@ -0,0 +1,39 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.homelab.users.admin; +in { + options.homelab.users.admin = { + enable = lib.mkEnableOption "user System Administrator"; + authorizedKeys = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ + # HomeLab > NixOS > admin > ssh + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWIOOEqTy8cWKpENVbzD4p7bsQgQb/Dgpzk8i0dZ00T" + ]; + }; + }; + + config = lib.mkIf cfg.enable { + nix.settings.trusted-users = [ + config.users.users.gh0st.name + ]; + + users.users.gh0st = { + description = "System Administrator"; + isNormalUser = true; + extraGroups = [ + config.users.groups.wheel.name # Enable 'sudo' for the user. + ]; + initialPassword = "ChangeMe"; + openssh.authorizedKeys.keys = cfg.authorizedKeys; + packages = with pkgs; [ + curl + git + tmux + vim + wget + ]; + }; + }; +} diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 0000000..26b5ff9 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./admin + ]; +}