{ config, pkgs, lib, ... }: # TODO: # - configure comands like hyprpaper, waybar, etc. # - make hyprexpo work # - write config for hyprpanel { imports = [ # ./hyprland/env.nix # ./hyprland/execs.nix # ./hyprland/general.nix # ./hyprland/rules.nix # ./hyprland/colors.nix # ./hyprland/active.nix ./hyprland/keybinds.nix # done ./hyprlock.nix # done ./hypridle.nix # done ]; home.packages = with pkgs; [ hyprland brightnessctl playerctl hyprshot nemo hyprpaper pywal ]; services.hyprpaper = { enable = true; settings = { preload = "~/Pictures/wallpaper.png"; wallpaper = [ "eDP-2,~/Pictures/wallpaper.png" "eDP-1,~/Pictures/wallpaper.png" "HDMI-A-1,~/Pictures/wallpaper.png" ]; }; }; programs.hyprpanel = { enable = true; settings = builtins.fromJSON (builtins.readFile ./hyprpanel.json); }; programs.fuzzel.enable = true; home.file.".config/hypr/scripts" = { source = ./scripts; recursive = true; }; wayland.windowManager.hyprland = { enable = true; plugins = [ pkgs.hyprlandPlugins.hyprexpo ]; settings = { env = [ "XCURSOR_SIZE,24" "HYPRCURSOR_SIZE,24" ]; exec-once = [ # "hyprlock" "wal -R &" "hyprpaper &" # "hyprctl hyprpaper reload ,~/Pictures/wallpaper.png" "hyprpanel &" "gsettings set org.gnome.desktop.interface cursor-theme '${config.home.pointerCursor.name}'" "gsettings set org.gnome.desktop.interface cursor-size ${ toString config.home.pointerCursor.size }" ]; exec = "hyprctl dispatch submap global"; submap = "global"; debug = { disable_logs = false; }; monitor = [ "eDP-1,preferred,auto,auto" "HDMI-A-1,preferred,auto-left,auto" ]; input = { kb_layout = "us,ru"; kb_options = "grp:win_space_toggle,ctrl:swap_lalt_lctl"; natural_scroll = true; follow_mouse = 1; numlock_by_default = true; touchpad = { disable_while_typing = true; clickfinger_behavior = true; natural_scroll = true; }; }; cursor = { no_hardware_cursors = true; min_refresh_rate = 60; inactive_timeout = 5; hide_on_key_press = true; }; binds.scroll_event_delay = 0; gestures = { workspace_swipe = true; workspace_swipe_distance = 700; workspace_swipe_fingers = 3; workspace_swipe_cancel_ratio = 0.2; workspace_swipe_min_speed_to_force = 5; workspace_swipe_direction_lock = true; workspace_swipe_direction_lock_threshold = 10; workspace_swipe_create_new = true; }; general = { # Gaps and border gaps_in = 5; gaps_out = 10; gaps_workspaces = 50; border_size = 0; # Fallback colors "col.active_border" = "rgba(0DB7D4FF)"; "col.inactive_border" = "rgba(31313600)"; resize_on_border = true; no_focus_fallback = true; # layout = dwindle #focus_to_other_workspaces = true # ahhhh i still haven't properly implemented this allow_tearing = true; # This just allows the `immediate` window rule to work snap.enabled = true; }; dwindle = { preserve_split = true; smart_split = false; smart_resizing = false; }; decoration = { rounding = 20; blur = { enabled = true; xray = false; special = false; new_optimizations = true; ignore_opacity = true; size = 4; passes = 2; brightness = 1; noise = "0.01"; contrast = 1; popups = true; popups_ignorealpha = "0.6"; vibrancy = 0; }; shadow = { enabled = true; ignore_window = true; range = 20; offset = "0 2"; render_power = 4; color = "rgba(0000002A)"; }; active_opacity = "0.95"; inactive_opacity = "0.5"; fullscreen_opacity = 1; dim_inactive = true; dim_strength = "0.025"; dim_special = "0.07"; }; animations = { enabled = true; bezier = [ "expressiveFastSpatial, 0.42, 1.67, 0.21, 0.90" "expressiveSlowSpatial, 0.39, 1.29, 0.35, 0.98" "expressiveDefaultSpatial, 0.38, 1.21, 0.22, 1.00" "emphasizedDecel, 0.05, 0.7, 0.1, 1" "emphasizedAccel, 0.3, 0, 0.8, 0.15" "standardDecel, 0, 0, 0, 1" "menu_decel, 0.1, 1, 0, 1" "menu_accel, 0.52, 0.03, 0.72, 0.08" ]; animation = [ "windowsIn, 1, 3, emphasizedDecel, popin 80%" "windowsOut, 1, 2, emphasizedDecel, popin 90%" "windowsMove, 1, 3, emphasizedDecel, slide" "border, 1, 10, emphasizedDecel" "layersIn, 1, 2.7, emphasizedDecel, popin 93%" "layersOut, 1, 2.4, menu_accel, popin 94%" "fadeLayersIn, 1, 0.5, menu_decel" "fadeLayersOut, 1, 2.7, menu_accel" "workspaces, 1, 7, menu_decel, slide" "specialWorkspaceIn, 1, 2.8, emphasizedDecel, slidevert" "specialWorkspaceOut, 1, 1.2, emphasizedAccel, slidevert" ]; }; misc = { mouse_move_enables_dpms = true; key_press_enables_dpms = true; disable_splash_rendering = true; focus_on_activate = false; # TODO: enable after rules.nix # vfr = 1; # vrr = 1; animate_manual_resizes = false; animate_mouse_windowdragging = false; # enable_swallow = false; # swallow_regex = "(foot|kitty|allacritty|Alacritty)"; # disable_hyprland_logo = true; # force_default_wallpaper = 0; new_window_takes_over_fullscreen = 2; allow_session_lock_restore = true; initial_workspace_tracking = false; }; plugin.hyprexpo = { columns = 3; gap_size = 5; bg_col = "rgb(000000)"; workspace_method = "first 1"; # [center/first] [workspace] e.g. first 1 or center m+1 enable_gesture = true; # laptop touchpad, 4 fingers gesture_distance = 300; # how far is the "max" gesture_positive = false; }; }; }; }