{ nixosConfig, config, lib, pkgs, ... }: with nixosConfig.nix-rice.lib; let strPalette = palette.toRgbaShortHex nixosConfig.nix-rice.rice.colorPalette; inherit (nixosConfig.networking) hostName; in { imports = [ # ./kitty.nix ./foot.nix # ./nautilus.nix ./nemo.nix ./waybar.nix # ./dunst.nix # ./wlsunset.nix ./hyprlock.nix # ./swayidle.nix ./swaynotificationcenter.nix ./wl_update_background.nix ./hyprland-bluetooth-keyboard.nix ]; home.packages = builtins.attrValues { inherit (pkgs) blueman brightnessctl gamescope grimblast hyprpaper networkmanagerapplet playerctl sirula # swaylock swww # walker # waybar wdisplays wl-clipboard wl-clipedit # wl-lockscreen wlogout wofi wofi-emoji wtype ; }; services = { network-manager-applet.enable = true; blueman-applet.enable = true; hypridle = { enable = true; settings = { general = { ignore_dbus_inhibit = false; 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 = 60; on-timeout = "brightnessctl -s -d intel_backlight s 10; brightnessctl -s -d tpacpi::kbd_backlight s 0"; # lower screen backlight on-resume = "brightnessctl -r -d intel_backlight; brightnessctl -r -d tpacpi::kbd_backlight"; # restore screen backlight } { timeout = 120; on-timeout = "loginctl lock-session"; # lock screen } { timeout = 300; on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed on-resume = "hyprctl dispatch dpms on;" + (lib.optionalString (hostName == "thor") "xrandr --output DP-1 --primary"); # screen on when activity is detected after timeout has fired. } ]; }; }; hyprpaper = { enable = true; settings = { preload = "${../wallpapers/n8ca4obsys991.png}"; wallpaper = [ ",${../wallpapers/n8ca4obsys991.png}" ]; }; }; }; systemd.user.services = { blueman-applet.Service = { Restart = "on-failure"; RestartSec = "3s"; }; network-manager-applet.Service = { Restart = "on-failure"; RestartSec = "3s"; }; }; wayland.windowManager.hyprland = { enable = true; settings = { input = { kb_layout = if ((hostName == "thor") || (hostName == "sif")) then "us,it,us" else "it,us,us"; kb_options = "grp:menu_toggle,compose:rctrl"; kb_variant = ",,colemak"; kb_model = ""; kb_rules = ""; numlock_by_default = true; follow_mouse = 2; touchpad.natural_scroll = true; }; exec = lib.lists.optionals (hostName == "thor") [ "xrandr --output DP-1 --primary" ]; exec-once = [ "systemctl start waybar" # "hyprpaper" # "swww init" ]; # exec-shutdown = [ ]; env = [ "XCURSOR_SIZE,24" ]; "$LAPTOP_KEYBOARD_ENABLED" = true; device = [ { name = "at-translated-set-2-keyboard"; enabled = "$LAPTOP_KEYBOARD_ENABLED"; } { name = "keychron-k1-max-keyboard"; kb_layout = "us"; } { name = "keychron-k1-max-keyboard-2"; kb_layout = "us"; } { name = "tpps/2-synaptics-trackpoint"; sensitivity = -.3; } ]; general = { gaps_in = 1; gaps_out = 2; border_size = 2; "col.active_border" = "rgba(${strPalette.normal.yellow}) rgba(${strPalette.normal.red}) 45deg"; "col.inactive_border" = "rgba(${strPalette.bright.black})"; layout = "dwindle"; }; monitor = lib.lists.optionals (hostName == "thor") [ # "DP-1,preferred,1080x200,auto,bitdepth,10,cm,hdr" "DP-1,preferred,1080x200,auto" "DP-2,preferred,0x0,auto,transform,3" "HDMI-A-1,1920x1080@119,auto,1" ] ++ lib.lists.optionals (hostName == "odin") [ "eDP-1,preferred,auto,1" "DP-1,preferred,auto-up,1" ] ++ lib.lists.optionals (hostName == "sif") [ "eDP-1,preferred,auto,1" "DP-5,2560x1440@60,auto-right,1" "DP-6,2560x1440@60,auto-right,1" ] ++ [ ",preferred,auto,auto" # "Unknown-1,disable" ]; misc.disable_hyprland_logo = true; animations = { enabled = true; bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; animation = [ "windows, 1, 7, myBezier" "windowsOut, 1, 7, default, popin 80%" "border, 1, 10, default" "borderangle, 1, 8, default" "fade, 1, 7, default" "workspaces, 1, 6, default" ]; }; dwindle = { # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below pseudotile = true; preserve_split = true; # you probably want this }; master = { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more new_status = "master"; }; # gestures = { # # See https://wiki.hyprland.org/Configuring/Variables/ for more # workspace_swipe = true; # workspace_swipe_touch = true; # }; gesture = [ "3, horizontal, workspace" "3, up, fullscreen" "3, down, dispatcher, exec, sirula" ]; decoration = { rounding = 10; blur = { enabled = true; size = 3; passes = 1; new_optimizations = true; }; shadow = { enabled = true; range = 4; render_power = 3; color = "rgba(1a1a1aee)"; }; }; "$mod" = "SUPER"; bind = [ "SUPER_SHIFT_L, L, exec, hyprctl keyword general:layout dwindle" "SUPER_ALT_L, L, exec, hyprctl keyword general:layout master" "SUPER, RETURN, exec, foot" "SUPER, W, killactive," "SUPER, M, exec, ${config.programs.hyprlock.package}/bin/hyprlock" "SUPER_ALT_L, Q, exit," "SUPER, B, exec, firefox" "SUPER_SHIFT_L, B, exec, firefox --private-window" "SUPER, E, exec, nemo" "SUPER_ALT_L, O, exec, obsidian" "SUPER, V, togglefloating," "SUPER, SPACE, exec, sirula" "SUPER, F, fullscreen," "SUPER, P, pseudo, # dwindle" "SUPER, J, togglesplit, # dwindle" "SUPER ALT, E, exec, wofi-emoji" "SUPER ALT, P, exec, wl-clipedit" "SUPER ALT, B, exec, systemctl --user reload-or-restart wl-update-background" ",Print, exec, grimblast copy" "SHIFT, Print, exec, grimblast copy area" # Move focus to relative position "SUPER, left, movefocus, l" "SUPER, right, movefocus, r" "SUPER, up, movefocus, u" "SUPER, down, movefocus, d" # Move window to relative position "SUPER_SHIFT, left, movewindow, l" "SUPER_SHIFT, right, movewindow, r" "SUPER_SHIFT, up, movewindow, u" "SUPER_SHIFT, down, movewindow, d" # Switch workspaces with mainMod + [0-9] "SUPER, 1, workspace, 1" "SUPER, 2, workspace, 2" "SUPER, 3, workspace, 3" "SUPER, 4, workspace, 4" "SUPER, 5, workspace, 5" "SUPER, 6, workspace, 6" "SUPER, 7, workspace, 7" "SUPER, 8, workspace, 8" "SUPER, 9, workspace, 9" "SUPER, 0, workspace, 10" # Move active window to a workspace with mainMod + SHIFT + [0-9] "SUPER SHIFT, 1, movetoworkspace, 1" "SUPER SHIFT, 2, movetoworkspace, 2" "SUPER SHIFT, 3, movetoworkspace, 3" "SUPER SHIFT, 4, movetoworkspace, 4" "SUPER SHIFT, 5, movetoworkspace, 5" "SUPER SHIFT, 6, movetoworkspace, 6" "SUPER SHIFT, 7, movetoworkspace, 7" "SUPER SHIFT, 8, movetoworkspace, 8" "SUPER SHIFT, 9, movetoworkspace, 9" "SUPER SHIFT, 0, movetoworkspace, 10" # Move workspace to monitor with mainMod + SHIFT + CTRL + [0-9] "SUPER SHIFT CTRL, 1, movecurrentworkspacetomonitor, 0" "SUPER SHIFT CTRL, 2, movecurrentworkspacetomonitor, 1" "SUPER SHIFT CTRL, 3, movecurrentworkspacetomonitor, 2" "SUPER SHIFT CTRL, 4, movecurrentworkspacetomonitor, 3" "SUPER SHIFT CTRL, 5, movecurrentworkspacetomonitor, 4" "SUPER SHIFT CTRL, 6, movecurrentworkspacetomonitor, 5" "SUPER SHIFT CTRL, 7, movecurrentworkspacetomonitor, 6" "SUPER SHIFT CTRL, 8, movecurrentworkspacetomonitor, 7" "SUPER SHIFT CTRL, 9, movecurrentworkspacetomonitor, 8" "SUPER SHIFT CTRL, 0, movecurrentworkspacetomonitor, 9" "ALT, Tab, cyclenext" "ALT SHIFT, Tab, cyclenext, prev" # Scroll through existing workspaces with mainMod + scroll "SUPER, mouse_down, workspace, e+1" "SUPER, mouse_up, workspace, e-1" "SUPER ALT, M, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle" ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle" ", XF86AudioNext, exec, playerctl next" ", XF86AudioPlay, exec, playerctl play-pause" ", XF86AudioPrev, exec, playerctl previous" "SUPER ALT, Right, exec, playerctl next" "SUPER ALT, Down, exec, playerctl play-pause" "SUPER ALT, Left, exec, playerctl previous" ", XF86PowerOff, exec, wlogout" ", XF86Display, exec, wdisplays" ]; bindel = [ ", XF86MonBrightnessUp, exec, brightnessctl -q s 10%+" ", XF86MonBrightnessDown, exec, brightnessctl -q s 10%-" ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%+ -l 1" ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%- -l 1" ]; bindl = [ ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ]; bindm = [ # mouse movements "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" "$mod ALT, mouse:272, resizewindow" # Move/resize windows with mainMod + LMB/RMB and dragging "SUPER, mouse:272, movewindow" "SUPER, mouse:273, resizewindow" ]; windowrulev2 = [ "workspace 4, class:(Zotero)" "workspace 9, class:(teams-for-linux)" "workspace 9, initialTitle:(Microsoft Teams)" "workspace 9, initialTitle:(Outlook .+)" "workspace 10, class:(spotify)" "workspace 10, initialTitle:(TIDAL)" "tile, initialTitle:(TIDAL)" "tile, class:(Godot)" "idleinhibit fullscreen, class:(.*)" "float,class:org.kde.kdeconnect.daemon" "noborder,class:org.kde.kdeconnect.daemon" "pin,class:org.kde.kdeconnect.daemon" "size 100% 100%,class:org.kde.kdeconnect.daemon" "center,class:org.kde.kdeconnect.daemon" "noshadow,class:org.kde.kdeconnect.daemon" "noblur,class:org.kde.kdeconnect.daemon" ]; workspace = lib.lists.optionals (hostName == "thor") [ ''10,monitor:"DP-2"'' ]; }; }; }