diff --git a/hosts/default/home.nix b/hosts/default/home.nix index a6ff816..f6ab105 100644 --- a/hosts/default/home.nix +++ b/hosts/default/home.nix @@ -47,12 +47,23 @@ # Let Home Manager install and manage itself. programs.home-manager.enable = true; - # ENV/APPEARANCE SETTINGS + # ENV SETTINGS fonts.fontconfig = { enable = true; }; + xdg.enable = true; + xdg.configFile."hypr/hyprland.conf".source = ./hyprland.conf; + wayland.windowManager.hyprland = { + enable = true; + systemd.enable = true; + xwayland.enable = true; + # extraConfig = '' + # ${builtins.readFile ./hyprland.conf} + # ''; + }; + # BEGIN PROGRAMS programs.bash = { @@ -100,10 +111,21 @@ vimAlias = true; vimdiffAlias = true; }; + programs.swaylock.enable = true; + programs.waybar = { + systemd.enable = true; + systemd.target = "hyprland-session.target"; + }; + programs.wofi.enable = true; # BEGIN SERVICES + services.dunst = { + enable = true; + # waylandDisplay = true; + }; + services.emacs = { enable = true; client = { @@ -131,6 +153,8 @@ defaultCacheTtl = 1800; enableSshSupport = true; }; - + services.swayidle.enable = true; + #xdg.portal.enable = true; + #xdg.portal.wlr.enable = true; #services.nexcloud-client.enable = true; } diff --git a/hosts/default/hyprland.conf b/hosts/default/hyprland.conf new file mode 100644 index 0000000..e8ce961 --- /dev/null +++ b/hosts/default/hyprland.conf @@ -0,0 +1,359 @@ +# Monitor settings +#monitor=DP-1,2560x1440@60,0x0,1 # external monitor at desk +monitor=eDP-1,1920x1080@60,0x0,1 # built-in display +monitor=HDMI-A-1,1920x1080@60,auto,1,mirror, eDP-1 # mirror external monitor at desk - for laptop +monitor=,preferred,auto,1,mirror, eDP-1 # default treatment for external monitors +#monitor=,preferred,auto,1 # default treatment for external monitors + +# Environment variables +env = XCURSOR_SIZE,24 +env = XCURSOR_THEME,Breeze +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland +env = XDG_SESSION_DESKTOP,Hyprland +env = PATH,$PATH:$HOME/.local/bin:$HOME/.cargo/bin + +env = WLR_NO_HARDWARE_CURSORS,1 +env = GDK_BACKEND, wayland,x11 +env = GTK_THEME,Materia:dark +env = QT_QPA_PLATFORM,wayland;xcb +env = QT_QPA_PLATFORMTHEME,qt6ct +env = SDL_VIDEODRIVER,wayland + +#auto-runs +exec-once = ~/.config/hypr/xdg-portal-hyprland +#exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = dbus-update-activation-environment --systemd all +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME +exec-once = /usr/lib/polkit-kde-authentication-agent-1 +exec-once = wl-clipboard-history -t +exec-once = swww init +exec-once = gammastep +exec-once = waybar +exec-once = wl-paste -p --watch wl-copy -p '' + +# THE FOLLOWING LINES ARE A TEST TO GET IDLE LOCKING/SLEEP WORKING +# Turn monitors off if locked (swaylock running) and idle for 10 seconds +#exec-once = swayidle -w timeout 10 'if pgrep -x swaylock; then hyprctl dispatch dpms off; fi' resume 'hyprctl dispatch dpms on' +# +# Sleep if locked (swaylock running) and idle for 10 seconds +$lock = swaylock -C $HOME/.config/swaylock/config +exec-once = swayidle -w timeout 180 'if pgrep -x swaylock; then systemctl suspend; fi' before-sleep '$lock' & +# Lock screen after idle for 300s and turn monitors off after 330 +exec-once = swayidle -w timeout 300 '$lock' timeout 330 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on' & + +# IF ABANDONING ABOVE METHODS, UNCOMMENT BELOW +#exec-once = swaylock +#exec-once = xss-lock -- swaylock -n -i /usr/share/pixmaps/background.jpg + +exec-once = fcitx5 -d +exec-once = dunst +exec-once = /usr/lib/kdeconnectd + +set $gnome-schema org.gnome.desktop.interface +exec-once = gsettings set $gnome-schema gtk-theme 'Arc Dark' +exec-once = gsettings set $gnome-schema icon-theme 'Arc Dark' + +exec-once = /usr/bin/emacs --daemon +exec-once = blueman-applet +exec-once = nm-applet +exec-once = kdeconnect-indicator + + +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + numlock_by_default = true + + touchpad { + disable_while_typing = true + #disable_while_typing = false + natural_scroll = yes + middle_button_emulation = true + drag_lock = false + tap-to-click = true + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + gaps_in = 2 + gaps_out = 4 + border_size = 2 + #col.active_border = rgba(ef629fee) rgba(eecda3ff) 45deg + #col.active_border = rgba(b90efaff) rgba(f0fe2fee) 45deg + col.active_border = rgba(00ffb2ff) rgba(00ff66ff) 90deg + col.inactive_border = rgba(595959ff) + + layout = dwindle +} + +group { + +} + +decoration { + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + xray = true + new_optimizations = on + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +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 +} + +dwindle { + pseudotile = yes + preserve_split = yes +} + +master { + new_is_master = true +} + +gestures { + workspace_swipe = true + workspace_swipe_numbered = true +} + +misc { + disable_hyprland_logo = false + #force_default_wallpaper = -1 +} + +device:epic mouse V1 { + sensitivity = -0.5 +} + + +# Window Rules +# - General Rules +windowrule = idleinhibit fullscreen, firefox +windowrule = idleinhibit focus, firefox +windowrule = idleinhibit fullscreen, floorp +windowrule = idleinhibit fullscreen, ghostty +windowrule = idleinhibit focus, mpv +windowrule = idleinhibit focus, ^(emacs)$ +windowrule = idleinhibit focus, ^(Emacs)$ +windowrule = float, polkit-kde-authentication-agent-1 +windowrule = float, ^(praat)$ +windowrule = float, Rofi +windowrule = float, Gimp +windowrule = float, Nautilus +windowrule = float, notification +windowrule = tile, Spotify +windowrule = tile, Minecraft +# - Workspace Rules +windowrule = workspace 2, KeePassXC +windowrule = workspace 3, firefox +windowrule = workspace 3, floorp +windowrule = workspace 4, Spotify +windowrule = workspace 6, discord +windowrule = workspace 6, Signal +windowrule = workspace 10, Minecraft +# - Opacity Rules +#windowrule = opacity 1.0 override 0.6, firefox +windowrule = opacity 1.0, firefox +windowrule = opacity 1.0 override 0.6,^(kitty)$ +windowrule = opacity 1.0 override 0.6, alacritty + + +$mainMod = SUPER +$altMod = ALT +$ctrlMod = CTRL + +# NATIVE PROGRAM BINDS +bind = $altMod, Return, exec, $HOME/.local/bin/ghostty +bind = $mainMod, Return, exec, $HOME/.local/bin/ghostty # for apps that yoink alt- binds +bind = $altMod SHIFT, Return, exec, contour +bind = $mainMod SHIFT, D, exec, discord --enable-blink-features=MiddleClickAutoscroll +bind = $mainMod SHIFT, E, exec, emacsclient -c -a 'emacs' +bind = $mainMode SHIFT, F, exec, focus-linux +bind = $mainMod, SPACE, exec, pkill wofi || wofi +bind = $mainMod, E, exec, nautilus + +# SUPER alone to open wofi - hit again to kill +#bindr = $mainMod, $mainMod_L, exec, pkill wofi || wofi --show drun + +# SUBMAPS +# +# Resize Submap +bind = $mainMod, R, submap, resize +submap = resize +bind=, escape,submap,reset + + +binde=, left, resizeactive, -10 0 +bindr=, left, submap, reset +binde=, right, resizeactive, 10 0 +bindr=, right, submap, reset +binde=, up, resizeactive, 0 10 +bindr=, up, submap, reset +binde=, down, resizeactive, 0 -10 +bindr=, down, submap, reset + +binde=, H, resizeactive, -10 0 +bindr=, H, submap, reset +binde=, J, resizeactive, 0 -10 +bindr=, J, submap, reset +binde=, K, resizeactive, 0 10 +bindr=, K, submap, reset +binde=, L, resizeactive, 10 0 +bindr=, L, submap, reset + +submap=reset + +# Browser Submap +bind = $mainMod, B, submap, browser_select +submap = browser_select + +bind =, B, exec, brave --enable-blink-features=MiddleClickAutoscroll +bind =, B, submap, reset + +bind =, F, exec, firefox +bind =, F, submap, reset + +bind=, escape,submap,reset +submap=reset + +# Flatpak Binds +bind = $mainMod, S, exec, flatpak run com.spotify.Client + +bind = $mainMod SHIFT, V, submap, video_stuff +submap = video_stuff +bind = , O, exec, flatpak run com.obsproject.Studio +bind = , O, submap, reset +bind = , V, exec , flatpak run org.kde.kdenlive +bind = , V, submap, reset + +bind=, escape,submap,reset +submap = reset + +bind = $mainMod, P, pseudo, # dwindle + +# Script Binds +bind = $mainMod, W, exec, ~/scripts/wp +bind = $mainMod SHIFT, W, exec, ~/scripts/bar_and_wp + +# Other Binds +bind = $mainMod, C, killactive, +bind = $mainMod control, Q, exec, $lock +bind = $mainMod, F4, exit, +bind = $mainMod, V, togglefloating, +bind = $mainMod SHIFT, S, togglesplit, # dwindle +bind = $mainMod, F, fullscreen, + +# Screenshots +$screenshotarea = hyprctl keyword animation "fadeOut,0,0,default"; grimblast --notify copy area; hyprctl keyword animation "fadeOut,1,4,default" +bind = , Print, exec, $screenshotarea +bind = SHIFT, Print, exec, grimblast --notify --cursor copy output + +# Multimedia Keys + +# pause/play, next/prev audio +bindl =, XF86AudioPlay, exec, playerctl play-pause +bindl =, XF86AudioNext, exec, playerctl next +bindl =, XF86AudioPrev, exec, playerctl previous + +# volume control +bindel=, XF86AudioRaiseVolume, exec, pamixer -i 5 +bindel=, XF86AudioLowerVolume, exec, pamixer -d 5 +bindel=, XF86AudioMute, exec, pamixer -t + +# brightness control +binde=, XF86MonBrightnessDown, exec, brightnessctl set 10%- +binde=, XF86MonBrightnessUp, exec, brightnessctl set 10%+ + +# touchpad/other +binde=, XF86TouchpadToggle, exec, ~/scripts/hypr-tp-toggle +bind=, XF86Sleep, exec, systemctl suspend + +# Window and Workspace Control + +# Move focus with mainMod + hjkl +bind = $mainMod, H, movefocus, l +bind = $mainMod, L, movefocus, r +bind = $mainMod, K, movefocus, u +bind = $mainMod, J, movefocus, d +bind = $mainMod, comma, focusmonitor, -1 +bind = $mainMod, period, focusmonitor, +1 + +# Move Windows +bind = $mainMod SHIFT, H, movewindow, l +bind = $mainMod SHIFT, L, movewindow, r +bind = $mainMod SHIFT, K, movewindow, u +bind = $mainMod SHIFT, J, movewindow, d +bind = $mainMod SHIFT, comma, movecurrentworkspacetomonitor, -1 +bind = $mainMod SHIFT, period, movecurrentworkspacetomonitor, +1 +# Resize Windows +binde = $mainMod, right, resizeactive, 10 0 +binde = $mainMod, left, resizeactive, -10 0 +binde = $mainMod, up, resizeactive, 0 -10 +binde = $mainMod, down, resizeactive, 0 10 + +# Switch workspaces with mainMod + [0-9] +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 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +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 SHIFT CTRL, right, movetoworkspace, +1 +bind = $mainMod SHIFT CTRL, left, movetoworkspace, -1 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Tab through existing workspaces +bind = $mainMod, Tab, workspace, e+1 +bind = $mainMod SHIFT, Tab, workspace, e-1 + +bind = $mainMod CTRL, right, workspace, +1 +bind = $mainMod CTRL, left, workspace, -1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow