From c5cc4b4f1103709f380e34711895466206874abe Mon Sep 17 00:00:00 2001 From: tux Date: Sun, 10 May 2026 04:57:09 +0530 Subject: [PATCH] feat(vps): add vps host --- modules/hosts/vps/config.nix | 57 ++++++++++++++++++++++++ modules/hosts/vps/default.nix | 23 ++++++++++ modules/hosts/vps/disko.nix | 82 +++++++++++++++++++++++++++++++++++ modules/hosts/vps/home.nix | 6 +++ 4 files changed, 168 insertions(+) create mode 100644 modules/hosts/vps/config.nix create mode 100644 modules/hosts/vps/default.nix create mode 100644 modules/hosts/vps/disko.nix create mode 100644 modules/hosts/vps/home.nix diff --git a/modules/hosts/vps/config.nix b/modules/hosts/vps/config.nix new file mode 100644 index 0000000..6ecd88d --- /dev/null +++ b/modules/hosts/vps/config.nix @@ -0,0 +1,57 @@ +{ config, ... }: +{ + flake.modules.nixos.vps = + { + hostName, + modulesPath, + ... + }: + { + imports = + with config.flake.modules.nixos; + [ + boot + hardware + networking + virtualisation + services + ] + ++ [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + tnix = { + boot = { + legacy.enable = true; + + impermanence = { + enable = true; + + home = { + directories = [ + ".local/share/nvim" + ".local/share/zsh" + ".local/share/zoxide" + ".local/state/lazygit" + ]; + }; + }; + }; + + networking.openssh.enable = true; + + virtualisation = { + docker.enable = true; + }; + }; + + # --- Networking --- + networking = { + hostName = hostName; + networkmanager.enable = true; + firewall.enable = false; + }; + + system.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/vps/default.nix b/modules/hosts/vps/default.nix new file mode 100644 index 0000000..73b21bb --- /dev/null +++ b/modules/hosts/vps/default.nix @@ -0,0 +1,23 @@ +{ + inputs, + config, + ... +}: +let + hostName = "vps"; + userName = "tux"; + userEmail = "t@tux.rs"; + system = "x86_64-linux"; + unstable = true; + nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable; +in +{ + flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit hostName userName userEmail; }; + modules = [ + config.flake.modules.nixos.core + config.flake.modules.nixos.${hostName} + ]; + }; +} diff --git a/modules/hosts/vps/disko.nix b/modules/hosts/vps/disko.nix new file mode 100644 index 0000000..f6dccaa --- /dev/null +++ b/modules/hosts/vps/disko.nix @@ -0,0 +1,82 @@ +{ inputs, ... }: +{ + flake.modules.nixos.vps = + { config, lib, ... }: + let + hasOptinPersistence = config.tnix.boot.impermanence.enable; + isLegacy = config.tnix.boot.legacy.enable; + in + { + imports = [ + inputs.disko.nixosModules.disko + ]; + + disko.devices.disk.primary = { + device = "/dev/sda"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "defaults" + "umask=0077" + ]; + }; + }; + root = { + size = "100%"; + type = "8300"; + content = { + type = "btrfs"; + # Base subvolumes that always exist + subvolumes = { + "/root" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + "noacl" + "space_cache=v2" + ]; + mountpoint = "/nix"; + }; + } + # Conditionally merge /persist only when impermanence is enabled + // lib.optionalAttrs hasOptinPersistence { + "/persist" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/persist"; + }; + }; + }; + }; + } + // lib.optionalAttrs isLegacy { + boot = { + name = "boot"; + size = "1M"; + type = "EF02"; + }; + }; + }; + }; + }; +} diff --git a/modules/hosts/vps/home.nix b/modules/hosts/vps/home.nix new file mode 100644 index 0000000..1764545 --- /dev/null +++ b/modules/hosts/vps/home.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + flake.modules.homeManager.vps = { + home.stateVersion = "26.05"; + }; +}