diff --git a/assets/bocchi/bocchi.txt b/assets/bocchi/bocchi.txt
new file mode 100644
index 0000000..924ae4d
--- /dev/null
+++ b/assets/bocchi/bocchi.txt
@@ -0,0 +1,16 @@
+[0m [0m [0m [0m [0m [0m[38;2;204;102;178mβ[0m[38;2;204;102;178mβ[38;2;204;103;178m[48;2;255;226;218mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;167;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[0m[38;2;112;44;127mβ[0m[38;2;112;44;127mβ[0m [0m [0m [0m [0m [0m [0m [0m [0m [0m [0m
+[0m [0m [0m [0m[38;2;204;102;178mβ[38;2;204;102;178m[48;2;255;226;218mβ[38;2;255;226;218m[48;2;255;226;218mβ[38;2;255;226;218m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;253;166;209mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;254;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;253;166;209mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;254;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;211mβ[38;2;255;165;208m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;112;44;129m[48;2;255;166;210mβ[38;2;115;45;128m[48;2;205;103;181mβ[38;2;112;45;127m[48;2;3;155;231mβ[38;2;112;44;127m[48;2;3;155;230mβ[38;2;112;44;127m[48;2;2;93;210mβ[0m[38;2;109;44;126mβ[0m [0m [0m [0m [0m
+[0m [0m[38;2;204;102;178mβ[38;2;204;102;178m[48;2;255;227;218mβ[38;2;255;227;218m[48;2;255;226;218mβ[38;2;255;226;218m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;167;210mβ[38;2;255;226;218m[48;2;255;226;218mβ[38;2;255;226;219m[48;2;255;226;218mβ[38;2;255;166;210m[48;2;255;226;218mβ[38;2;255;167;210m[48;2;255;166;211mβ[38;2;255;166;210m[48;2;255;226;218mβ[38;2;255;226;218m[48;2;255;227;218mβ[38;2;255;167;210m[48;2;255;226;218mβ[38;2;255;166;211m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;3;155;230m[48;2;3;155;230mβ[38;2;1;93;209m[48;2;1;92;209mβ[38;2;1;92;209m[48;2;1;92;209mβ[38;2;112;44;127m[48;2;255;166;210mβ[38;2;112;44;127m[48;2;255;166;211mβ[38;2;112;44;127m[48;2;255;166;210mβ[0m[38;2;112;44;127mβ[0m [0m
+[0m[38;2;204;102;178mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;255;226;219m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;167;210m[48;2;255;166;210mβ[38;2;255;226;219m[48;2;255;166;210mβ[38;2;253;226;219m[48;2;255;166;210mβ[38;2;255;226;218m[48;2;255;166;210mβ[38;2;255;226;218m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;167;210mβ[38;2;255;166;212m[48;2;255;166;210mβ[38;2;255;226;218m[48;2;255;166;208mβ[38;2;254;166;210m[48;2;255;167;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;167;209m[48;2;255;167;210mβ[38;2;255;166;210m[48;2;255;166;211mβ[38;2;204;102;178m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;204;102;176mβ[38;2;255;166;210m[48;2;204;102;178mβ[38;2;255;166;211m[48;2;115;70;127mβ[38;2;253;215;52m[48;2;253;214;52mβ[38;2;253;215;52m[48;2;217;147;34mβ[38;2;217;147;34m[48;2;217;147;34mβ[38;2;112;44;127m[48;2;112;44;127mβ[38;2;255;166;210m[48;2;112;44;127mβ[38;2;255;166;212m[48;2;255;166;210mβ[38;2;113;43;129m[48;2;112;44;125mβ[0m
+[0m[38;2;204;102;178mβ[0m[38;2;205;102;178mβ[38;2;204;103;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;254;166;210m[48;2;115;70;127mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;211m[48;2;255;166;210mβ[38;2;254;166;210m[48;2;255;167;210mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;204;102;178mβ[38;2;254;166;210m[48;2;255;166;210mβ[38;2;255;167;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;205;102;178m[48;2;204;102;178mβ[38;2;115;70;127m[48;2;115;70;127mβ[38;2;253;215;53m[48;2;255;166;210mβ[38;2;217;147;34m[48;2;255;167;210mβ[38;2;217;147;34m[48;2;112;44;127mβ[0m[38;2;112;44;126mβ[0m [0m[38;2;112;44;127mβ[0m[38;2;112;44;127mβ[0m
+[0m [0m [38;2;204;102;178m[48;2;202;101;177mβ[38;2;255;167;210m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;40;18;90mβ[38;2;255;167;210m[48;2;39;17;89mβ[38;2;115;70;129m[48;2;39;19;91mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;211mβ[38;2;255;166;210m[48;2;255;167;209mβ[38;2;114;70;127m[48;2;115;70;127mβ[38;2;204;102;178m[48;2;40;18;91mβ[38;2;255;166;210m[48;2;40;18;90mβ[38;2;254;166;210m[48;2;40;18;90mβ[38;2;205;102;181m[48;2;40;18;90mβ[38;2;115;70;126m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;115;70;127m[48;2;115;70;127mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;113;44;127m[48;2;113;45;128mβ[0m [0m [0m [0m [0m
+[0m [0m [38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;115;70;127mβ[38;2;228;209;215m[48;2;228;209;215mβ[38;2;40;18;90m[48;2;40;182;246mβ[38;2;40;19;90m[48;2;40;182;246mβ[38;2;204;180;217m[48;2;204;180;216mβ[38;2;204;102;178m[48;2;204;180;216mβ[38;2;255;166;210m[48;2;204;102;178mβ[38;2;115;70;127m[48;2;204;180;216mβ[38;2;40;18;90m[48;2;40;182;246mβ[38;2;40;18;90m[48;2;40;182;246mβ[38;2;40;18;90m[48;2;41;182;246mβ[38;2;228;209;215m[48;2;228;209;215mβ[38;2;255;167;210m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;115;70;126m[48;2;115;70;127mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;112;44;127m[48;2;112;44;127mβ[0m [0m [0m [0m [0m
+[0m [0m [38;2;204;102;178m[48;2;203;103;177mβ[38;2;255;166;211m[48;2;254;166;208mβ[38;2;115;70;127m[48;2;115;70;127mβ[38;2;255;254;255m[48;2;255;234;228mβ[38;2;40;182;246m[48;2;254;233;229mβ[38;2;41;183;249m[48;2;255;235;229mβ[38;2;255;234;229m[48;2;255;234;228mβ[38;2;255;234;229m[48;2;255;246;241mβ[38;2;255;236;229m[48;2;255;246;241mβ[38;2;254;234;227m[48;2;255;234;229mβ[38;2;40;182;246m[48;2;255;234;229mβ[38;2;41;182;246m[48;2;255;234;229mβ[38;2;40;182;246m[48;2;255;234;229mβ[38;2;255;255;255m[48;2;255;236;229mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;212mβ[38;2;205;102;178m[48;2;204;103;178mβ[38;2;115;70;127m[48;2;115;70;126mβ[38;2;204;102;178m[48;2;205;102;178mβ[38;2;255;166;210m[48;2;255;167;210mβ[38;2;112;44;127m[48;2;255;166;210mβ[0m[38;2;112;44;127mβ[0m [0m [0m [0m
+[0m [0m [0m [0m[38;2;204;103;178mβ[38;2;115;70;127m[48;2;205;102;178mβ[38;2;208;146;155m[48;2;255;166;210mβ[38;2;255;235;229m[48;2;209;146;155mβ[38;2;255;234;229m[48;2;208;146;155mβ[38;2;254;234;229m[48;2;209;146;155mβ[38;2;255;234;229m[48;2;209;146;154mβ[38;2;255;234;229m[48;2;209;146;155mβ[38;2;255;234;229m[48;2;209;146;155mβ[38;2;255;234;229m[48;2;209;146;155mβ[38;2;255;234;229m[48;2;208;146;155mβ[38;2;254;234;229m[48;2;208;146;155mβ[38;2;204;103;178m[48;2;204;103;178mβ[38;2;255;166;210m[48;2;205;102;178mβ[38;2;255;166;210m[48;2;204;102;178mβ[38;2;204;103;178m[48;2;115;70;127mβ[38;2;115;70;127m[48;2;113;44;127mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;254;166;210m[48;2;255;166;210mβ[38;2;112;44;127m[48;2;112;44;126mβ[0m [0m [0m [0m
+[0m [0m [0m [0m [38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;211m[48;2;255;166;210mβ[38;2;255;167;209m[48;2;153;47;116mβ[38;2;153;46;114m[48;2;231;115;164mβ[38;2;231;115;164m[48;2;231;115;164mβ[38;2;231;115;164m[48;2;255;246;241mβ[38;2;254;246;241m[48;2;231;115;164mβ[38;2;191;96;136m[48;2;231;115;164mβ[38;2;191;96;136m[48;2;191;96;136mβ[38;2;191;96;136m[48;2;191;96;136mβ[38;2;255;244;240m[48;2;232;116;163mβ[38;2;152;45;115m[48;2;255;246;239mβ[38;2;115;70;127m[48;2;153;46;116mβ[38;2;115;70;127m[48;2;112;44;127mβ[38;2;112;44;127m[48;2;113;43;129mβ[38;2;112;44;127m[48;2;112;44;127mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;204;102;178m[48;2;204;103;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;112;44;127m[48;2;112;44;127mβ[0m [0m [0m [0m
+[0m [0m [0m [0m [38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;97;46;61mβ[38;2;153;46;116m[48;2;153;46;116mβ[38;2;230;115;164m[48;2;231;115;164mβ[38;2;231;114;164m[48;2;231;115;165mβ[38;2;255;246;241m[48;2;255;246;241mβ[38;2;231;115;164m[48;2;231;115;164mβ[38;2;231;114;164m[48;2;231;115;164mβ[38;2;191;96;136m[48;2;231;115;164mβ[38;2;153;46;116m[48;2;191;96;136mβ[38;2;231;114;164m[48;2;153;46;116mβ[38;2;231;115;164m[48;2;231;115;164mβ[38;2;255;246;241m[48;2;231;115;164mβ[38;2;153;46;116m[48;2;255;246;241mβ[38;2;112;44;127m[48;2;96;46;61mβ[38;2;112;44;127m[48;2;112;44;127mβ[38;2;204;103;178m[48;2;204;102;178mβ[38;2;204;102;179m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;255;166;210m[48;2;255;166;210mβ[38;2;112;44;126m[48;2;112;44;127mβ[0m [0m [0m [0m
+[0m [0m [0m [0m [38;2;97;46;61m[48;2;97;46;61mβ[38;2;255;234;229m[48;2;255;234;229mβ[38;2;255;179;181m[48;2;255;180;177mβ[38;2;153;46;114m[48;2;109;81;134mβ[38;2;231;115;164m[48;2;62;53;106mβ[38;2;231;115;164m[48;2;108;81;134mβ[38;2;255;246;240m[48;2;62;53;106mβ[38;2;231;115;164m[48;2;108;81;134mβ[38;2;231;115;164m[48;2;62;53;106mβ[38;2;191;96;136m[48;2;108;81;134mβ[38;2;193;97;139m[48;2;62;52;106mβ[38;2;95;46;59m[48;2;98;45;61mβ[38;2;255;234;229m[48;2;254;234;229mβ[38;2;255;179;179m[48;2;255;234;229mβ[38;2;254;180;179m[48;2;255;180;177mβ[38;2;97;46;61m[48;2;98;45;61mβ[38;2;204;102;178m[48;2;204;103;178mβ[38;2;204;102;178m[48;2;204;102;178mβ[38;2;255;166;210m[48;2;255;166;212mβ[38;2;112;44;127m[48;2;113;45;132mβ[0m [0m [0m [0m [0m
+[0m [0m [0m [0m [0m [0m[38;2;97;46;61mβ[38;2;96;46;61m[48;2;62;53;106mβ[38;2;108;81;134m[48;2;62;53;107mβ[38;2;62;53;106m[48;2;108;81;134mβ[38;2;108;81;134m[48;2;108;81;134mβ[38;2;62;53;106m[48;2;62;53;106mβ[38;2;108;81;134m[48;2;108;81;134mβ[38;2;62;53;106m[48;2;108;80;134mβ[38;2;108;81;134m[48;2;62;53;106mβ[38;2;62;53;106m[48;2;62;53;106mβ[38;2;63;53;106m[48;2;62;53;106mβ[38;2;97;46;61m[48;2;62;53;106mβ[0m[38;2;97;46;61mβ[0m[38;2;97;46;61mβ[0m[38;2;112;44;127mβ[0m[38;2;112;44;127mβ[0m[38;2;112;44;127mβ[0m[38;2;112;44;127mβ[0m [0m [0m [0m [0m [0m
+[0m [0m [0m [0m [0m [0m [0m [38;2;99;45;63m[48;2;20;20;49mβ[38;2;255;229;218m[48;2;38;38;76mβ[38;2;255;229;219m[48;2;38;38;76mβ[38;2;255;179;179m[48;2;19;20;50mβ[38;2;97;46;61m[48;2;20;21;51mβ[38;2;255;229;218m[48;2;39;38;76mβ[38;2;255;179;179m[48;2;20;21;51mβ[38;2;255;178;179m[48;2;20;21;51mβ[38;2;97;46;61m[48;2;20;21;51mβ[0m [0m [0m [0m [0m [0m [0m [0m [0m [0m [0m [0m [0m
+[0m [0m [0m [0m [0m [0m [38;2;20;21;51m[48;2;20;21;51mβ[38;2;153;77;76m[48;2;152;77;77mβ[38;2;153;77;77m[48;2;153;77;77mβ[38;2;153;77;77m[48;2;153;77;76mβ[38;2;116;46;57m[48;2;117;46;57mβ[38;2;20;21;51m[48;2;20;21;51mβ[38;2;116;47;57m[48;2;116;46;56mβ[38;2;153;77;77m[48;2;153;77;77mβ[38;2;152;77;77m[48;2;153;76;77mβ[38;2;116;47;57m[48;2;116;46;57mβ[38;2;20;21;51m[48;2;20;21;51mβ[0m [0m [0m [0m [0m [0m [0m [0m [0m [0m [0m [0m
+
diff --git a/assets/pictures/bocchi_lockscreen.png b/assets/pictures/bocchi_lockscreen.png
new file mode 100644
index 0000000..f6130ee
Binary files /dev/null and b/assets/pictures/bocchi_lockscreen.png differ
diff --git a/assets/pictures/bocchi_wallpaper.png b/assets/pictures/bocchi_wallpaper.png
new file mode 100644
index 0000000..7070062
Binary files /dev/null and b/assets/pictures/bocchi_wallpaper.png differ
diff --git a/assets/pictures/roy_bocchi.png b/assets/pictures/roy_bocchi.png
new file mode 100644
index 0000000..11a2118
Binary files /dev/null and b/assets/pictures/roy_bocchi.png differ
diff --git a/configuration/main/500G-disk.nix b/configuration/main/500G-disk.nix
new file mode 100644
index 0000000..2d13ee0
--- /dev/null
+++ b/configuration/main/500G-disk.nix
@@ -0,0 +1,7 @@
+{
+ fileSystems."/mnt/500G-disk" = {
+ device = "/dev/disk/by-uuid/1a899f03-4c6a-460a-9635-c4b208b29fba";
+ fsType = "ext4";
+ options = ["nofail" "user" "rw" "exec"];
+ };
+}
diff --git a/configuration/main/configuration.nix b/configuration/main/configuration.nix
new file mode 100644
index 0000000..e80375d
--- /dev/null
+++ b/configuration/main/configuration.nix
@@ -0,0 +1,49 @@
+{
+ pkgs,
+ inputs,
+ ...
+}: {
+ imports = [
+ ./hardware-configuration.nix
+ ./verbatim.nix
+ ./500G-disk.nix
+
+ ../modules/system/graphics.nix
+ ../modules/system/boot.nix
+ ../modules/system/networking.nix
+ ../modules/system/xdg-settings.nix
+ ../modules/system/window-manager.nix
+ ../modules/system/sddm.nix
+ ../modules/system/main-user.nix
+ ../modules/system/programs.nix
+ ../modules/system/ssh.nix
+ ../modules/system/sound.nix
+ ../modules/system/printing.nix
+ ../modules/system/input-handle.nix
+ ../modules/system/keyboard.nix
+ ../modules/system/locale.nix
+
+ ../modules/dots/quick_shell/module.nix
+ ];
+
+ programs.niri.enable = true;
+ programs.xwayland = {
+ enable = true;
+ package = pkgs.xwayland-satellite;
+ };
+
+ nix.settings.experimental-features = ["nix-command" "flakes"];
+
+ nixpkgs.config = {
+ allowUnfree = true;
+ nvidia.acceptLicense = true;
+ };
+
+ services.xserver.enable = true;
+
+ environment.shells = [pkgs.nushell];
+
+ home-manager.extraSpecialArgs = {inherit inputs;};
+
+ system.stateVersion = "25.11";
+}
diff --git a/configuration/main/hardware-configuration.nix b/configuration/main/hardware-configuration.nix
new file mode 100644
index 0000000..dc8dc59
--- /dev/null
+++ b/configuration/main/hardware-configuration.nix
@@ -0,0 +1,40 @@
+# Do not modify this file! It was generated by βnixos-generate-configβ
+# and may be overwritten by future invocations. Please make changes
+# to /etc/nixos/configuration.nix instead.
+{ config, lib, pkgs, modulesPath, ... }:
+
+{
+ imports =
+ [ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ boot.initrd.availableKernelModules = [ "ata_generic" "ehci_pci" "ahci" "nvme" "usbhid" "uas" "sd_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ ];
+ boot.extraModulePackages = [ ];
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/339dddc4-c4f8-47ea-a7a9-471c77f7c89e";
+ fsType = "ext4";
+ };
+
+ fileSystems."/boot" =
+ { device = "/dev/disk/by-uuid/1ff36da1-f1eb-4ae0-911f-d638ad5cf5ec";
+ fsType = "ext4";
+ };
+
+ fileSystems."/mnt/500G-disk" =
+ { device = "/dev/disk/by-uuid/1a899f03-4c6a-460a-9635-c4b208b29fba";
+ fsType = "ext4";
+ };
+
+ fileSystems."/mnt/verbatim" =
+ { device = "/dev/disk/by-uuid/2aa5f849-1df0-4f3a-b7db-ef64d06b16e4";
+ fsType = "ext4";
+ };
+
+ swapDevices = [ ];
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+}
diff --git a/configuration/main/verbatim.nix b/configuration/main/verbatim.nix
new file mode 100644
index 0000000..076eeb8
--- /dev/null
+++ b/configuration/main/verbatim.nix
@@ -0,0 +1,7 @@
+{
+ fileSystems."/mnt/verbatim" = {
+ device = "/dev/disk/by-uuid/2aa5f849-1df0-4f3a-b7db-ef64d06b16e4";
+ fsType = "ext4";
+ options = ["nofail" "user" "rw" "exec"];
+ };
+}
diff --git a/configuration/modules/dots/quick_shell/.envrc b/configuration/modules/dots/quick_shell/.envrc
new file mode 100644
index 0000000..e69de29
diff --git a/configuration/modules/dots/quick_shell/config/.qmlls.ini b/configuration/modules/dots/quick_shell/config/.qmlls.ini
new file mode 120000
index 0000000..4ddb8a7
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/.qmlls.ini
@@ -0,0 +1 @@
+/run/user/1000/quickshell/vfs/740f0dbe5bf608b9ce0b8dffafd96492/.qmlls.ini
\ No newline at end of file
diff --git a/configuration/modules/dots/quick_shell/config/CalendarPopup.qml b/configuration/modules/dots/quick_shell/config/CalendarPopup.qml
new file mode 100644
index 0000000..ef0fe78
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/CalendarPopup.qml
@@ -0,0 +1,39 @@
+pragma ComponentBehavior: Bound
+
+import Quickshell
+import QtQuick
+
+PanelWindow {
+ id: calendarPopup
+
+ required property bool expanderOpen
+ required property color bgColor
+ required property color recColor
+ required property int recRadius
+ required property int barWidth
+
+ anchors.left: true
+ anchors.bottom: true
+ implicitWidth: (expanderOpen || popupAnim.running) ? 160 : 0
+ implicitHeight: (expanderOpen || popupAnim.running) ? 1400 : 0
+ color: "transparent"
+
+ Rectangle {
+ id: popupRectangle
+
+ y: calendarPopup.height - height
+ x: calendarPopup.expanderOpen ? 0 : -(width + calendarPopup.barWidth)
+ width: 160
+ height: 140
+ color: calendarPopup.bgColor
+
+ Behavior on x {
+ NumberAnimation {
+ id: popupAnim
+
+ duration: 400
+ easing.type: Easing.OutCubic
+ }
+ }
+ }
+}
diff --git a/configuration/modules/dots/quick_shell/config/PowerPopup.qml b/configuration/modules/dots/quick_shell/config/PowerPopup.qml
new file mode 100644
index 0000000..8998820
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/PowerPopup.qml
@@ -0,0 +1,86 @@
+pragma ComponentBehavior: Bound
+
+import Quickshell
+import QtQuick
+import QtQuick.Controls
+
+PanelWindow {
+ id: powerPopup
+
+ required property bool expanderOpen
+ required property color bgColor
+ required property color recColor
+ required property int recRadius
+ required property int barWidth
+
+ anchors.left: true
+ anchors.bottom: true
+ implicitWidth: (expanderOpen || popupAnim.running) ? 140 : 0
+ implicitHeight: (expanderOpen || popupAnim.running) ? 100 : 0
+ color: "transparent"
+
+ Rectangle {
+ id: popupRectangle
+
+ y: parent.height - height
+ x: powerPopup.expanderOpen ? 0 : -(width + powerPopup.barWidth)
+ width: 140
+ height: 100
+ color: powerPopup.bgColor
+
+ Behavior on x {
+ NumberAnimation {
+ id: popupAnim
+
+ duration: 400
+ easing.type: Easing.OutCubic
+ }
+ }
+
+ Row {
+ anchors.centerIn: popupRectangle
+ spacing: 10
+
+ Rectangle {
+ color: powerPopup.recColor
+ width: 50
+ height: 50
+ radius: powerPopup.recRadius * 2
+
+ Button {
+ anchors.fill: parent
+ opacity: 0
+
+ onClicked: Quickshell.execDetached(["poweroff"])
+ }
+
+ Image {
+ anchors.centerIn: parent
+ source: "file://" + Quickshell.shellDir + "/assets/power.svg"
+ sourceSize.width: 28
+ sourceSize.height: 28
+ }
+ }
+ Rectangle {
+ color: powerPopup.recColor
+ width: 50
+ height: 50
+ radius: powerPopup.recRadius * 2
+
+ Button {
+ anchors.fill: parent
+ opacity: 0
+
+ onClicked: Quickshell.execDetached(["reboot"])
+ }
+
+ Image {
+ anchors.centerIn: parent
+ source: "file://" + Quickshell.shellDir + "/assets/reboot.svg"
+ sourceSize.width: 28
+ sourceSize.height: 28
+ }
+ }
+ }
+ }
+}
diff --git a/configuration/modules/dots/quick_shell/config/SideBar.qml b/configuration/modules/dots/quick_shell/config/SideBar.qml
new file mode 100644
index 0000000..adc24f5
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/SideBar.qml
@@ -0,0 +1,143 @@
+pragma ComponentBehavior: Bound
+
+import Quickshell
+import QtQuick
+import QtQuick.Controls
+
+PanelWindow {
+ id: sideBar
+
+ required property var clock
+ required property color bgColor
+ required property color recColor
+ required property color fontColor
+ required property int fontSize
+ required property int barWidth
+ required property int recRadius
+ required property int recLength
+ required property int myMargin
+ required property int edgeMargin
+
+ required property bool powerExpanderOpen
+ required property bool calendarExpanderOpen
+
+ anchors.top: true
+ anchors.left: true
+ anchors.bottom: true
+
+ implicitWidth: sideBar.barWidth
+ color: sideBar.bgColor
+
+ Rectangle {
+ id: logo
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ top: parent.top
+ topMargin: sideBar.edgeMargin
+ }
+ implicitHeight: sideBar.recLength
+ implicitWidth: sideBar.recLength
+ radius: sideBar.recRadius
+ color: sideBar.recColor
+
+ Image {
+ anchors.centerIn: parent
+ source: "file://" + Quickshell.shellDir + "/assets/logo.svg"
+ sourceSize.width: 30
+ sourceSize.height: 30
+ }
+ }
+
+ Rectangle {
+ id: workspaces
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ top: logo.bottom
+ topMargin: sideBar.myMargin
+ }
+ implicitHeight: 200
+ implicitWidth: sideBar.recLength
+ radius: sideBar.recRadius
+ color: sideBar.recColor
+
+ Text {
+ anchors.centerIn: parent
+ color: sideBar.fontColor
+ font.pixelSize: sideBar.fontSize
+ text: "ws"
+ }
+ }
+
+ Rectangle {
+ id: notifications
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ bottom: time.top
+ bottomMargin: sideBar.myMargin
+ }
+ implicitHeight: sideBar.recLength
+ implicitWidth: sideBar.recLength
+ radius: sideBar.recRadius
+ color: sideBar.recColor
+
+ Text {
+ anchors.centerIn: parent
+ color: sideBar.fontColor
+ font.pixelSize: sideBar.fontSize
+ text: "notif"
+ }
+ }
+
+ Rectangle {
+ id: time
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ bottom: power.top
+ bottomMargin: sideBar.myMargin
+ }
+ implicitHeight: sideBar.recLength
+ implicitWidth: sideBar.recLength
+ radius: sideBar.recRadius
+ color: sideBar.recColor
+ property real hello: time.y
+
+ Button {
+ anchors.fill: parent
+ opacity: 0
+ onClicked: sideBar.calendarExpanderOpen = !sideBar.calendarExpanderOpen
+ }
+
+ Text {
+ anchors.centerIn: parent
+ color: sideBar.fontColor
+ font.pixelSize: sideBar.fontSize
+ text: Qt.formatDateTime(sideBar.clock.date, "hh\nmm")
+ }
+ }
+
+ Rectangle {
+ id: power
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ bottom: parent.bottom
+ bottomMargin: sideBar.edgeMargin
+ }
+ implicitHeight: sideBar.recLength
+ implicitWidth: sideBar.recLength
+ radius: sideBar.recRadius
+ color: sideBar.recColor
+
+ Button {
+ anchors.fill: parent
+ opacity: 0
+ onClicked: sideBar.powerExpanderOpen = !sideBar.powerExpanderOpen
+ }
+
+ Image {
+ anchors.centerIn: parent
+ source: "file://" + Quickshell.shellDir + "/assets/power.svg"
+ sourceSize.width: 28
+ sourceSize.height: 28
+ }
+ }
+}
diff --git a/configuration/modules/dots/quick_shell/config/assets/logo.svg b/configuration/modules/dots/quick_shell/config/assets/logo.svg
new file mode 100644
index 0000000..1cceefe
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/assets/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/configuration/modules/dots/quick_shell/config/assets/power.svg b/configuration/modules/dots/quick_shell/config/assets/power.svg
new file mode 100644
index 0000000..aced5be
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/assets/power.svg
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/configuration/modules/dots/quick_shell/config/assets/reboot.svg b/configuration/modules/dots/quick_shell/config/assets/reboot.svg
new file mode 100644
index 0000000..5e3110e
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/assets/reboot.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/configuration/modules/dots/quick_shell/config/shell.qml b/configuration/modules/dots/quick_shell/config/shell.qml
new file mode 100644
index 0000000..4f51db1
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/config/shell.qml
@@ -0,0 +1,73 @@
+pragma ComponentBehavior: Bound
+
+import Quickshell
+import QtQuick
+
+ShellRoot {
+ id: root
+
+ property color bgColor: "#6a6365"
+ property color recColor: "#595254"
+ property color fontColor: "#FFFFFF"
+ property int fontSize: 14
+ property int barWidth: 50
+ property int recRadius: 8
+ property int recLength: 35
+ property int myMargin: 10
+ property int edgeMargin: 15
+
+ SystemClock {
+ id: clock
+ precision: SystemClock.Minutes
+ }
+
+ Variants {
+ model: Quickshell.screens
+
+ delegate: Scope {
+ id: delegate
+ required property var modelData
+
+ property bool powerExpanderOpen: false
+ property bool calendarExpanderOpen: false
+
+ SideBar {
+ clock: clock
+ screen: delegate.modelData
+ bgColor: root.bgColor
+ recColor: root.recColor
+ fontColor: root.fontColor
+ fontSize: root.fontSize
+ barWidth: root.barWidth
+ recRadius: root.recRadius
+ recLength: root.recLength
+ myMargin: root.myMargin
+ edgeMargin: root.edgeMargin
+
+ powerExpanderOpen: delegate.powerExpanderOpen
+ onPowerExpanderOpenChanged: delegate.powerExpanderOpen = powerExpanderOpen
+
+ calendarExpanderOpen: delegate.calendarExpanderOpen
+ onCalendarExpanderOpenChanged: delegate.calendarExpanderOpen = calendarExpanderOpen
+ }
+
+ PowerPopup {
+ screen: delegate.modelData
+ expanderOpen: delegate.powerExpanderOpen
+ bgColor: root.bgColor
+ recColor: root.recColor
+ recRadius: root.recRadius
+ barWidth: root.barWidth
+ }
+
+ CalendarPopup {
+ screen: delegate.modelData
+ expanderOpen: delegate.calendarExpanderOpen
+ bgColor: root.bgColor
+ recColor: root.recColor
+ recRadius: root.recRadius
+ barWidth: root.barWidth
+ }
+ }
+ }
+}
diff --git a/configuration/modules/dots/quick_shell/module.nix b/configuration/modules/dots/quick_shell/module.nix
new file mode 100644
index 0000000..a2d1b66
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/module.nix
@@ -0,0 +1,20 @@
+{pkgs, ...}: let
+ qs_config = pkgs.callPackage ./package.nix {};
+in {
+ environment.systemPackages = [pkgs.quickshell];
+
+ systemd.user.services.quickshell = {
+ restartIfChanged = true;
+
+ description = "quickshell desktop shell";
+ wantedBy = ["graphical-session.target"];
+ partOf = ["graphical-session.target"];
+ after = ["graphical-session.target"];
+
+ serviceConfig = {
+ ExecStart = "${pkgs.quickshell}/bin/qs -c ${qs_config}";
+ Restart = "on-failure";
+ RestartSec = 3;
+ };
+ };
+}
diff --git a/configuration/modules/dots/quick_shell/package.nix b/configuration/modules/dots/quick_shell/package.nix
new file mode 100644
index 0000000..9a59032
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/package.nix
@@ -0,0 +1,9 @@
+{stdenv}:
+stdenv.mkDerivation {
+ pname = "quickshell-config";
+ version = "unstable";
+ src = ./config;
+ installPhase = ''
+ cp -r . $out
+ '';
+}
diff --git a/configuration/modules/dots/quick_shell/shell.nix b/configuration/modules/dots/quick_shell/shell.nix
new file mode 100644
index 0000000..6879520
--- /dev/null
+++ b/configuration/modules/dots/quick_shell/shell.nix
@@ -0,0 +1,10 @@
+{pkgs ? import {}}:
+pkgs.mkShell {
+ buildInputs = [
+ pkgs.qt6.qtbase
+ pkgs.qt6.qtdeclarative
+ pkgs.qt6.qtwayland
+ pkgs.qtcreator
+ pkgs.quickshell
+ ];
+}
diff --git a/configuration/modules/dots/wayland_panel b/configuration/modules/dots/wayland_panel
new file mode 160000
index 0000000..4895333
--- /dev/null
+++ b/configuration/modules/dots/wayland_panel
@@ -0,0 +1 @@
+Subproject commit 4895333ff1e6b2b9442a58a3c69dad96d7f3b8f3
diff --git a/configuration/modules/system/boot.nix b/configuration/modules/system/boot.nix
new file mode 100644
index 0000000..1c36211
--- /dev/null
+++ b/configuration/modules/system/boot.nix
@@ -0,0 +1,11 @@
+{pkgs, ...}: {
+ boot = {
+ kernelPackages = pkgs.linuxPackages_6_12;
+ kernelParams = ["nvidia-drm.modeset=1"];
+
+ loader.grub = {
+ enable = true;
+ device = "/dev/disk/by-id/ata-KINGSTON_SKC300S37A60G_50026B7239039148";
+ };
+ };
+}
diff --git a/modules/hosts/desktop/hardware.nix b/configuration/modules/system/graphics.nix
similarity index 55%
rename from modules/hosts/desktop/hardware.nix
rename to configuration/modules/system/graphics.nix
index 5c5726d..4ad4b3a 100644
--- a/modules/hosts/desktop/hardware.nix
+++ b/configuration/modules/system/graphics.nix
@@ -1,18 +1,19 @@
{config, ...}: {
- flake.modules.nixos.desktop = {
- nixpkgs.hostPlatform = "x86_64-linux";
+ services.xserver.videoDrivers = [
+ "nvidia"
+ ];
- hardware = {
- graphics = {
- enable = true;
- enable32Bit = true;
- };
+ hardware = {
+ graphics = {
+ enable = true;
+ enable32Bit = true;
};
nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
open = false;
+ nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.production;
};
};
diff --git a/configuration/modules/system/input-handle.nix b/configuration/modules/system/input-handle.nix
new file mode 100644
index 0000000..2578a46
--- /dev/null
+++ b/configuration/modules/system/input-handle.nix
@@ -0,0 +1,3 @@
+{
+ services.libinput.enable = true;
+}
diff --git a/configuration/modules/system/keyboard.nix b/configuration/modules/system/keyboard.nix
new file mode 100644
index 0000000..96a81b1
--- /dev/null
+++ b/configuration/modules/system/keyboard.nix
@@ -0,0 +1,6 @@
+{
+ services.xserver.xkb = {
+ layout = "cz";
+ options = "caps:escape";
+ };
+}
diff --git a/configuration/modules/system/locale.nix b/configuration/modules/system/locale.nix
new file mode 100644
index 0000000..c1e9d41
--- /dev/null
+++ b/configuration/modules/system/locale.nix
@@ -0,0 +1,19 @@
+{
+ console.keyMap = "cz-lat2";
+ time.timeZone = "Europe/Prague";
+
+ i18n = {
+ defaultLocale = "en_US.UTF-8";
+ extraLocaleSettings = {
+ LC_ADDRESS = "cs_CZ.UTF-8";
+ LC_IDENTIFICATION = "cs_CZ.UTF-8";
+ LC_MEASUREMENT = "cs_CZ.UTF-8";
+ LC_MONETARY = "cs_CZ.UTF-8";
+ LC_NAME = "cs_CZ.UTF-8";
+ LC_NUMERIC = "cs_CZ.UTF-8";
+ LC_PAPER = "cs_CZ.UTF-8";
+ LC_TELEPHONE = "cs_CZ.UTF-8";
+ LC_TIME = "cs_CZ.UTF-8";
+ };
+ };
+}
diff --git a/configuration/modules/system/main-user.nix b/configuration/modules/system/main-user.nix
new file mode 100644
index 0000000..b5c6253
--- /dev/null
+++ b/configuration/modules/system/main-user.nix
@@ -0,0 +1,8 @@
+{pkgs, ...}: {
+ users.users.benag = {
+ isNormalUser = true;
+ extraGroups = ["wheel"];
+
+ shell = pkgs.nushell;
+ };
+}
diff --git a/configuration/modules/system/networking.nix b/configuration/modules/system/networking.nix
new file mode 100644
index 0000000..6611ed0
--- /dev/null
+++ b/configuration/modules/system/networking.nix
@@ -0,0 +1,6 @@
+{
+ networking = {
+ hostName = "nixos";
+ networkmanager.enable = true;
+ };
+}
diff --git a/configuration/modules/system/printing.nix b/configuration/modules/system/printing.nix
new file mode 100644
index 0000000..72086cf
--- /dev/null
+++ b/configuration/modules/system/printing.nix
@@ -0,0 +1,9 @@
+{
+ services.printing.enable = true;
+
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
+ };
+}
diff --git a/configuration/modules/system/programs.nix b/configuration/modules/system/programs.nix
new file mode 100644
index 0000000..d55c2c7
--- /dev/null
+++ b/configuration/modules/system/programs.nix
@@ -0,0 +1,18 @@
+{pkgs, ...}: {
+ programs = {
+ steam = {
+ enable = true;
+ remotePlay.openFirewall = true;
+ dedicatedServer.openFirewall = true;
+ localNetworkGameTransfers.openFirewall = true;
+ extraPackages = with pkgs; [
+ freetype
+ fontconfig
+ ];
+ };
+
+ gamemode.enable = true;
+ bash.blesh.enable = true;
+ nix-ld.enable = true;
+ };
+}
diff --git a/configuration/modules/system/sddm.nix b/configuration/modules/system/sddm.nix
new file mode 100644
index 0000000..9b2a84c
--- /dev/null
+++ b/configuration/modules/system/sddm.nix
@@ -0,0 +1,7 @@
+{
+ services.displayManager.sddm = {
+ enable = true;
+ autoNumlock = true;
+ wayland.enable = false;
+ };
+}
diff --git a/configuration/modules/system/sound.nix b/configuration/modules/system/sound.nix
new file mode 100644
index 0000000..945248d
--- /dev/null
+++ b/configuration/modules/system/sound.nix
@@ -0,0 +1,13 @@
+{
+ services = {
+ pipewire = {
+ enable = true;
+ pulse.enable = true;
+
+ alsa = {
+ enable = true;
+ support32Bit = true;
+ };
+ };
+ };
+}
diff --git a/configuration/modules/system/ssh.nix b/configuration/modules/system/ssh.nix
new file mode 100644
index 0000000..8f0456f
--- /dev/null
+++ b/configuration/modules/system/ssh.nix
@@ -0,0 +1,3 @@
+{
+ services.openssh.enable = true;
+}
diff --git a/configuration/modules/system/window-manager.nix b/configuration/modules/system/window-manager.nix
new file mode 100644
index 0000000..49570d8
--- /dev/null
+++ b/configuration/modules/system/window-manager.nix
@@ -0,0 +1,5 @@
+{
+ services.xserver.windowManager = {
+ bspwm.enable = true;
+ };
+}
diff --git a/configuration/modules/system/xdg-settings.nix b/configuration/modules/system/xdg-settings.nix
new file mode 100644
index 0000000..a70fb91
--- /dev/null
+++ b/configuration/modules/system/xdg-settings.nix
@@ -0,0 +1,14 @@
+{pkgs, ...}: {
+ xdg = {
+ portal = {
+ enable = true;
+ extraPortals = [pkgs.xdg-desktop-portal-gtk];
+ configPackages = with pkgs; [
+ xdg-desktop-portal-gtk
+ ];
+ };
+
+ mime.enable = true;
+ menus.enable = true;
+ };
+}
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..8d36a7e
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,401 @@
+{
+ "nodes": {
+ "flake-compat": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1751685974,
+ "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
+ "ref": "refs/heads/main",
+ "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
+ "revCount": 92,
+ "type": "git",
+ "url": "https://git.lix.systems/lix-project/flake-compat.git"
+ },
+ "original": {
+ "type": "git",
+ "url": "https://git.lix.systems/lix-project/flake-compat.git"
+ }
+ },
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "nvf",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1768135262,
+ "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "floating-calc": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "rust-overlay": "rust-overlay"
+ },
+ "locked": {
+ "lastModified": 1772147792,
+ "narHash": "sha256-dxrp+Srkq9mQ+qg53oFI1RKieIi9epEdXyJkv44bZP4=",
+ "ref": "refs/heads/main",
+ "rev": "2abbacf66e99db523d624037f3e449aa40e8f366",
+ "revCount": 12,
+ "type": "git",
+ "url": "https://git.stribrny.org/max_ag/floating-calculator"
+ },
+ "original": {
+ "type": "git",
+ "url": "https://git.stribrny.org/max_ag/floating-calculator"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1773810247,
+ "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_2": {
+ "inputs": {
+ "nixpkgs": [
+ "zen-browser",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1773422513,
+ "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "mnw": {
+ "locked": {
+ "lastModified": 1767030222,
+ "narHash": "sha256-kSvWF3Xt2HW9hmV5V7i8PqeWJIBUKmuKoHhOgj3Znzs=",
+ "owner": "Gerg-L",
+ "repo": "mnw",
+ "rev": "75bb637454b0fbbb5ed652375a4bf7ffd28bcf6f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Gerg-L",
+ "repo": "mnw",
+ "type": "github"
+ }
+ },
+ "ndg": {
+ "inputs": {
+ "nixpkgs": [
+ "nvf",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1768214250,
+ "narHash": "sha256-hnBZDQWUxJV3KbtvyGW5BKLO/fAwydrxm5WHCWMQTbw=",
+ "owner": "feel-co",
+ "repo": "ndg",
+ "rev": "a6bd3c1ce2668d096e4fdaaa03ad7f03ba1fbca8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "feel-co",
+ "ref": "refs/tags/v2.6.0",
+ "repo": "ndg",
+ "type": "github"
+ }
+ },
+ "niri-flake": {
+ "inputs": {
+ "niri-stable": "niri-stable",
+ "niri-unstable": "niri-unstable",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "nixpkgs-stable": "nixpkgs-stable",
+ "xwayland-satellite-stable": "xwayland-satellite-stable",
+ "xwayland-satellite-unstable": "xwayland-satellite-unstable"
+ },
+ "locked": {
+ "lastModified": 1773809319,
+ "narHash": "sha256-ZuMZEuxqWneGaK+HAXz50JyCmtFo0neo6mp6F2NWj24=",
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "rev": "c4ee62058cd37d7b842c3b081917f792efee9082",
+ "type": "github"
+ },
+ "original": {
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "type": "github"
+ }
+ },
+ "niri-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1756556321,
+ "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "ref": "v25.08",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
+ "niri-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1773130184,
+ "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1773734432,
+ "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "cda48547b432e8d3b18b4180ba07473762ec8558",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-stable": {
+ "locked": {
+ "lastModified": 1773705440,
+ "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-25.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nvf": {
+ "inputs": {
+ "flake-compat": "flake-compat",
+ "flake-parts": "flake-parts",
+ "mnw": "mnw",
+ "ndg": "ndg",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1768464392,
+ "narHash": "sha256-H3DRARqclUFdUaWgu1xQEb86/wrh41ZG0fIQJVjcZdE=",
+ "owner": "notashelf",
+ "repo": "nvf",
+ "rev": "007f14a2c8d67568f4655654b401871920d73011",
+ "type": "github"
+ },
+ "original": {
+ "owner": "notashelf",
+ "repo": "nvf",
+ "rev": "007f14a2c8d67568f4655654b401871920d73011",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "floating-calc": "floating-calc",
+ "home-manager": "home-manager",
+ "niri-flake": "niri-flake",
+ "nixpkgs": "nixpkgs",
+ "nvf": "nvf",
+ "wayland-bar": "wayland-bar",
+ "zen-browser": "zen-browser"
+ }
+ },
+ "rust-overlay": {
+ "inputs": {
+ "nixpkgs": [
+ "floating-calc",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1771729765,
+ "narHash": "sha256-HNsDSR5bhLSrIpi9bTb2uTK1qnPo1xFSBxs6YmFyprk=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "be926cb1a76e8450ab2b92121b2e88d09fa4d41c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_2": {
+ "inputs": {
+ "nixpkgs": [
+ "wayland-bar",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1773630837,
+ "narHash": "sha256-zJhgAGnbVKeBMJOb9ctZm4BGS/Rnrz+5lfSXTVah4HQ=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "f600ea449c7b5bb596fa1cf21c871cc5b9e31316",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "wayland-bar": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "rust-overlay": "rust-overlay_2"
+ },
+ "locked": {
+ "lastModified": 1773784783,
+ "narHash": "sha256-T3oP3c75kt0Ef+uO3D9qy85VucA4mzhuREWz3FZBTSg=",
+ "ref": "refs/heads/main",
+ "rev": "58166358ba26a277d59fafd852ca7b10f1dbd442",
+ "revCount": 7,
+ "type": "git",
+ "url": "https://git.stribrny.org/max_ag/wayland_panel"
+ },
+ "original": {
+ "type": "git",
+ "url": "https://git.stribrny.org/max_ag/wayland_panel"
+ }
+ },
+ "xwayland-satellite-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1755491097,
+ "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "388d291e82ffbc73be18169d39470f340707edaa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "ref": "v0.7",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
+ },
+ "xwayland-satellite-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1773622265,
+ "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "a879e5e0896a326adc79c474bf457b8b99011027",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
+ },
+ "zen-browser": {
+ "inputs": {
+ "home-manager": "home-manager_2",
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1773737882,
+ "narHash": "sha256-P6k0BtT1/idYveVRdcwAZk8By9UjZW8XOMhSoS6wTBY=",
+ "owner": "0xc000022070",
+ "repo": "zen-browser-flake",
+ "rev": "a7f1db35d74faf04e5189b3a32f890186ace5c28",
+ "type": "github"
+ },
+ "original": {
+ "owner": "0xc000022070",
+ "repo": "zen-browser-flake",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
index d704145..e681259 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,11 +1,57 @@
{
+ description = "My nixos dots :3";
inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
- flake-parts.url = "github:/hercules-cli/flake-parts";
- import-tree.url = "github:vic/import-tree";
- };
+ nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
- outputs = inputs:
- inputs.flake-parts.lib.mkFlake {inherit inputs;}
- (inputs.import-tree [./modules]);
+ nvf = {
+ url = "github:notashelf/nvf/007f14a2c8d67568f4655654b401871920d73011";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ awww = {
+ url = "git+https://codeberg.org/LGFae/awww";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ niri-flake = {
+ url = "github:sodiboo/niri-flake";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ zen-browser = {
+ url = "github:0xc000022070/zen-browser-flake";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ home-manager = {
+ url = "github:nix-community/home-manager";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ floating-calc = {
+ url = "git+https://git.stribrny.org/max_ag/floating-calculator?rev=2abbacf66e99db523d624037f3e449aa40e8f366";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+ outputs = inputs @ {
+ nixpkgs,
+ home-manager,
+ ...
+ }: {
+ nixosConfigurations.benag = nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ specialArgs = {inherit inputs;};
+ modules = [
+ ./configuration/main/configuration.nix
+ home-manager.nixosModules.default
+ {
+ home-manager = {
+ useUserPackages = true;
+ useGlobalPkgs = true;
+ users.benag = ./home/home.nix;
+ };
+ }
+ ];
+ };
+ };
}
diff --git a/home/home.nix b/home/home.nix
new file mode 100644
index 0000000..aa18a1c
--- /dev/null
+++ b/home/home.nix
@@ -0,0 +1,62 @@
+{
+ pkgs,
+ inputs,
+ ...
+}: {
+ home = {
+ username = "benag";
+ homeDirectory = "/home/benag";
+ stateVersion = "25.11";
+ };
+
+ programs.home-manager.enable = true;
+
+ imports = [
+ ./modules/niri.nix
+
+ ./modules/bspwm.nix
+ ./modules/sxhkd.nix
+
+ ./modules/picom.nix
+
+ ./modules/shells.nix
+ ./modules/zellij.nix
+ ./modules/nvf.nix
+ ./modules/kitty.nix
+ ./modules/foot.nix
+ ./modules/polybar.nix
+ ./modules/waybar.nix
+ ./modules/fastfetch.nix
+ ./modules/cursor.nix
+ ./modules/git.nix
+ ./modules/create-project/create-project.nix
+ ];
+
+ home.packages = [
+ inputs.zen-browser.packages."x86_64-linux".default
+ pkgs.bspwm
+ pkgs.sxhkd
+
+ inputs.awww.packages.x86_64-linux.awww
+ pkgs.feh
+ pkgs.picom
+
+ pkgs.wofi
+ pkgs.neovim
+ pkgs.kitty
+ pkgs.foot
+ pkgs.fastfetch
+ pkgs.pavucontrol
+ pkgs.btop
+ pkgs.playerctl
+ pkgs.dunst
+ pkgs.zellij
+ inputs.floating-calc.packages.x86_64-linux.default
+
+ pkgs.discord
+ pkgs.heroic
+ pkgs.prismlauncher
+ pkgs.protonup-ng
+ pkgs.easyeffects
+ ];
+}
diff --git a/home/modules/bspwm.nix b/home/modules/bspwm.nix
new file mode 100644
index 0000000..3db7e48
--- /dev/null
+++ b/home/modules/bspwm.nix
@@ -0,0 +1,49 @@
+{
+ xsession.windowManager.bspwm = {
+ enable = true;
+
+ settings = {
+ focus_follows_pointer = true;
+ pointer_follows_focus = true;
+ pointer_follows_monitor = true;
+ };
+
+ monitors = {
+ DVI-I-1 = [
+ "I"
+ "II"
+ "III"
+ "IV"
+ "V"
+ "VI"
+ "VII"
+ "VIII"
+ "IX"
+ "X"
+ ];
+
+ HDMI-0 = [
+ "I"
+ "II"
+ "III"
+ "IV"
+ "V"
+ "VI"
+ "VII"
+ "VIII"
+ "IX"
+ "X"
+ ];
+ };
+
+ extraConfig = ''
+ feh --bg-fill "/home/benag/.nix-config/assets/pictures/bocchi_wallpaper.png"
+ xsetroot -cursor_name left_ptr &
+ '';
+
+ startupPrograms = [
+ "polybar primary"
+ "polybar secondary"
+ ];
+ };
+}
diff --git a/home/modules/create-project/create-project.nix b/home/modules/create-project/create-project.nix
new file mode 100644
index 0000000..6acb525
--- /dev/null
+++ b/home/modules/create-project/create-project.nix
@@ -0,0 +1,62 @@
+{pkgs, ...}: {
+ home.packages = [
+ (pkgs.writeScriptBin "create-project"
+ ''
+ #!${pkgs.nushell}/bin/nu
+
+ def main [
+ type?: string
+ name?: string
+ --local (-l)
+ ] {
+
+ if $name == null or $type == null {
+ print "Usage: create-project [Options: -l]"
+ exit 1
+ }
+
+ if ($name | str contains "/") or ($name | str contains ".") {
+ print "This is not a valid name for a project"
+ exit 1
+ }
+
+ if ($type | str contains "/") or ($type | str contains ".") {
+ print "This is not a valid project type"
+ exit 1
+ }
+
+ mkdir $name
+ cd $name
+
+ if ($"~/.nix-config/home/modules/create-project/project-blueprints/($type)" | path expand | ls $in | length) > 0 {
+ glob $"~/.nix-config/home/modules/create-project/project-blueprints/($type)/*" | each { |file| cp $file . }
+ }
+
+ if ($"./init.sh" | path type) == "file" {
+ bash $"./init.sh" $name
+ rm "init.sh"
+ }
+
+ echo "use flake" | save .envrc
+ direnv allow
+
+ git init
+ git add .
+ git commit -m "Project setup"
+
+ if $local {
+ print "You are all done"
+ exit 0
+ }
+
+ ${pkgs.tea}/bin/tea repos create --name $name
+ git remote add origin $"https://git.stribrny.org/ben_ag/($name).git"
+ git push -u origin main
+
+ print "You are all done"
+ exit 0
+
+ }
+ '')
+ ];
+}
diff --git a/home/modules/create-project/project-blueprints/python/flake.nix b/home/modules/create-project/project-blueprints/python/flake.nix
new file mode 100644
index 0000000..76fc5cf
--- /dev/null
+++ b/home/modules/create-project/project-blueprints/python/flake.nix
@@ -0,0 +1,23 @@
+{
+ description = "My python development shell";
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
+ };
+ outputs = {nixpkgs, ...}: let
+ system = "x86_64-linux";
+ pkgs = import nixpkgs {
+ inherit system;
+ };
+ in {
+ devShells."${system}" = {
+ default = pkgs.mkShell {
+ packages = [
+ (pkgs.python3.withPackages (python-pkgs: [
+ python-pkgs.numpy
+ python-pkgs.pandas
+ ]))
+ ];
+ };
+ };
+ };
+}
diff --git a/home/modules/create-project/project-blueprints/python/main.py b/home/modules/create-project/project-blueprints/python/main.py
new file mode 100644
index 0000000..cd9ac48
--- /dev/null
+++ b/home/modules/create-project/project-blueprints/python/main.py
@@ -0,0 +1,6 @@
+def main():
+ pass
+
+
+if __name__ == "__main__":
+ main()
diff --git a/home/modules/create-project/project-blueprints/rust/.gitignore b/home/modules/create-project/project-blueprints/rust/.gitignore
new file mode 100644
index 0000000..eb5a316
--- /dev/null
+++ b/home/modules/create-project/project-blueprints/rust/.gitignore
@@ -0,0 +1 @@
+target
diff --git a/home/modules/create-project/project-blueprints/rust/flake.nix b/home/modules/create-project/project-blueprints/rust/flake.nix
new file mode 100644
index 0000000..3b6f7ce
--- /dev/null
+++ b/home/modules/create-project/project-blueprints/rust/flake.nix
@@ -0,0 +1,29 @@
+{
+ description = "My rust development shell";
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
+ rust-overlay = {
+ url = "github:oxalica/rust-overlay";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = {nixpkgs, ...} @ inputs: let
+ system = "x86_64-linux";
+ overlays = [(import inputs.rust-overlay)];
+ pkgs = import nixpkgs {
+ inherit system overlays;
+ };
+ in {
+ devShells."${system}" = {
+ default = pkgs.mkShell {
+ buildInputs = with pkgs; [
+ gcc
+ gnumake
+ rust-bin.stable.latest.default
+ evcxr
+ ];
+ };
+ };
+ };
+}
diff --git a/home/modules/create-project/project-blueprints/rust/init.sh b/home/modules/create-project/project-blueprints/rust/init.sh
new file mode 100644
index 0000000..c925bdc
--- /dev/null
+++ b/home/modules/create-project/project-blueprints/rust/init.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+nix develop . --command bash -c "cargo new $1"
+
+cp -r "$1"/* .
+rm -fr "$1"
diff --git a/home/modules/cursor.nix b/home/modules/cursor.nix
new file mode 100644
index 0000000..a705c86
--- /dev/null
+++ b/home/modules/cursor.nix
@@ -0,0 +1,9 @@
+{pkgs, ...}: {
+ home.pointerCursor = {
+ gtk.enable = true;
+ x11.enable = true;
+ package = pkgs.bibata-cursors;
+ name = "Bibata-Modern-Ice";
+ size = 14;
+ };
+}
diff --git a/home/modules/fastfetch.nix b/home/modules/fastfetch.nix
new file mode 100644
index 0000000..d545bfe
--- /dev/null
+++ b/home/modules/fastfetch.nix
@@ -0,0 +1,88 @@
+{
+ programs.fastfetch = {
+ enable = true;
+
+ settings = {
+ logo = {
+ source = "/home/benag/.nix-config/assets/bocchi/bocchi.txt";
+ padding = {
+ top = 1;
+ left = 1;
+ };
+ };
+
+ display = {
+ separator = " -> ";
+ };
+
+ modules = [
+ "break"
+ {
+ type = "custom";
+ format = "βββββββββββββββββββββββHardwareβββββββββββββββββββββββ";
+ }
+ {
+ type = "title";
+ key = "ο PC";
+ keyColor = "green";
+ }
+ {
+ type = "disk";
+ key = "β βο";
+ device = "/dev/sdb";
+ keyColor = "green";
+ }
+
+ {
+ type = "cpu";
+ key = "β βοΌ";
+ keyColor = "green";
+ }
+ {
+ type = "gpu";
+ key = "β βσ°";
+ keyColor = "green";
+ }
+ {
+ type = "memory";
+ key = "β βσ°";
+ keyColor = "green";
+ }
+ {
+ type = "custom";
+ format = "ββββββββββββββββββββββββββββββββββββββββββββββββββββββ";
+ }
+ "break"
+ {
+ type = "custom";
+ format = "βββββββββββββββββββββββSoftwareβββββββββββββββββββββββ";
+ }
+ {
+ type = "os";
+ key = "σ°» OS";
+ keyColor = "yellow";
+ }
+ {
+ type = "kernel";
+ key = "β βο";
+ keyColor = "yellow";
+ }
+ {
+ type = "packages";
+ key = "β βσ°";
+ keyColor = "yellow";
+ }
+ {
+ type = "shell";
+ key = "β βο";
+ keyColor = "yellow";
+ }
+
+ {
+ type = "custom";
+ format = "ββββββββββββββββββββββββββββββββββββββββββββββββββββββ";
+ }
+ ];
+ };
+ };
+}
diff --git a/home/modules/foot.nix b/home/modules/foot.nix
new file mode 100644
index 0000000..4d3e8a0
--- /dev/null
+++ b/home/modules/foot.nix
@@ -0,0 +1,17 @@
+{pkgs, ...}: {
+ home.packages = [pkgs.nerd-fonts.jetbrains-mono];
+
+ programs.foot = {
+ enable = true;
+
+ settings = {
+ main = {
+ font = "JetBrainsMono Nerd Font:size=10";
+ };
+
+ colors-dark = {
+ alpha = "0.75";
+ };
+ };
+ };
+}
diff --git a/home/modules/git.nix b/home/modules/git.nix
new file mode 100644
index 0000000..cd9b46f
--- /dev/null
+++ b/home/modules/git.nix
@@ -0,0 +1,13 @@
+{pkgs, ...}: {
+ programs.git = {
+ enable = true;
+ package = pkgs.gitFull;
+ settings = {
+ user.name = "benstrb";
+ user.email = "ben.stribrny@gmail.com";
+ init.defaultBranch = "main";
+ github.user = "benstrb";
+ credential.helper = "store";
+ };
+ };
+}
diff --git a/home/modules/kitty.nix b/home/modules/kitty.nix
new file mode 100644
index 0000000..b109f14
--- /dev/null
+++ b/home/modules/kitty.nix
@@ -0,0 +1,9 @@
+{
+ programs.kitty = {
+ enable = false;
+
+ settings = {
+ background_opacity = 0.75;
+ };
+ };
+}
diff --git a/home/modules/niri.nix b/home/modules/niri.nix
new file mode 100644
index 0000000..2f2bc12
--- /dev/null
+++ b/home/modules/niri.nix
@@ -0,0 +1,169 @@
+{inputs, ...}: {
+ imports = [inputs.niri-flake.homeModules.niri];
+
+ programs.niri = {
+ enable = true;
+
+ settings = {
+ spawn-at-startup = [
+ {command = ["awww-daemon"];}
+ {command = ["awww" "img" "/home/benag/.nix-config/assets/pictures/bocchi_wallpaper.png"];}
+ ];
+
+ input = {
+ keyboard = {
+ xkb = {
+ layout = "cz";
+ options = "caps:escape";
+ };
+ };
+ };
+
+ outputs = {
+ "DVI-D-1".mode = {
+ width = 1920;
+ height = 1080;
+ };
+
+ "HDMI-A-1".mode = {
+ width = 1680;
+ height = 1050;
+ };
+ };
+
+ environment = {
+ NIXOS_OZONE_WL = "1";
+ SDL_VIDEODRIVER = "wayland";
+ CLUTTER_BACKEND = "wayland";
+ };
+
+ gestures = {
+ hot-corners.enable = false;
+ };
+
+ layout = {
+ gaps = 2;
+
+ default-column-width = {proportion = 0.5;};
+
+ preset-column-widths = [
+ {proportion = 0.33333;}
+ {proportion = 0.5;}
+ {proportion = 0.66667;}
+ {proportion = 1.0;}
+ ];
+
+ preset-window-heights = [
+ {proportion = 0.33333;}
+ {proportion = 0.5;}
+ {proportion = 0.66667;}
+ {proportion = 1.0;}
+ ];
+
+ border = {
+ enable = true;
+ active.color = "#feb6c7";
+ width = 2;
+ };
+
+ shadow.enable = false;
+ focus-ring.enable = false;
+ };
+
+ prefer-no-csd = true;
+ cursor.size = 14;
+ screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
+ hotkey-overlay.skip-at-startup = true;
+
+ window-rules = [
+ /*
+ {
+ geometry-corner-radius = {
+ top-left = 2.0;
+ top-right = 2.0;
+ bottom-left = 2.0;
+ bottom-right = 2.0;
+ };
+ }
+ */
+ {
+ clip-to-geometry = true;
+ }
+ ];
+
+ input = {
+ keyboard.numlock = true;
+ warp-mouse-to-focus.enable = true;
+
+ focus-follows-mouse = {
+ enable = true;
+ max-scroll-amount = "0%";
+ };
+ };
+
+ binds = {
+ "Mod+Q".action.close-window = [];
+ "Mod+Return".action.spawn = ["foot"];
+ "Mod+A".action.spawn = ["wofi" "--show" "drun"];
+ "Mod+B".action.spawn = ["zen-beta"];
+ "Mod+D".action.spawn = ["discord"];
+
+ "Mod+O".action.toggle-overview = [];
+
+ "Mod+Alt+H".action.focus-monitor-left = [];
+ "Mod+Alt+L".action.focus-monitor-right = [];
+
+ "Mod+Alt+Left".action.focus-monitor-left = [];
+ "Mod+Alt+Right".action.focus-monitor-right = [];
+
+ "Mod+Ctrl+J".action.focus-workspace-down = [];
+ "Mod+Ctrl+K".action.focus-workspace-up = [];
+
+ "Mod+Ctrl+Down".action.focus-workspace-down = [];
+ "Mod+Ctrl+Up".action.focus-workspace-up = [];
+
+ "Mod+H".action.focus-column-left = [];
+ "Mod+L".action.focus-column-right = [];
+ "Mod+J".action.focus-window-down = [];
+ "Mod+K".action.focus-window-up = [];
+
+ "Mod+Left".action.focus-column-left = [];
+ "Mod+Right".action.focus-column-right = [];
+ "Mod+Down".action.focus-window-down = [];
+ "Mod+Up".action.focus-window-up = [];
+
+ "Mod+WheelScrollDown".action.focus-column-right = [];
+ "Mod+WheelScrollUp".action.focus-column-left = [];
+
+ "Mod+Y".action.consume-or-expel-window-left = [];
+ "Mod+X".action.consume-or-expel-window-right = [];
+
+ "Mod+R".action.switch-preset-column-width = [];
+ "Mod+Shift+R".action.switch-preset-window-height = [];
+ "Mod+F".action.maximize-column = [];
+ "Mod+Shift+F".action.fullscreen-window = [];
+ "Mod+V".action.toggle-window-floating = [];
+
+ "Mod+Minus".action.set-column-width = ["-10%"];
+ "Mod+Equal".action.set-column-width = ["+10%"];
+
+ "Mod+Shift+Q".action.quit = [];
+
+ "Print".action.screenshot = [];
+ "Ctrl+Print".action.screenshot-screen = [];
+ "Alt+Print".action.screenshot-window = [];
+
+ "Mod+Escape".action.toggle-keyboard-shortcuts-inhibit = [];
+
+ "XF86AudioPlay".action.spawn = ["playerctl" "play-pause"];
+ "XF86AudioNext".action.spawn = ["playerctl" "next"];
+ "XF86AudioPrev".action.spawn = ["playerctl" "previous"];
+ "XF86AudioStop".action.spawn = ["playerctl" "stop"];
+
+ "XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"];
+ "XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"];
+ "xF86AudioMute".action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"];
+ };
+ };
+ };
+}
diff --git a/home/modules/nvf.nix b/home/modules/nvf.nix
new file mode 100644
index 0000000..f658e48
--- /dev/null
+++ b/home/modules/nvf.nix
@@ -0,0 +1,164 @@
+{
+ pkgs,
+ lib,
+ inputs,
+ ...
+}: {
+ imports = [
+ inputs.nvf.homeManagerModules.default
+ ];
+
+ programs.nvf = {
+ enable = true;
+ enableManpages = true;
+
+ settings.vim = {
+ theme = {
+ enable = true;
+ transparent = true;
+
+ name = "catppuccin";
+ style = "mocha";
+ };
+
+ lsp = {
+ enable = true;
+ null-ls.enable = false;
+
+ inlayHints.enable = true;
+ formatOnSave = true;
+ lspkind.enable = true;
+ lspsaga.enable = true;
+ trouble.enable = true;
+ };
+
+ debugger = {
+ nvim-dap = {
+ enable = true;
+ ui.enable = true;
+ };
+ };
+
+ options = {
+ tabstop = 2;
+ expandtab = false;
+ autoindent = true;
+ shiftwidth = 2;
+ };
+
+ clipboard = {
+ enable = true;
+ registers = "unnamedplus";
+ providers = {
+ wl-copy = {
+ enable = true;
+ package = pkgs.wl-clipboard;
+ };
+ };
+ };
+
+ languages = {
+ enableFormat = true;
+ enableTreesitter = true;
+ enableExtraDiagnostics = true;
+
+ nix.enable = true;
+ markdown.enable = true;
+
+ nu.enable = true;
+ bash.enable = true;
+
+ css.enable = true;
+ html = {
+ enable = true;
+ format.enable = true;
+ lsp.servers = [
+ "emmet-ls"
+ "superhtml"
+ ];
+ };
+
+ python.enable = true;
+
+ sql.enable = false;
+ qml.enable = true;
+ qml.format.enable = true;
+ ts.enable = true;
+ zig.enable = true;
+ csharp.enable = true;
+ rust = {
+ enable = true;
+ extensions.crates-nvim.enable = true;
+ };
+ };
+
+ visuals = {
+ nvim-web-devicons.enable = true;
+ nvim-cursorline.enable = true;
+ cinnamon-nvim.enable = true;
+ fidget-nvim.enable = true;
+
+ highlight-undo.enable = true;
+ indent-blankline.enable = true;
+ };
+
+ statusline = {
+ lualine = {
+ enable = true;
+ };
+ };
+
+ autopairs.nvim-autopairs.enable = true;
+
+ autocomplete = {
+ nvim-cmp.enable = true;
+ blink-cmp.enable = false;
+ };
+
+ snippets.luasnip.enable = true;
+
+ telescope.enable = true;
+
+ git = {
+ enable = true;
+ };
+
+ dashboard.alpha.enable = true;
+
+ notify.nvim-notify.enable = true;
+
+ projects.project-nvim.enable = true;
+
+ utility = {
+ ccc.enable = true;
+ diffview-nvim.enable = true;
+ icon-picker.enable = true;
+ surround.enable = true;
+
+ motion = {
+ hop.enable = true;
+ leap.enable = true;
+ };
+ };
+
+ comments.comment-nvim.enable = true;
+
+ ui = {
+ noice.enable = true;
+ colorizer.enable = true;
+ illuminate.enable = true;
+
+ fastaction.enable = true;
+ };
+ };
+ };
+
+ xdg.desktopEntries.nvim-foot = {
+ name = "Neovim (foot)";
+ comment = "Edit text files with Neovim in foot terminal";
+ icon = "nvim";
+ exec = "foot -e nvim %F";
+ categories = ["Utility" "TextEditor" "Development"];
+ mimeType = ["text/plain" "text/x-makefile" "application/x-shellscript"];
+ };
+}
diff --git a/home/modules/picom.nix b/home/modules/picom.nix
new file mode 100644
index 0000000..aa0350d
--- /dev/null
+++ b/home/modules/picom.nix
@@ -0,0 +1,7 @@
+{
+ services.picom = {
+ enable = false;
+
+ backend = "glx";
+ };
+}
diff --git a/home/modules/polybar.nix b/home/modules/polybar.nix
new file mode 100644
index 0000000..d005518
--- /dev/null
+++ b/home/modules/polybar.nix
@@ -0,0 +1,149 @@
+{pkgs, ...}: {
+ services.polybar = {
+ enable = false;
+
+ package = pkgs.polybar.override {
+ mpdSupport = true;
+ };
+
+ script = ''
+ polybar primary &
+ polybar secondary &
+ '';
+
+ settings = {
+ "colors" = {
+ fg = "#fafafa";
+ fg-alt = "#bdbdbd";
+
+ purple = "#d500f9";
+ red = "#ff1744";
+
+ trans = "#00000000";
+ };
+
+ "bar/primary" = {
+ monitor = "DVI-I-1";
+
+ width = "100%";
+ height = "30";
+ offset-y = "0";
+ top = "true";
+ fixed-center = "true";
+
+ wm-restack = "bspwm";
+
+ override-redirect = "false";
+
+ scroll-up = "next";
+ scroll-down = "prev";
+
+ enable-ipc = "true";
+
+ background = "\${colors.trans}";
+ foreground = "\${colors.fg}";
+
+ font-0 = "monospace:size=10;2";
+ font-1 = "monospace:size=10;2";
+ font-2 = "monospace:size=10;2";
+ font-3 = "monospace:size=10;2";
+ font-4 = "monospace:size=10;2";
+ font-5 = "monospace:size=10;2";
+ font-6 = "monospace:size=10;2";
+ font-7 = "monospace:size=12;3";
+
+ cursor-click = "pointer";
+ cursor-scroll = "ns-resize";
+
+ modules-left = "bspwm";
+ modules-right = "date";
+ };
+
+ "bar/secondary" = {
+ monitor = "HDMI-0";
+
+ width = "100%";
+ height = "30";
+ offset-y = "0";
+ top = "true";
+ fixed-center = "true";
+
+ wm-restack = "bspwm";
+
+ override-redirect = "false";
+
+ scroll-up = "next";
+ scroll-down = "prev";
+
+ enable-ipc = "true";
+
+ background = "\${colors.trans}";
+ foreground = "\${colors.fg}";
+
+ font-0 = "monospace:size=10;2";
+ font-1 = "monospace:size=10;2";
+ font-2 = "monospace:size=10;2";
+ font-3 = "monospace:size=10;2";
+ font-4 = "monospace:size=10;2";
+ font-5 = "monospace:size=10;2";
+ font-6 = "monospace:size=10;2";
+ font-7 = "monospace:size=12;3";
+
+ cursor-click = "pointer";
+ cursor-scroll = "ns-resize";
+
+ modules-left = "bspwm";
+ modules-right = "date";
+ };
+
+ "module/bspwm" = {
+ type = "internal/bspwm";
+
+ format = " ";
+
+ label-focused = "%{T7}β%{T-}";
+ label-focused-foreground = "\${colors.purple}";
+ label-focused-padding = 1;
+
+ label-occupied = "%{T7}β%{T-}";
+ label-occupied-foreground = "\${colors.fg-alt}";
+ label-occupied-padding = 1;
+
+ label-urgent = "%{T7}β%{T-}";
+ label-urgent-foreground = "\${colors.red}";
+ label-urgent-padding = 1;
+
+ label-empty = "%{T7}β%{T-}";
+ label-empty-foreground = "\${colors.fg-alt}";
+ label-empty-padding = 1;
+
+ label-locked = "%{T7}β%{T-}";
+ label-locked-foreground = "\${colors.fg}";
+ label-locked-padding = 1;
+
+ label-sticky = "%{T7}β%{T-}";
+ label-sticky-foreground = "\${colors.fg}";
+ label-sticky-padding = 1;
+
+ label-private = "%{T7}β%{T-}";
+ label-private-foreground = "\${colors.fg}";
+ label-private-padding = 1;
+
+ label-marked = "%{T7}β%{T-}";
+ label-marked-foreground = "\${colors.fg}";
+ label-marked-padding = 1;
+ };
+
+ "module/date" = {
+ type = "internal/date";
+ interval = 1;
+ time = "%H:%M";
+ time-alt = "%a, %b %d %H:%M:%S";
+ format = "