diff --git a/Droidnix/flake.nix b/Droidnix/flake.nix index 79c544fed..6d5a80d2e 100644 --- a/Droidnix/flake.nix +++ b/Droidnix/flake.nix @@ -1,5 +1,4 @@ -{ - description = "Droidnix: A dendritic NixOS + Home Manager configuration"; +description = "Droidnix: A dendritic NixOS + Home Manager configuration"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -16,38 +15,46 @@ url = "github:nix-community/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; + zen-browser = { url = "github:youwen5/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs"; - }; + }; + hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = inputs@{ flake-parts, nixpkgs, import-tree, ... }: - flake-parts.lib.mkFlake { inherit inputs; } { - systems = [ "x86_64-linux" ]; + outputs = { self, nixpkgs, home-manager, flake-parts, import-tree, stylix, hyprland, zen-browser, ... }: + flake-parts.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; - flake = { - nixosConfigurations.traveldroid = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; + # Define the flake root for all modules + flakeRoot = self; - specialArgs = { - inherit inputs; - flakeRoot = ./.; # <-- Pass the absolute path of the flake root + hmModules = home-manager.lib.hmModules; + in rec { + + # NixOS system configurations for each host + nixosConfigurations = { + traveldroid = flake-parts.lib.mkFlakeModule { + inherit pkgs; + modules = [ + ./generated/hosts/traveldroid/traveldroid.nix + ]; + + # Pass flakeRoot into modules so they can reference it + extraArgs = { + inherit flakeRoot; + }; }; - - modules = [ - ./generated/hosts/traveldroid/boot.nix - ./generated/hosts/traveldroid/hardware-configuration.nix - - # Import all dendritic modules (users, desktops, system modules) - (import-tree ./generated/modules) - - # Extra modules - inputs.stylix.nixosModules.default - inputs.home-manager.nixosModules.home-manager - ]; }; - }; - }; + + # Home Manager modules can be aggregated here if needed + homeManagerConfigurations = { + traveldroid = hmModules.makeModuleSet { + inherit pkgs flakeRoot; + }; + }; + }); } diff --git a/Droidnix/generated/hosts/traveldroid/boot.nix b/Droidnix/generated/hosts/traveldroid/boot.nix new file mode 100644 index 000000000..cde9467f6 --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/boot.nix @@ -0,0 +1,54 @@ +{ pkgs, config, lib, flakeRoot, ... }: + +{ + ############################ + # Bootloader (GRUB) + ############################ + boot.loader = { + grub = { + enable = true; + efiSupport = true; + devices = [ "nodev" ]; # pas aan naar je echte EFI-device indien nodig + useOSProber = true; + timeout = 5; + }; + }; + + ############################ + # Kernel / boot settings + ############################ + boot.kernelPackages = pkgs.linuxPackages_latest; + + boot.kernelParams = [ + "quiet" + "splash" # REQUIRED for Plymouth + "udev.log_level=3" + "rd.systemd.show_status=false" + ]; + + boot.consoleLogLevel = 0; + boot.supportedFilesystems = [ "ntfs" ]; + + ############################ + # Plymouth + ############################ + boot.plymouth = { + enable = true; + theme = "rings"; + + themePackages = [ + (pkgs.adi1090x-plymouth-themes.override { + selected_themes = [ "rings" ]; + }) + ]; + }; + + boot.initrd.systemd.enable = true; + + ############################ + # Clean state + ############################ + # Remove any old theme environment.etc symlinks + #environment.etc = lib.mkForce {}; + system.stateVersion = "26.05"; +} 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/traveldroid.nix b/Droidnix/generated/hosts/traveldroid/traveldroid.nix new file mode 100644 index 000000000..1cef04222 --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/traveldroid.nix @@ -0,0 +1,46 @@ +{ lib, config, pkgs, inputs, ... }: + +let + hostname = "traveldroid"; + modulesPath = ./generated/modules/${hostname}; + usersPath = ./generated/users; + + # Import all host-specific modules recursively (not evaluated yet) + hostModules = inputs.import-tree modulesPath; + + # Import all global users + globalUsers = inputs.import-tree usersPath; + + # Collect all Home Manager user attrsets from host modules + global users + hmUsersList = + map (m: m._module.args.hmUsers or {}) (hostModules.imports ++ globalUsers.imports); + +in +{ + ################################# + # Core system config + ################################# + networking.hostName = traveldroid; + system.stateVersion = "26.05"; + + ################################# + # Enable Home Manager + ################################# + programs.home-manager.enable = true; + + ################################# + # Module imports + ################################# + imports = + [ + ./boot.nix + ./hardware-configuration.nix + ] + ++ hostModules.imports + ++ globalUsers.imports; + + ################################# + # Home Manager aggregation + ################################# + home-manager.users = lib.mkMerge hmUsersList; +} diff --git a/Droidnix/generated/template.nix b/Droidnix/generated/template.nix new file mode 100644 index 000000000..ca5f97da9 --- /dev/null +++ b/Droidnix/generated/template.nix @@ -0,0 +1,18 @@ +{ lib, config, pkgs, _module, ... }: + +let + username = config.defaultUser or "henrov"; +in { + # System packages / options + environment.systemPackages = [ pkgs.feh pkgs.waybar ]; + + # Home Manager contribution + _module.args.hmUsers = lib.mkIf true { + ${username} = { + home.file = { + ".config/waybar/config" = { source = ./waybar/config; }; + ".config/waybar/style.css" = { source = ./waybar/style.css; }; + }; + }; + }; +} diff --git a/Droidnix/generated/traveldroid/todo/system/nix.nix b/Droidnix/generated/traveldroid/todo/system/nix.nix new file mode 100644 index 000000000..96a5be55a --- /dev/null +++ b/Droidnix/generated/traveldroid/todo/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." + ' + ''; + }; +}