Files
nixos/Droidnix
2026-03-13 20:31:03 +01:00
..
2026-03-13 20:31:03 +01:00
2026-03-13 20:29:08 +01:00
2026-03-13 20:27:04 +01:00
2026-03-13 20:31:03 +01:00
2026-03-13 20:31:03 +01:00

Droidnix: A Dendritic NixOS + Home Manager Configuration NixOS Configuration Structure

Introduction   intro

What is Droidnix

Droidnix is a modular, declarative NixOS + Home Manager configuration system. It allows users to choose between Hyprland and Mangowc as their window manager, with shared and WM-specific configurations managed via Emacs Org and Nix Flakes. The project is designed for reproducibility, maintainability, and cross-machine compatibility.

Installed components:

Core
Hyprland
Mangowc

Goals, project Structure, import hierarchy

This project uses a modular NixOS configuration with Hyprland and MangoWC support, designed for literate programming and cross-device reusability. The Droidnix repository is organized into two main parts:

  1. .assets/: Static, non-generated files (e.g., configs, scripts, themes).
  2. Generated folders (system, hyprland, mangowc): NixOS and Home Manager configurations, generated from Org files.

Root Level

  • flake.nix is the entry point and imports:

    • generated/system/
    • generated/hyprland/
    • generated/mangowc/
    • Machine-specific configurations from assets/machines/

Generated Structure

The generated/ directory contains all generated configurations, divided into three main groups: system, hyprland, and mangowc.

System (generated/system/)

This directory contains system-wide configurations that are independent of the window manager.

Applications (applications/)

  • file_management/: Configurations for file managers and storage solutions.
  • gaming/: Settings for gaming-related software.
  • office_productivity/: Configurations for office software.
  • media_playback_editing/: Settings for media playback and editing software.
  • terminal_shell/: Configurations for terminal emulators and shells.

Development (development/)

  • databases/: Settings for local databases.
  • devops_ci_cd/: Configurations for DevOps tools.
  • programming_languages/: Settings for programming languages and their runtimes.
  • virtualization/: Configurations for virtualization and containerization tools.
  • web_development/: Settings for web development.

System Management (system_management/)

  • backups/: Settings for backup software.
  • bluetooth/: Configurations for Bluetooth devices and services.
  • power_management/: Settings for power management.
  • audio/: Configurations for audio.
  • hardware_sensors/: Settings for hardware monitoring.
  • logging_monitoring/: Configurations for system logging and monitoring.
  • login_manager/: Settings for the login manager.
  • monitor_setup/: Configurations for display settings.
  • networking/: Settings for networking.
  • printers_scanners/: Configurations for printers and scanners.
  • disk_management/: Settings for disk management.
  • security/: Security-related configurations.
  • system_updates/: Settings for system updates and package management.

Hyprland (generated/hyprland/)

This directory contains configurations specific to Hyprland.

  • animations_effects/: Settings for window animations and visual effects.
  • decorations/: Configurations for window decorations.
  • keyboard_binds/: Keyboard shortcuts for Hyprland.
  • notifications/: Settings for notifications.
  • statusbar_tray/: Configurations for the status bar and system tray.
  • task_launcher/: Settings for task launchers.
  • task_window_workspace_switcher/: Configurations for switching between windows and workspaces.
  • window_rules/: Rules for window behavior.

MangoWC (generated/mangowc/)

This directory contains configurations specific to MangoWC.

  • animations_effects/: Settings for animations and effects in MangoWC.
  • decorations/: Configurations for window decorations.
  • keyboard_binds/: Keyboard shortcuts for MangoWC.
  • notifications/: Settings for notifications.
  • statusbar_tray/: Configurations for the status bar and system tray.
  • task_launcher/: Settings for task launchers.
  • task_window_workspace_switcher/: Configurations for switching between windows and workspaces.
  • window_rules/: Rules for window behavior.

File Structure and Imports

  • Every top.nix file imports all .nix files in its directory.
  • Machine-specific configurations are stored in assets/machines/.
  • Themes and overrides are modular and reusable across setups.

Design Principles

  • Modularity: Each component is self-contained and reusable.
  • Consistency: Every directory follows the same import pattern.
  • Scalability: Easy to add new machines or configurations.
