Files
nixos-config/hosts/m3-ares/home.nix
T
m3tm3re 9bd6d38a95 feat(hyprland): update to Lua config syntax after flake update
Flake inputs updated (home-manager → 7519f615, nixpkgs → d2339023, etc.),
now configType = "lua" is supported.

Changes to Hyprland settings:
- monitor: replaced legacy comma-string format with Lua table syntax
  using _args + {output, mode, position, scale} for hl.monitor({...})
  calls. Home Manager now generates correct hl.monitor() calls instead
  of passing raw comma strings.
- workspace: kept simple "id, monitor:X, default:true" string format
  for basic monitor bindings (compatible with hl.workspace(...)).
- workspace_rule: added separate workspace_rule entries using
  _args + {workspace, monitor, no_border, no_rounding} for special
  cases (e.g. WS 5 border:false,rounding:false → no_border=true,
  no_rounding=true as per current Hyprland Lua docs).
- window_rule: updated workspace values from int to string ("1",
  "2", etc.), updated fullscreen from "on" to boolean true, kept
  opacity as string "1.0" per Hyprland docs, kept idle_inhibit as
  string "focus".
- on hook: kept as-is (hyprland.start + tuxedo-backlight).

Validate: nix-instantiate --parse passes for both host files.
2026-05-18 19:00:26 +02:00

171 lines
5.2 KiB
Nix

# hosts/m3-ares/home.nix — Host-specific home-manager overrides.
# TUXEDO laptop: eDP-1 + HDMI-A-1 external monitor.
# Everything else (shell, editors, gaming, media, theme, etc.) comes from
# m3ta-home via the profile mapping in hosts/common/users/m3tam3re.nix.
{
config,
lib,
...
}:
with lib; {
config = mkMerge [
# ── XDG / MIME defaults ──
{
xdg = {
enable = true;
configFile."mimeapps.list".force = true;
mimeApps = {
enable = true;
associations.added = {
"application/zip" = ["org.gnome.FileRoller.desktop"];
"application/csv" = ["calc.desktop"];
"application/pdf" = ["vivaldi-stable.desktop"];
"x-scheme-handler/http" = ["vivaldi-stable.desktop"];
"x-scheme-handler/https" = ["vivaldi-stable.desktop"];
};
defaultApplications = {
"application/zip" = ["org.gnome.FileRoller.desktop"];
"application/csv" = ["calc.desktop"];
"application/pdf" = ["vivaldi-stable.desktop"];
"application/md" = ["dev.zed.Zed.desktop"];
"application/text" = ["dev.zed.Zed.desktop"];
"x-scheme-handler/http" = ["vivaldi-stable.desktop"];
"x-scheme-handler/https" = ["vivaldi-stable.desktop"];
};
};
};
}
# ── Hyprland monitor layout ──
(mkIf config.wayland.windowManager.hyprland.enable {
wayland.windowManager.hyprland = {
enable = true;
configType = "lua";
settings = {
# Startup commands (using on hook for Lua config)
on = {
_args = [
"hyprland.start"
(lib.generators.mkLuaInline ''
function()
hl.exec_cmd("tuxedo-backlight")
end
'')
];
};
# Monitor configuration — use Lua table syntax hl.monitor({...})
# Each list entry generates one hl.monitor(...) call.
monitor = [
{
_args = [
{
output = "eDP-1";
mode = "preferred";
position = "0x0";
scale = 1.25;
}
];
}
{
_args = [
{
output = "HDMI-A-1";
mode = "1920x1080@120";
position = "2560x0";
scale = 1;
}
];
}
];
# Simple workspace→monitor bindings (legacy string format OK for hl.workspace)
workspace = [
"1, monitor:eDP-1, default:true"
"2, monitor:eDP-1"
"3, monitor:eDP-1"
"4, monitor:HDMI-A-1"
"6, monitor:HDMI-A-1"
];
# Workspace rules with special properties → use workspace_rule + Lua table
workspace_rule = [
{
_args = [
{
workspace = "5";
monitor = "HDMI-A-1";
no_border = true;
no_rounding = true;
}
];
}
];
# Window rules — match + effect fields as Lua table
# Per Hyprland Lua docs: match fields (class, title, etc.) and
# effect fields (workspace, fullscreen, opacity, etc.) together
# in one table passed to hl.window_rule({...}).
window_rule = [
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "dev.zed.Zed" })'')
{workspace = "1";}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "Msty" })'')
{workspace = "1";}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "com\\.obsproject\\.Studio" })'')
{workspace = "2";}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "brave-browser" })'')
{
workspace = "4";
opacity = "1.0";
}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "vivaldi-stable" })'')
{
workspace = "4";
opacity = "1.0";
}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "steam_app_\\d+" })'')
{fullscreen = true;}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "steam_app_\\d+" })'')
{workspace = "5";}
];
}
{
_args = [
(lib.generators.mkLuaInline ''hl.dsp.window.match({ class = "steam_app_\\d+" })'')
{idle_inhibit = "focus";}
];
}
];
};
};
})
];
}