updated hyprland conf and added readme

This commit is contained in:
2026-08-15 18:25:55 -07:00
parent 0ac9b5a78b
commit 4859b8521b
4 changed files with 297 additions and 115 deletions

10
README.md Normal file
View File

@@ -0,0 +1,10 @@
```bash
# Setup disks
nix run --experimental-features "nix-common flakes" github:nix-community/disko -- --mode disko --flake .#hades
# install configs
nixos-install --flake .#hades
# set password
nixos-enter --root /mnt -- passwd anish
```

View File

@@ -7,5 +7,7 @@
./brave.nix ./brave.nix
]; ];
xdg.portal.config.common.default = "*";
home.stateVersion = "26.05"; home.stateVersion = "26.05";
} }

View File

@@ -1,33 +1,86 @@
{ pkgs, lib, ... }: { pkgs, lib, ... }:
let let
mod = "SUPER"; mkLua = lib.generators.mkLuaInline;
terminal = "foot";
menu = "rofi -show drun";
browser = "brave";
in in
{ {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
configType = "lua"; configType = "lua";
package = null; package = null; # Hyprland package is managed system-wide via NixOS programs.hyprland
settings = { settings = {
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# 1. Variables & Modifiers # 1. Variables & Modifiers (Rendered as Lua local variables)
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
"$mod" = mod; mainMod = { _var = "SUPER"; };
"$terminal" = terminal; terminal = { _var = "foot"; };
"$menu" = menu; browser = { _var = "brave"; };
"$browser" = browser;
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# 2. Main Config (hl.config) # 2. Monitors (hl.monitor)
# -----------------------------------------------------------------------
monitor = [
{
output = "eDP-2";
mode = "3840x2160@144";
position = "0x0";
scale = 2;
}
{
output = "desc:Dell Inc. DELL U3419W 28DQ5T2";
mode = "3440x1440@60";
position = "0x-1440";
scale = 1;
}
{
output = "desc:Samsung Electric Company Odyssey Ark H1AK500000";
mode = "3840x2160@144";
position = "3840x0";
scale = 1;
}
{
output = "";
mode = "preferred";
position = "auto";
scale = "auto";
}
];
# -----------------------------------------------------------------------
# 3. Environment Variables (hl.env)
# -----------------------------------------------------------------------
env = [
{ _args = [ "XCURSOR_SIZE" "24" ]; }
{ _args = [ "LIBVA_DRIVE_NAME" "nvidia" ]; }
{ _args = [ "XDG_SESSION_TYPE" "wayland" ]; }
{ _args = [ "GBM_BACKEND" "nvidia-drm" ]; }
{ _args = [ "WLR_NO_HARDWARE_CURSORS" "1" ]; }
{ _args = [ "WLR_DRM_DEVICES" "/dev/dri/card1:/dev/dri/card0" ]; }
];
# -----------------------------------------------------------------------
# 4. Main Configuration (hl.config) - Strictly validates against Hyprland 0.55+ schema
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
config = { config = {
input = {
kb_layout = "us";
repeat_delay = 300;
repeat_rate = 50;
follow_mouse = 1;
sensitivity = 0;
touchpad = {
natural_scroll = false;
};
};
cursor = {
inactive_timeout = 3;
};
general = { general = {
gaps_in = 4; gaps_in = 5;
gaps_out = 8; gaps_out = 10;
border_size = 2; border_size = 2;
col = { col = {
active_border = { active_border = {
@@ -37,23 +90,43 @@ in
inactive_border = "rgba(595959aa)"; inactive_border = "rgba(595959aa)";
}; };
layout = "dwindle"; layout = "dwindle";
allow_tearing = false; };
group = {
groupbar = {
font_size = 14;
font_family = "SF Pro Display";
col = {
active = "rgba(33ccff00)";
inactive = "rgba(59595900)";
};
};
col = {
border_active = {
colors = [ "rgba(33ccffee)" "rgba(00ff99ee)" ];
angle = 45;
};
border_inactive = "rgba(595959aa)";
};
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
}; };
decoration = { decoration = {
rounding = 8; rounding = 10;
active_opacity = 1.0;
inactive_opacity = 0.95;
blur = { blur = {
enabled = true; enabled = false;
size = 5; size = 3;
passes = 2; passes = 1;
new_optimizations = true;
}; };
shadow = { shadow = {
enabled = true; enabled = false;
range = 4; range = 4;
render_power = 3; render_power = 3;
color = "rgba(1a1a1aee)"; color = "rgba(1a1a1aee)";
@@ -64,130 +137,234 @@ in
enabled = true; enabled = true;
}; };
input = {
kb_layout = "us";
follow_mouse = 1;
touchpad = {
natural_scroll = true;
};
sensitivity = 0;
};
dwindle = { dwindle = {
pseudotile = true;
preserve_split = true; preserve_split = true;
}; };
misc = { master = {
force_default_wallpaper = 0; new_status = "master";
disable_hyprland_logo = true;
}; };
}; };
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# 3. Animation Curves (hl.curve) & Animations # 5. Curves & Animations (hl.curve & hl.animation)
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
curve = [ curve = [
{ {
_args = [ _args = [
"easeOutQuint" "myBezier"
{ {
type = "bezier"; type = "bezier";
points = [ [ 0.23 1 ] [ 0.32 1 ] ]; points = [ [ 0.05 0.9 ] [ 0.1 1.05 ] ];
} }
]; ];
} }
]; ];
animation = [ animation = [
"windows, 1, 3, easeOutQuint" { leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; }
"windowsOut, 1, 3, easeOutQuint, popin 80%" { leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; }
"border, 1, 3, easeOutQuint" { leaf = "border"; enabled = true; speed = 10; bezier = "default"; }
"fade, 1, 3, easeOutQuint" { leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; }
"workspaces, 1, 3, easeOutQuint" { leaf = "fade"; enabled = true; speed = 7; bezier = "default"; }
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; }
]; ];
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# 4. Autostart Daemons & Apps # 6. Autostart Daemons & Apps (hl.on)
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
exec-once = [ on = [
"waybar" {
"dunst" _args = [
"hypridle" "hyprland.start"
"wl-paste --type text --watch cliphist store" (mkLua ''function()
"wl-paste --type image --watch cliphist store" hl.exec_cmd("waybar")
hl.exec_cmd("hyprpaper")
hl.exec_cmd("swayidle -w")
hl.exec_cmd("swaync")
hl.exec_cmd("/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1")
hl.exec_cmd("hyprlock")
end'')
];
}
]; ];
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# 5. Keybindings # 7. Keybindings (hl.bind)
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
bind = [ bind = [
# Launchers & Applications # Launchers & Window Controls
"$mod, RETURN, exec, $terminal" { _args = [ (mkLua "mainMod .. \" + Q\"") (mkLua "hl.dsp.exec_cmd(terminal)") ]; }
"$mod, SPACE, exec, $menu" { _args = [ (mkLua "mainMod .. \" + C\"") (mkLua "hl.dsp.window.close()") ]; }
"$mod, B, exec, $browser" { _args = [ (mkLua "mainMod .. \" + N\"") (mkLua "hl.dsp.exec_cmd(\"swaync-client -t -sw\")") ]; }
"$mod, D, exec, discord" { _args = [ (mkLua "mainMod .. \" + V\"") (mkLua "hl.dsp.window.float({ action = \"toggle\" })") ]; }
"$mod, E, exec, $terminal -e yazi" { _args = [ (mkLua "mainMod .. \" + R\"") (mkLua "hl.dsp.exec_cmd(\"rofi -show combi -show-icons\")") ]; }
"$mod, L, exec, hyprlock" { _args = [ (mkLua "mainMod .. \" + G\"") (mkLua "hl.dsp.group.toggle()") ]; }
{ _args = [ (mkLua "mainMod .. \" + F\"") (mkLua "hl.dsp.window.fullscreen({ fullscreen = 0 })") ]; }
# Window Controls # Move focus with mainMod + vim
"$mod SHIFT, Q, killactive," { _args = [ (mkLua "mainMod .. \" + h\"") (mkLua "hl.dsp.focus({ direction = \"left\" })") ]; }
"$mod, F, fullscreen, 0" { _args = [ (mkLua "mainMod .. \" + l\"") (mkLua "hl.dsp.focus({ direction = \"right\" })") ]; }
"$mod, V, togglefloating," { _args = [ (mkLua "mainMod .. \" + k\"") (mkLua "hl.dsp.focus({ direction = \"up\" })") ]; }
"$mod, P, pseudo," { _args = [ (mkLua "mainMod .. \" + j\"") (mkLua "hl.dsp.focus({ direction = \"down\" })") ]; }
"$mod, J, togglesplit,"
# Screenshots (Grim + Slurp) # Move focus within a grouped page
"$mod, PRINT, exec, grim -g \"$(slurp)\" - | wl-copy" { _args = [ (mkLua "mainMod .. \" + e\"") (mkLua "hl.dsp.group.next()") ]; }
"$mod SHIFT, PRINT, exec, grim ~/Pictures/Screenshot_$(date +'%Y%m%d_%H%M%S').png" { _args = [ (mkLua "mainMod .. \" + d\"") (mkLua "hl.dsp.group.prev()") ]; }
# Vim Focus Navigation (H, J, K, L & Arrows) # Move window or group with vim keys
"$mod, left, movefocus, l" { _args = [ (mkLua "mainMod .. \" + SHIFT + h\"") (mkLua "hl.dsp.window.move({ direction = \"left\" })") ]; }
"$mod, right, movefocus, r" { _args = [ (mkLua "mainMod .. \" + SHIFT + l\"") (mkLua "hl.dsp.window.move({ direction = \"right\" })") ]; }
"$mod, up, movefocus, u" { _args = [ (mkLua "mainMod .. \" + SHIFT + k\"") (mkLua "hl.dsp.window.move({ direction = \"up\" })") ]; }
"$mod, down, movefocus, d" { _args = [ (mkLua "mainMod .. \" + SHIFT + j\"") (mkLua "hl.dsp.window.move({ direction = \"down\" })") ]; }
"$mod, h, movefocus, l"
"$mod, l, movefocus, r"
"$mod, k, movefocus, u"
"$mod, j, movefocus, d"
# Vim Window Swapping # Scroll through existing workspaces with mainMod + scroll
"$mod SHIFT, left, swapwindow, l" { _args = [ (mkLua "mainMod .. \" + mouse_down\"") (mkLua "hl.dsp.focus({ workspace = \"e+1\" })") ]; }
"$mod SHIFT, right, swapwindow, r" { _args = [ (mkLua "mainMod .. \" + mouse_up\"") (mkLua "hl.dsp.focus({ workspace = \"e-1\" })") ]; }
"$mod SHIFT, up, swapwindow, u"
"$mod SHIFT, down, swapwindow, d"
"$mod SHIFT, h, swapwindow, l"
"$mod SHIFT, l, swapwindow, r"
"$mod SHIFT, k, swapwindow, u"
"$mod SHIFT, j, swapwindow, d"
# Scratchpad / Special Workspace # Lock shortcut
"$mod, S, togglespecialworkspace, magic" { _args = [ (mkLua "mainMod .. \" + S\"") (mkLua "hl.dsp.exec_cmd(\"wlogout\")") ]; }
"$mod SHIFT, S, movetoworkspace, special:magic"
# Quick access applications
{ _args = [ (mkLua "mainMod .. \" + b\"") (mkLua "hl.dsp.exec_cmd(browser)") ]; }
{ _args = [ (mkLua "mainMod .. \" + t\"") (mkLua "hl.dsp.exec_cmd(\"thunderbird\")") ]; }
# Scratch workspace
{ _args = [ (mkLua "mainMod .. \" + RETURN\"") (mkLua "hl.dsp.workspace.toggle_special(\"scratch\")") ]; }
{ _args = [ (mkLua "mainMod .. \" + SHIFT + RETURN\"") (mkLua "hl.dsp.window.move({ workspace = \"special:scratch\" })") ]; }
# Messaging workspace
{ _args = [ (mkLua "mainMod .. \" + M\"") (mkLua "hl.dsp.workspace.toggle_special(\"messaging\")") ]; }
# Move/resize windows with mouse and dragging
{
_args = [
(mkLua "mainMod .. \" + mouse:272\"")
(mkLua "hl.dsp.window.drag()")
{ mouse = true; }
];
}
{
_args = [
(mkLua "mainMod .. \" + mouse:273\"")
(mkLua "hl.dsp.window.resize()")
{ mouse = true; }
];
}
# Function Row Keys
{
_args = [
"XF86AudioRaiseVolume"
(mkLua "hl.dsp.exec_cmd(\"pactl -- set-sink-volume @DEFAULT_SINK@ +5%\")")
{ repeating = true; }
];
}
{
_args = [
"XF86AudioLowerVolume"
(mkLua "hl.dsp.exec_cmd(\"pactl -- set-sink-volume @DEFAULT_SINK@ -5%\")")
{ repeating = true; locked = true; }
];
}
{
_args = [
"XF86AudioMute"
(mkLua "hl.dsp.exec_cmd(\"pactl -- set-sink-mute @DEFAULT_SINK@ toggle\")")
{ repeating = true; locked = true; }
];
}
{
_args = [
"XF86MonBrightnessUp"
(mkLua "hl.dsp.exec_cmd(\"brightnessctl -d acpi_video0 set 5%+\")")
{ repeating = true; locked = true; }
];
}
{
_args = [
"XF86MonBrightnessDown"
(mkLua "hl.dsp.exec_cmd(\"brightnessctl -d acpi_video0 set 5%-\")")
{ repeating = true; locked = true; }
];
}
# Lid switch
{
_args = [
"switch:off:Lid Switch"
(mkLua "hl.dsp.exec_cmd(\"hyprctl keyword monitor \\\"eDP-2,3840x2160@144,0x0,2\\\"\")")
{ locked = true; }
];
}
{
_args = [
"switch:on:Lid Switch"
(mkLua "hl.dsp.exec_cmd(\"hyprctl keyword monitor \\\"eDP-2, disable\\\"\")")
{ locked = true; }
];
}
] ]
# Generate Workspace 1-10 switching and moving bindings with a list comprehension # Workspace 1-9 switching and moving
++ (map (i: "$mod, ${toString i}, workspace, ${toString i}") (lib.range 1 9)) ++ (lib.concatMap (i: [
++ [ "$mod, 0, workspace, 10" ] {
++ (map (i: "$mod SHIFT, ${toString i}, movetoworkspace, ${toString i}") (lib.range 1 9)) _args = [
++ [ "$mod SHIFT, 0, movetoworkspace, 10" ]; (mkLua "mainMod .. \" + ${toString i}\"")
(mkLua "hl.dsp.focus({ workspace = ${toString i} })")
# Locked/repeating bindings (Volume, Media, Brightness) ];
bindle = [ }
", XF86MonBrightnessUp, exec, brightnessctl set +5%" {
", XF86MonBrightnessDown, exec, brightnessctl set 5%-" _args = [
(mkLua "mainMod .. \" + SHIFT + ${toString i}\"")
(mkLua "hl.dsp.window.move({ workspace = ${toString i} })")
];
}
]) (lib.range 1 9))
# Workspace 10 switching and moving (mapped to key 0)
++ [
{
_args = [
(mkLua "mainMod .. \" + 0\"")
(mkLua "hl.dsp.focus({ workspace = 10 })")
];
}
{
_args = [
(mkLua "mainMod .. \" + SHIFT + 0\"")
(mkLua "hl.dsp.window.move({ workspace = 10 })")
];
}
]; ];
bindl = [ # -----------------------------------------------------------------------
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" # 8. Workspace Rules (hl.workspace_rule)
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" # -----------------------------------------------------------------------
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" workspace_rule = [
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" {
workspace = "name:messaging";
on_created_empty = "[] togglegroup";
}
]; ];
# Mouse bindings (move/resize floating windows) # -----------------------------------------------------------------------
bindm = [ # 9. Window Rules (hl.window_rule)
"$mod, mouse:272, movewindow" # -----------------------------------------------------------------------
"$mod, mouse:273, resizewindow" window_rule = [
{
name = "signal-messaging";
match = { class = "Signal"; };
workspace = "special:messaging";
}
{
name = "webcord-messaging";
match = { class = "WebCord"; };
workspace = "special:messaging";
}
{
name = "ghidra-tile";
match = { class = "ghidra-Ghidra"; };
float = false;
}
]; ];
}; };
}; };

View File

@@ -1,12 +1,5 @@
{ ... }: { ... }:
{ {
home-manager.users.anish.wayland.windowManager.hyprland.settings.monitor = [ # Host-specific display configurations can be placed here if needed.
{
output = "HDMI-A-1";
mode = "3840x2160";
position = "auto";
scale = 2;
}
];
} }