Files
nixos/Droidnix/README.org
T

449 lines
16 KiB
Org Mode
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#+title: Droidnix: A Dendritic NixOS + Home Manager Configuration
#+author: Henro Veijer
#+options: toc:t num:nil htmlize:nil
#+language: en
#+html_head: <style>pre.src { background-color: #1e1e2e; color: #cdd6f4; padding: 1em; border-radius: 4px; }</style>
* 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 .#<hostname>=.
---
* 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