.
├── assets
│   ├── system
│   │   ├── conf
│   │   │   └── base.conf
│   │   ├── cursors
│   │   │   └── Bibata_Cursor-main
│   │   ├── emacs
│   │   │   └── setup_emacs.sh
│   │   ├── icons
│   │   │   └── papirus-icon-theme-master
│   │   ├── neovim
│   │   │   └── setup_nvim_literate_nixos.sh
│   │   ├── nixos_conf
│   │   │   └── wallpaperstuff
│   │   │       ├── pictures
│   │   │       └── videos
│   │   ├── scripts
│   │   │   ├── copy_stuff.sh
│   │   │   └── end_script.sh
│   │   └── themes
│   │       └── Catppuccin-Mocha-Standard-Blue-Dark
│   ├── copy_stuff
│   │   ├── Droidnix
│   │   │   ├── hypr
│   │   │   │   ├── conf.d
│   │   │   │   └── scripts
│   │   │   └── wallpaperstuff
│   │   │       ├── pictures
│   │   │       └── videos
│   │   └── kitty
│   │       ├── kitty.conf
│   │       └── themes
│   │           └── Catppuccin-Mocha.conf
│   ├── hyprland
│   │   ├── conf
│   │   ├── scripts
│   │   └── themes
│   ├── machines
│   │   ├── maindroid
│   │   └── traveldroid
│   │       ├── configuration.nix
│   │       ├── hardware-configuration.nix
│   │       └── home.nix
│   └── mangowc
│       ├── conf
│       ├── scripts
│       └── themes
├── generated
│   ├── hyprland
│   │   ├── animations_effects
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── decorations
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── keyboard_binds
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── notifications
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── statusbar_tray
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── task_launcher
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── task_window_workspace_switcher
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   └── window_rules
│   │       ├── top.nix
│   │       └── placeholder.nix
│   ├── mangowc
│   │   ├── animations_effects
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── decorations
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── keyboard_binds
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── notifications
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── statusbar_tray
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── task_launcher
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   ├── task_window_workspace_switcher
│   │   │   ├── top.nix
│   │   │   └── placeholder.nix
│   │   └── window_rules
│   │       ├── top.nix
│   │       └── placeholder.nix
│   └── system
│       ├── applications
│       │   ├── file_management
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── gaming
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── office_productivity
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── media_playback_editing
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── terminal_shell
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   └── accessibility
│       │       ├── top.nix
│       │       └── placeholder.nix
│       ├── development
│       │   ├── databases
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── devops_ci_cd
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── programming_languages
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   ├── virtualization
│       │   │   ├── top.nix
│       │   │   └── placeholder.nix
│       │   └── web_development
│       │       ├── top.nix
│       │       └── placeholder.nix
│       └── system_management
│           ├── backups
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── bluetooth
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── power_management
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── audio
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── hardware_sensors
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── logging_monitoring
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── login_manager
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── monitor_setup
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── networking
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── printers_scanners
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── disk_management
│           │   ├── top.nix
│           │   └── placeholder.nix
│           ├── security
│           │   ├── top.nix
│           │   └── placeholder.nix
│           └── system_updates
│               ├── top.nix
│               └── placeholder.nix
├── flake.nix
├── README.html
└── README.org

First Setup

  1. Clone this repository.
  2. Run the setup script: ./setup_droidnix.sh.
  3. Edit .assets/system/conf/base.conf to choose your window manager (wm = "hyprland" or wm = "mangowc").
  4. Tangle this Org file to generate Nix configurations: C-c C-v t in Emacs or use this: emacs README.org --batch -f org-babel-tangle && emacs --batch --eval "(setq org-html-htmlize-output-type nil)" README.org -f org-html-export-to-html
  5. Build and switch: sudo nixos-rebuild switch --flake .#<hostname>.

The Assets Folder   assets

The .assets/ folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.

.assets/system/

This folder contains files shared across both window managers, such as wallpapers, shell configs, and system scripts.

  • conf/base.conf: Defines the window manager choice and other global settings.
  • scripts/: System-wide scripts (e.g., utilities, helpers).

.assets/hyprland/

Hyprland-specific assets, including configs, themes, and scripts.

  • conf/: Hyprland configuration files (e.g., hyprland.conf).
  • themes/: Hyprland-specific theme scripts.
  • scripts/: Hyprland-specific scripts.

.assets/mangowc/

Mangowc-specific assets, including configs, themes, and scripts.

  • conf/: Mangowc configuration files.
  • themes/: Mangowc-specific theme scripts.
  • scripts/: Mangowc-specific scripts.

.assets/machines/

Machine-specific NixOS configurations (e.g., configuration.nix for maindroid and traveldroid).

