diff --git a/flake.lock b/flake.lock
index 0dbd6ab..0da224a 100644
--- a/flake.lock
+++ b/flake.lock
@@ -6,11 +6,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
- "lastModified": 1771563628,
- "narHash": "sha256-zfSyNmV4bB7lbKbOmrBy5+239DnE6rp8xr1tmIpmRbk=",
+ "lastModified": 1772768709,
+ "narHash": "sha256-uzeT4oc5MyZaGJ4C1J2FMSfcUJUoMlzf1ZSWIgBrW7A=",
"owner": "utensils",
"repo": "comfyui-nix",
- "rev": "82914911ea9346cb64c132b1be73c77a74f570b0",
+ "rev": "390747dcc0631621fe43308b3464d2591e11e77d",
"type": "github"
},
"original": {
@@ -97,11 +97,11 @@
]
},
"locked": {
- "lastModified": 1771744638,
- "narHash": "sha256-EDLi+YAsEEAmMeZe1v6GccuGRbCkpSZp/+A6g+pivR8=",
+ "lastModified": 1772633058,
+ "narHash": "sha256-SO7JapRy2HPhgmqiLbfnW1kMx5rakPMKZ9z3wtRLQjI=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "cb6c151f5c9db4df0b69d06894dc8484de1f16a0",
+ "rev": "080657a04188aca25f8a6c70a0fb2ea7e37f1865",
"type": "github"
},
"original": {
@@ -118,11 +118,11 @@
]
},
"locked": {
- "lastModified": 1771683283,
- "narHash": "sha256-WxAEkAbo8dP7qiyPM6VN4ZGAxfuBVlNBNPkrqkrXVEc=",
+ "lastModified": 1772845525,
+ "narHash": "sha256-Dp5Ir2u4jJDGCgeMRviHvEQDe+U37hMxp6RSNOoMMPc=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "c6ed3eab64d23520bcbb858aa53fe2b533725d4a",
+ "rev": "27b93804fbef1544cb07718d3f0a451f4c4cd6c0",
"type": "github"
},
"original": {
@@ -138,11 +138,11 @@
]
},
"locked": {
- "lastModified": 1771520882,
- "narHash": "sha256-9SeTZ4Pwr730YfT7V8Azb8GFbwk1ZwiQDAwft3qAD+o=",
+ "lastModified": 1772379624,
+ "narHash": "sha256-NG9LLTWlz4YiaTAiRGChbrzbVxBfX+Auq4Ab/SWmk4A=",
"owner": "nix-darwin",
"repo": "nix-darwin",
- "rev": "6a7fdcd5839ec8b135821179eea3b58092171bcf",
+ "rev": "52d061516108769656a8bd9c6e811c677ec5b462",
"type": "github"
},
"original": {
@@ -174,11 +174,11 @@
},
"nixos-hardware": {
"locked": {
- "lastModified": 1771423359,
- "narHash": "sha256-yRKJ7gpVmXbX2ZcA8nFi6CMPkJXZGjie2unsiMzj3Ig=",
+ "lastModified": 1771969195,
+ "narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=",
"owner": "NixOS",
"repo": "nixos-hardware",
- "rev": "740a22363033e9f1bb6270fbfb5a9574067af15b",
+ "rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e",
"type": "github"
},
"original": {
@@ -236,11 +236,11 @@
},
"nixpkgs-unstable": {
"locked": {
- "lastModified": 1771369470,
- "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
+ "lastModified": 1772773019,
+ "narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "0182a361324364ae3f436a63005877674cf45efb",
+ "rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
"type": "github"
},
"original": {
@@ -267,11 +267,11 @@
},
"nixpkgs_3": {
"locked": {
- "lastModified": 1771574726,
- "narHash": "sha256-D1PA3xQv/s4W3lnR9yJFSld8UOLr0a/cBWMQMXS+1Qg=",
+ "lastModified": 1772822230,
+ "narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "c217913993d6c6f6805c3b1a3bda5e639adfde6d",
+ "rev": "71caefce12ba78d84fe618cf61644dce01cf3a96",
"type": "github"
},
"original": {
@@ -290,11 +290,11 @@
"systems": "systems"
},
"locked": {
- "lastModified": 1771135771,
- "narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=",
+ "lastModified": 1772402258,
+ "narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=",
"owner": "nix-community",
"repo": "nixvim",
- "rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba",
+ "rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10",
"type": "github"
},
"original": {
diff --git a/home-manager/commands/commands.nix b/home-manager/commands/commands.nix
index 3dd866a..65d5a62 100644
--- a/home-manager/commands/commands.nix
+++ b/home-manager/commands/commands.nix
@@ -7,6 +7,17 @@
...
}:
+let
+ list-keybinds = pkgs.writeShellScriptBin "list-keybinds" ''
+ hyprctl binds -j | ${pkgs.jq}/bin/jq -r '.[] |
+ select(.dispatcher != "") |
+ "[\(.modmask_str // "NONE")] + \(.key) → \(.dispatcher) \(.arg // "")"
+ ' | ${pkgs.rofi}/bin/rofi -dmenu \
+ -i \
+ -p "Keybinds" \
+ -theme-str 'window {width: 60%;}'
+ '';
+in
{
imports = [
./direnv.nix
@@ -28,9 +39,13 @@
age-plugin-yubikey
agedu
b3sum
+ bandwhich
bat
basalt
btop
+ cpufetch
+ cpuid
+ cpu-x
curl
dig
dust
@@ -38,15 +53,21 @@
fosrl-olm
fzf
git-filter-repo
+ glances
+ gping
graphviz
jq
kitty
lazygit
lazyjournal
manga-tui
+ mcat
+ netop
# netscanner
nix-du
nmap
+ trippy
+ tuptime
openssl
ripgrep
s3cmd
@@ -60,10 +81,12 @@
yazi
yt-dlp
zstd
+ list-keybinds
]
# Desktop-specific packages (Linux desktops and macOS)
++ lib.optionals (!(hostTypes.isServer hostname)) (with pkgs; [
claude-code
+ caligula
ocamlPackages.utop
# opencode
openconnect
@@ -131,12 +154,16 @@
programs = {
ssh = {
enable = true;
+ enableDefaultConfig = false;
matchBlocks = {
- global = {
- host = "*";
+ "*" = {
setEnv = {
TERM = "xterm-256color";
};
+ forwardAgent = false;
+ forwardX11 = false;
+ serverAliveInterval = 0;
+ serverAliveCountMax = 3;
};
} // lib.optionalAttrs (hostname == "buildbox") {
"192.168.8.109" = {
diff --git a/home-manager/commands/fastfetch/fastfetch.nix b/home-manager/commands/fastfetch/fastfetch.nix
index 36e2e4b..6945a66 100644
--- a/home-manager/commands/fastfetch/fastfetch.nix
+++ b/home-manager/commands/fastfetch/fastfetch.nix
@@ -38,8 +38,8 @@ let
"kitty"
else if termProgram == "WezTerm" || lib.hasInfix "wezterm" term then
"wezterm"
- else if termProgram == "Ghostty" then
- "chafa" # Ghostty doesn't have kitty protocol support
+ else if termProgram == "ghostty" then
+ "kitty" # Ghostty doesn't have kitty protocol support
else
"chafa"; # Default fallback
diff --git a/home-manager/programs/ghostty/ghostty.nix b/home-manager/programs/ghostty/ghostty.nix
index 1e19bc7..7965c2c 100644
--- a/home-manager/programs/ghostty/ghostty.nix
+++ b/home-manager/programs/ghostty/ghostty.nix
@@ -13,7 +13,7 @@
theme = "Adwaita Dark";
# Explicitly set color scheme preference to avoid GTK warnings
- #gtk-adwaita = true;
+ gtk-adwaita = true;
gtk-single-instance = true;
diff --git a/home-manager/programs/hypr/hyprland.nix b/home-manager/programs/hypr/hyprland.nix
index ba26b63..348f105 100644
--- a/home-manager/programs/hypr/hyprland.nix
+++ b/home-manager/programs/hypr/hyprland.nix
@@ -1,10 +1,16 @@
-{ config, configPath, ... }:
+{ config, configPath, hostname, ... }:
{
wayland.windowManager.hyprland = {
enable = true;
settings = {
# === Monitor configuration ===
- monitor = "eDP-1, 2560x1440@60.03300, 0x0, 1.25";
+ monitor =
+ if hostname == "eva-01" then
+ "eDP-1, 2560x1440@60.03300, 0x0, 1.25"
+ else if hostname == "eva-03" then
+ ", preferred, auto, 1" # Auto-detect for desktop
+ else
+ ", preferred, auto, 1";
# === Autostart / Exec commands ===
exec-once = [
@@ -14,6 +20,7 @@
"swww-daemon"
"eww daemon"
"swww img ${configPath}/assets/ena/wallpaper.png"
+ "systemctl --user start hyprpolkitagent"
];
# === Input settings ===
@@ -75,8 +82,6 @@
# === Gestures ===
gestures = {
- workspace_swipe = true;
- workspace_swipe_fingers = 3;
workspace_swipe_invert = true;
workspace_swipe_distance = 200;
workspace_swipe_forever = true;
@@ -152,6 +157,8 @@
"$mod SHIFT, H, resizeactive, -10 0"
"$mod SHIFT, K, resizeactive, 0 -10"
"$mod SHIFT, J, resizeactive, 0 10"
+
+ "$mod, Escape, exec, wlogout"
];
# === Mouse bindings ===
diff --git a/home-manager/programs/hypr/hyprlock.nix b/home-manager/programs/hypr/hyprlock.nix
index fefbcf6..f1056a3 100644
--- a/home-manager/programs/hypr/hyprlock.nix
+++ b/home-manager/programs/hypr/hyprlock.nix
@@ -9,16 +9,18 @@
hide_cursor = true;
no_fade_in = false;
};
+
background = [
{
- path = "${configPath}/assets/ena/wallpaper.png";
+ path = "${configPath}/assets/pfp/neonNerv.png";
blur_passes = 3;
blur_size = 8;
}
];
+
image = [
{
- path = "${configPath}/assets/pfp.jpg";
+ path = "${configPath}/assets/pfp/eva-03.png";
size = 150;
border_size = 4;
border_color = "rgb(0C96F9)";
@@ -28,6 +30,43 @@
valign = "center";
}
];
+
+ label = [
+ # Clock
+ {
+ monitor = "";
+ text = ''cmd[update:1000] echo "$(date +"%H:%M")"'';
+ color = "rgb(CFE6F4)";
+ font_size = 64;
+ font_family = "JetBrainsMono Nerd Font Bold";
+ position = "0, 380";
+ halign = "center";
+ valign = "center";
+ }
+ # Date
+ {
+ monitor = "";
+ text = ''cmd[update:1000] echo "$(date +"%A, %B %d")"'';
+ color = "rgba(CFE6F4CC)";
+ font_size = 18;
+ font_family = "JetBrainsMono Nerd Font";
+ position = "0, 300";
+ halign = "center";
+ valign = "center";
+ }
+ # Username
+ {
+ monitor = "";
+ text = "$USER";
+ color = "rgba(CFE6F4CC)";
+ font_size = 14;
+ font_family = "JetBrainsMono Nerd Font";
+ position = "0, 100";
+ halign = "center";
+ valign = "center";
+ }
+ ];
+
input-field = [
{
size = "200, 50";
@@ -41,6 +80,10 @@
outline_thickness = 5;
placeholder_text = "Password...";
shadow_passes = 2;
+ capslock_color = "rgb(F9A20C)";
+ fail_color = "rgb(F93030)";
+ fail_text = "$FAIL ($ATTEMPTS)";
+ check_color = "rgb(0CF9A2)";
}
];
};
diff --git a/home-manager/programs/hypr/theme.nix b/home-manager/programs/hypr/theme.nix
new file mode 100644
index 0000000..1fb8a4f
--- /dev/null
+++ b/home-manager/programs/hypr/theme.nix
@@ -0,0 +1,69 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}: {
+ # Install themes/cursors that we reference
+ home.packages = with pkgs; [
+ adwaita-icon-theme
+ papirus-icon-theme
+ bibata-cursors
+ adwaita-qt
+ ];
+
+ # GTK dark theme configuration
+ gtk = {
+ enable = true;
+ theme = {
+ name = "Adwaita-dark";
+ package = pkgs.gnome-themes-extra;
+ };
+ iconTheme = {
+ name = "Papirus-Dark";
+ package = pkgs.papirus-icon-theme;
+ };
+ cursorTheme = {
+ name = "Bibata-Modern-Classic";
+ package = pkgs.bibata-cursors;
+ size = 24;
+ };
+ gtk3.extraConfig = {
+ gtk-application-prefer-dark-theme = true;
+ };
+ gtk4.extraConfig = {
+ gtk-application-prefer-dark-theme = true;
+ };
+ };
+
+ # Qt dark theme
+ qt = {
+ enable = true;
+ platformTheme.name = lib.mkForce "gtk3";
+ style.name = lib.mkForce "adwaita-dark";
+ };
+
+ # dconf dark mode
+ dconf.settings."org/gnome/desktop/interface" = {
+ color-scheme = "prefer-dark";
+ gtk-theme = "Adwaita-dark";
+ icon-theme = "Papirus-Dark";
+ cursor-theme = "Bibata-Modern-Classic";
+ cursor-size = 24;
+ };
+
+ # Cursor for Wayland/X sessions
+ home.sessionVariables = {
+ XCURSOR_THEME = "Bibata-Modern-Classic";
+ XCURSOR_SIZE = "24";
+ QT_QPA_PLATFORMTHEME = "gtk3";
+ };
+
+ # XDG cursor config
+ home.file.".icons/default/index.theme".text = ''
+ [Icon Theme]
+ Name=Default
+ Comment=Default Cursor Theme
+ Inherits=Bibata-Modern-Classic
+ '';
+}
\ No newline at end of file
diff --git a/home-manager/programs/hypr/waybar.nix b/home-manager/programs/hypr/waybar.nix
index df92e48..f1472a5 100644
--- a/home-manager/programs/hypr/waybar.nix
+++ b/home-manager/programs/hypr/waybar.nix
@@ -1,12 +1,32 @@
{
pkgs,
lib,
- config,
+ hostname,
...
}:
let
betterTransition = "all 0.3s cubic-bezier(.55,-0.68,.48,1.682)";
clock24h = false;
+ colors = {
+ base00 = "0D0E15";
+ base01 = "1a1b26";
+ base02 = "24283b";
+ base03 = "414868";
+ base04 = "565f89";
+ base05 = "a9b1d6";
+ base06 = "cbccd1";
+ base07 = "d5d6db";
+ base08 = "f7768e";
+ base09 = "ff9e64";
+ base0A = "e0af68";
+ base0B = "9ece6a";
+ base0C = "7dcfff";
+ base0D = "7aa2f7";
+ base0E = "bb9af7";
+ base0F = "ff9e64";
+ };
+ # Laptop hostnames that should show battery
+ isLaptop = builtins.elem hostname [ "laptop" "thinkpad" "framework" "portable" ];
in
with lib;
{
@@ -18,20 +38,31 @@ with lib;
{
layer = "top";
position = "top";
+ height = 36;
+ exclusive = true;
+ passthrough = false;
+ gtk-layer-shell = true;
+
modules-center = [ "hyprland/workspaces" ];
modules-left = [
"custom/startmenu"
"hyprland/window"
"pulseaudio"
+ "pulseaudio#microphone"
"cpu"
"memory"
+ "disk"
+ "temperature"
"idle_inhibitor"
+ "backlight"
];
modules-right = [
+ "network"
+ "bluetooth"
"custom/hyprbindings"
"custom/notification"
"custom/exit"
- "battery"
+ ] ++ (optionals isLaptop [ "battery" ]) ++ [
"tray"
"clock"
];
@@ -39,150 +70,257 @@ with lib;
"hyprland/workspaces" = {
format = "{name}";
format-icons = {
+ "1" = "";
+ "2" = "";
+ "3" = "";
+ "4" = "";
+ "5" = "";
+ "6" = "";
+ "7" = "";
+ "8" = "";
+ "9" = "";
+ "10" = "";
default = " ";
active = " ";
urgent = " ";
};
on-scroll-up = "hyprctl dispatch workspace e+1";
on-scroll-down = "hyprctl dispatch workspace e-1";
- };
- "clock" = {
- format = if clock24h == true then '' {:L%H:%M}'' else '' {:L%I:%M %p}'';
- tooltip = true;
- tooltip-format = "{:%A, %d.%B %Y }\n{calendar}";
- };
- "hyprland/window" = {
- max-length = 22;
- separate-outputs = false;
- rewrite = {
- "" = " 🙈 No Windows? ";
+ persistent-workspaces = {
+ "*" = 5;
};
};
+
+ "clock" = {
+ format = if clock24h then " {:L%H:%M}" else " {:L%I:%M %p}";
+ tooltip = true;
+ tooltip-format = " {:%A, %d %B %Y}\n{calendar}";
+ calendar = {
+ mode = "year";
+ mode-mon-col = 3;
+ weeks-pos = "right";
+ on-scroll = 1;
+ format = {
+ months = "{}";
+ days = "{}";
+ weeks = "W{}";
+ weekdays = "{}";
+ today = "{}";
+ };
+ };
+ actions = {
+ on-click-right = "mode";
+ on-scroll-up = "shift_up";
+ on-scroll-down = "shift_down";
+ };
+ };
+
+ "hyprland/window" = {
+ max-length = 30;
+ separate-outputs = true;
+ rewrite = {
+ "(.*) - Brave" = " $1";
+ "(.*) - Firefox" = " $1";
+ "(.*) - nvim" = " $1";
+ "(.*) - fish" = " $1";
+ "(.*) - zsh" = " $1";
+ "(.*) - bash" = " $1";
+ "" = " Desktop";
+ };
+ };
+
"memory" = {
interval = 5;
- format = " {}%";
+ format = " {percentage}%";
+ format-alt = " {used}/{total} GiB";
tooltip = true;
+ tooltip-format = " RAM: {used:0.1f}GiB / {total:0.1f}GiB\n Swap: {swapUsed:0.1f}GiB / {swapTotal:0.1f}GiB";
+ on-click = "sleep 0.1 && kitty --title btop sh -c 'btop'";
};
+
"cpu" = {
interval = 5;
- format = " {usage:2}%";
+ format = " {usage}%";
+ format-alt = " {avg_frequency}GHz";
tooltip = true;
+ tooltip-format = " CPU Usage: {usage}%\n {avg_frequency}GHz avg frequency";
+ on-click = "sleep 0.1 && kitty --title btop sh -c 'btop'";
};
+
+ "temperature" = {
+ interval = 5;
+ format = "{icon} {temperatureC}°C";
+ format-critical = " {temperatureC}°C";
+ format-icons = [ "" "" "" "" "" ];
+ critical-threshold = 80;
+ tooltip = true;
+ tooltip-format = " Temperature: {temperatureC}°C\n{temperatureF}°F";
+ };
+
"disk" = {
- format = " {free}";
+ interval = 30;
+ format = " {percentage_used}%";
+ format-alt = " {free} free";
+ path = "/";
tooltip = true;
+ tooltip-format = " {path}\n Used: {used} / {total}\n Free: {free} ({percentage_free}%)";
+ on-click = "sleep 0.1 && kitty --title yazi sh -c 'yazi'";
};
+
"network" = {
- format-icons = [
- ""
- ""
- ""
- ""
- ""
- ];
- format-ethernet = " {bandwidthDownOctets}";
- format-wifi = "{icon} {signalStrength}%";
- format-disconnected = "";
- tooltip = false;
+ interval = 5;
+ format-icons = [ "" "" "" "" "" ];
+ format-ethernet = " {bandwidthDownBits} ↓ {bandwidthUpBits} ↑";
+ format-wifi = "{icon} {essid} {signalStrength}%";
+ format-disconnected = " Offline";
+ format-linked = " {ifname} (No IP)";
+ tooltip = true;
+ tooltip-format = " {ifname}\n {ipaddr}/{cidr}\n Up: {bandwidthUpBits}\n Down: {bandwidthDownBits}";
+ tooltip-format-wifi = "{icon} {essid}\n {ipaddr}/{cidr}\n Strength: {signalStrength}%\n Up: {bandwidthUpBits}\n Down: {bandwidthDownBits}";
+ on-click = "sleep 0.1 && kitty --title nmtui sh -c 'nmtui'";
};
+
+ "bluetooth" = {
+ format = "";
+ format-disabled = "";
+ format-off = "";
+ format-on = "";
+ format-connected = " {device_alias}";
+ format-connected-battery = " {device_alias} {device_battery_percentage}%";
+ tooltip = true;
+ tooltip-format = " Bluetooth: {status}\n {num_connections} connected";
+ tooltip-format-connected = " {device_enumerate}";
+ tooltip-format-enumerate-connected = " {device_alias}";
+ tooltip-format-enumerate-connected-battery = " {device_alias} {device_battery_percentage}%";
+ on-click = "sleep 0.1 && blueman-manager";
+ };
+
"tray" = {
- spacing = 12;
+ icon-size = 18;
+ spacing = 10;
+ show-passive-items = true;
};
+
"pulseaudio" = {
- format = "{icon} {volume}% {format_source}";
- format-bluetooth = "{volume}% {icon} {format_source}";
- format-bluetooth-muted = " {icon} {format_source}";
- format-muted = " {format_source}";
- format-source = " {volume}%";
- format-source-muted = "";
+ format = "{icon} {volume}%";
+ format-bluetooth = " {volume}%";
+ format-bluetooth-muted = " Muted";
+ format-muted = " Muted";
format-icons = {
- headphone = "";
- hands-free = "";
- headset = "";
- phone = "";
- portable = "";
- car = "";
- default = [
- ""
- ""
- ""
- ];
+ headphone = "";
+ hands-free = "";
+ headset = "";
+ phone = "";
+ portable = "";
+ car = "";
+ default = [ "" "" "" ];
};
+ scroll-step = 5;
on-click = "sleep 0.1 && pavucontrol";
+ on-click-right = "sleep 0.1 && pactl set-sink-mute @DEFAULT_SINK@ toggle";
+ tooltip = true;
+ tooltip-format = "{icon} {desc}\nVolume: {volume}%";
};
+
+ "pulseaudio#microphone" = {
+ format = "{format_source}";
+ format-source = " {volume}%";
+ format-source-muted = " Muted";
+ on-click = "sleep 0.1 && pavucontrol";
+ on-click-right = "sleep 0.1 && pactl set-source-mute @DEFAULT_SOURCE@ toggle";
+ scroll-step = 5;
+ tooltip = true;
+ tooltip-format = " {source_desc}\nVolume: {volume}%";
+ };
+
+ "idle_inhibitor" = {
+ format = "{icon}";
+ format-icons = {
+ activated = "";
+ deactivated = "";
+ };
+ tooltip = true;
+ tooltip-format-activated = "Idle inhibitor: ON";
+ tooltip-format-deactivated = "Idle inhibitor: OFF";
+ };
+
"custom/exit" = {
tooltip = false;
- format = "";
+ format = "";
on-click = "sleep 0.1 && wlogout";
};
+
"custom/startmenu" = {
tooltip = false;
- format = "";
- # exec = "rofi -show drun";
+ format = "";
on-click = "sleep 0.1 && rofi-launcher";
+ on-click-right = "sleep 0.1 && rofi -show drun";
};
+
"custom/hyprbindings" = {
tooltip = false;
format = "";
on-click = "sleep 0.1 && list-keybinds";
};
- "idle_inhibitor" = {
- format = "{icon}";
- format-icons = {
- activated = "";
- deactivated = "";
- };
- tooltip = "true";
- };
+
"custom/notification" = {
tooltip = false;
- format = "{icon} {}";
+ format = "{icon} {count}";
format-icons = {
- notification = "";
- none = "";
- dnd-notification = "";
- dnd-none = "";
- inhibited-notification = "";
- inhibited-none = "";
- dnd-inhibited-notification = "";
- dnd-inhibited-none = "";
+ notification = "";
+ none = "";
+ dnd-notification = "";
+ dnd-none = "";
+ inhibited-notification = "";
+ inhibited-none = "";
+ dnd-inhibited-notification = "";
+ dnd-inhibited-none = "";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
- on-click = "sleep 0.1 && task-waybar";
+ on-click = "sleep 0.1 && swaync-client -t -sw";
+ on-click-right = "sleep 0.1 && swaync-client -d -sw";
escape = true;
};
+
"battery" = {
states = {
+ good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}%";
format-plugged = " {capacity}%";
- format-icons = [
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ];
+ format-good = "{icon} {capacity}%";
+ format-full = " Full";
+ format-icons = [ "" "" "" "" "" "" "" "" "" "" ];
+ tooltip = true;
+ tooltip-format = "{icon} {capacity}%\n{timeTo}";
on-click = "";
- tooltip = false;
+ };
+
+ "backlight" = {
+ interval = 2;
+ format = "{icon} {percent}%";
+ format-icons = [ "" "" "" "" ];
+ scroll-step = 5;
+ on-scroll-up = "brightnessctl set 5%+";
+ on-scroll-down = "brightnessctl set 5%-";
+ on-click = "brightnessctl set 50%";
+ tooltip = true;
+ tooltip-format = " Brightness: {percent}%";
+ min-length = 6;
};
}
];
+
style = concatStrings [
''
* {
font-family: JetBrainsMono Nerd Font Mono;
- font-size: 16px;
+ font-size: 14px;
border-radius: 0px;
border: none;
min-height: 0px;
@@ -190,9 +328,11 @@ with lib;
window#waybar {
background: rgba(0,0,0,0);
}
+
+ /* ===== Workspaces ===== */
#workspaces {
- color: #${config.lib.stylix.colors.base00};
- background: #${config.lib.stylix.colors.base01};
+ color: #${colors.base00};
+ background: #${colors.base01};
margin: 4px 4px;
padding: 5px 5px;
border-radius: 16px;
@@ -202,8 +342,8 @@ with lib;
padding: 0px 5px;
margin: 0px 3px;
border-radius: 16px;
- color: #${config.lib.stylix.colors.base00};
- background: linear-gradient(45deg, #${config.lib.stylix.colors.base08}, #${config.lib.stylix.colors.base0D});
+ color: #${colors.base00};
+ background: linear-gradient(45deg, #${colors.base08}, #${colors.base0D});
opacity: 0.5;
transition: ${betterTransition};
}
@@ -212,62 +352,181 @@ with lib;
padding: 0px 5px;
margin: 0px 3px;
border-radius: 16px;
- color: #${config.lib.stylix.colors.base00};
- background: linear-gradient(45deg, #${config.lib.stylix.colors.base08}, #${config.lib.stylix.colors.base0D});
+ color: #${colors.base00};
+ background: linear-gradient(45deg, #${colors.base08}, #${colors.base0D});
transition: ${betterTransition};
opacity: 1.0;
min-width: 40px;
}
+ #workspaces button.urgent {
+ background: linear-gradient(45deg, #${colors.base08}, #${colors.base09});
+ opacity: 1.0;
+ animation: blink 1s linear infinite;
+ }
#workspaces button:hover {
font-weight: bold;
border-radius: 16px;
- color: #${config.lib.stylix.colors.base00};
- background: linear-gradient(45deg, #${config.lib.stylix.colors.base08}, #${config.lib.stylix.colors.base0D});
+ color: #${colors.base00};
+ background: linear-gradient(45deg, #${colors.base08}, #${colors.base0D});
opacity: 0.8;
transition: ${betterTransition};
}
+
+ /* ===== Tooltips ===== */
tooltip {
- background: #${config.lib.stylix.colors.base00};
- border: 1px solid #${config.lib.stylix.colors.base08};
+ background: #${colors.base00};
+ border: 1px solid #${colors.base08};
border-radius: 12px;
+ padding: 5px;
}
tooltip label {
- color: #${config.lib.stylix.colors.base08};
+ color: #${colors.base05};
+ padding: 2px;
}
- #window, #pulseaudio, #cpu, #memory, #idle_inhibitor {
+
+ /* ===== Left Modules ===== */
+ #window,
+ #pulseaudio,
+ #pulseaudio.microphone,
+ #cpu,
+ #memory,
+ #disk,
+ #temperature,
+ #idle_inhibitor {
font-weight: bold;
margin: 4px 0px;
margin-left: 7px;
- padding: 0px 18px;
- background: #${config.lib.stylix.colors.base04};
- color: #${config.lib.stylix.colors.base00};
+ padding: 0px 14px;
+ background: #${colors.base04};
+ color: #${colors.base00};
border-radius: 24px 10px 24px 10px;
+ transition: ${betterTransition};
}
+ #window:hover,
+ #pulseaudio:hover,
+ #pulseaudio.microphone:hover,
+ #cpu:hover,
+ #memory:hover,
+ #disk:hover,
+ #temperature:hover,
+ #idle_inhibitor:hover {
+ background: #${colors.base0D};
+ color: #${colors.base00};
+ transition: ${betterTransition};
+ }
+ #pulseaudio.muted,
+ #pulseaudio.microphone.source-muted {
+ background: #${colors.base03};
+ color: #${colors.base05};
+ }
+ #temperature.critical {
+ background: #${colors.base08};
+ animation: blink 1s linear infinite;
+ }
+ #idle_inhibitor.activated {
+ background: #${colors.base0A};
+ color: #${colors.base00};
+ }
+ #cpu.warning {
+ background: #${colors.base0A};
+ }
+ #cpu.critical {
+ background: #${colors.base08};
+ animation: blink 1s linear infinite;
+ }
+ #memory.warning {
+ background: #${colors.base0A};
+ }
+ #memory.critical {
+ background: #${colors.base08};
+ animation: blink 1s linear infinite;
+ }
+
+ /* ===== Start Menu ===== */
#custom-startmenu {
- color: #${config.lib.stylix.colors.base0B};
- background: #${config.lib.stylix.colors.base02};
+ color: #${colors.base0B};
+ background: #${colors.base02};
font-size: 28px;
margin: 0px;
padding: 0px 30px 0px 15px;
border-radius: 0px 0px 40px 0px;
+ transition: ${betterTransition};
}
- #custom-hyprbindings, #network, #battery,
- #custom-notification, #tray, #custom-exit {
+ #custom-startmenu:hover {
+ color: #${colors.base0D};
+ transition: ${betterTransition};
+ }
+
+ /* ===== Right Modules ===== */
+ #custom-hyprbindings,
+ #custom-notification,
+ #custom-exit,
+ #network,
+ #bluetooth,
+ #battery,
+ #tray {
font-weight: bold;
- background: #${config.lib.stylix.colors.base0F};
- color: #${config.lib.stylix.colors.base00};
+ background: #${colors.base0F};
+ color: #${colors.base00};
margin: 4px 0px;
margin-right: 7px;
border-radius: 10px 24px 10px 24px;
- padding: 0px 18px;
+ padding: 0px 14px;
+ transition: ${betterTransition};
}
+ #custom-hyprbindings:hover,
+ #custom-notification:hover,
+ #custom-exit:hover,
+ #network:hover,
+ #bluetooth:hover {
+ background: #${colors.base0E};
+ transition: ${betterTransition};
+ }
+ #network.disconnected {
+ background: #${colors.base08};
+ }
+ #bluetooth.off,
+ #bluetooth.disabled {
+ background: #${colors.base03};
+ color: #${colors.base05};
+ }
+ #bluetooth.connected {
+ background: #${colors.base0D};
+ color: #${colors.base00};
+ }
+
+ /* ===== Battery ===== */
+ #battery.good {
+ background: #${colors.base0B};
+ color: #${colors.base00};
+ }
+ #battery.warning {
+ background: #${colors.base0A};
+ color: #${colors.base00};
+ }
+ #battery.critical {
+ background: #${colors.base08};
+ color: #${colors.base00};
+ animation: blink 1s linear infinite;
+ }
+ #battery.charging {
+ background: #${colors.base0B};
+ color: #${colors.base00};
+ }
+
+ /* ===== Clock ===== */
#clock {
font-weight: bold;
- color: #0D0E15;
- background: linear-gradient(90deg, #${config.lib.stylix.colors.base0E}, #${config.lib.stylix.colors.base0C});
+ color: #${colors.base00};
+ background: linear-gradient(90deg, #${colors.base0E}, #${colors.base0C});
margin: 0px;
padding: 0px 15px 0px 30px;
border-radius: 0px 0px 0px 40px;
+ transition: ${betterTransition};
+ }
+ #clock:hover {
+ background: linear-gradient(90deg, #${colors.base0C}, #${colors.base0E});
+ transition: ${betterTransition};
}
''
];
diff --git a/home-manager/programs/hypr/wlogout.nix b/home-manager/programs/hypr/wlogout.nix
new file mode 100644
index 0000000..00a19e3
--- /dev/null
+++ b/home-manager/programs/hypr/wlogout.nix
@@ -0,0 +1,120 @@
+{ pkgs, configPath, ... }:
+{
+ programs.wlogout = {
+ enable = true;
+ layout = [
+ {
+ label = "lock";
+ action = "hyprlock";
+ text = "Lock";
+ keybind = "l";
+ }
+ {
+ label = "hibernate";
+ action = "systemctl hibernate";
+ text = "Hibernate";
+ keybind = "h";
+ }
+ {
+ label = "logout";
+ action = "hyprctl dispatch exit 0";
+ text = "Logout";
+ keybind = "e";
+ }
+ {
+ label = "shutdown";
+ action = "systemctl poweroff";
+ text = "Shutdown";
+ keybind = "s";
+ }
+ {
+ label = "suspend";
+ action = "systemctl suspend";
+ text = "Suspend";
+ keybind = "u";
+ }
+ {
+ label = "reboot";
+ action = "systemctl reboot";
+ text = "Reboot";
+ keybind = "r";
+ }
+ ];
+ style = ''
+ * {
+ font-family: JetBrainsMono Nerd Font;
+ font-size: 14px;
+ background-image: none;
+ }
+
+ window {
+ background-color: rgba(13, 14, 21, 0.9);
+ }
+
+ button {
+ color: #BCADBB;
+ background-color: rgba(26, 27, 38, 0.9);
+ border-style: solid;
+ border-width: 2px;
+ border-color: #101C2F;
+ border-radius: 16px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 35%;
+ margin: 10px;
+ transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
+ }
+
+ button:focus,
+ button:active,
+ button:hover {
+ background-color: rgba(16, 28, 47, 0.95);
+ border-color: #f7768e;
+ color: #f7768e;
+ outline-style: none;
+ }
+
+ #lock {
+ background-image: url("${configPath}/assets/wlogout/lock.png");
+ }
+ #lock:hover {
+ background-image: url("${configPath}/assets/wlogout/lock.png");
+ }
+
+ #logout {
+ background-image: url("${configPath}/assets/wlogout/logout.png");
+ }
+ #logout:hover {
+ background-image: url("${configPath}/assets/wlogout/logout.png");
+ }
+
+ #suspend {
+ background-image: url("${configPath}/assets/wlogout/suspend.png");
+ }
+ #suspend:hover {
+ background-image: url("${configPath}/assets/wlogout/suspend.png");
+ }
+
+ #hibernate {
+ background-image: url("${configPath}/assets/wlogout/hibernate.png");
+ }
+ #hibernate:hover {
+ background-image: url("${configPath}/assets/wlogout/hibernate.png");
+ }
+
+ #shutdown {
+ background-image: url("${configPath}/assets/wlogout/shutdown.png");
+ }
+ #shutdown:hover {
+ background-image: url("${configPath}/assets/wlogout/shutdown.png");
+ }
+
+ #reboot {
+ background-image: url("${configPath}/assets/wlogout/reboot.png");
+ }
+ #reboot:hover {
+ background-image: url("${configPath}/assets/wlogout/reboot.png");
+ }
+ '';
+ };
+}
\ No newline at end of file
diff --git a/home-manager/programs/programs.nix b/home-manager/programs/programs.nix
index 77446ee..6dc4d22 100644
--- a/home-manager/programs/programs.nix
+++ b/home-manager/programs/programs.nix
@@ -9,21 +9,41 @@
./hypr/hypridle.nix
./hypr/hyprland.nix
./hypr/hyprlock.nix
+ ./hypr/theme.nix
+ ./hypr/waybar.nix
+ ./hypr/wlogout.nix
]
# macOS programs
++ lib.optionals (hostTypes.isMacos hostname) [
./ghostty/ghostty.nix
];
+ gtk = lib.mkIf (hostTypes.isLinuxDesktop hostname) {
+ enable = true;
+ gtk3.extraConfig.gtk-application-prefer-dark-theme = true;
+ gtk4.extraConfig.gtk-application-prefer-dark-theme = true;
+ };
+
+ qt = lib.mkIf (hostTypes.isLinuxDesktop hostname) {
+ enable = true;
+ platformTheme.name = "kde";
+ style.name = "breeze";
+ };
+
+ dconf = lib.mkIf (hostTypes.isLinuxDesktop hostname) {
+ settings."org/gnome/desktop/interface".color-scheme = "prefer-dark";
+ };
+
home.packages =
# Desktop packages (Linux desktops)
lib.optionals (hostTypes.isLinuxDesktop hostname) (with pkgs; [
+ brightnessctl
bambu-studio
blender
brave
desmume
gparted
-# jellyfin-media-player
+ jellyfin-media-player
kdePackages.bluedevil
kdePackages.bluez-qt
kdePackages.kate
@@ -61,6 +81,22 @@
vlc
wireshark
yubikey-agent
+ swaynotificationcenter
+ # Hyprland Stuff
+ hypridle
+ hyprpolkitagent
+ pyprland
+ #uwsm
+ hyprlang
+ hyprshot
+ hyprcursor
+ mesa
+ nwg-displays
+ nwg-look
+ waypaper
+ waybar
+ # waybar-weatherf
+ hyprland-qt-support
# rpi-imager
])
@@ -74,6 +110,14 @@
])
++ lib.optionals (hostname == "eva-03") (with pkgs; [
- vscode
+ pavucontrol
+ streamcontroller
+ openrazer-daemon
+ polychromatic
+ # vscode
]);
+
+ services.swaync = lib.mkIf (hostTypes.isLinuxDesktop hostname) {
+ enable = true;
+ };
}
diff --git a/hosts/acheron/configuration.nix b/hosts/acheron/configuration.nix
index c976a06..f32fc93 100644
--- a/hosts/acheron/configuration.nix
+++ b/hosts/acheron/configuration.nix
@@ -49,6 +49,15 @@
virtualisation.docker.enable = true;
+ # zram
+ zramSwap = {
+ enable = true;
+ priority = 100;
+ memoryPercent = 30;
+ swapDevices = 1;
+ algorithm = "zstd";
+ };
+
# Set your time zone.
time.timeZone = "America/Los_Angeles";
diff --git a/hosts/buildbox/configuration.nix b/hosts/buildbox/configuration.nix
index b54c414..d0bfbf8 100644
--- a/hosts/buildbox/configuration.nix
+++ b/hosts/buildbox/configuration.nix
@@ -44,6 +44,15 @@
virtualisation.docker.enable = true;
+ # zram
+ zramSwap = {
+ enable = true;
+ priority = 100;
+ memoryPercent = 30;
+ swapDevices = 1;
+ algorithm = "zstd";
+ };
+
# Set your time zone.
time.timeZone = "America/Los_Angeles";
@@ -121,7 +130,6 @@
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
-
security.polkit.enable = true;
programs._1password.enable = true;
programs._1password-gui = {
diff --git a/hosts/ender-ml/configuration.nix b/hosts/ender-ml/configuration.nix
index 2742d43..85ac53e 100644
--- a/hosts/ender-ml/configuration.nix
+++ b/hosts/ender-ml/configuration.nix
@@ -25,7 +25,6 @@
# boot.kernelPackages = pkgs.linuxKernel.packages.linux_zen;
boot.kernelPackages = pkgs-unstable.linuxKernel.packages.linux_zen;
-
# Bootloader.
boot.loader.grub.enable = lib.mkDefault true;
boot.loader.grub.devices = [ "nodev" ];
@@ -49,6 +48,15 @@
virtualisation.docker.enable = true;
+ # zram
+ zramSwap = {
+ enable = true;
+ priority = 100;
+ memoryPercent = 30;
+ swapDevices = 1;
+ algorithm = "zstd";
+ };
+
# Enable OpenGL
hardware.graphics = {
enable = true;
@@ -62,12 +70,6 @@
# Modesetting is required.
modesetting.enable = true;
- # Use the NVidia open source kernel module (not to be confused with the
- # independent third-party "nouveau" open source driver).
- # Support is limited to the Turing and later architectures. Full list of
- # supported GPUs is at:
- # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
- # Only available from driver 515.43.04+
open = false;
# Enable the Nvidia settings menu,
@@ -249,7 +251,6 @@
pkgs-unstable.stable-diffusion-cpp-cuda
(pkgs-unstable.llama-cpp.override { cudaSupport = true; })
- pkgs-unstable.vllm
pkgs-unstable.witr
pkgs-unstable.comfy-ui-cuda
];
diff --git a/hosts/eva-01/configuration.nix b/hosts/eva-01/configuration.nix
index 1f5ebaf..a4acd01 100644
--- a/hosts/eva-01/configuration.nix
+++ b/hosts/eva-01/configuration.nix
@@ -84,6 +84,15 @@
virtualisation.docker.enable = true;
+ # zram
+ zramSwap = {
+ enable = true;
+ priority = 100;
+ memoryPercent = 30;
+ swapDevices = 1;
+ algorithm = "zstd";
+ };
+
# Set your time zone.
time.timeZone = "America/Los_Angeles";
@@ -278,6 +287,7 @@
vim
wifite2
wirelesstools
+ swaynotificationcenter
#fonts
nerd-fonts.hack
diff --git a/hosts/eva-03/configuration.nix b/hosts/eva-03/configuration.nix
index 6fa8574..d1e865b 100644
--- a/hosts/eva-03/configuration.nix
+++ b/hosts/eva-03/configuration.nix
@@ -6,6 +6,7 @@
config,
configPath,
hostname,
+ hostTypes,
inputs,
pkgs,
pkgs-unstable,
@@ -60,9 +61,28 @@
virtualisation.docker.enable = true;
+ # zram
+ zramSwap = {
+ enable = true;
+ priority = 100;
+ memoryPercent = 30;
+ swapDevices = 1;
+ algorithm = "zstd";
+ };
+
# Enable OpenGL
hardware.graphics = {
enable = true;
+ enable32Bit = true;
+ extraPackages = with pkgs; [
+ libva-vdpau-driver
+ libvdpau
+ libvdpau-va-gl
+ nvidia-vaapi-driver
+ vdpauinfo
+ libva
+ libva-utils
+ ];
};
# Load nvidia driver for Xorg and Wayland
@@ -78,17 +98,6 @@
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
# powerManagement.enable = false;
-
- # Fine-grained power management. Turns off GPU when not in use.
- # Experimental and only works on modern Nvidia GPUs (Turing or newer).
- # powerManagement.finegrained = false;
-
- # Use the NVidia open source kernel module (not to be confused with the
- # independent third-party "nouveau" open source driver).
- # Support is limited to the Turing and later architectures. Full list of
- # supported GPUs is at:
- # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
- # Only available from driver 515.43.04+
open = false;
# Enable the Nvidia settings menu,
@@ -99,10 +108,9 @@
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
-
-
# Set your time zone.
- time.timeZone = "America/Los_Angeles";
+ # time.timeZone = "America/Los_Angeles";
+ services.automatic-timezoned.enable = true;
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
@@ -145,23 +153,26 @@
package = pkgs-unstable.tailscale;
};
+ # StreamDeck udev rules
+ services.udev.extraRules = builtins.readFile (pkgs.fetchurl {
+ url = "https://raw.githubusercontent.com/StreamController/StreamController/main/udev.rules";
+ hash = "sha256-djXiFmR1IEKL8IfNpkhud+UvgfzWKzYvCoYEKlPcg0Y=";
+ });
+
#Enable Ollama daemon
#services.ollama.enable = true;
# Enable ollama
services.ollama = {
- enable = false;
+ enable = true;
host = "0.0.0.0";
openFirewall = true;
acceleration = "cuda";
- package = pkgs-unstable.ollama;
- loadModels = [
- "deepcoder:14b"
- "gemma3:12b-it-qat"
- "gemma3:27b-it-qat"
- ];
+ package = pkgs-unstable.ollama-cuda;
+ environmentVariables = {
+ CUDA_VISIBLE_DEVICES = "0,1";
+ };
};
-
services.fprintd.enable = true;
services.fprintd.tod.enable = true;
@@ -207,11 +218,7 @@
description = "rogueking";
extraGroups = [ "networkmanager" "wheel" "docker" ];
shell = pkgs.zsh;
- #packages = [ inputs.home-manager.packages.${pkgs.system}.default ];
packages = with pkgs; [
- #apps
- #cli
- # thunderbird
];
};
@@ -258,16 +265,14 @@
# $ nix search wget
environment.systemPackages = with pkgs; [
#apps
- #cider-2
fprintd
- guacamole-client
- #sddm-astronaut
polonium
+ config.boot.kernelPackages.openrazer
#cli tools
aircrack-ng
android-tools
- btop
+ btop-cuda
curl
docker
dust
@@ -294,8 +299,9 @@
wirelesstools
#unstable
- pkgs-unstable.crush
+ pkgs-unstable.vscode
(pkgs-unstable.llama-cpp.override { cudaSupport = true; })
+ pkgs-unstable.witr
#fonts
nerd-fonts.hack
@@ -303,14 +309,16 @@
];
+
+ # stylix.image = ../../assets/pfp/neonNerv.png;
home-manager = {
extraSpecialArgs = {
inherit
- # config
configPath
inputs
pkgs-unstable
hostname
+ hostTypes
;
};
users = {
@@ -319,31 +327,6 @@
backupFileExtension = "backup";
};
- # Some programs need SUID wrappers, can be configured further or are
- # started in user sessions.
- # programs.mtr.enable = true;
- # programs.gnupg.agent = {
- # enable = true;
- # enableSSHSupport = true;
- # };
-
- # List services that you want to enable:
-
- # Enable the OpenSSH daemon.
- # services.openssh.enable = true;
-
- # Open ports in the firewall.
- # networking.firewall.allowedTCPPorts = [ ... ];
- # networking.firewall.allowedUDPPorts = [ ... ];
- # Or disable the firewall altogether.
- # networking.firewall.enable = false;
-
- # This value determines the NixOS release from which the default
- # settings for stateful data, like file locations and database versions
- # on your system were taken. It‘s perfectly fine and recommended to leave
- # this value at the release version of the first install of this system.
- # Before changing this value read the documentation for this option
- # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
- system.stateVersion = "25.05"; # Did you read the comment?
+ system.stateVersion = "25.05";
}