nix-config/modules/home/hyprland/default.nix
2024-06-16 01:52:32 -04:00

489 lines
15 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
pkgs,
config,
lib,
...
}: let
palette = config.colorScheme.palette;
betterTransition = "all 0.3s cubic-bezier(.55,-0.68,.48,1.682)";
in
with pkgs; {
home.packages = [
wl-clipboard-rs
];
programs = {
rofi = {
enable = true;
catppuccin.enable = true;
package = pkgs.rofi-wayland;
extraConfig = {
modi = "run,drun,window";
icon-theme = "Oranchelo";
show-icons = true;
terminal = "wezterm";
drun-display-format = "{icon} {name}";
location = 0;
disable-history = false;
hide-scrollbar = true;
display-drun = " Apps ";
display-run = " Run ";
display-window = " 󰍲 Window";
display-Network = " 󰤨 Network";
sidebar-mode = true;
};
theme = {
"*".font = "Maple Mono NF 14";
window.border-radius = 10;
};
};
waybar = {
enable = true;
package = pkgs.waybar;
settings = [
{
layer = "top";
position = "top";
modules-center = ["hyprland/workspaces"];
modules-left = [
"custom/startmenu"
"hyprland/window"
"pulseaudio"
"cpu"
"memory"
];
modules-right = [
"mpris"
"network"
"custom/notification"
"tray"
"clock"
];
"mpris" = {
format = "{player_icon} {title} - {artist}";
format-paused = "{status_icon} {title} - {artist}";
player-icons.default = "󰝚";
status-icons.paused = "󰏤";
max-length = 40;
};
"hyprland/workspaces" = {
format = "{name}";
format-icons = {
default = " ";
active = " ";
urgent = " ";
};
on-scroll-up = "hyprctl dispatch workspace e-1";
on-scroll-down = "hyprctl dispatch workspace e+1";
};
"clock" = {
format = " {:L%I:%M %p}";
tooltip = true;
tooltip-format = "<big>{:%A, %d.%B %Y }</big>\n<tt><small>{calendar}</small></tt>";
};
"hyprland/window" = {
max-length = 40;
rewrite = {
"" = "󰍹 Desktop";
"(.*) Firefox Nightly" = "󰈹 $1";
"(.*) - Slack" = "󰒱 $1";
".*?Discord \\| @?(.*)" = "󰙯 $1";
"WezTerm - (?:\\[.*] ?)?(.*)" = " $1";
"Telegram(?: \\((\\d+)\\))?" = " Telegram";
"Steam" = "󰓓 Steam";
};
};
"memory" = {
interval = 5;
format = " {}%";
tooltip = true;
};
"cpu" = {
interval = 5;
format = " {usage:2}%";
tooltip = true;
};
"disk" = {
format = " {free}";
tooltip = true;
};
"network" = {
format-icons = [
"󰤯"
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
format-ethernet = " {bandwidthDownOctets}";
format-wifi = "{icon} {essid}";
format-disconnected = "󰤮";
tooltip = false;
};
"tray" = {
spacing = 12;
};
"pulseaudio" = {
format = "{icon} {volume}% {format_source}";
format-bluetooth = "{volume}% {icon} {format_source}";
format-bluetooth-muted = "󰅶 {icon} {format_source}";
format-muted = "󰅶 {format_source}";
format-source = " {volume}%";
format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "󰋎";
phone = "";
portable = "";
car = "";
default = [
""
""
""
];
};
on-click = "sleep 0.1 && pavucontrol";
};
"custom/startmenu" = {
tooltip = false;
format = "";
on-click = "rofi -show drun";
};
"custom/notification" = {
tooltip = false;
format = "{icon} {}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
exec = "swaync-client -swb";
on-click = "swaync-client -t &";
escape = true;
};
}
];
style = lib.concatStrings [
''
* {
border: none;
border-radius: 0px;
font-family: Maple Mono NF;
font-size: 16px;
min-height: 0px;
}
window#waybar {
background-color: #${palette.base00};
}
#workspaces {
background: #${palette.base01};
border-radius: 16px;
color: #${palette.base00};
margin: 4px 4px;
padding: 8px 5px;
}
#workspaces button {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0E}, #${palette.base0F}, #${palette.base0D}, #${palette.base09});
background-size: 300% 300%;
border-radius: 16px;
color: #${palette.base00};
font-weight: bold;
margin: 0px 3px;
opacity: 0.5;
padding: 0px 5px;
transition: ${betterTransition};
}
#workspaces button.active {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0E}, #${palette.base0F}, #${palette.base0D}, #${palette.base09});
background-size: 300% 300%;
border-radius: 16px;
color: #${palette.base00};
font-weight: bold;
margin: 0px 3px;
min-width: 40px;
opacity: 1.0;
padding: 0px 5px;
transition: ${betterTransition};
}
#workspaces button:hover {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0E}, #${palette.base0F}, #${palette.base0D}, #${palette.base09});
background-size: 300% 300%;
border-radius: 16px;
color: #${palette.base00};
font-weight: bold;
opacity: 0.8;
transition: ${betterTransition};
}
@keyframes gradient_horizontal {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@keyframes swiping {
0% { background-position: 0% 200%; }
100% { background-position: 200% 200%; }
}
tooltip {
background: #${palette.base00};
border: 1px solid #${palette.base0E};
border-radius: 12px;
}
tooltip label {
color: #${palette.base07};
}
#window, #pulseaudio, #cpu, #memory, #idle_inhibitor {
background: #${palette.base01};
border-radius: 24px 10px 24px 10px;
color: #${palette.base05};
font-weight: bold;
margin: 4px 0px;
margin-left: 7px;
padding: 0px 18px;
}
#custom-startmenu {
background: #${palette.base01};
border-radius: 0px 0px 40px 0px;
color: #${palette.base0D};
font-size: 28px;
margin: 0px;
padding: 0px 30px 0px 15px;
}
#mpris, #network, #custom-notification, #tray {
background: #${palette.base01};
border-radius: 10px 24px 10px 24px;
color: #${palette.base05};
font-weight: bold;
margin: 4px 0px;
margin-right: 7px;
padding: 0px 18px;
}
#clock {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0C}, #${palette.base0F}, #${palette.base0B}, #${palette.base08});
background-size: 300% 300%;
border-radius: 0px 0px 0px 40px;
color: #${palette.base00};
font-weight: bold;
margin: 0px;
padding: 0px 15px 0px 30px;
}
''
];
};
};
services = {
udiskie.enable = true;
swaync = {
enable = true;
style = builtins.fetchurl {
url = "https://github.com/catppuccin/swaync/releases/download/v0.2.3/mocha.css";
sha256 = "1xr1wkg4zb467b35xhsfqiwhimfnn88i3ml5rf173rkm7fyby9qy";
};
};
};
wayland.windowManager.hyprland = {
enable = true;
systemd.variables = ["--all"];
settings = let
mod = "SUPER";
modC = "SUPER CTRL";
modS = "SUPER SHIFT";
browser = "firefox-nightly";
colorPicker = "notify-send -i gtk-color-picker $(${hyprpicker}/bin/hyprpicker -a) 'Copied to clipboard.'";
fileManager = "nautilus";
launcher = "rofi -show drun";
terminal = "wezterm";
screenshot = mode: "${
hyprshot.overrideAttrs {
# Fixes cursors showing in region shots
src = pkgs.fetchFromGitHub {
owner = "BenCarmichael01";
repo = "Hyprshot";
rev = "84e2adcd5dd9060178d0d028ad032734797fba23";
hash = "sha256-XDKwBiUMWvxoWpkdJ0EK4kEqPSTZLcF6axHjom3c5Jk=";
};
}
}/bin/hyprshot --clipboard-only -m ${mode}";
in {
decoration.rounding = 10;
dwindle.preserve_split = true;
gestures.workspace_swipe = true;
input.touchpad = {
clickfinger_behavior = true;
natural_scroll = true;
};
device = [
{
name = "logitech-usb-receiver";
sensitivity = -0.4;
}
];
layerrule = [
"dimaround, rofi"
];
animations = {
enabled = true;
bezier = [
"overshot,0.7,0.6,0.1,1.1"
"bounce,1,1.6,0.1,0.85"
];
animation = [
"windows,1,5,bounce,popin"
"border,1,20,default"
"fade,1,5,default"
"workspaces,1,5,overshot,slide"
];
};
general = {
border_size = 2;
gaps_in = 10;
resize_on_border = true;
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = "rgba(595959aa)";
};
exec-once = [
"waybar"
"${mpvpaper}/bin/mpvpaper -vp -o 'no-audio loop' DP-1 ${builtins.toString ./wall.mp4}"
"mullvad connect"
];
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
};
monitor = [
"eDP-1, disable"
"DP-1, 2560x1440@165, auto, auto"
];
env = [
# Nvidia stuff
"GBM_BACKEND, nvidia-drm"
"__GLX_VENDOR_LIBRARY_NAME, nvidia"
"LIBVA_DRIVER_NAME, nvidia"
"WLR_DRM_DEVICES, $HOME/.config/hypr/card"
# Cursors
"HYPRCURSOR_SIZE, 24"
"XCURSOR_SIZE, 24"
];
bindm = [
"${mod}, mouse:272, movewindow"
"${mod}, mouse:273, resizewindow"
];
bind =
[
# Apps
"${mod}, c, exec, ${colorPicker}"
"${mod}, w, exec, ${browser}"
"${mod}, e, exec, ${fileManager}"
"${mod}, r, exec, ${launcher}"
"${mod}, Return, exec, ${terminal}"
# Screenshots
"${modS}, s, exec, ${screenshot "window"}"
"${modC}, 3, exec, ${screenshot "output -c"}"
"${modC}, 4, exec, ${screenshot "region -C 0,0"}"
# Mouse controls
"${mod}, mouse_down, workspace, e-1"
"${mod}, mouse_up, workspace, e+1"
# Quitting
"${mod}, q, killactive"
"${modS}, q, exit"
# Toggles
"${mod}, j, togglesplit"
"${mod}, Space, togglefloating"
# Focus movements
"${mod}, h, movefocus, l"
"${mod}, j, movefocus, d"
"${mod}, k, movefocus, u"
"${mod}, l, movefocus, r"
# Window movements
"${modS}, h, movewindow, l"
"${modS}, j, movewindow, d"
"${modS}, k, movewindow, u"
"${modS}, l, movewindow, r"
]
++ (
builtins.concatLists (builtins.genList (
x: let
ws = let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in [
# Workspaces
"${mod}, ${ws}, workspace, ${builtins.toString (x + 1)}"
"${modS}, ${ws}, movetoworkspace, ${builtins.toString (x + 1)}"
]
)
10)
);
};
};
}