The Actual Code   code

This section contains the Org blocks for tangling Nix code into the generated folders.

flake.nix

The Nix flake definition for Droidnix.

{
  description = "Droidnix: A dendritic NixOS + Home Manager configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    emacs-overlay = {
      url = "github:nix-community/emacs-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    catppuccin = {
      url = "github:catppuccin/nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    zen-browser = {
      url = "github:youwen5/zen-browser-flake";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    hyprland.url = "github:hyprwm/Hyprland";
  };

  outputs =
    inputs@{
      self,
      nixpkgs,
      home-manager,
      emacs-overlay,
      catppuccin,
      zen-browser,
      hyprland,
      ...
    }:
    let
      lib = nixpkgs.lib;
      system = "x86_64-linux";
      user = import ./assets/flake/users/henrov.nix;
      machines = [
        "traveldroid"
        "maindroid"
      ];
      flakeRoot = ./.; # Define flakeRoot here
    in
    {
      nixosConfigurations = lib.genAttrs machines (
        machine:
        lib.nixosSystem {
          inherit system;
          modules = [
            # Import machine-specific configurations
            ./assets/flake/machines/traveldroid/top.nix

            # Catppuccin theme module
            inputs.catppuccin.nixosModules.catppuccin

            # Anchoring all the other nixes
            ./generated/top.nix

            # Home Manager module
            inputs.home-manager.nixosModules.home-manager
            {
              home-manager.useGlobalPkgs = true;
              home-manager.useUserPackages = true;
              home-manager.extraSpecialArgs = { inherit user inputs flakeRoot; };
            }
          ];
          specialArgs = { inherit user inputs flakeRoot; };
        }
      );

      homeConfigurations = lib.genAttrs (map (machine: "${user.username}@${machine}") machines) (
        userMachine:
        home-manager.lib.homeManagerConfiguration {
          inherit system;
          configuration = import ./user.nix { inherit inputs user flakeRoot; };
          extraSpecialArgs = { inherit user inputs flakeRoot; };
        }
      );

      devShells.${system}.default = import ./assets/flake/terminal_shell/devshell.nix {
        inherit (nixpkgs.legacyPackages.${system}) mkShell;
      };
    };
}

First the nix-files that flake really needs and that do not fit wel in the hierarchical structure

assets/flake/users/top.nix

The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure.

{ config, pkgs, lib, ... }:
{
  imports = [
    ./user.nix
  ];
}

assets/flake/users/user.nix

This is the default user, just search and replace henrov another name if you want to change

{
  config,
  pkgs,
  lib,
  inputs,
  ...
}:

let
  user = import ./henrov.nix;
in
{
  home-manager.users.${user.username} = {
    home.stateVersion = "25.11";
    home.username = user.username;
    home.homeDirectory = user.homeDirectory;
    home.packages = with pkgs; [
      direnv
      git-extras
    ];
  };
}

assets/flake/users/henrov.nix

This is the default user, just search and replace henrov another name if you want to change

{
  username = "henrov";
  hashedPassword = "$6$ISAmsPLyFi7idYXr$VmZsq.zMsyh1irSkyDNqtorNXG0oEHbbMVqTii1t8bymvrQ5ZQmbdi4OiBNeNYe/huHGrojXM.3TST2fTLz0T.";
  homeDirectory = "/home/henrov";
  stateVersion = "25.11";
  locale = "nl_NL.UTF-8";
}

assets/flake/terminal_shell/devshell.nix

This code defines a Nix shell environment (also called a "devShell") that you can enter using the nix develop command. When you enter this shell, Nix will provide the tools and dependencies listed in buildInputs.

{ mkShell, ... }:
mkShell {
  buildInputs = with import <nixpkgs> {}; [
    nil
    nixfmt-rfc-style
  ];
}

assets/flake/machines/traveldroid/top.nix

This is the top of the machine hierarchy

{
  config,
  pkgs,
  lib,
  user,
  inputs,
  flakeRoot,
  ...
}:

{
  imports = [
    ./boot.nix
    ./hardware-configuration.nix
    ./machine.nix
    ./dbus.nix
    ./audio.nix
    ./xdg.nix
    inputs.home-manager.nixosModules.home-manager
  ];
}

assets/flake/machines/traveldroid/boot.nix

This file has most of the settings the control how the computer boots up.

