{ pkgs, hostname, ... }: let nix_background = "rgb(16, 15, 15)"; nix_text = "rgb(206, 205, 195)"; nix_accent = "rgb(67, 133, 190)"; # blue nix_inactive = "rgb(64, 62, 60)"; nix_alert = "rgb(209, 77, 65)"; # red nix_recording = "rgb(218, 112, 44)"; # orange in { home.pointerCursor = { gtk.enable = true; # x11.enable = true; package = pkgs.apple-cursor; name = "macOS"; size = 20; }; # gtk = { # enable = true; # }; services.udiskie.enable = true; # automount USB programs.alacritty = { enable = true; theme = "flexoki"; settings = { font = { normal = { family = "JetBrainsMono Nerd Font"; style = "Regular"; }; bold = { family = "JetBrainsMono Nerd Font"; style = "Bold"; }; italic = { family = "JetBrainsMono Nerd Font"; style = "Italic"; }; size = 9; }; window = { padding.x = 14; padding.y = 14; decorations = "None"; }; }; }; programs.kitty = { enable = true; shellIntegration.enableZshIntegration = true; font.name = "JetBrains Mono Nerd Font"; themeFile = "Catppuccin-Mocha"; settings = { background_opacity = 0.9; }; }; services.hyprpaper = { enable = true; settings = { preload = [ "~/Downloads/wall.jpg" ]; wallpaper = [ "DP-2,~/Downloads/wall.jpg" "HDMI-A-1,~/Downloads/wall.jpg" ]; }; }; services.dunst = { enable = true; settings = { global = { width = "(300, 300)"; height = "(75, 75)"; font = "JetBrains Mono Nerd Font 14"; offset = "(40, 40)"; frame-color = nix_inactive; background = nix_background; foreground = nix_text; timeout = 5; }; urgency_critical = { frame-color = nix_alert; timeout = 0; }; }; }; # services.mako = { # enable = true; # settings = { # default-timeout = 5; # ignore-timeout = 1; # width = "300"; # height = "300"; # border-color = "#89b4fa"; # background-color = "#1e1e2e"; # font = "JetBrains Mono Nerd Font 14"; # border-size = 3; # # "mode=do-not-disturb" = { # invisible = 1; # }; # # "urgency=low" = { # default-timeout = 5; # }; # # "urgency=normal" = { # default-timeout = 10; # }; # # "urgency=high" = { # border-color = "#f38ba8"; # }; # }; # }; # services.swaync = { # enable = true; # style = '' # .notification { # border-radius: 0px; # background-color: "#1e1e2e"; # color: "#cdd6f4"; # border-color: "#89b4fa"; # } # ''; # # }; dconf = { enable = true; settings = { "org/gnome/desktop/interface" = { color-scheme = "prefer-dark"; }; }; }; programs.waybar = { #systemd.enable = true; #systemd.target = "hyprland-session.target"; enable = true; style = '' * { background-color: ${nix_background}; color: ${nix_text}; border: none; border-radius: 0; min-height: 0; font-family: 'JetBrainsMono Nerd Font'; font-size: 14px; /* up from 12px */ } .modules-left { margin-left: 8px; } .modules-right { margin-right: 8px; } #workspaces button { all: initial; padding: 0 6px; margin: 0 1.5px; min-width: 9px; } #workspaces button.empty { opacity: 0.5; } #cpu, #battery, #pulseaudio, #custom-power, #idle_inhibitor, #bluetooth, #language { min-width: 12px; margin: 0 7.5px; } #tray { margin-right: 16px; } #bluetooth { margin-right: 17px; } #network { margin-right: 13px; } #custom-expandn { margin-right: 18px; } tooltip { padding: 2px; } #custom-update { font-size: 10px; } #clock { margin-left: 8.75px; } #custom-weather { margin-left: 7.5px; margin-right: 7.5px; } #custom-weather.unavailable { min-width: 0; margin: 0; padding: 0; } .hidden { opacity: 0; } #privacy { min-width: 12px; margin-left: 5px; margin-right: 0; font-size: 10px; padding-bottom: 1px; } #privacy.active { color: #a55555; } #idle_inhibitor.active { color: #a55555; } ''; settings = { mainBar = { height = 26; spacing = 4; modules-left = [ "hyprland/workspaces" ]; modules-center = [ "clock" "idle_inhibitor" ]; modules-right = [ "group/minimized" "hyprland/language" "bluetooth" "network" "pulseaudio" "custom/power" "privacy" ]; "hyprland/workspaces" = { on-click = "activate"; format = "{icon}"; format-icons = { default = ""; "1" = "1"; "2" = "2"; "3" = "3"; "4" = "4"; "5" = "5"; "6" = "6"; "7" = "7"; "8" = "8"; "9" = "9"; "10" = "0"; "active" = "󰝤"; }; persistent-workspaces = { "DP-2" = [ "1" "2" "3" ]; "HDMI-A-1" = [ "4" "5" "6" ]; }; }; tray = { #spacing = 10; }; "hyprland/language" = { format = "{}"; format-en = "󱌯"; format-ar = "󱌨"; on-click = "hyprctl switchxkblayout monsgeek-monsgeek-keyboard next"; }; "custom/power" = { format = "⏻"; on-click = "hyprlock & systemctl suspend"; }; "custom/expand" = { tooltip = false; format = ""; }; "group/minimized" = { orientation = "horizontal"; modules = [ "custom/expand" "tray" ]; drawer = { transition-left-to-right = false; transition-duration = 200; children-class = "minimized"; }; }; bluetooth = { format = ""; format-disabled = ""; format-connected = ""; tooltip-format = "{controller_alias}\t{controller_address}"; tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{device_enumerate}"; tooltip-format-enumerate-connected = "{device_alias}\t{device_address}"; on-click = "alacritty --title bluetui -e bluetui"; }; mpris = { format = "{player_icon}"; }; network = { format = ""; format-wifi = ""; format-ethernet = ""; tooltip-format = "{ifname} via {gwaddr} 󰊗"; tooltip-format-wifi = "{essid} ({signalStrength}%) "; tooltip-format-ethernet = "{ipaddr}/{cidr}\n{ifname} "; tooltip-format-disconnected = "Disconnected"; on-click = "alacritty --title impala -e impala"; }; clock = { format = "{:%a %b %d %H:%M}"; tooltip-format = "{calendar}"; }; idle_inhibitor = { format = "{icon}"; format-icons = { activated = ""; deactivated = ""; }; }; pulseaudio = { format = "{icon}"; format-muted = ""; format-icons = { headphone = ""; headset = ""; default = [ "" "" "" ]; }; on-scroll-up = "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"; on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"; on-click = "alacritty --title wiremix -e wiremix"; on-right-click = "set-mute @DEFAULT_AUDIO_SINK@ toggle"; tooltip-format = "{desc} - {volume}%"; }; }; }; }; services.walker = { enable = true; systemd.enable = true; settings = { app_launch_prefix = ""; as_window = false; close_when_open = false; disable_click_to_close = false; force_keyboard_focus = false; hotreload_theme = false; locale = ""; monitor = ""; terminal_title_flag = ""; theme = "default"; timeout = 0; }; }; programs.rofi = { enable = true; font = "JetBrains Mono 14"; plugins = [ pkgs.rofimoji ]; }; programs.hyprlock = { enable = true; settings = { background = { color = nix_background; }; input-field = { size = "650, 100"; position = "0, 0"; halign = "center"; valign = "center"; fade_on_emtpy = false; font_color = nix_text; outer_color = nix_inactive; inner_color = nix_background; check_color = nix_accent; fail_color = nix_alert; font_family = "JetBrains Mono Nerd Font"; placeholder_text = "Enter Password"; fail_text = "$FAIL ($ATTEMPTS)"; rounding = 0; }; }; }; services.hypridle = { enable = true; settings = { general = { lock_cmd = "pidof hyprlock || hyprlock"; }; listener = [ { timeout = 300; on-timeout = "loginctl lock-session & hyprctl dispatch dpms off"; on-resume = "hyprctl dispatch dpms on"; } { timeout = 900; on-timeout = "systemctl suspend"; on-resume = "hyprctl dispatch dpms on"; } ]; }; }; wayland.windowManager.hyprland = { enable = true; plugins = [ #pkgs.hyprlandPlugins.hyprbars ]; settings = { # This is an example Hyprland config file for Nix. # Refer to the wiki for more information. # https://wiki.hypr.land/Configuring/ # https://wiki.hypr.land/Nix/ # https://wiki.hypr.land/Nix/Hyprland-on-NixOS/ # https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/ # Please note not all available settings / options are set here. # For a full list, see the wiki # You can split this configuration into multiple files # Create your files separately and then link them to this file like this: # source = ~/.config/hypr/myColors.conf # todo: make the line above nix-ish ################ ### MONITORS ### ################ # See https://wiki.hypr.land/Configuring/Monitors/ #monitor = ",preferred,auto,auto"; monitor = if (hostname == "nixos-desktop") then [ "DP-2, 2560x1440@180,0x0,1,vrr,1,bitdepth,10" "HDMI-A-1, 1920x1080@75,2560x0,1,vrr,1" ] else [ ",preferred,auto,auto" ]; ################### ### MY PROGRAMS ### ################### # See https://wiki.hypr.land/Configuring/Keywords/ # Set programs that you use "$terminal" = "alacritty"; "$fileManager" = "dolphin"; "$menu" = "walker"; "$browser" = "brave"; ################# ### AUTOSTART ### ################# # Autostart necessary processes (like notifications daemons, status bars, etc.) # Or execute your favorite apps at launch like this: exec-once = [ "waybar" "steam -silent" "webcord --start-minimized" #"[workspace 1 silent]$browser" #"[workspace 3 silent]proton-mail" #"[workspace 2 silent]signal-desktop" #"[workspace 2 silent]steam" ]; ############################# ### ENVIRONMENT VARIABLES ### ############################# # See https://wiki.hypr.land/Configuring/Environment-variables/ env = [ "XCURSOR_SIZE,24" "HYPRCURSOR_SIZE,24" ]; ################### ### PERMISSIONS ### ################### # See https://wiki.hypr.land/Configuring/Permissions/ # Please note permission changes here require a Hyprland restart and are not applied on-the-fly # for security reasons # ecosystem = { # enforce_permissions = 1; # }; permission = [ "/usr/(bin|local/bin)/grim, screencopy, allow" "/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow" # "/usr/(bin|local/bin)/hyprpm, plugin, allow" ]; ##################### ### LOOK AND FEEL ### ##################### # Refer to https://wiki.hypr.land/Configuring/Variables/ # https://wiki.hypr.land/Configuring/Variables/#general general = { gaps_in = 10; gaps_out = 20; border_size = 3; # these need to have variables "col.active_border" = "0x4385BEFF"; "col.inactive_border" = "0x403E3CFF"; # Set to true enable resizing windows by clicking and dragging on borders and gaps resize_on_border = false; # Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on allow_tearing = false; layout = "dwindle"; }; group = { "col.border_active" = "rgb(4385be)"; "col.border_inactive" = "rgb(403e3c)"; "col.border_locked_active" = -1; "col.border_locked_inactive" = -1; groupbar = { font_size = 12; font_family = "monospace"; font_weight_active = "ultraheavy"; font_weight_inactive = "normal"; indicator_height = 0; indicator_gap = 5; height = 22; gaps_in = 5; gaps_out = 0; text_color = "rgb(ffffff)"; text_color_inactive = "rgba(ffffff90)"; "col.active" = "rgb(100f0f)"; "col.inactive" = "rgb(403e3c)"; gradients = true; gradient_rounding = 0; gradient_round_only_edges = false; }; }; # https://wiki.hypr.land/Configuring/Variables/#decoration decoration = { rounding = 0; rounding_power = 2; # Change transparency of focused and unfocused windows active_opacity = 1.0; inactive_opacity = 1.0; shadow = { enabled = true; range = 4; render_power = 3; color = "rgba(1a1a1aee)"; }; # https://wiki.hypr.land/Configuring/Variables/#blur blur = { enabled = true; size = 8; passes = 1; noise = 0.2; vibrancy = 0.1696; }; }; layerrule = [ "blur, notifications" "ignorezero, notifications" ]; # add blur to notifications # https://wiki.hypr.land/Configuring/Variables/#animations animations = { enabled = "yes, please :)"; # Default animations, see https://wiki.hypr.land/Configuring/Animations/ for more bezier = [ "easeOutQuint,0.23,1,0.32,1" "easeInOutCubic,0.65,0.05,0.36,1" "linear,0,0,1,1" "almostLinear,0.5,0.5,0.75,1.0" "quick,0.15,0,0.1,1" ]; animation = [ "global, 1, 10, default" "border, 1, 5.39, easeOutQuint" "windows, 1, 4.79, easeOutQuint" "windowsIn, 1, 4.1, easeOutQuint, popin 87%" "windowsOut, 1, 1.49, linear, popin 87%" "fadeIn, 1, 1.73, almostLinear" "fadeOut, 1, 1.46, almostLinear" "fade, 1, 3.03, quick" "layers, 1, 3.81, easeOutQuint" "layersIn, 1, 4, easeOutQuint, fade" "layersOut, 1, 1.5, linear, fade" "fadeLayersIn, 1, 1.79, almostLinear" "fadeLayersOut, 1, 1.39, almostLinear" "workspaces, 1, 1.94, almostLinear, fade" "workspacesIn, 1, 1.21, almostLinear, fade" "workspacesOut, 1, 1.94, almostLinear, fade" "zoomFactor, 1, 7, quick" ]; }; # Ref https://wiki.hypr.land/Configuring/Workspace-Rules/ # "Smart gaps" / "No gaps when only" # uncomment all if you wish to use that. # workspace = [ # "w[tv1], gapsout:0, gapsin:0" # "f[1], gapsout:0, gapsin:0" # ]; # windowrule = [ # "bordersize 0, floating:0, onworkspace:w[tv1]" # "rounding 0, floating:0, onworkspace:w[tv1]" # "bordersize 0, floating:0, onworkspace:f[1]" # "rounding 0, floating:0, onworkspace:f[1]" # ]; # See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more dwindle = { pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = true; # You probably want this }; # See https://wiki.hypr.land/Configuring/Master-Layout/ for more master = { new_status = "master"; }; # https://wiki.hypr.land/Configuring/Variables/#misc misc = { force_default_wallpaper = 0; # Set to 0 or 1 to disable the anime mascot wallpapers disable_hyprland_logo = true; # If true disables the random hyprland logo / anime girl background. :( background_color = nix_background; }; ############# ### INPUT ### ############# # https://wiki.hypr.land/Configuring/Variables/#input input = { kb_layout = "us,ara"; kb_variant = ""; kb_model = ""; kb_options = "grp:alt_space_toggle"; kb_rules = ""; follow_mouse = 1; sensitivity = 0; # -1.0 - 1.0, 0 means no modification. touchpad = { disable_while_typing = false; natural_scroll = false; }; }; # https://wiki.hypr.land/Configuring/Variables/#gestures #gestures = { # workspace_swipe = false; #}; # Example per-device config # See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more device = { name = "epic-mouse-v1"; sensitivity = -0.5; }; ################### ### KEYBINDINGS ### ################### # See https://wiki.hypr.land/Configuring/Keywords/ "$mainMod" = "SUPER"; # Sets "Windows" key as main modifier bind = [ # Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more "$mainMod, Return, exec, $terminal" "$mainMod, Q, killactive," "alt, F4, killactive," "$mainMod SHIFT, Q, exit," "$mainMod, E, exec, $fileManager" "$mainMod, V, togglefloating," "$mainMod, F, fullscreen, 1" "$mainMod, W, exec, $browser" "$mainMod, space, exec, $menu" #"$mainMod, P, pseudo," # dwindle "$mainMod, T, togglesplit," # dwindle "$mainMod SHIFT, L, exec, hyprlock" "$mainMod SHIFT, F, workspaceopt, allfloat" "$mainMod, G, togglegroup," "$mainMod SHIFT, S, exec, grim -g \"$(slurp)\" - | wl-copy" # Move focus with mainMod + arrow keys "$mainMod, h, movefocus, l" "$mainMod, l, movefocus, r" "$mainMod, k, movefocus, u" "$mainMod, j, movefocus, d" "$mainMod, Tab, cyclenext" "$mainMod, Tab, bringactivetotop" # Switch workspaces with mainMod + [0-9] "$mainMod, 1, workspace, 1" "$mainMod, 2, workspace, 2" "$mainMod, 3, workspace, 3" "$mainMod, 4, workspace, 4" "$mainMod, 5, workspace, 5" "$mainMod, 6, workspace, 6" "$mainMod, 7, workspace, 7" "$mainMod, 8, workspace, 8" "$mainMod, 9, workspace, 9" "$mainMod, 0, workspace, 10" # Move active window to a workspace with mainMod + SHIFT + [0-9] "$mainMod SHIFT, 1, movetoworkspace, 1" "$mainMod SHIFT, 2, movetoworkspace, 2" "$mainMod SHIFT, 3, movetoworkspace, 3" "$mainMod SHIFT, 4, movetoworkspace, 4" "$mainMod SHIFT, 5, movetoworkspace, 5" "$mainMod SHIFT, 6, movetoworkspace, 6" "$mainMod SHIFT, 7, movetoworkspace, 7" "$mainMod SHIFT, 8, movetoworkspace, 8" "$mainMod SHIFT, 9, movetoworkspace, 9" "$mainMod SHIFT, 0, movetoworkspace, 10" # Example special workspace (scratchpad) "$mainMod, N, togglespecialworkspace, notes" "$mainMod SHIFT, N, movetoworkspace, special:notes" "$mainMod, grave, workspace, name:games" "$mainMod SHIFT, grave, movetoworkspace, name:games" # Scroll through existing workspaces with mainMod + scroll "$mainMod, mouse_down, workspace, e+1" "$mainMod, mouse_up, workspace, e-1" ]; # Move/resize windows with mainMod + LMB/RMB and dragging bindm = [ "$mainMod, mouse:272, movewindow" "$mainMod, mouse:273, resizewindow" ]; # Laptop multimedia keys for volume and LCD brightness bindel = [ ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" ",XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+" ",XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-" ]; # Requires playerctl bindl = [ ", XF86AudioNext, exec, playerctl next" ", XF86AudioPause, exec, playerctl play-pause" ", XF86AudioPlay, exec, playerctl play-pause" ", XF86AudioPrev, exec, playerctl previous" ]; ############################## ### WINDOWS AND WORKSPACES ### ############################## # See https://wiki.hypr.land/Configuring/Window-Rules/ for more # See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules windowrule = [ # Example windowrule # "float,class:^(kitty)$,title:^(kitty)$" # Ignore maximize requests from apps. You'll probably like this. "suppressevent maximize, class:.*" # Fix some dragging issues with XWayland "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" "float, title:^(bluetui)$" "center, title:^(bluetui)$" "float, title:^(impala)$" "center, title:^(impala)$" "float, title:^(wiremix)$" "center, title:^(wiremix)$" "workspace name:games silent, class:$games" "noanim, class:$games" "noblur, class:$games" "noshadow, class:$games" "noborder, class:$games" "rounding 0, class:$games" "fullscreen, class:$games" "immediate, class:$games" ]; "$games" = "^(steam_app_.*|lutris_game_class|minigalaxy|playnite_game_class|gamescope|chiaki|moonlight|com\.moonlight_stream\.Moonlight|.*[Ww]ine.*)$"; workspace = [ "name:1,monitor:DP-2" "name:games,monitor:DP-2" "name:4,monitor:HDMI-A-1" ]; }; }; }