refactor: modularize Hyprland configuration

- Create home/hyprland/default.nix module with configurable options
- Add support for monitors, extraEnv, streamcontroller, lockhelper, grimblast, wacom
- Add workspace strategy (numbered vs named per monitor)
- Update magicman config to use new module with minimal config
- Update gunter config to use new module with all customizations
- Remove deprecated Hyprland config files
- Significantly reduce duplication between host configs
- Both configurations build successfully
This commit is contained in:
2026-01-30 14:34:51 +01:00
parent f810afce5f
commit 820f3c1fde
9 changed files with 425 additions and 811 deletions

380
home/hyprland/default.nix Normal file
View File

@@ -0,0 +1,380 @@
{
pkgs,
lib,
config,
...
}:
with lib;
let
cfg = config.hyprland;
in
{
options.hyprland = {
enable = mkEnableOption "Hyprland";
monitors = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "eDP-1,1920x1080@60,0x0,1" ];
description = "Hyprland monitor configuration";
};
extraEnv = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"LIBVA_DRIVER_NAME,nvidia"
"GBM_BACKEND,nvidia-drm"
];
description = "Extra environment variables for Hyprland";
};
enableStreamController = mkEnableOption "streamcontroller service";
useLockHelper = mkEnableOption "use lockhelper script instead of hyprlock directly";
enableGrimblast = mkEnableOption "grimblast screenshot keybinds";
enableWacom = mkEnableOption "Wacom tablet device configuration";
extraKeybinds = mkOption {
type = types.listOf types.str;
default = [ ];
example = [
"$mainMod,Print,exec,grimblast save active ~/tmp/screenshot.png"
];
description = "Extra keybinds for Hyprland";
};
lockMonitorNames = mkOption {
type = types.listOf (types.nullOr types.str);
default = [ null ];
example = [
"desc:BNQ G2420HDBL T2B04424SL000"
"desc:Samsung Electric Company LS27A600U HNMT502389"
];
description = "Monitor names for hyprlock backgrounds (null for all monitors)";
};
workspaceStrategy = mkOption {
type = types.enum [
"numbered"
"named"
];
default = "numbered";
description = "Workspace naming strategy: numbered (1-6) or named per monitor";
};
monitorVariables = mkOption {
type = types.attrsOf types.str;
default = { };
example = {
"$mon_top" = "desc:BNQ G2420HDBL T2B04424SL000";
"$mon_left" = "desc:Samsung Electric Company LS27A600U HNMT502389";
};
description = "Monitor name variables for workspace configuration";
};
cursorNoHardware = mkEnableOption "disable hardware cursors";
};
config = mkIf cfg.enable {
home.packages =
with pkgs;
[
dunst
hyprpaper
rofi
slurp
swww
waybar
wl-clipboard
catppuccin-cursors.macchiatoLavender
bibata-cursors
libsForQt5.qt5.qtwayland
libsForQt5.qt5ct
]
++ optional cfg.enableGrimblast grimblast;
services.hyprpaper = {
enable = true;
settings = {
splash = false;
};
};
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd =
if cfg.useLockHelper then
"${pkgs.callPackage ../scripts/lockhelper.nix { }}/bin/lockhelper"
else
"${pkgs.hyprlock}/bin/hyprlock";
ignore_dbus_inhibit = false;
};
listener = {
timeout = 240;
on-timeout = config.services.hypridle.settings.general.lock_cmd;
before_sleep_cmd = config.services.hypridle.settings.general.lock_cmd;
};
};
};
programs.hyprlock = {
enable = true;
settings = {
background = map (mon: {
monitor = if mon == null then "" else "desc:${mon}";
path = "screenshot";
color = "rgba(17, 17, 17, 1.0)";
blur_passes = 3;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
}) cfg.lockMonitorNames;
general = {
grace = 0;
};
input-field = [
{
size = "250, 60";
outline_thickness = 2;
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = true;
outer_color = "rgba(0, 0, 0, 0)";
inner_color = "rgba(0, 0, 0, 0.5)";
font_color = "rgb(200, 200, 200)";
fade_on_empty = false;
font_family = "JetBrains Mono Nerd Font Mono";
placeholder_text = "<i><span foreground=\"##cdd6f4\">Input Password...</span></i>";
hide_input = false;
position = "0, -120";
halign = "center";
valign = "center";
}
];
label = [
{
text = "cmd[update:2000] echo \"$(date +\"%b %d %H:%M\")\"";
color = "rgba(255, 255, 255, 0.6)";
font_size = 120;
font_family = "JetBrains Mono Nerd Font Mono ExtraBold";
position = "0, -300";
halign = "center";
valign = "top";
}
];
};
};
systemd.user.services = mkIf cfg.enableStreamController {
streamcontroller = {
Unit = {
Description = "Streamcontroller service";
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
Requisite = [ "graphical-session.target" ];
};
Service = {
ExecStart = "${pkgs.streamcontroller}/bin/streamcontroller -b";
Restart = "on-failure";
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
};
};
wayland.windowManager.hyprland = {
enable = true;
package = pkgs.hyprland;
systemd.enable = false;
settings = {
"$mainMod" = "SUPER";
"$shiftMainMod" = "SUPER_SHIFT";
"$term" = "kitty";
}
// cfg.monitorVariables
// {
monitor = cfg.monitors;
input = {
kb_layout = "no";
follow_mouse = 1;
};
device = optional cfg.enableWacom {
name = "wacom-one-by-wacom-m-pen";
};
cursor = optionalAttrs cfg.cursorNoHardware {
no_hardware_cursors = true;
};
env = [ "XDG_SESSION_TYPE,wayland" ] ++ cfg.extraEnv;
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 3;
passes = 1;
xray = true;
};
};
general = {
gaps_in = 4;
gaps_out = 10;
border_size = 2;
layout = "dwindle";
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
"specialWorkspace, 1, 4, default, fade"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
special_scale_factor = 0.85;
};
master = {
new_status = "master";
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
};
ecosystem = {
no_update_news = true;
};
windowrule = [
{
name = "terminal_opacity";
"match:class" = "kitty";
opacity = 0.9;
}
];
workspace =
if cfg.workspaceStrategy == "named" then
[
"name:T1, monitor:$mon_top, persistent:true, default:true"
"name:T2, monitor:$mon_top, persistent:true, default:false"
"name:L1, monitor:$mon_left, persistent:true, default:true"
"name:L2, monitor:$mon_left, persistent:true, default:false"
"name:R1, monitor:$mon_right, persistent:true, default:true"
"name:R2, monitor:$mon_right, persistent:true, default:false"
"name:c1, monitor:$mon_center, persistent:true, default:true"
"name:c2, monitor:$mon_center, persistent:true, default:false"
"name:c3, monitor:$mon_center, persistent:true, default:false"
"name:c4, monitor:$mon_center, persistent:true, default:false"
"special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false"
]
else
[ "special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false" ];
bindm = [
"$mainMod,mouse:272,movewindow"
"$shiftMainMod,mouse:272,resizewindow"
];
bind = [
# term
"$mainMod,Return,exec,$term"
# rofi
"$mainMod,D,exec,rofi-launcher"
"$mainMod,P,exec,rofi-rbw"
# hyprlock
"$shiftMainMod,l,exec,${
if cfg.useLockHelper then
"${pkgs.callPackage ../scripts/lockhelper.nix { }}/bin/lockhelper"
else
"${pkgs.hyprlock}/bin/hyprlock"
}"
# hyprland
"$mainMod,Q,killactive,"
"CTRLALT,Delete,exit,"
"$mainMod,Space,togglefloating,"
"$mainMod,F,fullscreen,"
# focus
"$mainMod,l,movefocus,l"
"$mainMod,h,movefocus,r"
"$mainMod,k,movefocus,u"
"$mainMod,j,movefocus,d"
# move
"$mainMod,h,movewindow,l"
"$mainMod,l,movewindow,r"
"$mainMod,k,movewindow,u"
"$mainMod,j,movewindow,d"
# Force opacity
"$shiftMainMod,o,exec, hl-no-opacity"
]
++ cfg.extraKeybinds
++ (
if cfg.workspaceStrategy == "numbered" then
[
"$mainMod,1,workspace,1"
"$mainMod,2,workspace,2"
"$mainMod,3,workspace,3"
"$mainMod,4,workspace,4"
"$mainMod,5,workspace,5"
"$mainMod,6,workspace,6"
"$shiftMainMod,1,movetoworkspace,1"
"$shiftMainMod,2,movetoworkspace,2"
"$shiftMainMod,3,movetoworkspace,3"
"$shiftMainMod,4,movetoworkspace,4"
"$shiftMainMod,5,movetoworkspace,5"
"$shiftMainMod,5,movetoworkspace,6"
]
else
[
"$mainMod,1,workspace,name:c1"
"$mainMod,2,workspace,name:c2"
"$mainMod,3,workspace,name:c3"
"$mainMod,4,workspace,name:c4"
"$mainMod,5,workspace,5"
"$mainMod,6,workspace,6"
"$shiftMainMod,1,movetoworkspace,name:c1"
"$shiftMainMod,2,movetoworkspace,name:c2"
"$shiftMainMod,3,movetoworkspace,name:c3"
"$shiftMainMod,4,movetoworkspace,name:c4"
"$shiftMainMod,5,movetoworkspace,5"
"$shiftMainMod,6,movetoworkspace,6"
]
)
++ [
# Special workspace
"$mainMod,c,togglespecialworkspace"
"$shiftMainMod,c,movetoworkspace, special"
];
exec-once = [ ];
};
};
};
}