{ pkgs, ... } :
{
  boot = {
  initrd = {
  verbose = false;   # its a lot of logs. dont need it, unless we do.
  kernelModules = [ ]; # no kernel modules on boot
  };

  extraModulePackages = [ ];       # no extra packages on boot either
  kernelPackages = pkgs.linuxPackages_latest;  # latest greatest linux kernel
  kernelParams = [ "silent" ];       # quiet those logs

  consoleLogLevel = 0;         # quiten more logs
  plymouth.enable = true;        # graphical boot animation instead

  supportedFilesystems = [ "ntfs" ];     # should see the ntfs (windows)

  loader = {
  systemd-boot.enable = true;      # systemd-boot
  systemd-boot.configurationLimit = 10;
  efi.canTouchEfiVariables = true;     # allow editing efi to edit the boot loader
  timeout = 5;           # grub timeout to make a selection
  };
  };
}

assets/flake/machines/traveldroid/machine.nix

This is the top if the machine hierarchy

{
  config,
  pkgs,
  lib,
  user,
  inputs,
  flakeRoot,
  ...
}:

{
  options = {
    wm = lib.mkOption {
      type = lib.types.str;
      default = "hyprland";
      description = "Type of window manager to use";
    };
  };

  config = {
    # Minimal settings that must be defined here
    networking.hostName = "traveldroid";
    wm.type = "hyprland";

    # User configuration
    users.users.${user.username} = {
      isNormalUser = true;
      extraGroups = [
        "wheel"
        "networkmanager"
      ];
      hashedPassword = user.hashedPassword;
      home = user.homeDirectory;
    };
    # Optional: Enable auto-login for testing
    services.getty.autologinUser = user.username;
  };
}

assets/flake/machines/traveldroid/dbus.nix

This sets the dbus implementation

{ config, pkgs, lib, ... }:
{
  services.dbus = lib.mkForce {
    enable = false; # Force this to be false
  };

  # Configure dbus-broker via its configuration file
  environment.etc."dbus-broker/launch.conf".text = ''
    [General]
    LogLevel=warning
    MaxConnectionsPerUser=2048
  '';
}

assets/flake/machines/traveldroid/bluetooth.nix

This sets the bluetooth implementation

{ config, pkgs, ... }:
{
  # Enable Bluetooth hardware and daemon
  hardware.bluetooth = {
    enable = true;
    powerOnBoot = true;
    packages = with pkgs; [ bluez ];
  };

  # Enable Bluetooth audio support in PipeWire
  services.pipewire = {
    config.pulse = {
      bluez5.enable = true;
    };
  };

  # Optional: Additional Bluetooth settings
  hardware.bluetooth.extraConfig = ''
    AutoEnable=true
    DiscoverableTimeout=0
    PairableTimeout=0
  '';

  # Install a graphical Bluetooth manager (optional)
  environment.systemPackages = with pkgs; [
    blueman
  ];
}

assets/flake/machines/traveldroid/audio.nix

This sets audiosystem for this machine

{ config, pkgs, ... }:
{
  services.pipewire = {
    enable = true;
    alsa.enable = true;    # ALSA compatibility
    pulse.enable = true;   # PulseAudio compatibility
    wireplumber.enable = true; # Session manager for PipeWire
  };

  # Realtime privileges for pro audio (optional)
  security.rtkit.enable = true;
}

assets/flake/machines/traveldroid/xdg.nix

This sets the XDG implementation

{ config, pkgs, ... }:
{
  xdg.portal = {
    enable = true;
    config.system.default = [ "hyprland" "gtk" ];
  };
}

Now we reach the top of the hierarchy which will call all other imports

generated/top.nix

The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure.

{ config, pkgs, lib, ... }:
{
  imports = [
    ./system/top.nix
    ./hyprland/top.nix
    # ./mangowc/top.nix
  ];
}

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./hyprland.nix
    ./animations_effects/top.nix
    ./decorations/top.nix
    ./keyboard_binds/top.nix
    ./notifications/top.nix
    ./statusbar_tray/top.nix
    ./task_launcher/top.nix
    ./task_window_workspace_switcher/top.nix
    ./window_rules/top.nix
  ];
}

generated/hyprland/hyprland.nix

The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure.

{
  config,
  pkgs,
  lib,
  user,
  flakeRoot,
  ...
}:

let
  hyprlandConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/hypr";
  # Dynamically read all files in assets/hyprland/conf/
  hyprlandConfs =
    lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/hyprland/conf/hypr"))
      (name: {
        text = builtins.readFile "${flakeRoot}/assets/hyprland/conf/hypr/${name}";
      });
