Migrate Hyprland to Lua config, drop dead flake inputs, general cleanup

Hyprland
- Switch wayland.windowManager.hyprland to configType = "lua" (Hyprland 0.56)
- Convert settings, env, monitors, window rules, gesture, animations
  (hl.curve/hl.animation) and all keybinds to hl.* calls
- Add home/system/hyprland/lib.nix with exec/bind/execOnce helpers;
  every exec-once now runs from a hyprland.start hook
- Drop hard-coded default_monitor = "eDP-2"

Flake
- Remove blog, awesome-wallpapers and default-creds inputs (their repos
  no longer ship a flake.nix and broke `nix flake update`), along with
  the server modules and Glance links that used them
- Update flake.lock
- Replace removed `gcr` with `gcr_4`

Fixes
- Point configDirectory at /etc/nixos/nixy on home-pc and thinkpad
- Fix home-pc git email typo
- Remove conflicting openpgp signing format, make pull.rebase a boolean,
  replace hx/peco in git aliases with nvim/sk
- Fix zsh NUL alias (2>&1) and stop forcing bat colors in the cat alias
- Require a password for sudo again (nixos-rebuild stays NOPASSWD)
- Remove duplicate hardware.graphics block from home-pc flake
- Delete unused zen .old files, run alejandra on host files
This commit is contained in:
kptltd00m
2026-09-28 18:15:30 +02:00
parent c4e3af21e3
commit fe508d9cd8
34 changed files with 578 additions and 1083 deletions
+126 -104
View File
@@ -14,6 +14,7 @@
blur = config.theme.blur;
keyboardLayout = config.var.keyboardLayout;
background = "rgba(" + config.lib.stylix.colors.base00 + "EE)";
hl = import ./lib.nix {inherit lib;};
in {
imports = [
./animations.nix
@@ -48,7 +49,7 @@ in {
wayland.windowManager.hyprland = {
enable = true;
configType = "hyprlang";
configType = "lua";
xwayland.enable = true;
systemd = {
enable = false;
@@ -60,116 +61,137 @@ in {
portalPackage = null;
settings = {
exec-once = [
on = hl.execOnce [
"dbus-update-activation-environment --systemd --all &"
];
# default for every monitor without an explicit rule (hosts add their own)
monitor = [
",prefered,auto,1" # default
{
output = "";
mode = "preferred";
position = "auto";
scale = 1;
}
];
env = [
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"ANKI_WAYLAND,1"
"DISABLE_QT5_COMPAT,0"
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_QPA_PLATFORM,wayland;xcb"
"QT_QPA_PLATFORMTHEME,gtk3"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"DIRENV_LOG_FORMAT,"
"SDL_VIDEODRIVER,wayland"
"CLUTTER_BACKEND,wayland"
env = lib.mapAttrsToList (name: value: {_args = [name value];}) {
XDG_CURRENT_DESKTOP = "Hyprland";
XDG_SESSION_TYPE = "wayland";
XDG_SESSION_DESKTOP = "Hyprland";
ANKI_WAYLAND = "1";
DISABLE_QT5_COMPAT = "0";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
QT_QPA_PLATFORM = "wayland;xcb";
QT_QPA_PLATFORMTHEME = "gtk3";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
ELECTRON_OZONE_PLATFORM_HINT = "auto";
DIRENV_LOG_FORMAT = "";
SDL_VIDEODRIVER = "wayland";
CLUTTER_BACKEND = "wayland";
};
config = {
cursor.no_hardware_cursors = true;
general = {
resize_on_border = true;
gaps_in = gaps-in;
gaps_out = gaps-out;
border_size = border-size;
layout = "master";
col.inactive_border = lib.mkForce background;
};
decoration = {
active_opacity = active-opacity;
inactive_opacity = inactive-opacity;
inherit rounding;
shadow = {
enabled = true;
range = 20;
render_power = 3;
};
blur = {
enabled = blur;
size = 18;
};
};
master = {
new_status = "slave";
allow_small_split = true;
mfact = 0.5;
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
disable_autoreload = true;
focus_on_activate = true;
};
input = {
kb_layout = keyboardLayout;
kb_options = "caps:escape";
follow_mouse = 1;
sensitivity = 0.0; # or whatever speed you prefer
accel_profile = "flat";
repeat_delay = 300;
repeat_rate = 50;
numlock_by_default = true;
touchpad = {
natural_scroll = true;
clickfinger_behavior = true;
};
};
ecosystem.no_update_news = true;
};
gesture = {
fingers = 3;
direction = "horizontal";
action = "workspace";
};
window_rule = [
{
name = "suppress-maximize";
match.class = ".*";
suppress_event = "maximize";
}
{
name = "helium-fullscreen";
match.class = "helium";
suppress_event = "fullscreen";
sync_fullscreen = false;
}
{
name = "proton-authenticator";
match.class = "proton-authenticator";
float = true;
center = true;
size = [500 400];
}
{
name = "protonvpn-app";
match.class = "protonvpn-app";
float = true;
center = true;
size = [500 400];
}
{
name = "run-bg";
match.title = "run-bg";
float = true;
center = true;
size = [700 80];
}
];
cursor = {
no_hardware_cursors = true;
default_monitor = "eDP-2";
};
general = {
resize_on_border = true;
gaps_in = gaps-in;
gaps_out = gaps-out;
border_size = border-size;
layout = "master";
"col.inactive_border" = lib.mkForce background;
};
decoration = {
active_opacity = active-opacity;
inactive_opacity = inactive-opacity;
rounding = rounding;
shadow = {
enabled = true;
range = 20;
render_power = 3;
};
blur = {
enabled =
if blur
then "true"
else "false";
size = 18;
};
};
master = {
new_status = "slave";
allow_small_split = true;
mfact = 0.5;
};
gesture = "3, horizontal, workspace";
windowrule = [
"match:class .*, suppress_event maximize"
"match:class helium, suppress_event fullscreen"
"match:class helium, sync_fullscreen false"
"match:class proton-authenticator, float on"
"match:class proton-authenticator, center on"
"match:class proton-authenticator, size 500 400"
"match:class protonvpn-app, float on"
"match:class protonvpn-app, center on"
"match:class protonvpn-app, size 500 400"
"match:title run-bg, float on"
"match:title run-bg, center on"
"match:title run-bg, size 700 80"
];
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
disable_autoreload = true;
focus_on_activate = true;
};
input = {
kb_layout = keyboardLayout;
kb_options = "caps:escape";
follow_mouse = 1;
sensitivity = 0.0; # or whatever speed you prefer
accel_profile = "flat";
repeat_delay = 300;
repeat_rate = 50;
numlock_by_default = true;
touchpad = {
natural_scroll = true;
clickfinger_behavior = true;
};
};
ecosystem = {
no_update_news = true;
};
};
};
}