Home-manager doesn't start in virtual machine session

Hello, everyone

why home-manager doesn’t start in virtual machine session?

nixos-rebuild build-vm --flake ./flake.nix#NixOS

flake.nix:

{
  description = "";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    nixpkgs-24.url = "github:NixOS/nixpkgs?ref=nixos-24.11";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nur = {
      url = "github:nix-community/NUR";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = {
    self,
    nixpkgs,
    nixpkgs-24,
    home-manager,
    ...
  } @ inputs: let
    vuser = "x";
    vhost = "NixOS";
    system = "x86_64-linux";
    pkgs = import nixpkgs {
      config.allowUnfree = true;
    };
    stable = import nixpkgs-24 {
      inherit system;
      config.allowUnfree = true;
    };
  in {
    nixosConfigurations.${vhost} = nixpkgs.lib.nixosSystem {
      modules = [
        (
          {
            config,
            pkgs,
            lib,
            ...
          }: {
            boot = {
              initrd.enable = true;
              consoleLogLevel = 3;
              tmp.cleanOnBoot = true;
              loader = {
              };
              kernel.sysctl = {
                "net.ipv4.ip_forward" = 1;

                "net.ipv6.conf.all.forwarding" = 1;
              };
              extraModprobeConfig = ''
              '';
              kernelModules = [
              ];
              kernelParams = [
              ];
              extraModulePackages = with config.boot.kernelPackages; [
              ];
              blacklistedKernelModules = [
              ];
              kernelPackages = pkgs.linuxPackages_latest;
            };

            hardware = {
            };

            virtualisation = {
              vmVariant.virtualisation = {
                cores = 3;
                memorySize = 4096;
                qemu = {
                  virtioKeyboard = true;
                  guestAgent.enable = true;
                  diskInterface = "virtio";
                };
                sharedDirectories = {
                  home-shared = {
                    source = "/home/q/vm-shared"; # Директория на хосте
                    target = "/home/${vuser}/shared"; # Где она появится в VM
                    securityModel = "mapped-xattr"; # Оптимально для большинства случаев
                  };
                };
              };
            };

            environment = {
            };

            nixpkgs = {
              hostPlatform = "${system}";
              overlays = [
                inputs.nur.overlays.default
              ];
              config = {
                allowUnfree = true;
                allowBroken = true;
                allowInsecure = false;
                packageOverrides = pkgs: {};
                permittedInsecurePackages = [
                ];
              };
            };

            security = {
              sudo = {
                enable = true;
                execWheelOnly = true;
                extraConfig = ''
                  # Defaults targetpw
                '';
              };
              rtkit.enable = true;
              polkit = {
                enable = true;
                debug = false;
              };
            };

            networking = {
              hostName = "${vhost}";
              networkmanager.enable = true;
              firewall = {
                enable = true;
                allowPing = true;
                allowedTCPPorts = [80 443 4444 8080];
              };
              nat = {
                enable = true;
                enableIPv6 = true;
              };
            };

            services = {
              openssh = {
                enable = true;
                ports = [22]; # Стандартный порт SSH
                openFirewall = true;
              };
              logind.extraConfig = ''
                # don’t shutdown when power button is short-pressed
                # HandlePowerKey=ignore
              '';

              xserver = {
                enable = true;
                videoDrivers = ["virtio"];
                windowManager.i3.enable = true;
                xkb = {
                  layout = "us,ru";
                  options = "grp:alt_shift_toggle";
                };
                excludePackages = with pkgs; [
                ];
              };
              displayManager = {
                ly = {
                  enable = true;
                  settings = {
                    animation = "doom"; # doom/matrix
                    clear_password = true; # Очищать пароль при неудачной попытке
                    clock = "%c"; # Формат отображения времени
                    load = true; # Загружать сохраненный рабочий стол и имя пользователя
                    hide_key_hints = true; # Скрыть подсказки клавиш управления питанием
                    save = true;
                    save_session = false;
                    auth_fails = "2"; # Количество попыток до специальной анимации
                    box_title = "The Gates of Login"; # Надпись над рамкой
                    asterisk = "x"; # Символ для маскировки пароля
                  };
                };
                autoLogin = {
                  enable = false;
                  user = "${vuser}";
                };
              };

              spice-vdagentd.enable = true; # Для улучшения интеграции с Spice
              spice-autorandr.enable = true; # Автоматическое определение разрешения экрана
              qemuGuest.enable = true;
              libinput.enable = true;
              pulseaudio.enable = false; # Disabling PulseAudio, replace with your desired audio system

              pipewire = {
                enable = true;
                audio.enable = true;
                jack.enable = true;
                wireplumber.enable = true;
                alsa.enable = true;
                alsa.support32Bit = true;
                pulse.enable = true;
              };
            };

            users = {
              defaultUserShell = pkgs.zsh;

              users = {
                ${vuser} = {
                  description = "X";
                  isNormalUser = true;
                  password = "test";
                  extraGroups = [
                    "wheel"
                    "wireshark"
                    "networkmanager"
                  ];
                };
              };
            };

            xdg = {
              mime.enable = true;
              portal = {
                enable = true;
                xdgOpenUsePortal = true;
                extraPortals = with pkgs; [
                  xdg-desktop-portal-gtk
                ];
                configPackages = with pkgs; [
                ];
                config = {
                  common.default = "*";
                };
              };
            };

            programs = {
              appimage = {
                enable = true;
                binfmt = true;
              };
              firejail.enable = true;
              zsh.enable = true;
              wireshark = {
                enable = true;
                package = pkgs.wireshark;
              };
              proxychains = {
                enable = true;
                proxyDNS = true;
                quietMode = true;
                proxies = {
                  tor = {
                    enable = true;
                    type = "socks5";
                    host = "127.0.0.1";
                    port = 9050;
                  };
                };
              };
            };

            zramSwap = {
              enable = true;
              algorithm = "lz4";
              memoryPercent = 100;
              priority = 999;
            };

            systemd = {
              oomd.enable = true;
            };

            time.timeZone = "Europe/Kiev";
            i18n = {
              defaultLocale = "en_US.UTF-8";
              extraLocaleSettings = {
                LC_ADDRESS = "uk_UA.UTF-8";
                LC_IDENTIFICATION = "uk_UA.UTF-8";
                LC_MEASUREMENT = "uk_UA.UTF-8";
                LC_MONETARY = "uk_UA.UTF-8";
                LC_NAME = "uk_UA.UTF-8";
                LC_NUMERIC = "uk_UA.UTF-8";
                LC_PAPER = "uk_UA.UTF-8";
                LC_TELEPHONE = "uk_UA.UTF-8";
                LC_TIME = "uk_UA.UTF-8";
              };
            };

            fonts = {
              enableDefaultPackages = true;
              enableGhostscriptFonts = true;
              packages = with pkgs; [
              ];
            };
            nix = {
              settings = {
                experimental-features = [
                  "nix-command"
                  "flakes"
                ];
                auto-optimise-store = true;
                trusted-users = ["root" "${vuser}"];
                allowed-users = ["${vuser}"];
                warn-dirty = true;
                substituters = ["https://nix-gaming.cachix.org"];
                trusted-public-keys = [
                  "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
                ];
              };
            };
            system = {
              autoUpgrade.enable = true;
              autoUpgrade.allowReboot = true;
              stateVersion = config.system.nixos.release;
            };
          }
        )
        home-manager.nixosModules.home-manager
        {
          home-manager = {
            extraSpecialArgs = {
              inherit
                stable
                ;
            };
            useGlobalPkgs = true;
            useUserPackages = true;
            users.${vuser} = {
              stable,
              config,
              pkgs,
              lib,
              ...
            }: {
              imports = [
              ];
              home = {
                username = "${vuser}";
                homeDirectory = "/home/${vuser}";
                stateVersion = "25.05";
                sessionVariables = {
                  DISABLE_QT5_COMPAT = "0";
                  GDK_BACKEND = "x11";
                  NIXOS_OZONE_WL = "1";
                  QT_AUTO_SCREEN_SCALE_FACTOR = "1";
                  XDG_SESSION_TYPE = "x11";
                  SDL_VIDEODRIVER = "x11";
                };
                file = {
                };
                packages = with pkgs;
                  [
                    nmap
                    metasploit
                    burpsuite
                    aircrack-ng
                    hashcat
                    thc-hydra
                    openvas-scanner
                    dsniff
                    tcpdump
                    arp-scan
                    netdiscover
                    whois
                    wireguard-tools
                    tor-browser
                    pciutils
                    usbutils
                    lshw
                    dmidecode
                    efibootmgr
                    lsof
                    killall
                    zip
                    unzip
                    unrar
                    p7zip
                    wget
                    keepassxc
                    hexdump
                    gcc
                    go
                    cargo
                    jq
                    inxi
                    fastfetch
                    nitch
                    ncdu
                    tree
                    acpi
                  ]
                  ++ (with stable; [
                    ]);
              };
              services = {
              };
              programs = {
                fd = {
                  enable = true;
                  hidden = true;
                };
                alacritty = {
                  enable = true;
                  settings = {
                    env.TERM = "xterm-256color";
                    scrolling.multiplier = 5;
                    selection.save_to_clipboard = true;
                    font = {
                      size = 6.0;
                    };
                    colors = {
                      primary = {
                        background = "0x000000";
                        foreground = "0xFFFFFF";
                      };
                    };
                  };
                };
                chromium.enable = true;
                firefox = {
                  enable = true;
                  nativeMessagingHosts = [pkgs.firefoxpwa];
                  policies = {
                    DisableTelemetry = true;
                    DisableFirefoxStudies = true;
                    DisablePocket = true;
                  };
                  profiles = {
                    personal = {
                      id = 0;
                      path = "personal";
                      extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
                        ublock-origin
                        privacy-badger
                        keepassxc-browser
                      ];
                      settings = {
                        "browser.tabs.loadInBackground" = true;
                        "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
                      };
                      search = {
                        force = true;
                        default = "DuckDuckGo";
                      };
                    };
                  };
                };
                zsh = {
                  enable = true;
                  autosuggestion.enable = true;
                  enableCompletion = true;
                  history.size = 10000;
                  syntaxHighlighting.enable = true;
                };
                vscode = {
                  enable = true;
                  profiles.default = {
                    enableUpdateCheck = false;
                    enableExtensionUpdateCheck = false;
                    extensions = with pkgs.vscode-extensions; [
                      bbenoist.nix
                      ms-vscode.cpptools
                      ms-vscode.cpptools-extension-pack
                      ms-vscode.cmake-tools
                      jnoortheen.nix-ide
                      github.copilot
                      github.copilot-chat
                      #ms-python.python
                      #ms-python.debugpy
                    ];
                    userSettings = {
                      python.formatting.blackPath = "${pkgs.black}/bin/black";
                      python.defaultInterpreterPath = "/etc/profiles/per-user/q/bin/python3";
                      terminal.integrated.shell.linux = "${pkgs.zsh}/bin/zsh";
                    };
                  };
                };
                btop = {
                  enable = true;
                  settings = {
                    color_theme = "TTY";
                    theme_background = false;
                    update_ms = 100;
                  };
                };
              };
              qt = {
                enable = true;
                platformTheme.name = "gtk3";
                style = {
                  name = "Adwaita-dark";
                  package = pkgs.adwaita-qt6;
                };
              };
              gtk = {
                enable = true;
                theme = {
                  name = "adw-gtk3-dark";
                  package = pkgs.adw-gtk3;
                };
                gtk3 = {
                  extraConfig.gtk-application-prefer-dark-theme = true;
                };
                gtk4 = {
                  extraConfig.gtk-application-prefer-dark-theme = true;
                };
              };
              xsession.windowManager.i3 = {
                enable = true;
                config = {
                  modifier = "Mod1";
                  terminal = "alacritty";
                  window = {
                    border = 0;
                    titlebar = false;
                  };
                  modes = {
                    resize = {
                      Down = "resize grow height 10 px or 10 ppt";
                      Escape = "mode default";
                      Left = "resize shrink width 10 px or 10 ppt";
                      Return = "mode default";
                      Right = "resize grow width 10 px or 10 ppt";
                      Up = "resize shrink height 10 px or 10 ppt";
                    };
                  };
                  bars = [
                    {
                      position = "bottom";
                      mode = "dock";
                      hiddenState = "hide";
                      statusCommand = "${pkgs.i3status}/bin/i3status";
                      command = "${pkgs.i3}/bin/i3bar -t";
                      workspaceButtons = true;
                      trayOutput = "none";
                      fonts = {
                        names = ["monospace"];
                        size = 8.0;
                      };
                      colors = {
                        background = "#000000";
                        statusline = "#ffffff";
                        separator = "#666666";
                        focusedWorkspace = {
                          background = "#4c7899";
                          border = "#285577";
                          text = "#ffffff";
                        };
                        activeWorkspace = {
                          background = "#333333";
                          border = "#5f676a";
                          text = "#ffffff";
                        };
                        urgentWorkspace = {
                          background = "#2f343a";
                          border = "#900000";
                          text = "#ffffff";
                        };
                        bindingMode = {
                          background = "#2f343a";
                          border = "#900000";
                          text = "#ffffff";
                        };
                        inactiveWorkspace = {
                          background = "#000000";
                          border = "#000000";
                          text = "#646464";
                        };
                      };
                      extraConfig = ''
                      '';
                    }
                  ];
                  keybindings = lib.mkOptionDefault {
                    # Управление звуком через wpctl (напрямую через Wireplumber/Pipewire)
                    "XF86AudioRaiseVolume" = "exec --no-startup-id wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+";
                    "XF86AudioLowerVolume" = "exec --no-startup-id wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-";
                    "XF86AudioMute" = "exec --no-startup-id wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
                    "XF86AudioMicMute" = "exec --no-startup-id wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
                  };
                };
              };
            };
          };
        }
      ];
    };
  };
}

Hello
Does the Home-Manager start when you do a nix Rebuild?
Also can you post the output of journalctl -xe --unit home-manager-x

if i understood your question correctly, then in nixos virtual machine there is no configuration file, therefore i can’t do nixos-rebuild switch. home-manager gives an error at boot time

I think I need to enable dconf

it worked! thanks! //

1 Like