in
{
  # NixOS: Enable Hyprland (optional)
  programs.hyprland = {
    enable = true;
  };

  # Home Manager: Hyprland-specific configurations
  home-manager.users.${user.username} = {
    # Use config.home-manager.users.${user.username} instead of userConfig
    home.stateVersion = config.home-manager.users.${user.username}.stateVersion or "23.11"; # Default fallback
    home.username = user.username; # Use the 'user' argument
    home.homeDirectory =
      config.home-manager.users.${user.username}.homeDirectory or "/home/${user.username}";

    wayland.windowManager.hyprland = {
      enable = true;
    };

    # Ensure the Hyprland config directory exists
    xdg.configFile = {
      "hypr/.keep" = {
        text = "";
      };
    } // hyprlandConfs;
  };
}

generated/mangowc/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./animations_effects/top.nix
    ./decorations/top.nix
    ./keyboard_binds/top.nix
    ./notifications/top.nix
    ./statusbar_tray/top.nix
    ./task_launcher/top.nix
    ./task_window_workspace_switcher/top.nix
    ./window_rules/top.nix
  ];
  # .. put any code here
}

generated/system/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./applications/top.nix
    ./core/top.nix
    ./development/top.nix
    ./system_management/top.nix
  ];
  # .. put any code here
}

generated/system/applications/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./packages.nix
    ./flatpaks.nix
    ./accessibility/top.nix
    ./file_management/top.nix
    ./gaming/top.nix
    ./media_playback_editing/top.nix
    ./office_productivity/top.nix
    ./terminal_shell/top.nix
  ];
  nixpkgs.config.allowUnfree = true;
}

generated/system/applications/packages.nix

This will import all packages listed in ./assets/system/apps/packlages.conf

{ config, lib, pkgs, flakeRoot, inputs, ... }:
let
  packagesConfPath = "${flakeRoot}/assets/system/apps/packages.conf";
  raw = builtins.readFile packagesConfPath;
  # IMPORTANT: explicit "\n" so we never accidentally split into characters
  rawLines = lib.splitString "\n" raw;
  # Guard: if we accidentally split into characters, rawLines length ~= stringLength raw
  _guard = assert !(
  builtins.stringLength raw > 1 &&
  builtins.length rawLines == builtins.stringLength raw
  ); true;
  cleanLine = l:
  let
  noCR = lib.replaceStrings [ "\r" ] [ "" ] l;
  noInlineComment = lib.head (lib.splitString "#" noCR);
  in
  lib.strings.trim noInlineComment;
  entries =
  builtins.filter (l: l != "")
  (map cleanLine rawLines);
  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   : ${toString packagesConfPath}
    Hint     : check the attribute name on search.nixos.org/packages
    ''
  else
    found;
  packages = builtins.seq _guard (map resolvePkg entries);
  zenBrowser =
  inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
{
  environment.systemPackages =
  packages
  ++ [ zenBrowser ];
}

generated/system/applications/flatpaks.nix

This will import all packages listed in ./assets/system/apps/flatpaks.conf

{
  config,
  pkgs,
  lib,
  flakeRoot,
  ...
}:
let
  moduleName = "install-flatpaks";
  flatpakConfPath = "${flakeRoot}/assets/system/apps/flatpaks.conf";
  raw = builtins.readFile flatpakConfPath;
  # Explicit "\n" so we never accidentally split into characters
  rawLines = lib.splitString "\n" raw;

  # Guard: if we accidentally split into characters, rawLines length ~= stringLength raw
  _guard =
    assert !(builtins.stringLength raw > 1 && builtins.length rawLines == builtins.stringLength raw);
    true;

  cleanLine =
    l:
    let
      noCR = lib.replaceStrings [ "\r" ] [ "" ] l;
      noInlineComment = lib.head (lib.splitString "#" noCR);
    in
    lib.strings.trim noInlineComment;

  entries = builtins.filter (l: l != "") (map cleanLine rawLines);

  # Flatpak app IDs are reverse-DNS style like org.example.App (at least 2 dots).
  # We'll validate and fail early with a clear message.
  dotCount = s: builtins.length (lib.splitString "." s) - 1;

  isValidId = s: (dotCount s) >= 2; # matches the error you're seeing: "at least 2 periods"

  _validate = builtins.seq _guard (
    builtins.map (
      id:
      if isValidId id then
        true
      else
        throw ''
          ${moduleName}: invalid Flatpak ID in flatpaks.conf (needs reverse-DNS with at least 2 dots)

          Token    : ${builtins.toJSON id}
          flatpaks.conf : ${toString flatpakConfPath}

          Fix: remove stray tokens/headers, or comment them out with '#'.
        ''
    ) entries
  );

  # Use validated entries
  flatpakApps = builtins.seq _validate entries;

  syncFlatpaks = pkgs.writeShellScript "sync-flatpaks" ''
    set -euo pipefail

    # Use the deployed config path (matches environment.etc below)
    CONF="/etc/flatpak/flatpaks.conf"
    if [[ -f "$CONF" ]]; then
    echo "flatpak-sync: using $CONF"
    else
    echo "flatpak-sync: WARNING: $CONF not found, using embedded list"
    fi

    if ! flatpak remotes --system --columns=name | grep -qx flathub; then
    flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
    fi

    desired_apps=(
    ${lib.concatStringsSep "\n" (map (a: ''"${a}"'') flatpakApps)}
    )

    for app in "''${desired_apps[@]}"; do
    if ! flatpak info --system "$app" >/dev/null 2>&1; then
      flatpak install --system -y --noninteractive flathub "$app"
    fi
    done
  '';
