NixOS/home/modules/hyprland/hyprland.nix

239 lines
7.8 KiB
Nix

{ lib, inputs, pkgs, config, ... }:
let
cfg = config.profile.hyprland;
select-window = rec {
filename = "select-window.sh";
script = pkgs.writeScriptBin filename (builtins.readFile (./scripts/search-window.sh));
path = "${script}/bin/${filename}";
};
init-wallpaper = rec {
filename = "init-wallpaper.sh";
script = pkgs.writeScriptBin filename (builtins.readFile (./scripts/init-wallpaper.sh));
path = "${script}/bin/${filename}";
};
gnome-keyring = rec {
filename = "gnome-keyring.sh";
script = pkgs.writeScriptBin filename (builtins.readFile (./scripts/gnome-keyring.sh));
path = "${script}/bin/${filename}";
};
in
{
config = lib.mkIf cfg.enable {
home.packages = [
inputs.hyprland-contrib.packages.${pkgs.system}.grimblast
];
sops.secrets."gnome-keyring/${config.home.username}" = { };
wayland.windowManager.hyprland = {
enable = true;
systemd.variables = [ "all" ];
settings = {
# window decors
general = {
gaps_in = 10;
gaps_out = 14;
border_size = 3;
"col.active_border" = "rgba(ffffffff)";
layout = "dwindle";
};
dwindle = {
pseudotile = true;
preserve_split = true;
force_split = 2;
};
master = {
new_is_master = true;
};
gestures = {
workspace_swipe = true;
workspace_swipe_create_new = false;
};
workspace = cfg.settings.workspaces;
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 6;
passes = 2;
new_optimizations = "on";
ignore_opacity = true;
xray = true;
# blurls = waybar
};
active_opacity = 1.0;
inactive_opacity = 0.9;
fullscreen_opacity = 1.0;
drop_shadow = true;
shadow_range = 30;
shadow_render_power = 3;
"col.shadow" = "0x66000000";
};
monitor = cfg.settings.monitors;
"$mod" = "SUPER";
# https://wiki.hyprland.org/Configuring/Binds
bind = [
# Programs
"$mod, RETURN, exec, kitty"
"$mod, E, exec, thunar"
"$mod, B, exec, microsoft-edge"
"$mod, D, exec, rofi -show drun -replace -i"
"$mod, BackSpace, exec, wlogout"
"$mod, S, exec, pypr toggle term"
''$mod, F, exec, ${select-window.path}''
"$mod, W, exec, pypr wall next"
# Workspaces
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
"$mod SHIFT, 1, movetoworkspace, 1"
"$mod SHIFT, 2, movetoworkspace, 2"
"$mod SHIFT, 3, movetoworkspace, 3"
"$mod SHIFT, 4, movetoworkspace, 4"
"$mod SHIFT, 5, movetoworkspace, 5"
"$mod SHIFT, 6, movetoworkspace, 6"
"$mod SHIFT, 7, movetoworkspace, 7"
"$mod SHIFT, 8, movetoworkspace, 8"
"$mod SHIFT, 9, movetoworkspace, 9"
"$mod SHIFT, 0, movetoworkspace, 10"
"$mod, mouse_down, workspace, e+1"
"$mod, mouse_up, workspace, e-1"
"$mod CTRL, down, workspace, empty"
# Window Management
"$mod, Q, killactive"
"$mod, Space, fullscreen"
"$mod, H, movefocus, l"
"$mod, J, movefocus, d"
"$mod, k, movefocus, u"
"$mod, l, movefocus, r"
"$mod SHIFT, H, movewindow, l"
"$mod SHIFT, J, movewindow, d"
"$mod SHIFT, k, movewindow, u"
"$mod SHIFT, l, movewindow, r"
"$mod, PRINT, exec, grimblast --notify copysave output"
", PRINT, exec, grimblast --notify copysave area"
"SHIFT, PRINT, exec, grimblast --notify save area - | swappy -f -"
];
binde = [
"$mod CTRL, H, resizeactive, -100 0"
"$mod CTRL, J, resizeactive, 0 100"
"$mod CTRL, K, resizeactive, 0 -100"
"$mod CTRL, L, resizeactive, 100 0"
];
# m -> mouse
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
# e -> repeat, will repeat when held.
# l -> even when locked
bindel = [
# Media
", XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise --max-volume 150"
", XF86AudioLowerVolume, exec, swayosd-client --output-volume lower --max-volume 150"
# Light
", XF86MonBrightnessUp, exec, swayosd-client --brightness +10"
", XF86MonBrightnessDown, exec, swayosd-client --brightness -10"
];
bindl = [
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle"
", XF86Calculator, exec, qalculate-gtk"
];
input = {
follow_mouse = 1;
touchpad = {
natural_scroll = false;
};
mouse_refocus = false;
sensitivity = 0;
kb_options = config.profile.xkb.options;
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
focus_on_activate = true;
enable_swallow = true;
swallow_regex = "^(Alacritty|kitty|footclient)$";
};
animations = {
enabled = true;
bezier = [
"wind, 0.05, 0.9, 0.1, 1.05"
"winIn, 0.1, 1.1, 0.1, 1.1"
"winOut, 0.3, -0.3, 0, 1"
"liner, 1, 1, 1, 1"
];
animation = [
"windows, 1, 6, wind, slide"
"windowsIn, 1, 6, winIn, slide"
"windowsOut, 1, 5, winOut, slide"
"windowsMove, 1, 5, wind, slide"
"border, 1, 1, liner"
"borderangle, 1, 30, liner, loop"
"fade, 1, 10, default"
"workspaces, 1, 5, wind"
];
};
windowrulev2 = [
config.profile.discord.window_rule
config.profile.slack.window_rule
config.profile.whatsapp.window_rule
];
};
extraConfig = ''
exec-once=dbus-update-activation-enviroment --all
exec-once=${gnome-keyring.path} ${config.sops.secrets."gnome-keyring/${config.home.username}".path}
exec-once=${init-wallpaper.path} ${./wallpaper.jpeg}
exec-once=wallust run ${config.home.homeDirectory}/.cache/wallpaper/current
exec-once=swayosd-libinput-backend
exec-once=swayosd-server
exec-once=swww-daemon
exec-once=bash -c "sleep 10; hypridle"
exec-once=waybar
exec-once=nm-applet
exec-once=pasystray
exec-once=pypr
exec-once=dunst
exec-once=fcitx5 -d
source=${config.home.homeDirectory}/.cache/wallust/hyprland.conf
exec-once=sleep 0.2 && swww img ${config.home.homeDirectory}/.cache/wallpaper/current
exec-once=bash -c "sleep 10; until ping -c 1 web.whatsapp.com; do sleep 1; done; whatsapp-for-linux"
exec-once=bash -c "sleep 10; until ping -c 1 discord.com; do sleep 1; done; discord"
exec-once=bash -c "sleep 10; until ping -c 1 google.com; do sleep 1; done; slack"
exec-once=bash -c "sleep 10; until ping -c 1 nextcloud.tigor.web.id; do sleep 1; done; nextcloud --background"
'';
};
};
}