Evie Litherland-Smith
a4c9090d84
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
361 lines
12 KiB
Nix
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
|
|
'';
|
|
}
|