in
{
  services.flatpak.enable = true;

  xdg.portal = {
    enable = true;
  };

  # Deploy the config file for runtime visibility/debugging
  environment.etc."flatpak/flatpaks.conf".source = lib.mkForce flatpakConfPath;

  systemd.services.flatpak-sync = {
    description = "Install Flatpak apps listed in flatpaks.conf";
    wantedBy = [ "multi-user.target" ];
    wants = [ "network-online.target" ];
    after = [ "network-online.target" ];

    serviceConfig = {
      Type = "oneshot";
      ExecStart = syncFlatpaks;
    };

    restartTriggers = [ flatpakConfPath ];
    path = [
      pkgs.flatpak
      pkgs.coreutils
      pkgs.gnugrep
      pkgs.gnused
    ];
  };
}

generated/system/core/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./wayland.nix
    ./eww.nix
    ./waybar.nix
    ./login-tuigreeter.nix
    # ./login-lightdm.nix
  ];
  # .. put any code here
}

generated/system/core/fonts.nix

This file installs and configures eww

{ config, pkgs, ... }:
{
  environment.systemPackages = with pkgs; [
    (nerdfonts.override { fonts = [ "FiraCode" ]; })
  ];
}

generated/system/core/eww.nix

This file installs and configures eww

{ lib, config, pkgs, flakeRoot, user, ... }:
let
  ewwConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/eww";
  # Dynamically read all files in assets/system/conf/eww/
  ewwConfs = lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/system/conf/eww")) (name: {
    text = builtins.readFile "${flakeRoot}/assets/system/conf/eww/${name}";
  });
in
{
  environment.systemPackages = with pkgs; [ eww ];

  home-manager.users.${user.username} = {
    home.file = {
      "${ewwConfigDir}" = {
        source = "${flakeRoot}/assets/system/conf/eww";
        recursive = true;
      };
    };

    home.sessionVariables = {
      EWW_BIN = "${pkgs.eww}/bin/eww";
    };

    # Start eww with Hyprland/MangoWC
    wayland.windowManager.hyprland.settings = lib.mkForce {
      exec-once = [ "eww daemon" ];
      exec = [ "eww open-many ${ewwConfigDir}/widgets" ]; # Adjust as needed
    };
    # For MangoWC, use:
    # wayland.windowManager.mangowc.config = {
    #   exec = [ "eww daemon" ];
    #   exec-once = [ "eww open-many ${ewwConfigDir}/widgets" ];
    # };
  };
}

generated/system/core/waybar.nix

This file installs and configures waybar

{ lib, pkgs, config, flakeRoot, ... }:
let
  username = "henrov";  # Replace with your actual username
  waybar-config = pkgs.writeText "waybar-config" (builtins.readFile (flakeRoot + "/assets/system/conf/waybar/config"));
  waybar-style = pkgs.writeText "waybar-style" (builtins.readFile (flakeRoot + "/assets/system/conf/waybar/style.css"));
