diff --git a/Droidnix/generated/hosts/traveldroid/boot.nix b/Droidnix/generated/hosts/traveldroid/boot.nix new file mode 100644 index 000000000..26644f24a --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/boot.nix @@ -0,0 +1,95 @@ +{ config, pkgs, lib, flakeRoot, ... }: + +let + hostname = config.networking.hostName or "traveldroid"; + + # Build GRUB theme from your assets + grubTheme = pkgs.stdenv.mkDerivation { + name = "droidnix-grub-theme"; + + src = "${flakeRoot}/assets/traveldroid/theming/boot"; + + installPhase = '' + mkdir -p $out + + # GRUB expects this exact name + cp theme.txt $out/theme.txt + + # Assets + cp background.png $out/ + ''; + }; +in +{ + ################################# + # Bootloader (UEFI + GRUB) + ################################# + boot.loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + + grub = { + enable = true; + efiSupport = true; + device = "nodev"; + useOSProber = true; + + # Keep multiple generations (fixes menu issue) + configurationLimit = 10; + + # ✅ Fully declarative theme + theme = grubTheme; + }; + + timeout = 5; + }; + + ################################# + # Kernel / initrd + ################################# + boot.kernelPackages = pkgs.linuxPackages_latest; + + boot.kernelParams = [ + "quiet" + "splash" + "udev.log_level=3" + "rd.systemd.show_status=false" + ]; + + boot.consoleLogLevel = 0; + + boot.initrd.systemd.enable = true; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_usb_sdmmc" + ]; + + boot.kernelModules = [ "kvm-intel" ]; + + ################################# + # Plymouth + ################################# + boot.plymouth = { + enable = true; + theme = "rings"; + themePackages = [ + (pkgs.adi1090x-plymouth-themes.override { + selected_themes = [ "rings" ]; + }) + ]; + }; + + ################################# + # CPU / platform + ################################# + hardware.cpu.intel.updateMicrocode = + lib.mkDefault config.hardware.enableRedistributableFirmware; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix b/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix new file mode 100644 index 000000000..802b3df31 --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix @@ -0,0 +1,47 @@ +{ + hostname, + pkgs, + lib, + modulesPath, + user, + config, + ... +}: +{ + imports = [ + # (modulesPath + "/installer/scan/not-detected.nix") + #../../hardware/hardware.nix + ]; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_usb_sdmmc" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/811D-0676"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; } + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/Droidnix/generated/hosts/traveldroid/host.nix b/Droidnix/generated/hosts/traveldroid/host.nix new file mode 100644 index 000000000..7a8827eb3 --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/host.nix @@ -0,0 +1,43 @@ +{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }: + +let + hostname = "traveldroid"; + + modulesPath = "${flakeRoot}/generated/modules/${hostname}"; + usersPath = "${flakeRoot}/generated/users"; + + hostModules = import-tree modulesPath; + globalUsers = import-tree usersPath; + + allModules = hostModules.imports ++ globalUsers.imports; + +in +{ + ################################# + # Core system config + ################################# + + networking.hostName = hostname; + system.stateVersion = "26.05"; + + ################################# + # Imports + ################################# + + imports = + [ + ./boot.nix + ./hardware-configuration.nix + + # REQUIRED for Home Manager + home-manager.nixosModules.home-manager + ] + ++ allModules; + + ################################# + # Home Manager integration + ################################# + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/kitty.nix b/Droidnix/generated/modules/traveldroid/apps/kitty.nix new file mode 100644 index 000000000..7ebc33ce4 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/kitty.nix @@ -0,0 +1,52 @@ +{ lib, pkgs, config, ... }: + +let + ################################# + # Determine default username + ################################# + username = config.defaultUser or "henrov"; + moduleName = "kitty"; + + ################################# + # Paths to assets + ################################# + assetPath = ../../../assets/traveldroid/conf/${moduleName}; + programFiles = builtins.readDir assetPath; + + # Convert asset files into a nix attribute set + files = lib.genAttrs (builtins.attrNames programFiles) (name: { + source = "${assetPath}/${name}"; + }); + +in +{ + ################################# + # System-wide packages + ################################# + environment.systemPackages = [ + pkgs.kitty + ]; + + ################################# + # Home Manager user configuration + ################################# + _module.args.hmUsers = { + ${username} = { + + # Enable Kitty through Home Manager + programs.kitty.enable = true; + + # Extra user-specific config snippet + programs.kitty.extraConfig = '' + # Include the Catppuccin-Mocha theme + include themes/Catppuccin-Mocha.conf + ''; + + # Map all asset files into ~/.config/kitty/ + home.file = lib.mkMerge ( + map (name: { ".config/${moduleName}/${name}" = { source = files.${name}.source; }; }) + (builtins.attrNames files) + ); + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/packages.nix b/Droidnix/generated/modules/traveldroid/apps/packages.nix new file mode 100644 index 000000000..94bbefb4b --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/packages.nix @@ -0,0 +1,55 @@ +{ lib, config, pkgs, flakeRoot, ... }: + +let + ################################# + # Read package list from config file + ################################# + packagesConfPath = "${flakeRoot}/assets/traveldroid/conf/packages.conf"; + raw = builtins.readFile packagesConfPath; + + rawLines = lib.splitString "\n" raw; + + # Guard against splitting into characters accidentally + _guard = assert !(builtins.stringLength raw > 1 && builtins.length rawLines == builtins.stringLength raw); true; + + # Clean each line: remove CRs, comments, trim whitespace + cleanLine = line: + let + noCR = lib.replaceStrings [ "\r" ] [ "" ] line; + noInlineComment = lib.head (lib.splitString "#" noCR); + in + lib.strings.trim noInlineComment; + + # Filter out empty lines + entries = builtins.filter (l: l != "") (map cleanLine rawLines); + + # Resolve attribute paths in pkgs + resolvePkg = name: + let + parts = lib.splitString "." name; + found = lib.attrByPath parts null pkgs; + in + if found == null then + (throw '' + packages.nix: package not found in pkgs + Token : ${builtins.toJSON name} + packages.conf : ${packagesConfPath} + Hint : check the attribute name on search.nixos.org/packages + '') + else + found; + + # Final system-wide package list + packages = builtins.seq _guard (map resolvePkg entries); + +in { + ################################# + # Allow unfree packages globally + ################################# + nixpkgs.config = { allowUnfree = true; }; + + ################################# + # System packages + ################################# + environment.systemPackages = packages; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/starship.nix b/Droidnix/generated/modules/traveldroid/apps/starship.nix new file mode 100644 index 000000000..4450be7d6 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/starship.nix @@ -0,0 +1,31 @@ +{ lib, config, pkgs, flakeRoot, ... }: + +let + # Default username fallback + username = config.defaultUser or "henrov"; + + # Path to the starship config in assets + starshipConfSrc = "${flakeRoot}/assets/traveldroid/conf/starship.toml"; +in +{ + ################################# + # Enable Starship system-wide + ################################# + environment.systemPackages = [ pkgs.starship ]; + + ################################# + # Home Manager user configuration + ################################# + _module.args.hmUsers = { + ${username} = { + programs.starship = { + enable = true; + }; + + # Copy the starship.toml from assets to ~/.config/starship.toml + home.file = { + ".config/starship.toml" = { source = starshipConfSrc; }; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/thunar.nix b/Droidnix/generated/modules/traveldroid/apps/thunar.nix new file mode 100644 index 000000000..15e2d9026 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/thunar.nix @@ -0,0 +1,31 @@ +{ pkgs, config, lib, ... }: + +let + # Resolve the default username from host config + username = config.defaultUser or "henrov"; +in +{ + ############################ + # System-level packages + ############################ + environment.systemPackages = with pkgs; [ + thunar # main file manager + thunar-archive-plugin # zip, tar, rar, 7z support + thunar-volman # auto-mount removable drives + gvfs # support for external drives and network shares + xarchiver # optional GUI archive manager + ]; + + ############################ + # Home Manager user-level configuration + ############################ + # Direct assignment to the user avoids recursiveUpdate issues + home-manager.users."${username}" = { + home.stateVersion = "26.05"; # required + + home.sessionVariables = { + FILE_MANAGER = "thunar"; + USERNAME = username; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/fonts.nix b/Droidnix/generated/modules/traveldroid/desktop/fonts.nix new file mode 100644 index 000000000..4b53d64e4 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/fonts.nix @@ -0,0 +1,8 @@ +{ lib, pkgs, config, ... }: + +{ + fonts.packages = with pkgs; [ + nerd-fonts.iosevka + nerd-fonts.fira-code + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/gtk.nix b/Droidnix/generated/modules/traveldroid/desktop/gtk.nix new file mode 100644 index 000000000..253e2bafe --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/gtk.nix @@ -0,0 +1,45 @@ +{ pkgs, config, lib, ... }: + +let + # Resolve the username from the host config + username = config.defaultUser or "henrov"; +in +{ + ############################ + # System-level GTK packages + ############################ + environment.systemPackages = with pkgs; [ + gtk3 + gtk4 + ]; + + ############################ + # Home Manager user-level GTK configuration + ############################ + # Directly assign the GTK config to the user, no recursiveUpdate + home-manager.users."${username}" = { + gtk = { + enable = true; + + # GTK theme + theme = { + name = "Catppuccin-Mocha-Standard-Blue-Dark"; + package = pkgs.magnetic-catppuccin-gtk; + }; + + # Icon theme + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + # Extra GTK3 / GTK4 settings + gtk3.extraConfig = { + "gtk-application-prefer-dark-theme" = 1; + }; + gtk4.extraConfig = { + "gtk-application-prefer-dark-theme" = 1; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix new file mode 100644 index 000000000..55ef61613 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix @@ -0,0 +1,38 @@ +{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }: + +let + username = config.defaultUser or "henrov"; + assetPath = "${flakeRoot}/assets/traveldroid/conf/hypr/"; + + # Read all files in the asset directory + assetFiles = builtins.attrNames (builtins.readDir assetPath); + + # Convert files to Home Manager xdg config entries + hyprFiles = lib.genAttrs assetFiles (f: { + # Destination path in home directory + name = ".config/hypr/${f}"; + # Source file path + value = { source = "${assetPath}/${f}"; }; + }); + + # Determine Hyprland package + hyprlandPkg = + pkgs.hyprland or + pkgs.hyprland-git or + inputs.hyprland.packages.${pkgs.system}.default; +in +{ + environment.systemPackages = [ hyprlandPkg ]; + + _module.args.hmUsers = { + ${username} = { + home.packages = [ hyprlandPkg ]; + + # Merge all files in the asset folder into ~/.config/hypr/ + home.file = lib.mkMerge hyprFiles; + + # Optional: Hyprland settings + settings.general."col.active_border" = "0xff97cbcd 0xff89b4fa"; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/stylix.nix b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix new file mode 100644 index 000000000..60655dd1f --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix @@ -0,0 +1,75 @@ +{ lib, config, pkgs, flakeRoot, ... }: + +let + # Resolve the default username + username = config.defaultUser or "henrov"; + moduleName = "stylix"; + + # Path to stylix assets + assetPath = ../../../assets/system/conf/${moduleName}; + + # Read all files in the asset directory + programFiles = builtins.readDir assetPath; + + files = lib.genAttrs (builtins.attrNames programFiles) (name: { + source = "${assetPath}/${name}"; + }); + + # Optional stylix.conf + stylixConfFile = "${assetPath}/stylix.conf"; + stylixConf = + if builtins.pathExists stylixConfFile + then builtins.readFile stylixConfFile + else ""; + + # Cursor defaults + cursorName = "phinger-cursors-light"; + cursorSize = 24; + + # Merge all config files + optional stylix.conf into one home.file set + homeFiles = lib.recursiveUpdate + (lib.genAttrs (builtins.attrNames files) (name: { + path = "${moduleName}/${name}"; + source = files.${name}.source; + })) + (if stylixConf != "" then { + "${moduleName}/stylix.conf" = { text = stylixConf; }; + } else {}); +in +{ + ############################ + # System packages + ############################ + environment.systemPackages = [ + pkgs.feh + pkgs.st + ]; + + ############################ + # Home Manager user settings + ############################ + home-manager.users."${username}" = { + # Enable Stylix + stylix = { + enable = true; + + # GTK integration for this user + targets = { + gtk = { enable = true; }; + }; + }; + + # Copy all config files into ~/.config/stylix/ + home.file = homeFiles; + + # Session environment variables + home.sessionVariables = { + STYLIX_CONF = "$HOME/.config/stylix/stylix.conf"; + + XCURSOR_THEME = cursorName; + XCURSOR_SIZE = toString cursorSize; + HYPRCURSOR_THEME = cursorName; + HYPRCURSOR_SIZE = toString cursorSize; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix new file mode 100644 index 000000000..9e9493032 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix @@ -0,0 +1,33 @@ +{ lib, config, pkgs, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + + moduleName = "waybar"; + assetPath = "${flakeRoot}/assets/traveldroid/conf/${moduleName}"; +in +{ + ################################# + # System packages + ################################# + environment.systemPackages = [ + pkgs.waybar + ]; + + ################################# + # Home Manager integration + ################################# + _module.args.hmUsers = { + ${username} = { + + # Install Waybar for the user as well (optional but recommended) + home.packages = [ pkgs.waybar ]; + + # Place config files into ~/.config/waybar/ + xdg.configFile = { + "${moduleName}/config".source = "${assetPath}/config"; + "${moduleName}/style.css".source = "${assetPath}/style.css"; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/wayland.nix b/Droidnix/generated/modules/traveldroid/desktop/wayland.nix new file mode 100644 index 000000000..0c214a100 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/wayland.nix @@ -0,0 +1,24 @@ +{ lib, config, pkgs, ... }: + +{ + ################################# + # Core Wayland packages + ################################# + environment.systemPackages = with pkgs; [ + wayland + wl-clipboard # optional but commonly used for copy/paste + ]; + + ################################# + # Optional: enable graphics stack + ################################# + hardware.graphics.enable = true; + + ################################# + # Optional session variables for Wayland + ################################# + environment.sessionVariables = { + # Forces some apps to use Wayland + NIXOS_OZONE_WL = "1"; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/xdg.nix b/Droidnix/generated/modules/traveldroid/desktop/xdg.nix new file mode 100644 index 000000000..a37bfe915 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/xdg.nix @@ -0,0 +1,43 @@ +{ lib, config, pkgs, inputs, ... }: + +let + ################################# + # Default username fallback + ################################# + username = config.defaultUser or "henrov"; + + ################################# + # Determine XDG portal package + ################################# + xdgPortalHyprlandPkg = + pkgs.xdg-desktop-portal-hyprland or + inputs.xdgPortalHyprland.packages.${pkgs.system}.default; +in +{ + ################################# + # System-wide packages + ################################# + environment.systemPackages = [ + xdgPortalHyprlandPkg + ]; + + ################################# + # Home Manager user config + ################################# + _module.args.hmUsers = { + ${username} = { + home.packages = [ + xdgPortalHyprlandPkg + ]; + + # Enable XDG portal integration for Hyprland + xdg.portal = { + enable = true; + extraPortals = [ xdgPortalHyprlandPkg ]; + config.hyprland = { + "org.freedesktop.impl.portal.Screencast" = [ "hyprland" ]; + }; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix b/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix new file mode 100644 index 000000000..a32b09391 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix @@ -0,0 +1,30 @@ +{ lib, config, pkgs, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; +in +{ + ################################# + # Install tuigreet + ################################# + environment.systemPackages = [ pkgs.tuigreet ]; + + ################################# + # Greetd (simple + reliable) + ################################# + services.greetd = { + enable = true; + + settings.default_session = { + user = "greeter"; + + command = '' + ${pkgs.tuigreet}/bin/tuigreet \ + --remember \ + --time \ + --time-format "%I:%M %p | %a • %h | %F" \ + --cmd ${pkgs.hyprland}/bin/Hyprland + ''; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/networking.nix b/Droidnix/generated/modules/traveldroid/system/networking.nix new file mode 100644 index 000000000..d81a2756c --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/networking.nix @@ -0,0 +1,55 @@ +{ lib, config, pkgs, ... }: + +{ + ################################# + # Networking core + ################################# + networking = { + # Let DHCP be default unless overridden elsewhere + useDHCP = lib.mkDefault true; + + # Hostname comes from host.nix, do NOT redefine here + + ################################# + # NetworkManager (primary stack) + ################################# + networkmanager = { + enable = true; + + # Use iwd backend for WiFi + wifi.backend = "iwd"; + }; + + ################################# + # iwd (WiFi daemon) + ################################# + wireless.iwd = { + enable = true; + # Allow user control via NM / CLI + settings.General.EnableNetworkConfiguration = true; + }; + + ################################# + # Firewall + ################################# + firewall = { + enable = true; + + # KDE Connect support + allowedTCPPortRanges = [ + { from = 1714; to = 1764; } + ]; + + allowedUDPPortRanges = [ + { from = 1714; to = 1764; } + ]; + }; + }; + + ################################# + # System packages + ################################# + environment.systemPackages = [ + pkgs.networkmanager + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/system/nix.nix b/Droidnix/generated/modules/traveldroid/system/nix.nix new file mode 100644 index 000000000..96a5be55a --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/nix.nix @@ -0,0 +1,10 @@ +{ lib, config, ... }: + +{ + nix.settings = { + experimental-features = [ "nix-command" "flakes" ]; + download-buffer-size = 536870912; # 512 MB + cores = 2; + max-jobs = 1; + }; +} diff --git a/Droidnix/generated/users/copy_2_home.nix b/Droidnix/generated/users/copy_2_home.nix new file mode 100644 index 000000000..3bf0ed3a5 --- /dev/null +++ b/Droidnix/generated/users/copy_2_home.nix @@ -0,0 +1,37 @@ +{ config, pkgs, lib, flakeRoot, ... }: + +let + username = config.users.users.defaultUser or "henrov"; + homeDir = "/home/${username}"; + assetPath = "${flakeRoot}/assets/copy_2_home"; +in +{ + environment.systemPackages = [ pkgs.rsync ]; + + systemd.services.copyAssets = { + description = "Copy assets to ${username}'s home directory"; + wantedBy = [ "multi-user.target" ]; + + # oneshot service runs once at boot + serviceConfig.Type = "oneshot"; + + # Always use /bin/sh -c for multi-line commands + serviceConfig.ExecStart = '' + /bin/sh -c ' + echo "Copying assets from ${assetPath} to ${homeDir} ..." + + if [ ! -d "${assetPath}" ]; then + echo "ERROR: ${assetPath} does not exist" + exit 1 + fi + + mkdir -p "${homeDir}" + chown ${username}:${username} "${homeDir}" + + ${pkgs.rsync}/bin/rsync -a --no-owner --no-group "${assetPath}/" "${homeDir}/" + + echo "Done copying assets." + ' + ''; + }; +} diff --git a/Droidnix/generated/users/henrov.nix b/Droidnix/generated/users/henrov.nix new file mode 100644 index 000000000..da5a280d0 --- /dev/null +++ b/Droidnix/generated/users/henrov.nix @@ -0,0 +1,38 @@ +{ lib, config, pkgs, ... }: + +let + username = "henrov"; +in +{ + ################################# + # NixOS system user + ################################# + users.users.${username} = { + isNormalUser = true; + home = "/home/${username}"; + hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/"; + extraGroups = [ "wheel" "networkmanager" ]; + }; + + ################################# + # Home Manager user definition + ################################# + _module.args.hmUsers = { + ${username} = { + # Minimal required + home.username = username; + home.homeDirectory = "/home/${username}"; + home.stateVersion = "26.05"; + + # Add user-specific packages here + home.packages = [ + ]; + + # Add user dotfiles, session variables, etc. here if needed + home.file = { + # Example: + # ".bashrc" = { source = /path/to/bashrc; }; + }; + }; + }; +}