First setup Droidnix. Structure, basic README.org, minimal emancs
This commit is contained in:
@@ -0,0 +1,448 @@
|
||||
#+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
|
||||
Reference in New Issue
Block a user