in
{
  programs.waybar = {
    enable = true;
    package = pkgs.waybar;
  };

  systemd.user.services.waybar = {
    description = "Waybar (status bar for Wayland)";
    wantedBy = [ "graphical-session.target" ];
    after = [ "graphical-session.target" ];
    serviceConfig = {
      ExecStart = "${config.programs.waybar.package}/bin/waybar -c ${waybar-config} -s ${waybar-style}";
      Restart = "on-failure";
      RestartSec = "5s";
    };
  };

  # Create symlinks for config and style
  system.activationScripts.waybarSetup = lib.mkAfter ''
    mkdir -p /home/${username}/.config/waybar
    ln -sf ${waybar-config} /home/${username}/.config/waybar/config
    ln -sf ${waybar-style} /home/${username}/.config/waybar/style.css
    chown -R ${username}:users /home/${username}/.config/waybar
  '';
}

generated/system/core/login-tuigreeter.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ pkgs, user, ... } :
{
environment.systemPackages = with pkgs; [
tuigreet
];
services.greetd = {
enable = true;
settings = {
  default_session = {
  command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a • %h | %F'";
  };
};
};
}

generated/system/core/wayland.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, ... }:
{
  home-manager.users.${user.username} = {
    xdg.portal = {
      enable = true;
      extraPortals = with pkgs; [ xdg-desktop-portal-hyprland ];
      config.hyprland = {
        "org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
      };
    };
  };
}

generated/system/development/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./databases/top.nix
    ./devops_ci_cd/top.nix
    ./programming_languages/top.nix
    ./virtualization/top.nix
    ./web_development/top.nix
  ];
  # .. put any code here
}

generated/system/system_management/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./audio/top.nix
    ./backups/top.nix
    ./bluetooth/top.nix
    ./disk_management/top.nix
    ./hardware_sensors/top.nix
    ./logging_monitoring/top.nix
    ./login_manager/top.nix
    ./monitor_setup/top.nix
    ./networking/top.nix
    ./power_management/top.nix
    ./printers_scanners/top.nix
    ./security/top.nix
    ./system_updates/top.nix
  ];
  # .. put any code here
}

generated/hyprland/animations_effects/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/hyprland/decorations/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/hyprland/keyboard_binds/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{
  config,
  pkgs,
  lib,
  user,
  inputs,
  flakeRoot,
  ...
}:
let
  bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/hypr/bindings.conf");
in
{
  home-manager.users.${user.username} = {
    wayland.windowManager.hyprland = {
      enable = true;
      extraConfig = bindingsContent;
    };
  };
}

generated/hyprland/notifications/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/hyprland/statusbar_tray/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/hyprland/task_launcher/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./wofi.nix
  ];
  # .. put any code here
}

generated/system/task_launcher/wofi.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{
  lib,
  config,
  pkgs,
  flakeRoot,
  user,
  ...
}:

let
  wofiConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/wofi";
  # Dynamically read all files in assets/hyprland/conf/wofi/
  wofiConfs =
    lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/system/conf/wofi"))
      (name: {
        text = builtins.readFile "${flakeRoot}/assets/system/conf/wofi/${name}";
      });
in
{
  environment.systemPackages = with pkgs; [
    wofi
  ];

  home-manager.users.${user.username} = {
    home.file = {
      # Map the files to their target paths in ~/.config/wofi/
      "${wofiConfigDir}/config" = wofiConfs."wofi.conf"; # Use the actual filename
      "${wofiConfigDir}/style.css" = wofiConfs."theming.css"; # Use the actual filename
    };

    home.sessionVariables = {
      WOFI_CONFIG = "${wofiConfigDir}/config";
      WOFI_STYLE = "${wofiConfigDir}/style.css";
    };
  };
}

generated/hyprland/task_window_workspace_switcher/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/hyprland/window_rules/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/animations_effects/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/decorations/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/keyboard_binds/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

  # Your code here...

generated/mangowc/notifications/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/statusbar_tray/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/task_launcher/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/task_window_workspace_switcher/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/mangowc/window_rules/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/applications/accessibility/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/applications/file_management/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/applications/gaming/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/applications/media_playback_editing/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/applications/office_productivity/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/applications/terminal_shell/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    ./kitty.nix
    ./starship.nix
    ./zsh.nix
  ];
  # .. put any code here
}

generated/system/applications/terminal_shell/kitty.nix

This file sets up Kitty terminal

{ config, pkgs, lib, user, flakeRoot, ... }:
let
  kittyConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/kitty";
