nix-conf/system/dev/dn-pre7780/home/default.nix
2026-03-06 17:06:53 +08:00

194 lines
4.7 KiB
Nix
Executable file

{
config,
lib,
helper,
...
}:
let
inherit (helper) getMonitors;
inherit (builtins) elemAt length;
inherit (config.networking) hostName;
inherit (config.systemConf) username;
inherit (lib) optionalString mkForce;
wmName = if config.programs.hyprland.enable then "hyprland" else "niri";
in
{
home-manager.users."${username}" =
{
osConfig,
config,
pkgs,
...
}:
let
monitors = getMonitors hostName config;
mainMonitor = (elemAt monitors 0).criteria;
secondMonitor =
let
index = if (length monitors) > 1 then 1 else 0;
in
(elemAt monitors index).criteria;
mainMonitorSwayFormat = "desc:ASUSTek COMPUTER INC - ASUS VG32VQ1B";
in
{
home.packages = with pkgs; [
mattermost-desktop
];
# NOTE: Disable idle
services.hypridle.enable = mkForce false;
# hyprlock shows on main monitor
programs.hyprlock.monitors = [
mainMonitorSwayFormat
];
services.kanshi.settings = [
{
profile.name = "${hostName}";
profile.outputs = [
{
criteria = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271";
mode = "2560x1440@164.554001Hz";
position = "0,0";
scale = 1.0;
}
{
criteria = "Acer Technologies XV272U V3 1322131231233";
mode = "2560x1440@179.876999Hz";
position = "-1440,-600";
transform = "90";
}
];
}
{
profile.name = "AcerOnly";
profile.outputs = [
{
criteria = "Acer Technologies XV272U V3 1322131231233";
mode = "2560x1440@179.876999Hz";
position = "0,0";
transform = "normal";
scale = 1.0;
}
];
}
];
# ==== Shells ==== #
# Caelestia
programs.caelestia.settings = {
osd = {
enableBrightness = false;
enableMicrophone = true;
};
};
# Noctalia
programs.noctalia-shell.filteredIds = [
"Brightness"
"Battery"
];
# ==== WM ==== #
programs.niri.settings = {
binds = with config.lib.niri.actions; {
"Mod+G".action = focus-workspace "game";
"Mod+Shift+G".action.move-column-to-workspace = [ "game" ];
# Overrides
"Mod+B".action = mkForce (focus-workspace "browser");
"Mod+Shift+B".action.move-column-to-workspace = [ "browser" ];
};
hotkey-overlay = {
hide-not-bound = true;
skip-at-startup = true;
};
workspaces."browser" = {
open-on-output = secondMonitor;
};
# Other settings are located in `public/dn/common.nix`
workspaces."game" = {
open-on-output = mainMonitor;
};
window-rules = [
# Second Monitor App
{
matches = [
{
app-id = "^discord$";
}
{
app-id = "^thunderbird$";
}
];
open-on-output = secondMonitor;
}
];
};
imports = [
../../../../home/presets/basic.nix
../../../../home/user/zellij.nix
./expr
./wm
# waybar
(import ../../../../home/user/waybar.nix {
matchByDesc = true;
settings = [
# monitor 1
{
output = "${(builtins.elemAt monitors 0).criteria}";
height = 48;
modules-left = [
"custom/os"
"${wmName}/workspaces"
"clock"
"custom/cava"
"mpris"
];
modules-right = [
"wlr/taskbar"
(optionalString osConfig.programs.gamemode.enable "custom/gamemode")
"custom/bitwarden"
"custom/airplay"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"cpu"
"memory"
"pulseaudio"
"custom/swaync"
];
}
# monitor 2
{
output = "${(builtins.elemAt monitors 1).criteria}";
height = 54;
modules-left = [
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"cpu"
"memory"
"pulseaudio"
];
}
];
})
];
};
}