nixos/home/hyprland/default.nix
Evie Litherland-Smith a4c9090d84 Add anyrun plugins, update flake inputs
Update hyprland to latest tagged release

Move hyprland config inside nix expression so variable substitution can
be used
Use kanshi to completely control monitor config
2023-08-08 12:21:23 +01:00

361 lines
12 KiB
Nix

{ pkgs, config, hyprland, anyrun, wallpapers, ... }:
let
configure-gtk = pkgs.writeTextFile {
name = "configure-gtk";
destination = "/bin/configure-gtk";
executable = true;
text = let
schema = pkgs.gsettings-desktop-schemas;
datadir = "${schema}/share/gsettings-schemas/${schema.name}";
gtk-theme = config.gtk.theme.name;
icon-theme = config.gtk.iconTheme.name;
cursor-theme = config.gtk.cursorTheme.name;
in ''
export XDG_DATA_DIRS=${datadir}:$XDG_DATA_DIRS
gnome_schema=org.gnome.desktop.interface
gsettings set $gnome_schema gtk-theme '${gtk-theme}'
gsettings set $gnome_schema icon-theme '${icon-theme}'
gsettings set $gnome_schema cursor-theme '${cursor-theme}'
'';
};
in {
imports = [
hyprland.homeManagerModules.default
./waybar
./rofi
./anyrun
./swaylock.nix
./gtk.nix
./mako.nix
];
home.packages = with pkgs; [ libsForQt5.polkit-kde-agent configure-gtk ];
programs = {
firefox.package = pkgs.firefox-wayland;
rofi.package = pkgs.rofi-wayland;
};
services.kanshi = {
enable = true;
systemdTarget = "hyprland-session.target";
};
wayland.windowManager.hyprland = {
enable = true;
package = null; # Use package from nixpkgs
xwayland = {
enable = true;
hidpi = true;
};
extraConfig = ''
source = ./macchiato.conf
monitor=,preferred,auto,auto
env = XDG_CURRENT_DESKTOP=Hyprland
env = XDG_SESSION_TYPE=wayland
env = XDG_SESSION_DESKTOP=Hyprland
env = GDK_BACKEND=wayland,x11
env = GTK_THEME,Sweet-Dark
env = XCURSOR_THEME,Catppuccin-Macchiato-Dark-Cursors
env = XCURSOR_SIZE,24
env = QT_AUTO_SCREEN_SCALE_FACTOR=1
env = QT_QPA_PLATFORM=wayland;xcb
env = QT_WAYLAND_DISABLE_WINDOWDECORATION=1
env = MOZ_ENABLE_WAYLAND=1
input {
kb_layout = gb
follow_mouse = 1
touchpad {
natural_scroll = yes
}
}
general {
gaps_in = 5
gaps_out = 10
border_size = 3
col.active_border = $mauve
col.group_border_active = $mauve
col.inactive_border = $surface2
col.group_border = $surface2
cursor_inactive_timeout = 5
layout = dwindle
}
dwindle {
force_split = 2
preserve_split = true
}
decoration {
rounding = 10
drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
blur {
enabled = true
size = 5
passes = 3
ignore_opacity = false
new_optimizations = on
xray = false
}
}
animations {
enabled = yes
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
XWayland {
force_zero_scaling = true
}
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
bind = SUPER, Return, exec, ${pkgs.alacritty}/bin/alacritty
bind = SUPER, F1, exec, ${pkgs.swaylock}/bin/swaylock
bind = SUPER, X, exec, emacsclient -c -a 'emacs'
bind = SUPER, T, exec, ${pkgs.xfce.thunar}/bin/thunar
# anyrun/rofi binds
bind = SUPER, Space, exec, ${
anyrun.packages.${pkgs.system}.anyrun
}/bin/anyrun
bind = SUPER SHIFT, Return, exec, pkill rofi || ${pkgs.rofi}/bin/rofi -show ssh
bind = SUPER SHIFT, P, exec, pkill rofi || ${pkgs.rofi}/bin/rofi -show power-menu
bind = SUPER, B, togglefloating
bind = SUPER SHIFT, Q, killactive,
bind = SUPER, M, fullscreen, 1
bind = SUPER SHIFT, M, fullscreen, 0
# Misc useful binds
bind=,Print,exec,${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)"
# Sound
bind=,XF86AudioMute,exec,${pkgs.pamixer}/bin/pamixer -t
binde=,XF86AudioRaiseVolume,exec,${pkgs.pamixer}/bin/pamixer -i 5
binde=,XF86AudioLowerVolume,exec,${pkgs.pamixer}/bin/pamixer -d 5
# Brightness
binde=,XF86MonBrightnessUp,exec,${pkgs.brightnessctl}/bin/brightnessctl s +5%
binde=,XF86MonBrightnessDown,exec,${pkgs.brightnessctl}/bin/brightnessctl s 5%-
# Playback
binde=,XF86AudioPlay,exec,${pkgs.playerctl}/bin/playerctl play-pause
binde=,XF86AudioStop,exec,${pkgs.playerctl}/bin/playerctl play-pause
binde=,XF86AudioPrev,exec,${pkgs.playerctl}/bin/playerctl previous
binde=,XF86AudioNext,exec,${pkgs.playerctl}/bin/playerctl next
bind = SUPER, H, movefocus, l
bind = SUPER, L, movefocus, r
bind = SUPER, K, movefocus, u
bind = SUPER, J, movefocus, d
bind = SUPER SHIFT, H, movewindow, l
bind = SUPER SHIFT, L, movewindow, r
bind = SUPER SHIFT, K, movewindow, u
bind = SUPER SHIFT, J, movewindow, d
# Workspace definitions
# home
bind = SUPER, A, moveworkspacetomonitor, name:home current
bind = SUPER, A, workspace, name:home
bind = SUPER SHIFT, A, movetoworkspace, name:home
# browser
bind = SUPER, W, moveworkspacetomonitor, name:browser current
bind = SUPER, W, workspace, name:browser
bind = SUPER SHIFT, W, movetoworkspace, name:browser
windowrule = workspace name:browser,(firefox)
windowrulev2 = float,title:(File|Picture-in-Picture),class:(firefox)
windowrulev2 = pin,title:(File|Picture-in-Picture),class:(firefox)
# email
bind = SUPER, E, moveworkspacetomonitor, name:email current
bind = SUPER, E, workspace, name:email
bind = SUPER SHIFT, E, movetoworkspace, name:email
windowrule = workspace name:email,(thunderbird)
# files
bind = SUPER, F, moveworkspacetomonitor, name:files current
bind = SUPER, F, workspace, name:files
bind = SUPER SHIFT, F, movetoworkspace, name:files
windowrule = workspace name:files,(org.pwmt.zathura)
windowrule = workspace name:files,^(libreoffice).*
windowrule = workspace name:files,(Zotero)
windowrule = workspace name:files,(thunar)
windowrulev2 = workspace name:files,title:(Open),class:(soffice)
windowrulev2 = float,title:(Open),class:(soffice)
# chat
bind = SUPER, C, moveworkspacetomonitor, name:chat current
bind = SUPER, C, workspace, name:chat
bind = SUPER SHIFT, C, movetoworkspace, name:chat
windowrule = workspace name:chat,(Signal)
windowrule = workspace name:chat,(fractal)
windowrule = workspace name:chat,(discord)
windowrule = workspace name:chat,(teams-for-linux)
# call
bind = SUPER, Z, moveworkspacetomonitor, name:call current
bind = SUPER, Z, workspace, name:call
bind = SUPER SHIFT, Z, movetoworkspace, name:call
windowrulev2 = workspace name:call,title:(Zoom|zoom)
windowrulev2 = float,title:(Zoom|zoom)
windowrulev2 = center,title:(Zoom|zoom)
windowrulev2 = maxsize 800 600,title:(Zoom|zoom)
windowrulev2 = nofullscreenrequest,title:(Zoom|zoom)
windowrulev2 = nomaximizerequest,title:(Zoom|zoom)
# music
bind = SUPER, S, moveworkspacetomonitor, name:music current
bind = SUPER, S, workspace, name:music
bind = SUPER SHIFT, S, movetoworkspace, name:music
windowrulev2 = workspace name:music,title:(ncspot)
# vault
bind = SUPER, V, moveworkspacetomonitor, name:vault current
bind = SUPER, V, workspace, name:vault
bind = SUPER SHIFT, V, movetoworkspace, name:vault
windowrule = workspace name:vault,(Bitwarden)
# remote
bind = SUPER, R, moveworkspacetomonitor, name:remote current
bind = SUPER, R, workspace, name:remote
bind = SUPER SHIFT, R, movetoworkspace, name:remote
windowrule = workspace name:remote,(Nxplayer.bin)
windowrule = float,(Nxplayer.bin)
windowrule = center,(Nxplayer.bin)
windowrule = maxsize 1700 900,(Nxplayer.bin)
windowrule = nofullscreenrequest,(Nxplayer.bin)
windowrule = nomaximizerequest,(Nxplayer.bin)
# Numbered workspaces
bind = SUPER, 1, moveworkspacetomonitor, 1 current
bind = SUPER, 1, workspace, 1
bind = SUPER SHIFT, 1, movetoworkspace, 1
bind = SUPER, 2, moveworkspacetomonitor, 2 current
bind = SUPER, 2, workspace, 2
bind = SUPER SHIFT, 2, movetoworkspace, 2
bind = SUPER, 3, moveworkspacetomonitor, 3 current
bind = SUPER, 3, workspace, 3
bind = SUPER SHIFT, 3, movetoworkspace, 3
bind = SUPER, 4, moveworkspacetomonitor, 4 current
bind = SUPER, 4, workspace, 4
bind = SUPER SHIFT, 4, movetoworkspace, 4
bind = SUPER, 5, moveworkspacetomonitor, 5 current
bind = SUPER, 5, workspace, 5
bind = SUPER SHIFT, 5, movetoworkspace, 5
bind = SUPER, 6, moveworkspacetomonitor, 6 current
bind = SUPER, 6, workspace, 6
bind = SUPER SHIFT, 6, movetoworkspace, 6
bind = SUPER, 7, moveworkspacetomonitor, 7 current
bind = SUPER, 7, workspace, 7
bind = SUPER SHIFT, 7, movetoworkspace, 7
bind = SUPER, 8, moveworkspacetomonitor, 8 current
bind = SUPER, 8, workspace, 8
bind = SUPER SHIFT, 8, movetoworkspace, 8
bind = SUPER, 9, moveworkspacetomonitor, 9 current
bind = SUPER, 9, workspace, 9
bind = SUPER SHIFT, 9, movetoworkspace, 9
# Special workspaces
bind = SUPER, N, workspace, empty
bind = SUPER SHIFT, N, movetoworkspace, empty
bind = SUPER, minus, togglespecialworkspace
bind = SUPER SHIFT, minus, movetoworkspace, special
bind = SUPER, tab, workspace, previous
bind = SUPER SHIFT, tab, movetoworkspace, previous
bind = SUPER, bracketright, focusmonitor, +1
bind = SUPER SHIFT, bracketright, movecurrentworkspacetomonitor, +1
bind = SUPER, bracketleft, focusmonitor, -1
bind = SUPER SHIFT, bracketleft, movecurrentworkspacetomonitor, -1
bind = SUPER, U, focusurgentorlast
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = SUPER, mouse:272, movewindow
bindm = SUPER, mouse:273, resizewindow
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrule = float,(pavucontrol)
windowrule = size 800 600,(pavucontrol)
windowrule = move 100%-820 10%,(pavucontrol)
windowrule = float,(.blueman-manager-wrapped)
windowrule = size 800 600,(.blueman-manager-wrapped)
windowrule = move 100%-820 10%,(.blueman-manager-wrapped)
windowrule = float,(nm-connection-editor)
windowrule = size 800 600,(nm-connection-editor)
windowrule = move 100%-820 10%,(nm-connection-editor)
exec-once = ${pkgs.libsForQt5.polkit-kde-agent}/bin/polkit-kde-authentication-agent-1
exec-once = ${pkgs.waybar}/bin/waybar
exec-once = ${pkgs.swww}/bin/swww init && ${pkgs.swww}/bin/swww img ${wallpapers.outputs.default}
'';
};
xdg.configFile."hypr/macchiato.conf".text = ''
$rosewaterAlpha = f4dbd6
$flamingoAlpha = f0c6c6
$pinkAlpha = f5bde6
$mauveAlpha = c6a0f6
$redAlpha = ed8796
$maroonAlpha = ee99a0
$peachAlpha = f5a97f
$yellowAlpha = eed49f
$greenAlpha = a6da95
$tealAlpha = 8bd5ca
$skyAlpha = 91d7e3
$sapphireAlpha = 7dc4e4
$blueAlpha = 8aadf4
$lavenderAlpha = b7bdf8
$textAlpha = cad3f5
$subtext1Alpha = b8c0e0
$subtext0Alpha = a5adcb
$overlay2Alpha = 939ab7
$overlay1Alpha = 8087a2
$overlay0Alpha = 6e738d
$surface2Alpha = 5b6078
$surface1Alpha = 494d64
$surface0Alpha = 363a4f
$baseAlpha = 24273a
$mantleAlpha = 1e2030
$crustAlpha = 181926
$rosewater = 0xfff5e0dc
$flamingo = 0xfff2cdcd
$pink = 0xfff5c2e7
$mauve = 0xffcba6f7
$red = 0xfff38ba8
$maroon = 0xffeba0ac
$peach = 0xfffab387
$yellow = 0xfff9e2af
$green = 0xffa6e3a1
$teal = 0xff94e2d5
$sky = 0xff89dceb
$sapphire = 0xff74c7ec
$blue = 0xff89b4fa
$lavender = 0xffb4befe
$text = 0xffcdd6f4
$subtext1 = 0xffbac2de
$subtext0 = 0xffa6adc8
$overlay2 = 0xff9399b2
$overlay1 = 0xff7f849c
$overlay0 = 0xff6c7086
$surface2 = 0xff585b70
$surface1 = 0xff45475a
$surface0 = 0xff313244
$base = 0xff1e1e2e
$mantle = 0xff181825
$crust = 0xff11111b
'';
}