in
{
  home-manager.users.${user.username} = {
    programs.kitty = {
      enable = true;
    };

    # Copy the actual kitty.conf (not a symlink)
    xdg.configFile."kitty/kitty.conf".text = lib.concatStringsSep "\n" [
      (builtins.readFile "${flakeRoot}/assets/system/conf/kitty/kitty.conf")
    ];

    # Copy the theme file
    xdg.configFile."kitty/Catppuccin-Mocha.conf".source = "${flakeRoot}/assets/system/conf/kitty/Catppuccin-Mocha.conf";
  };
}

generated/system/applications/terminal_shell/starship.nix

This file sets up starship prompt

{
  lib,
  config,
  pkgs,
  flakeRoot,
  ...
}:
let
  starshipConfig = lib.importTOML (flakeRoot + "/assets/system/conf/starship.toml");
in
{
  programs.starship = {
    enable = true;
    settings = starshipConfig;
  };
}

generated/system/applications/terminal_shell/zsh.nix

This sets up the zsh terminal

{
  lib,
  config,
  pkgs,
  ...
}:

{
  # --- NixOS Configuration ---
  environment.systemPackages = with pkgs; [
    zsh
    git
    docker
  ];

  # --- Home Manager Configuration ---
  home-manager.users.henrov = {
    programs.zsh = {
      enable = true;
      enableCompletion = true;

      # Enable oh-my-zsh and use its plugins
      oh-my-zsh = {
        enable = true;
        plugins = [
          "git"
          "docker"
          "direnv"
          "zsh-autosuggestions"
          "zsh-syntax-highlighting"
          "zsh-completions"
          "zsh-history-substring-search"
        ];
        theme = "agnoster"; # Fallback, overridden below
      };

      # Source Nixpkgs-provided plugins explicitly
      initContent = ''
        # Source plugins installed by Nix
        source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
        source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
        source ${pkgs.zsh-history-substring-search}/share/zsh-history-substring-search/zsh-history-substring-search.zsh

        # Catppuccin Mocha theme for oh-my-zsh
        local mocha_base="#1E1E2E"
        local mocha_surface0="#313244"
        local mocha_text="#CDD6F4"
        local mocha_lavender="#B4BEFE"
        local mocha_blue="#89B4FA"
        local mocha_sapphire="#74C7EC"
        local mocha_teal="#94E2D5"
        local mocha_green="#A6E3A1"
        local mocha_yellow="#F9E2AF"
        local mocha_peach="#FAB387"
        local mocha_maroon="#EBA0AC"
        local mocha_red="#F38BA8"
        local mocha_mauve="#CBA6F7"
        local mocha_pink="#F5C2E7"
        local mocha_flamingo="#F2CDCD"
        local mocha_rosewater="#F5E0DC"

        # Prompt
        PROMPT='%{$fg[$mocha_blue]%}%n%{$reset_color%}@%{$fg[$mocha_peach]%}%m%{$reset_color%} %{$fg[$mocha_lavender]%}%~%{$reset_color%} %{$fg[$mocha_red]%}$%{$reset_color%} '
        RPROMPT='%{$fg[$mocha_green]%}%T%{$reset_color%}'

        # Git prompt
        ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[$mocha_yellow]%}(%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[$mocha_yellow]%})%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[$mocha_red]%}✗%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[$mocha_green]%}✓%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[$mocha_blue]%}⇡%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg[$mocha_blue]%}⇣%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[$mocha_pink]%}?%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[$mocha_sapphire]%}+%{$reset_color%}"
        ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg[$mocha_red]%}!%{$reset_color%}"

        # Virtualenv/pyenv
        ZSH_THEME_VIRTUAL_ENV_PREFIX="(%{$fg[$mocha_teal]%}"
        ZSH_THEME_VIRTUAL_ENV_SUFFIX="%{$reset_color%})"

        # Right prompt with Git status
        RPROMPT='$(git_prompt_info) %{$fg[$mocha_green]%}%T%{$reset_color%}'

        # Set the custom theme
        ZSH_THEME="catppuccin-mocha"
      '';
    };

    # Home Manager packages (optional)
    home.packages = with pkgs; [
      direnv
      git-extras
    ];
  };
}

generated/system/development/databases/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/development/devops_ci_cd/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/development/programming_languages/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/development/virtualization/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/development/web_development/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/audio/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/backups/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/bluetooth/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/disk_management/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/hardware_sensors/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/logging_monitoring/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/login_manager/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/monitor_setup/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/networking/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/power_management/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/printers_scanners/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/security/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}

generated/system/system_management/system_updates/top.nix

This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder

{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
  imports = [
    # No subfolders to import
  ];
  # .. put any code here
}