@@ -37,7 +37,6 @@ The Droidnix repository is organized into two main parts:
- =flake.nix= is the entry point and imports:
- =generated/system/=
- =generated/hyprland/=
- =generated/mangowc/=
- Machine-specific configurations from =assets/machines/=
* Generated Structure
@@ -88,207 +87,8 @@ This directory contains configurations specific to Hyprland.
- =task_window_workspace_switcher/= : Configurations for switching between windows and workspaces.
- =window_rules/= : Rules for window behavior.
** MangoWC (=generated/mangowc/=)
This directory contains configurations specific to MangoWC.
- =animations_effects/= : Settings for animations and effects in MangoWC.
- =decorations/= : Configurations for window decorations.
- =keyboard_binds/= : Keyboard shortcuts for MangoWC.
- =notifications/= : Settings for notifications.
- =statusbar_tray/= : Configurations for the status bar and system tray.
- =task_launcher/= : Settings for task launchers.
- =task_window_workspace_switcher/= : Configurations for switching between windows and workspaces.
- =window_rules/= : Rules for window behavior.
**File Structure and Imports* *
+ Every =top.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.
#+BEGIN_ EXAMPLE
.
├── assets
│ ├── system
│ │ ├── 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
│ │ ├── animations_effects
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── decorations
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── keyboard_binds
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── notifications
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── statusbar_tray
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── task_launcher
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── task_window_workspace_switcher
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ └── window_rules
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── mangowc
│ │ ├── animations_effects
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── decorations
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── keyboard_binds
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── notifications
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── statusbar_tray
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── task_launcher
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── task_window_workspace_switcher
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ └── window_rules
│ │ ├── top.nix
│ │ └── placeholder.nix
│ └── system
│ ├── applications
│ │ ├── file_management
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── gaming
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── office_productivity
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── media_playback_editing
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── terminal_shell
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ └── accessibility
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── development
│ │ ├── databases
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── devops_ci_cd
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── programming_languages
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ ├── virtualization
│ │ │ ├── top.nix
│ │ │ └── placeholder.nix
│ │ └── web_development
│ │ ├── top.nix
│ │ └── placeholder.nix
│ └── system_management
│ ├── backups
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── bluetooth
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── power_management
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── audio
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── hardware_sensors
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── logging_monitoring
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── login_manager
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── monitor_setup
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── networking
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── printers_scanners
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── disk_management
│ │ ├── top.nix
│ │ └── placeholder.nix
│ ├── security
│ │ ├── top.nix
│ │ └── placeholder.nix
│ └── system_updates
│ ├── top.nix
│ └── placeholder.nix
├── flake.nix
├── README.html
└── README.org
<<TREE>>
#+END_EXAMPLE
** First Setup
@@ -765,7 +565,6 @@ This is top file of this level which contains just an import statement for all r
./hyprland.nix
./animations_effects/top.nix
./decorations/top.nix
./keyboard_binds/top.nix
./notifications/top.nix
./statusbar_tray/top.nix
./task_launcher/top.nix
@@ -821,25 +620,79 @@ in
}
#+END_SRC
** =generated/mangowc /top.nix=
** =generated/hyprland/animations_effects /top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc /top.nix :noweb tangle :mkdirp yes :eval never-html
#+BEGIN_SRC nix :tangle generated/hyprland/animations_effects /top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
./animations_effects/top.nix
./decorations/top.nix
./keyboard_binds/top.nix
./notifications/top.nix
./statusbar_tray/top.nix
./task_launcher/top.nix
./task_window_workspace_switcher/top.nix
./window_rules/top.nix
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/decorations/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/decorations/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/notifications/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/notifications/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/statusbar_tray/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/statusbar_tray/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/task_window_workspace_switcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/task_window_workspace_switcher/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/window_rules/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/window_rules/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/system/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/top.nix :noweb tangle :mkdirp yes :eval never-html
@@ -1040,9 +893,6 @@ in
#+END_SRC
** =generated/system/core/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/core/top.nix :noweb tangle :mkdirp yes :eval never-html
@@ -1246,247 +1096,6 @@ This is top file of this level which contains just an import statement for all r
}
#+END_SRC
** =generated/hyprland/animations_effects/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/animations_effects/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/decorations/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/decorations/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/keyboard_binds/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/keyboard_binds/top.nix :noweb tangle :mkdirp yes :eval never-html
{
config ,
pkgs ,
lib ,
user ,
inputs ,
flakeRoot ,
. . .
}:
let
bindingsContent = builtins . readFile ( flakeRoot + " / a s s e t s / h y p r l a n d / c o n f / h y p r / b i n d i n g s . c o n f " ) ;
in
{
home-manager . users . ${ user . username } = {
wayland . windowManager . hyprland = {
enable = true ;
extraConfig = bindingsContent ;
} ;
} ;
}
#+END_SRC
** =generated/hyprland/notifications/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/notifications/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/statusbar_tray/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/statusbar_tray/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/task_launcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/task_launcher/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
./wofi.nix
] ;
# .. put any code here
}
#+END_SRC
** =generated/system/task_launcher/wofi.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/task_launcher/wofi.nix :noweb tangle :mkdirp yes :eval never-html
{
lib ,
config ,
pkgs ,
flakeRoot ,
user ,
. . .
}:
let
wofiConfigDir = " ${ config . home-manager . users . ${ user . username } . xdg . configHome } / w o f i " ;
# Dynamically read all files in assets/hyprland/conf/wofi/
wofiConfs =
lib . genAttrs ( builtins . attrNames ( builtins . readDir " ${ flakeRoot } / a s s e t s / s y s t e m / c o n f / w o f i " ) )
( name : {
text = builtins . readFile " ${ flakeRoot } / a s s e t s / s y s t e m / c o n f / w o f i / ${ name } " ;
} ) ;
in
{
environment . systemPackages = with pkgs ; [
wofi
] ;
home-manager . users . ${ user . username } = {
home . file = {
# Map the files to their target paths in ~/.config/wofi/
" ${ wofiConfigDir } / c o n f i g " = wofiConfs . " w o f i . c o n f " ; # Use the actual filename
" ${ wofiConfigDir } / s t y l e . c s s " = wofiConfs . " t h e m i n g . c s s " ; # Use the actual filename
} ;
home . sessionVariables = {
WOFI_CONFIG = " ${ wofiConfigDir } / c o n f i g " ;
WOFI_STYLE = " ${ wofiConfigDir } / s t y l e . c s s " ;
} ;
} ;
}
#+END_SRC
** =generated/hyprland/task_window_workspace_switcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/task_window_workspace_switcher/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/hyprland/window_rules/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/window_rules/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/animations_effects/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/animations_effects/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/decorations/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/decorations/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/keyboard_binds/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/keyboard_binds/top.nix :noweb tangle :mkdirp yes :eval never-html
# Your code here...
#+END_SRC
** =generated/mangowc/notifications/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/notifications/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/statusbar_tray/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/statusbar_tray/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/task_launcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/task_launcher/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/task_window_workspace_switcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/task_window_workspace_switcher/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/mangowc/window_rules/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/window_rules/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
# No subfolders to import
] ;
# .. put any code here
}
#+END_SRC
** =generated/system/applications/accessibility/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
@@ -2581,3 +2190,56 @@ This is top file of this level which contains just an import statement for all r
# .. put any code here
}
#+END_SRC
** =generated/system/task_launcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/task_launcher/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config , pkgs , lib , user , inputs , flakeRoot , . . . }:
{
imports = [
./wofi.nix
] ;
# .. put any code here
}
#+END_SRC
** =generated/system/task_launcher/wofi.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/task_launcher/wofi.nix :noweb tangle :mkdirp yes :eval never-html
{
lib ,
config ,
pkgs ,
flakeRoot ,
user ,
. . .
}:
let
wofiConfigDir = " ${ config . home-manager . users . ${ user . username } . xdg . configHome } / w o f i " ;
# Dynamically read all files in assets/hyprland/conf/wofi/
wofiConfs =
lib . genAttrs ( builtins . attrNames ( builtins . readDir " ${ flakeRoot } / a s s e t s / s y s t e m / c o n f / w o f i " ) )
( name : {
text = builtins . readFile " ${ flakeRoot } / a s s e t s / s y s t e m / c o n f / w o f i / ${ name } " ;
} ) ;
in
{
environment . systemPackages = with pkgs ; [
wofi
] ;
home-manager . users . ${ user . username } = {
home . file = {
# Map the files to their target paths in ~/.config/wofi/
" ${ wofiConfigDir } / c o n f i g " = wofiConfs . " w o f i . c o n f " ; # Use the actual filename
" ${ wofiConfigDir } / s t y l e . c s s " = wofiConfs . " t h e m i n g . c s s " ; # Use the actual filename
} ;
home . sessionVariables = {
WOFI_CONFIG = " ${ wofiConfigDir } / c o n f i g " ;
WOFI_STYLE = " ${ wofiConfigDir } / s t y l e . c s s " ;
} ;
} ;
}
#+END_SRC