5535 lines
156 KiB
HTML
5535 lines
156 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||
<head>
|
||
<!-- 2026-04-14 di 15:22 -->
|
||
<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="#orgdf13c75">Shortcuts</a></li>
|
||
<li><a href="#introduction">Introduction   <span class="tag"><span class="intro">intro</span></span></a>
|
||
<ul>
|
||
<li><a href="#orgf365b35">What is Droidnix</a>
|
||
<ul>
|
||
<li><a href="#org80f147e">Installed components:</a></li>
|
||
<li><a href="#orgfaf6682">Goals, project Structure, import hierarchy</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org26cb10c">Root Level</a></li>
|
||
<li><a href="#orgfbad1e9">Generated Structure</a>
|
||
<ul>
|
||
<li><a href="#orgea4b92f">First Setup</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#the-assets-folder">The Assets Folder   <span class="tag"><span class="assets">assets</span></span></a>
|
||
<ul>
|
||
<li><a href="#orgaebfd71"><code>generated/assets/2_b_installed.conf</code></a></li>
|
||
<li><a href="#orgb09ffeb"><code>generated/assets/aliases.conf</code></a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#the-actual-code">The Actual Code   <span class="tag"><span class="code">code</span></span></a>
|
||
<ul>
|
||
<li><a href="#org96bda9d"><code>generated/flake.nix</code></a></li>
|
||
<li><a href="#org744ce9b"><code>generated/modules/traveldroid/system/colors.nix</code></a></li>
|
||
<li><a href="#org4401a7c"><code>generated/hosts/traveldroid/boot.nix</code></a></li>
|
||
<li><a href="#orga15dab1"><code>generated/hosts/traveldroid/hardware-configuration.nix</code></a></li>
|
||
<li><a href="#org1a6948b"><code>generated/hosts/traveldroid/host.nix</code></a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org75de9dc">generated/traveldroid/modules/apps</a>
|
||
<ul>
|
||
<li><a href="#org64f820c"><code>generated/modules/traveldroid/apps/2_b_installed.nix</code></a></li>
|
||
<li><a href="#org0cc04e2"><code>generated/modules/traveldroid/apps/emacs/emacs.nix</code></a></li>
|
||
<li><a href="#orgbfa2f62"><code>generated/modules/traveldroid/apps/flameshot.nix</code></a></li>
|
||
<li><a href="#org42334af"><code>generated/modules/traveldroid/apps/kitty.nix</code></a></li>
|
||
<li><a href="#org089e5f4"><code>generated/modules/traveldroid/apps/starship.nix</code></a></li>
|
||
<li><a href="#orge36aaed"><code>generated/modules/traveldroid/apps/thunar.nix</code></a></li>
|
||
<li><a href="#orgf0a998b"><code>generated/modules/traveldroid/apps/wofi.nix</code></a></li>
|
||
<li><a href="#org8168881"><code>generated/modules/traveldroid/apps/zenbrowser.nix</code></a></li>
|
||
<li><a href="#org0cf075f"><code>generated/modules/traveldroid/apps/zsh.nix</code></a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgf227219">generated/modules/traveldroid/desktop</a>
|
||
<ul>
|
||
<li><a href="#org0190ccb"><code>generated/modules/traveldroid/desktop/fonts.nix</code></a></li>
|
||
<li><a href="#org351be3c"><code>generated/modules/traveldroid/desktop/gtk.nix</code></a></li>
|
||
<li><a href="#orgb00d687"><code>generated/modules/traveldroid/desktop/hyprland.nix</code></a></li>
|
||
<li><a href="#org02b4b1e"><code>generated/modules/traveldroid/desktop/stylix.nix</code></a></li>
|
||
<li><a href="#org320e680"><code>generated/modules/traveldroid/desktop/wallpaper.nix</code></a></li>
|
||
<li><a href="#org6799f3e"><code>generated/modules/traveldroid/desktop/waybar.nix</code></a></li>
|
||
<li><a href="#org2389f15"><code>generated/modules/traveldroid/desktop/wayland.nix</code></a></li>
|
||
<li><a href="#org4283a43"><code>generated/modules/traveldroid/desktop/xdg.nix</code></a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org5185e6f">generated/modules/traveldroid/system</a>
|
||
<ul>
|
||
<li><a href="#orgd92c0b0"><code>generated/modules/traveldroid/system/aliases.nix</code></a></li>
|
||
<li><a href="#org1455e97"><code>generated/modules/traveldroid/system/audio.nix</code></a></li>
|
||
<li><a href="#org21f8a3d"><code>generated/modules/traveldroid/system/avahi.nix</code></a></li>
|
||
<li><a href="#orgd90e340"><code>generated/modules/traveldroid/system/bluetooth.nix</code></a></li>
|
||
<li><a href="#orgdfd63c9"><code>generated/modules/traveldroid/system/copy_scripts.nix</code></a></li>
|
||
<li><a href="#org8b97254"><code>generated/modules/traveldroid/system/dbus.nix</code></a></li>
|
||
<li><a href="#org0358cb2"><code>generated/modules/traveldroid/system/firewall.nix</code></a></li>
|
||
<li><a href="#org18d6815"><code>generated/modules/traveldroid/system/gnome-keyring.nix</code></a></li>
|
||
<li><a href="#orgbd8955c"><code>generated/modules/traveldroid/system/login-tuigreet.nix</code></a></li>
|
||
<li><a href="#org7b28bc4"><code>generated/modules/traveldroid/system/networking.nix</code></a></li>
|
||
<li><a href="#org8f1a4fe"><code>generated/modules/traveldroid/system/nix.nix</code></a></li>
|
||
<li><a href="#org9deb959"><code>generated/modules/traveldroid/system/printing.nix</code></a></li>
|
||
<li><a href="#orga284fb0"><code>generated/modules/traveldroid/system/quickshell.nix</code></a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orge08c3f7">generated/users</a>
|
||
<ul>
|
||
<li><a href="#org717b361"><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="#org4a35fa3"><code>generated/.config/emacs/early-init.el</code></a></li>
|
||
<li><a href="#orga03acec"><code>generated/.config/emacs/init.el</code></a></li>
|
||
<li><a href="#orgdac4758"><code>generated/.config/hypr/animations.conf</code></a></li>
|
||
<li><a href="#org0fbc65b"><code>generated/.config/hypr/behaviour.conf</code></a></li>
|
||
<li><a href="#org3bdd27a"><code>generated/.config/hypr/bindings.conf</code></a></li>
|
||
<li><a href="#org048bd1e"><code>generated/.config/hypr/exec-once.conf</code></a></li>
|
||
<li><a href="#org1ee1e3f"><code>generated/.config/hypr/hypridle.conf</code></a></li>
|
||
<li><a href="#org2d147b8"><code>generated/.config/hypr/hyprland.conf</code></a></li>
|
||
<li><a href="#org642e1a5"><code>generated/.config/hypr/layer-rules.conf</code></a></li>
|
||
<li><a href="#org1ec29c4"><code>generated/.config/hypr/layout.conf</code></a></li>
|
||
<li><a href="#org7de2773"><code>generated/.config/hypr/monitor-rules.conf</code></a></li>
|
||
<li><a href="#orgeb39f44"><code>generated/.config/hypr/theming.conf</code></a></li>
|
||
<li><a href="#orgcf8722c"><code>generated/.config/hypr/window-rules.conf</code></a></li>
|
||
<li><a href="#orga5fed1f"><code>generated/.config/hypr/workspace-rules.conf</code></a></li>
|
||
<li><a href="#org3a42996"><code>generated/.config/quickshell/media/shell.qml</code></a></li>
|
||
<li><a href="#orgfb5ff32"><code>generated/.config/quickshell/powermenu/shell.qml</code></a></li>
|
||
<li><a href="#org7a82666"><code>generated/.config/scripts/media.sh</code></a></li>
|
||
<li><a href="#org4cf6761"><code>generated/.config/scripts/layout-selector.sh</code></a></li>
|
||
<li><a href="#org8083588"><code>generated/.config/scripts/hypr-autocolwidth.sh</code></a></li>
|
||
<li><a href="#org50dca54"><code>generated/.config/scripts/power.sh</code></a></li>
|
||
<li><a href="#orgf3db078"><code>generated/.config/scripts/update.sh</code></a></li>
|
||
<li><a href="#orgf40644c"><code>generated/.config/scripts/wofi-launcher.sh</code></a></li>
|
||
<li><a href="#org276f9cd"><code>generated/.config/shared/Colors.css</code></a></li>
|
||
<li><a href="#org730c75e"><code>generated/.config/starship.toml</code></a></li>
|
||
<li><a href="#orgd3028d3"><code>generated/.config/stylix/stylix.conf</code></a></li>
|
||
<li><a href="#orgd02ce66"><code>generated/.config/stylix/palette.json</code></a></li>
|
||
<li><a href="#org1fd8624"><code>generated/.config/stylix/palette.html</code></a></li>
|
||
<li><a href="#org7a41802"><code>generated/.config/waybar/config</code></a></li>
|
||
<li><a href="#org4c20e82"><code>generated/.config/waybar/style-dark.css</code></a></li>
|
||
<li><a href="#org45abd7a"><code>generated/.config/scripts/bluetooth-status.sh</code></a></li>
|
||
<li><a href="#org24861b6"><code>generated/.config/scripts/hypr-workspaces.sh</code></a></li>
|
||
<li><a href="#orgc2908f3"><code>generated/.config/scripts/hypr-workspacesmenu.sh</code></a></li>
|
||
<li><a href="#org9324af0"><code>generated/.config/waypaper/config.ini</code></a></li>
|
||
<li><a href="#org4046c11"><code>generated/.config/waypaper/config.ini</code></a></li>
|
||
<li><a href="#orgf0b9bdb"><code>generated/.config/wofi/config</code></a></li>
|
||
<li><a href="#org86ad2d9"><code>generated/.config/wofi/style.css</code></a></li>
|
||
<li><a href="#org223e58d"><code>generated/.config/zed/settings.json</code></a></li>
|
||
<li><a href="#orga9eba60"><code>generated/.config/zsh/.zshrc</code></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgdf13c75" class="outline-2">
|
||
<h2 id="orgdf13c75">Shortcuts</h2>
|
||
<div class="outline-text-2" id="text-orgdf13c75">
|
||
<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>
|
||
—
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-introduction" class="outline-2">
|
||
<h2 id="introduction">Introduction   <span class="tag"><span class="intro">intro</span></span></h2>
|
||
<div class="outline-text-2" id="text-introduction">
|
||
</div>
|
||
<div id="outline-container-orgf365b35" class="outline-3">
|
||
<h3 id="orgf365b35">What is Droidnix</h3>
|
||
<div class="outline-text-3" id="text-orgf365b35">
|
||
<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-org80f147e" class="outline-4">
|
||
<h4 id="org80f147e">Installed components:</h4>
|
||
<div class="outline-text-4" id="text-org80f147e">
|
||
</div>
|
||
<ul class="org-ul">
|
||
<li><a id="orgbbd34ed"></a>Core<br /></li>
|
||
<li><a id="orgf7c867b"></a>Hyprland<br /></li>
|
||
</ul>
|
||
</div>
|
||
<div id="outline-container-orgfaf6682" class="outline-4">
|
||
<h4 id="orgfaf6682">Goals, project Structure, import hierarchy</h4>
|
||
<div class="outline-text-4" id="text-orgfaf6682">
|
||
<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-org26cb10c" class="outline-2">
|
||
<h2 id="org26cb10c">Root Level</h2>
|
||
<div class="outline-text-2" id="text-org26cb10c">
|
||
<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/<host>/modules/</code></li>
|
||
<li><code>generated/hosts/</code></li>
|
||
</ul></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgfbad1e9" class="outline-2">
|
||
<h2 id="orgfbad1e9">Generated Structure</h2>
|
||
<div class="outline-text-2" id="text-orgfbad1e9">
|
||
<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-orgea4b92f" class="outline-3">
|
||
<h3 id="orgea4b92f">First Setup</h3>
|
||
<div class="outline-text-3" id="text-orgea4b92f">
|
||
<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 && emacs --batch --eval "(setq org-html-htmlize-output-type nil)" README.org -f org-html-export-to-html</code></li>
|
||
<li>Build and switch: <code>sudo nixos-rebuild switch --flake .#<hostname></code>.</li>
|
||
</ol>
|
||
|
||
<p>
|
||
—
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-the-assets-folder" class="outline-2">
|
||
<h2 id="the-assets-folder">The Assets Folder   <span class="tag"><span class="assets">assets</span></span></h2>
|
||
<div class="outline-text-2" id="text-the-assets-folder">
|
||
<p>
|
||
The <code>.assets/</code> folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-orgaebfd71" class="outline-3">
|
||
<h3 id="orgaebfd71"><code>generated/assets/2_b_installed.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orgaebfd71">
|
||
<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
|
||
blender
|
||
blueman
|
||
bluez
|
||
brave
|
||
btop
|
||
chromium
|
||
cliphist
|
||
comma
|
||
direnv
|
||
duf
|
||
delta
|
||
eza
|
||
fd
|
||
file
|
||
fzf
|
||
gimp
|
||
git
|
||
gparted
|
||
grim
|
||
handbrake
|
||
hyperfine
|
||
just
|
||
jq
|
||
kdePackages.kdeconnect-kde
|
||
libreoffice
|
||
nextcloud-client
|
||
nextcloud-talk-desktop
|
||
nix-index
|
||
nix-output-monitor
|
||
nh
|
||
obsidian
|
||
openssl
|
||
pandoc
|
||
postman
|
||
python3
|
||
qdirstat
|
||
ripgrep
|
||
signal-desktop
|
||
slurp
|
||
spotify
|
||
solaar
|
||
swappy
|
||
sweethome3d.application
|
||
tea
|
||
todoist
|
||
tree
|
||
usbutils
|
||
vlc
|
||
wev
|
||
wget
|
||
wl-clipboard
|
||
wf-recorder
|
||
yazi
|
||
z-lua
|
||
zed-editor
|
||
zoxide
|
||
|
||
#flatpaks
|
||
eu.betterbird.Betterbird
|
||
com.todoist.Todoist
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgb09ffeb" class="outline-3">
|
||
<h3 id="orgb09ffeb"><code>generated/assets/aliases.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orgb09ffeb">
|
||
<p>
|
||
This is a list of additional apps to install
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-toml">alias ll='ls -lah'
|
||
alias gs='git status'
|
||
alias ga='git add'
|
||
alias gc='git commit'
|
||
alias gp='git push'
|
||
alias gcp='git add . && git commit && git push'
|
||
|
||
alias cd='z'
|
||
|
||
alias nps='xdg-open https://search.nixos.org'
|
||
alias hvnx='cd ~/Repos/nixos/henrovnix_ok'
|
||
alias emt='hvnx && emacs README.org --batch -f org-babel-tangle && emacs -Q --batch README.org -f org-html-export-to-html'
|
||
alias nxs='hvnx && sudo nixos-rebuild switch --flake .#traveldroid'
|
||
alias nxt='hvnx && sudo nixos-rebuild test --flake .#traveldroid'
|
||
alias nxv='hvnx && sudo nixos-rebuild build-vm --flake .#traveldroid && "$(ls -1 ./result/bin/run-*-vm | head -n 1)"'
|
||
|
||
alias please='sudo'
|
||
alias pls='sudo'
|
||
alias rb='sudo reboot'
|
||
alias po='sudo poweroff'
|
||
|
||
alias fpl='flatpak list'
|
||
alias fps='flatpak search'
|
||
alias fpi='flatpak install'
|
||
alias fpr='flatpak run'
|
||
|
||
alias nxc='ssh henrov@nextcloud.data-pro.nu'
|
||
|
||
alias vs='code'
|
||
alias blog='cd ~/Repos/blog && ll'
|
||
alias keys='hyprctl binds'
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-the-actual-code" class="outline-2">
|
||
<h2 id="the-actual-code">The Actual Code   <span class="tag"><span class="code">code</span></span></h2>
|
||
<div class="outline-text-2" id="text-the-actual-code">
|
||
<p>
|
||
This section contains the Org blocks for tangling Nix code into the generated folders.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org96bda9d" class="outline-3">
|
||
<h3 id="org96bda9d"><code>generated/flake.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org96bda9d">
|
||
<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";
|
||
};
|
||
|
||
quickshell = {
|
||
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
||
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-org744ce9b" class="outline-3">
|
||
<h3 id="org744ce9b"><code>generated/modules/traveldroid/system/colors.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org744ce9b">
|
||
<p>
|
||
Setting the colors for Droidnix.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
|
||
let
|
||
colors = {
|
||
crust = "#11111b";
|
||
mantle = "#181825";
|
||
base = "#1e1e2e";
|
||
surface0 = "#313244";
|
||
surface1 = "#45475a";
|
||
surface2 = "#585b70";
|
||
overlay0 = "#6c7086";
|
||
overlay1 = "#7f849c";
|
||
overlay2 = "#9399b2";
|
||
subtext0 = "#a6adc8";
|
||
subtext1 = "#bac2de";
|
||
text = "#cdd6f4";
|
||
rosewater = "#f5e0dc";
|
||
flamingo = "#f2cdcd";
|
||
pink = "#f5c2e7";
|
||
mauve = "#cba6f7";
|
||
red = "#f38ba8";
|
||
maroon = "#eba0ac";
|
||
peach = "#fab387";
|
||
yellow = "#f9e2af";
|
||
green = "#a6e3a1";
|
||
teal = "#94e2d5";
|
||
sapphire = "#74c7ec";
|
||
blue = "#89b4fa";
|
||
lavender = "#b4befe";
|
||
};
|
||
|
||
username = config.defaultUser or "henrov";
|
||
|
||
cssContent = ''
|
||
/* Catppuccin Mocha Palette - auto-generated, do not edit manually */
|
||
'' + lib.concatStringsSep "\n" (
|
||
lib.mapAttrsToList (name: value:
|
||
"@define-color ${name} ${value};"
|
||
) colors
|
||
) + "\n@define-color base-alpha rgba(30, 30, 46, 0.9);";
|
||
|
||
qmlContent = ''
|
||
pragma Singleton
|
||
// Catppuccin Mocha Palette - auto-generated, do not edit manually
|
||
import QtQuick
|
||
QtObject {
|
||
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9)
|
||
'' + lib.concatStringsSep "\n" (
|
||
lib.mapAttrsToList (name: value:
|
||
" readonly property color ${name}: \"${value}\""
|
||
) colors
|
||
) + "\n}";
|
||
|
||
in
|
||
{
|
||
home-manager.users.${username} = {
|
||
home.file = {
|
||
".config/shared/Colors.css" = {
|
||
text = cssContent;
|
||
force = true;
|
||
};
|
||
".config/quickshell/Colors.qml" = {
|
||
text = qmlContent;
|
||
force = true;
|
||
};
|
||
".config/quickshell/powermenu/Colors.qml" = {
|
||
text = qmlContent;
|
||
force = true;
|
||
};
|
||
".config/quickshell/powermenu/qmldir" = {
|
||
text = "singleton Colors 1.0 Colors.qml";
|
||
force = true;
|
||
};
|
||
};
|
||
};
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org4401a7c" class="outline-3">
|
||
<h3 id="org4401a7c"><code>generated/hosts/traveldroid/boot.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org4401a7c">
|
||
<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-orga15dab1" class="outline-3">
|
||
<h3 id="orga15dab1"><code>generated/hosts/traveldroid/hardware-configuration.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orga15dab1">
|
||
<ol class="org-ol">
|
||
<li>Boot into NixOS Live ISO or your installed system.</li>
|
||
<li>Open a terminal.</li>
|
||
<li>Run: <code>sudo nixos-generate-config –root /mnt</code> (Omit –root /mnt if already running NixOS.)</li>
|
||
</ol>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{
|
||
hostname,
|
||
pkgs,
|
||
lib,
|
||
modulesPath,
|
||
user,
|
||
config,
|
||
...
|
||
}:
|
||
{
|
||
imports = [
|
||
# (modulesPath + "/installer/scan/not-detected.nix")
|
||
#../../hardware/hardware.nix
|
||
];
|
||
|
||
boot.initrd.availableKernelModules = [
|
||
"xhci_pci"
|
||
"nvme"
|
||
"usb_storage"
|
||
"sd_mod"
|
||
"rtsx_usb_sdmmc"
|
||
];
|
||
boot.initrd.kernelModules = [ ];
|
||
boot.kernelModules = [ "kvm-intel" ];
|
||
boot.extraModulePackages = [ ];
|
||
|
||
fileSystems."/" = {
|
||
device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2";
|
||
fsType = "ext4";
|
||
};
|
||
|
||
fileSystems."/boot" = {
|
||
device = "/dev/disk/by-uuid/811D-0676";
|
||
fsType = "vfat";
|
||
options = [
|
||
"fmask=0077"
|
||
"dmask=0077"
|
||
];
|
||
};
|
||
|
||
swapDevices = [
|
||
{ device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; }
|
||
];
|
||
|
||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org1a6948b" class="outline-3">
|
||
<h3 id="org1a6948b"><code>generated/hosts/traveldroid/host.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org1a6948b">
|
||
<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-org75de9dc" class="outline-2">
|
||
<h2 id="org75de9dc">generated/traveldroid/modules/apps</h2>
|
||
<div class="outline-text-2" id="text-org75de9dc">
|
||
</div>
|
||
<div id="outline-container-org64f820c" class="outline-3">
|
||
<h3 id="org64f820c"><code>generated/modules/traveldroid/apps/2_b_installed.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org64f820c">
|
||
<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-org0cc04e2" class="outline-3">
|
||
<h3 id="org0cc04e2"><code>generated/modules/traveldroid/apps/emacs/emacs.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org0cc04e2">
|
||
<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; # <-- allow overwrite
|
||
};
|
||
".emacs.d/init.el" = {
|
||
source = "${assetPath}/init.el";
|
||
force = true; # <-- allow overwrite
|
||
};
|
||
};
|
||
};
|
||
};
|
||
}
|
||
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgbfa2f62" class="outline-3">
|
||
<h3 id="orgbfa2f62"><code>generated/modules/traveldroid/apps/flameshot.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgbfa2f62">
|
||
<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-org42334af" class="outline-3">
|
||
<h3 id="org42334af"><code>generated/modules/traveldroid/apps/kitty.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org42334af">
|
||
<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-org089e5f4" class="outline-3">
|
||
<h3 id="org089e5f4"><code>generated/modules/traveldroid/apps/starship.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org089e5f4">
|
||
<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-orge36aaed" class="outline-3">
|
||
<h3 id="orge36aaed"><code>generated/modules/traveldroid/apps/thunar.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orge36aaed">
|
||
<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-orgf0a998b" class="outline-3">
|
||
<h3 id="orgf0a998b"><code>generated/modules/traveldroid/apps/wofi.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgf0a998b">
|
||
<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-org8168881" class="outline-3">
|
||
<h3 id="org8168881"><code>generated/modules/traveldroid/apps/zenbrowser.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org8168881">
|
||
<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-org0cf075f" class="outline-3">
|
||
<h3 id="org0cf075f"><code>generated/modules/traveldroid/apps/zsh.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org0cf075f">
|
||
<p>
|
||
This sets up the zsh in the terminal
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix"># --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||
{ lib, config, pkgs, flakeRoot, ... }:
|
||
let
|
||
username = config.defaultUser or "henrov";
|
||
generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc";
|
||
in
|
||
{
|
||
#################################
|
||
# Install Zsh, Oh My Zsh, Starship and syntax highlighting system-wide
|
||
#################################
|
||
environment.systemPackages = with pkgs; [
|
||
zsh
|
||
oh-my-zsh
|
||
starship
|
||
zsh-syntax-highlighting
|
||
];
|
||
|
||
#################################
|
||
# 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}" ] && source "${generatedZsh}"
|
||
|
||
# Initialize Starship prompt
|
||
eval "$(starship init zsh)"
|
||
|
||
# Syntax highlighting — must be sourced last
|
||
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||
'';
|
||
|
||
#################################
|
||
# Set Zsh as default login shell for the user via Home Manager
|
||
#################################
|
||
home-manager.users = {
|
||
${username} = {
|
||
programs.zsh.enable = true;
|
||
home.file.".config/zsh/.zshrc".source = generatedZsh;
|
||
};
|
||
};
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgf227219" class="outline-2">
|
||
<h2 id="orgf227219">generated/modules/traveldroid/desktop</h2>
|
||
<div class="outline-text-2" id="text-orgf227219">
|
||
</div>
|
||
<div id="outline-container-org0190ccb" class="outline-3">
|
||
<h3 id="org0190ccb"><code>generated/modules/traveldroid/desktop/fonts.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org0190ccb">
|
||
<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-org351be3c" class="outline-3">
|
||
<h3 id="org351be3c"><code>generated/modules/traveldroid/desktop/gtk.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org351be3c">
|
||
<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-orgb00d687" class="outline-3">
|
||
<h3 id="orgb00d687"><code>generated/modules/traveldroid/desktop/hyprland.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgb00d687">
|
||
<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/theming.conf" = { source = "${assetPath}/theming.conf"; 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-org02b4b1e" class="outline-3">
|
||
<h3 id="org02b4b1e"><code>generated/modules/traveldroid/desktop/stylix.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org02b4b1e">
|
||
<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-org320e680" class="outline-3">
|
||
<h3 id="org320e680"><code>generated/modules/traveldroid/desktop/wallpaper.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org320e680">
|
||
<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-org6799f3e" class="outline-3">
|
||
<h3 id="org6799f3e"><code>generated/modules/traveldroid/desktop/waybar.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org6799f3e">
|
||
<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";
|
||
basePath = "${flakeRoot}/generated/.config";
|
||
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-dark.css" = {
|
||
text = builtins.replaceStrings ["henrov"] [username] (builtins.readFile "${assetPath}/style-dark.css");
|
||
force = true;
|
||
};
|
||
".config/scripts/bluetooth-status.sh" = {
|
||
text = builtins.readFile "${basePath}/scripts/bluetooth-status.sh";
|
||
force = true;
|
||
executable = true;
|
||
};
|
||
".config/scripts/hypr-workspaces.sh" = {
|
||
text = builtins.readFile "${basePath}/scripts/hypr-workspaces.sh";
|
||
force = true;
|
||
executable = true;
|
||
};
|
||
".config/scripts/hypr-workspacesmenu.sh" = {
|
||
text = builtins.readFile "${basePath}/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-org2389f15" class="outline-3">
|
||
<h3 id="org2389f15"><code>generated/modules/traveldroid/desktop/wayland.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org2389f15">
|
||
<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-org4283a43" class="outline-3">
|
||
<h3 id="org4283a43"><code>generated/modules/traveldroid/desktop/xdg.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org4283a43">
|
||
<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-org5185e6f" class="outline-2">
|
||
<h2 id="org5185e6f">generated/modules/traveldroid/system</h2>
|
||
<div class="outline-text-2" id="text-org5185e6f">
|
||
</div>
|
||
<div id="outline-container-orgd92c0b0" class="outline-3">
|
||
<h3 id="orgd92c0b0"><code>generated/modules/traveldroid/system/aliases.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgd92c0b0">
|
||
<p>
|
||
This file makes aliases in ./generated/assets/aliases.conf system-wide available
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{ lib, flakeRoot,... }:
|
||
let
|
||
aliasFile = "${flakeRoot}/generated/assets/aliases.conf";
|
||
|
||
# Read file
|
||
content = builtins.readFile aliasFile;
|
||
|
||
# Split into lines
|
||
lines = lib.splitString "\n" content;
|
||
|
||
# Parse "alias name='value'"
|
||
parseAlias = line:
|
||
let
|
||
match = builtins.match "alias ([^=]+)='(.*)'" line;
|
||
in
|
||
if match == null then null else {
|
||
name = builtins.elemAt match 0;
|
||
value = builtins.elemAt match 1;
|
||
};
|
||
|
||
# Convert to attrset
|
||
aliases =
|
||
builtins.listToAttrs (
|
||
lib.filter (x: x != null)
|
||
(map (line:
|
||
let parsed = parseAlias line;
|
||
in if parsed == null then null else {
|
||
name = parsed.name;
|
||
value = parsed.value;
|
||
}
|
||
) lines)
|
||
);
|
||
|
||
in
|
||
{
|
||
environment.shellAliases = aliases;
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org1455e97" class="outline-3">
|
||
<h3 id="org1455e97"><code>generated/modules/traveldroid/system/audio.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org1455e97">
|
||
<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
|
||
playerctl # Player controls
|
||
];
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org21f8a3d" class="outline-3">
|
||
<h3 id="org21f8a3d"><code>generated/modules/traveldroid/system/avahi.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org21f8a3d">
|
||
<p>
|
||
Avahi helps discovering services
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{ ... }:
|
||
{
|
||
services.avahi = {
|
||
enable = true;
|
||
nssmdns4 = true;
|
||
publish = {
|
||
enable = true;
|
||
addresses = true;
|
||
};
|
||
};
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgd90e340" class="outline-3">
|
||
<h3 id="orgd90e340"><code>generated/modules/traveldroid/system/bluetooth.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgd90e340">
|
||
<p>
|
||
Installing Bluetooth services and supporting aps
|
||
</p>
|
||
<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-orgdfd63c9" class="outline-3">
|
||
<h3 id="orgdfd63c9"><code>generated/modules/traveldroid/system/copy_scripts.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgdfd63c9">
|
||
<p>
|
||
This copies any scripts from <i>generated</i>.config/scripts to ~/.config/scripts and makes any .sh files executable.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{ lib, config, pkgs, flakeRoot, ... }:
|
||
let
|
||
username = config.defaultUser or "henrov";
|
||
configPath = flakeRoot + "/generated/.config/scripts";
|
||
allFiles = lib.filesystem.listFilesRecursive configPath;
|
||
|
||
toRelative = file:
|
||
let
|
||
base = toString flakeRoot + "/generated/";
|
||
relative = lib.removePrefix base (toString file);
|
||
in
|
||
builtins.unsafeDiscardStringContext relative;
|
||
|
||
isShellScript = file:
|
||
lib.hasSuffix ".sh" (toString file);
|
||
|
||
toFileEntry = file: {
|
||
name = toRelative file;
|
||
value = {
|
||
source = file;
|
||
executable = isShellScript file;
|
||
force = true;
|
||
};
|
||
};
|
||
in
|
||
{
|
||
home-manager.users = {
|
||
${username} = {
|
||
home.file = builtins.listToAttrs (map toFileEntry allFiles);
|
||
};
|
||
};
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org8b97254" class="outline-3">
|
||
<h3 id="org8b97254"><code>generated/modules/traveldroid/system/dbus.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org8b97254">
|
||
<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-org0358cb2" class="outline-3">
|
||
<h3 id="org0358cb2"><code>generated/modules/traveldroid/system/firewall.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org0358cb2">
|
||
<p>
|
||
This sets the firewall.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{ pkgs, ... }:
|
||
|
||
{
|
||
# Use nftables as the firewall backend
|
||
networking.nftables.enable = true;
|
||
|
||
networking.firewall = {
|
||
enable = true;
|
||
|
||
# LAN-only ports — Wi-Fi interface
|
||
interfaces."wlan0" = {
|
||
allowedTCPPorts = [
|
||
631 # CUPS / IPP network printing
|
||
9100 # AppSocket/JetDirect printing
|
||
6566 # SANE network scanner
|
||
57621 # Spotify Connect
|
||
57622 # Spotify local file sync
|
||
];
|
||
allowedTCPPortRanges = [
|
||
{ from = 1714; to = 1764; } # KDE Connect
|
||
];
|
||
allowedUDPPorts = [
|
||
5353 # mDNS / Avahi (printer + device discovery)
|
||
631 # CUPS / IPP
|
||
67 # DHCP
|
||
123 # NTP time sync
|
||
1900 # UPnP device discovery
|
||
57621 # Spotify Connect
|
||
];
|
||
allowedUDPPortRanges = [
|
||
{ from = 1714; to = 1764; } # KDE Connect
|
||
];
|
||
};
|
||
|
||
# LAN-only ports — ethernet (ready for when you plug in)
|
||
interfaces."enp0s31f6" = {
|
||
allowedTCPPorts = [
|
||
631 # CUPS / IPP network printing
|
||
9100 # AppSocket/JetDirect printing
|
||
6566 # SANE network scanner
|
||
57621 # Spotify Connect
|
||
57622 # Spotify local file sync
|
||
];
|
||
allowedTCPPortRanges = [
|
||
{ from = 1714; to = 1764; } # KDE Connect
|
||
];
|
||
allowedUDPPorts = [
|
||
5353 # mDNS / Avahi (printer + device discovery)
|
||
631 # CUPS / IPP
|
||
67 # DHCP
|
||
123 # NTP time sync
|
||
1900 # UPnP device discovery
|
||
57621 # Spotify Connect
|
||
];
|
||
allowedUDPPortRanges = [
|
||
{ from = 1714; to = 1764; } # KDE Connect
|
||
];
|
||
};
|
||
};
|
||
|
||
# CLI tool for temporary rule changes without rebuilding
|
||
# Usage: sudo nixos-firewall-tool open tcp 8080
|
||
environment.systemPackages = with pkgs; [
|
||
nixos-firewall-tool
|
||
];
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org18d6815" class="outline-3">
|
||
<h3 id="org18d6815"><code>generated/modules/traveldroid/system/gnome-keyring.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org18d6815">
|
||
<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-orgbd8955c" class="outline-3">
|
||
<h3 id="orgbd8955c"><code>generated/modules/traveldroid/system/login-tuigreet.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orgbd8955c">
|
||
<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-org7b28bc4" class="outline-3">
|
||
<h3 id="org7b28bc4"><code>generated/modules/traveldroid/system/networking.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org7b28bc4">
|
||
<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;
|
||
|
||
#################################
|
||
# 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;
|
||
};
|
||
};
|
||
|
||
#################################
|
||
# System packages
|
||
#################################
|
||
environment.systemPackages = [
|
||
pkgs.networkmanager
|
||
pkgs.linux-firmware
|
||
pkgs.networkmanagerapplet
|
||
pkgs.networkmanager_dmenu
|
||
pkgs.iwgtk
|
||
];
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org8f1a4fe" class="outline-3">
|
||
<h3 id="org8f1a4fe"><code>generated/modules/traveldroid/system/nix.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org8f1a4fe">
|
||
<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-org9deb959" class="outline-3">
|
||
<h3 id="org9deb959"><code>generated/modules/traveldroid/system/printing.nix</code></h3>
|
||
<div class="outline-text-3" id="text-org9deb959">
|
||
<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 id="outline-container-orga284fb0" class="outline-3">
|
||
<h3 id="orga284fb0"><code>generated/modules/traveldroid/system/quickshell.nix</code></h3>
|
||
<div class="outline-text-3" id="text-orga284fb0">
|
||
<p>
|
||
This sets the dbus implementation
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-nix">{ pkgs, lib, config, flakeRoot, ... }:
|
||
let
|
||
username = config.defaultUser or "henrov";
|
||
quickshellPath = flakeRoot + "/generated/.config/quickshell";
|
||
allFiles = lib.filesystem.listFilesRecursive quickshellPath;
|
||
|
||
toRelative = file:
|
||
let
|
||
base = toString flakeRoot + "/generated/";
|
||
relative = lib.removePrefix base (toString file);
|
||
in
|
||
builtins.unsafeDiscardStringContext relative;
|
||
|
||
toFileEntry = file: {
|
||
name = toRelative file;
|
||
value = {
|
||
source = file;
|
||
force = true;
|
||
};
|
||
};
|
||
in
|
||
{
|
||
environment.systemPackages = with pkgs; [
|
||
quickshell
|
||
qt6.qtdeclarative
|
||
qt6.qttools
|
||
qt6.qtsvg
|
||
qt6.qtimageformats
|
||
qt6.qtmultimedia
|
||
qt6.qt5compat
|
||
];
|
||
|
||
qt = {
|
||
enable = true;
|
||
platformTheme = "qt5ct";
|
||
};
|
||
|
||
home-manager.users = {
|
||
${username} = {
|
||
home.file = builtins.listToAttrs (map toFileEntry allFiles);
|
||
};
|
||
};
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orge08c3f7" class="outline-2">
|
||
<h2 id="orge08c3f7">generated/users</h2>
|
||
<div class="outline-text-2" id="text-orge08c3f7">
|
||
</div>
|
||
<div id="outline-container-org717b361" class="outline-3">
|
||
<h3 id="org717b361"><code>generated/users/</code></h3>
|
||
<div class="outline-text-3" id="text-org717b361">
|
||
<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; # <-- 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-org4a35fa3" class="outline-3">
|
||
<h3 id="org4a35fa3"><code>generated/.config/emacs/early-init.el</code></h3>
|
||
<div class="outline-text-3" id="text-org4a35fa3">
|
||
<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 & 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-orga03acec" class="outline-3">
|
||
<h3 id="orga03acec"><code>generated/.config/emacs/init.el</code></h3>
|
||
<div class="outline-text-3" id="text-orga03acec">
|
||
<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-<wheel-up>" . pixel-scroll-precision) ; dont zoom in please, just scroll
|
||
("C-<wheel-down>" . pixel-scroll-precision) ; dont zoom in either, just scroll
|
||
("C-x k" . kill-current-buffer)) ; kill the buffer, dont ask
|
||
:hook
|
||
(text-mode . delete-trailing-whitespace-mode)
|
||
(prog-mode . delete-trailing-whitespace-mode)
|
||
(after-init . global-display-line-numbers-mode) ;; always show line numbers
|
||
(after-init . column-number-mode) ;; column number in the mode line
|
||
(after-init . size-indication-mode) ;; file size in the mode line
|
||
(after-init . pixel-scroll-precision-mode) ;; smooth mouse scroll
|
||
(after-init . electric-pair-mode) ;; i mean ... parens should auto create
|
||
(after-init . reset-custom-vars)
|
||
)
|
||
|
||
(use-package autorevert
|
||
:ensure nil
|
||
:custom
|
||
(auto-revert-interval 3)
|
||
(auto-revert-remote-files nil)
|
||
(auto-revert-use-notify t)
|
||
(auto-revert-avoid-polling nil)
|
||
(auto-revert-verbose t)
|
||
:hook
|
||
(after-init . global-auto-revert-mode))
|
||
|
||
(use-package recentf
|
||
:ensure nil
|
||
:commands (recentf-mode recentf-cleanup)
|
||
:hook
|
||
(after-init . recentf-mode)
|
||
:custom
|
||
(recentf-auto-cleanup 'never)
|
||
(recentf-exclude
|
||
(list "\\.tar$" "\\.tbz2$" "\\.tbz$" "\\.tgz$" "\\.bz2$"
|
||
"\\.bz$" "\\.gz$" "\\.gzip$" "\\.xz$" "\\.zip$"
|
||
"\\.7z$" "\\.rar$"
|
||
"COMMIT_EDITMSG\\'"
|
||
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
||
"-autoloads\\.el$" "autoload\\.el$"))
|
||
|
||
:config
|
||
;; A cleanup depth of -90 ensures that `recentf-cleanup' runs before
|
||
;; `recentf-save-list', allowing stale entries to be removed before the list
|
||
;; is saved by `recentf-save-list', which is automatically added to
|
||
;; `kill-emacs-hook' by `recentf-mode'.
|
||
(add-hook 'kill-emacs-hook #'recentf-cleanup -90))
|
||
|
||
(use-package savehist
|
||
:ensure nil
|
||
:commands (savehist-mode savehist-save)
|
||
:hook
|
||
(after-init . savehist-mode)
|
||
:custom
|
||
(savehist-autosave-interval 600)
|
||
(savehist-additional-variables
|
||
'(kill-ring ; clipboard
|
||
register-alist ; macros
|
||
mark-ring global-mark-ring ; marks
|
||
search-ring regexp-search-ring)))
|
||
|
||
(use-package hl-line
|
||
:ensure nil
|
||
:custom
|
||
(hl-line-sticky-flag nil)
|
||
(global-hl-line-sticky-flag nil)
|
||
:hook
|
||
(after-init . global-hl-line-mode))
|
||
|
||
(use-package saveplace
|
||
:ensure nil
|
||
:commands (save-place-mode save-place-local-mode)
|
||
:hook
|
||
(after-init . save-place-mode)
|
||
:custom
|
||
(save-place-limit 400))
|
||
|
||
(use-package nerd-icons
|
||
:custom
|
||
;; disable bright icon colors
|
||
(nerd-icons-color-icons nil))hells.nix
|
||
|
||
(use-package doom-modeline
|
||
:custom
|
||
(inhibit-compacting-font-caches t) ;; speed
|
||
(doom-modeline-buffer-file-name-style 'relative-from-project)
|
||
(doom-modeline-major-mode-icon nil) ;; distracting icons, no thank you
|
||
(doom-modeline-buffer-encoding nil) ;; everything is utf-8 anyway
|
||
(doom-modeline-buffer-state-icon nil) ;; the filename already shows me
|
||
(doom-modeline-lsp nil) ;; lsp state is too distracting, too often
|
||
:hook (after-init . doom-modeline-mode))
|
||
|
||
(load-theme 'catppuccin :no-confirm)
|
||
|
||
(use-package diminish :demand t) ;; declutter the modeline
|
||
(use-package eldoc
|
||
:diminish eldoc-mode
|
||
:custom
|
||
(eldoc-echo-area-use-multiline-p nil)) ;; docs for everything
|
||
|
||
(use-package eldoc-box
|
||
:defer t
|
||
:config
|
||
(set-face-background 'eldoc-box-border (catppuccin-color 'green))
|
||
(set-face-background 'eldoc-box-body (catppuccin-color 'base))
|
||
:bind
|
||
(("M-h" . eldoc-box-help-at-point)))
|
||
|
||
(use-package pulsar
|
||
:commands pulsar-global-mode pulsar-recenter-top pulsar-reveal-entry
|
||
:init
|
||
(defface pulsar-catppuccin
|
||
`((default :extend t)
|
||
(((class color) (min-colors 88) (background light))
|
||
:background ,(catppuccin-color 'sapphire))
|
||
(((class color) (min-colors 88) (background dark))
|
||
:background ,(catppuccin-color 'sapphire))
|
||
(t :inverse-video t))
|
||
"Alternative nord face for `pulsar-face'."
|
||
:group 'pulsar-faces)
|
||
:custom
|
||
(pulsar-face 'pulsar-catppuccin)
|
||
:hook
|
||
(after-init . pulsar-global-mode))
|
||
|
||
(use-package which-key
|
||
:commands which-key-mode
|
||
:diminish which-key-mode
|
||
:hook
|
||
(after-init . which-key-mode))
|
||
|
||
(use-package expreg
|
||
:bind ("M-m" . expreg-expand))
|
||
|
||
(use-package vundo) ;; undo tree
|
||
|
||
;; better structured editing
|
||
(use-package puni
|
||
:commands puni-global-mode
|
||
:hook
|
||
(after-init . puni-global-mode))
|
||
|
||
(use-package avy
|
||
:bind
|
||
("M-i" . avy-goto-char-2)
|
||
:custom
|
||
(avy-background t))
|
||
|
||
(use-package consult
|
||
:bind
|
||
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
|
||
("M-y" . consult-yank-pop) ;; orig. yank-pop
|
||
("M-g M-g" . consult-goto-line) ;; orig. goto-line
|
||
("M-g i" . consult-imenu) ;; consult version is interactive
|
||
("M-g r" . consult-ripgrep) ;; find in project also works
|
||
:custom
|
||
(consult-narrow-key "<"))
|
||
|
||
(use-package vertico
|
||
:commands vertico-mode
|
||
:custom
|
||
(read-file-name-completion-ignore-case t)
|
||
(read-buffer-completion-ignore-case t)
|
||
(completion-ignore-case t)
|
||
(enable-recursive-minibuffers t)
|
||
(minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))
|
||
:init
|
||
(vertico-mode)
|
||
:hook
|
||
(minibuffer-setup-hook . cursor-intangible-mode))
|
||
|
||
(use-package marginalia
|
||
:commands marginalia-mode
|
||
:hook (after-init . marginalia-mode))
|
||
|
||
(use-package crux
|
||
:bind
|
||
("C-c M-e" . crux-find-user-init-file)
|
||
("C-c C-w" . crux-transpose-windows)
|
||
("C-c M-d" . crux-find-current-directory-dir-locals-file)
|
||
("C-a" . crux-move-beginning-of-line))
|
||
|
||
(use-package magit
|
||
:bind (("C-M-g" . magit-status)))
|
||
|
||
(use-package nerd-icons-corfu
|
||
:commands nerd-icons-corfu-formatter
|
||
:defines corfu-margin-formatters)
|
||
|
||
(use-package corfu
|
||
:commands global-corfu-mode
|
||
:custom
|
||
(corfu-cycle t)
|
||
(corfu-auto t)
|
||
(corfu-auto-delay 1)
|
||
(corfu-auto-prefix 3)
|
||
(corfu-separator ?_)
|
||
:hook
|
||
(after-init . global-corfu-mode)
|
||
:config
|
||
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
||
|
||
(use-package cape)
|
||
|
||
(use-package orderless
|
||
:custom
|
||
(completion-styles '(orderless partial-completion basic))
|
||
(completion-category-defaults nil)
|
||
(completion-category-overrides nil))
|
||
|
||
(use-package yasnippet
|
||
:commands yas-global-mode
|
||
:diminish yas-minor-mode
|
||
:hook
|
||
(after-init . yas-global-mode))
|
||
|
||
(use-package yasnippet-snippets :after yasnippet)
|
||
|
||
(use-package exec-path-from-shell
|
||
:commands exec-path-from-shell-initialize
|
||
:custom
|
||
(exec-path-from-shell-arguments nil)
|
||
:hook
|
||
(after-init . exec-path-from-shell-initialize))
|
||
|
||
(use-package nixpkgs-fmt
|
||
:custom
|
||
(nixpkgs-fmt-command "nixfmt"))
|
||
|
||
(use-package eat
|
||
:bind
|
||
(("C-c e p" . eat-project)
|
||
("C-c e t" . eat)))
|
||
|
||
(use-package f :demand t)
|
||
|
||
(use-package envrc
|
||
:commands envrc-global-mode
|
||
:hook
|
||
(after-init . envrc-global-mode))
|
||
|
||
(use-package gptel
|
||
:commands gptel-make-anthropic f-read-text
|
||
:config
|
||
(gptel-make-anthropic "Claude"
|
||
:stream t :key (f-read-text "/run/secrets/claude_key")))
|
||
|
||
(use-package sideline-flymake)
|
||
(use-package sideline-eglot)
|
||
(use-package sideline
|
||
:custom
|
||
(sideline-backends-right '(sideline-flymake sideline-eglot))
|
||
:hook
|
||
(eglot-managed-mode . sideline-mode)
|
||
(flymake-mode . sideline-mode))
|
||
|
||
(use-package eglot
|
||
:custom
|
||
(eglot-extend-to-xref t)
|
||
(eglot-ignored-server-capabilities '(:inlayHintProvider))
|
||
(jsonrpc-event-hook nil)
|
||
:hook
|
||
(eglot-managed-mode . eldoc-box-hover-mode)
|
||
(before-save . eldoc-format-buffer)
|
||
:bind
|
||
(:map eglot-mode-map
|
||
("C-c l a" . eglot-code-actions)
|
||
("C-c l r" . eglot-rename)
|
||
("C-c l h" . eldoc)
|
||
("C-c l g" . xref-find-references)
|
||
("C-c l w" . eglot-reconnect)))
|
||
|
||
(use-package proced
|
||
:custom
|
||
(proced-auto-update-flag t)
|
||
(proced-auto-update-interval 3)
|
||
(proced-enable-color-flag t)
|
||
(proced-show-remote-processes t))
|
||
|
||
(use-package org
|
||
:ensure t
|
||
:defer t
|
||
:commands (org-mode org-capture org-agenda)
|
||
:init
|
||
(defvar org-journal-file "~/nextcloud/org/journal.org")
|
||
(defvar org-archive-file "~/nextcloud/org/archive.org")
|
||
(defvar org-notes-file "~/nextcloud/org/notes.org")
|
||
(defvar org-inbox-file "~/nextcloud/org/inbox.org")
|
||
(defvar org-work-file "~/nextcloud/org/work.org")
|
||
(defun my/org-capture-project-target-heading ()
|
||
"Determine Org target headings from the current file's project path.
|
||
|
||
This function assumes a directory structure like '~/projects/COMPANY/PROJECT/'.
|
||
It extracts 'COMPANY' and 'PROJECT' to use as nested headlines
|
||
for an Org capture template.
|
||
|
||
If the current buffer is not visi
|
||
ting a file within such a
|
||
project structure, it returns nil, causing capture to default to
|
||
the top of the file."
|
||
(when-let* ((path (buffer-file-name))) ; Ensure we are in a file-visiting buffer
|
||
(let ((path-parts (split-string path "/" t " ")))
|
||
(when-let* ((projects-pos (cl-position "projects" path-parts :test #'string=))
|
||
(company (nth (+ 1 projects-pos) path-parts))
|
||
(project (nth (+ 2 projects-pos) path-parts)))
|
||
;; Return a list of headlines for Org to find or create.
|
||
(list company project)))))
|
||
:bind
|
||
(("C-c c" . org-capture)
|
||
("C-c i" . org-store-link)
|
||
("C-c a" . org-agenda)
|
||
:map org-mode-map
|
||
("C-c t" . org-toggle-inline-images)
|
||
("C-c l" . org-toggle-link-display))
|
||
:custom
|
||
(org-agenda-files (list org-inbox-file org-journal-file))
|
||
(org-directory "~/nextcloud/org")
|
||
(org-default-notes-file org-inbox-file)
|
||
(org-archive-location (concat org-archive-file "::* From %s"))
|
||
(org-log-done 'time)
|
||
(org-log-into-drawer t)
|
||
(org-hide-emphasis-markers t)
|
||
(org-src-fontify-natively t)
|
||
(org-src-tab-acts-natively t)
|
||
(org-capture-templates '(("t" "Todo" entry (file org-inbox-file)
|
||
"* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n)")
|
||
("j" "Journal" entry (file+olp+datetree org-journal-file)
|
||
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
||
("n" "Note" entry (file org-notes-file)
|
||
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
||
("p" "Project Task" item
|
||
(file+function org-work-file my/org-capture-project-target-heading)
|
||
"* TODO %? \n CLOCK: %U"
|
||
))
|
||
)
|
||
:config
|
||
;; Enable syntax highlighting in code blocks
|
||
(add-hook 'org-mode-hook 'turn-on-font-lock)
|
||
(add-hook 'org-mode-hook 'org-indent-mode))
|
||
|
||
;; extras
|
||
(use-package comp-run
|
||
:ensure nil
|
||
:config
|
||
(push "tramp-loaddefs.el.gz" native-comp-jit-compilation-deny-list)
|
||
(push "cl-loaddefs.el.gz" native-comp-jit-compilation-deny-list))
|
||
|
||
(use-package rustic
|
||
:custom
|
||
(rustic-lsp-client 'eglot))
|
||
|
||
(provide 'init)
|
||
|
||
;;; init.el ends here
|
||
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgdac4758" class="outline-3">
|
||
<h3 id="orgdac4758"><code>generated/.config/hypr/animations.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orgdac4758">
|
||
<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-org0fbc65b" class="outline-3">
|
||
<h3 id="org0fbc65b"><code>generated/.config/hypr/behaviour.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org0fbc65b">
|
||
<p>
|
||
These are config files for .config/hypr
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-conf"># Keyboard and mouse settings
|
||
input {
|
||
numlock_by_default = true
|
||
touchpad {
|
||
natural_scroll = true
|
||
tap-to-click = true
|
||
drag_lock = true
|
||
}
|
||
}
|
||
# Scrolling modifier settings
|
||
# Touchpad settings (applies to all touchpads)
|
||
# Focus settings
|
||
# Miscellaneous settings
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org3bdd27a" class="outline-3">
|
||
<h3 id="org3bdd27a"><code>generated/.config/hypr/bindings.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org3bdd27a">
|
||
<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, ~/.config/scripts/wofi-launcher.sh
|
||
bind = ALT, Space, exec, ~/.config/scripts/wofi-launcher.sh
|
||
bind = $mainMod, Q, killactive,
|
||
bind = $mainMod SHIFT, Q, exit,
|
||
bind = $mainMod SHIFT, R, exec, hyprctl reload
|
||
bind = $mainMod, X , exec, qs -c powermenu
|
||
|
||
# Switch windows
|
||
bind = ALT, TAB, cyclenext, prev
|
||
bind = ALT SHIFT, TAB, cyclenext, prev
|
||
bind = CTRL, mouse_down, cyclenext, prev
|
||
bind = CTRL, mouse_up, 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/scripts/layout-selector.sh
|
||
|
||
bind = $mainMod, W, layoutmsg, colresize +conf
|
||
bind = $mainMod SHIFT, W, layoutmsg, colresize -conf
|
||
|
||
# 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
|
||
|
||
#########################
|
||
# Laptop lid settings
|
||
#########################
|
||
bindl = , switch:on:Lid Switch, exec, ~/.config/scripts/lid-action.sh
|
||
bindl = , switch:off:Lid Switch, exec, ~/.config/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/scripts/set-workspace-wallpaper.sh
|
||
|
||
#########################
|
||
# System stuff
|
||
#########################
|
||
bind = $mainMod, U, exec, kitty -e bash -lc "$HOME/.config/scripts/update.sh"
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org048bd1e" class="outline-3">
|
||
<h3 id="org048bd1e"><code>generated/.config/hypr/exec-once.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org048bd1e">
|
||
<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/scripts/set-workspace-wallpaper.sh
|
||
exec-once = ~/.config/scripts/workspace-listener.sh
|
||
exec-once = /run/current-system/sw/libexec/polkit-gnome-authentication-agent-1
|
||
exec-once = nextcloud --background
|
||
exec-once = ~/.config/scripts/hypr-autocolwidth.sh
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org1ee1e3f" class="outline-3">
|
||
<h3 id="org1ee1e3f"><code>generated/.config/hypr/hypridle.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org1ee1e3f">
|
||
<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-org2d147b8" class="outline-3">
|
||
<h3 id="org2d147b8"><code>generated/.config/hypr/hyprland.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org2d147b8">
|
||
<p>
|
||
These are config files for .config/hypr
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-conf">source = ./theming.conf
|
||
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
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org642e1a5" class="outline-3">
|
||
<h3 id="org642e1a5"><code>generated/.config/hypr/layer-rules.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org642e1a5">
|
||
<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-org1ec29c4" class="outline-3">
|
||
<h3 id="org1ec29c4"><code>generated/.config/hypr/layout.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org1ec29c4">
|
||
<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
|
||
scrolling {
|
||
fullscreen_on_one_column = true
|
||
column_width = 0.32 # default: 2 windows side by side
|
||
explicit_column_widths = 0.329, 0.5, 0.667, 1.0
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org7de2773" class="outline-3">
|
||
<h3 id="org7de2773"><code>generated/.config/hypr/monitor-rules.conf</code></h3>
|
||
<div class="outline-text-3" id="text-org7de2773">
|
||
<p>
|
||
These are config files for .config/hypr
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-conf">monitor = DP-1, preferred, 0x0, 1
|
||
monitor = eDP-1, preferred, auto-left, 1.5
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgeb39f44" class="outline-3">
|
||
<h3 id="orgeb39f44"><code>generated/.config/hypr/theming.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orgeb39f44">
|
||
<p>
|
||
These are config files for .config/hypr
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-conf"># --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||
# 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
|
||
general {
|
||
gaps_in = 2
|
||
gaps_out = 4
|
||
border_size = 4
|
||
layout = scrolling
|
||
resize_on_border = true
|
||
extend_border_grab_area = 20
|
||
col.active_border = rgb(89b4fa) rgb(a6e3a1) 45deg
|
||
col.inactive_border = rgba(595959aa)
|
||
}
|
||
|
||
# Decorations
|
||
decoration {
|
||
rounding = 8
|
||
shadow {
|
||
color = rgba(1e1e2e99)
|
||
}
|
||
}
|
||
|
||
# Groups
|
||
group {
|
||
col.border_active = rgb(89b4fa)
|
||
col.border_inactive = rgb(45475a)
|
||
col.border_locked_active = rgb(94e2d5)
|
||
groupbar {
|
||
col.active = rgb(89b4fa)
|
||
col.inactive = rgb(45475a)
|
||
text_color = rgb(cdd6f4)
|
||
}
|
||
}
|
||
|
||
# Misc
|
||
misc {
|
||
background_color = rgb(1e1e2e)
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgcf8722c" class="outline-3">
|
||
<h3 id="orgcf8722c"><code>generated/.config/hypr/window-rules.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orgcf8722c">
|
||
<p>
|
||
These are config files for .config/hypr
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-conf">
|
||
# 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-wrapped
|
||
float = on
|
||
move = move onscreen 100%-w 0
|
||
size = 900 700
|
||
}
|
||
|
||
#Quickshell powermenu
|
||
windowrule {
|
||
name = quickshell-powermenu
|
||
match:title = quickshell-powermenu
|
||
opacity = 1.0 0.8
|
||
float = on
|
||
move = cursor -50% 0
|
||
pin = on
|
||
}
|
||
|
||
#Quickshell media menu
|
||
windowrule {
|
||
name = quickshell-media
|
||
match:title = quickshell-media
|
||
float = on
|
||
move = cursor -50% 0
|
||
pin = on
|
||
}
|
||
|
||
# Wofi window rules
|
||
# (match: fields do not support $variables, hardcoded intentionally)
|
||
windowrule {
|
||
name = wofi
|
||
match:class = ^(wofi)$
|
||
border_color = rgb(89b4fa) rgb(a6e3a1) 45deg
|
||
rounding = 14
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orga5fed1f" class="outline-3">
|
||
<h3 id="orga5fed1f"><code>generated/.config/hypr/workspace-rules.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orga5fed1f">
|
||
<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-org3a42996" class="outline-3">
|
||
<h3 id="org3a42996"><code>generated/.config/quickshell/media/shell.qml</code></h3>
|
||
<div class="outline-text-3" id="text-org3a42996">
|
||
<p>
|
||
offers a adio widget
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-qml">import Quickshell
|
||
import Quickshell.Io
|
||
import QtQuick
|
||
import QtQuick.Layouts
|
||
|
||
ShellRoot {
|
||
QtObject {
|
||
id: colors
|
||
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.95)
|
||
readonly property color base: "#1e1e2e"
|
||
readonly property color surface0: "#313244"
|
||
readonly property color surface1: "#45475a"
|
||
readonly property color surface2: "#585b70"
|
||
readonly property color text: "#cdd6f4"
|
||
readonly property color subtext0: "#a6adc8"
|
||
readonly property color subtext1: "#bac2de"
|
||
readonly property color blue: "#89b4fa"
|
||
readonly property color green: "#a6e3a1"
|
||
readonly property color teal: "#94e2d5"
|
||
readonly property color red: "#f38ba8"
|
||
readonly property color mauve: "#cba6f7"
|
||
readonly property color peach: "#fab387"
|
||
readonly property color lavender: "#b4befe"
|
||
}
|
||
|
||
QtObject {
|
||
id: media
|
||
property string artist: ""
|
||
property string title: ""
|
||
property string album: ""
|
||
property string artUrl: ""
|
||
property string status: ""
|
||
property string device: ""
|
||
property string player: ""
|
||
property real progress: 0.0
|
||
property real duration: 0.0
|
||
property real position: 0.0
|
||
property int shuffleMode: 0
|
||
readonly property bool isSpotify: player.indexOf("spotify") !== -1
|
||
}
|
||
|
||
Timer {
|
||
interval: 1000
|
||
running: true
|
||
repeat: true
|
||
onTriggered: {
|
||
playerProc.running = true
|
||
artistProc.running = true
|
||
titleProc.running = true
|
||
albumProc.running = true
|
||
artProc.running = true
|
||
statusProc.running = true
|
||
positionProc.running = true
|
||
lengthProc.running = true
|
||
if (media.isSpotify)
|
||
shuffleProc.running = true
|
||
}
|
||
}
|
||
|
||
Process {
|
||
id: playerProc
|
||
command: ["playerctl", "-l"]
|
||
stdout: StdioCollector {
|
||
onStreamFinished: {
|
||
var lines = text.trim().split("\n")
|
||
for (var i = 0; i < lines.length; i++) {
|
||
if (lines[i].indexOf("spotify") !== -1) {
|
||
media.player = lines[i].trim()
|
||
return
|
||
}
|
||
}
|
||
media.player = lines[0] ? lines[0].trim() : ""
|
||
}
|
||
}
|
||
}
|
||
|
||
Process {
|
||
id: artistProc
|
||
command: ["playerctl", "metadata", "artist"]
|
||
stdout: StdioCollector { onStreamFinished: media.artist = text.trim() }
|
||
}
|
||
Process {
|
||
id: titleProc
|
||
command: ["playerctl", "metadata", "title"]
|
||
stdout: StdioCollector { onStreamFinished: media.title = text.trim() }
|
||
}
|
||
Process {
|
||
id: albumProc
|
||
command: ["playerctl", "metadata", "album"]
|
||
stdout: StdioCollector { onStreamFinished: media.album = text.trim() }
|
||
}
|
||
Process {
|
||
id: artProc
|
||
command: ["playerctl", "metadata", "mpris:artUrl"]
|
||
stdout: StdioCollector { onStreamFinished: media.artUrl = text.trim() }
|
||
}
|
||
Process {
|
||
id: statusProc
|
||
command: ["playerctl", "status"]
|
||
stdout: StdioCollector { onStreamFinished: media.status = text.trim() }
|
||
}
|
||
Process {
|
||
id: positionProc
|
||
command: ["playerctl", "position"]
|
||
stdout: StdioCollector {
|
||
onStreamFinished: {
|
||
media.position = parseFloat(text.trim()) || 0
|
||
if (media.duration > 0)
|
||
media.progress = media.position / media.duration
|
||
}
|
||
}
|
||
}
|
||
Process {
|
||
id: lengthProc
|
||
command: ["playerctl", "metadata", "mpris:length"]
|
||
stdout: StdioCollector {
|
||
onStreamFinished: {
|
||
media.duration = (parseFloat(text.trim()) || 0) / 1000000
|
||
}
|
||
}
|
||
}
|
||
|
||
Process {
|
||
id: shuffleProc
|
||
command: ["playerctl", "--player=" + media.player, "shuffle"]
|
||
stdout: StdioCollector {
|
||
onStreamFinished: {
|
||
media.shuffleMode = (text.trim() === "On") ? 1 : 0
|
||
}
|
||
}
|
||
}
|
||
|
||
Process { id: shuffleOnProc; command: ["playerctl", "--player=" + media.player, "shuffle", "on"] }
|
||
Process { id: shuffleOffProc; command: ["playerctl", "--player=" + media.player, "shuffle", "off"] }
|
||
|
||
function cycleShuffleMode() {
|
||
var next = (media.shuffleMode + 1) % 2
|
||
media.shuffleMode = next
|
||
if (next === 0)
|
||
shuffleOffProc.running = true
|
||
else
|
||
shuffleOnProc.running = true
|
||
}
|
||
|
||
// Focus spotify — uses exact lowercase class as reported by hyprctl
|
||
Process {
|
||
id: focusSpotifyProc
|
||
command: ["hyprctl", "dispatch", "focuswindow", "class:^(spotify)$"]
|
||
}
|
||
|
||
function focusPlayer() {
|
||
if (media.isSpotify) {
|
||
focusSpotifyProc.running = true
|
||
}
|
||
}
|
||
|
||
Process { id: prevProc; command: ["playerctl", "previous"] }
|
||
Process { id: playProc; command: ["playerctl", "play-pause"] }
|
||
Process { id: nextProc; command: ["playerctl", "next"] }
|
||
|
||
FloatingWindow {
|
||
id: root
|
||
title: "quickshell-media"
|
||
visible: true
|
||
implicitWidth: 300
|
||
implicitHeight: 420
|
||
color: "transparent"
|
||
|
||
Shortcut {
|
||
sequence: "Escape"
|
||
onActivated: Qt.quit()
|
||
}
|
||
|
||
// Gradient border — hidden when app has focus
|
||
Rectangle {
|
||
anchors.fill: parent
|
||
anchors.margins: -2
|
||
radius: 18
|
||
z: -1
|
||
opacity: Qt.application.active ? 0 : 1
|
||
Behavior on opacity {
|
||
NumberAnimation { duration: 150 }
|
||
}
|
||
gradient: Gradient {
|
||
orientation: Gradient.Horizontal
|
||
GradientStop { position: 0.0; color: colors.blue }
|
||
GradientStop { position: 1.0; color: colors.green }
|
||
}
|
||
}
|
||
|
||
Rectangle {
|
||
anchors.fill: parent
|
||
radius: 16
|
||
color: colors.base
|
||
|
||
ColumnLayout {
|
||
anchors {
|
||
fill: parent
|
||
margins: 16
|
||
}
|
||
spacing: 12
|
||
|
||
// Album art — click to focus player
|
||
Rectangle {
|
||
Layout.fillWidth: true
|
||
Layout.preferredHeight: 200
|
||
radius: 12
|
||
color: colors.surface0
|
||
clip: true
|
||
|
||
Image {
|
||
anchors.fill: parent
|
||
source: media.artUrl
|
||
fillMode: Image.PreserveAspectCrop
|
||
visible: media.artUrl !== ""
|
||
}
|
||
|
||
Text {
|
||
anchors.centerIn: parent
|
||
text: ""
|
||
font.pixelSize: 48
|
||
color: colors.surface2
|
||
visible: media.artUrl === ""
|
||
}
|
||
|
||
MouseArea {
|
||
anchors.fill: parent
|
||
cursorShape: Qt.PointingHandCursor
|
||
onClicked: focusPlayer()
|
||
}
|
||
}
|
||
|
||
// Artist
|
||
Text {
|
||
Layout.fillWidth: true
|
||
text: media.artist || "Unknown artist"
|
||
color: colors.subtext1
|
||
font.pixelSize: 12
|
||
elide: Text.ElideRight
|
||
}
|
||
|
||
// Title
|
||
Text {
|
||
Layout.fillWidth: true
|
||
text: media.title || "Nothing playing"
|
||
color: colors.text
|
||
font.pixelSize: 14
|
||
font.bold: true
|
||
elide: Text.ElideRight
|
||
}
|
||
|
||
// Album
|
||
Text {
|
||
Layout.fillWidth: true
|
||
text: media.album
|
||
color: colors.subtext0
|
||
font.pixelSize: 11
|
||
elide: Text.ElideRight
|
||
visible: media.album !== ""
|
||
}
|
||
|
||
// Device (Spotify)
|
||
Text {
|
||
Layout.fillWidth: true
|
||
text: " " + media.device
|
||
color: colors.green
|
||
font.pixelSize: 11
|
||
visible: media.device !== ""
|
||
}
|
||
|
||
// Progress bar
|
||
Rectangle {
|
||
Layout.fillWidth: true
|
||
height: 4
|
||
radius: 2
|
||
color: colors.surface1
|
||
|
||
Rectangle {
|
||
width: parent.width * media.progress
|
||
height: parent.height
|
||
radius: parent.radius
|
||
gradient: Gradient {
|
||
orientation: Gradient.Horizontal
|
||
GradientStop { position: 0.0; color: colors.blue }
|
||
GradientStop { position: 1.0; color: colors.green }
|
||
}
|
||
}
|
||
}
|
||
|
||
// Time
|
||
RowLayout {
|
||
Layout.fillWidth: true
|
||
|
||
Text {
|
||
text: {
|
||
var m = Math.floor(media.position / 60)
|
||
var s = Math.floor(media.position % 60)
|
||
return m + ":" + (s < 10 ? "0" + s : s)
|
||
}
|
||
color: colors.subtext0
|
||
font.pixelSize: 11
|
||
}
|
||
|
||
Item { Layout.fillWidth: true }
|
||
|
||
Text {
|
||
text: {
|
||
var m = Math.floor(media.duration / 60)
|
||
var s = Math.floor(media.duration % 60)
|
||
return m + ":" + (s < 10 ? "0" + s : s)
|
||
}
|
||
color: colors.subtext0
|
||
font.pixelSize: 11
|
||
}
|
||
}
|
||
|
||
// Playback controls + shuffle
|
||
RowLayout {
|
||
Layout.fillWidth: true
|
||
Layout.alignment: Qt.AlignHCenter
|
||
spacing: 20
|
||
|
||
// Shuffle button (Spotify only)
|
||
Item {
|
||
visible: media.isSpotify
|
||
width: 28
|
||
height: 28
|
||
|
||
Text {
|
||
anchors.centerIn: parent
|
||
text: ""
|
||
font.pixelSize: 18
|
||
color: media.shuffleMode === 0 ? colors.surface2 : colors.blue
|
||
}
|
||
|
||
MouseArea {
|
||
anchors.fill: parent
|
||
cursorShape: Qt.PointingHandCursor
|
||
onClicked: cycleShuffleMode()
|
||
}
|
||
}
|
||
|
||
Text {
|
||
text: ""
|
||
font.pixelSize: 22
|
||
color: prevHover.containsMouse ? colors.blue : colors.text
|
||
MouseArea {
|
||
id: prevHover
|
||
anchors.fill: parent
|
||
hoverEnabled: true
|
||
cursorShape: Qt.PointingHandCursor
|
||
onClicked: prevProc.running = true
|
||
}
|
||
}
|
||
|
||
Text {
|
||
text: media.status === "Playing" ? "" : ""
|
||
font.pixelSize: 28
|
||
color: playHover.containsMouse ? colors.green : colors.text
|
||
MouseArea {
|
||
id: playHover
|
||
anchors.fill: parent
|
||
hoverEnabled: true
|
||
cursorShape: Qt.PointingHandCursor
|
||
onClicked: playProc.running = true
|
||
}
|
||
}
|
||
|
||
Text {
|
||
text: ""
|
||
font.pixelSize: 22
|
||
color: nextHover.containsMouse ? colors.blue : colors.text
|
||
MouseArea {
|
||
id: nextHover
|
||
anchors.fill: parent
|
||
hoverEnabled: true
|
||
cursorShape: Qt.PointingHandCursor
|
||
onClicked: nextProc.running = true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgfb5ff32" class="outline-3">
|
||
<h3 id="orgfb5ff32"><code>generated/.config/quickshell/powermenu/shell.qml</code></h3>
|
||
<div class="outline-text-3" id="text-orgfb5ff32">
|
||
<p>
|
||
Provides a powermenu
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-qml">import Quickshell
|
||
import Quickshell.Io
|
||
import QtQuick
|
||
import QtQuick.Layouts
|
||
|
||
ShellRoot {
|
||
QtObject {
|
||
id: colors
|
||
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9)
|
||
readonly property color base: "#1e1e2e"
|
||
readonly property color surface0: "#313244"
|
||
readonly property color surface1: "#45475a"
|
||
readonly property color surface2: "#585b70"
|
||
readonly property color text: "#cdd6f4"
|
||
readonly property color subtext0: "#a6adc8"
|
||
readonly property color subtext1: "#bac2de"
|
||
readonly property color blue: "#89b4fa"
|
||
readonly property color green: "#a6e3a1"
|
||
readonly property color teal: "#94e2d5"
|
||
readonly property color red: "#f38ba8"
|
||
readonly property color mauve: "#cba6f7"
|
||
readonly property color peach: "#fab387"
|
||
readonly property color lavender: "#b4befe"
|
||
}
|
||
|
||
FloatingWindow {
|
||
id: root
|
||
title: "quickshell-powermenu"
|
||
visible: true
|
||
width: 220
|
||
height: contentLayout.implicitHeight + 32
|
||
color: colors.base
|
||
|
||
Shortcut {
|
||
sequence: "Escape"
|
||
onActivated: Qt.quit()
|
||
}
|
||
|
||
// Gradient border — hidden when app has focus
|
||
Rectangle {
|
||
anchors.fill: parent
|
||
anchors.margins: -2
|
||
radius: 18
|
||
z: -1
|
||
opacity: Qt.application.active ? 0 : 1
|
||
Behavior on opacity {
|
||
NumberAnimation { duration: 150 }
|
||
}
|
||
gradient: Gradient {
|
||
orientation: Gradient.Horizontal
|
||
GradientStop { position: 0.0; color: colors.blue }
|
||
GradientStop { position: 1.0; color: colors.green }
|
||
}
|
||
}
|
||
|
||
Rectangle {
|
||
anchors.fill: parent
|
||
radius: 16
|
||
color: colors.base
|
||
|
||
ColumnLayout {
|
||
id: contentLayout
|
||
anchors {
|
||
top: parent.top
|
||
left: parent.left
|
||
right: parent.right
|
||
margins: 16
|
||
}
|
||
spacing: 4
|
||
|
||
Text {
|
||
text: " Power Menu"
|
||
color: colors.text
|
||
font.pixelSize: 13
|
||
font.bold: true
|
||
Layout.bottomMargin: 8
|
||
}
|
||
|
||
Repeater {
|
||
model: [
|
||
{ label: " Lock", cmd: ["loginctl", "lock-session"] },
|
||
{ label: " Shutdown", cmd: ["systemctl", "poweroff"] },
|
||
{ label: " Reboot", cmd: ["systemctl", "reboot"] },
|
||
{ label: " Logout", cmd: ["bash", "-c", "loginctl terminate-session $XDG_SESSION_ID"] },
|
||
{ label: " Hibernate", cmd: ["systemctl", "hibernate"] },
|
||
{ label: " Suspend", cmd: ["systemctl", "suspend"] },
|
||
]
|
||
|
||
delegate: Rectangle {
|
||
id: item
|
||
Layout.fillWidth: true
|
||
height: 38
|
||
radius: 8
|
||
color: hovered ? colors.surface1 : colors.base
|
||
property bool hovered: false
|
||
|
||
Rectangle {
|
||
anchors.fill: parent
|
||
anchors.margins: -2
|
||
radius: parent.radius + 2
|
||
visible: item.hovered
|
||
z: -1
|
||
gradient: Gradient {
|
||
orientation: Gradient.Horizontal
|
||
GradientStop { position: 0.0; color: colors.blue }
|
||
GradientStop { position: 1.0; color: colors.green }
|
||
}
|
||
}
|
||
|
||
Text {
|
||
anchors.verticalCenter: parent.verticalCenter
|
||
anchors.left: parent.left
|
||
anchors.leftMargin: 12
|
||
text: modelData.label
|
||
color: item.hovered ? colors.text : colors.subtext1
|
||
font.pixelSize: 13
|
||
}
|
||
|
||
MouseArea {
|
||
anchors.fill: parent
|
||
hoverEnabled: true
|
||
onEntered: item.hovered = true
|
||
onExited: item.hovered = false
|
||
onClicked: proc.running = true
|
||
}
|
||
|
||
Process {
|
||
id: proc
|
||
command: modelData.cmd
|
||
onExited: Qt.quit()
|
||
}
|
||
}
|
||
}
|
||
|
||
Item { height: 4 }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org7a82666" class="outline-3">
|
||
<h3 id="org7a82666"><code>generated/.config/scripts/media.sh</code></h3>
|
||
<div class="outline-text-3" id="text-org7a82666">
|
||
<p>
|
||
Providing an media
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh">./media.sh
|
||
{"text":"","tooltip":"","class":"inactive"}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org4cf6761" class="outline-3">
|
||
<h3 id="org4cf6761"><code>generated/.config/scripts/layout-selector.sh</code></h3>
|
||
<div class="outline-text-3" id="text-org4cf6761">
|
||
<p>
|
||
Choose your layout
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-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 & 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" ] && 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-org8083588" class="outline-3">
|
||
<h3 id="org8083588"><code>generated/.config/scripts/hypr-autocolwidth.sh</code></h3>
|
||
<div class="outline-text-3" id="text-org8083588">
|
||
<p>
|
||
These are config files for .config/scripts
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-bash"># Auto-adjust scrolling column width based on window count
|
||
# Widths: 1 window = fullscreen (handled by hyprland)
|
||
# 2 windows = 0.5 each
|
||
# 3+ windows = 0.329 each
|
||
|
||
get_window_count() {
|
||
local ws_id=$1
|
||
hyprctl clients -j | jq "[.[] | select(.workspace.id == $ws_id)] | length"
|
||
}
|
||
|
||
get_active_workspace() {
|
||
hyprctl activeworkspace -j | jq -r '.id'
|
||
}
|
||
|
||
set_column_width() {
|
||
local width=$1
|
||
hyprctl dispatch layoutmsg "colresize all $width"
|
||
}
|
||
|
||
handle_event() {
|
||
local event=$1
|
||
|
||
case "$event" in
|
||
openwindow*|closewindow*|movewindow*)
|
||
ws_id=$(get_active_workspace)
|
||
count=$(get_window_count "$ws_id")
|
||
|
||
if [ "$count" -le 1 ]; then
|
||
# fullscreen_on_one_column handles this
|
||
:
|
||
elif [ "$count" -eq 2 ]; then
|
||
set_column_width 0.5
|
||
else
|
||
set_column_width 0.329
|
||
fi
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Listen to hyprland socket events
|
||
socket="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
||
|
||
socat -U - "UNIX-CONNECT:$socket" | while read -r line; do
|
||
handle_event "$line"
|
||
done
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org50dca54" class="outline-3">
|
||
<h3 id="org50dca54"><code>generated/.config/scripts/power.sh</code></h3>
|
||
<div class="outline-text-3" id="text-org50dca54">
|
||
<p>
|
||
Enables a terminal power menu
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh">#
|
||
# Launch a power menu
|
||
#
|
||
# Requires fzf and systemd (loginctl, systemctl)
|
||
#
|
||
# Author: Jesse Mirabel <sejjymvm@gmail.com>
|
||
# Date: August 19, 2025
|
||
# License: MIT
|
||
|
||
main() {
|
||
local list=(
|
||
" Lock"
|
||
" Shutdown"
|
||
" Reboot"
|
||
" Logout"
|
||
" Hibernate"
|
||
" Suspend"
|
||
)
|
||
|
||
local options=(
|
||
"--border=sharp"
|
||
"--border-label= Power Menu "
|
||
"--cycle"
|
||
"--ghost=Search"
|
||
"--height=~100%"
|
||
"--highlight-line"
|
||
"--info=inline-right"
|
||
"--pointer="
|
||
"--reverse"
|
||
)
|
||
|
||
local selected
|
||
selected=$(printf "%s\n" "${list[@]}" | fzf "${options[@]}")
|
||
|
||
case $selected in
|
||
Lock) loginctl lock-session ;;
|
||
Shutdown) systemctl poweroff ;;
|
||
Reboot) systemctl reboot ;;
|
||
Logout) loginctl terminate-session "$XDG_SESSION_ID" ;;
|
||
Hibernate) systemctl hibernate ;;
|
||
Suspend) systemctl suspend ;;
|
||
*) return 1 ;;
|
||
esac
|
||
}
|
||
|
||
main
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgf3db078" class="outline-3">
|
||
<h3 id="orgf3db078"><code>generated/.config/scripts/update.sh</code></h3>
|
||
<div class="outline-text-3" id="text-orgf3db078">
|
||
<p>
|
||
A file containing color variables
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh">set -e
|
||
REPO="/home/henrov/Repos/nixos/Droidnix"
|
||
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-orgf40644c" class="outline-3">
|
||
<h3 id="orgf40644c"><code>generated/.config/scripts/wofi-launcher.sh</code></h3>
|
||
<div class="outline-text-3" id="text-orgf40644c">
|
||
<p>
|
||
Providing an media
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh">wofi --show drun \
|
||
--style ~/.config/wofi/style.css \
|
||
--no-actions \
|
||
--allow-images=false \
|
||
--columns 1 \
|
||
--prompt "Apps ..."
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org276f9cd" class="outline-3">
|
||
<h3 id="org276f9cd"><code>generated/.config/shared/Colors.css</code></h3>
|
||
<div class="outline-text-3" id="text-org276f9cd">
|
||
<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-org730c75e" class="outline-3">
|
||
<h3 id="org730c75e"><code>generated/.config/starship.toml</code></h3>
|
||
<div class="outline-text-3" id="text-org730c75e">
|
||
<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-orgd3028d3" class="outline-3">
|
||
<h3 id="orgd3028d3"><code>generated/.config/stylix/stylix.conf</code></h3>
|
||
<div class="outline-text-3" id="text-orgd3028d3">
|
||
<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-orgd02ce66" class="outline-3">
|
||
<h3 id="orgd02ce66"><code>generated/.config/stylix/palette.json</code></h3>
|
||
<div class="outline-text-3" id="text-orgd02ce66">
|
||
<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-org1fd8624" class="outline-3">
|
||
<h3 id="org1fd8624"><code>generated/.config/stylix/palette.html</code></h3>
|
||
<div class="outline-text-3" id="text-org1fd8624">
|
||
<p>
|
||
These are config files for .config/stylix
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-html"><html>
|
||
<head>
|
||
<style>
|
||
body {
|
||
margin: 2rem;
|
||
font-family: sans-serif;
|
||
}
|
||
body > div {
|
||
display: flex;
|
||
flex-direction: row;
|
||
flex-leader: wrap;
|
||
gap: 1em;
|
||
}
|
||
body > div > 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; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<h2>Primary colors</h2>
|
||
<div>
|
||
<div id="base00">00</div>
|
||
<div id="base01">01</div>
|
||
<div id="base02">02</div>
|
||
<div id="base03">03</div>
|
||
<div id="base04">04</div>
|
||
<div id="base05">05</div>
|
||
<div id="base06">06</div>
|
||
<div id="base07">07</div>
|
||
</div>
|
||
|
||
<h2>Accents</h2>
|
||
<div>
|
||
<div id="base08">08</div>
|
||
<div id="base09">09</div>
|
||
<div id="base0A">0A</div>
|
||
<div id="base0B">0B</div>
|
||
<div id="base0C">0C</div>
|
||
<div id="base0D">0D</div>
|
||
<div id="base0E">0E</div>
|
||
<div id="base0F">0F</div>
|
||
</div>
|
||
|
||
<h2>Documentation</h2>
|
||
<p>Each color should be used as described in <a href="https://github.com/chriskempson/base16/blob/main/styling.md#styling-guidelines"> this table</a>.</p>
|
||
<p>See the <a href="https://nix-community.github.io/stylix">Stylix documentation</a> for how to apply these colors on NixOS.</p>
|
||
</body>
|
||
</html>
|
||
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org7a41802" class="outline-3">
|
||
<h3 id="org7a41802"><code>generated/.config/waybar/config</code></h3>
|
||
<div class="outline-text-3" id="text-org7a41802">
|
||
<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": [
|
||
"group/connections",
|
||
"group/hardware",
|
||
],
|
||
|
||
"modules-center": [
|
||
"group/workspaces",
|
||
"custom/power",
|
||
"custom/media"
|
||
],
|
||
|
||
"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": [
|
||
/* "custom/media", */
|
||
"pulseaudio",
|
||
"pulseaudio/slider",
|
||
]
|
||
},
|
||
|
||
/*******************************************************************/
|
||
|
||
|
||
"hyprland/workspaces": {
|
||
"align": 1,
|
||
"format": "{name}",
|
||
"interval": 2,
|
||
},
|
||
|
||
"custom/windows": {
|
||
"align": 0,
|
||
"format": "{text}",
|
||
"exec": "~/.config/scripts/hypr-workspaces.sh",
|
||
"interval": 2,
|
||
"return-type": "json",
|
||
"on-click": "~/.config/scripts/hypr-workspacesmenu.sh",
|
||
"tooltip": true
|
||
},
|
||
|
||
"custom/media": {
|
||
"exec": "~/.config/scripts/media.sh",
|
||
"interval": 2,
|
||
"return-type": "json",
|
||
"on-click": "qs -c media",
|
||
"max-length": 20,
|
||
"scroll-step": 1,
|
||
"tooltip": true
|
||
},
|
||
|
||
"custom/bluetooth": {
|
||
"exec": "~/.config/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...."
|
||
},
|
||
|
||
"custom/power": {
|
||
"format": "",
|
||
"on-click": "qs -c powermenu",
|
||
"tooltip-format": "Power Menu"
|
||
},
|
||
|
||
"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": "networkmanager_dmenu --dmenu --style ~/.config/wofi/style.css --allow-images=false",
|
||
"on-click-right": "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": "<tt><small>{calendar}</small></tt>",
|
||
"calendar": {
|
||
"mode" : "year",
|
||
"mode-mon-col" : 3,
|
||
"weeks-pos" : "left",
|
||
"on-scroll" : 1,
|
||
"on-click-right": "mode",
|
||
"format": {
|
||
"months": "<span color='#fab387'><b>{}</b></span>",
|
||
"days": "<span color='#cba6f7'><b>{}</b></span>",
|
||
"weeks": "<span color='#a6e3a1'><b>W{}</b></span>",
|
||
"weekdays": "<span color='#f9e2af'><b>{}</b></span>",
|
||
"today": "<span color='#1e1e2e' bgcolor='#a6e3a1'><b> {} </b></span>"
|
||
}
|
||
},
|
||
"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-org4c20e82" class="outline-3">
|
||
<h3 id="org4c20e82"><code>generated/.config/waybar/style-dark.css</code></h3>
|
||
<div class="outline-text-3" id="text-org4c20e82">
|
||
<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 > widget,
|
||
.modules-center > widget,
|
||
.modules-right > 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 > box + box,
|
||
.modules-center > box + box,
|
||
.modules-right > box + box {
|
||
margin-left: 5px;
|
||
}
|
||
|
||
.modules-left > widget label,
|
||
.modules-left > label ,
|
||
.modules-center > widget label,
|
||
.modules-center > label,
|
||
.modules-right > widget label,
|
||
.modules-right > 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 */
|
||
}
|
||
|
||
/* Active vs inactive workspace colors */
|
||
#workspaces button.active {
|
||
background: linear-gradient(45deg, @blue, @green);
|
||
color: @base;
|
||
}
|
||
|
||
activeworkspaces:not(.active) {
|
||
background: linear-gradient(@base-alpha, @base-alpha);
|
||
border: 2px solid transparent;
|
||
color: @text-muted; /* inactive text color */
|
||
}
|
||
|
||
label#custom-windows.module {
|
||
font-size: 14px;
|
||
color: @base;
|
||
padding: 0 8px;
|
||
border-radius: 30px;
|
||
transition: all 0.3s ease;
|
||
}
|
||
|
||
label#custom-windows.active {
|
||
background: linear-gradient(45deg, alpha(@blue, 0.5), alpha(@green, 0.5));
|
||
}
|
||
|
||
label#custom-windows:not(.active) {
|
||
background: transparent;
|
||
color: transparent;
|
||
}
|
||
|
||
/* ---- Media ---*/
|
||
|
||
label#custom-media:not(.active) {
|
||
background: transparent;
|
||
color: transparent;
|
||
opacity: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
min-width: 0;
|
||
}
|
||
|
||
label#custom-media.inactive {
|
||
background: transparent;
|
||
color: transparent;
|
||
opacity: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
min-width: 0;
|
||
}
|
||
|
||
label#custom-media.module {
|
||
padding: 0 8px;
|
||
color: @text;
|
||
}
|
||
|
||
/* ---- Pulseaudio ---*/
|
||
|
||
#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;
|
||
border-radius: 30px;
|
||
}
|
||
|
||
#battery.charging {
|
||
color: @green;
|
||
}
|
||
|
||
#battery.warning:not(.charging) {
|
||
color: white;
|
||
animation: blink 0.5s linear infinite alternate;
|
||
border-radius: 30px;
|
||
border: 2px solid transparent;
|
||
}
|
||
|
||
@keyframes blink {
|
||
to {
|
||
background-color: #ffffff;
|
||
color: black;
|
||
border-radius: 30px;
|
||
border: 2px solid transparent;
|
||
}
|
||
}
|
||
|
||
#network.disconnected {
|
||
background-color: @red;
|
||
border-radius: 30px;
|
||
border: 2px solid transparent;
|
||
}
|
||
|
||
#temperature.critical {
|
||
background-color: @red;
|
||
border-radius: 30px;
|
||
border: 2px solid transparent;
|
||
}
|
||
|
||
/* --------------------------------------------------------- */
|
||
/* 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-org45abd7a" class="outline-3">
|
||
<h3 id="org45abd7a"><code>generated/.config/scripts/bluetooth-status.sh</code></h3>
|
||
<div class="outline-text-3" id="text-org45abd7a">
|
||
<p>
|
||
These are config files for waybar
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh">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 < <(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-org24861b6" class="outline-3">
|
||
<h3 id="org24861b6"><code>generated/.config/scripts/hypr-workspaces.sh</code></h3>
|
||
<div class="outline-text-3" id="text-org24861b6">
|
||
<p>
|
||
These are config files for waybar
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh"># Get focused monitor name
|
||
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .name')
|
||
monitor="${WAYBAR_OUTPUT_NAME:-$focused_monitor}"
|
||
|
||
# Hide if not focused monitor
|
||
if [ "$monitor" != "$focused_monitor" ]; then
|
||
jq -c -n '{text:"", class:"hidden"}'
|
||
exit 0
|
||
fi
|
||
|
||
# Get active workspace on this monitor
|
||
active_ws=$(hyprctl monitors -j | jq -r \
|
||
".[] | select(.name==\"$monitor\") | .activeWorkspace.id")
|
||
|
||
# Get clients
|
||
clients=$(hyprctl clients -j | jq -r \
|
||
".[] | select(.workspace.id==$active_ws) | \"\(.title)\"")
|
||
|
||
count=$(echo "$clients" | grep -c '\S')
|
||
|
||
# Hide if 0 or 1 clients — no point showing window switcher
|
||
if [ "$count" -le 1 ]; then
|
||
jq -c -n '{text:"", class:"hidden"}'
|
||
exit 0
|
||
fi
|
||
|
||
tooltip=$(echo "$clients" | sed 's/^/• /' | paste -sd '\n' -)
|
||
|
||
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-orgc2908f3" class="outline-3">
|
||
<h3 id="orgc2908f3"><code>generated/.config/scripts/hypr-workspacesmenu.sh</code></h3>
|
||
<div class="outline-text-3" id="text-orgc2908f3">
|
||
<p>
|
||
These are config files for waybar
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-sh">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 \
|
||
--style ~/.config/wofi/style.css \
|
||
--allow-images=false \
|
||
--prompt "Active windows ...")
|
||
|
||
[ -z "$choice" ] && 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-org9324af0" class="outline-3">
|
||
<h3 id="org9324af0"><code>generated/.config/waypaper/config.ini</code></h3>
|
||
<div class="outline-text-3" id="text-org9324af0">
|
||
<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-org4046c11" class="outline-3">
|
||
<h3 id="org4046c11"><code>generated/.config/waypaper/config.ini</code></h3>
|
||
<div class="outline-text-3" id="text-org4046c11">
|
||
<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-orgf0b9bdb" class="outline-3">
|
||
<h3 id="orgf0b9bdb"><code>generated/.config/wofi/config</code></h3>
|
||
<div class="outline-text-3" id="text-orgf0b9bdb">
|
||
<p>
|
||
These are config files for .config/wofi
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-toml">[global]
|
||
allow_markup = true
|
||
|
||
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
|
||
|
||
prompt = > ...
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org86ad2d9" class="outline-3">
|
||
<h3 id="org86ad2d9"><code>generated/.config/wofi/style.css</code></h3>
|
||
<div class="outline-text-3" id="text-org86ad2d9">
|
||
<p>
|
||
This is the default layout for wofi
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-css">@import "~/.config/shared/Colors.css";
|
||
|
||
* {
|
||
background-color: transparent;
|
||
color: @text;
|
||
font-family: "JetBrainsMono Nerd Font", monospace;
|
||
font-size: 12pt;
|
||
}
|
||
|
||
#window {
|
||
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||
border-radius: 28px;
|
||
padding: 2px;
|
||
}
|
||
|
||
#outer-box {
|
||
background-color: rgba(30, 30, 46, 0.98); /* almost solid */
|
||
border-radius: 26px;
|
||
padding: 12px;
|
||
}
|
||
|
||
#inner-box {
|
||
background: transparent;
|
||
padding: 0;
|
||
}
|
||
|
||
#input {
|
||
background-color: @surface1; /* stronger than surface0 */
|
||
color: @text;
|
||
border: 1px solid @surface2;
|
||
border-radius: 18px;
|
||
padding: 10px 14px;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
#input:focus {
|
||
border: 1px solid @blue;
|
||
background-color: @surface2;
|
||
}
|
||
|
||
#entry {
|
||
background-color: rgba(0, 0, 0, 0.35);
|
||
color: @subtext1;
|
||
border-radius: 18px;
|
||
padding: 10px 14px;
|
||
margin: 2px 0;
|
||
transition: all 0.15s ease;
|
||
}
|
||
|
||
|
||
#entry:hover {
|
||
background-color: rgba(0, 0, 0, 0.5);
|
||
color: @text;
|
||
}
|
||
|
||
#entry:focus {
|
||
background: linear-gradient(45deg, #89b4fa, #89b4fa);
|
||
color: @lavender;
|
||
border-radius: 18px;
|
||
}
|
||
|
||
#entry:selected {
|
||
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||
border-radius: 18px;
|
||
font-weight: bold;
|
||
}
|
||
|
||
#entry image {
|
||
margin-right: 10px;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
#scrollbar {
|
||
background-color: @surface1;
|
||
border-radius: 20px;
|
||
width: 6px;
|
||
}
|
||
|
||
#scrollbar handle {
|
||
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||
border-radius: 20px;
|
||
}
|
||
|
||
#prompt {
|
||
color: @subtext0;
|
||
margin-right: 6px;
|
||
}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org223e58d" class="outline-3">
|
||
<h3 id="org223e58d"><code>generated/.config/zed/settings.json</code></h3>
|
||
<div class="outline-text-3" id="text-org223e58d">
|
||
<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-orga9eba60" class="outline-3">
|
||
<h3 id="orga9eba60"><code>generated/.config/zsh/.zshrc</code></h3>
|
||
<div class="outline-text-3" id="text-orga9eba60">
|
||
<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 >/dev/null 2>&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-14 di 15:22</p>
|
||
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
|
||
</div>
|
||
</body>
|
||
</html>
|