#+title: Droidnix: A Dendritic NixOS + Home Manager Configuration #+author: Henro Veijer #+options: toc:t num:nil htmlize:nil #+language: en #+html_head: * Table of Contents [[#introduction][Introduction]] [[#the-assets-folder][The Assets Folder]] [[#the-actual-code][The Actual Code]] --- * Introduction :intro: :PROPERTIES: :CUSTOM_ID: introduction :END: ** 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. ** Folder Structure and Goals 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. #+BEGIN_EXAMPLE . ├── assets │   ├── common │   │   ├── conf │   │   │   └── base.conf │   │   ├── emacs │   │   │   └── setup_emacs.sh │   │   └── scripts │   ├── hyprland │   │   ├── conf │   │   ├── scripts │   │   └── themes │   ├── machines │   │   ├── maindroid │   │   │   └── configuration.nix │   │   └── traveldroid │   │   └── configuration.nix │   └── mangowc │   ├── conf │   ├── scripts │   └── themes ├── flake.nix ├── generated │   ├── common │   │   ├── home-manager │   │   │   ├── programs │   │   │   ├── shell │   │   │   └── starship │   │   ├── nixos │   │   │   ├── hardware │   │   │   ├── packages │   │   │   ├── security │   │   │   ├── services │   │   │   └── users │   │   ├── templates │   │   └── themes │   │   ├── fonts │   │   ├── gtk │   │   ├── icons │   │   └── shells │   ├── hyprland │   │   ├── home-manager │   │   │   ├── programs │   │   │   └── scripts │   │   ├── nixos │   │   │   ├── plugins │   │   │   └── window-manager │   │   ├── overrides │   │   └── themes │   │   ├── hypr │   │   ├── rofi │   │   └── waybar │   └── mangowc │   ├── home-manager │   │   ├── programs │   │   └── scripts │   ├── nixos │   │   ├── plugins │   │   └── window-manager │   ├── overrides │   └── themes │   ├── mangowc │   ├── waybar │   └── wofi ├── README.html └── README.org #+END_EXAMPLE ** 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 .#=. --- * The Assets Folder :assets: :PROPERTIES: :CUSTOM_ID: the-assets-folder :END: 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: :PROPERTIES: :CUSTOM_ID: the-actual-code :END: This section contains the Org blocks for tangling Nix code into the generated folders. ** =flake.nix= The Nix flake definition for Droidnix. #+begin_src nix :tangle flake.nix :noweb tangle :mkdirp yes :eval never-html { 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 }; } #+end_src ** =generated/common/nixos/hardware/placeholder.nix= This is a placeholder for the description of =generated/common/nixos/hardware/placeholder.nix=. #+begin_src nix :tangle generated/common/nixos/hardware/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your hardware configurations here } #+end_src ** =generated/common/nixos/packages/placeholder.nix= This is a placeholder for the description of =generated/common/nixos/packages/placeholder.nix=. #+begin_src nix :tangle generated/common/nixos/packages/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your package configurations here } #+end_src ** =generated/common/nixos/security/placeholder.nix= This is a placeholder for the description of =generated/common/nixos/security/placeholder.nix=. #+begin_src nix :tangle generated/common/nixos/security/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your security configurations here } #+end_src ** =generated/common/nixos/services/placeholder.nix= This is a placeholder for the description of =generated/common/nixos/services/placeholder.nix=. #+begin_src nix :tangle generated/common/nixos/services/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your service configurations here } #+end_src ** =generated/common/nixos/users/placeholder.nix= This is a placeholder for the description of =generated/common/nixos/users/placeholder.nix=. #+begin_src nix :tangle generated/common/nixos/users/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your user configurations here } #+end_src ** =generated/common/home-manager/programs/placeholder.nix= This is a placeholder for the description of =generated/common/home-manager/programs/placeholder.nix=. #+begin_src nix :tangle generated/common/home-manager/programs/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your program configurations here } #+end_src ** =generated/common/home-manager/shell/placeholder.nix= This is a placeholder for the description of =generated/common/home-manager/shell/placeholder.nix=. #+begin_src nix :tangle generated/common/home-manager/shell/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your shell configurations here } #+end_src ** =generated/common/home-manager/starship/placeholder.nix= This is a placeholder for the description of =generated/common/home-manager/starship/placeholder.nix=. #+begin_src nix :tangle generated/common/home-manager/starship/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your starship configurations here } #+end_src ** =generated/common/templates/placeholder.nix= This is a placeholder for the description of =generated/common/templates/placeholder.nix=. #+begin_src nix :tangle generated/common/templates/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your template configurations here } #+end_src ** =generated/common/themes/fonts/placeholder.nix= This is a placeholder for the description of =generated/common/themes/fonts/placeholder.nix=. #+begin_src nix :tangle generated/common/themes/fonts/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your font configurations here } #+end_src ** =generated/common/themes/gtk/placeholder.nix= This is a placeholder for the description of =generated/common/themes/gtk/placeholder.nix=. #+begin_src nix :tangle generated/common/themes/gtk/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your GTK theme configurations here } #+end_src ** =generated/common/themes/icons/placeholder.nix= This is a placeholder for the description of =generated/common/themes/icons/placeholder.nix=. #+begin_src nix :tangle generated/common/themes/icons/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your icon configurations here } #+end_src ** =generated/common/themes/shells/placeholder.nix= This is a placeholder for the description of =generated/common/themes/shells/placeholder.nix=. #+begin_src nix :tangle generated/common/themes/shells/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your shell theme configurations here } #+end_src ** =generated/hyprland/nixos/window-manager/placeholder.nix= This is a placeholder for the description of =generated/hyprland/nixos/window-manager/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/nixos/window-manager/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Hyprland window manager configurations here } #+end_src ** =generated/hyprland/nixos/plugins/placeholder.nix= This is a placeholder for the description of =generated/hyprland/nixos/plugins/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/nixos/plugins/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Hyprland plugin configurations here } #+end_src ** =generated/hyprland/home-manager/programs/placeholder.nix= This is a placeholder for the description of =generated/hyprland/home-manager/programs/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/home-manager/programs/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Hyprland program configurations here } #+end_src ** =generated/hyprland/home-manager/scripts/placeholder.nix= This is a placeholder for the description of =generated/hyprland/home-manager/scripts/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/home-manager/scripts/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Hyprland script configurations here } #+end_src ** =generated/hyprland/themes/hypr/placeholder.nix= This is a placeholder for the description of =generated/hyprland/themes/hypr/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/themes/hypr/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Hyprland theme configurations here } #+end_src ** =generated/hyprland/themes/rofi/placeholder.nix= This is a placeholder for the description of =generated/hyprland/themes/rofi/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/themes/rofi/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Rofi theme configurations here } #+end_src ** =generated/hyprland/themes/waybar/placeholder.nix= This is a placeholder for the description of =generated/hyprland/themes/waybar/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/themes/waybar/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Waybar theme configurations here } #+end_src ** =generated/hyprland/overrides/placeholder.nix= This is a placeholder for the description of =generated/hyprland/overrides/placeholder.nix=. #+begin_src nix :tangle generated/hyprland/overrides/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Hyprland overrides here } #+end_src ** =generated/mangowc/nixos/window-manager/placeholder.nix= This is a placeholder for the description of =generated/mangowc/nixos/window-manager/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/nixos/window-manager/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Mangowc window manager configurations here } #+end_src ** =generated/mangowc/nixos/plugins/placeholder.nix= This is a placeholder for the description of =generated/mangowc/nixos/plugins/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/nixos/plugins/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Mangowc plugin configurations here } #+end_src ** =generated/mangowc/home-manager/programs/placeholder.nix= This is a placeholder for the description of =generated/mangowc/home-manager/programs/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/home-manager/programs/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Mangowc program configurations here } #+end_src ** =generated/mangowc/home-manager/scripts/placeholder.nix= This is a placeholder for the description of =generated/mangowc/home-manager/scripts/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/home-manager/scripts/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Mangowc script configurations here } #+end_src ** =generated/mangowc/themes/generated/mangowc/placeholder.nix= This is a placeholder for the description of =generated/mangowc/themes/generated/mangowc/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/themes/generated/mangowc/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Mangowc theme configurations here } #+end_src ** =generated/mangowc/themes/waybar/placeholder.nix= This is a placeholder for the description of =generated/mangowc/themes/waybar/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/themes/waybar/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Waybar theme configurations here } #+end_src ** =generated/mangowc/themes/wofi/placeholder.nix= This is a placeholder for the description of =generated/mangowc/themes/wofi/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/themes/wofi/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Wofi theme configurations here } #+end_src ** =generated/mangowc/overrides/placeholder.nix= This is a placeholder for the description of =generated/mangowc/overrides/placeholder.nix=. #+begin_src nix :tangle generated/mangowc/overrides/placeholder.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, user, ... }: { # Your Mangowc overrides here } #+end_src