Files
nixos/Droidnix/README.html
T
2026-03-11 16:53:15 +01:00

2494 lines
85 KiB
HTML
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.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2026-03-11 wo 16:53 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Droidnix: A Dendritic NixOS + Home Manager Configuration NixOS Configuration Structure</title>
<meta name="author" content="Henro Veijer" />
<meta name="generator" content="Org Mode" />
<style type="text/css">
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
<style>pre.src { background-color: #1e1e2e; color: #cdd6f4; padding: 1em; border-radius: 4px; }</style>
<script src="https://cdn.jsdelivr.net/npm/tree.js@1.0.0/dist/tree.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tree.js@1.0.0/dist/tree.min.css">
</head>
<body>
<div id="content" class="content">
<h1 class="title">Droidnix: A Dendritic NixOS + Home Manager Configuration NixOS Configuration Structure</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org8488587">Shortcuts</a></li>
<li><a href="#introduction">Introduction&#xa0;&#xa0;&#xa0;<span class="tag"><span class="intro">intro</span></span></a>
<ul>
<li><a href="#org29be5d1">What is Droidnix</a>
<ul>
<li><a href="#org320b11d">Installed components:</a></li>
<li><a href="#org7c55939">Goals, project Structure, import hierarchy</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orgdbe7735">Root Level</a></li>
<li><a href="#org0da5f7f">Generated Structure</a>
<ul>
<li><a href="#org67b4d9f">System (<code>generated/system/</code>)</a>
<ul>
<li><a href="#org0842312">Applications (<code>applications/</code>)</a></li>
<li><a href="#orge094896">Development (<code>development/</code>)</a></li>
<li><a href="#orge01c26f">System Management (<code>system_management/</code>)</a></li>
</ul>
</li>
<li><a href="#orgf51d3fd">Hyprland (<code>generated/hyprland/</code>)</a></li>
<li><a href="#orgdc2d263">MangoWC (<code>generated/mangowc/</code>)</a></li>
<li><a href="#orgd6a5351">First Setup</a></li>
</ul>
</li>
<li><a href="#the-assets-folder">The Assets Folder&#xa0;&#xa0;&#xa0;<span class="tag"><span class="assets">assets</span></span></a>
<ul>
<li><a href="#orgb7d4bbc"><code>.assets/system/</code></a></li>
<li><a href="#org1e548c6"><code>.assets/hyprland/</code></a></li>
<li><a href="#org7da9911"><code>.assets/mangowc/</code></a></li>
<li><a href="#org480bb75"><code>.assets/machines/</code></a></li>
</ul>
</li>
<li><a href="#the-actual-code">The Actual Code&#xa0;&#xa0;&#xa0;<span class="tag"><span class="code">code</span></span></a>
<ul>
<li><a href="#org54aba1b"><code>flake.nix</code></a></li>
</ul>
</li>
<li><a href="#org719d3f6">First the nix-files that flake really needs and that do not fit wel in the hierarchical structure</a>
<ul>
<li><a href="#org70e3d1a"><code>assets/flake/users/henrov.nix</code></a></li>
<li><a href="#org75cfbb7"><code>assets/flake/terminal_shell/devshell.nix</code></a></li>
<li><a href="#org5be4bbb"><code>assets/flake/machines/traveldroid/top.nix</code></a></li>
<li><a href="#orga21f5df"><code>assets/flake/machines/traveldroid/boot.nix</code></a></li>
</ul>
</li>
<li><a href="#orgbdf7b2e">Now we reach the top of the hierarchy which will call all other imports</a>
<ul>
<li><a href="#org7c5fbb5"><code>generated/top.nix</code></a></li>
<li><a href="#orgb5bd9ab"><code>generated/hyprland/top.nix</code></a></li>
<li><a href="#org88a12e6"><code>generated/hyprland/hyprland.nix</code></a></li>
<li><a href="#org2ae8c12"><code>generated/mangowc/top.nix</code></a></li>
<li><a href="#org2f70be4"><code>generated/system/top.nix</code></a></li>
<li><a href="#org59f1033"><code>generated/system/applications/top.nix</code></a></li>
<li><a href="#org04bc528"><code>generated/system/applications/packages.nix</code></a></li>
<li><a href="#orgda8622f"><code>generated/system/applications/flatpaks.nix</code></a></li>
<li><a href="#org60add80"><code>generated/system/core/top.nix</code></a></li>
<li><a href="#orgbb5462a"><code>generated/system/core/fonts.nix</code></a></li>
<li><a href="#org6dc46f8"><code>generated/system/core/eww.nix</code></a></li>
<li><a href="#org2e01dc1"><code>generated/system/core/waybar.nix</code></a></li>
<li><a href="#orgdc9234a"><code>generated/system/core/login-tuigreeter.nix</code></a></li>
<li><a href="#orge44900b"><code>generated/system/core/wayland.nix</code></a></li>
<li><a href="#orgc9bc445"><code>generated/system/development/top.nix</code></a></li>
<li><a href="#org5038312"><code>generated/system/system_management/top.nix</code></a></li>
<li><a href="#orge7cf088"><code>generated/hyprland/animations_effects/top.nix</code></a></li>
<li><a href="#org26200fb"><code>generated/hyprland/decorations/top.nix</code></a></li>
<li><a href="#orga16a4d8"><code>generated/hyprland/keyboard_binds/top.nix</code></a></li>
<li><a href="#org52f6125"><code>generated/hyprland/notifications/top.nix</code></a></li>
<li><a href="#org383397b"><code>generated/hyprland/statusbar_tray/top.nix</code></a></li>
<li><a href="#orgf60d0a7"><code>generated/hyprland/task_launcher/top.nix</code></a></li>
<li><a href="#org8740b1c"><code>generated/system/task_launcher/wofi.nix</code></a></li>
<li><a href="#orgcc1583b"><code>generated/hyprland/task_window_workspace_switcher/top.nix</code></a></li>
<li><a href="#orgb539a8d"><code>generated/hyprland/window_rules/top.nix</code></a></li>
<li><a href="#org9950826"><code>generated/mangowc/animations_effects/top.nix</code></a></li>
<li><a href="#org125b8fe"><code>generated/mangowc/decorations/top.nix</code></a></li>
<li><a href="#org9bdc71e"><code>generated/mangowc/keyboard_binds/top.nix</code></a></li>
<li><a href="#org86bba6f"><code>generated/mangowc/notifications/top.nix</code></a></li>
<li><a href="#orgffb4be1"><code>generated/mangowc/statusbar_tray/top.nix</code></a></li>
<li><a href="#orgf6d923e"><code>generated/mangowc/task_launcher/top.nix</code></a></li>
<li><a href="#orgc8a497b"><code>generated/mangowc/task_window_workspace_switcher/top.nix</code></a></li>
<li><a href="#org7f48bef"><code>generated/mangowc/window_rules/top.nix</code></a></li>
<li><a href="#org70600a1"><code>generated/system/applications/accessibility/top.nix</code></a></li>
<li><a href="#org9a85a0f"><code>generated/system/applications/file_management/top.nix</code></a></li>
<li><a href="#org8cec9d5"><code>generated/system/applications/gaming/top.nix</code></a></li>
<li><a href="#orgaf4b3f2"><code>generated/system/applications/media_playback_editing/top.nix</code></a></li>
<li><a href="#orgee8c79d"><code>generated/system/applications/office_productivity/top.nix</code></a></li>
<li><a href="#org391cc00"><code>generated/system/applications/terminal_shell/top.nix</code></a></li>
<li><a href="#org5fbf909"><code>generated/system/applications/terminal_shell/kitty.nix</code></a></li>
<li><a href="#orga1afc10"><code>generated/system/applications/terminal_shell/starship.nix</code></a></li>
<li><a href="#org384ec83"><code>generated/system/applications/terminal_shell/zsh.nix</code></a></li>
<li><a href="#org2f1bd1c"><code>generated/system/development/databases/top.nix</code></a></li>
<li><a href="#orgf2e6802"><code>generated/system/development/devops_ci_cd/top.nix</code></a></li>
<li><a href="#org49e2e6c"><code>generated/system/development/programming_languages/top.nix</code></a></li>
<li><a href="#orgaec551a"><code>generated/system/development/virtualization/top.nix</code></a></li>
<li><a href="#orga7420b2"><code>generated/system/development/web_development/top.nix</code></a></li>
<li><a href="#org4b3537b"><code>generated/system/system_management/audio/top.nix</code></a></li>
<li><a href="#org58ebd95"><code>generated/system/system_management/backups/top.nix</code></a></li>
<li><a href="#orgb4b9207"><code>generated/system/system_management/bluetooth/top.nix</code></a></li>
<li><a href="#orgb84f15b"><code>generated/system/system_management/disk_management/top.nix</code></a></li>
<li><a href="#org6254bf3"><code>generated/system/system_management/hardware_sensors/top.nix</code></a></li>
<li><a href="#org85cb705"><code>generated/system/system_management/logging_monitoring/top.nix</code></a></li>
<li><a href="#org50892da"><code>generated/system/system_management/login_manager/top.nix</code></a></li>
<li><a href="#orgd9f7c02"><code>generated/system/system_management/monitor_setup/top.nix</code></a></li>
<li><a href="#orgad3be90"><code>generated/system/system_management/networking/top.nix</code></a></li>
<li><a href="#org711abd4"><code>generated/system/system_management/power_management/top.nix</code></a></li>
<li><a href="#org37a3fd9"><code>generated/system/system_management/printers_scanners/top.nix</code></a></li>
<li><a href="#org7a03e85"><code>generated/system/system_management/security/top.nix</code></a></li>
<li><a href="#org53614d0"><code>generated/system/system_management/system_updates/top.nix</code></a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org8488587" class="outline-2">
<h2 id="org8488587">Shortcuts</h2>
<div class="outline-text-2" id="text-org8488587">
<p>
<a href="#introduction">Introduction</a>
<a href="#the-assets-folder">The Assets Folder</a>
<a href="#the-actual-code">The Actual Code</a>
</p>
<p>
&#x2014;
</p>
</div>
</div>
<div id="outline-container-introduction" class="outline-2">
<h2 id="introduction">Introduction&#xa0;&#xa0;&#xa0;<span class="tag"><span class="intro">intro</span></span></h2>
<div class="outline-text-2" id="text-introduction">
</div>
<div id="outline-container-org29be5d1" class="outline-3">
<h3 id="org29be5d1">What is Droidnix</h3>
<div class="outline-text-3" id="text-org29be5d1">
<p>
Droidnix is a modular, declarative NixOS + Home Manager configuration system. It allows users to choose between <code>Hyprland</code> and <code>Mangowc</code> 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.
</p>
</div>
<div id="outline-container-org320b11d" class="outline-4">
<h4 id="org320b11d">Installed components:</h4>
<div class="outline-text-4" id="text-org320b11d">
</div>
<ul class="org-ul">
<li><a id="org8312569"></a>Core<br /></li>
<li><a id="orgb001024"></a>Hyprland<br /></li>
<li><a id="org85eec38"></a>Mangowc<br /></li>
</ul>
</div>
<div id="outline-container-org7c55939" class="outline-4">
<h4 id="org7c55939">Goals, project Structure, import hierarchy</h4>
<div class="outline-text-4" id="text-org7c55939">
<p>
This project uses a <b><b>modular NixOS configuration</b></b> with <b><b>Hyprland</b></b> and <b><b>MangoWC</b></b> support, designed for <b><b>literate programming</b></b> and <b><b>cross-device reusability</b></b>.
The Droidnix repository is organized into two main parts:
</p>
<ol class="org-ol">
<li><code>.assets/</code>: Static, non-generated files (e.g., configs, scripts, themes).</li>
<li>Generated folders (<code>system</code>, <code>hyprland</code>, <code>mangowc</code>): NixOS and Home Manager configurations, generated from Org files.</li>
</ol>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdbe7735" class="outline-2">
<h2 id="orgdbe7735">Root Level</h2>
<div class="outline-text-2" id="text-orgdbe7735">
<ul class="org-ul">
<li><code>flake.nix</code> is the entry point and imports:
<ul class="org-ul">
<li><code>generated/system/</code></li>
<li><code>generated/hyprland/</code></li>
<li><code>generated/mangowc/</code></li>
<li>Machine-specific configurations from <code>assets/machines/</code></li>
</ul></li>
</ul>
</div>
</div>
<div id="outline-container-org0da5f7f" class="outline-2">
<h2 id="org0da5f7f">Generated Structure</h2>
<div class="outline-text-2" id="text-org0da5f7f">
<p>
The <code>generated/</code> directory contains all generated configurations, divided into three main groups: <code>system</code>, <code>hyprland</code>, and <code>mangowc</code>.
</p>
</div>
<div id="outline-container-org67b4d9f" class="outline-3">
<h3 id="org67b4d9f">System (<code>generated/system/</code>)</h3>
<div class="outline-text-3" id="text-org67b4d9f">
<p>
This directory contains system-wide configurations that are independent of the window manager.
</p>
</div>
<div id="outline-container-org0842312" class="outline-4">
<h4 id="org0842312">Applications (<code>applications/</code>)</h4>
<div class="outline-text-4" id="text-org0842312">
<ul class="org-ul">
<li><code>file_management/</code>: Configurations for file managers and storage solutions.</li>
<li><code>gaming/</code>: Settings for gaming-related software.</li>
<li><code>office_productivity/</code>: Configurations for office software.</li>
<li><code>media_playback_editing/</code>: Settings for media playback and editing software.</li>
<li><code>terminal_shell/</code>: Configurations for terminal emulators and shells.</li>
</ul>
</div>
</div>
<div id="outline-container-orge094896" class="outline-4">
<h4 id="orge094896">Development (<code>development/</code>)</h4>
<div class="outline-text-4" id="text-orge094896">
<ul class="org-ul">
<li><code>databases/</code>: Settings for local databases.</li>
<li><code>devops_ci_cd/</code>: Configurations for DevOps tools.</li>
<li><code>programming_languages/</code>: Settings for programming languages and their runtimes.</li>
<li><code>virtualization/</code>: Configurations for virtualization and containerization tools.</li>
<li><code>web_development/</code>: Settings for web development.</li>
</ul>
</div>
</div>
<div id="outline-container-orge01c26f" class="outline-4">
<h4 id="orge01c26f">System Management (<code>system_management/</code>)</h4>
<div class="outline-text-4" id="text-orge01c26f">
<ul class="org-ul">
<li><code>backups/</code>: Settings for backup software.</li>
<li><code>bluetooth/</code>: Configurations for Bluetooth devices and services.</li>
<li><code>power_management/</code>: Settings for power management.</li>
<li><code>audio/</code>: Configurations for audio.</li>
<li><code>hardware_sensors/</code>: Settings for hardware monitoring.</li>
<li><code>logging_monitoring/</code>: Configurations for system logging and monitoring.</li>
<li><code>login_manager/</code>: Settings for the login manager.</li>
<li><code>monitor_setup/</code>: Configurations for display settings.</li>
<li><code>networking/</code>: Settings for networking.</li>
<li><code>printers_scanners/</code>: Configurations for printers and scanners.</li>
<li><code>disk_management/</code>: Settings for disk management.</li>
<li><code>security/</code>: Security-related configurations.</li>
<li><code>system_updates/</code>: Settings for system updates and package management.</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-orgf51d3fd" class="outline-3">
<h3 id="orgf51d3fd">Hyprland (<code>generated/hyprland/</code>)</h3>
<div class="outline-text-3" id="text-orgf51d3fd">
<p>
This directory contains configurations specific to Hyprland.
</p>
<ul class="org-ul">
<li><code>animations_effects/</code>: Settings for window animations and visual effects.</li>
<li><code>decorations/</code>: Configurations for window decorations.</li>
<li><code>keyboard_binds/</code>: Keyboard shortcuts for Hyprland.</li>
<li><code>notifications/</code>: Settings for notifications.</li>
<li><code>statusbar_tray/</code>: Configurations for the status bar and system tray.</li>
<li><code>task_launcher/</code>: Settings for task launchers.</li>
<li><code>task_window_workspace_switcher/</code>: Configurations for switching between windows and workspaces.</li>
<li><code>window_rules/</code>: Rules for window behavior.</li>
</ul>
</div>
</div>
<div id="outline-container-orgdc2d263" class="outline-3">
<h3 id="orgdc2d263">MangoWC (<code>generated/mangowc/</code>)</h3>
<div class="outline-text-3" id="text-orgdc2d263">
<p>
This directory contains configurations specific to MangoWC.
</p>
<ul class="org-ul">
<li><code>animations_effects/</code>: Settings for animations and effects in MangoWC.</li>
<li><code>decorations/</code>: Configurations for window decorations.</li>
<li><code>keyboard_binds/</code>: Keyboard shortcuts for MangoWC.</li>
<li><code>notifications/</code>: Settings for notifications.</li>
<li><code>statusbar_tray/</code>: Configurations for the status bar and system tray.</li>
<li><code>task_launcher/</code>: Settings for task launchers.</li>
<li><code>task_window_workspace_switcher/</code>: Configurations for switching between windows and workspaces.</li>
<li><code>window_rules/</code>: Rules for window behavior.</li>
</ul>
<p>
<b><b>File Structure and Imports</b></b>
</p>
<ul class="org-ul">
<li>Every <code>top.nix</code> file imports all <code>.nix</code> files in its directory.</li>
<li>Machine-specific configurations are stored in <code>assets/machines/</code>.</li>
<li>Themes and overrides are modular and reusable across setups.</li>
</ul>
<p>
<b><b>Design Principles</b></b>
</p>
<ul class="org-ul">
<li><b><b>Modularity</b></b>: Each component is self-contained and reusable.</li>
<li><b><b>Consistency</b></b>: Every directory follows the same import pattern.</li>
<li><b><b>Scalability</b></b>: Easy to add new machines or configurations.</li>
</ul>
<pre class="example" id="org8e1fb88">
.
├── 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
</pre>
</div>
</div>
<div id="outline-container-orgd6a5351" class="outline-3">
<h3 id="orgd6a5351">First Setup</h3>
<div class="outline-text-3" id="text-orgd6a5351">
<ol class="org-ol">
<li>Clone this repository.</li>
<li>Run the setup script: <code>./setup_droidnix.sh</code>.</li>
<li>Edit <code>.assets/system/conf/base.conf</code> to choose your window manager (<code>wm = "hyprland"</code> or <code>wm = "mangowc"</code>).</li>
<li>Tangle this Org file to generate Nix configurations: <code>C-c C-v t</code> in Emacs or use this: <code>emacs README.org --batch -f org-babel-tangle &amp;&amp; emacs --batch --eval "(setq org-html-htmlize-output-type nil)" README.org -f org-html-export-to-html</code></li>
<li>Build and switch: <code>sudo nixos-rebuild switch --flake .#&lt;hostname&gt;</code>.</li>
</ol>
<p>
&#x2014;
</p>
</div>
</div>
</div>
<div id="outline-container-the-assets-folder" class="outline-2">
<h2 id="the-assets-folder">The Assets Folder&#xa0;&#xa0;&#xa0;<span class="tag"><span class="assets">assets</span></span></h2>
<div class="outline-text-2" id="text-the-assets-folder">
<p>
The <code>.assets/</code> folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.
</p>
</div>
<div id="outline-container-orgb7d4bbc" class="outline-3">
<h3 id="orgb7d4bbc"><code>.assets/system/</code></h3>
<div class="outline-text-3" id="text-orgb7d4bbc">
<p>
This folder contains files shared across both window managers, such as wallpapers, shell configs, and system scripts.
</p>
<ul class="org-ul">
<li><code>conf/base.conf</code>: Defines the window manager choice and other global settings.</li>
<li><code>scripts/</code>: System-wide scripts (e.g., utilities, helpers).</li>
</ul>
</div>
</div>
<div id="outline-container-org1e548c6" class="outline-3">
<h3 id="org1e548c6"><code>.assets/hyprland/</code></h3>
<div class="outline-text-3" id="text-org1e548c6">
<p>
Hyprland-specific assets, including configs, themes, and scripts.
</p>
<ul class="org-ul">
<li><code>conf/</code>: Hyprland configuration files (e.g., <code>hyprland.conf</code>).</li>
<li><code>themes/</code>: Hyprland-specific theme scripts.</li>
<li><code>scripts/</code>: Hyprland-specific scripts.</li>
</ul>
</div>
</div>
<div id="outline-container-org7da9911" class="outline-3">
<h3 id="org7da9911"><code>.assets/mangowc/</code></h3>
<div class="outline-text-3" id="text-org7da9911">
<p>
Mangowc-specific assets, including configs, themes, and scripts.
</p>
<ul class="org-ul">
<li><code>conf/</code>: Mangowc configuration files.</li>
<li><code>themes/</code>: Mangowc-specific theme scripts.</li>
<li><code>scripts/</code>: Mangowc-specific scripts.</li>
</ul>
</div>
</div>
<div id="outline-container-org480bb75" class="outline-3">
<h3 id="org480bb75"><code>.assets/machines/</code></h3>
<div class="outline-text-3" id="text-org480bb75">
<p>
Machine-specific NixOS configurations (e.g., <code>configuration.nix</code> for <code>maindroid</code> and <code>traveldroid</code>).
</p>
<p>
&#x2014;
</p>
</div>
</div>
</div>
<div id="outline-container-the-actual-code" class="outline-2">
<h2 id="the-actual-code">The Actual Code&#xa0;&#xa0;&#xa0;<span class="tag"><span class="code">code</span></span></h2>
<div class="outline-text-2" id="text-the-actual-code">
<p>
This section contains the Org blocks for tangling Nix code into the generated folders.
</p>
</div>
<div id="outline-container-org54aba1b" class="outline-3">
<h3 id="org54aba1b"><code>flake.nix</code></h3>
<div class="outline-text-3" id="text-org54aba1b">
<p>
The Nix flake definition for Droidnix.
</p>
<div class="org-src-container">
<pre class="src src-nix">{
description = "Droidnix: A dendritic NixOS + Home Manager configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
emacs-overlay = {
url = "github:nix-community/emacs-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
catppuccin = {
url = "github:catppuccin/nix";
inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser = {
url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland.url = "github:hyprwm/Hyprland";
};
outputs =
inputs@{
self,
nixpkgs,
home-manager,
emacs-overlay,
catppuccin,
zen-browser,
hyprland,
...
}:
let
lib = nixpkgs.lib;
system = "x86_64-linux"; # Define the system explicitly
user = import ./assets/flake/users/henrov.nix;
machines = [
"traveldroid"
"maindroid"
];
in
{
nixosConfigurations = lib.genAttrs machines (
machine:
lib.nixosSystem {
inherit system;
modules = [
# Import machine-specific configurations
./assets/flake/machines/${machine}/top.nix
# Home Manager and theme modules
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit user inputs; flakeRoot = ./.; };
}
inputs.catppuccin.nixosModules.catppuccin
# Let's start importing the whole generated tree
./generated/top.nix
];
specialArgs = { inherit user inputs; flakeRoot = ./.; };
}
);
devShells.${system}.default = import ./assets/flake/terminal_shell/devshell.nix {
inherit (nixpkgs.legacyPackages.${system}) mkShell;
};
};
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org719d3f6" class="outline-2">
<h2 id="org719d3f6">First the nix-files that flake really needs and that do not fit wel in the hierarchical structure</h2>
<div class="outline-text-2" id="text-org719d3f6">
</div>
<div id="outline-container-org70e3d1a" class="outline-3">
<h3 id="org70e3d1a"><code>assets/flake/users/henrov.nix</code></h3>
<div class="outline-text-3" id="text-org70e3d1a">
<p>
This is the default user, just search and replace henrov another name if you want to change
</p>
<div class="org-src-container">
<pre class="src src-nix">{
username = "henrov";
hashedPassword = "$6$ISAmsPLyFi7idYXr$VmZsq.zMsyh1irSkyDNqtorNXG0oEHbbMVqTii1t8bymvrQ5ZQmbdi4OiBNeNYe/huHGrojXM.3TST2fTLz0T.";
homeDirectory = "/home/henrov";
stateVersion = "25.11";
locale = "nl_NL.UTF-8";
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org75cfbb7" class="outline-3">
<h3 id="org75cfbb7"><code>assets/flake/terminal_shell/devshell.nix</code></h3>
<div class="outline-text-3" id="text-org75cfbb7">
<p>
This code defines a Nix shell environment (also called a "devShell") that you can enter using the nix develop command. When you enter this shell, Nix will provide the tools and dependencies listed in buildInputs.
</p>
<div class="org-src-container">
<pre class="src src-nix">{ mkShell, ... }:
mkShell {
buildInputs = with import &lt;nixpkgs&gt; {}; [
nil
nixfmt-rfc-style
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org5be4bbb" class="outline-3">
<h3 id="org5be4bbb"><code>assets/flake/machines/traveldroid/top.nix</code></h3>
<div class="outline-text-3" id="text-org5be4bbb">
<p>
This code defines the machine to build. Just search and replace traveldroid to provision another machine.
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./boot.nix
./hardware-configuration.nix
];
options = {
wm = lib.mkOption {
type = lib.types.str;
default = "hyprland";
description = "Type of window manager to use";
};
};
config = {
# Minimal settings that must be defined here
networking.hostName = "traveldroid";
wm.type = "hyprland";
# User configuration
users.users.${user.username} = {
isNormalUser = true;
extraGroups = [ "wheel" "networkmanager" ];
hashedPassword = user.hashedPassword;
home = user.homeDirectory;
};
# Optional: Enable auto-login for testing
services.getty.autologinUser = user.username;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orga21f5df" class="outline-3">
<h3 id="orga21f5df"><code>assets/flake/machines/traveldroid/boot.nix</code></h3>
<div class="outline-text-3" id="text-orga21f5df">
<p>
This file has most of the settings the control how the computer boots up.
</p>
<div class="org-src-container">
<pre class="src src-nix">{ pkgs, ... } :
{
boot = {
initrd = {
verbose = false; # its a lot of logs. dont need it, unless we do.
kernelModules = [ ]; # no kernel modules on boot
};
extraModulePackages = [ ]; # no extra packages on boot either
kernelPackages = pkgs.linuxPackages_latest; # latest greatest linux kernel
kernelParams = [ "silent" ]; # quiet those logs
consoleLogLevel = 0; # quiten more logs
plymouth.enable = true; # graphical boot animation instead
supportedFilesystems = [ "ntfs" ]; # should see the ntfs (windows)
loader = {
systemd-boot.enable = true; # systemd-boot
systemd-boot.configurationLimit = 10;
efi.canTouchEfiVariables = true; # allow editing efi to edit the boot loader
timeout = 5; # grub timeout to make a selection
};
};
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgbdf7b2e" class="outline-2">
<h2 id="orgbdf7b2e">Now we reach the top of the hierarchy which will call all other imports</h2>
<div class="outline-text-2" id="text-orgbdf7b2e">
</div>
<div id="outline-container-org7c5fbb5" class="outline-3">
<h3 id="org7c5fbb5"><code>generated/top.nix</code></h3>
<div class="outline-text-3" id="text-org7c5fbb5">
<p>
The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure.
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, ... }:
{
imports = [
./system/top.nix
./hyprland/top.nix
# ./mangowc/top.nix
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb5bd9ab" class="outline-3">
<h3 id="orgb5bd9ab"><code>generated/hyprland/top.nix</code></h3>
<div class="outline-text-3" id="text-orgb5bd9ab">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./hyprland.nix
./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
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org88a12e6" class="outline-3">
<h3 id="org88a12e6"><code>generated/hyprland/hyprland.nix</code></h3>
<div class="outline-text-3" id="text-org88a12e6">
<p>
The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure.
</p>
<div class="org-src-container">
<pre class="src src-nix">{
config,
pkgs,
lib,
user,
flakeRoot,
...
}:
let
hyprlandConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/hypr";
# Dynamically read all files in assets/hyprland/conf/
hyprlandConfs =
lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/hyprland/conf/hypr"))
(name: {
text = builtins.readFile "${flakeRoot}/assets/hyprland/conf/hypr/${name}";
});
in
{
# NixOS: Enable Hyprland (optional)
programs.hyprland = {
enable = true;
};
# Home Manager: Hyprland-specific configurations
home-manager.users.${user.username} = {
# Use config.home-manager.users.${user.username} instead of userConfig
home.stateVersion = config.home-manager.users.${user.username}.stateVersion or "23.11"; # Default fallback
home.username = user.username; # Use the 'user' argument
home.homeDirectory =
config.home-manager.users.${user.username}.homeDirectory or "/home/${user.username}";
wayland.windowManager.hyprland = {
enable = true;
};
# Merge dynamic Hyprland configs with existing xdg.configFile
xdg.configFile = {
# Your existing manual configs (if any)
}
// hyprlandConfs;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org2ae8c12" class="outline-3">
<h3 id="org2ae8c12"><code>generated/mangowc/top.nix</code></h3>
<div class="outline-text-3" id="text-org2ae8c12">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ 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
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org2f70be4" class="outline-3">
<h3 id="org2f70be4"><code>generated/system/top.nix</code></h3>
<div class="outline-text-3" id="text-org2f70be4">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./applications/top.nix
./core/top.nix
./development/top.nix
./system_management/top.nix
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org59f1033" class="outline-3">
<h3 id="org59f1033"><code>generated/system/applications/top.nix</code></h3>
<div class="outline-text-3" id="text-org59f1033">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./packages.nix
./flatpaks.nix
./accessibility/top.nix
./file_management/top.nix
./gaming/top.nix
./media_playback_editing/top.nix
./office_productivity/top.nix
./terminal_shell/top.nix
];
nixpkgs.config.allowUnfree = true;
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org04bc528" class="outline-3">
<h3 id="org04bc528"><code>generated/system/applications/packages.nix</code></h3>
<div class="outline-text-3" id="text-org04bc528">
<p>
This will import all packages listed in ./assets/system/apps/packlages.conf
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, lib, pkgs, flakeRoot, inputs, ... }:
let
packagesConfPath = "${flakeRoot}/assets/system/apps/packages.conf";
raw = builtins.readFile packagesConfPath;
# IMPORTANT: explicit "\n" so we never accidentally split into characters
rawLines = lib.splitString "\n" raw;
# Guard: if we accidentally split into characters, rawLines length ~= stringLength raw
_guard = assert !(
builtins.stringLength raw &gt; 1 &amp;&amp;
builtins.length rawLines == builtins.stringLength raw
); true;
cleanLine = l:
let
noCR = lib.replaceStrings [ "\r" ] [ "" ] l;
noInlineComment = lib.head (lib.splitString "#" noCR);
in
lib.strings.trim noInlineComment;
entries =
builtins.filter (l: l != "")
(map cleanLine rawLines);
resolvePkg = name:
let
parts = lib.splitString "." name;
found = lib.attrByPath parts null pkgs;
in
if found == null then
throw ''
packages.nix: package not found in pkgs
Token : ${builtins.toJSON name}
packages.conf : ${toString packagesConfPath}
Hint : check the attribute name on search.nixos.org/packages
''
else
found;
packages = builtins.seq _guard (map resolvePkg entries);
zenBrowser =
inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
{
environment.systemPackages =
packages
++ [ zenBrowser ];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgda8622f" class="outline-3">
<h3 id="orgda8622f"><code>generated/system/applications/flatpaks.nix</code></h3>
<div class="outline-text-3" id="text-orgda8622f">
<p>
This will import all packages listed in ./assets/system/apps/flatpaks.conf
</p>
<div class="org-src-container">
<pre class="src src-nix">{
config,
pkgs,
lib,
flakeRoot,
...
}:
let
moduleName = "install-flatpaks";
flatpakConfPath = "${flakeRoot}/assets/system/apps/flatpaks.conf";
raw = builtins.readFile flatpakConfPath;
# Explicit "\n" so we never accidentally split into characters
rawLines = lib.splitString "\n" raw;
# Guard: if we accidentally split into characters, rawLines length ~= stringLength raw
_guard =
assert !(builtins.stringLength raw &gt; 1 &amp;&amp; builtins.length rawLines == builtins.stringLength raw);
true;
cleanLine =
l:
let
noCR = lib.replaceStrings [ "\r" ] [ "" ] l;
noInlineComment = lib.head (lib.splitString "#" noCR);
in
lib.strings.trim noInlineComment;
entries = builtins.filter (l: l != "") (map cleanLine rawLines);
# Flatpak app IDs are reverse-DNS style like org.example.App (at least 2 dots).
# We'll validate and fail early with a clear message.
dotCount = s: builtins.length (lib.splitString "." s) - 1;
isValidId = s: (dotCount s) &gt;= 2; # matches the error you're seeing: "at least 2 periods"
_validate = builtins.seq _guard (
builtins.map (
id:
if isValidId id then
true
else
throw ''
${moduleName}: invalid Flatpak ID in flatpaks.conf (needs reverse-DNS with at least 2 dots)
Token : ${builtins.toJSON id}
flatpaks.conf : ${toString flatpakConfPath}
Fix: remove stray tokens/headers, or comment them out with '#'.
''
) entries
);
# Use validated entries
flatpakApps = builtins.seq _validate entries;
syncFlatpaks = pkgs.writeShellScript "sync-flatpaks" ''
set -euo pipefail
# Use the deployed config path (matches environment.etc below)
CONF="/etc/flatpak/flatpaks.conf"
if [[ -f "$CONF" ]]; then
echo "flatpak-sync: using $CONF"
else
echo "flatpak-sync: WARNING: $CONF not found, using embedded list"
fi
if ! flatpak remotes --system --columns=name | grep -qx flathub; then
flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
fi
desired_apps=(
${lib.concatStringsSep "\n" (map (a: ''"${a}"'') flatpakApps)}
)
for app in "''${desired_apps[@]}"; do
if ! flatpak info --system "$app" &gt;/dev/null 2&gt;&amp;1; then
flatpak install --system -y --noninteractive flathub "$app"
fi
done
'';
in
{
services.flatpak.enable = true;
xdg.portal = {
enable = true;
};
# Deploy the config file for runtime visibility/debugging
environment.etc."flatpak/flatpaks.conf".source = lib.mkForce flatpakConfPath;
systemd.services.flatpak-sync = {
description = "Install Flatpak apps listed in flatpaks.conf";
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = syncFlatpaks;
};
restartTriggers = [ flatpakConfPath ];
path = [
pkgs.flatpak
pkgs.coreutils
pkgs.gnugrep
pkgs.gnused
];
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org60add80" class="outline-3">
<h3 id="org60add80"><code>generated/system/core/top.nix</code></h3>
<div class="outline-text-3" id="text-org60add80">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./wayland.nix
./eww.nix
# ./waybar.nix
./login-tuigreeter.nix
# ./login-lightdm.nix
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbb5462a" class="outline-3">
<h3 id="orgbb5462a"><code>generated/system/core/fonts.nix</code></h3>
<div class="outline-text-3" id="text-orgbb5462a">
<p>
This file installs and configures eww
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
(nerdfonts.override { fonts = [ "FiraCode" ]; })
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org6dc46f8" class="outline-3">
<h3 id="org6dc46f8"><code>generated/system/core/eww.nix</code></h3>
<div class="outline-text-3" id="text-org6dc46f8">
<p>
This file installs and configures eww
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, user, ... }:
let
ewwConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/eww";
# Dynamically read all files in assets/system/conf/eww/
ewwConfs = lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/system/conf/eww")) (name: {
text = builtins.readFile "${flakeRoot}/assets/system/conf/eww/${name}";
});
in
{
environment.systemPackages = with pkgs; [ eww ];
home-manager.users.${user.username} = {
home.file = {
"${ewwConfigDir}" = {
source = "${flakeRoot}/assets/system/conf/eww";
recursive = true;
};
};
home.sessionVariables = {
EWW_BIN = "${pkgs.eww}/bin/eww";
};
# Start eww with Hyprland/MangoWC
wayland.windowManager.hyprland.settings = lib.mkForce {
exec-once = [ "eww daemon" ];
exec = [ "eww open-many ${ewwConfigDir}/widgets" ]; # Adjust as needed
};
# For MangoWC, use:
# wayland.windowManager.mangowc.config = {
# exec = [ "eww daemon" ];
# exec-once = [ "eww open-many ${ewwConfigDir}/widgets" ];
# };
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org2e01dc1" class="outline-3">
<h3 id="org2e01dc1"><code>generated/system/core/waybar.nix</code></h3>
<div class="outline-text-3" id="text-org2e01dc1">
<p>
This file installs and configures waybar
</p>
<div class="org-src-container">
<pre class="src src-nix">
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdc9234a" class="outline-3">
<h3 id="orgdc9234a"><code>generated/system/core/login-tuigreeter.nix</code></h3>
<div class="outline-text-3" id="text-orgdc9234a">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ pkgs, user, ... } :
{
environment.systemPackages = with pkgs; [
tuigreet
];
services.greetd = {
enable = true;
settings = {
default_session = {
command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a • %h | %F'";
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orge44900b" class="outline-3">
<h3 id="orge44900b"><code>generated/system/core/wayland.nix</code></h3>
<div class="outline-text-3" id="text-orge44900b">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, ... }:
{
# Enable essential services for a Wayland session
services.dbus.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
# XDG Desktop Portal settings for better application integration
xdg.portal = {
enable = true;
config.system.default = [ "hyprland" "gtk" ];
};
# Environment variables for a Wayland session
environment.sessionVariables = {
XDG_SESSION_TYPE = "wayland";
XDG_CURRENT_DESKTOP = "Hyprland";
XCURSOR_SIZE = "24";
};
# Home Manager Wayland configurations
home-manager.users.${user.username} = {
xdg.portal = {
enable = true;
extraPortals = with pkgs; [ xdg-desktop-portal-hyprland ];
config.hyprland = {
"org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc9bc445" class="outline-3">
<h3 id="orgc9bc445"><code>generated/system/development/top.nix</code></h3>
<div class="outline-text-3" id="text-orgc9bc445">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./databases/top.nix
./devops_ci_cd/top.nix
./programming_languages/top.nix
./virtualization/top.nix
./web_development/top.nix
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org5038312" class="outline-3">
<h3 id="org5038312"><code>generated/system/system_management/top.nix</code></h3>
<div class="outline-text-3" id="text-org5038312">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./audio/top.nix
./backups/top.nix
./bluetooth/top.nix
./disk_management/top.nix
./hardware_sensors/top.nix
./logging_monitoring/top.nix
./login_manager/top.nix
./monitor_setup/top.nix
./networking/top.nix
./power_management/top.nix
./printers_scanners/top.nix
./security/top.nix
./system_updates/top.nix
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orge7cf088" class="outline-3">
<h3 id="orge7cf088"><code>generated/hyprland/animations_effects/top.nix</code></h3>
<div class="outline-text-3" id="text-orge7cf088">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org26200fb" class="outline-3">
<h3 id="org26200fb"><code>generated/hyprland/decorations/top.nix</code></h3>
<div class="outline-text-3" id="text-org26200fb">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orga16a4d8" class="outline-3">
<h3 id="orga16a4d8"><code>generated/hyprland/keyboard_binds/top.nix</code></h3>
<div class="outline-text-3" id="text-orga16a4d8">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{
config,
pkgs,
lib,
user,
inputs,
flakeRoot,
...
}:
let
bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/hypr/bindings.conf");
in
{
home-manager.users.${user.username} = {
wayland.windowManager.hyprland = {
enable = true;
extraConfig = bindingsContent;
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org52f6125" class="outline-3">
<h3 id="org52f6125"><code>generated/hyprland/notifications/top.nix</code></h3>
<div class="outline-text-3" id="text-org52f6125">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org383397b" class="outline-3">
<h3 id="org383397b"><code>generated/hyprland/statusbar_tray/top.nix</code></h3>
<div class="outline-text-3" id="text-org383397b">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf60d0a7" class="outline-3">
<h3 id="orgf60d0a7"><code>generated/hyprland/task_launcher/top.nix</code></h3>
<div class="outline-text-3" id="text-orgf60d0a7">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./wofi.nix
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org8740b1c" class="outline-3">
<h3 id="org8740b1c"><code>generated/system/task_launcher/wofi.nix</code></h3>
<div class="outline-text-3" id="text-org8740b1c">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{
lib,
config,
pkgs,
flakeRoot,
user,
...
}:
let
wofiConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/wofi";
# Dynamically read all files in assets/hyprland/conf/wofi/
wofiConfs =
lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/system/conf/wofi"))
(name: {
text = builtins.readFile "${flakeRoot}/assets/system/conf/wofi/${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}/config" = wofiConfs."wofi.conf"; # Use the actual filename
"${wofiConfigDir}/style.css" = wofiConfs."theming.css"; # Use the actual filename
};
home.sessionVariables = {
WOFI_CONFIG = "${wofiConfigDir}/config";
WOFI_STYLE = "${wofiConfigDir}/style.css";
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgcc1583b" class="outline-3">
<h3 id="orgcc1583b"><code>generated/hyprland/task_window_workspace_switcher/top.nix</code></h3>
<div class="outline-text-3" id="text-orgcc1583b">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb539a8d" class="outline-3">
<h3 id="orgb539a8d"><code>generated/hyprland/window_rules/top.nix</code></h3>
<div class="outline-text-3" id="text-orgb539a8d">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org9950826" class="outline-3">
<h3 id="org9950826"><code>generated/mangowc/animations_effects/top.nix</code></h3>
<div class="outline-text-3" id="text-org9950826">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org125b8fe" class="outline-3">
<h3 id="org125b8fe"><code>generated/mangowc/decorations/top.nix</code></h3>
<div class="outline-text-3" id="text-org125b8fe">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org9bdc71e" class="outline-3">
<h3 id="org9bdc71e"><code>generated/mangowc/keyboard_binds/top.nix</code></h3>
<div class="outline-text-3" id="text-org9bdc71e">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix"># Your code here...
</pre>
</div>
</div>
</div>
<div id="outline-container-org86bba6f" class="outline-3">
<h3 id="org86bba6f"><code>generated/mangowc/notifications/top.nix</code></h3>
<div class="outline-text-3" id="text-org86bba6f">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgffb4be1" class="outline-3">
<h3 id="orgffb4be1"><code>generated/mangowc/statusbar_tray/top.nix</code></h3>
<div class="outline-text-3" id="text-orgffb4be1">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf6d923e" class="outline-3">
<h3 id="orgf6d923e"><code>generated/mangowc/task_launcher/top.nix</code></h3>
<div class="outline-text-3" id="text-orgf6d923e">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc8a497b" class="outline-3">
<h3 id="orgc8a497b"><code>generated/mangowc/task_window_workspace_switcher/top.nix</code></h3>
<div class="outline-text-3" id="text-orgc8a497b">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org7f48bef" class="outline-3">
<h3 id="org7f48bef"><code>generated/mangowc/window_rules/top.nix</code></h3>
<div class="outline-text-3" id="text-org7f48bef">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org70600a1" class="outline-3">
<h3 id="org70600a1"><code>generated/system/applications/accessibility/top.nix</code></h3>
<div class="outline-text-3" id="text-org70600a1">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org9a85a0f" class="outline-3">
<h3 id="org9a85a0f"><code>generated/system/applications/file_management/top.nix</code></h3>
<div class="outline-text-3" id="text-org9a85a0f">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org8cec9d5" class="outline-3">
<h3 id="org8cec9d5"><code>generated/system/applications/gaming/top.nix</code></h3>
<div class="outline-text-3" id="text-org8cec9d5">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgaf4b3f2" class="outline-3">
<h3 id="orgaf4b3f2"><code>generated/system/applications/media_playback_editing/top.nix</code></h3>
<div class="outline-text-3" id="text-orgaf4b3f2">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgee8c79d" class="outline-3">
<h3 id="orgee8c79d"><code>generated/system/applications/office_productivity/top.nix</code></h3>
<div class="outline-text-3" id="text-orgee8c79d">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org391cc00" class="outline-3">
<h3 id="org391cc00"><code>generated/system/applications/terminal_shell/top.nix</code></h3>
<div class="outline-text-3" id="text-org391cc00">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
./kitty.nix
./starship.nix
./zsh.nix
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org5fbf909" class="outline-3">
<h3 id="org5fbf909"><code>generated/system/applications/terminal_shell/kitty.nix</code></h3>
<div class="outline-text-3" id="text-org5fbf909">
<p>
This file sets up Kitty terminal
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, flakeRoot, ... }:
let
kittyConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/kitty";
in
{
home-manager.users.${user.username} = {
programs.kitty = {
enable = true;
};
# Copy the actual kitty.conf (not a symlink)
xdg.configFile."kitty/kitty.conf".text = lib.concatStringsSep "\n" [
(builtins.readFile "${flakeRoot}/assets/system/conf/kitty/kitty.conf")
];
# Copy the theme file
xdg.configFile."kitty/Catppuccin-Mocha.conf".source = "${flakeRoot}/assets/system/conf/kitty/Catppuccin-Mocha.conf";
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orga1afc10" class="outline-3">
<h3 id="orga1afc10"><code>generated/system/applications/terminal_shell/starship.nix</code></h3>
<div class="outline-text-3" id="text-orga1afc10">
<p>
This file sets up starship prompt
</p>
<div class="org-src-container">
<pre class="src src-nix">{
lib,
config,
pkgs,
flakeRoot,
...
}:
let
starshipConfig = lib.importTOML (flakeRoot + "/assets/system/conf/starship.toml");
in
{
programs.starship = {
enable = true;
settings = starshipConfig;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org384ec83" class="outline-3">
<h3 id="org384ec83"><code>generated/system/applications/terminal_shell/zsh.nix</code></h3>
<div class="outline-text-3" id="text-org384ec83">
<p>
This sets up the zsh terminal
</p>
<div class="org-src-container">
<pre class="src src-nix">{
lib,
config,
pkgs,
...
}:
{
# --- NixOS Configuration ---
environment.systemPackages = with pkgs; [
zsh
git
docker
];
# --- Home Manager Configuration ---
home-manager.users.henrov = {
programs.zsh = {
enable = true;
enableCompletion = true;
# Enable oh-my-zsh and use its plugins
oh-my-zsh = {
enable = true;
plugins = [
"git"
"docker"
"direnv"
"zsh-autosuggestions"
"zsh-syntax-highlighting"
"zsh-completions"
"zsh-history-substring-search"
];
theme = "agnoster"; # Fallback, overridden below
};
# Source Nixpkgs-provided plugins explicitly
initContent = ''
# Source plugins installed by Nix
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source ${pkgs.zsh-history-substring-search}/share/zsh-history-substring-search/zsh-history-substring-search.zsh
# Catppuccin Mocha theme for oh-my-zsh
local mocha_base="#1E1E2E"
local mocha_surface0="#313244"
local mocha_text="#CDD6F4"
local mocha_lavender="#B4BEFE"
local mocha_blue="#89B4FA"
local mocha_sapphire="#74C7EC"
local mocha_teal="#94E2D5"
local mocha_green="#A6E3A1"
local mocha_yellow="#F9E2AF"
local mocha_peach="#FAB387"
local mocha_maroon="#EBA0AC"
local mocha_red="#F38BA8"
local mocha_mauve="#CBA6F7"
local mocha_pink="#F5C2E7"
local mocha_flamingo="#F2CDCD"
local mocha_rosewater="#F5E0DC"
# Prompt
PROMPT='%{$fg[$mocha_blue]%}%n%{$reset_color%}@%{$fg[$mocha_peach]%}%m%{$reset_color%} %{$fg[$mocha_lavender]%}%~%{$reset_color%} %{$fg[$mocha_red]%}$%{$reset_color%} '
RPROMPT='%{$fg[$mocha_green]%}%T%{$reset_color%}'
# Git prompt
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[$mocha_yellow]%}(%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[$mocha_yellow]%})%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[$mocha_red]%}✗%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[$mocha_green]%}✓%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[$mocha_blue]%}⇡%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg[$mocha_blue]%}⇣%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[$mocha_pink]%}?%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[$mocha_sapphire]%}+%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg[$mocha_red]%}!%{$reset_color%}"
# Virtualenv/pyenv
ZSH_THEME_VIRTUAL_ENV_PREFIX="(%{$fg[$mocha_teal]%}"
ZSH_THEME_VIRTUAL_ENV_SUFFIX="%{$reset_color%})"
# Right prompt with Git status
RPROMPT='$(git_prompt_info) %{$fg[$mocha_green]%}%T%{$reset_color%}'
# Set the custom theme
ZSH_THEME="catppuccin-mocha"
'';
};
# Home Manager packages (optional)
home.packages = with pkgs; [
direnv
git-extras
];
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org2f1bd1c" class="outline-3">
<h3 id="org2f1bd1c"><code>generated/system/development/databases/top.nix</code></h3>
<div class="outline-text-3" id="text-org2f1bd1c">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf2e6802" class="outline-3">
<h3 id="orgf2e6802"><code>generated/system/development/devops_ci_cd/top.nix</code></h3>
<div class="outline-text-3" id="text-orgf2e6802">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org49e2e6c" class="outline-3">
<h3 id="org49e2e6c"><code>generated/system/development/programming_languages/top.nix</code></h3>
<div class="outline-text-3" id="text-org49e2e6c">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgaec551a" class="outline-3">
<h3 id="orgaec551a"><code>generated/system/development/virtualization/top.nix</code></h3>
<div class="outline-text-3" id="text-orgaec551a">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orga7420b2" class="outline-3">
<h3 id="orga7420b2"><code>generated/system/development/web_development/top.nix</code></h3>
<div class="outline-text-3" id="text-orga7420b2">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org4b3537b" class="outline-3">
<h3 id="org4b3537b"><code>generated/system/system_management/audio/top.nix</code></h3>
<div class="outline-text-3" id="text-org4b3537b">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org58ebd95" class="outline-3">
<h3 id="org58ebd95"><code>generated/system/system_management/backups/top.nix</code></h3>
<div class="outline-text-3" id="text-org58ebd95">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb4b9207" class="outline-3">
<h3 id="orgb4b9207"><code>generated/system/system_management/bluetooth/top.nix</code></h3>
<div class="outline-text-3" id="text-orgb4b9207">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb84f15b" class="outline-3">
<h3 id="orgb84f15b"><code>generated/system/system_management/disk_management/top.nix</code></h3>
<div class="outline-text-3" id="text-orgb84f15b">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org6254bf3" class="outline-3">
<h3 id="org6254bf3"><code>generated/system/system_management/hardware_sensors/top.nix</code></h3>
<div class="outline-text-3" id="text-org6254bf3">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org85cb705" class="outline-3">
<h3 id="org85cb705"><code>generated/system/system_management/logging_monitoring/top.nix</code></h3>
<div class="outline-text-3" id="text-org85cb705">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org50892da" class="outline-3">
<h3 id="org50892da"><code>generated/system/system_management/login_manager/top.nix</code></h3>
<div class="outline-text-3" id="text-org50892da">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd9f7c02" class="outline-3">
<h3 id="orgd9f7c02"><code>generated/system/system_management/monitor_setup/top.nix</code></h3>
<div class="outline-text-3" id="text-orgd9f7c02">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgad3be90" class="outline-3">
<h3 id="orgad3be90"><code>generated/system/system_management/networking/top.nix</code></h3>
<div class="outline-text-3" id="text-orgad3be90">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org711abd4" class="outline-3">
<h3 id="org711abd4"><code>generated/system/system_management/power_management/top.nix</code></h3>
<div class="outline-text-3" id="text-org711abd4">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org37a3fd9" class="outline-3">
<h3 id="org37a3fd9"><code>generated/system/system_management/printers_scanners/top.nix</code></h3>
<div class="outline-text-3" id="text-org37a3fd9">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org7a03e85" class="outline-3">
<h3 id="org7a03e85"><code>generated/system/system_management/security/top.nix</code></h3>
<div class="outline-text-3" id="text-org7a03e85">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org53614d0" class="outline-3">
<h3 id="org53614d0"><code>generated/system/system_management/system_updates/top.nix</code></h3>
<div class="outline-text-3" id="text-org53614d0">
<p>
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
imports = [
# No subfolders to import
];
# .. put any code here
}
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Henro Veijer</p>
<p class="date">Created: 2026-03-11 wo 16:53</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>