Files
nixos_stuff/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
}