3163 lines
99 KiB
HTML
3163 lines
99 KiB
HTML
<?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-16 Mon 17:13 -->
|
|
<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="#org7bd663d">Shortcuts</a></li>
|
|
<li><a href="#introduction">Introduction   <span class="tag"><span class="intro">intro</span></span></a>
|
|
<ul>
|
|
<li><a href="#org1f23e3b">What is Droidnix</a>
|
|
<ul>
|
|
<li><a href="#org7f97cc8">Installed components:</a></li>
|
|
<li><a href="#orgc261c07">Goals, project Structure, import hierarchy</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgc1750a0">Root Level</a></li>
|
|
<li><a href="#orgbed1afd">Generated Structure</a>
|
|
<ul>
|
|
<li><a href="#orgabe8266">System (<code>generated/system/</code>)</a>
|
|
<ul>
|
|
<li><a href="#orge703d51">Applications (<code>applications/</code>)</a></li>
|
|
<li><a href="#orgc2cdf20">Development (<code>development/</code>)</a></li>
|
|
<li><a href="#org10843d9">System Management (<code>system_management/</code>)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgf4f269a">Hyprland (<code>generated/hyprland/</code>)</a></li>
|
|
<li><a href="#orgde1e2bf">First Setup</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#the-assets-folder">The Assets Folder   <span class="tag"><span class="assets">assets</span></span></a>
|
|
<ul>
|
|
<li><a href="#orgb3b7557"><code>.assets/system/</code></a></li>
|
|
<li><a href="#org39bf111"><code>.assets/hyprland/</code></a></li>
|
|
<li><a href="#org43ae336"><code>.assets/mangowc/</code></a></li>
|
|
<li><a href="#orgb56fdaf"><code>.assets/machines/</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#the-actual-code">The Actual Code   <span class="tag"><span class="code">code</span></span></a>
|
|
<ul>
|
|
<li><a href="#org239893f"><code>flake.nix</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org4d37543">First the nix-files that flake really needs and that do not fit wel in the hierarchical structure</a>
|
|
<ul>
|
|
<li><a href="#orgb882f07"><code>generated/out_of_tree/users/top.nix</code></a></li>
|
|
<li><a href="#orgdabdada"><code>generated/out_of_tree/users/user.nix</code></a></li>
|
|
<li><a href="#org98c7e73"><code>generated/out_of_tree/users/henrov.nix</code></a></li>
|
|
<li><a href="#org99d8047"><code>generated/out_of_tree/terminal_shell/top.nix</code></a></li>
|
|
<li><a href="#org2e0ffe5"><code>generated/out_of_tree/terminal_shell/devshell.nix</code></a></li>
|
|
<li><a href="#org7db5292"><code>generated/out_of_tree/machines/traveldroid/top.nix</code></a></li>
|
|
<li><a href="#org654385a"><code>generated/out_of_tree/machines/traveldroid/hardware-configuration.nix</code></a></li>
|
|
<li><a href="#org956e278"><code>generated/out_of_tree/machines/traveldroid/boot.nix</code></a></li>
|
|
<li><a href="#orgc3c1053"><code>generated/out_of_tree/machines/traveldroid/machine.nix</code></a></li>
|
|
<li><a href="#orgaa94bd9"><code>generated/out_of_tree/machines/traveldroid/dbus.nix</code></a></li>
|
|
<li><a href="#orgf715170"><code>generated/out_of_tree/machines/traveldroid/networking.nix</code></a></li>
|
|
<li><a href="#org325e696"><code>generated/out_of_tree/machines/traveldroid/session.nix</code></a></li>
|
|
<li><a href="#orga13c9d7"><code>generated/out_of_tree/machines/traveldroid/bluetooth.nix</code></a></li>
|
|
<li><a href="#org7db2fc6"><code>generated/out_of_tree/machines/traveldroid/audio.nix</code></a></li>
|
|
<li><a href="#orgbd67674"><code>generated/out_of_tree/machines/traveldroid/xdg.nix</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org80f16a7">Now we reach the top of the hierarchy which will call all other imports</a>
|
|
<ul>
|
|
<li><a href="#orgcc2cc1e"><code>generated/top.nix</code></a></li>
|
|
<li><a href="#orgb55bfc6"><code>generated/hyprland/hyprland.nix</code></a></li>
|
|
<li><a href="#orgfbcc563"><code>generated/hyprland/animations_effects/top.nix</code></a></li>
|
|
<li><a href="#orgda526c2"><code>generated/hyprland/decorations/top.nix</code></a></li>
|
|
<li><a href="#org9f5a9fd"><code>generated/hyprland/notifications/top.nix</code></a></li>
|
|
<li><a href="#org35bf019"><code>generated/hyprland/statusbar_tray/top.nix</code></a></li>
|
|
<li><a href="#org336c034"><code>generated/hyprland/task_window_workspace_switcher/top.nix</code></a></li>
|
|
<li><a href="#orga275bce"><code>generated/hyprland/window_rules/top.nix</code></a></li>
|
|
<li><a href="#org87a0a76"><code>generated/system/top.nix</code></a></li>
|
|
<li><a href="#org7bdc60a"><code>generated/system/applications/top.nix</code></a></li>
|
|
<li><a href="#orga3c3c39"><code>generated/system/applications/packages.nix</code></a></li>
|
|
<li><a href="#orga0e1f26"><code>generated/system/applications/flatpaks.nix</code></a></li>
|
|
<li><a href="#org9891c0c"><code>generated/system/core/top.nix</code></a></li>
|
|
<li><a href="#orgbaf0736"><code>generated/system/core/gtk.nix</code></a></li>
|
|
<li><a href="#org6eb4cc5"><code>generated/system/core/fonts.nix</code></a></li>
|
|
<li><a href="#orge8cdad0"><code>generated/system/core/eww.nix</code></a></li>
|
|
<li><a href="#orgfa37764"><code>generated/system/core/waybar.nix</code></a></li>
|
|
<li><a href="#org6e52a9f"><code>generated/system/core/login-tuigreeter.nix</code></a></li>
|
|
<li><a href="#orga9f4f98"><code>generated/system/core/wayland.nix</code></a></li>
|
|
<li><a href="#org8e70247"><code>generated/system/development/top.nix</code></a></li>
|
|
<li><a href="#orgb96bff3"><code>generated/system/system_management/top.nix</code></a></li>
|
|
<li><a href="#org2b40c03"><code>generated/system/applications/accessibility/top.nix</code></a></li>
|
|
<li><a href="#orgd1940a6"><code>generated/system/applications/file_management/top.nix</code></a></li>
|
|
<li><a href="#orgb6a5a1c"><code>generated/system/applications/file_management/thunar.nix</code></a></li>
|
|
<li><a href="#org1391025"><code>generated/system/applications/gaming/top.nix</code></a></li>
|
|
<li><a href="#org61385f5"><code>generated/system/applications/media_playback_editing/top.nix</code></a></li>
|
|
<li><a href="#org787bf92"><code>generated/system/applications/office_productivity/top.nix</code></a></li>
|
|
<li><a href="#org12012ec"><code>generated/system/applications/terminal_shell/top.nix</code></a></li>
|
|
<li><a href="#orgad16b5c"><code>generated/system/applications/terminal_shell/kitty.nix</code></a></li>
|
|
<li><a href="#org4ddfa4d"><code>generated/system/applications/terminal_shell/starship.nix</code></a></li>
|
|
<li><a href="#orgcaba937"><code>generated/system/applications/terminal_shell/zsh.nix</code></a></li>
|
|
<li><a href="#orga3c67b4"><code>generated/system/applications/terminal_shell/emacs.nix</code></a></li>
|
|
<li><a href="#org41d761b"><code>generated/system/applications/terminal_shell/early-init.el</code></a></li>
|
|
<li><a href="#orgd1a4a9f"><code>generated/system/applications/terminal_shell/init.el</code></a></li>
|
|
<li><a href="#org5d5d6e3"><code>generated/system/development/databases/top.nix</code></a></li>
|
|
<li><a href="#org2870763"><code>generated/system/development/devops_ci_cd/top.nix</code></a></li>
|
|
<li><a href="#org658f514"><code>generated/system/development/programming_languages/top.nix</code></a></li>
|
|
<li><a href="#orgc204e3e"><code>generated/system/development/virtualization/top.nix</code></a></li>
|
|
<li><a href="#org2941332"><code>generated/system/development/web_development/top.nix</code></a></li>
|
|
<li><a href="#org02c139f"><code>generated/system/system_management/audio/top.nix</code></a></li>
|
|
<li><a href="#orgd88f5cb"><code>generated/system/system_management/backups/top.nix</code></a></li>
|
|
<li><a href="#org38ac912"><code>generated/system/system_management/bluetooth/top.nix</code></a></li>
|
|
<li><a href="#orga177e3a"><code>generated/system/system_management/disk_management/top.nix</code></a></li>
|
|
<li><a href="#orgb04a9ab"><code>generated/system/system_management/hardware_sensors/top.nix</code></a></li>
|
|
<li><a href="#org43b7711"><code>generated/system/system_management/logging_monitoring/top.nix</code></a></li>
|
|
<li><a href="#orgbd1e416"><code>generated/system/system_management/login_manager/top.nix</code></a></li>
|
|
<li><a href="#org80f8421"><code>generated/system/system_management/monitor_setup/top.nix</code></a></li>
|
|
<li><a href="#org54f3a5d"><code>generated/system/system_management/networking/top.nix</code></a></li>
|
|
<li><a href="#orgea541e6"><code>generated/system/system_management/power_management/top.nix</code></a></li>
|
|
<li><a href="#orga931d23"><code>generated/system/system_management/printers_scanners/top.nix</code></a></li>
|
|
<li><a href="#org29c9b88"><code>generated/system/system_management/security/top.nix</code></a></li>
|
|
<li><a href="#orge9ab006"><code>generated/system/system_management/system_updates/top.nix</code></a></li>
|
|
<li><a href="#orgd6701a6"><code>generated/system/task_launcher/top.nix</code></a></li>
|
|
<li><a href="#org3538c1b"><code>generated/system/task_launcher/wofi.nix</code></a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org7bd663d" class="outline-2">
|
|
<h2 id="org7bd663d">Shortcuts</h2>
|
|
<div class="outline-text-2" id="text-org7bd663d">
|
|
<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>
|
|
—
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-introduction" class="outline-2">
|
|
<h2 id="introduction">Introduction   <span class="tag"><span class="intro">intro</span></span></h2>
|
|
<div class="outline-text-2" id="text-introduction">
|
|
</div>
|
|
<div id="outline-container-org1f23e3b" class="outline-3">
|
|
<h3 id="org1f23e3b">What is Droidnix</h3>
|
|
<div class="outline-text-3" id="text-org1f23e3b">
|
|
<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-org7f97cc8" class="outline-4">
|
|
<h4 id="org7f97cc8">Installed components:</h4>
|
|
<div class="outline-text-4" id="text-org7f97cc8">
|
|
</div>
|
|
<ul class="org-ul">
|
|
<li><a id="org6936b17"></a>Core<br /></li>
|
|
<li><a id="orgf92fb7b"></a>Hyprland<br /></li>
|
|
<li><a id="org68609df"></a>Mangowc<br /></li>
|
|
</ul>
|
|
</div>
|
|
<div id="outline-container-orgc261c07" class="outline-4">
|
|
<h4 id="orgc261c07">Goals, project Structure, import hierarchy</h4>
|
|
<div class="outline-text-4" id="text-orgc261c07">
|
|
<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-orgc1750a0" class="outline-2">
|
|
<h2 id="orgc1750a0">Root Level</h2>
|
|
<div class="outline-text-2" id="text-orgc1750a0">
|
|
<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>Machine-specific configurations from <code>assets/machines/</code></li>
|
|
</ul></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgbed1afd" class="outline-2">
|
|
<h2 id="orgbed1afd">Generated Structure</h2>
|
|
<div class="outline-text-2" id="text-orgbed1afd">
|
|
<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-orgabe8266" class="outline-3">
|
|
<h3 id="orgabe8266">System (<code>generated/system/</code>)</h3>
|
|
<div class="outline-text-3" id="text-orgabe8266">
|
|
<p>
|
|
This directory contains system-wide configurations that are independent of the window manager.
|
|
</p>
|
|
</div>
|
|
<div id="outline-container-orge703d51" class="outline-4">
|
|
<h4 id="orge703d51">Applications (<code>applications/</code>)</h4>
|
|
<div class="outline-text-4" id="text-orge703d51">
|
|
<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-orgc2cdf20" class="outline-4">
|
|
<h4 id="orgc2cdf20">Development (<code>development/</code>)</h4>
|
|
<div class="outline-text-4" id="text-orgc2cdf20">
|
|
<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-org10843d9" class="outline-4">
|
|
<h4 id="org10843d9">System Management (<code>system_management/</code>)</h4>
|
|
<div class="outline-text-4" id="text-org10843d9">
|
|
<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-orgf4f269a" class="outline-3">
|
|
<h3 id="orgf4f269a">Hyprland (<code>generated/hyprland/</code>)</h3>
|
|
<div class="outline-text-3" id="text-orgf4f269a">
|
|
<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>
|
|
|
|
<pre class="example" id="orgf7086c4">
|
|
<<TREE>>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgde1e2bf" class="outline-3">
|
|
<h3 id="orgde1e2bf">First Setup</h3>
|
|
<div class="outline-text-3" id="text-orgde1e2bf">
|
|
<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 && 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 .#<hostname></code>.</li>
|
|
</ol>
|
|
|
|
<p>
|
|
—
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-the-assets-folder" class="outline-2">
|
|
<h2 id="the-assets-folder">The Assets Folder   <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-orgb3b7557" class="outline-3">
|
|
<h3 id="orgb3b7557"><code>.assets/system/</code></h3>
|
|
<div class="outline-text-3" id="text-orgb3b7557">
|
|
<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-org39bf111" class="outline-3">
|
|
<h3 id="org39bf111"><code>.assets/hyprland/</code></h3>
|
|
<div class="outline-text-3" id="text-org39bf111">
|
|
<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-org43ae336" class="outline-3">
|
|
<h3 id="org43ae336"><code>.assets/mangowc/</code></h3>
|
|
<div class="outline-text-3" id="text-org43ae336">
|
|
<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-orgb56fdaf" class="outline-3">
|
|
<h3 id="orgb56fdaf"><code>.assets/machines/</code></h3>
|
|
<div class="outline-text-3" id="text-orgb56fdaf">
|
|
<p>
|
|
Machine-specific NixOS configurations (e.g., <code>configuration.nix</code> for <code>maindroid</code> and <code>traveldroid</code>).
|
|
</p>
|
|
|
|
<p>
|
|
—
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-the-actual-code" class="outline-2">
|
|
<h2 id="the-actual-code">The Actual Code   <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-org239893f" class="outline-3">
|
|
<h3 id="org239893f"><code>flake.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org239893f">
|
|
<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";
|
|
};
|
|
catppuccin = {
|
|
url = "github:catppuccin/nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
emacs-overlay = {
|
|
url = "github:nix-community/emacs-overlay";
|
|
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";
|
|
user = import ./generated/out_of_tree/users/henrov.nix;
|
|
machines = [
|
|
"traveldroid"
|
|
"maindroid"
|
|
];
|
|
flakeRoot = ./.; # Define flakeRoot here
|
|
in
|
|
{
|
|
nixosConfigurations = lib.genAttrs machines (
|
|
machine:
|
|
lib.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
# Import machine-specific configurations
|
|
./generated/out_of_tree/machines/traveldroid/top.nix
|
|
# Catppuccin theme module
|
|
catppuccin.nixosModules.catppuccin
|
|
# Anchoring all the other nixes
|
|
./generated/top.nix
|
|
# Home Manager module
|
|
inputs.home-manager.nixosModules.home-manager
|
|
{
|
|
home-manager.useGlobalPkgs = true;
|
|
home-manager.useUserPackages = true;
|
|
home-manager.extraSpecialArgs = { inherit user inputs flakeRoot; };
|
|
}
|
|
];
|
|
specialArgs = { inherit user inputs flakeRoot; };
|
|
}
|
|
);
|
|
|
|
homeConfigurations = lib.genAttrs (map (machine: "${user.username}@${machine}") machines) (
|
|
userMachine:
|
|
home-manager.lib.homeManagerConfiguration {
|
|
inherit system;
|
|
configuration = import ./user.nix { inherit inputs user flakeRoot; };
|
|
extraSpecialArgs = { inherit user inputs flakeRoot; };
|
|
}
|
|
);
|
|
|
|
devShells.${system}.default = import ./generated/out_of_tree/terminal_shell/devshell.nix {
|
|
inherit (nixpkgs.legacyPackages.${system}) mkShell;
|
|
};
|
|
};
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org4d37543" class="outline-2">
|
|
<h2 id="org4d37543">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-org4d37543">
|
|
</div>
|
|
<div id="outline-container-orgb882f07" class="outline-3">
|
|
<h3 id="orgb882f07"><code>generated/out_of_tree/users/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgb882f07">
|
|
<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 = [
|
|
./user.nix
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgdabdada" class="outline-3">
|
|
<h3 id="orgdabdada"><code>generated/out_of_tree/users/user.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgdabdada">
|
|
<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">{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
inputs,
|
|
...
|
|
}:
|
|
|
|
let
|
|
user = import ./henrov.nix;
|
|
in
|
|
{
|
|
home-manager.users.${user.username} = {
|
|
home.stateVersion = "25.11";
|
|
home.username = user.username;
|
|
home.homeDirectory = user.homeDirectory;
|
|
home.packages = with pkgs; [
|
|
direnv
|
|
git-extras
|
|
];
|
|
};
|
|
|
|
# Ensure the user is in the necessary groups
|
|
users.users.${config.users.users.${user.username}.username} = {
|
|
extraGroups = [ "networkmanager" ];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org98c7e73" class="outline-3">
|
|
<h3 id="org98c7e73"><code>generated/out_of_tree/users/henrov.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org98c7e73">
|
|
<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-org99d8047" class="outline-3">
|
|
<h3 id="org99d8047"><code>generated/out_of_tree/terminal_shell/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org99d8047">
|
|
<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">{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
user,
|
|
inputs,
|
|
flakeRoot,
|
|
...
|
|
}:
|
|
|
|
{
|
|
imports = [
|
|
./devshell.nix
|
|
inputs.home-manager.nixosModules.home-manager
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org2e0ffe5" class="outline-3">
|
|
<h3 id="org2e0ffe5"><code>generated/out_of_tree/terminal_shell/devshell.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org2e0ffe5">
|
|
<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 <nixpkgs> {}; [
|
|
nil
|
|
nixfmt-rfc-style
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org7db5292" class="outline-3">
|
|
<h3 id="org7db5292"><code>generated/out_of_tree/machines/traveldroid/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org7db5292">
|
|
<p>
|
|
This is the top of the machine hierarchy
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
user,
|
|
inputs,
|
|
flakeRoot,
|
|
...
|
|
}:
|
|
|
|
{
|
|
imports = [
|
|
./boot.nix
|
|
./hardware-configuration.nix
|
|
./machine.nix
|
|
./dbus.nix
|
|
./audio.nix
|
|
./xdg.nix
|
|
./session.nix
|
|
./networking.nix
|
|
inputs.home-manager.nixosModules.home-manager
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org654385a" class="outline-3">
|
|
<h3 id="org654385a"><code>generated/out_of_tree/machines/traveldroid/hardware-configuration.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org654385a">
|
|
<ol class="org-ol">
|
|
<li>Boot into NixOS Live ISO or your installed system.</li>
|
|
<li>Open a terminal.</li>
|
|
<li>Run: <code>sudo nixos-generate-config –root /mnt</code> (Omit –root /mnt if already running NixOS.)</li>
|
|
</ol>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{
|
|
hostname,
|
|
pkgs,
|
|
lib,
|
|
modulesPath,
|
|
user,
|
|
config,
|
|
...
|
|
}:
|
|
{
|
|
imports = [
|
|
# (modulesPath + "/installer/scan/not-detected.nix")
|
|
#../../hardware/hardware.nix
|
|
];
|
|
|
|
boot.initrd.availableKernelModules = [
|
|
"xhci_pci"
|
|
"nvme"
|
|
"usb_storage"
|
|
"sd_mod"
|
|
"rtsx_usb_sdmmc"
|
|
];
|
|
boot.initrd.kernelModules = [ ];
|
|
boot.kernelModules = [ "kvm-intel" ];
|
|
boot.extraModulePackages = [ ];
|
|
|
|
fileSystems."/" = {
|
|
device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2";
|
|
fsType = "ext4";
|
|
};
|
|
|
|
fileSystems."/boot" = {
|
|
device = "/dev/disk/by-uuid/811D-0676";
|
|
fsType = "vfat";
|
|
options = [
|
|
"fmask=0077"
|
|
"dmask=0077"
|
|
];
|
|
};
|
|
|
|
swapDevices = [
|
|
{ device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; }
|
|
];
|
|
|
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org956e278" class="outline-3">
|
|
<h3 id="org956e278"><code>generated/out_of_tree/machines/traveldroid/boot.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org956e278">
|
|
<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 id="outline-container-orgc3c1053" class="outline-3">
|
|
<h3 id="orgc3c1053"><code>generated/out_of_tree/machines/traveldroid/machine.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgc3c1053">
|
|
<p>
|
|
This is the top if the machine hierarchy
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
user,
|
|
inputs,
|
|
flakeRoot,
|
|
...
|
|
}:
|
|
|
|
{
|
|
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-orgaa94bd9" class="outline-3">
|
|
<h3 id="orgaa94bd9"><code>generated/out_of_tree/machines/traveldroid/dbus.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgaa94bd9">
|
|
<p>
|
|
This sets the dbus implementation
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, lib, ... }:
|
|
{
|
|
services.dbus = lib.mkForce {
|
|
enable = true; # Force this to be true
|
|
};
|
|
|
|
# Configure dbus-broker via its configuration file
|
|
environment.etc."dbus-broker/launch.conf".text = ''
|
|
[General]
|
|
LogLevel=warning
|
|
MaxConnectionsPerUser=2048
|
|
'';
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgf715170" class="outline-3">
|
|
<h3 id="orgf715170"><code>generated/out_of_tree/machines/traveldroid/networking.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgf715170">
|
|
<p>
|
|
This sets the networking.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
|
|
{
|
|
networking = {
|
|
useDHCP = lib.mkDefault true;
|
|
networkmanager.enable = true;
|
|
networkmanager.wifi.backend = "iwd";
|
|
wireless.iwd.enable = true;
|
|
wireless.userControlled.enable = true;
|
|
firewall = {
|
|
enable = true;
|
|
# KDE Connect: discovery + encrypted connections
|
|
allowedTCPPortRanges = [
|
|
{
|
|
from = 1714;
|
|
to = 1764;
|
|
}
|
|
];
|
|
allowedUDPPortRanges = [
|
|
{
|
|
from = 1714;
|
|
to = 1764;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
# Install NetworkManager and wofi
|
|
environment.systemPackages = with pkgs; [
|
|
networkmanager
|
|
wofi
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org325e696" class="outline-3">
|
|
<h3 id="org325e696"><code>generated/out_of_tree/machines/traveldroid/session.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org325e696">
|
|
<p>
|
|
This sets the session variables
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, user, ... }:
|
|
{
|
|
environment.sessionVariables = {
|
|
XDG_SESSION_TYPE = "wayland";
|
|
XDG_CURRENT_DESKTOP = "Hyprland";
|
|
XCURSOR_SIZE = "24";
|
|
GTK_ENABLE_DARK_MODE = "1";
|
|
GTK_THEME = "Catppuccin-Mocha-Standard-Blue-Dark";
|
|
GTK_ICON_THEME = "Papirus-Dark";
|
|
# Use this instead of GTK_APPLICATION_PREFER_DARK_THEME for newer GTK apps:
|
|
GTK_THEME_VARIANT = "dark";
|
|
# For Qt apps (if any):
|
|
QT_STYLE_OVERRIDE = "gtk2";
|
|
# For Zen Browser (Firefox fork):
|
|
MOZ_ENABLE_WAYLAND = "1";
|
|
GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/glib-2.0/schemas";
|
|
};
|
|
|
|
# Add other session-wide variables here (e.g., QT_QPA_PLATFORM, SDL_VIDEODRIVER)
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orga13c9d7" class="outline-3">
|
|
<h3 id="orga13c9d7"><code>generated/out_of_tree/machines/traveldroid/bluetooth.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga13c9d7">
|
|
<p>
|
|
This sets the bluetooth implementation
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, ... }:
|
|
{
|
|
# Enable Bluetooth hardware and daemon
|
|
hardware.bluetooth = {
|
|
enable = true;
|
|
powerOnBoot = true;
|
|
packages = with pkgs; [ bluez ];
|
|
};
|
|
|
|
# Enable Bluetooth audio support in PipeWire
|
|
services.pipewire = {
|
|
config.pulse = {
|
|
bluez5.enable = true;
|
|
};
|
|
};
|
|
|
|
# Optional: Additional Bluetooth settings
|
|
hardware.bluetooth.extraConfig = ''
|
|
AutoEnable=true
|
|
DiscoverableTimeout=0
|
|
PairableTimeout=0
|
|
'';
|
|
|
|
# Install a graphical Bluetooth manager (optional)
|
|
environment.systemPackages = with pkgs; [
|
|
blueman
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org7db2fc6" class="outline-3">
|
|
<h3 id="org7db2fc6"><code>generated/out_of_tree/machines/traveldroid/audio.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org7db2fc6">
|
|
<p>
|
|
This sets audiosystem for this machine
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, ... }:
|
|
{
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = true; # ALSA compatibility
|
|
pulse.enable = true; # PulseAudio compatibility
|
|
wireplumber.enable = true; # Session manager for PipeWire
|
|
};
|
|
|
|
# Realtime privileges for pro audio (optional)
|
|
security.rtkit.enable = true;
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgbd67674" class="outline-3">
|
|
<h3 id="orgbd67674"><code>generated/out_of_tree/machines/traveldroid/xdg.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgbd67674">
|
|
<p>
|
|
This sets the XDG implementation
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, ... }:
|
|
{
|
|
xdg.portal = {
|
|
enable = true;
|
|
config.system.default = [ "hyprland" "gtk" ];
|
|
};
|
|
}
|
|
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org80f16a7" class="outline-2">
|
|
<h2 id="org80f16a7">Now we reach the top of the hierarchy which will call all other imports</h2>
|
|
<div class="outline-text-2" id="text-org80f16a7">
|
|
</div>
|
|
<div id="outline-container-orgcc2cc1e" class="outline-3">
|
|
<h3 id="orgcc2cc1e"><code>generated/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgcc2cc1e">
|
|
<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>
|
|
|
|
|
|
<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
|
|
./notifications/top.nix
|
|
./statusbar_tray/top.nix
|
|
./task_window_workspace_switcher/top.nix
|
|
./window_rules/top.nix
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgb55bfc6" class="outline-3">
|
|
<h3 id="orgb55bfc6"><code>generated/hyprland/hyprland.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgb55bfc6">
|
|
<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
|
|
hyprlandFiles = builtins.attrNames (builtins.readDir "${flakeRoot}/assets/hyprland/conf/hypr");
|
|
# Filter out hyprland.conf from the list of files to symlink
|
|
otherHyprlandFiles = lib.filter (name: name != "hyprland.conf") hyprlandFiles;
|
|
# Generate xdg.configFile entries for all files except hyprland.conf
|
|
otherConfigs = lib.genAttrs otherHyprlandFiles (name: {
|
|
target = "hypr/${name}";
|
|
source = "${flakeRoot}/assets/hyprland/conf/hypr/${name}";
|
|
});
|
|
in
|
|
{
|
|
programs.hyprland = {
|
|
enable = true;
|
|
};
|
|
|
|
home-manager.users.${user.username} = {
|
|
home.stateVersion = "25.11";
|
|
home.username = user.username;
|
|
home.homeDirectory =
|
|
config.home-manager.users.${user.username}.homeDirectory or "/home/${user.username}";
|
|
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
};
|
|
|
|
# Merge all xdg.configFile definitions
|
|
xdg.configFile = otherConfigs // {
|
|
"hypr/hyprland.conf".text = ''
|
|
${builtins.readFile "${flakeRoot}/assets/hyprland/conf/hypr/hyprland.conf"}
|
|
# Your manual settings will go below this line and will not be overwritten
|
|
'';
|
|
"hypr/.keep".text = "";
|
|
};
|
|
};
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgfbcc563" class="outline-3">
|
|
<h3 id="orgfbcc563"><code>generated/hyprland/animations_effects/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgfbcc563">
|
|
<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-orgda526c2" class="outline-3">
|
|
<h3 id="orgda526c2"><code>generated/hyprland/decorations/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgda526c2">
|
|
<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-org9f5a9fd" class="outline-3">
|
|
<h3 id="org9f5a9fd"><code>generated/hyprland/notifications/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org9f5a9fd">
|
|
<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-org35bf019" class="outline-3">
|
|
<h3 id="org35bf019"><code>generated/hyprland/statusbar_tray/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org35bf019">
|
|
<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-org336c034" class="outline-3">
|
|
<h3 id="org336c034"><code>generated/hyprland/task_window_workspace_switcher/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org336c034">
|
|
<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-orga275bce" class="outline-3">
|
|
<h3 id="orga275bce"><code>generated/hyprland/window_rules/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga275bce">
|
|
<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-org87a0a76" class="outline-3">
|
|
<h3 id="org87a0a76"><code>generated/system/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org87a0a76">
|
|
<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-org7bdc60a" class="outline-3">
|
|
<h3 id="org7bdc60a"><code>generated/system/applications/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org7bdc60a">
|
|
<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-orga3c3c39" class="outline-3">
|
|
<h3 id="orga3c3c39"><code>generated/system/applications/packages.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga3c3c39">
|
|
<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 > 1 &&
|
|
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-orga0e1f26" class="outline-3">
|
|
<h3 id="orga0e1f26"><code>generated/system/applications/flatpaks.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga0e1f26">
|
|
<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 > 1 && 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) >= 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" >/dev/null 2>&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-org9891c0c" class="outline-3">
|
|
<h3 id="org9891c0c"><code>generated/system/core/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org9891c0c">
|
|
<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
|
|
./fonts.nix
|
|
./gtk.nix
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgbaf0736" class="outline-3">
|
|
<h3 id="orgbaf0736"><code>generated/system/core/gtk.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgbaf0736">
|
|
<p>
|
|
I use the <a href="https://catppuccin.com/">Catppuccin</a> almost everywhere. The nix module integrates almost automatically everywhere (except gtk).
|
|
You'll notice the color values in multiple places outside this as well.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ pkgs, user, ... }:
|
|
{
|
|
home-manager.users.${user.username} = {
|
|
gtk = {
|
|
enable = true;
|
|
theme = {
|
|
name = "Catppuccin-Mocha-Standard-Blue-Dark";
|
|
package = pkgs.magnetic-catppuccin-gtk;
|
|
};
|
|
iconTheme = {
|
|
name = "Papirus-Dark";
|
|
package = pkgs.papirus-icon-theme;
|
|
};
|
|
gtk3.extraConfig = {
|
|
gtk-application-prefer-dark-theme = 1;
|
|
};
|
|
gtk4.extraConfig = {
|
|
gtk-application-prefer-dark-theme = 1;
|
|
};
|
|
};
|
|
|
|
};
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org6eb4cc5" class="outline-3">
|
|
<h3 id="org6eb4cc5"><code>generated/system/core/fonts.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org6eb4cc5">
|
|
<p>
|
|
This file installs and configures fonts
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, ... }:
|
|
{
|
|
fonts.packages = with pkgs; [
|
|
pkgs.nerd-fonts.iosevka
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orge8cdad0" class="outline-3">
|
|
<h3 id="orge8cdad0"><code>generated/system/core/eww.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orge8cdad0">
|
|
<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
|
|
};
|
|
};
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgfa37764" class="outline-3">
|
|
<h3 id="orgfa37764"><code>generated/system/core/waybar.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgfa37764">
|
|
<p>
|
|
This file installs and configures waybar
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ lib, pkgs, config, flakeRoot, ... }:
|
|
let
|
|
username = "henrov"; # Replace with your actual username
|
|
waybar-config = pkgs.writeText "waybar-config" (builtins.readFile (flakeRoot + "/assets/system/conf/waybar/config"));
|
|
waybar-style = pkgs.writeText "waybar-style" (builtins.readFile (flakeRoot + "/assets/system/conf/waybar/style.css"));
|
|
in
|
|
{
|
|
programs.waybar = {
|
|
enable = true;
|
|
package = pkgs.waybar;
|
|
};
|
|
|
|
systemd.user.services.waybar = {
|
|
description = "Waybar (status bar for Wayland)";
|
|
wantedBy = [ "graphical-session.target" ];
|
|
after = [ "graphical-session.target" ];
|
|
serviceConfig = {
|
|
ExecStart = "${config.programs.waybar.package}/bin/waybar -c ${waybar-config} -s ${waybar-style}";
|
|
Restart = "on-failure";
|
|
RestartSec = "5s";
|
|
};
|
|
};
|
|
|
|
# Create symlinks for config and style
|
|
system.activationScripts.waybarSetup = lib.mkAfter ''
|
|
mkdir -p /home/${username}/.config/waybar
|
|
ln -sf ${waybar-config} /home/${username}/.config/waybar/config
|
|
ln -sf ${waybar-style} /home/${username}/.config/waybar/style.css
|
|
chown -R ${username}:users /home/${username}/.config/waybar
|
|
'';
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org6e52a9f" class="outline-3">
|
|
<h3 id="org6e52a9f"><code>generated/system/core/login-tuigreeter.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org6e52a9f">
|
|
<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-orga9f4f98" class="outline-3">
|
|
<h3 id="orga9f4f98"><code>generated/system/core/wayland.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga9f4f98">
|
|
<p>
|
|
This file sets up wayland
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ config, pkgs, lib, user, ... }:
|
|
{
|
|
home-manager.users.${user.username} = {
|
|
xdg.portal = {
|
|
enable = true;
|
|
extraPortals = with pkgs; [ xdg-desktop-portal-hyprland ];
|
|
config.hyprland = {
|
|
"org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
|
|
};
|
|
};
|
|
|
|
home.packages = with pkgs; [
|
|
uwsm
|
|
];
|
|
};
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org8e70247" class="outline-3">
|
|
<h3 id="org8e70247"><code>generated/system/development/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org8e70247">
|
|
<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-orgb96bff3" class="outline-3">
|
|
<h3 id="orgb96bff3"><code>generated/system/system_management/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgb96bff3">
|
|
<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-org2b40c03" class="outline-3">
|
|
<h3 id="org2b40c03"><code>generated/system/applications/accessibility/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org2b40c03">
|
|
<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-orgd1940a6" class="outline-3">
|
|
<h3 id="orgd1940a6"><code>generated/system/applications/file_management/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgd1940a6">
|
|
<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 = [
|
|
./thunar.nix
|
|
];
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgb6a5a1c" class="outline-3">
|
|
<h3 id="orgb6a5a1c"><code>generated/system/applications/file_management/thunar.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgb6a5a1c">
|
|
<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,
|
|
...
|
|
}:
|
|
|
|
let
|
|
username = "henrov"; # vervang door je echte gebruikersnaam
|
|
in
|
|
{
|
|
home-manager.users.${username} = {
|
|
|
|
# Thunar and plugins
|
|
home.packages = with pkgs; [
|
|
thunar
|
|
thunar-volman
|
|
thunar-archive-plugin
|
|
thunar-media-tags-plugin
|
|
tumbler
|
|
ffmpegthumbnailer
|
|
gvfs
|
|
xdg-utils
|
|
];
|
|
|
|
# Default file manager
|
|
xdg.mimeApps = {
|
|
defaultApplications = {
|
|
"inode/directory" = "Thunar.desktop";
|
|
};
|
|
};
|
|
};
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org1391025" class="outline-3">
|
|
<h3 id="org1391025"><code>generated/system/applications/gaming/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org1391025">
|
|
<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-org61385f5" class="outline-3">
|
|
<h3 id="org61385f5"><code>generated/system/applications/media_playback_editing/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org61385f5">
|
|
<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-org787bf92" class="outline-3">
|
|
<h3 id="org787bf92"><code>generated/system/applications/office_productivity/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org787bf92">
|
|
<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-org12012ec" class="outline-3">
|
|
<h3 id="org12012ec"><code>generated/system/applications/terminal_shell/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org12012ec">
|
|
<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
|
|
./emacs.nix
|
|
];
|
|
# .. put any code here
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgad16b5c" class="outline-3">
|
|
<h3 id="orgad16b5c"><code>generated/system/applications/terminal_shell/kitty.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgad16b5c">
|
|
<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-org4ddfa4d" class="outline-3">
|
|
<h3 id="org4ddfa4d"><code>generated/system/applications/terminal_shell/starship.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org4ddfa4d">
|
|
<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-orgcaba937" class="outline-3">
|
|
<h3 id="orgcaba937"><code>generated/system/applications/terminal_shell/zsh.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgcaba937">
|
|
<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-orga3c67b4" class="outline-3">
|
|
<h3 id="orga3c67b4"><code>generated/system/applications/terminal_shell/emacs.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga3c67b4">
|
|
<p>
|
|
This sets up the emacs terminal
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">{ pkgs, ... }:
|
|
|
|
{
|
|
# NixOS Configuration
|
|
environment.systemPackages = with pkgs; [
|
|
# Add system-wide packages here, if any
|
|
];
|
|
|
|
# Home Manager Configuration for the user 'henrov'
|
|
home-manager.users.henrov = {
|
|
programs.emacs = {
|
|
enable = true;
|
|
package = pkgs.emacs-pgtk.override { withTreeSitter = true; };
|
|
|
|
# Group related packages for clarity and easier maintenance
|
|
extraPackages = epkgs: with epkgs; [
|
|
# Tree-sitter and language support
|
|
manualPackages.treesit-grammars.with-all-grammars
|
|
rust-mode
|
|
rustic
|
|
nix-mode
|
|
hcl-mode
|
|
|
|
# UI/UX and navigation
|
|
nerd-icons
|
|
doom-modeline
|
|
diminish
|
|
eldoc
|
|
eldoc-box
|
|
pulsar
|
|
which-key
|
|
avy
|
|
consult
|
|
vertico
|
|
marginalia
|
|
crux
|
|
shell-pop
|
|
|
|
# Completion and snippets
|
|
nerd-icons-corfu
|
|
corfu
|
|
cape
|
|
orderless
|
|
yasnippet
|
|
yasnippet-snippets
|
|
|
|
# Utilities and tools
|
|
rg
|
|
exec-path-from-shell
|
|
eat
|
|
f
|
|
gptel
|
|
nixpkgs-fmt
|
|
envrc
|
|
|
|
# Theming
|
|
catppuccin-theme
|
|
|
|
# Git
|
|
magit
|
|
|
|
# Editing and workflow
|
|
expreg
|
|
vundo
|
|
puni
|
|
|
|
# Error and side panel support
|
|
sideline
|
|
sideline-flymake
|
|
sideline-eglot
|
|
];
|
|
};
|
|
|
|
# Home Manager session variables
|
|
home.sessionVariables = {
|
|
EDITOR = "emacs";
|
|
XDG_SCREENSHOTS_DIR = "~/screenshots";
|
|
};
|
|
/*
|
|
# Home Manager file management
|
|
home.file = {
|
|
"emacs/early-init.el" = {
|
|
source = ./early-init.el;
|
|
target = ".emacs.d/early-init.el";
|
|
};
|
|
"emacs/init.el" = {
|
|
source = ./init.el;
|
|
target = ".emacs.d/init.el";
|
|
};
|
|
};
|
|
*/
|
|
};
|
|
}
|
|
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org41d761b" class="outline-3">
|
|
<h3 id="org41d761b"><code>generated/system/applications/terminal_shell/early-init.el</code></h3>
|
|
<div class="outline-text-3" id="text-org41d761b">
|
|
<p>
|
|
This helps set up the emacs terminal
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">;;; package --- early init -*- lexical-binding: t -*-
|
|
;;; Commentary:
|
|
;;; Prevents white flash and better Emacs defaults
|
|
;;; Code:
|
|
(set-language-environment "UTF-8")
|
|
(setq-default
|
|
default-frame-alist
|
|
'((background-color . "#1e1e2e")
|
|
(bottom-divider-width . 1) ; Thin horizontal window divider
|
|
(foreground-color . "#bac2de") ; Default foreground color
|
|
(fullscreen . maximized) ; Maximize the window by default
|
|
(horizontal-scroll-bars . nil) ; No horizontal scroll-bars
|
|
(left-fringe . 8) ; Thin left fringe
|
|
(menu-bar-lines . 0) ; No menu bar
|
|
(right-divider-width . 1) ; Thin vertical window divider
|
|
(right-fringe . 8) ; Thin right fringe
|
|
(tool-bar-lines . 0) ; No tool bar
|
|
(undecorated . t) ; Remove extraneous X decorations
|
|
(vertical-scroll-bars . nil)) ; No vertical scroll-bars
|
|
user-full-name "Henrov henrov" ; ME!
|
|
;; memory configuration
|
|
;; Higher garbage collection threshold, prevents frequent gc locks, reset later
|
|
gc-cons-threshold most-positive-fixnum
|
|
;; Ignore warnings for (obsolete) elisp compilations
|
|
byte-compile-warnings '(not obsolete)
|
|
;; And other log types completely
|
|
warning-suppress-log-types '((comp) (bytecomp))
|
|
;; Large files are okay in the new millenium.
|
|
large-file-warning-threshold 100000000
|
|
;; dont show garbage collection messages at startup, will reset later
|
|
garbage-collection-messages nil
|
|
;; native compilation
|
|
package-native-compile t
|
|
native-comp-warning-on-missing-source nil
|
|
native-comp-async-report-warnings-errors 'silent
|
|
;; Read more based on system pipe capacity
|
|
read-process-output-max (max (* 10240 10240) read-process-output-max)
|
|
;; scroll configuration
|
|
scroll-margin 0 ; Lets scroll to the end of the margin
|
|
scroll-conservatively 100000 ; Never recenter the window
|
|
scroll-preserve-screen-position 1 ; Scrolling back and forth
|
|
;; frame config
|
|
;; Improve emacs startup time by not resizing to adjust for custom settings
|
|
frame-inhibit-implied-resize t
|
|
;; Dont resize based on character height / width but to exact pixels
|
|
frame-resize-pixelwise t
|
|
;; backups & files
|
|
backup-directory-alist '(("." . "~/.backups/")) ; Don't clutter
|
|
backup-by-copying t ; Don't clobber symlinks
|
|
create-lockfiles nil ; Don't have temp files
|
|
delete-old-versions t ; Cleanup automatically
|
|
kept-new-versions 6 ; Update every few times
|
|
kept-old-versions 2 ; And cleanup even more
|
|
version-control t ; Version them backups
|
|
delete-by-moving-to-trash t ; Dont delete, send to trash instead
|
|
;; startup
|
|
inhibit-startup-screen t ; I have already done the tutorial. Twice
|
|
inhibit-startup-message t ; I know I am ready
|
|
inhibit-startup-echo-area-message t ; Yep, still know it
|
|
initial-scratch-message nil ; I know it is the scratch buffer!
|
|
initial-buffer-choice nil
|
|
inhibit-startup-buffer-menu t
|
|
inhibit-x-resources t
|
|
initial-major-mode 'fundamental-mode
|
|
pgtk-wait-for-event-timeout 0.001 ; faster child frames
|
|
ad-redefinition-action 'accept ; dont care about legacy things being redefined
|
|
inhibit-compacting-font-caches t
|
|
;; tabs
|
|
tab-width 4 ; Always tab 4 spaces.
|
|
indent-tabs-mode nil ; Never use actual tabs.
|
|
;; rendering
|
|
cursor-in-non-selected-windows nil ; dont render cursors other windows
|
|
;; packages
|
|
use-package-always-defer t
|
|
load-prefer-newer t
|
|
default-input-method nil
|
|
use-dialog-box nil
|
|
use-file-dialog nil
|
|
use-package-expand-minimally t
|
|
package-enable-at-startup nil
|
|
use-package-enable-imenu-support t
|
|
auto-mode-case-fold nil ; No second pass of case-insensitive search over auto-mode-alist.
|
|
package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
("gnu" . "https://elpa.gnu.org/packages/")
|
|
("nongnu" . "https://elpa.nongnu.org/nongnu/")
|
|
("melpa-stable" . "https://stable.melpa.org/packages/"))
|
|
package-archive-priorities '(("gnu" . 99)
|
|
("nongnu" . 80)
|
|
("melpa" . 70)
|
|
("melpa-stable" . 50))
|
|
)
|
|
;;; early-init.el ends here
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-orgd1a4a9f" class="outline-3">
|
|
<h3 id="orgd1a4a9f"><code>generated/system/applications/terminal_shell/init.el</code></h3>
|
|
<div class="outline-text-3" id="text-orgd1a4a9f">
|
|
<p>
|
|
This helps set up the emacs terminal
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-nix">;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
|
|
|
|
;;; Commentary:
|
|
;;; Simple Emacs setup I carry everywhere
|
|
|
|
;;; Code:
|
|
(setq custom-file (locate-user-emacs-file "custom.el"))
|
|
(load custom-file 'noerror) ;; no error on missing custom file
|
|
|
|
(require 'package)
|
|
(package-initialize)
|
|
|
|
(defun reset-custom-vars ()
|
|
"Resets the custom variables that were set to crazy numbers"
|
|
(setopt gc-cons-threshold (* 1024 1024 100))
|
|
(setopt garbage-collection-messages t))
|
|
|
|
(use-package emacs
|
|
:custom
|
|
(native-comp-async-query-on-exit t)
|
|
(read-answer-short t)
|
|
(use-short-answers t)
|
|
(enable-recursive-minibuffers t)
|
|
(which-func-update-delay 1.0)
|
|
(visible-bell nil)
|
|
(custom-buffer-done-kill t)
|
|
(whitespace-line-column nil)
|
|
(x-underline-at-descent-line t)
|
|
(imenu-auto-rescan t)
|
|
(uniquify-buffer-name-style 'forward)
|
|
(confirm-nonexistent-file-or-buffer nil)
|
|
(create-lockfiles nil)
|
|
(make-backup-files nil)
|
|
(kill-do-not-save-duplicates t)
|
|
(sentence-end-double-space nil)
|
|
(treesit-enabled-modes t)
|
|
:init
|
|
;; base visual
|
|
(menu-bar-mode -1) ;; no menu bar
|
|
(toggle-scroll-bar -1) ;; no scroll bar
|
|
(tool-bar-mode -1) ;; no tool bar either
|
|
(blink-cursor-mode -1) ;; stop blinking
|
|
|
|
;; font of the century
|
|
(set-frame-font "Aporetic Sans Mono 12" nil t)
|
|
|
|
:bind
|
|
(("C-<wheel-up>" . pixel-scroll-precision) ; dont zoom in please, just scroll
|
|
("C-<wheel-down>" . pixel-scroll-precision) ; dont zoom in either, just scroll
|
|
("C-x k" . kill-current-buffer)) ; kill the buffer, dont ask
|
|
:hook
|
|
(text-mode . delete-trailing-whitespace-mode)
|
|
(prog-mode . delete-trailing-whitespace-mode)
|
|
(after-init . global-display-line-numbers-mode) ;; always show line numbers
|
|
(after-init . column-number-mode) ;; column number in the mode line
|
|
(after-init . size-indication-mode) ;; file size in the mode line
|
|
(after-init . pixel-scroll-precision-mode) ;; smooth mouse scroll
|
|
(after-init . electric-pair-mode) ;; i mean ... parens should auto create
|
|
(after-init . reset-custom-vars)
|
|
)
|
|
|
|
(use-package autorevert
|
|
:ensure nil
|
|
:custom
|
|
(auto-revert-interval 3)
|
|
(auto-revert-remote-files nil)
|
|
(auto-revert-use-notify t)
|
|
(auto-revert-avoid-polling nil)
|
|
(auto-revert-verbose t)
|
|
:hook
|
|
(after-init . global-auto-revert-mode))
|
|
|
|
(use-package recentf
|
|
:ensure nil
|
|
:commands (recentf-mode recentf-cleanup)
|
|
:hook
|
|
(after-init . recentf-mode)
|
|
:custom
|
|
(recentf-auto-cleanup 'never)
|
|
(recentf-exclude
|
|
(list "\\.tar$" "\\.tbz2$" "\\.tbz$" "\\.tgz$" "\\.bz2$"
|
|
"\\.bz$" "\\.gz$" "\\.gzip$" "\\.xz$" "\\.zip$"
|
|
"\\.7z$" "\\.rar$"
|
|
"COMMIT_EDITMSG\\'"
|
|
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
|
"-autoloads\\.el$" "autoload\\.el$"))
|
|
|
|
:config
|
|
;; A cleanup depth of -90 ensures that `recentf-cleanup' runs before
|
|
;; `recentf-save-list', allowing stale entries to be removed before the list
|
|
;; is saved by `recentf-save-list', which is automatically added to
|
|
;; `kill-emacs-hook' by `recentf-mode'.
|
|
(add-hook 'kill-emacs-hook #'recentf-cleanup -90))
|
|
|
|
(use-package savehist
|
|
:ensure nil
|
|
:commands (savehist-mode savehist-save)
|
|
:hook
|
|
(after-init . savehist-mode)
|
|
:custom
|
|
(savehist-autosave-interval 600)
|
|
(savehist-additional-variables
|
|
'(kill-ring ; clipboard
|
|
register-alist ; macros
|
|
mark-ring global-mark-ring ; marks
|
|
search-ring regexp-search-ring)))
|
|
|
|
(use-package hl-line
|
|
:ensure nil
|
|
:custom
|
|
(hl-line-sticky-flag nil)
|
|
(global-hl-line-sticky-flag nil)
|
|
:hook
|
|
(after-init . global-hl-line-mode))
|
|
|
|
(use-package saveplace
|
|
:ensure nil
|
|
:commands (save-place-mode save-place-local-mode)
|
|
:hook
|
|
(after-init . save-place-mode)
|
|
:custom
|
|
(save-place-limit 400))
|
|
|
|
(use-package nerd-icons
|
|
:custom
|
|
;; disable bright icon colors
|
|
(nerd-icons-color-icons nil))hells.nix
|
|
|
|
(use-package doom-modeline
|
|
:custom
|
|
(inhibit-compacting-font-caches t) ;; speed
|
|
(doom-modeline-buffer-file-name-style 'relative-from-project)
|
|
(doom-modeline-major-mode-icon nil) ;; distracting icons, no thank you
|
|
(doom-modeline-buffer-encoding nil) ;; everything is utf-8 anyway
|
|
(doom-modeline-buffer-state-icon nil) ;; the filename already shows me
|
|
(doom-modeline-lsp nil) ;; lsp state is too distracting, too often
|
|
:hook (after-init . doom-modeline-mode))
|
|
|
|
(load-theme 'catppuccin :no-confirm)
|
|
|
|
(use-package diminish :demand t) ;; declutter the modeline
|
|
(use-package eldoc
|
|
:diminish eldoc-mode
|
|
:custom
|
|
(eldoc-echo-area-use-multiline-p nil)) ;; docs for everything
|
|
|
|
(use-package eldoc-box
|
|
:defer t
|
|
:config
|
|
(set-face-background 'eldoc-box-border (catppuccin-color 'green))
|
|
(set-face-background 'eldoc-box-body (catppuccin-color 'base))
|
|
:bind
|
|
(("M-h" . eldoc-box-help-at-point)))
|
|
|
|
(use-package pulsar
|
|
:commands pulsar-global-mode pulsar-recenter-top pulsar-reveal-entry
|
|
:init
|
|
(defface pulsar-catppuccin
|
|
`((default :extend t)
|
|
(((class color) (min-colors 88) (background light))
|
|
:background ,(catppuccin-color 'sapphire))
|
|
(((class color) (min-colors 88) (background dark))
|
|
:background ,(catppuccin-color 'sapphire))
|
|
(t :inverse-video t))
|
|
"Alternative nord face for `pulsar-face'."
|
|
:group 'pulsar-faces)
|
|
:custom
|
|
(pulsar-face 'pulsar-catppuccin)
|
|
:hook
|
|
(after-init . pulsar-global-mode))
|
|
|
|
(use-package which-key
|
|
:commands which-key-mode
|
|
:diminish which-key-mode
|
|
:hook
|
|
(after-init . which-key-mode))
|
|
|
|
(use-package expreg
|
|
:bind ("M-m" . expreg-expand))
|
|
|
|
(use-package vundo) ;; undo tree
|
|
|
|
;; better structured editing
|
|
(use-package puni
|
|
:commands puni-global-mode
|
|
:hook
|
|
(after-init . puni-global-mode))
|
|
|
|
(use-package avy
|
|
:bind
|
|
("M-i" . avy-goto-char-2)
|
|
:custom
|
|
(avy-background t))
|
|
|
|
(use-package consult
|
|
:bind
|
|
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
|
|
("M-y" . consult-yank-pop) ;; orig. yank-pop
|
|
("M-g M-g" . consult-goto-line) ;; orig. goto-line
|
|
("M-g i" . consult-imenu) ;; consult version is interactive
|
|
("M-g r" . consult-ripgrep) ;; find in project also works
|
|
:custom
|
|
(consult-narrow-key "<"))
|
|
|
|
(use-package vertico
|
|
:commands vertico-mode
|
|
:custom
|
|
(read-file-name-completion-ignore-case t)
|
|
(read-buffer-completion-ignore-case t)
|
|
(completion-ignore-case t)
|
|
(enable-recursive-minibuffers t)
|
|
(minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))
|
|
:init
|
|
(vertico-mode)
|
|
:hook
|
|
(minibuffer-setup-hook . cursor-intangible-mode))
|
|
|
|
(use-package marginalia
|
|
:commands marginalia-mode
|
|
:hook (after-init . marginalia-mode))
|
|
|
|
(use-package crux
|
|
:bind
|
|
("C-c M-e" . crux-find-user-init-file)
|
|
("C-c C-w" . crux-transpose-windows)
|
|
("C-c M-d" . crux-find-current-directory-dir-locals-file)
|
|
("C-a" . crux-move-beginning-of-line))
|
|
|
|
(use-package magit
|
|
:bind (("C-M-g" . magit-status)))
|
|
|
|
(use-package nerd-icons-corfu
|
|
:commands nerd-icons-corfu-formatter
|
|
:defines corfu-margin-formatters)
|
|
|
|
(use-package corfu
|
|
:commands global-corfu-mode
|
|
:custom
|
|
(corfu-cycle t)
|
|
(corfu-auto t)
|
|
(corfu-auto-delay 1)
|
|
(corfu-auto-prefix 3)
|
|
(corfu-separator ?_)
|
|
:hook
|
|
(after-init . global-corfu-mode)
|
|
:config
|
|
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
|
|
|
(use-package cape)
|
|
|
|
(use-package orderless
|
|
:custom
|
|
(completion-styles '(orderless partial-completion basic))
|
|
(completion-category-defaults nil)
|
|
(completion-category-overrides nil))
|
|
|
|
(use-package yasnippet
|
|
:commands yas-global-mode
|
|
:diminish yas-minor-mode
|
|
:hook
|
|
(after-init . yas-global-mode))
|
|
|
|
(use-package yasnippet-snippets :after yasnippet)
|
|
|
|
(use-package exec-path-from-shell
|
|
:commands exec-path-from-shell-initialize
|
|
:custom
|
|
(exec-path-from-shell-arguments nil)
|
|
:hook
|
|
(after-init . exec-path-from-shell-initialize))
|
|
|
|
(use-package nixpkgs-fmt
|
|
:custom
|
|
(nixpkgs-fmt-command "nixfmt"))
|
|
|
|
(use-package eat
|
|
:bind
|
|
(("C-c e p" . eat-project)
|
|
("C-c e t" . eat)))
|
|
|
|
(use-package f :demand t)
|
|
|
|
(use-package envrc
|
|
:commands envrc-global-mode
|
|
:hook
|
|
(after-init . envrc-global-mode))
|
|
|
|
(use-package gptel
|
|
:commands gptel-make-anthropic f-read-text
|
|
:config
|
|
(gptel-make-anthropic "Claude"
|
|
:stream t :key (f-read-text "/run/secrets/claude_key")))
|
|
|
|
(use-package sideline-flymake)
|
|
(use-package sideline-eglot)
|
|
(use-package sideline
|
|
:custom
|
|
(sideline-backends-right '(sideline-flymake sideline-eglot))
|
|
:hook
|
|
(eglot-managed-mode . sideline-mode)
|
|
(flymake-mode . sideline-mode))
|
|
|
|
(use-package eglot
|
|
:custom
|
|
(eglot-extend-to-xref t)
|
|
(eglot-ignored-server-capabilities '(:inlayHintProvider))
|
|
(jsonrpc-event-hook nil)
|
|
:hook
|
|
(eglot-managed-mode . eldoc-box-hover-mode)
|
|
(before-save . eldoc-format-buffer)
|
|
:bind
|
|
(:map eglot-mode-map
|
|
("C-c l a" . eglot-code-actions)
|
|
("C-c l r" . eglot-rename)
|
|
("C-c l h" . eldoc)
|
|
("C-c l g" . xref-find-references)
|
|
("C-c l w" . eglot-reconnect)))
|
|
|
|
(use-package proced
|
|
:custom
|
|
(proced-auto-update-flag t)
|
|
(proced-auto-update-interval 3)
|
|
(proced-enable-color-flag t)
|
|
(proced-show-remote-processes t))
|
|
|
|
(use-package org
|
|
:ensure t
|
|
:defer t
|
|
:commands (org-mode org-capture org-agenda)
|
|
:init
|
|
(defvar org-journal-file "~/nextcloud/org/journal.org")
|
|
(defvar org-archive-file "~/nextcloud/org/archive.org")
|
|
(defvar org-notes-file "~/nextcloud/org/notes.org")
|
|
(defvar org-inbox-file "~/nextcloud/org/inbox.org")
|
|
(defvar org-work-file "~/nextcloud/org/work.org")
|
|
(defun my/org-capture-project-target-heading ()
|
|
"Determine Org target headings from the current file's project path.
|
|
|
|
This function assumes a directory structure like '~/projects/COMPANY/PROJECT/'.
|
|
It extracts 'COMPANY' and 'PROJECT' to use as nested headlines
|
|
for an Org capture template.
|
|
|
|
If the current buffer is not visi
|
|
ting a file within such a
|
|
project structure, it returns nil, causing capture to default to
|
|
the top of the file."
|
|
(when-let* ((path (buffer-file-name))) ; Ensure we are in a file-visiting buffer
|
|
(let ((path-parts (split-string path "/" t " ")))
|
|
(when-let* ((projects-pos (cl-position "projects" path-parts :test #'string=))
|
|
(company (nth (+ 1 projects-pos) path-parts))
|
|
(project (nth (+ 2 projects-pos) path-parts)))
|
|
;; Return a list of headlines for Org to find or create.
|
|
(list company project)))))
|
|
:bind
|
|
(("C-c c" . org-capture)
|
|
("C-c i" . org-store-link)
|
|
("C-c a" . org-agenda)
|
|
:map org-mode-map
|
|
("C-c t" . org-toggle-inline-images)
|
|
("C-c l" . org-toggle-link-display))
|
|
:custom
|
|
(org-agenda-files (list org-inbox-file org-journal-file))
|
|
(org-directory "~/nextcloud/org")
|
|
(org-default-notes-file org-inbox-file)
|
|
(org-archive-location (concat org-archive-file "::* From %s"))
|
|
(org-log-done 'time)
|
|
(org-log-into-drawer t)
|
|
(org-hide-emphasis-markers t)
|
|
(org-src-fontify-natively t)
|
|
(org-src-tab-acts-natively t)
|
|
(org-capture-templates '(("t" "Todo" entry (file org-inbox-file)
|
|
"* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n)")
|
|
("j" "Journal" entry (file+olp+datetree org-journal-file)
|
|
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
|
("n" "Note" entry (file org-notes-file)
|
|
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
|
("p" "Project Task" item
|
|
(file+function org-work-file my/org-capture-project-target-heading)
|
|
"* TODO %? \n CLOCK: %U"
|
|
))
|
|
)
|
|
:config
|
|
;; Enable syntax highlighting in code blocks
|
|
(add-hook 'org-mode-hook 'turn-on-font-lock)
|
|
(add-hook 'org-mode-hook 'org-indent-mode))
|
|
|
|
;; extras
|
|
(use-package comp-run
|
|
:ensure nil
|
|
:config
|
|
(push "tramp-loaddefs.el.gz" native-comp-jit-compilation-deny-list)
|
|
(push "cl-loaddefs.el.gz" native-comp-jit-compilation-deny-list))
|
|
|
|
(use-package rustic
|
|
:custom
|
|
(rustic-lsp-client 'eglot))
|
|
|
|
(provide 'init)
|
|
|
|
;;; init.el ends here
|
|
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="outline-container-org5d5d6e3" class="outline-3">
|
|
<h3 id="org5d5d6e3"><code>generated/system/development/databases/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org5d5d6e3">
|
|
<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-org2870763" class="outline-3">
|
|
<h3 id="org2870763"><code>generated/system/development/devops_ci_cd/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org2870763">
|
|
<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-org658f514" class="outline-3">
|
|
<h3 id="org658f514"><code>generated/system/development/programming_languages/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org658f514">
|
|
<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-orgc204e3e" class="outline-3">
|
|
<h3 id="orgc204e3e"><code>generated/system/development/virtualization/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgc204e3e">
|
|
<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-org2941332" class="outline-3">
|
|
<h3 id="org2941332"><code>generated/system/development/web_development/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org2941332">
|
|
<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-org02c139f" class="outline-3">
|
|
<h3 id="org02c139f"><code>generated/system/system_management/audio/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org02c139f">
|
|
<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-orgd88f5cb" class="outline-3">
|
|
<h3 id="orgd88f5cb"><code>generated/system/system_management/backups/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgd88f5cb">
|
|
<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-org38ac912" class="outline-3">
|
|
<h3 id="org38ac912"><code>generated/system/system_management/bluetooth/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org38ac912">
|
|
<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-orga177e3a" class="outline-3">
|
|
<h3 id="orga177e3a"><code>generated/system/system_management/disk_management/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga177e3a">
|
|
<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-orgb04a9ab" class="outline-3">
|
|
<h3 id="orgb04a9ab"><code>generated/system/system_management/hardware_sensors/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgb04a9ab">
|
|
<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-org43b7711" class="outline-3">
|
|
<h3 id="org43b7711"><code>generated/system/system_management/logging_monitoring/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org43b7711">
|
|
<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-orgbd1e416" class="outline-3">
|
|
<h3 id="orgbd1e416"><code>generated/system/system_management/login_manager/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgbd1e416">
|
|
<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-org80f8421" class="outline-3">
|
|
<h3 id="org80f8421"><code>generated/system/system_management/monitor_setup/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org80f8421">
|
|
<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-org54f3a5d" class="outline-3">
|
|
<h3 id="org54f3a5d"><code>generated/system/system_management/networking/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org54f3a5d">
|
|
<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-orgea541e6" class="outline-3">
|
|
<h3 id="orgea541e6"><code>generated/system/system_management/power_management/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgea541e6">
|
|
<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-orga931d23" class="outline-3">
|
|
<h3 id="orga931d23"><code>generated/system/system_management/printers_scanners/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orga931d23">
|
|
<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-org29c9b88" class="outline-3">
|
|
<h3 id="org29c9b88"><code>generated/system/system_management/security/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org29c9b88">
|
|
<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-orge9ab006" class="outline-3">
|
|
<h3 id="orge9ab006"><code>generated/system/system_management/system_updates/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orge9ab006">
|
|
<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-orgd6701a6" class="outline-3">
|
|
<h3 id="orgd6701a6"><code>generated/system/task_launcher/top.nix</code></h3>
|
|
<div class="outline-text-3" id="text-orgd6701a6">
|
|
<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-org3538c1b" class="outline-3">
|
|
<h3 id="org3538c1b"><code>generated/system/task_launcher/wofi.nix</code></h3>
|
|
<div class="outline-text-3" id="text-org3538c1b">
|
|
<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>
|
|
</div>
|
|
<div id="postamble" class="status">
|
|
<p class="author">Author: Henro Veijer</p>
|
|
<p class="date">Created: 2026-03-16 Mon 17:13</p>
|
|
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
|
|
</div>
|
|
</body>
|
|
</html>
|