View File

@@ -1,8 +0,0 @@
{
imports = [
./hyprland_gunter.nix
./waybar
./xdg.nix
./cursor.nix
];
}

View File

@@ -1,384 +0,0 @@
{
pkgs,
lib,
config,
...
}:
let
lockhelper = pkgs.callPackage ../scripts/lockhelper.nix { };
monitorTopDesc = "BNQ G2420HDBL T2B04424SL000";
monitorTopName = "desc:${monitorTopDesc}";
monitorTopHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorTopDesc);
monitorLeftDesc = "Samsung Electric Company LS27A600U HNMT502389";
monitorLeftName = "desc:${monitorLeftDesc}";
monitorLeftHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorLeftDesc);
monitorCenterDesc = "Acer Technologies XB271HU #ASPVEKfgZ8Dd";
monitorCenterName = "desc:${monitorCenterDesc}";
monitorCenterHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorCenterDesc);
monitorRightDesc = "Samsung Electric Company LS27A600U HNMT502390";
monitorRightName = "desc:${monitorRightDesc}";
monitorRightHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorRightDesc);
in
{
options.hyprland.enable = lib.mkEnableOption "Hyprland";
config = {
home.packages = with pkgs; [
dunst
rofi
slurp
swww
waybar
wl-clipboard
catppuccin-cursors.macchiatoLavender
bibata-cursors
# For potentially fixing some issues
libsForQt5.qt5.qtwayland
libsForQt5.qt5ct
];
services.hyprpaper = {
enable = true;
settings = {
splash = false;
};
};
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "${pkgs.hyprlock}/bin/hyprlock";
before_sleep_cmd = "${lockhelper}/bin/lockhelper";
ignore_dbus_inhibit = false;
};
listener = {
timeout = 240;
on-timeout = "${lockhelper}/bin/lockhelper";
};
};
};
programs.hyprlock = {
enable = true;
settings = {
background = [
{
monitor = monitorTopName;
# path = "/tmp/lockscreen/${monitorTopHash}.png";
path = "screenshot";
color = "rgba(17, 17, 17, 1.0)";
blur_passes = 3;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
}
{
monitor = monitorLeftName;
# path = "/tmp/lockscreen/${monitorLeftHash}.png";
path = "screenshot";
color = "rgba(17, 17, 17, 1.0)";
blur_passes = 3;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
zindex = 1;
}
{
monitor = monitorCenterName;
# path = "/tmp/lockscreen/${monitorCenterHash}.png";
path = "screenshot";
color = "rgba(17, 17, 17, 1.0)";
blur_passes = 3;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
}
{
monitor = monitorRightName;
# path = "/tmp/lockscreen/${monitorRightHash}.png";
path = "screenshot";
color = "rgba(17, 17, 17, 1.0)";
blur_passes = 3;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
}
];
general = {
grace = 0;
};
input-field = [
{
size = "250, 60";
outline_thickness = 2;
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = true;
outer_color = "rgba(0, 0, 0, 0)";
inner_color = "rgba(0, 0, 0, 0.5)";
font_color = "rgb(200, 200, 200)";
fade_on_empty = false;
font_family = "JetBrains Mono Nerd Font Mono";
placeholder_text = "<i><span foreground=\"##cdd6f4\">Input Password...</span></i>";
hide_input = false;
position = "0, -120";
halign = "center";
valign = "center";
}
];
label = [
{
text = "cmd[update:2000] echo \"$(date +\"%b %d %H:%M\")\"";
color = "rgba(255, 255, 255, 0.6)";
font_size = 120;
font_family = "JetBrains Mono Nerd Font Mono ExtraBold";
position = "0, -300";
halign = "center";
valign = "top";
}
];
};
};
# streamcontroller service
systemd.user.services = {
streamcontroller = {
Unit = {
Description = "Streamcontroller service";
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
Requisite = [ "graphical-session.target" ];
};
Service = {
ExecStart = "${pkgs.streamcontroller}/bin/streamcontroller -b";
Restart = "on-failure";
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
};
};
wayland.windowManager.hyprland = {
enable = true;
package = pkgs.hyprland;
systemd.enable = false;
settings = {
"$mainMod" = "SUPER";
"$shiftMainMod" = "SUPER_SHIFT";
"$term" = "kitty";
# monitors
"$mon_top" = monitorTopName;
"$mon_left" = monitorLeftName;
"$mon_center" = monitorCenterName;
"$mon_right" = monitorRightName;
monitor = [
"$mon_top,1920x1080@60,2560x0,1" # top T2B04424SL000
# "DP-8,1920x1080@60,2560x0,1" # top T2B04424SL000 60
"$mon_left,2560x1440@75,0x1080,1" # left
# "DP-6,2560x1440@75,0x1080,1" # left 75hz
"$mon_center,2560x1440@120,2560x1080,1" # main #ASPVEKfgZ8Dd
# "DP-4,2560x1440@144,2560x1080,1" # main #ASPVEKfgZ8Dd 120hz
"$mon_right,2560x1440@75,5120x1080,1" # right
# "DP-7,2560x1440@75,5120x1080,1" # right 75hz
];
input = {
kb_layout = "no";
follow_mouse = 1;
};
device = [
{
name = "wacom-one-by-wacom-m-pen";
output = "$mon_center";
}
];
cursor = {
no_hardware_cursors = true;
};
env = [
"LIBVA_DRIVER_NAME,nvidia"
"XDG_SESSION_TYPE,wayland"
"GBM_BACKEND,nvidia-drm"
# "__GLX_VENDOR_LIBRARY_NAME,nvidia"
"WLR_NO_HARDWARE_CURSORS,1"
];
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 3;
passes = 1;
xray = true;
};
};
general = {
gaps_in = 4;
gaps_out = 10;
border_size = 2;
layout = "dwindle";
};
ecosystem = {
no_update_news = true;
};
animations = {
enabled = true;
bezier = [
"myBezier, 0.05, 0.9, 0.1, 1.05"
"easeInB, 0.6, -0.28, 0.735, 0.045"
];
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, easeInB, slidefadevert"
"specialWorkspace, 1, 4, default, fade"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
special_scale_factor = 0.85;
};
master = {
new_status = "master";
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
};
windowrule = [
{
name = "terminal_opacity";
"match:class" = "kitty";
opacity = 0.9;
}
];
workspace = [
"name:T1, monitor:$mon_top, persistent:true, default:true"
"name:T2, monitor:$mon_top, persistent:true, default:false"
"name:L1, monitor:$mon_left, persistent:true, default:true"
"name:L2, monitor:$mon_left, persistent:true, default:false"
"name:R1, monitor:$mon_right, persistent:true, default:true"
"name:R2, monitor:$mon_right, persistent:true, default:false"
"name:c1, monitor:$mon_center, persistent:true, default:true"
"name:c2, monitor:$mon_center, persistent:true, default:false"
"name:c3, monitor:$mon_center, persistent:true, default:false"
"name:c4, monitor:$mon_center, persistent:true, default:false"
"special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false"
];
bindm = [
"$mainMod,mouse:272,movewindow"
"$shiftMainMod,mouse:272,resizewindow"
];
bindr = [
# mumble ptt release
# ",code:202,exec,mumble rpc stoptalking"
# ",code:202,exec,pamixer --source 63 -m"
# ",code:202,exec,sleep 0.5 && pamixer --default-source -m"
];
bind = [
# term
"$mainMod,Return,exec,$term"
# hyprlock
"$shiftMainMod,l,exec,${lockhelper}/bin/lockhelper"
# rofi
"$mainMod,D,exec,rofi-launcher"
"$mainMod,P,exec,rofi-rbw"
# hyprland
"$mainMod,Q,killactive,"
"CTRLALT,Delete,exit,"
"$mainMod,Space,togglefloating,"
"$mainMod,F,fullscreen,"
# focus
"$mainMod,l,movefocus,l"
"$mainMod,h,movefocus,r"
"$mainMod,k,movefocus,u"
"$mainMod,j,movefocus,d"
# move
"$mainMod,h,movewindow,l"
"$mainMod,l,movewindow,r"
"$mainMod,k,movewindow,u"
"$mainMod,j,movewindow,d"
# Force opacity
"$shiftMainMod,o,exec, hl-no-opacity"
# grimblast
"$mainMod,Print,exec,grimblast save active ~/tmp/$(date -Iseconds).png"
"$shiftMainMod,Print,exec,grimblast copy area"
",Print,exec,grimblast copy active"
# mumble ptt click
# ",code:202,exec,mumble rpc starttalking"
#",code:202,pass,^(info\.mumble\.Mumble)$"
# ",code:202,exec,pamixer --default-source -u"
",code:202,pass,^discord$"
# Paste to wtype
"$mainMod,v,exec,sleep 0.5s && wl-paste | wtype -"
# worspace switching
"$mainMod,1,workspace,name:c1"
"$mainMod,2,workspace,name:c2"
"$mainMod,3,workspace,name:c3"
"$mainMod,4,workspace,name:c4"
"$mainMod,5,workspace,5"
"$mainMod,6,workspace,6"
# Move window to workspace
"$shiftMainMod,1,movetoworkspace,name:c1"
"$shiftMainMod,2,movetoworkspace,name:c2"
"$shiftMainMod,3,movetoworkspace,name:c3"
"$shiftMainMod,4,movetoworkspace,name:c4"
"$shiftMainMod,5,movetoworkspace,5"
"$shiftMainMod,6,movetoworkspace,6"
# Special workspace
"$mainMod,c,togglespecialworkspace"
"$shiftMainMod,c,movetoworkspace, special"
];
exec-once = [
];
};
};
};
}

