From 3f421e7cdec9bf8cbb7d8ff6af948380c1c3c321 Mon Sep 17 00:00:00 2001 From: Aly Raffauf Date: Sat, 23 Mar 2024 22:38:31 -0400 Subject: [PATCH] hyprland: added initial config --- home/aly.nix | 31 ++++++ home/dotfiles/hypridle.conf | 34 ++++++ home/dotfiles/hyprland.conf | 207 ++++++++++++++++++++++++++++++++++++ modules/hyprland.nix | 28 +++++ 4 files changed, 300 insertions(+) create mode 100644 home/dotfiles/hypridle.conf create mode 100644 home/dotfiles/hyprland.conf create mode 100644 modules/hyprland.nix diff --git a/home/aly.nix b/home/aly.nix index f3791784..76fa7ece 100644 --- a/home/aly.nix +++ b/home/aly.nix @@ -24,6 +24,37 @@ services.syncthing.enable = true; + wayland.windowManager.hyprland = { + enable = true; + extraConfig = builtins.readFile ./dotfiles/hyprland.conf; + }; + + xdg.configFile."hypr/hypridle.conf".source = ./dotfiles/hypridle.conf; + programs.waybar.enable = true; + programs.waybar.settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 30; + output = [ + "eDP-1" + "HDMI-A-1" + ]; + modules-left = [ "hyprland/workspaces" "hyprland/mode" ]; + modules-center = [ "hyprland/window" ]; + modules-right = [ "tray" "clock"]; + + "hyprland/workspaces" = { + all-outputs = true; + }; + "clock" = { + "interval" = 60; + "format" = "{:%I:%M}"; + }; + }; + }; + + programs.alacritty = { enable = true; settings = { diff --git a/home/dotfiles/hypridle.conf b/home/dotfiles/hypridle.conf new file mode 100644 index 00000000..4db4417f --- /dev/null +++ b/home/dotfiles/hypridle.conf @@ -0,0 +1,34 @@ +general { + lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. +} + +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor. + on-resume = brightnessctl -r # monitor backlight restor. +} + +# turn off keyboard backlight, uncomment this section if have keyboard backlight. +#listener { +# timeout = 150 # 2.5min. +# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight. +# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight. +#} + +listener { + timeout = 300 # 5min + on-timeout = loginctl lock-session # lock screen when timeout has passed +} + +listener { + timeout = 380 # 5.5min + on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed + on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired. +} + +listener { + timeout = 1800 # 30min + on-timeout = systemctl suspend # suspend pc +} diff --git a/home/dotfiles/hyprland.conf b/home/dotfiles/hyprland.conf new file mode 100644 index 00000000..fae4cc26 --- /dev/null +++ b/home/dotfiles/hyprland.conf @@ -0,0 +1,207 @@ + +# ####################################################################################### +# AUTOGENERATED HYPR CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# See https://wiki.hyprland.org/Configuring/Monitors/ +# monitor=,preferred,auto,auto + +monitor=eDP-1,1920x1080@60,0x0,1 + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +exec-once = waybar & mako & hypridle + +#exec-once = dbus-update-activation-environment --systemd HYPRLAND_INSTANCE_SIGNATURE + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Set programs that you use +$terminal = alacritty +$fileManager = thunar +$menu = bemenu-run + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + clickfinger_behavior = true + disable_while_typing = true + drag_lock = true + middle_button_emulation = true + natural_scroll = yes + tap-to-click = true + } + + sensitivity = 0 # -1.0 to 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 20 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + 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 { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = true +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + hide_cursor_on_touch = true +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# 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 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Adjust display brightness. +bind = , xf86monbrightnessup, exec, brightnessctl set 10%+ +bind = , xf86monbrightnessdown, exec, brightnessctl set 10%- + +# Adjust volume. +bind = , xf86audioraisevolume, exec, wpctl set-volume -l 1.0 @DEFAULT_SINK@ 5%+ +bind = , xf86audiolowervolume, exec, wpctl set-volume -l 1.0 @DEFAULT_SINK@ 5%- +bind = , xf86audiomute, exec, wpctl set-mute @DEFAULT_SINK@ toggle + +# Screenshot with hyprshot. +bind = , PRINT, exec, hyprshot -m output --clipboard-only \ No newline at end of file diff --git a/modules/hyprland.nix b/modules/hyprland.nix new file mode 100644 index 00000000..bd2ae80a --- /dev/null +++ b/modules/hyprland.nix @@ -0,0 +1,28 @@ +{ config, pkgs, ... }: + +{ + imports = + [ # Include X settings. + ./desktop.nix + ]; + + environment.sessionVariables.NIXOS_OZONE_WL = "1"; + + programs.hyprland.enable = true; + environment.systemPackages = with pkgs; [ + bemenu + brightnessctl + hyprcursor + hypridle + hyprlock + hyprpaper + hyprshade + hyprshot + mako + nheko + overskride + udiskie + waybar + xfce.thunar + ]; +}