nix-flakes/hosts/machine/ena/home/config/hyprland.nix
2026-09-12 03:47:58 +09:00

252 lines
9.2 KiB
Nix

{ inputs, lib, pkgs, ... }:
let
assets = "${inputs.self}/assets";
upstream = "${inputs.arch-hyprland}/.config";
wallpaper = "${assets}/wallpaper/wallpaper5.png";
wallpaperPicker = pkgs.writeShellScript "ena-wallpaper-picker" ''
set -eu
wallpaper="$(${lib.getExe pkgs.rofi} -dmenu -p Wallpaper < <(find "$HOME/Pictures/wallpapers" -maxdepth 1 -type f))"
[ -n "$wallpaper" ] || exit 0
${pkgs.awww}/bin/awww img "$wallpaper" --transition-type any
ln -sfn "$wallpaper" "$HOME/.config/hypr/current_wallpaper"
'';
hyprlandConfig = ''
source = colors.conf
monitor = , preferred, auto, 1
$terminal = ${pkgs.ghostty}/bin/ghostty
$fileManager = ${pkgs.nautilus}/bin/nautilus
$menu = ${pkgs.vicinae}/bin/vicinae toggle
exec-once = ${pkgs.networkmanagerapplet}/bin/nm-applet --indicator
exec-once = ${pkgs.waybar}/bin/waybar
exec-once = ${pkgs.awww}/bin/awww-daemon
exec-once = ${pkgs.blueman}/bin/blueman-applet
exec-once = ${pkgs.swaynotificationcenter}/bin/swaync
exec-once = ${pkgs.hyprpolkitagent}/bin/hyprpolkitagent
exec-once = ln -sfn ${wallpaper} ~/.config/hypr/current_wallpaper
exec-once = sleep 1 && ${pkgs.awww}/bin/awww img ${wallpaper} --transition-type any
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = XCURSOR_THEME,pjsk-cursor-n25-ena-ani
source = ~/.config/hypr/configs/tags.conf
source = ~/.config/hypr/configs/looknfeel.conf
source = ~/.config/hypr/configs/UserAnimations.conf
source = ~/.config/hypr/configs/windowrules.conf
source = ~/.config/hypr/configs/keybinds.conf
dwindle {
pseudotile = true
preserve_split = true
}
master {
new_status = master
}
misc {
force_default_wallpaper = 0
disable_hyprland_logo = true
vfr = true
}
render {
new_render_scheduling = true
}
source = ~/.config/hypr/configs/input.conf
source = hyprland-gui.conf
'';
keybinds = ''
$mainMod = SUPER
bind = $mainMod, Return, exec, $terminal
bind = $mainMod SHIFT, Return, exec, [float; size 800 550] $terminal
bind = $mainMod, Q, killactive
bind = CTRL ALT, Delete, exec, hyprctl dispatch exit 0
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, Space, togglefloating
bind = $mainMod, D, exec, $menu
bind = $mainMod, P, pseudo
bind = $mainMod, J, togglesplit
bind = $mainMod, L, exec, ${pkgs.hyprlock}/bin/hyprlock
bind = $mainMod SHIFT, F, fullscreen
bind = $mainMod SHIFT, S, exec, mkdir -p "$HOME/Pictures/Screenshots" && ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d-%H%M%S).png"
bind = $mainMod, W, exec, ${wallpaperPicker}
bind = $mainMod, H, exec, pkill -SIGUSR1 waybar
bind = $mainMod SHIFT, E, exec, $terminal -e ${pkgs.yazi}/bin/yazi
bind = $mainMod CTRL, G, exec, ${inputs.hyprmod.packages.${pkgs.system}.default}/bin/hyprmod
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
bind = $mainMod CTRL, left, movewindow, l
bind = $mainMod CTRL, right, movewindow, r
bind = $mainMod CTRL, up, movewindow, u
bind = $mainMod CTRL, down, movewindow, d
binde = $mainMod SHIFT, left, resizeactive, -50 0
binde = $mainMod SHIFT, right, resizeactive, 50 0
binde = $mainMod SHIFT, up, resizeactive, 0 -50
binde = $mainMod SHIFT, down, resizeactive, 0 50
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
bindel = , XF86AudioRaiseVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = , XF86AudioMute, exec, ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = , XF86AudioMicMute, exec, ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = , XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 10%+
bindel = , XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 10%-
bindl = , XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next
bindl = , XF86AudioPause, exec, ${pkgs.playerctl}/bin/playerctl play-pause
bindl = , XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause
bindl = , XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous
'';
# ponytail: use the upstream visual composition; only remove its personal include.
fixWaybarPaths = text:
builtins.replaceStrings
[
"$HOME/.config/hypr/scripts/volume.sh --inc"
"$HOME/.config/hypr/scripts/volume.sh --dec"
"$HOME/.config/hypr/scripts/volume.sh --toggle-mic"
"$HOME/.config/hypr/scripts/volume.sh --toggle"
"$HOME/.config/hypr/scripts/volume.sh --mic-inc"
"$HOME/.config/hypr/scripts/volume.sh --mic-dec"
"$HOME/.config/hypr/scripts/Wlogout.sh"
]
[
"${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
"${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
"${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%+"
"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%-"
"${pkgs.wlogout}/bin/wlogout"
]
text;
waybarConfig = builtins.replaceStrings
[ " \"$HOME/.config/waybar/UserModules\",\n" ]
[ "" ]
(builtins.readFile "${upstream}/waybar/configs/bintang default");
waybarModules = fixWaybarPaths (builtins.readFile "${upstream}/waybar/Modules");
waybarCustomModules = fixWaybarPaths (builtins.readFile "${upstream}/waybar/ModulesCustom");
in
{
home.packages = with pkgs; [
awww
blueman
brightnessctl
grim
hyprpolkitagent
libnotify
nautilus
networkmanagerapplet
pavucontrol
playerctl
rofi
slurp
swaynotificationcenter
waybar
wireplumber
wlogout
yazi
];
home.file."Pictures/wallpapers" = {
source = "${assets}/wallpaper";
recursive = true;
};
xdg.configFile = {
"hypr/hyprland.conf".text = hyprlandConfig;
"hypr/colors.conf".source = "${upstream}/hypr/colors.conf";
"hypr/configs/tags.conf".source = "${upstream}/hypr/configs/tags.conf";
"hypr/configs/looknfeel.conf".source = "${upstream}/hypr/configs/looknfeel.conf";
"hypr/configs/UserAnimations.conf".source = "${upstream}/hypr/configs/UserAnimations.conf";
"hypr/configs/windowrules.conf".source = "${upstream}/hypr/configs/windowrules.conf";
"hypr/configs/input.conf".source = "${upstream}/hypr/configs/input.conf";
"hypr/configs/keybinds.conf".text = keybinds;
"hypr/hypridle.conf".source = "${upstream}/hypr/hypridle.conf";
"hypr/hyprlock.conf".source = "${upstream}/hypr/hyprlock.conf";
"waybar/config".text = waybarConfig;
"waybar/Modules".text = waybarModules;
"waybar/ModulesCustom".text = waybarCustomModules;
"waybar/ModulesGroups".source = "${upstream}/waybar/ModulesGroups";
"waybar/ModulesWorkspaces".source = "${upstream}/waybar/ModulesWorkspaces";
"waybar/colors.css".source = "${upstream}/waybar/colors.css";
"waybar/style.css".source = "${upstream}/waybar/style/bintang default.css";
"wlogout/layout".text = ''
{
"label" : "lock",
"action" : "${pkgs.hyprlock}/bin/hyprlock",
"text" : "Lock",
"keybind" : "l"
}
{
"label" : "reboot",
"action" : "systemctl reboot",
"text" : "Reboot",
"keybind" : "r"
}
{
"label" : "shutdown",
"action" : "systemctl poweroff",
"text" : "Shutdown",
"keybind" : "s"
}
{
"label" : "logout",
"action" : "loginctl kill-session $XDG_SESSION_ID",
"text" : "Logout",
"keybind" : "e"
}
{
"label" : "suspend",
"action" : "systemctl suspend",
"text" : "Suspend",
"keybind" : "u"
}
'';
"wlogout/style.css".source = "${upstream}/wlogout/style.css";
"wlogout/icons" = {
source = "${upstream}/wlogout/icons";
recursive = true;
};
};
}