View File

@@ -1,242 +0,0 @@
{
pkgs,
lib,
...
}:
{
options.hyprland.enable = lib.mkEnableOption "Hyprland";
config = {
home.packages = with pkgs; [
dunst
# hyprlock
hyprpaper
rofi
slurp
swww
waybar
wl-clipboard
catppuccin-cursors.macchiatoLavender
bibata-cursors
# For potentially fixing some issues
libsForQt5.qt5.qtwayland
libsForQt5.qt5ct
];
services.hyprpaper = {
enable = true;
settings = {
splash = false;
};
};
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "${pkgs.hyprlock}/bin/hyprlock";
before_sleep_cmd = "${pkgs.hyprlock}/bin/hyprlock";
ignore_dbus_inhibit = false;
};
listener = {
timeout = 240;
on-timeout = "${pkgs.hyprlock}/bin/hyprlock";
};
};
};
programs.hyprlock = {
enable = true;
settings = {
background = [
{
monitor = "";
path = "screenshot";
color = "rgba(17, 17, 17, 1.0)";
blur_passes = 3;
contrast = 0.8916;
brightness = 0.8172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
}
];
general = {
grace = 0;
};
input-field = [
{
size = "250, 60";
outline_thickness = 2;
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = true;
outer_color = "rgba(0, 0, 0, 0)";
inner_color = "rgba(0, 0, 0, 0.5)";
font_color = "rgb(200, 200, 200)";
fade_on_empty = false;
font_family = "JetBrains Mono Nerd Font Mono";
placeholder_text = "<i><span foreground=\"##cdd6f4\">Input Password...</span></i>";
hide_input = false;
position = "0, -120";
halign = "center";
valign = "center";
}
];
label = [
{
text = "cmd[update:2000] echo \"$(date +\"%b %d %H:%M\")\"";
color = "rgba(255, 255, 255, 0.6)";
font_size = 120;
font_family = "JetBrains Mono Nerd Font Mono ExtraBold";
position = "0, -300";
halign = "center";
valign = "top";
}
];
};
};
wayland.windowManager.hyprland = {
enable = true;
package = pkgs.hyprland;
settings = {
"$mainMod" = "SUPER";
"$shiftMainMod" = "SUPER_SHIFT";
"$term" = "kitty";
monitor = [ "eDP-1,1920x1080@60,0x0,1" ];
input = {
kb_layout = "no";
follow_mouse = 1;
};
env = [ "XDG_SESSION_TYPE,wayland" ];
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 3;
passes = 1;
xray = true;
};
};
general = {
gaps_in = 4;
gaps_out = 10;
border_size = 2;
layout = "dwindle";
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
"specialWorkspace, 1, 4, default, fade"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
special_scale_factor = 0.85;
};
master = {
new_status = "master";
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
};
ecosystem = {
no_update_news = true;
};
windowrule = [
{
name = "terminal_opacity";
"match:class" = "kitty";
opacity = 0.9;
}
];
workspace = [
"special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false"
];
bindm = [
"$mainMod,mouse:272,movewindow"
"$shiftMainMod,mouse:272,resizewindow"
];
bindr = [
];
bind = [
# term
"$mainMod,Return,exec,$term"
# rofi
"$mainMod,D,exec,rofi-launcher"
"$mainMod,P,exec,rofi-rbw"
# hyprlock
"$shiftMainMod,l,exec,${pkgs.hyprlock}/bin/hyprlock"
# hyprland
"$mainMod,Q,killactive,"
"CTRLALT,Delete,exit,"
"$mainMod,Space,togglefloating,"
"$mainMod,F,fullscreen,"
# focus
"$mainMod,l,movefocus,l"
"$mainMod,h,movefocus,r"
"$mainMod,k,movefocus,u"
"$mainMod,j,movefocus,d"
# move
"$mainMod,h,movewindow,l"
"$mainMod,l,movewindow,r"
"$mainMod,k,movewindow,u"
"$mainMod,j,movewindow,d"
# Force opacity
"$shiftMainMod,o,exec, hl-no-opacity"
# worspace switching
"$mainMod,1,workspace,1"
"$mainMod,2,workspace,2"
"$mainMod,3,workspace,3"
"$mainMod,4,workspace,4"
"$mainMod,5,workspace,5"
"$mainMod,6,workspace,6"
# Move window to workspace
"$shiftMainMod,1,movetoworkspace,1"
"$shiftMainMod,2,movetoworkspace,2"
"$shiftMainMod,3,movetoworkspace,3"
"$shiftMainMod,4,movetoworkspace,4"
"$shiftMainMod,5,movetoworkspace,5"
"$shiftMainMod,5,movetoworkspace,6"
# Special workspace
"$mainMod,c,togglespecialworkspace"
"$shiftMainMod,c,movetoworkspace, special"
];
exec-once = [
];
};
};
};
}

