nixos/home/hyprland/default.nix
Evie Litherland-Smith 1600288da0 Add network and bluetooth back to waybar, disable associated applets
Split current clock waybar widget into date only and time only,
use more rainbow colours across the system modules
2024-02-13 08:20:02 +00:00

318 lines
11 KiB
Nix

{
config,
lib,
pkgs,
...
}: {
stylix.targets.xresources.enable = true;
imports = [
../default.nix
../email/default.nix
../password-store/default.nix
../swaylock/default.nix
../waybar/default.nix
../rofi/default.nix
../swaync/default.nix
../avizo/default.nix
../alacritty/default.nix
../emacs/default.nix
../nyxt/default.nix
../obs/default.nix
];
home.packages = with pkgs; [
candy-icons
(writeShellScriptBin "protonmail-setup-bridge" ''
pkill -9 -f protonmail-bridge
${protonmail-bridge}/bin/protonmail-bridge -c
${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl dispatch exec "${protonmail-bridge}/bin/protonmail-bridge -n"
'')
];
programs = {
rofi = with pkgs; {
package = rofi-wayland;
terminal = "${alacritty}/bin/alacritty";
pass.package = rofi-pass-wayland;
};
zellij.settings.copy_command = "wl-copy";
};
services = {
gpg-agent.pinentryFlavor = "gnome3";
avizo.enable = true;
syncthing.enable = true;
udiskie = {
enable = true;
notify = true;
automount = true;
tray = "never";
};
};
gtk = {
enable = true;
cursorTheme = {
package = pkgs.volantes-cursors;
name = "volantes_cursors";
size = 24;
};
iconTheme = {
package = pkgs.sweet-folders;
name = "Sweet-Rainbow";
};
theme = {
package = pkgs.sweet;
name = "Sweet-Dark";
};
};
xdg.configFile."hypr/hyprpaper.conf".text = ''
preload = ${config.stylix.image}
wallpaper = ,${config.stylix.image}
'';
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = true;
settings = {
monitor = [",preferred,auto,auto"];
env = with config; [
"XDG_CURRENT_DESKTOP=Hyprland"
"XDG_SESSION_TYPE=wayland"
"XDG_SESSION_DESKTOP=Hyprland"
"GDK_BACKEND=wayland,x11"
"GTK_THEME,${gtk.theme.name}"
"XCURSOR_THEME,${gtk.cursorTheme.name}"
"XCURSOR_SIZE,${toString gtk.cursorTheme.size}"
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_QPA_PLATFORM,wayland"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"MOZ_ENABLE_WAYLAND,1"
"GRIM_DEFAULT_DIR=${xdg.userDirs.pictures}/Grim"
];
exec-once = with config; [
"${wayland.windowManager.hyprland.finalPackage}/bin/hyprctl setcursor ${gtk.theme.name} ${toString gtk.cursorTheme.size}"
"${pkgs.swaynotificationcenter}/bin/swaync"
"${pkgs.hyprpaper}/bin/hyprpaper"
"${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"
"${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
];
gestures.workspace_swipe = true;
input = {
kb_layout = "gb";
kb_options = "ctrl:nocaps";
follow_mouse = 1;
touchpad.natural_scroll = "yes";
};
dwindle = {
force_split = 2;
preserve_split = false;
smart_split = false;
smart_resizing = false;
special_scale_factor = 0.95;
no_gaps_when_only = 0;
use_active_for_splits = true;
default_split_ratio = 1.0;
};
master = {
allow_small_split = true;
special_scale_factor = 0.95;
mfact = 0.5;
new_is_master = false;
new_on_top = false;
no_gaps_when_only = 0;
orientation = "left";
inherit_fullscreen = false;
smart_resizing = false;
drop_at_cursor = true;
};
general = with config.lib.stylix.colors; {
"col.active_border" = "rgb(${magenta})";
"col.inactive_border" = "rgb(${base03})";
gaps_in = 5;
gaps_out = 10;
border_size = 1;
cursor_inactive_timeout = 5;
layout = "dwindle";
};
decoration = with config.lib.stylix.colors; {
rounding = 5;
"col.shadow" = "rgba(0d${base00})";
drop_shadow = "yes";
shadow_ignore_window = true;
shadow_range = 4;
shadow_render_power = 3;
blur = {
enabled = true;
size = 5;
passes = 3;
new_optimizations = true;
brightness = 1.0;
noise = 2.0e-2;
};
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
misc = {
disable_splash_rendering = true;
disable_autoreload = true;
mouse_move_enables_dpms = true;
key_press_enables_dpms = true;
};
xwayland.force_zero_scaling = true;
layerrule = let
blur = x: "blur, ^(${x})$";
ignorealpha = x: "ignorealpha 0.3, ^(${x})$";
layers = [
"waybar"
"system-menu"
"rofi"
"gtk-layer-shell"
"notifications"
"swaync-.*"
"avizo"
];
in
(lib.lists.forEach layers blur)
++ (lib.lists.forEach layers ignorealpha);
windowrule = [
# Float + move system windows
"float,org.kde.polkit-kde-authentication-agent-1|Pinentry"
"center,org.kde.polkit-kde-authentication-agent-1|Pinentry"
"pin,org.kde.polkit-kde-authentication-agent-1|Pinentry"
"dimaround,org.kde.polkit-kde-authentication-agent-1|Pinentry"
"stayfocused,org.kde.polkit-kde-authentication-agent-1|Pinentry"
"float,pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
"size 800 600,pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
"move onscreen 100%-820 60,pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
# LibreOffice
"nomaximizerequest, (libreoffice|soffice)(.*)"
"nofullscreenrequest, (libreoffice|soffice)(.*)"
# Remmina / NoMachine
"nofullscreenrequest,org.remmina.Remmina|Nxplayer.bin"
"nomaximizerequest,org.remmina.Remmina|Nxplayer.bin"
];
windowrulev2 = [
# Firefox PIP
"float,title:Picture-in-Picture|Library,class:firefox"
"size 750 400,title:Picture-in-Picture,class:firefox"
"size 800 800,title:Library,class:firefox"
"move onscreen 100%-775 100%-425,title:Picture-in-Picture,class:firefox"
"center,title:Library,class:firefox"
"pin,title:Picture-in-Picture,class:firefox"
# LibreOffice
"float,title:Open,class:(libreoffice|soffice)(.*)"
# Steam
"float,title:Friends List,class:steam"
"float,title:Steam Settings,class:steam"
# Remmina / NoMachine
"float,title:Remmina Remote Desktop Client|Remmina Preferences,class:org.remmina.Remmina"
"size 800 600,title:Remmina Remote Desktop Client|Remmina Preferences,class:org.remmina.Remmina"
"move onscreen 100%-820 60,title:Remmina Remote Desktop Client|Remmina Preferences,class:org.remmina.Remmina"
];
bind = let
workspace = w: [
"SUPER, ${toString w}, moveworkspacetomonitor, ${toString w} current"
"SUPER, ${toString w}, workspace, ${toString w}"
"SUPER SHIFT, ${toString w}, movetoworkspace, ${toString w}"
];
in
with config.programs;
with lib.lists;
flatten (forEach (range 1 9) workspace)
++ [
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
"SUPER, F1, exec, ${swaylock.package}/bin/swaylock --screenshots --clock --indicator --grace-no-mouse"
"SUPER, Q, killactive,"
"SUPER SHIFT, Q, exec, pkill rofi || ${rofi.finalPackage}/bin/rofi -show powermenu -modi powermenu:${pkgs.rofi-power-menu}/bin/rofi-power-menu"
"SUPER, V, togglefloating"
"SUPER, M, fullscreen, 1"
"SUPER SHIFT, M, fullscreen, 0"
"SUPER, tab, exec, pkill rofi || ${rofi.finalPackage}/bin/rofi -show window"
"SUPER, P, exec, pkill rofi || ${rofi.pass.package}/bin/rofi-pass"
"SUPER SHIFT, P, exec, pkill rofi || ${rofi.pass.package}/bin/rofi-pass --last-used"
"SUPER ALT, P, exec, pkill rofi || ${rofi.pass.package}/bin/rofi-pass --insert"
"SUPER, Z, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
"SUPER SHIFT, Z, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw"
# Common program shortcuts
"SUPER, Space, exec, pkill rofi || ${rofi.finalPackage}/bin/rofi -show combi"
"SUPER, Return, exec, ${alacritty.package}/bin/alacritty"
"SUPER SHIFT, Return, exec, ${emacs.finalPackage}/bin/emacsclient -c"
"SUPER, S, exec, ${alacritty.package}/bin/alacritty -e btm --group --battery"
"SUPER, W, exec, ${pkgs.nyxt}/bin/nyxt --no-socket"
# Misc useful binds
'',Print,exec,${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)"''
",XF86Calculator,exec,pkill rofi || ${rofi.finalPackage}/bin/rofi -show calc"
# Movement binds
"SUPER, H, movefocus, l"
"SUPER, L, movefocus, r"
"SUPER, K, movefocus, u"
"SUPER, J, movefocus, d"
"SUPER SHIFT, H, movewindow, l"
"SUPER SHIFT, L, movewindow, r"
"SUPER SHIFT, K, movewindow, u"
"SUPER SHIFT, J, movewindow, d"
# Special workspaces
"SUPER, comma, workspace, r-1"
"SUPER SHIFT, comma, movetoworkspace, r-1"
"SUPER, period, workspace, r+1"
"SUPER SHIFT, period, movetoworkspace, r+1"
"SUPER, N, workspace, empty"
"SUPER SHIFT, N, movetoworkspace, empty"
"SUPER, minus, togglespecialworkspace"
"SUPER SHIFT, minus, movetoworkspace, special"
"SUPER, bracketright, focusmonitor, +1"
"SUPER SHIFT, bracketright, movecurrentworkspacetomonitor, +1"
"SUPER, bracketleft, focusmonitor, -1"
"SUPER SHIFT, bracketleft, movecurrentworkspacetomonitor, -1"
"SUPER, O, focusurgentorlast"
];
bindl = with config.services; [
# Sound
",XF86AudioMute,exec,${avizo.package}/bin/volumectl %"
",XF86AudioMicMute,exec,${avizo.package}/bin/volumectl -m %"
# Playback
",XF86AudioPlay,exec,${pkgs.playerctl}/bin/playerctl play-pause"
",XF86AudioStop,exec,${pkgs.playerctl}/bin/playerctl play-pause"
",XF86AudioPrev,exec,${pkgs.playerctl}/bin/playerctl previous"
",XF86AudioNext,exec,${pkgs.playerctl}/bin/playerctl next"
];
bindle = with config.services; [
# Sound
",XF86AudioRaiseVolume,exec,${avizo.package}/bin/volumectl -u + 5"
",XF86AudioLowerVolume,exec,${avizo.package}/bin/volumectl -u - 5"
# Brightness
",XF86MonBrightnessUp,exec,${avizo.package}/bin/lightctl + 5"
",XF86MonBrightnessDown,exec,${avizo.package}/bin/lightctl - 5"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"SUPER, mouse:272, movewindow"
"SUPER, mouse:273, resizewindow"
];
};
extraConfig = ''
exec-once = systemctl --user import-environment WAYLAND_DISPLAY QT_QPA_PLATFORMTHEME
exec-once = systemctl --user restart "xdg-desktop-portal*"
exec-once = ${pkgs.git}/bin/git -C ${config.home.homeDirectory}/.emacs pull --ff-only
'';
};
}