Files
nixos/Droidnix/README.html
T
2026-04-10 18:38:10 +02:00

4458 lines
124 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2026-04-10 vr 18:38 -->
<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="#org4448f20">Shortcuts</a></li>
<li><a href="#introduction">Introduction&#xa0;&#xa0;&#xa0;<span class="tag"><span class="intro">intro</span></span></a>
<ul>
<li><a href="#org6d82763">What is Droidnix</a>
<ul>
<li><a href="#org012f4b7">Installed components:</a></li>
<li><a href="#org7981df7">Goals, project Structure, import hierarchy</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orge63da80">Root Level</a></li>
<li><a href="#org13362ab">Generated Structure</a>
<ul>
<li><a href="#org4b42fd5">First Setup</a></li>
</ul>
</li>
<li><a href="#the-assets-folder">The Assets Folder&#xa0;&#xa0;&#xa0;<span class="tag"><span class="assets">assets</span></span></a>
<ul>
<li><a href="#org47f52c5"><code>generated/assets/2_b_installed.conf</code></a></li>
</ul>
</li>
<li><a href="#the-actual-code">The Actual Code&#xa0;&#xa0;&#xa0;<span class="tag"><span class="code">code</span></span></a>
<ul>
<li><a href="#org9667ba0"><code>generated/flake.nix</code></a></li>
<li><a href="#org0a6d449"><code>generated/hosts/traveldroid/boot.nix</code></a></li>
<li><a href="#orgdfbbe5a"><code>generated/hosts/traveldroid/hardware-configuration.nix</code></a></li>
<li><a href="#orgf119165"><code>generated/hosts/traveldroid/host.nix</code></a></li>
</ul>
</li>
<li><a href="#org7e79458">generated/traveldroid/modules/apps</a>
<ul>
<li><a href="#orga2a2fbb"><code>generated/modules/traveldroid/apps/2_b_installed.nix</code></a></li>
<li><a href="#orge725f6c"><code>generated/modules/traveldroid/apps/emacs/emacs.nix</code></a></li>
<li><a href="#orgd95f829"><code>generated/modules/traveldroid/apps/flameshot.nix</code></a></li>
<li><a href="#orge662b41"><code>generated/modules/traveldroid/apps/kitty.nix</code></a></li>
<li><a href="#org77bdf04"><code>generated/modules/traveldroid/apps/starship.nix</code></a></li>
<li><a href="#org67fbd88"><code>generated/modules/traveldroid/apps/thunar.nix</code></a></li>
<li><a href="#orgfe27b75"><code>generated/modules/traveldroid/apps/wofi.nix</code></a></li>
<li><a href="#org38fa5c4"><code>generated/modules/traveldroid/apps/zenbrowser.nix</code></a></li>
<li><a href="#org8e4311c"><code>generated/modules/traveldroid/apps/zsh.nix</code></a></li>
</ul>
</li>
<li><a href="#org053432a">generated/modules/traveldroid/desktop</a>
<ul>
<li><a href="#orgbb4de0d"><code>generated/modules/traveldroid/desktop/fonts.nix</code></a></li>
<li><a href="#org16985a2"><code>generated/modules/traveldroid/desktop/gtk.nix</code></a></li>
<li><a href="#org739cef4"><code>generated/modules/traveldroid/desktop/hyprland.nix</code></a></li>
<li><a href="#org13c42fd"><code>generated/modules/traveldroid/desktop/stylix.nix</code></a></li>
<li><a href="#org5b3ef7a"><code>generated/modules/traveldroid/desktop/wallpaper.nix</code></a></li>
<li><a href="#org262abd0"><code>generated/modules/traveldroid/desktop/waybar.nix</code></a></li>
<li><a href="#org9c7b6d1"><code>generated/modules/traveldroid/desktop/wayland.nix</code></a></li>
<li><a href="#orgecdbf20"><code>generated/modules/traveldroid/desktop/xdg.nix</code></a></li>
</ul>
</li>
<li><a href="#org8d41633">generated/modules/traveldroid/system</a>
<ul>
<li><a href="#org06b3ecc"><code>generated/modules/traveldroid/system/audio.nix</code></a></li>
<li><a href="#org7ac8094"><code>generated/modules/traveldroid/system/base-colors.nix</code></a></li>
<li><a href="#org60e1cd4"><code>generated/modules/traveldroid/system/bluetooth.nix</code></a></li>
<li><a href="#org0ea9d21"><code>generated/modules/traveldroid/system/copy_scripts.nix</code></a></li>
<li><a href="#org6b1c7ff"><code>generated/modules/traveldroid/system/dbus.nix</code></a></li>
<li><a href="#orgc13ade2"><code>generated/modules/traveldroid/system/gnome-keyring.nix</code></a></li>
<li><a href="#orgdaa714f"><code>generated/modules/traveldroid/system/login-tuigreet.nix</code></a></li>
<li><a href="#org35937f6"><code>generated/modules/traveldroid/system/networking.nix</code></a></li>
<li><a href="#org8fc605c"><code>generated/modules/traveldroid/system/nix.nix</code></a></li>
<li><a href="#org977ae45"><code>generated/modules/traveldroid/system/printing.nix</code></a></li>
</ul>
</li>
<li><a href="#orgfda1ee2">generated/users</a>
<ul>
<li><a href="#orgfe316b5"><code>generated/users/</code></a></li>
</ul>
</li>
<li><a href="#the-config-files">These are all the prepared config files</a>
<ul>
<li><a href="#orga691e26"><code>generated/.config/emacs/early-init.el</code></a></li>
<li><a href="#orgd34773d"><code>generated/.config/emacs/init.el</code></a></li>
<li><a href="#org227b56f"><code>generated/.config/hypr/animations.conf</code></a></li>
<li><a href="#org2bddaea"><code>generated/.config/hypr/behaviour.conf</code></a></li>
<li><a href="#orgb84c26b"><code>generated/.config/hypr/bindings.conf</code></a></li>
<li><a href="#org2bbdaee"><code>generated/.config/hypr/exec-once.conf</code></a></li>
<li><a href="#org3083106"><code>generated/.config/hypr/hypridle.conf</code></a></li>
<li><a href="#orgf4c2ee2"><code>generated/.config/hypr/hyprland.conf</code></a></li>
<li><a href="#org767b949"><code>generated/.config/hypr/hyprlock.conf</code></a></li>
<li><a href="#org6f634c2"><code>generated/.config/hypr/layer-rules.conf</code></a></li>
<li><a href="#org240c2b3"><code>generated/.config/hypr/layout.conf</code></a></li>
<li><a href="#org420b26e"><code>generated/.config/hypr/monitor-rules.conf</code></a></li>
<li><a href="#org9b2ee0f"><code>generated/.config/hypr/scripts/layout-selector.sh</code></a></li>
<li><a href="#org1196561"><code>generated/.config/hypr/theming.css</code></a></li>
<li><a href="#orgbd935b6"><code>generated/.config/hypr/window-rules.conf</code></a></li>
<li><a href="#orgfdad515"><code>generated/.config/hypr/workspace-rules.conf</code></a></li>
<li><a href="#org799f64d"><code>generated/.config/scripts/update.sh</code></a></li>
<li><a href="#org958f17c"><code>generated/.config/shared/colors.css</code></a></li>
<li><a href="#org1e89d7c"><code>generated/.config/starship.toml</code></a></li>
<li><a href="#org4613101"><code>generated/.config/stylix/stylix.conf</code></a></li>
<li><a href="#org088a87c"><code>generated/.config/stylix/palette.json</code></a></li>
<li><a href="#orgb378784"><code>generated/.config/stylix/palette.html</code></a></li>
<li><a href="#orgee326dc"><code>generated/.config/waybar/config</code></a></li>
<li><a href="#org2f9225b"><code>generated/.config/waybar/style.css</code></a></li>
<li><a href="#org03b503a"><code>generated/.config/waybar/scripts/bluetooth-status.sh</code></a></li>
<li><a href="#org821c20d"><code>generated/.config/waybar/scripts/hypr-workspaces.sh</code></a></li>
<li><a href="#orgdf0ae95"><code>generated/.config/waybar/scripts/hypr-workspacesmenu.sh</code></a></li>
<li><a href="#org4427ba7"><code>generated/.config/waypaper/config.ini</code></a></li>
<li><a href="#org834b098"><code>generated/.config/waypaper/config.ini</code></a></li>
<li><a href="#org1bb3940"><code>generated/.config/wofi/config</code></a></li>
<li><a href="#org9c38781"><code>generated/.config/wofi/style.css</code></a></li>
<li><a href="#org551a5ca"><code>generated/.config/zed/settings.json</code></a></li>
<li><a href="#orgf297781"><code>generated/.config/zsh/.zshrc</code></a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org4448f20" class="outline-2">
<h2 id="org4448f20">Shortcuts</h2>
<div class="outline-text-2" id="text-org4448f20">
<p>
<a href="#introduction">Introduction</a>
<a href="#the-assets-folder">The Assets Folder</a>
<a href="#the-actual-code">The Actual Code en configs</a>
</p>
<p>
&#x2014;
</p>
</div>
</div>
<div id="outline-container-introduction" class="outline-2">
<h2 id="introduction">Introduction&#xa0;&#xa0;&#xa0;<span class="tag"><span class="intro">intro</span></span></h2>
<div class="outline-text-2" id="text-introduction">
</div>
<div id="outline-container-org6d82763" class="outline-3">
<h3 id="org6d82763">What is Droidnix</h3>
<div class="outline-text-3" id="text-org6d82763">
<p>
Droidnix is a modular, declarative NixOS + Home Manager configuration system. with 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-org012f4b7" class="outline-4">
<h4 id="org012f4b7">Installed components:</h4>
<div class="outline-text-4" id="text-org012f4b7">
</div>
<ul class="org-ul">
<li><a id="org057787d"></a>Core<br /></li>
<li><a id="org6866a31"></a>Hyprland<br /></li>
</ul>
</div>
<div id="outline-container-org7981df7" class="outline-4">
<h4 id="org7981df7">Goals, project Structure, import hierarchy</h4>
<div class="outline-text-4" id="text-org7981df7">
<p>
This project uses a <b><b>modular NixOS configuration</b></b> with <b><b>Hyprland</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 files and folders</li>
</ol>
</div>
</div>
</div>
</div>
<div id="outline-container-orge63da80" class="outline-2">
<h2 id="orge63da80">Root Level</h2>
<div class="outline-text-2" id="text-orge63da80">
<ul class="org-ul">
<li><code>flake.nix</code> is the entry point and imports:
<ul class="org-ul">
<li><code>generated/assets/</code></li>
<li><code>generated/&lt;host&gt;/modules/</code></li>
<li><code>generated/hosts/</code></li>
</ul></li>
</ul>
</div>
</div>
<div id="outline-container-org13362ab" class="outline-2">
<h2 id="org13362ab">Generated Structure</h2>
<div class="outline-text-2" id="text-org13362ab">
<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-org4b42fd5" class="outline-3">
<h3 id="org4b42fd5">First Setup</h3>
<div class="outline-text-3" id="text-org4b42fd5">
<ol class="org-ol">
<li>Clone this repository.</li>
<li>Run the setup script: <code>./setup_droid</code>.</li>
<li>Tangle this Org file to generate Nix configurations: <code>C-c C-v t</code> in Emacs or use this: <code>emacs README.org --batch -f org-babel-tangle &amp;&amp; emacs --batch --eval "(setq org-html-htmlize-output-type nil)" README.org -f org-html-export-to-html</code></li>
<li>Build and switch: <code>sudo nixos-rebuild switch --flake .#&lt;hostname&gt;</code>.</li>
</ol>
<p>
&#x2014;
</p>
</div>
</div>
</div>
<div id="outline-container-the-assets-folder" class="outline-2">
<h2 id="the-assets-folder">The Assets Folder&#xa0;&#xa0;&#xa0;<span class="tag"><span class="assets">assets</span></span></h2>
<div class="outline-text-2" id="text-the-assets-folder">
<p>
The <code>.assets/</code> folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.
</p>
</div>
<div id="outline-container-org47f52c5" class="outline-3">
<h3 id="org47f52c5"><code>generated/assets/2_b_installed.conf</code></h3>
<div class="outline-text-3" id="text-org47f52c5">
<p>
This is a list of additional apps to install
</p>
<div class="org-src-container">
<pre class="src src-toml">#packages
_1password-gui
audacity
baobab
bat
blueman
bluez
brave
btop
chromium
cliphist
comma
direnv
duf
delta
eza
fd
file
fzf
git
gparted
grim
handbrake
hyperfine
just
jq
kdePackages.kdeconnect-kde
libreoffice
nextcloud-client
nextcloud-talk-desktop
nix-index
nix-output-monitor
nh
obsidian
onlyoffice-desktopeditors
openssl
postman
python3
qdirstat
ripgrep
signal-desktop
slurp
spotify
solaar
swappy
tea
todoist
tree
usbutils
vlc
wev
wget
wl-clipboard
wf-recorder
yazi
zed-editor
zoxide
#flatpaks
eu.betterbird.Betterbird
com.todoist.Todoist
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-the-actual-code" class="outline-2">
<h2 id="the-actual-code">The Actual Code&#xa0;&#xa0;&#xa0;<span class="tag"><span class="code">code</span></span></h2>
<div class="outline-text-2" id="text-the-actual-code">
<p>
This section contains the Org blocks for tangling Nix code into the generated folders.
</p>
</div>
<div id="outline-container-org9667ba0" class="outline-3">
<h3 id="org9667ba0"><code>generated/flake.nix</code></h3>
<div class="outline-text-3" id="text-org9667ba0">
<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";
};
import-tree.url = "github:vic/import-tree";
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
flatpak = {
url = "github:gmodena/nix-flatpak";
};
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 = { self, nixpkgs, home-manager, import-tree, stylix, hyprland, emacs-overlay, zen-browser, flatpak, ... }:
let
system = "x86_64-linux";
flakeRoot = self;
in {
nixosConfigurations = {
traveldroid = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
({ ... }: {
nixpkgs.overlays = [ emacs-overlay.overlays.default ];
})
flatpak.nixosModules."nix-flatpak"
./generated/hosts/traveldroid/host.nix
./generated/users/henrov.nix
];
specialArgs = {
inherit flakeRoot;
inherit home-manager import-tree stylix hyprland zen-browser;
};
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org0a6d449" class="outline-3">
<h3 id="org0a6d449"><code>generated/hosts/traveldroid/boot.nix</code></h3>
<div class="outline-text-3" id="text-org0a6d449">
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, flakeRoot, ... }:
{
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
efi.efiSysMountPoint = "/boot";
timeout = 5;
};
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelParams = [
"quiet"
"splash"
"udev.log_level=3"
"rd.systemd.show_status=false"
];
boot.consoleLogLevel = 0;
#boot.initrd.systemd.enable = true;
boot.initrd.availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_usb_sdmmc"
];
hardware.enableAllFirmware = true;
boot.kernelModules = [ "kvm-intel" ];
boot.plymouth = {
enable = true;
};
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdfbbe5a" class="outline-3">
<h3 id="orgdfbbe5a"><code>generated/hosts/traveldroid/hardware-configuration.nix</code></h3>
<div class="outline-text-3" id="text-orgdfbbe5a">
<ol class="org-ol">
<li>Boot into NixOS Live ISO or your installed system.</li>
<li>Open a terminal.</li>
<li>Run: &lt;code&gt;sudo nixos-generate-config &#x2013;root /mnt&lt;/code&gt; (Omit &#x2013;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-orgf119165" class="outline-3">
<h3 id="orgf119165"><code>generated/hosts/traveldroid/host.nix</code></h3>
<div class="outline-text-3" id="text-orgf119165">
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
let
hostname = "traveldroid";
modulesPath = "${flakeRoot}/generated/modules/${hostname}";
hostModules = import-tree modulesPath;
allModules = hostModules.imports;
in
{
networking.hostName = hostname;
system.stateVersion = "26.05";
#################################
# Locale
#################################
i18n = {
defaultLocale = "nl_NL.UTF-8";
extraLocales = [
"nl_NL.UTF-8/UTF-8"
"en_US.UTF-8/UTF-8"
];
consoleKeyMap = "us";
};
time.timeZone = "Europe/Amsterdam";
#################################
# Imports
#################################
imports =
[ ../../../generated/users/henrov.nix
./boot.nix
./hardware-configuration.nix
]
++ allModules
++ [ home-manager.nixosModules.home-manager ];
#################################
# Home Manager integration
#################################
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
environment.systemPackages = [
pkgs.dconf
];
programs.dconf.enable = true;
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org7e79458" class="outline-2">
<h2 id="org7e79458">generated/traveldroid/modules/apps</h2>
<div class="outline-text-2" id="text-org7e79458">
</div>
<div id="outline-container-orga2a2fbb" class="outline-3">
<h3 id="orga2a2fbb"><code>generated/modules/traveldroid/apps/2_b_installed.nix</code></h3>
<div class="outline-text-3" id="text-orga2a2fbb">
<p>
This installs a list of apps
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
#################################
# FILE
#################################
confPath = "${flakeRoot}/generated/assets/2_b_installed.conf";
raw = builtins.readFile confPath;
lines = lib.splitString "\n" raw;
#################################
# CLEAN LINE
#################################
cleanLine = line:
let
noCR = lib.replaceStrings [ "\r" ] [ "" ] line;
noInlineComment = lib.head (lib.splitString "#" noCR);
in
lib.strings.trim noInlineComment;
#################################
# PARSE SECTION
#################################
parseSection = section:
let
result =
builtins.foldl'
(acc: line:
let
l = lib.strings.trim line;
in
if l == section then
acc // { active = true; }
else if lib.hasPrefix "#" l then
acc // { active = false; }
else if acc.active then
acc // { entries = acc.entries ++ [ l ]; }
else
acc
)
{ active = false; entries = []; }
lines;
in
builtins.filter (l: l != "") (map cleanLine result.entries);
#################################
# NIX PACKAGES
#################################
packageEntries = parseSection "#packages";
resolvePkg = name:
let
parts = lib.splitString "." name;
found = lib.attrByPath parts null pkgs;
in
if found == null then
throw ''
packages.nix: package not found
Token: ${name}
File : ${confPath}
''
else
found;
packages = map resolvePkg packageEntries;
#################################
# FLATPAKS
#################################
flatpakEntries = parseSection "#flatpaks";
in {
#################################
# Allow unfree
#################################
nixpkgs.config.allowUnfree = true;
#################################
# System packages (Nix)
#################################
environment.systemPackages = packages;
#################################
# Flatpak setup
#################################
services.flatpak.enable = true;
services.flatpak.remotes = [
{
name = "flathub";
location = "https://flathub.org/repo/flathub.flatpakrepo";
}
];
#################################
# Flatpak apps
#################################
services.flatpak.packages = flatpakEntries;
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orge725f6c" class="outline-3">
<h3 id="orge725f6c"><code>generated/modules/traveldroid/apps/emacs/emacs.nix</code></h3>
<div class="outline-text-3" id="text-orge725f6c">
<p>
This installs emacs
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, flakeRoot, ... }:
let
username = config.defaultUser or "henrov";
assetPath = "${flakeRoot}/generated/.config/emacs";
# Emacs package with Tree-sitter support
emacsPkg = pkgs.emacs-pgtk.override { withTreeSitter = true; };
# Extra packages for Emacs via Home Manager
emacsExtraPackages = epkgs: [
epkgs.manualPackages.treesit-grammars.with-all-grammars
epkgs.nerd-icons
epkgs.doom-modeline
epkgs.diminish
epkgs.eldoc
epkgs.pulsar
epkgs.which-key
epkgs.expreg
epkgs.vundo
epkgs.puni
epkgs.avy
epkgs.consult
epkgs.vertico
epkgs.marginalia
epkgs.crux
epkgs.magit
epkgs.nerd-icons-corfu
epkgs.corfu
epkgs.cape
epkgs.orderless
epkgs.yasnippet
epkgs.yasnippet-snippets
epkgs.rg
epkgs.exec-path-from-shell
epkgs.eat
epkgs.rust-mode
epkgs.rustic
epkgs.nix-mode
epkgs.hcl-mode
epkgs.shell-pop
epkgs.envrc
epkgs.nixpkgs-fmt
epkgs.f
epkgs.gptel
epkgs.catppuccin-theme
epkgs.eldoc-box
epkgs.sideline
epkgs.sideline-flymake
epkgs.sideline-eglot
];
in
{
# System-wide installation
environment.systemPackages = [
emacsPkg
];
# Home Manager user-specific configuration for your default user
home-manager.users = {
${username} = {
home.sessionVariables = {
EDITOR = "emacs";
XDG_SCREENSHOTS_DIR = "~/screenshots";
};
programs.emacs = {
enable = true;
package = emacsPkg;
extraPackages = emacsExtraPackages;
};
home.file = {
".emacs.d/early-init.el" = {
source = "${assetPath}/early-init.el";
force = true; # &lt;-- allow overwrite
};
".emacs.d/init.el" = {
source = "${assetPath}/init.el";
force = true; # &lt;-- allow overwrite
};
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd95f829" class="outline-3">
<h3 id="orgd95f829"><code>generated/modules/traveldroid/apps/flameshot.nix</code></h3>
<div class="outline-text-3" id="text-orgd95f829">
<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, config, lib, ... }:
let
username = config.defaultUser or "henrov";
in
{
############################
# System-level packages
############################
environment.systemPackages = with pkgs; [
flameshot
];
############################
# Home Manager user-level configuration
############################
home-manager.users."${username}" = {
home.stateVersion = "26.05";
home.sessionVariables = {
SCREENSHOT_TOOL = "flameshot";
USERNAME = username;
};
# Create ~/Pictures/Screenshots by touching a dummy file
home.file."Pictures/Screenshots/.keep" = {
text = ""; # empty file
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orge662b41" class="outline-3">
<h3 id="orge662b41"><code>generated/modules/traveldroid/apps/kitty.nix</code></h3>
<div class="outline-text-3" id="text-orge662b41">
<p>
This file sets up Kitty terminal
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, pkgs, config, flakeRoot, ... }:
let
username = config.defaultUser or "henrov";
extraConfigFile = "${flakeRoot}/generated/.config/kitty/extra.conf";
extraConfig =
if builtins.pathExists extraConfigFile
then builtins.readFile extraConfigFile
else "";
in
{
#################################
# System-wide install
#################################
environment.systemPackages = [
pkgs.kitty
];
#################################
# Home Manager
#################################
home-manager.users = {
"${username}" = {
programs.kitty = {
enable = true;
settings = {
confirm_os_window_close = lib.mkForce 0;
dynamic_background_opacity = lib.mkForce true;
enable_audio_bell = lib.mkForce false;
mouse_hide_wait = lib.mkForce "-1.0";
window_padding_width = lib.mkForce 10;
background_opacity = lib.mkForce "0.5";
background_blur = lib.mkForce 5;
};
extraConfig = ''
${extraConfig}
# Theme
include themes/Catppuccin-Mocha.conf
'';
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org77bdf04" class="outline-3">
<h3 id="org77bdf04"><code>generated/modules/traveldroid/apps/starship.nix</code></h3>
<div class="outline-text-3" id="text-org77bdf04">
<p>
This file sets up starship prompt
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
# Default username fallback
username = config.defaultUser or "henrov";
# Path to the starship config in assets
starshipConfSrc = "${flakeRoot}/generated/.config/starship.toml";
in
{
#################################
# Install Starship system-wide
#################################
environment.systemPackages = [ pkgs.starship ];
#################################
# Home Manager user configuration
#################################
home-manager.users = {
${username} = {
home.file = {
".config/starship.toml" = {
text = builtins.readFile "${starshipConfSrc}";
force = true;
};
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org67fbd88" class="outline-3">
<h3 id="org67fbd88"><code>generated/modules/traveldroid/apps/thunar.nix</code></h3>
<div class="outline-text-3" id="text-org67fbd88">
<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, config, lib, ... }:
let
# Resolve the default username from host config
username = config.defaultUser or "henrov";
in
{
############################
# System-level packages
############################
environment.systemPackages = with pkgs; [
thunar # main file manager
thunar-archive-plugin # zip, tar, rar, 7z support
thunar-volman # auto-mount removable drives
gvfs # support for external drives and network shares
xarchiver # optional GUI archive manager
tumbler # Showing thumbnails
];
############################
# Home Manager user-level configuration
############################
# Direct assignment to the user avoids recursiveUpdate issues
home-manager.users."${username}" = {
home.stateVersion = "26.05"; # required
home.sessionVariables = {
FILE_MANAGER = "thunar";
USERNAME = username;
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfe27b75" class="outline-3">
<h3 id="orgfe27b75"><code>generated/modules/traveldroid/apps/wofi.nix</code></h3>
<div class="outline-text-3" id="text-orgfe27b75">
<p>
This is the install for Wofi, the launcher
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
username = config.defaultUser or "henrov";
assetPath = "${flakeRoot}/generated/.config/wofi";
in
{
environment.systemPackages = [ pkgs.wofi ];
home-manager.users = {
${username} = {
home.file = {
".config/wofi/config" = {
text = builtins.readFile "${assetPath}/config";
force = true;
};
".config/wofi/style.css" = {
text = builtins.replaceStrings ["PLACEHOLDER_USERNAME"] [username] (builtins.readFile "${assetPath}/style.css");
force = true;
};
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org38fa5c4" class="outline-3">
<h3 id="org38fa5c4"><code>generated/modules/traveldroid/apps/zenbrowser.nix</code></h3>
<div class="outline-text-3" id="text-org38fa5c4">
<p>
This installs zen browser
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, zen-browser, ... }:
let
# Grab the Zen Browser package for this host system
zenBrowser = zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
{
environment.systemPackages = [
zenBrowser
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org8e4311c" class="outline-3">
<h3 id="org8e4311c"><code>generated/modules/traveldroid/apps/zsh.nix</code></h3>
<div class="outline-text-3" id="text-org8e4311c">
<p>
This sets up the zsh in the terminal
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
# Default username fallback
username = config.defaultUser or "henrov";
# Path to optional per-user generated zshrc
generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc";
in
{
#################################
# Install Zsh, Oh My Zsh, and Starship system-wide
#################################
environment.systemPackages = with pkgs; [
zsh
oh-my-zsh
starship
];
#################################
# Set Zsh to use ~/.config/zsh as its config directory
#################################
environment.etc."zshenv".text = ''
export ZDOTDIR=$HOME/.config/zsh
'';
#################################
# Deploy global zshrc for all users
#################################
environment.etc."zshrc".text = ''
export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh
ZSH_THEME=""
plugins=(git sudo extract colored-man-pages command-not-found history docker kubectl)
source $ZSH/oh-my-zsh.sh
# Load optional per-user generated zshrc if it exists
[ -f "${generatedZsh}" ] &amp;&amp; source "${generatedZsh}"
# Initialize Starship prompt
eval "$(starship init zsh)"
'';
#################################
# Set Zsh as default login shell for the user via Home Manager
#################################
home-manager.users = {
${username} = {
programs.zsh.enable = true;
# Include the generated zshrc if you want
home.file.".config/zsh/.zshrc".source = generatedZsh;
};
};
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org053432a" class="outline-2">
<h2 id="org053432a">generated/modules/traveldroid/desktop</h2>
<div class="outline-text-2" id="text-org053432a">
</div>
<div id="outline-container-orgbb4de0d" class="outline-3">
<h3 id="orgbb4de0d"><code>generated/modules/traveldroid/desktop/fonts.nix</code></h3>
<div class="outline-text-3" id="text-orgbb4de0d">
<p>
This file installs and configures fonts
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, pkgs, config, ... }:
{
fonts.packages = with pkgs; [
nerd-fonts.iosevka
nerd-fonts.fira-code
nerd-fonts.jetbrains-mono
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org16985a2" class="outline-3">
<h3 id="org16985a2"><code>generated/modules/traveldroid/desktop/gtk.nix</code></h3>
<div class="outline-text-3" id="text-org16985a2">
<p>
Setting up GTK
</p>
<div class="org-src-container">
<pre class="src src-nix">{ pkgs, config, lib, ... }:
let
username = config.defaultUser or "henrov";
in
{
environment.systemPackages = with pkgs; [
gtk3
gtk4
];
home-manager.users."${username}" = {
gtk = {
enable = true;
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org739cef4" class="outline-3">
<h3 id="org739cef4"><code>generated/modules/traveldroid/desktop/hyprland.nix</code></h3>
<div class="outline-text-3" id="text-org739cef4">
<p>
Setting up Hyprland
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }:
let
username = config.defaultUser or "henrov";
assetPath = "${flakeRoot}/generated/.config/hypr";
hyprlandPkg =
pkgs.hyprland or
pkgs.hyprland-git or
inputs.hyprland.packages.${pkgs.system}.default;
in
{
# Install Hyprland systemwide
environment.systemPackages = [ hyprlandPkg ];
# Home Manager user configuration
home-manager.users = {
${username} = {
home.file = {
".config/hypr/animations.conf" = { source = "${assetPath}/animations.conf"; force = true; };
".config/hypr/behaviour.conf" = { source = "${assetPath}/behaviour.conf"; force = true; };
".config/hypr/bindings.conf" = { source = "${assetPath}/bindings.conf"; force = true; };
".config/hypr/exec-once.conf" = { source = "${assetPath}/exec-once.conf"; force = true; };
".config/hypr/hypridle.conf" = { source = "${assetPath}/hypridle.conf"; force = true; };
".config/hypr/hyprland.conf" = { source = "${assetPath}/hyprland.conf"; force = true; };
".config/hypr/hyprlock.conf" = { source = "${assetPath}/hyprlock.conf"; force = true; };
".config/hypr/layer-rules.conf" = { source = "${assetPath}/layer-rules.conf"; force = true; };
".config/hypr/layout.conf" = { source = "${assetPath}/layout.conf"; force = true; };
".config/hypr/monitor-rules.conf" = { source = "${assetPath}/monitor-rules.conf"; force = true; };
".config/hypr/scripts/layout-selector.sh" = { source = "${assetPath}/scripts/layout-selector.sh"; executable = true; force = true; };
".config/hypr/theming.css" = { source = "${assetPath}/theming.css"; force = true; };
".config/hypr/window-rules.conf" = { source = "${assetPath}/window-rules.conf"; force = true; };
".config/hypr/workspace-rules.conf" = { source = "${assetPath}/workspace-rules.conf"; force = true; };
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org13c42fd" class="outline-3">
<h3 id="org13c42fd"><code>generated/modules/traveldroid/desktop/stylix.nix</code></h3>
<div class="outline-text-3" id="text-org13c42fd">
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, stylix, ... }:
let
username = config.defaultUser or "henrov";
moduleName = "stylix";
assetPath = "${flakeRoot}/generated/.config/${moduleName}";
stylixConfFile = "${assetPath}/stylix.conf";
stylixConf =
if builtins.pathExists stylixConfFile
then builtins.readFile stylixConfFile
else "";
cursorName = "phinger-cursors-light";
cursorSize = 24;
in
{
#################################
# Enable Stylix module
#################################
imports = [
stylix.nixosModules.stylix
];
#################################
# System packages
#################################
environment.systemPackages = [
pkgs.feh
pkgs.st
];
#################################
# Stylix system config
#################################
stylix = {
enable = true;
base16Scheme = "${flakeRoot}/assets/traveldroid/theming/stylix/catppuccin-mocha.yaml";
polarity = "dark";
targets = {
gtk.enable = true;
qt.enable = true;
};
cursor = {
name = cursorName;
package = pkgs.phinger-cursors;
size = cursorSize;
};
};
#################################
# Home Manager
#################################
home-manager.users = {
"${username}" = {
#################################
# ONLY custom file (safe)
#################################
home.file.".config/stylix/stylix.conf" = {
text = stylixConf;
force = true;
};
#################################
# Environment variables
#################################
home.sessionVariables = {
STYLIX_CONF = "$HOME/.config/stylix/stylix.conf";
XCURSOR_THEME = cursorName;
XCURSOR_SIZE = toString cursorSize;
HYPRCURSOR_THEME = cursorName;
HYPRCURSOR_SIZE = toString cursorSize;
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org5b3ef7a" class="outline-3">
<h3 id="org5b3ef7a"><code>generated/modules/traveldroid/desktop/wallpaper.nix</code></h3>
<div class="outline-text-3" id="text-org5b3ef7a">
<p>
Setting up wallpaper engine + wallpaper gui
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
username = config.defaultUser or "henrov";
homeDir = "/home/${username}";
wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers";
wallpaperDst = "${homeDir}/Wallpapers";
randoScript = "${homeDir}/Wallpapers/scripts/randomizeWallpapers.sh";
in
{
# Make bash available
environment.systemPackages = [ pkgs.bash pkgs.rsync pkgs.jq pkgs.awww pkgs.waypaper pkgs.socat ];
# Create the copy script using Home Manager, following Waybar style
home-manager.users = {
${username} = {
home.file = {
"copy-wallpapers.sh" = {
text = ''
#!/run/current-system/sw/bin/bash
set -euo pipefail
echo "Running as $(whoami)"
echo "Copying wallpapers from ${wallpaperSrc} to ${wallpaperDst} ..."
if [ ! -d "${wallpaperSrc}" ]; then
echo "ERROR: ${wallpaperSrc} does not exist"
exit 1
fi
mkdir -p "${wallpaperDst}"
# Simple copy, overwrite everything
cp -r "${wallpaperSrc}/." "${wallpaperDst}/"
# Fix permissions
chmod -R u+rwx "${wallpaperDst}"
echo "Done copying wallpapers."
'';
executable = true;
force = true;
};
};
};
};
# User service to run the script that copies the Wallpaperstuff
systemd.user.services.copyWallpapers = {
description = "Copy wallpapers from repo to ~/Wallpapers";
serviceConfig = {
Type = "oneshot";
ExecStart = "${homeDir}/copy-wallpapers.sh";
Restart = "no";
WorkingDirectory = homeDir;
};
wantedBy = [ "default.target" ];
};
# User service to randomize wallpapers
systemd.user.services.randomizeWallpapers = {
description = "Randomize wallpapers in ~/Wallpapers/pictures";
serviceConfig = {
Type = "oneshot";
ExecStart = "${randoScript}";
Restart = "no";
WorkingDirectory = homeDir;
};
wantedBy = [ "default.target" ];
};
############################
# Random background per workspace at logon
############################
systemd.user.services.workspaceWallpapers = {
description = "Dynamic wallpapers per workspace for Hyprland";
after = [ "graphical-session.target" ];
wants = [ "graphical-session.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${homeDir}/Wallpapers/scripts/workspace-wallpapers.sh";
Restart = "on-failure";
RestartSec = 5;
WorkingDirectory = homeDir;
Environment = [
"HYPRLAND_INSTANCE_SIGNATURE=${builtins.getEnv "HYPRLAND_INSTANCE_SIGNATURE"}"
"WAYLAND_DISPLAY=wayland-1"
"PATH=/run/current-system/sw/bin:/usr/bin:/bin"
];
};
wantedBy = [ "default.target" ];
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org262abd0" class="outline-3">
<h3 id="org262abd0"><code>generated/modules/traveldroid/desktop/waybar.nix</code></h3>
<div class="outline-text-3" id="text-org262abd0">
<p>
This file installs and configures waybar
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
# Use the config option defaultUser directly, fallback to "henrov"
username = config.defaultUser or "henrov";
assetPath = "${flakeRoot}/generated/.config/waybar";
in
{
# Install Waybar system-wide
environment.systemPackages = [ pkgs.waybar ];
home-manager.users = {
${username} = {
home.file = {
".config/waybar/config" = {
text = builtins.readFile "${assetPath}/config";
force = true;
};
".config/waybar/style.css" = {
text = builtins.replaceStrings ["henrov"] [username] (builtins.readFile "${assetPath}/style.css");
force = true;
};
".config/waybar/scripts/bluetooth-status.sh" = {
text = builtins.readFile "${assetPath}/scripts/bluetooth-status.sh";
force = true;
executable = true;
};
".config/waybar/scripts/hypr-workspaces.sh" = {
text = builtins.readFile "${assetPath}/scripts/hypr-workspaces.sh";
force = true;
executable = true;
};
".config/waybar/scripts/hypr-workspacesmenu.sh" = {
text = builtins.readFile "${assetPath}/scripts/hypr-workspacesmenu.sh";
force = true;
executable = true;
};
};
};
};
# Systemd user service for Waybar
systemd.user.services.waybar = {
description = "Waybar for Hyprland";
after = [ "graphical-session.target" ];
serviceConfig = {
ExecStart = "${pkgs.waybar}/bin/waybar";
Restart = "always";
Environment = ''
WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"}
XDG_CURRENT_DESKTOP=Hyprland
'';
};
wantedBy = [ "default.target" ];
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org9c7b6d1" class="outline-3">
<h3 id="org9c7b6d1"><code>generated/modules/traveldroid/desktop/wayland.nix</code></h3>
<div class="outline-text-3" id="text-org9c7b6d1">
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, ... }:
{
#################################
# Core Wayland packages
#################################
environment.systemPackages = with pkgs; [
wayland
wl-clipboard # optional but commonly used for copy/paste
];
#################################
# enable graphics stack
#################################
hardware.graphics.enable = true;
#################################
# Optional session variables for Wayland
#################################
environment.sessionVariables = {
# Forces some apps to use Wayland
NIXOS_OZONE_WL = "1";
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgecdbf20" class="outline-3">
<h3 id="orgecdbf20"><code>generated/modules/traveldroid/desktop/xdg.nix</code></h3>
<div class="outline-text-3" id="text-orgecdbf20">
<p>
This sets the XDG implementation
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
let
# Use the config option defaultUser directly, fallback to "henrov"
username = config.defaultUser or "henrov";
# Portal backends
basePortal = pkgs.xdg-desktop-portal-gtk; # full portal implementation
hyprlandPortal = pkgs.xdg-desktop-portal-hyprland; # Hyprland screencast
in
{
#################################
# Enable XDG desktop portals system-wide
#################################
xdg.portal.enable = true;
# Base + Hyprland portals
xdg.portal.extraPortals = [ basePortal hyprlandPortal ];
# Map screencast interface explicitly to Hyprland
xdg.portal.config = {
"org.freedesktop.impl.portal.Screencast".backend = "hyprland";
};
#################################
# Install portal packages system-wide
#################################
environment.systemPackages = [
basePortal
hyprlandPortal
];
#################################
# Home Manager user configuration
#################################
home-manager.users = {
${username} = {
home.packages = [
basePortal
hyprlandPortal
];
};
};
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org8d41633" class="outline-2">
<h2 id="org8d41633">generated/modules/traveldroid/system</h2>
<div class="outline-text-2" id="text-org8d41633">
</div>
<div id="outline-container-org06b3ecc" class="outline-3">
<h3 id="org06b3ecc"><code>generated/modules/traveldroid/system/audio.nix</code></h3>
<div class="outline-text-3" id="text-org06b3ecc">
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, ... }:
{
############################
# Audio system
############################
environment.systemPackages = with pkgs; [
pulseaudio # PulseAudio daemon
pavucontrol # GUI mixer
pamixer # CLI mixer
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org7ac8094" class="outline-3">
<h3 id="org7ac8094"><code>generated/modules/traveldroid/system/base-colors.nix</code></h3>
<div class="outline-text-3" id="text-org7ac8094">
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, flakeRoot, ... }:
let
username = "henrov"; # Replace with your username if needed
in
{
home-manager.users = {
${username} = {
home.file = {
".config/shared/colors.css" = {
text = builtins.readFile "${flakeRoot}/generated/.config/shared/colors.css";
force = true;
};
};
};
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org60e1cd4" class="outline-3">
<h3 id="org60e1cd4"><code>generated/modules/traveldroid/system/bluetooth.nix</code></h3>
<div class="outline-text-3" id="text-org60e1cd4">
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, home-manager, ... }:
let
username = config.defaultUser or "henrov";
in
{
############################
# Bluetooth daemon
############################
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
package = pkgs.bluez;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org0ea9d21" class="outline-3">
<h3 id="org0ea9d21"><code>generated/modules/traveldroid/system/copy_scripts.nix</code></h3>
<div class="outline-text-3" id="text-org0ea9d21">
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, flakeRoot ... }:
let
scriptsSrc = "${flakeRoot}/generated/.config/scripts;"
in
{
home.file.".config/scripts" = {
source = scriptsSrc;
recursive = true;
executable = true;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org6b1c7ff" class="outline-3">
<h3 id="org6b1c7ff"><code>generated/modules/traveldroid/system/dbus.nix</code></h3>
<div class="outline-text-3" id="text-org6b1c7ff">
<p>
This sets the dbus implementation
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, ... }:
{
# Enable classic D-Bus service
services.dbus.enable = true;
# Use default dbus package (classic D-Bus)
services.dbus.dbusPackage = pkgs.dbus;
# Include some essential system packages so shell and tools exist
environment.systemPackages = with pkgs; [
bashInteractive
coreutils
];
# Do not attempt to wrap dbus-daemon-launch-helper manually
# No extra security.wrappers needed
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc13ade2" class="outline-3">
<h3 id="orgc13ade2"><code>generated/modules/traveldroid/system/gnome-keyring.nix</code></h3>
<div class="outline-text-3" id="text-orgc13ade2">
<p>
This sets the dbus implementation
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, ... }:
{
##################################################
# Core services
##################################################
# Enable GNOME Keyring
services.gnome.gnome-keyring.enable = true;
##################################################
# PAM (auto unlock keyring on login)
##################################################
security.pam.services = {
login.enableGnomeKeyring = true;
greetd.enableGnomeKeyring = true;
sddm.enableGnomeKeyring = true;
gdm.enableGnomeKeyring = true;
};
##################################################
# Environment packages
##################################################
environment.systemPackages = with pkgs; [
polkit_gnome
seahorse
libsecret
];
##################################################
# Security / Polkit
##################################################
security.polkit.enable = true;
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdaa714f" class="outline-3">
<h3 id="orgdaa714f"><code>generated/modules/traveldroid/system/login-tuigreet.nix</code></h3>
<div class="outline-text-3" id="text-orgdaa714f">
<p>
This sets up tuigreeter which is not fancy but imo fits the aesthetic I am aiming for
</p>
<div class="org-src-container">
<pre class="src src-nix">{ config, pkgs, lib, ... }:
let
tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet";
sessionsDir = "${pkgs.hyprland}/share/wayland-sessions";
in
{
#################################
# Greetd (tuigreet)
#################################
services.greetd = {
enable = true;
settings = {
default_session = {
command = ''
${tuigreetBin} \
--time \
--remember \
--remember-session \
--sessions ${sessionsDir} \
--cmd "start-hyprland"
'';
user = "greeter";
};
};
};
#################################
# Fix TTY / boot noise issues
#################################
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal";
# Prevent boot log spam on tty
TTYReset = true;
TTYVHangup = true;
TTYVTDisallocate = true;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org35937f6" class="outline-3">
<h3 id="org35937f6"><code>generated/modules/traveldroid/system/networking.nix</code></h3>
<div class="outline-text-3" id="text-org35937f6">
<p>
This sets the networking.
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, ... }:
{
#################################
# Networking core
#################################
networking = {
# Let DHCP be default unless overridden elsewhere
useDHCP = lib.mkDefault true;
# Hostname comes from host.nix, do NOT redefine here
#################################
# NetworkManager (primary stack)
#################################
networkmanager = {
enable = true;
# Use iwd backend for WiFi
wifi.backend = "iwd";
};
#################################
# iwd (WiFi daemon)
#################################
wireless.iwd = {
enable = true;
# Allow user control via NM / CLI
settings.General.EnableNetworkConfiguration = true;
};
#################################
# Firewall
#################################
firewall = {
enable = true;
# KDE Connect support
allowedTCPPortRanges = [
{ from = 1714; to = 1764; }
];
allowedUDPPortRanges = [
{ from = 1714; to = 1764; }
];
};
};
#################################
# System packages
#################################
environment.systemPackages = [
pkgs.networkmanager
pkgs.linux-firmware
pkgs.networkmanagerapplet
];
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org8fc605c" class="outline-3">
<h3 id="org8fc605c"><code>generated/modules/traveldroid/system/nix.nix</code></h3>
<div class="outline-text-3" id="text-org8fc605c">
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, ... }:
{
nix.settings = {
experimental-features = [ "nix-command" "flakes" ];
download-buffer-size = 536870912; # 512 MB
cores = 2;
max-jobs = 1;
};
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org977ae45" class="outline-3">
<h3 id="org977ae45"><code>generated/modules/traveldroid/system/printing.nix</code></h3>
<div class="outline-text-3" id="text-org977ae45">
<p>
This sets the dbus implementation
</p>
<div class="org-src-container">
<pre class="src src-nix">{ lib, config, pkgs, ... }:
{
############################
# Printing system
############################
services.printing.enable = true; # enable CUPS printing service
############################
# System packages for GUI management
############################
environment.systemPackages = with pkgs; [
system-config-printer # GUI to manage printers
];
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgfda1ee2" class="outline-2">
<h2 id="orgfda1ee2">generated/users</h2>
<div class="outline-text-2" id="text-orgfda1ee2">
</div>
<div id="outline-container-orgfe316b5" class="outline-3">
<h3 id="orgfe316b5"><code>generated/users/</code></h3>
<div class="outline-text-3" id="text-orgfe316b5">
<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">{ lib, config, pkgs, ... }:
let
username = "henrov";
in
{
#################################
# NixOS system user
#################################
users.users.${username} = {
isNormalUser = true;
home = "/home/${username}";
hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/";
extraGroups = [ "wheel" "networkmanager" "bluetooth" ];
ignoreShellProgramCheck = true; # &lt;-- avoids the assertion
shell = pkgs.zsh;
};
#################################
# Home Manager user definition
#################################
home-manager.users = {
${username} = {
home.username = username;
home.homeDirectory = "/home/${username}";
home.stateVersion = "26.05";
programs.zsh.enable = true;
home.packages = [
# add packages here
];
# Activation to ensure the directory is writable
home.activation.fixStylixPermissions = ''
mkdir -p $HOME/.config
chmod -R u+rwx $HOME/.config
'';
# Locale and timezone settings
home.sessionVariables = {
LANG = "nl_NL.UTF-8";
LC_ALL = "nl_NL.UTF-8";
TZ = "Europe/Amsterdam";
};
};
};
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-the-config-files" class="outline-2">
<h2 id="the-config-files">These are all the prepared config files</h2>
<div class="outline-text-2" id="text-the-config-files">
</div>
<div id="outline-container-orga691e26" class="outline-3">
<h3 id="orga691e26"><code>generated/.config/emacs/early-init.el</code></h3>
<div class="outline-text-3" id="text-orga691e26">
<p>
This contaions emacs
</p>
<div class="org-src-container">
<pre class="src src-el">;;; 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 &amp; 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-orgd34773d" class="outline-3">
<h3 id="orgd34773d"><code>generated/.config/emacs/init.el</code></h3>
<div class="outline-text-3" id="text-orgd34773d">
<p>
This contaions emacs
</p>
<div class="org-src-container">
<pre class="src src-el">;;; 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-&lt;wheel-up&gt;" . pixel-scroll-precision) ; dont zoom in please, just scroll
("C-&lt;wheel-down&gt;" . 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 "&lt;"))
(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-org227b56f" class="outline-3">
<h3 id="org227b56f"><code>generated/.config/hypr/animations.conf</code></h3>
<div class="outline-text-3" id="text-org227b56f">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf"># ./assets/conf/desktop/hypr/animations.conf
animations {
enabled = yes
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org2bddaea" class="outline-3">
<h3 id="org2bddaea"><code>generated/.config/hypr/behaviour.conf</code></h3>
<div class="outline-text-3" id="text-org2bddaea">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf"># Keyboard and mouse settings
# Scrolling modifier settings
# Touchpad settings (applies to all touchpads)
# Focus settings
# Miscellaneous settings
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb84c26b" class="outline-3">
<h3 id="orgb84c26b"><code>generated/.config/hypr/bindings.conf</code></h3>
<div class="outline-text-3" id="text-orgb84c26b">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf">$mainMod = SUPER
# Terminal / launcher / kill / reload
bind = $mainMod, E, exec, thunar
bind = $mainMod, RETURN, exec, kitty
bind = $mainMod, Space, exec, wofi --show drun --style ~/.config/wofi/style.css
bind = ALT, Space, exec, wofi --show drun
bind = $mainMod, Q, killactive,
bind = $mainMod SHIFT, Q, exit,
bind = $mainMod SHIFT, R, exec, hyprctl reload
# Switch windows
bind = ALT, TAB, cyclenext,
# bind = ALT SHIFT, TAB, cyclenext prev
# switch layouts
# Hyprscrolling
bind = $mainMod, period, layoutmsg, move +col
bind = $mainMod, comma, layoutmsg, swapcol l
# Make / break a tab-group (stack)
bind = $mainMod, S, togglegroup
# Cycle tabs in the group
bind = $mainMod, L, changegroupactive, f
bind = $mainMod, H, changegroupactive, b
bind = $mainMod, T, exec, ~/.config/hypr/scripts/layout-selector.sh
# Focus movement
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Move windows
bind = $mainMod SHIFT, H, movewindow, l
bind = $mainMod SHIFT, L, movewindow, r
bind = $mainMod SHIFT, K, movewindow, u
bind = $mainMod SHIFT, J, movewindow, d
bind = $mainMod SHIFT, left, movewindow, l
bind = $mainMod SHIFT, right, movewindow, r
bind = $mainMod SHIFT, up, movewindow, u
bind = $mainMod SHIFT, down, movewindow, d
# Resize windows
bind = $mainMod CTRL, H, resizeactive, -30 0
bind = $mainMod CTRL, L, resizeactive, 30 0
bind = $mainMod CTRL, K, resizeactive, 0 -30
bind = $mainMod CTRL, J, resizeactive, 0 30
# Floating / fullscreen
bind = $mainMod, V, togglefloating,
bind = $mainMod, F, fullscreen, 0
bind = $mainMod SHIFT, F, fullscreen, 1
# Workspaces
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Cycle workspaces
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Mouse drag
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
#########################
# Screenshots
#########################
bind = $mainMod SHIFT, s, exec, flameshot gui
bind = , XF86Screenshot, exec, flameshot full -c -p ~/Pictures/Screenshots
#########################
# Audio (pamixer)
#########################
bind = , XF86AudioRaiseVolume, exec, pamixer -i 5
bind = , XF86AudioLowerVolume, exec, pamixer -d 5
bind = , XF86AudioMute, exec, pamixer -t
bind = , XF86AudioMicMute, exec, pamixer --default-source -t
#########################
# Media (playerctl)
#########################
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioPause, exec, playerctl pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86AudioStop, exec, playerctl stop
#########################
# Brightness (brightnessctl)
#########################
bind = , XF86MonBrightnessUp, exec, brightnessctl set +10%
bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%-
bind = , XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10%
bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%-
#########################
# Power / session
#########################
bind = , XF86Sleep, exec, systemctl suspend
bind = , XF86PowerOff, exec, systemctl poweroff
bind = , XF86WakeUp, exec, systemctl suspend
bind = $mainMod, L, exec, loginctl lock-session
# bind = $mainMod, X, exec, ~/.config/hypr/scripts/powermenu.sh
#########################
# Laptop lid settings
#########################
bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/lid-action.sh
bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/lid-restore.sh
#########################
# Start apps
#########################
bind = CTRL ALT, B, exec, flatpak run eu.betterbird.Betterbird
bind = CTRL ALT, S, exec, spotify
bind = $mainMod, Z, exec, zeditor
bind = $mainMod, W, exec, zen
#########################
# Auto apps
#########################
bind = , workspace, exec, ~/.config/hypr/scripts/set-workspace-wallpaper.sh
#########################
# System stuff
#########################
bind = $mainMod, U, exec, sudo nixos-rebuild switch --upgrade &amp;&amp; flatpak update
</pre>
</div>
</div>
</div>
<div id="outline-container-org2bbdaee" class="outline-3">
<h3 id="org2bbdaee"><code>generated/.config/hypr/exec-once.conf</code></h3>
<div class="outline-text-3" id="text-org2bbdaee">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf">exec-once = dbus-update-activation-environment --systemd --all
exec-once = hypridleconfig/hypr/exec-once
exec-once = systemd-run --user --scope --unit=elephant elephant
exec-once = waybar
exec-once = awww-daemon
exec-once = awww img ~/Wallpapers/pictures/01.jpg
exec-once = ~/.config/hypr/scripts/set-workspace-wallpaper.sh
exec-once = ~/.config/hypr/scripts/workspace-listener.sh
exec-once = /run/current-system/sw/libexec/polkit-gnome-authentication-agent-1
exec-once = nextcloud --background
</pre>
</div>
</div>
</div>
<div id="outline-container-org3083106" class="outline-3">
<h3 id="org3083106"><code>generated/.config/hypr/hypridle.conf</code></h3>
<div class="outline-text-3" id="text-org3083106">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf">general {
lock_cmd = hyprlock
after_sleep_cmd = hyprctl dispatch dpms on
ignore_dbus_inhibit = false
}
listener {
timeout = 600
on-timeout = hyprlock
}
listener {
timeout = 900
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf4c2ee2" class="outline-3">
<h3 id="orgf4c2ee2"><code>generated/.config/hypr/hyprland.conf</code></h3>
<div class="outline-text-3" id="text-orgf4c2ee2">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-json">source = ./theming.css
source = ./animations.conf
source = ./bindings.conf
source = ./behaviour.conf
source = ./exec-once.conf
source = ./layer-rules.conf
source = ./layout.conf
source = ./monitor-rules.conf
source = ./window-rules.conf
source = ./workspace-rules.conf
decoration {
shadow {
color=rgba(1e1e2e99)
}
}
general {
col.active_border= 0xff89b4fa 0xff97cbcd
col.inactive_border=rgb(45475a)
}
group {
groupbar {
col.active=rgb(89b4fa)
col.inactive=rgb(45475a)
text_color=rgb(cdd6f4)
}
col.border_active=rgb(89b4fa)
col.border_inactive=rgb(45475a)
col.border_locked_active=rgb(94e2d5)
}
misc {
background_color=rgb(1e1e2e)
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org767b949" class="outline-3">
<h3 id="org767b949"><code>generated/.config/hypr/hyprlock.conf</code></h3>
<div class="outline-text-3" id="text-org767b949">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf"># ~/.config/hypr/hyprlock.conf
general {
grace = 2
ignore_empty_input = true
}
background {
path = ~/.config/hypr/lock.png
blur_passes = 2
blur_size = 6
}
input-field {
size = 320, 60
outline_thickness = 2
dots_size = 0.25
dots_spacing = 0.20
fade_on_empty = true
placeholder_text = "Password"
position = 0, -120
halign = center
valign = center
}
label {
text = $TIME
font_size = 72
position = 0, 120
halign = center
valign = center
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org6f634c2" class="outline-3">
<h3 id="org6f634c2"><code>generated/.config/hypr/layer-rules.conf</code></h3>
<div class="outline-text-3" id="text-org6f634c2">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf">layerrule = blur on, ignore_alpha 1, match:namespace waybar
layerrule = xray 1, match:namespace waybar
layerrule = blur on, ignore_alpha 1, match:namespace walker
layerrule = xray 1, match:namespace walker
layerrule = blur on, ignore_alpha 1, match:namespace swaync-control-center
layerrule = blur on, ignore_alpha 1, match:namespace swaync-notification-window
</pre>
</div>
</div>
</div>
<div id="outline-container-org240c2b3" class="outline-3">
<h3 id="org240c2b3"><code>generated/.config/hypr/layout.conf</code></h3>
<div class="outline-text-3" id="text-org240c2b3">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf">workspace_layouts = dwindle, master, scrolling, monocle
</pre>
</div>
</div>
</div>
<div id="outline-container-org420b26e" class="outline-3">
<h3 id="org420b26e"><code>generated/.config/hypr/monitor-rules.conf</code></h3>
<div class="outline-text-3" id="text-org420b26e">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf"># Default portable monitor rule
monitor=DP-1,3840x1080@144,1920x0,1
</pre>
</div>
</div>
</div>
<div id="outline-container-org9b2ee0f" class="outline-3">
<h3 id="org9b2ee0f"><code>generated/.config/hypr/scripts/layout-selector.sh</code></h3>
<div class="outline-text-3" id="text-org9b2ee0f">
<p>
These are config files for .config/hypr/scripts
</p>
<div class="org-src-container">
<pre class="src src-bash">#!/usr/bin/env bash
# layout-selector.sh
# Select a workspace layout using Wofi, shows description, applies with layoutmsg
# Define layouts and descriptions
declare -A LAYOUTS=(
[dwindle]="舘 Dwindle: Auto-tiling, windows shrink progressively"
[master]=" Master: One main window, others stacked"
[scrolling]=" Scrolling: Vertical list, scroll through windows"
[monocle]=" Monocle: One window fills the screen"
[floating]=" Floating: Free move &amp; resize"
)
ORDER=(dwindle master scrolling monocle floating)
# Prepare Wofi menu: show "layoutname: description"
MENU_ITEMS=()
for key in "${ORDER[@]}"; do
MENU_ITEMS+=("$key: ${LAYOUTS[$key]}")
done
# Show selection menu via Wofi
CHOICE=$(printf '%s\n' "${MENU_ITEMS[@]}" | wofi --dmenu --prompt "Select Layout")
# Exit if cancelled
[ -z "$CHOICE" ] &amp;&amp; exit 0
# Extract layout name from selection (before colon)
LAYOUT_NAME="${CHOICE%%:*}"
# Apply layout via layoutmsg
hyprctl dispatch layoutmsg setlayout "$LAYOUT_NAME"
# Show OSD feedback
hyprctl dispatch oSD "Layout: $LAYOUT_NAME" 2000
</pre>
</div>
</div>
</div>
<div id="outline-container-org1196561" class="outline-3">
<h3 id="org1196561"><code>generated/.config/hypr/theming.css</code></h3>
<div class="outline-text-3" id="text-org1196561">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-css"># Hyprland Catppuccin Mocha Theme (solid colors)
# Colors
$base = #1e1e2e
$mantle = #181825
$surface0 = #313244
$surface1 = #45475a
$surface2 = #585b70
$text = #cdd6f4
$rosewater = #f5e0dc
$lavender = #b4befe
$red = #f38ba8
$peach = #fab387
$yellow = #f9e2af
$green = #a6e3a1
$teal = #94e2d5
$blue = #89b4fa
$mauve = #cba6f7
$flamingo = #f2cdcd
$inactive = #595959aa
# General theming
general {
gaps_in = 2
gaps_out = 4
border_size = 4
layout = scrolling
resize_on_border = true
extend_border_grab_area = 20
# Solid-color borders
#col.active_border = "0xff89b4fa 0xffa6e3a1"
#col.active_border = #a6e3a1
#col.inactive_border = #595959aa
}
# Window decorations
decoration {
rounding = 8
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbd935b6" class="outline-3">
<h3 id="orgbd935b6"><code>generated/.config/hypr/window-rules.conf</code></h3>
<div class="outline-text-3" id="text-orgbd935b6">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-toml">
# Network Manager editor
windowrule {
name = Network-Manager-editor
match:class = nm-connection-editor
float = on
move = move onscreen 100%-w 0
size = 900 700
}
# PulseAudio Volume Control
windowrule {
name = pavucontrol
match:class = org.pulseaudio.pavucontrol
float = on
move = move onscreen 100%-w 0
size = 900 700
}
# Blueman Manager
windowrule {
name = blueman
match:class = .blueman-manager-leaderped
float = on
move = move onscreen 100%-w 0
size = 900 700
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfdad515" class="outline-3">
<h3 id="orgfdad515"><code>generated/.config/hypr/workspace-rules.conf</code></h3>
<div class="outline-text-3" id="text-orgfdad515">
<p>
These are config files for .config/hypr
</p>
<div class="org-src-container">
<pre class="src src-conf">
#Load random wallpaper
workspacecreated = exec $HOME/.local/bin/wallpaper-sync-and-set.sh $workspace
# Workspace definitions (modern syntax)
workspace = 1
workspace = 2
workspace = 3
workspace = 4
workspace = 5
workspace = 6
workspace = 7
workspace = 8
workspace = 9
workspace = 10
</pre>
</div>
</div>
</div>
<div id="outline-container-org799f64d" class="outline-3">
<h3 id="org799f64d"><code>generated/.config/scripts/update.sh</code></h3>
<div class="outline-text-3" id="text-org799f64d">
<p>
A file containing color variables
</p>
<div class="org-src-container">
<pre class="src src-sh">#!/usr/bin/env bash
set -e
REPO="$HOME/Repos/nixos/Droidnix" # adjust this to your flake repo path
HOSTNAME="$(hostname)"
cd "$REPO"
echo "🔄 Updating flake..."
nix flake update
echo "🏗 Rebuilding NixOS..."
sudo nixos-rebuild switch --flake ".#$HOSTNAME"
echo "📦 Updating Flatpaks..."
flatpak update -y
</pre>
</div>
</div>
</div>
<div id="outline-container-org958f17c" class="outline-3">
<h3 id="org958f17c"><code>generated/.config/shared/colors.css</code></h3>
<div class="outline-text-3" id="text-org958f17c">
<p>
A file containing color variables
</p>
<div class="org-src-container">
<pre class="src src-css">/* Catppuccin Mocha Palette */
@define-color crust #11111b;
@define-color mantle #181825;
@define-color base #1e1e2e;
@define-color base-alpha rgba(30, 30, 46, 0.9);
@define-color surface0 #313244;
@define-color surface1 #45475a;
@define-color surface2 #585b70;
@define-color overlay0 #6c7086;
@define-color overlay1 #7f849c;
@define-color overlay2 #9399b2;
@define-color subtext0 #a6adc8;
@define-color subtext1 #bac2de;
@define-color text #cdd6f4;
@define-color rosewater #f5e0dc;
@define-color flamingo #f2cdcd;
@define-color pink #f5c2e7;
@define-color mauve #cba6f7;
@define-color red #f38ba8;
@define-color maroon #eba0ac;
@define-color peach #fab387;
@define-color yellow #f9e2af;
@define-color green #a6e3a1;
@define-color teal #94e2d5;
@define-color sapphire #74c7ec;
@define-color blue #89b4fa;
@define-color lavender #b4befe;
</pre>
</div>
</div>
</div>
<div id="outline-container-org1e89d7c" class="outline-3">
<h3 id="org1e89d7c"><code>generated/.config/starship.toml</code></h3>
<div class="outline-text-3" id="text-org1e89d7c">
<p>
These are config files for Starship
</p>
<div class="org-src-container">
<pre class="src src-toml">"$schema" = 'https://starship.rs/config-schema.json'
format = """
[](red)\
$os\
$username\
[](bg:peach fg:red)\
$directory\
[](bg:yellow fg:peach)\
$git_branch\
$git_status\
[](fg:yellow bg:green)\
$c\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:green bg:sapphire)\
$conda\
[](fg:sapphire bg:lavender)\
$time\
[ ](fg:lavender)\
$cmd_duration\
$line_break\
$character"""
palette = 'catppuccin_mocha'
[os]
disabled = false
style = "bg:red fg:crust"
[os.symbols]
Windows = ""
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
AOSC = ""
Arch = "󰣇"
Artix = "󰣇"
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"
[username]
show_always = true
style_user = "bg:red fg:crust"
style_root = "bg:red fg:crust"
format = '[ $user]($style)'
[directory]
style = "bg:peach fg:crust"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = "󰝚 "
"Pictures" = " "
"Developer" = "󰲋 "
[git_branch]
symbol = ""
style = "bg:yellow"
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'
[git_status]
style = "bg:yellow"
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'
[nodejs]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[c]
symbol = " "
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[rust]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[golang]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[php]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[java]
symbol = " "
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[kotlin]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[haskell]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
[python]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'
[docker_context]
symbol = ""
style = "bg:sapphire"
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'
[conda]
symbol = "  "
style = "fg:crust bg:sapphire"
format = '[$symbol$environment ]($style)'
ignore_base = false
[time]
disabled = false
time_format = "%R"
style = "bg:lavender"
format = '[[  $time ](fg:crust bg:lavender)]($style)'
[line_break]
disabled = false
[character]
disabled = false
success_symbol = '[](bold fg:green)'
error_symbol = '[](bold fg:red)'
vimcmd_symbol = '[](bold fg:green)'
vimcmd_replace_one_symbol = '[](bold fg:lavender)'
vimcmd_replace_symbol = '[](bold fg:lavender)'
vimcmd_visual_symbol = '[](bold fg:yellow)'
[cmd_duration]
show_milliseconds = true
format = " in $duration "
style = "bg:lavender"
disabled = false
show_notifications = true
min_time_to_notify = 45000
[palettes.catppuccin_mocha]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"
[palettes.catppuccin_frappe]
rosewater = "#f2d5cf"
flamingo = "#eebebe"
pink = "#f4b8e4"
mauve = "#ca9ee6"
red = "#e78284"
maroon = "#ea999c"
peach = "#ef9f76"
yellow = "#e5c890"
green = "#a6d189"
teal = "#81c8be"
sky = "#99d1db"
sapphire = "#85c1dc"
blue = "#8caaee"
lavender = "#babbf1"
text = "#c6d0f5"
subtext1 = "#b5bfe2"
subtext0 = "#a5adce"
overlay2 = "#949cbb"
overlay1 = "#838ba7"
overlay0 = "#737994"
surface2 = "#626880"
surface1 = "#51576d"
surface0 = "#414559"
base = "#303446"
mantle = "#292c3c"
crust = "#232634"
[palettes.catppuccin_latte]
rosewater = "#dc8a78"
flamingo = "#dd7878"
pink = "#ea76cb"
mauve = "#8839ef"
red = "#d20f39"
maroon = "#e64553"
peach = "#fe640b"
yellow = "#df8e1d"
green = "#40a02b"
teal = "#179299"
sky = "#04a5e5"
sapphire = "#209fb5"
blue = "#1e66f5"
lavender = "#7287fd"
text = "#4c4f69"
subtext1 = "#5c5f77"
subtext0 = "#6c6f85"
overlay2 = "#7c7f93"
overlay1 = "#8c8fa1"
overlay0 = "#9ca0b0"
surface2 = "#acb0be"
surface1 = "#bcc0cc"
surface0 = "#ccd0da"
base = "#eff1f5"
mantle = "#e6e9ef"
crust = "#dce0e8"
[palettes.catppuccin_macchiato]
rosewater = "#f4dbd6"
flamingo = "#f0c6c6"
pink = "#f5bde6"
mauve = "#c6a0f6"
red = "#ed8796"
maroon = "#ee99a0"
peach = "#f5a97f"
yellow = "#eed49f"
green = "#a6da95"
teal = "#8bd5ca"
sky = "#91d7e3"
sapphire = "#7dc4e4"
blue = "#8aadf4"
lavender = "#b7bdf8"
text = "#cad3f5"
subtext1 = "#b8c0e0"
subtext0 = "#a5adcb"
overlay2 = "#939ab7"
overlay1 = "#8087a2"
overlay0 = "#6e738d"
surface2 = "#5b6078"
surface1 = "#494d64"
surface0 = "#363a4f"
base = "#24273a"
mantle = "#1e2030"
crust = "#181926"
</pre>
</div>
</div>
</div>
<div id="outline-container-org4613101" class="outline-3">
<h3 id="org4613101"><code>generated/.config/stylix/stylix.conf</code></h3>
<div class="outline-text-3" id="text-org4613101">
<p>
These are config files for .config/stylix
</p>
<div class="org-src-container">
<pre class="src src-conf">enable = true;
base16Scheme = ../../../assets/system/theming/stylix/catppuccin-mocha.yaml;
image = ../../../assets/hyprland/wallpaperstuff/pictures/wall1.jpg;
polarity = "dark";
cursor = {
package = "phinger-cursors"; # symbolic reference
name = "phinger-cursors-light";
size = 24;
};
fonts = {
monospace = {
package = "nerd-fonts-fira-code";
name = "Fira Code Nerd Font";
};
sansSerif = {
package = "lato";
name = "Lato";
};
};
icons = {
enable = true;
package = "papirus-icon-theme";
dark = "Papirus-Dark";
light = "Papirus-Light";
};
</pre>
</div>
</div>
</div>
<div id="outline-container-org088a87c" class="outline-3">
<h3 id="org088a87c"><code>generated/.config/stylix/palette.json</code></h3>
<div class="outline-text-3" id="text-org088a87c">
<p>
These are config files for .config/stylix
</p>
<div class="org-src-container">
<pre class="src src-json">{
"base00": "1e1e2e",
"base01": "181825",
"base02": "313244",
"base03": "45475a",
"base04": "585b70",
"base05": "cdd6f4",
"base06": "f5e0dc",
"base07": "b4befe",
"base08": "f38ba8",
"base09": "fab387",
"base0A": "f9e2af",
"base0B": "a6e3a1",
"base0C": "94e2d5",
"base0D": "89b4fa",
"base0E": "cba6f7",
"base0F": "f2cdcd",
"author": "https://github.com/catppuccin/catppuccin",
"scheme": "Catppuccin Mocha",
"slug": "catppuccin-mocha"
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb378784" class="outline-3">
<h3 id="orgb378784"><code>generated/.config/stylix/palette.html</code></h3>
<div class="outline-text-3" id="text-orgb378784">
<p>
These are config files for .config/stylix
</p>
<div class="org-src-container">
<pre class="src src-html">&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
body {
margin: 2rem;
font-family: sans-serif;
}
body &gt; div {
display: flex;
flex-direction: row;
flex-leader: wrap;
gap: 1em;
}
body &gt; div &gt; div {
width: 5rem;
height: 5rem;
display: flex;
justify-content: center;
align-items: center;
}
#base00 { background-color: #1e1e2e; color: #cdd6f4; }
#base01 { background-color: #181825; color: #cdd6f4; }
#base02 { background-color: #313244; color: #cdd6f4; }
#base03 { background-color: #45475a; color: #1e1e2e; }
#base04 { background-color: #585b70; color: #1e1e2e; }
#base05 { background-color: #cdd6f4; color: #1e1e2e; }
#base06 { background-color: #f5e0dc; color: #1e1e2e; }
#base07 { background-color: #b4befe; color: #1e1e2e; }
#base08 { background-color: #f38ba8; color: #1e1e2e; }
#base09 { background-color: #fab387; color: #1e1e2e; }
#base0A { background-color: #f9e2af; color: #1e1e2e; }
#base0B { background-color: #a6e3a1; color: #1e1e2e; }
#base0C { background-color: #94e2d5; color: #1e1e2e; }
#base0D { background-color: #89b4fa; color: #1e1e2e; }
#base0E { background-color: #cba6f7; color: #1e1e2e; }
#base0F { background-color: #f2cdcd; color: #1e1e2e; }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;Primary colors&lt;/h2&gt;
&lt;div&gt;
&lt;div id="base00"&gt;00&lt;/div&gt;
&lt;div id="base01"&gt;01&lt;/div&gt;
&lt;div id="base02"&gt;02&lt;/div&gt;
&lt;div id="base03"&gt;03&lt;/div&gt;
&lt;div id="base04"&gt;04&lt;/div&gt;
&lt;div id="base05"&gt;05&lt;/div&gt;
&lt;div id="base06"&gt;06&lt;/div&gt;
&lt;div id="base07"&gt;07&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Accents&lt;/h2&gt;
&lt;div&gt;
&lt;div id="base08"&gt;08&lt;/div&gt;
&lt;div id="base09"&gt;09&lt;/div&gt;
&lt;div id="base0A"&gt;0A&lt;/div&gt;
&lt;div id="base0B"&gt;0B&lt;/div&gt;
&lt;div id="base0C"&gt;0C&lt;/div&gt;
&lt;div id="base0D"&gt;0D&lt;/div&gt;
&lt;div id="base0E"&gt;0E&lt;/div&gt;
&lt;div id="base0F"&gt;0F&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;p&gt;Each color should be used as described in &lt;a href="https://github.com/chriskempson/base16/blob/main/styling.md#styling-guidelines"&gt; this table&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a href="https://nix-community.github.io/stylix"&gt;Stylix documentation&lt;/a&gt; for how to apply these colors on NixOS.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
</div>
</div>
</div>
<div id="outline-container-orgee326dc" class="outline-3">
<h3 id="orgee326dc"><code>generated/.config/waybar/config</code></h3>
<div class="outline-text-3" id="text-orgee326dc">
<p>
These are config files for waybar
</p>
<div class="org-src-container">
<pre class="src src-jsonc">{
"layer": "top",
"position": "top",
"autohide": true,
"autohide-blocked": false,
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
/*******************************************************************/
"modules-left": [],
"modules-center": [
"group/connections",
"group/workspaces",
"group/hardware",
],
"modules-right": [
"group/audio",
"tray",
"clock",
"idle_inhibitor"
],
/*******************************************************************/
"group/workspaces": {
"orientation": "horizontal",
"modules": [
"hyprland/workspaces",
"custom/windows"
]
},
/*******************************************************************/
"group/hardware": {
"orientation": "horizontal",
"drawer": {
"transition-duration": 500,
"transition-left-to-right": true
},
"modules": [
"custom/hardware-anchor",
"battery",
"cpu",
"memory",
"temperature"
]
},
"custom/hardware-anchor": {
"format": " ",
"tooltip": false
},
/*************************/
"group/connections": {
"orientation": "horizontal",
"drawer": {
"transition-duration": 500,
"transition-left-to-right": true
},
"modules": [
"custom/connections-anchor",
"custom/bluetooth",
"network"
]
},
"custom/connections-anchor": {
"format": " ",
"tooltip": false
},
/*************************/
"group/audio": {
"orientation": "horizontal",
"modules": [
"pulseaudio",
"pulseaudio/slider",
]
},
/*******************************************************************/
"hyprland/workspaces": {
"align": 1,
"format": "{name}",
"interval": 2,
},
"custom/windows": {
"align": 0,
"format": "{text}",
"exec": "~/.config/waybar/scripts/hypr-workspaces.sh",
"interval": 2,
"return-type": "json",
"on-click": "~/.config/waybar/scripts/hypr-workspacesmenu.sh",
"tooltip": true
},
"custom/bluetooth": {
"exec": "~/.config/waybar/scripts/bluetooth-status.sh",
"interval": 5,
"return-type": "json",
"on-click": "blueman-manager",
"format": "{}"
},
"idle_inhibitor": {
"tooltip": true,
"format": "{icon}",
"format-icons": {
"activated": "  ",
"deactivated": " 󰒲 "
},
"tooltip-format-activated": "Staying awake",
"tooltip-format-deactivated": "Might sleep...."
},
"pulseaudio": {
"format": "{volume}% {icon}",
"format-bluetooth": "{volume}% {icon}",
"format-muted": "",
"format-icons": {
"headphones": "",
"headset": "",
"phone": "",
"portable": "",
"default": ["", ""]
},
"on-click": "pavucontrol"
},
"pulseaudio/slider": {
"min": 0,
"max": 100,
"orientation": "horizontal"
},
"network": {
"format-wifi": " ({bandwidthDownBits})",
"format-ethernet": " ({bandwidthDownBits})",
"format-disconnected": "Disconnected ⚠",
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
"tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}",
"on-click": "nm-connection-editor"
},
"cpu": {
"format": "{usage}%  ",
"tooltip": false
},
"memory": {
"format": "{percentage}%  "
},
"temperature": {
"format": "{temperatureC}°C ",
"tooltip": false
},
"tray": {
"spacing": 10,
"icon-size": 14
},
"clock": {
"format": "{:%H:%M}",
"tooltip-format": "&lt;tt&gt;&lt;small&gt;{calendar}&lt;/small&gt;&lt;/tt&gt;",
"calendar": {
"mode" : "year",
"mode-mon-col" : 3,
"weeks-pos" : "right",
"on-scroll" : 1,
"on-click-right": "mode",
"format": {
"months": "&lt;span color='#ffead3'&gt;&lt;b&gt;{}&lt;/b&gt;&lt;/span&gt;",
"days": "&lt;span color='#ecc6d9'&gt;&lt;b&gt;{}&lt;/b&gt;&lt;/span&gt;",
"weeks": "&lt;span color='#99ffdd'&gt;&lt;b&gt;W{}&lt;/b&gt;&lt;/span&gt;",
"weekdays": "&lt;span color='#ffcc66'&gt;&lt;b&gt;{}&lt;/b&gt;&lt;/span&gt;",
"today": "&lt;span color='#ff6699'&gt;&lt;b&gt;&lt;u&gt;{}&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;"
}
},
"on-click": "flatpak run eu.betterbird.Betterbird -calendar"
},
"battery": {
"bat": "BAT0",
"states": {
"good": 95,
"warning": 30,
"critical": 15
},
"format": "{capacity}% {icon}",
"format-charging": "{capacity}% 󰂄",
"format-plugged": "{capacity}%  ",
"format-icons": ["󰁺", "󰁼", "󰁾", "󰂀", "󱈏 "]
}
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org2f9225b" class="outline-3">
<h3 id="org2f9225b"><code>generated/.config/waybar/style.css</code></h3>
<div class="outline-text-3" id="text-org2f9225b">
<p>
This file contains all css for waybar
</p>
<div class="org-src-container">
<pre class="src src-css">@import url("file:///home/henrov/.config/shared/colors.css");
/* --- Global --- */
* {
font-family:
Aporetic Sans Mono,
Iosevka Nerd Font,
Roboto,
Helvetica,
Arial,
sans-serif;
font-size: 13px;
}
window#waybar {
background-color: transparent;
color: @text;
}
/* --------------------------------------------------------- */
/* --- Group anchors default visible --- */
#custom-hardware-anchor,
#custom-connections-anchor {
min-width: 80px;
padding: 0 5px;
margin: 0 2px;
opacity: 1;
transition: opacity 0.2s ease, min-width 0.2s ease, padding 0.2s ease;
}
/* --- Hide anchors on hover of the group --- */
#hardware:hover #custom-hardware-anchor,
#connections:hover #custom-connections-anchor {
opacity: 0;
min-width: 0;
padding: 0;
margin: 0;
}
#hardware:hover,
#connections:hover {
min-width: 80px;
}
/* MODULES */
.modules-left &gt; widget,
.modules-center &gt; widget,
.modules-right &gt; widget {
min-width: 80px;
color: @text;
font-weight: bold;
border-radius: 30px;
background:
linear-gradient(@base-alpha, @base-alpha) padding-box,
linear-gradient(45deg, @blue, @green) border-box;
border: 2px solid transparent;
}
.modules-left &gt; box + box,
.modules-center &gt; box + box,
.modules-right &gt; box + box {
margin-left: 5px;
}
.modules-left &gt; widget label,
.modules-left &gt; label ,
.modules-center &gt; widget label,
.modules-center &gt; label,
.modules-right &gt; widget label,
.modules-right &gt; label {
padding: 0px 5px;
transition: padding 0.2s ease;
}
/* --------------------------------------------------------- */
/* SLIDERS / SPECIAL MODULES */
/* -----------------------------
WORKSPACES / WINDOWS MODULE
----------------------------- */
/* Disable hover effects completely */
#workspaces button,
#workspaces button:hover {
border: 2px solid transparent;
padding: 0 6px;
margin: 0;
border-radius: 30px;
transition: none; /* disable hover animation */
}
/* Set custom/windows font to match workspace font */
#custom-windows label {
font-size: 14px;
font-weight: bold;
color: @teal;
}
/* Active vs inactive workspace colors */
#workspaces button.active {
background: linear-gradient(45deg, @blue, @green);
font-size: 14px;
color: @base;
}
activeworkspaces:not(.active) {
background: linear-gradient(@base-alpha, @base-alpha);
border: 2px solid transparent;
color: @text-muted; /* inactive text color */
}
#pulseaudio-slider {
padding: 0;
margin: 0;
}
#pulseaudio-slider slider {
min-height: 0px;
min-width: 0px;
opacity: 0;
border-radius: 30px;
background: linear-gradient(45deg, @blue, @green);
border: none;
box-shadow: none;
}
#pulseaudio-slider trough {
min-height: 10px;
min-width: 80px;
border-radius: 30px;
background: transparent;
}
#pulseaudio-slider highlight {
min-width: 10px;
border-radius: 30px;
background: linear-gradient(45deg, @blue, @green);
border: 2px solid transparent;
}
/* --------------------------------------------------------- */
/* STATES / SPECIALS */
#idle_inhibitor.activated {
background: linear-gradient(45deg, @blue, @green);
border: 2px solid transparent;
color: @base;
}
#battery.charging {
color: @green;
}
#battery.warning:not(.charging) {
color: white;
animation: blink 0.5s linear infinite alternate;
}
@keyframes blink {
to {
background-color: #ffffff;
color: black;
}
}
#network.disconnected {
background-color: @red;
}
#temperature.critical {
background-color: @red;
}
/* --------------------------------------------------------- */
/* GLOBAL MODULE SPACING */
#clock,
#idle_inhibitor,
#battery,
#cpu,
#memory,
#temperature,
#network,
#pulseaudio,
#tray {
margin: 0 5px;
padding: 0 10px;
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org03b503a" class="outline-3">
<h3 id="org03b503a"><code>generated/.config/waybar/scripts/bluetooth-status.sh</code></h3>
<div class="outline-text-3" id="text-org03b503a">
<p>
These are config files for waybar
</p>
<div class="org-src-container">
<pre class="src src-sh">#!/usr/bin/env bash
bt_connected=""
while read -r _ mac name_rest; do
if [ "$(bluetoothctl info "$mac" | awk '/Connected:/ {print $2}')" = "yes" ]; then
bt_connected+="$name_rest\n"
fi
done &lt; &lt;(bluetoothctl devices)
# icon
if [ -n "$bt_connected" ]; then
icon=""
tooltip=$(printf "%b" "$bt_connected")
else
icon=""
tooltip="No devices connected"
fi
# ALWAYS produce valid JSON
printf '{"text": "%s", "tooltip": "%s"}\n' "$icon" "$tooltip"
</pre>
</div>
</div>
</div>
<div id="outline-container-org821c20d" class="outline-3">
<h3 id="org821c20d"><code>generated/.config/waybar/scripts/hypr-workspaces.sh</code></h3>
<div class="outline-text-3" id="text-org821c20d">
<p>
These are config files for waybar
</p>
<div class="org-src-container">
<pre class="src src-sh">#!/usr/bin/env bash
# Get active workspace ID
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
# Get clients in active workspace
clients=$(hyprctl clients -j | jq -r \
".[] | select(.workspace.id==$active_ws) | \"\(.title)\"")
# Count clients
count=$(echo "$clients" | grep -c .)
# If no clients → hide module
if [ "$count" -eq 0 ]; then
jq -c -n '{text:"", class:"hidden"}'
exit 0
fi
# Build tooltip (newline separated)
tooltip=$(echo "$clients" | sed 's/^/• /' | paste -sd '\n' -)
# Output JSON
jq -c -n \
--arg text "$count" \
--arg tooltip "$tooltip" \
--arg class "active" \
'{text:$text, tooltip:$tooltip, class:$class}'
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdf0ae95" class="outline-3">
<h3 id="orgdf0ae95"><code>generated/.config/waybar/scripts/hypr-workspacesmenu.sh</code></h3>
<div class="outline-text-3" id="text-orgdf0ae95">
<p>
These are config files for waybar
</p>
<div class="org-src-container">
<pre class="src src-sh">#!/usr/bin/env bash
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
clients=$(hyprctl clients -j | jq -r \
".[] | select(.workspace.id==$active_ws) | \"\(.address)|\(.title)\"")
choice=$(echo "$clients" | cut -d'|' -f2 | wofi -dmenu -j -p "Active apps" --style ~/.config/wofi/style.css)
[ -z "$choice" ] &amp;&amp; exit 0
addr=$(echo "$clients" | grep "|$choice" | head -n1 | cut -d'|' -f1)
hyprctl dispatch focuswindow address:$addr
</pre>
</div>
</div>
</div>
<div id="outline-container-org4427ba7" class="outline-3">
<h3 id="org4427ba7"><code>generated/.config/waypaper/config.ini</code></h3>
<div class="outline-text-3" id="text-org4427ba7">
<p>
These are config files for waypaper
</p>
<div class="org-src-container">
<pre class="src src-conf">[Settings]
language = en
backend = awww
folder = ~/Wallpapers/pictures
monitors = All
wallpaper = ~/Wallpapers/pictures/13.jpg
show_path_in_tooltip = True
fill = fill
sort = name
color = #ffffff
subfolders = False
all_subfolders = False
show_hidden = False
show_gifs_only = False
zen_mode = False
post_command =
number_of_columns = 3
awww_transition_type = any
awww_transition_step = 63
awww_transition_angle = 0
awww_transition_duration = 2
awww_transition_fps = 60
mpvpaper_sound = False
mpvpaper_options =
use_xdg_state = False
stylesheet = /home/henrov/.config/waypaper/style.css
keybindings = ~/.config/waypaper/keybindings.ini
</pre>
</div>
</div>
</div>
<div id="outline-container-org834b098" class="outline-3">
<h3 id="org834b098"><code>generated/.config/waypaper/config.ini</code></h3>
<div class="outline-text-3" id="text-org834b098">
<p>
These are config files for .config/waypaper
</p>
<div class="org-src-container">
<pre class="src src-ini">[Settings]
language = en
backend = awww
folder = ~/Wallpapers/pictures
monitors = All
wallpaper = ~/Wallpapers/pictures/13.jpg
show_path_in_tooltip = True
fill = fill
sort = name
color = #ffffff
subfolders = False
all_subfolders = False
show_hidden = False
show_gifs_only = False
zen_mode = False
post_command =
number_of_columns = 3
awww_transition_type = any
awww_transition_step = 63
awww_transition_angle = 0
awww_transition_duration = 2
awww_transition_fps = 60
mpvpaper_sound = False
mpvpaper_options =
use_xdg_state = False
stylesheet = /home/henrov/.config/waypaper/style.css
keybindings = ~/.config/waypaper/keybindings.ini
</pre>
</div>
</div>
</div>
<div id="outline-container-org1bb3940" class="outline-3">
<h3 id="org1bb3940"><code>generated/.config/wofi/config</code></h3>
<div class="outline-text-3" id="text-org1bb3940">
<p>
These are config files for .config/wofi
</p>
<div class="org-src-container">
<pre class="src src-toml">[global]
allow_images = true
allow_markup = true
# Which modes are active
show_drun = true:apps,false:others
show_run = true
show_files = false
show_windowed = false
show_dmenu = false
show_ssh = false
show_power = false
# Layout / scrolling
location = center
anchor = center
lines = 10
columns = 1
sort_order = last-used
sort_method = fuzzy
allow_scrolling = true
scroll_wrap = true
scroll_step = 10
cycle = true
hide_scroll = false
hide_search = false
# Labels
show_labels = true
label_search = true
label_run = Run
label_files = Files
label_windowed = Windows
label_drun = Applications
label_dmenu = Commands
label_ssh = SSH
label_power = Power
prompt = &gt; ...
</pre>
</div>
</div>
</div>
<div id="outline-container-org9c38781" class="outline-3">
<h3 id="org9c38781"><code>generated/.config/wofi/style.css</code></h3>
<div class="outline-text-3" id="text-org9c38781">
<p>
These are config files for .config/wofi
</p>
<div class="org-src-container">
<pre class="src src-css">@import url("file:///home/henrov/.config/shared/colors.css");
/* Global styles */
* {
background-color: transparent;
color: @text;
font-family: "JetBrainsMono Nerd Font", monospace;
font-size: 12pt;
}
/* --- DRUN menu (full size) --- */
#main {
background:
linear-gradient(@base-alpha, @base-alpha) padding-box, /* Inner fill */
linear-gradient(45deg, @blue, @green) border-box; /* Gradient border */
border: 2px solid transparent; /* required for border-box layering */
border-radius: 30px;
padding: 20px;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
width: 800px;
height: 600px;
}
/* --- DMENU menu --- */
#dmenu {
background:
linear-gradient(@base-alpha, @base-alpha) padding-box,
linear-gradient(45deg, @blue, @green) border-box;
border: 2px solid transparent;
border-radius: 30px;
padding: 10px; /* smaller padding for half-height */
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
width: 800px;
height: 150px;
}
/* Input field */
#input {
background-color: @surface0;
color: @text;
border: 1px solid @surface1;
border-radius: 30px;
padding: 5px 10px;
margin-bottom: 10px;
}
/* Entries */
#entry {
background-color: rgba(200,200,200,0.2);
color: @text;
border-radius: 30px;
padding: 5px 10px;
margin: 2px 0;
border: 2px solid transparent; /* needed for gradient on selection */
transition: all 0.2s ease;
}
/* Entry focus (hover or typing) */
#entry:focus {
background:
linear-gradient(@base-alpha, @base-alpha) padding-box,
linear-gradient(45deg, @blue, @green) border-box;
color: @lavender;
border-radius: 30px;
}
/* Entry selection */
#entry:selected {
background:
linear-gradient(@base-alpha, @base-alpha) padding-box,
linear-gradient(45deg, @blue, @green) border-box;
color: @text;
border-radius: 30px;
}
/* Scrollbar */
#scrollbar {
background-color: @surface0;
border-radius: 30px;
width: 8px;
}
#scrollbar.handle {
background-color: @blue;
border-radius: 30px;
}
</pre>
</div>
</div>
</div>
<div id="outline-container-org551a5ca" class="outline-3">
<h3 id="org551a5ca"><code>generated/.config/zed/settings.json</code></h3>
<div class="outline-text-3" id="text-org551a5ca">
<p>
These are config files for Zed editor
</p>
<div class="org-src-container">
<pre class="src src-json">// Zed settings
//
// For information on how to configure Zed, see the Zed
// documentation: https://zed.dev/docs/configuring-zed
//
// To see all of Zed's default settings without changing your
// custom settings, run `zed: open default settings` from the
// command palette (cmd-shift-p / ctrl-shift-p)
{
"icon_theme": "Catppuccin Mocha",
"agent": {
"default_model": {
"provider": "ollama",
"model": "codellama:34b",
"enable_thinking": false
},
"favorite_models": [],
"model_parameters": []
},
"ui_font_size": 16,
"buffer_font_size": 15,
"theme": {
"mode": "dark",
"light": "One Light",
"dark": "Catppuccin Mocha",
},
}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf297781" class="outline-3">
<h3 id="orgf297781"><code>generated/.config/zsh/.zshrc</code></h3>
<div class="outline-text-3" id="text-orgf297781">
<p>
This sets up the zsh in the terminal
</p>
<div class="org-src-container">
<pre class="src src-bash"># Path to syntax highlighting installed by Nix
ZSH_SYNTAX_HIGHLIGHTING="${HOME}/.nix-profile/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
# Load syntax highlighting if available
if [ -f "$ZSH_SYNTAX_HIGHLIGHTING" ]; then
source "$ZSH_SYNTAX_HIGHLIGHTING"
fi
# Initialize Starship prompt
if command -v starship &gt;/dev/null 2&gt;&amp;1; then
eval "$(starship init zsh)"
fi
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Henro Veijer</p>
<p class="date">Created: 2026-04-10 vr 18:38</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>