{ description = "Nomarchy - A NixOS-based distribution with Omarchy flavour"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; impermanence.url = "github:nix-community/impermanence"; home-manager = { url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-colors.url = "github:misterio77/nix-colors"; stylix.url = "github:danth/stylix"; walker.url = "github:abenz1267/walker"; }; outputs = { self, nixpkgs, nixos-hardware, disko, impermanence, home-manager, nix-colors, stylix, walker, ... } @ inputs: { # Expose inputs for downstream use inherit inputs; nixosModules = { system = import ./modules/system; home = import ./modules/home; }; nixosConfigurations = { installerIso = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; modules = [ { nixpkgs.hostPlatform = "x86_64-linux"; } "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-base.nix" ./hosts/live-iso.nix ./modules/system home-manager.nixosModules.home-manager { system.stateVersion = "25.11"; home-manager.extraSpecialArgs = { inherit inputs; }; services.displayManager.autoLogin.enable = true; services.displayManager.autoLogin.user = "nixos"; home-manager.useGlobalPkgs = false; home-manager.useUserPackages = true; home-manager.users.nixos = { imports = [ ./modules/home ]; home.username = "nixos"; home.homeDirectory = "/home/nixos"; home.stateVersion = "25.11"; }; } ]; }; installerVm = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; modules = [ { nixpkgs.hostPlatform = "x86_64-linux"; } ./hosts/live-iso.nix ./modules/system home-manager.nixosModules.home-manager { system.stateVersion = "25.11"; networking.hostName = "nomarchy-installer"; home-manager.extraSpecialArgs = { inherit inputs; }; services.displayManager.autoLogin.enable = true; services.displayManager.autoLogin.user = "nixos"; home-manager.useGlobalPkgs = false; home-manager.useUserPackages = true; home-manager.users.nixos = { imports = [ ./modules/home ]; home.username = "nixos"; home.homeDirectory = "/home/nixos"; home.stateVersion = "25.11"; }; # VM specific settings to enable graphical boot virtualisation.vmVariant = { virtualisation.memorySize = 2048; virtualisation.cores = 2; virtualisation.graphics = true; virtualisation.qemu.options = [ "-device virtio-vga" ]; }; # Use a dummy hardware config for VM fileSystems."/" = { device = "/dev/disk/by-label/nixos"; }; boot.loader.grub.device = "/dev/vda"; boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_blk" "virtio_gpu" "virtio_net" "virtio_mmio" ]; boot.kernelParams = nixpkgs.lib.mkForce [ "video=1280x800" "quiet" "splash" "boot.shell_on_fail" ]; # Ensure the user has the right groups for graphical environment users.users.nixos = { isNormalUser = true; extraGroups = [ "wheel" "video" "networkmanager" "render" ]; initialPassword = "nixos"; }; } ]; }; vm = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; modules = [ { nixpkgs.hostPlatform = "x86_64-linux"; } ./modules/system ./modules/system/hardware.nix home-manager.nixosModules.home-manager ({ pkgs, ... }: { system.stateVersion = "25.11"; networking.hostName = "nomarchy"; home-manager.extraSpecialArgs = { inherit inputs; }; # Diagnostic service to debug the black screen inside the VM systemd.services.nomarchy-diag = { description = "Nomarchy VM Diagnostics"; wantedBy = [ "multi-user.target" ]; after = [ "display-manager.service" ]; serviceConfig = { Type = "oneshot"; StandardOutput = "tty"; StandardError = "tty"; TTYPath = "/dev/ttyS0"; ExecStart = pkgs.writeScript "diag.sh" '' #!${pkgs.bash}/bin/bash echo "--- NOMARCHY VM DIAGNOSTICS START ---" echo "SDDM Helper Logs:" ${pkgs.systemd}/bin/journalctl -t sddm-helper --no-pager -n 50 echo "User (nomarchy) Environment:" ${pkgs.sudo}/bin/sudo -u nomarchy env | grep -E "XDG|DISPLAY|WAYLAND" echo "User (nomarchy) Systemd Status:" ${pkgs.sudo}/bin/sudo -u nomarchy ${pkgs.systemd}/bin/systemctl --user status || echo "User systemd not running" echo "User (nomarchy) Journal Logs:" ${pkgs.sudo}/bin/sudo -u nomarchy ${pkgs.systemd}/bin/journalctl --user --no-pager -n 100 echo "Hyprland Binary Check:" ls -l /run/current-system/sw/bin/Hyprland || echo "Hyprland binary NOT FOUND in sw/bin" echo "Hyprland Crash Dumps:" ${pkgs.coreutils}/bin/ls -l /home/nomarchy/.cache/hyprland/ || echo "No crash dumps found" echo "--- NOMARCHY VM DIAGNOSTICS END ---" ''; }; }; # VM specific settings virtualisation.vmVariant = { virtualisation.memorySize = 8192; virtualisation.cores = 4; virtualisation.graphics = true; virtualisation.qemu.options = [ "-device virtio-vga" "-serial mon:stdio" ]; }; # Use a dummy hardware config for VM fileSystems."/" = { device = "/dev/disk/by-label/nixos"; }; boot.loader.grub.device = "/dev/vda"; boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_blk" "virtio_gpu" "virtio_net" "virtio_mmio" ]; boot.kernelParams = nixpkgs.lib.mkForce [ "video=1280x800" "quiet" "splash" "boot.shell_on_fail" "console=ttyS0" "console=tty1" ]; services.qemuGuest.enable = true; # Setup default user for testing users.users.nomarchy = { isNormalUser = true; extraGroups = [ "wheel" "video" "render" "networkmanager" ]; initialPassword = "nixos"; }; environment.systemPackages = [ pkgs.sudo ]; # Enable passwordless sudo for the test user security.sudo.wheelNeedsPassword = false; # Autologin on the serial console for debugging services.getty.autologinUser = "nomarchy"; services.displayManager.autoLogin.enable = true; services.displayManager.autoLogin.user = "nomarchy"; home-manager.useGlobalPkgs = false; home-manager.useUserPackages = true; home-manager.users.nomarchy = { imports = [ ./modules/home ]; home.username = "nomarchy"; home.homeDirectory = "/home/nomarchy"; home.stateVersion = "25.11"; }; }) ]; }; }; }; }