View File

@@ -1,159 +0,0 @@
{
inputs,
pkgs,
lib,
config,
...
}:
{
options.hyprland.enable = lib.mkEnableOption "Hyprland";
config = {
home.packages = with pkgs; [
dunst
# hyprlock
hyprpaper
rofi-wayland
slurp
swww
waybar
wl-clipboard
catppuccin-cursors.macchiatoLavender
bibata-cursors
# For potentially fixing some issues
libsForQt5.qt5.qtwayland
libsForQt5.qt5ct
];
wayland.windowManager.hyprland = {
enable = true;
package = pkgs.hyprland;
settings = {
"$mainMod" = "SUPER";
"$shiftMainMod" = "SUPER_SHIFT";
"$term" = "kitty";
monitor = [ ];
input = {
kb_layout = "no";
follow_mouse = 1;
};
env = [ "XDG_SESSION_TYPE,wayland" ];
decoration = {
rounding = 0;
drop_shadow = true;
shadow_range = 4;
shadow_render_power = 3;
blur = {
enabled = true;
size = 3;
passes = 1;
xray = true;
};
};
general = {
gaps_in = 4;
gaps_out = 10;
border_size = 2;
layout = "dwindle";
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = "master";
};
misc.force_default_wallpaper = -1;
windowrulev2 = [
"opacity 0.95 override 0.7 override,class:^(Alacritty)$"
"opacity 0.95 override 0.7 override,class:^(kitty)$"
];
workspace = [
"name:mumble, monitor:$mon_top, persistent:true, default:true"
"name:left, monitor:$mon_left, persistent:true, default:true"
"name:right, monitor:$mon_right, persistent:true, default:true"
"name:main 1, monitor:$mon_center, persistent:true, default:true"
"name:main 2, monitor:$mon_center, persistent:true, default:true"
];
bindm = [ "ALT,mouse:272,movewindow" ];
bindr = [
# mumble ptt release
# ",code:202,exec,mumble rpc stoptalking"
# ",code:202,exec,pamixer --source 63 -m"
# ",code:202,exec,sleep 0.5 && pamixer --default-source -m"
];
bind = [
# term
"$mainMod,Return,exec,$term"
# rofi
"$mainMod,D,exec,rofi-launcher"
"$mainMod,P,exec,rofi-rbw"
# hyprland
"$mainMod,Q,killactive,"
"CTRLALT,Delete,exit,"
"$mainMod,Space,togglefloating,"
"$mainMod,F,fullscreen,"
# focus
"$mainMod,l,movefocus,l"
"$mainMod,h,movefocus,r"
"$mainMod,k,movefocus,u"
"$mainMod,j,movefocus,d"
# move
"$mainMod,h,movewindow,l"
"$mainMod,l,movewindow,r"
"$mainMod,k,movewindow,u"
"$mainMod,j,movewindow,d"
# Force opacity
"$shiftMainMod,o,exec, hl-no-opacity"
# mumble ptt click
# ",code:202,exec,mumble rpc starttalking"
#",code:202,pass,^(info\.mumble\.Mumble)$"
# ",code:202,exec,pamixer --default-source -u"
",code:202,pass,^discord$"
# worspace switching
"$mainMod,1,workspace,name:main 1"
"$mainMod,2,workspace,name:main 2"
"$mainMod,3,workspace,3"
"$mainMod,4,workspace,4"
"$mainMod,5,workspace,5"
"$mainMod,6,workspace,6"
];
exec-once = [
"waybar"
"hyprpaper & sleep 2 && randomwp"
"easyeffects --gapplication-service"
# "dunst"
];
};
};
};
}

View File

@@ -1,8 +0,0 @@
{
imports = [
./hyprland_magicman.nix
./waybar
./xdg.nix
./cursor.nix
];
}

View File

@@ -1,8 +0,0 @@
{
imports = [
./hyprland_prismo.nix
./waybar
./xdg.nix
./cursor.nix
];
}