345 lines
11 KiB
Nix
345 lines
11 KiB
Nix
{ 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
|
|
wireplumber
|
|
playerctl
|
|
sirula
|
|
# swaylock
|
|
swww
|
|
# walker
|
|
# wl-lockscreen
|
|
waybar
|
|
wl-clipboard
|
|
wl-clipedit
|
|
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 = 30;
|
|
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 = [
|
|
# "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"
|
|
"DP-3,preferred,1080x200,auto"
|
|
"HDMI-A-1,preferred,0x0,auto,transform,3"
|
|
] ++ lib.lists.optionals (hostName == "odin") [
|
|
"eDP-1,preferred,auto,1"
|
|
"DP-1,preferred,auto-up,1"
|
|
] ++ lib.lists.optionals (hostName == "sif") [
|
|
"DP-1,preferred,0x0,1"
|
|
"DP-3,preferred,2560x0,1"
|
|
"eDP-1,preferred,1791x1440,1.66667"
|
|
] ++ [
|
|
",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 SHIFT, B, exec, brave"
|
|
"SUPER, B, exec, firefox"
|
|
"SUPER, E, exec, nemo"
|
|
"SUPER, L, exec, ${lib.optionalString (hostName == "thor") "env -u WAYLAND_DISPLAY "} 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, 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, ${pkgs.wdisplays}/bin/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"
|
|
];
|
|
};
|
|
};
|
|
}
|