Files
nixos/Droidnix

Droidnix: A Dendritic NixOS + Home Manager Configuration

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
Mangowv

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 (common, hyprland, mangowc): NixOS and Home Manager configurations, generated from Org files.

Root Level

  • flake.nix is the entry point and imports:

    • generated/common/nixos/default.nix
    • generated/hyprland/nixos/default.nix
    • generated/mangowc/nixos/default.nix
    • Machine-specific configurations from assets/machines/

Common Configuration (generated/common/)

  • nixos/default.nix aggregates all NixOS modules:

    • hardware/hardware.nix
    • packages/packages.nix
    • security/security.nix
    • services/services.nix
    • users/users.nix
  • home-manager/default.nix aggregates Home Manager modules:

    • programs/programs.nix
    • shell/shell.nix
    • starship/starship.nix
  • themes/default.nix aggregates theme modules:

    • fonts/fonts.nix
    • gtk/gtk.nix
    • icons/icons.nix
    • shells/shells.nix

Hyprland Configuration (generated/hyprland/)

  • nixos/default.nix imports:

    • plugins/plugins.nix
    • window-manager/window-manager.nix
  • home-manager/default.nix imports:

    • programs/programs.nix
    • scripts/scripts.nix
  • themes/default.nix imports:

    • hypr/hypr.nix
    • rofi/rofi.nix
    • waybar/waybar.nix
  • overrides/default.nix imports:

    • overrides/overrides.nix

MangoWC Configuration (generated/mangowc/)

  • nixos/default.nix imports:

    • plugins/plugins.nix
    • window-manager/window-manager.nix
  • home-manager/default.nix imports:

    • programs/programs.nix
    • scripts/scripts.nix
  • themes/default.nix imports:

    • mangowc/mangowc.nix
    • waybar/waybar.nix
    • wofi/wofi.nix
  • overrides/default.nix imports:

    • overrides/overrides.nix

File Structure and Imports

  • Every default.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
│   ├── common
│   │   ├── 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
│   │   ├── animaties_effecten
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── decoraties
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── keyboard_binds
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── notificaties
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── statusbar_tray
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── task_launcher
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── task_window_workspace_switcher
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   └── window_rules
│   │       ├── default.nix
│   │       └── placeholder.nix
│   ├── mangowc
│   │   ├── animaties_effecten
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── decoraties
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── keyboard_binds
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── notificaties
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── statusbar_tray
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── task_launcher
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   ├── task_window_workspace_switcher
│   │   │   ├── default.nix
│   │   │   └── placeholder.nix
│   │   └── window_rules
│   │       ├── default.nix
│   │       └── placeholder.nix
│   └── system
│       ├── applicaties
│       │   ├── filemanagement_storage
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── gaming
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── kantoor_productiviteit
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── media_afspelen_bewerken
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── terminal_shell
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   └── toegankelijkheid
│       │       ├── default.nix
│       │       └── placeholder.nix
│       ├── development
│       │   ├── databases
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── devops_ci_cd
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── programmeertalen_runtime
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   ├── virtualisatie
│       │   │   ├── default.nix
│       │   │   └── placeholder.nix
│       │   └── webdevelopment
│       │       ├── default.nix
│       │       └── placeholder.nix
│       └── systeem_beheer
│           ├── backups
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── bluetooth
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── energiebeheer
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── geluid
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── hardware_sensoren
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── logging_monitoring
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── login_manager
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── monitor_setup
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── networking
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── printers_scanners
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── schijfbeheer
│           │   ├── default.nix
│           │   └── placeholder.nix
│           ├── security
│           │   ├── default.nix
│           │   └── placeholder.nix
│           └── systeemupdates
│               ├── default.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/common/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/common/

This folder contains files shared across both window managers, such as wallpapers, shell configs, and common 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";
  };

  outputs = { self, nixpkgs, home-manager, ... }@inputs: {
    # Your flake outputs here
  };
}

Hyprland

generated/hyprland/animaties_effecten/default.nix

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

generated/hyprland/animaties_effecten/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/decoraties/default.nix

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

generated/hyprland/decoraties/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/keyboard_binds/default.nix

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

generated/hyprland/keyboard_binds/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/notificaties/default.nix

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

generated/hyprland/notificaties/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/statusbar_tray/default.nix

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

generated/hyprland/statusbar_tray/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/task_launcher/default.nix

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

generated/hyprland/task_launcher/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/task_window_workspace_switcher/default.nix

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

generated/hyprland/task_window_workspace_switcher/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/hyprland/window_rules/default.nix

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

generated/hyprland/window_rules/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

Mangowc

generated/mangowc/animaties_effecten/default.nix

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

generated/mangowc/animaties_effecten/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/decoraties/default.nix

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

generated/mangowc/decoraties/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/keyboard_binds/default.nix

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

generated/mangowc/keyboard_binds/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/notificaties/default.nix

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

generated/mangowc/notificaties/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/statusbar_tray/default.nix

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

generated/mangowc/statusbar_tray/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/task_launcher/default.nix

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

generated/mangowc/task_launcher/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/task_window_workspace_switcher/default.nix

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

generated/mangowc/task_window_workspace_switcher/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/mangowc/window_rules/default.nix

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

generated/mangowc/window_rules/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

System

generated/system/applicaties/filemanagement_storage/default.nix

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

generated/system/applicaties/filemanagement_storage/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/applicaties/gaming/default.nix

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

generated/system/applicaties/gaming/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/applicaties/kantoor_productiviteit/default.nix

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

generated/system/applicaties/kantoor_productiviteit/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/applicaties/media_afspelen_bewerken/default.nix

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

generated/system/applicaties/media_afspelen_bewerken/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/applicaties/terminal_shell/default.nix

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

generated/system/applicaties/terminal_shell/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/applicaties/toegankelijkheid/default.nix

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

generated/system/applicaties/toegankelijkheid/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/development/databases/default.nix

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

generated/system/development/databases/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/development/devops_ci_cd/default.nix

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

generated/system/development/devops_ci_cd/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/development/programmeertalen_runtime/default.nix

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

generated/system/development/programmeertalen_runtime/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/development/virtualisatie/default.nix

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

generated/system/development/virtualisatie/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/development/webdevelopment/default.nix

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

generated/system/development/webdevelopment/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/backups/default.nix

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

generated/system/systeem_beheer/backups/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/bluetooth/default.nix

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

generated/system/systeem_beheer/bluetooth/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/energiebeheer/default.nix

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

generated/system/systeem_beheer/energiebeheer/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/geluid/default.nix

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

generated/system/systeem_beheer/geluid/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/hardware_sensoren/default.nix

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

generated/system/systeem_beheer/hardware_sensoren/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/logging_monitoring/default.nix

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

generated/system/systeem_beheer/logging_monitoring/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/login_manager/default.nix

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

generated/system/systeem_beheer/login_manager/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/monitor_setup/default.nix

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

generated/system/systeem_beheer/monitor_setup/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/networking/default.nix

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

generated/system/systeem_beheer/networking/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/printers_scanners/default.nix

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

generated/system/systeem_beheer/printers_scanners/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/schijfbeheer/default.nix

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

generated/system/systeem_beheer/schijfbeheer/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/security/default.nix

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

generated/system/systeem_beheer/security/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}

generated/system/systeem_beheer/systeemupdates/default.nix

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

generated/system/systeem_beheer/systeemupdates/placeholder.nix

{ pkgs, user, ... }:
{
  # Your configurations here
}