From daaa7f57fc25708769cb4829c34301b14dfd2af8 Mon Sep 17 00:00:00 2001 From: th3r00t Date: Mon, 18 Aug 2025 13:03:08 -0400 Subject: [PATCH] Switched to latest firmware, and moved hyprland and waybar to their own files --- configuration.nix | 31 +- hardware-configuration.nix | 1 + home.nix | 668 +------------------------------------ includes/hyprland.nix | 168 ++++++++++ includes/waybar.nix | 503 ++++++++++++++++++++++++++++ 5 files changed, 697 insertions(+), 674 deletions(-) create mode 100644 includes/hyprland.nix create mode 100644 includes/waybar.nix diff --git a/configuration.nix b/configuration.nix index 00836e9..37437e4 100644 --- a/configuration.nix +++ b/configuration.nix @@ -192,8 +192,8 @@ # services.xserver.enable = true; # Enable the KDE Plasma Desktop Environment. - services.displayManager.sddm.enable = true; - services.desktopManager.plasma6.enable = true; + # services.displayManager.sddm.enable = true; + # services.desktopManager.plasma6.enable = true; # Configure keymap in X11 # services.xserver.xkb = { @@ -223,14 +223,25 @@ # Enable touchpad support (enabled default in most desktopManager). services.libinput.enable = true; - fonts.packages = with pkgs; [ - nerd-fonts.fira-code - nerd-fonts.space-mono - nerd-fonts.sauce-code-pro - nerd-fonts.monofur - nerd-fonts.noto - nerd-fonts.fira-mono - ]; + fonts = { + enableDefaultPackages = true; + fontDir.enable = true; + packages = with pkgs; [ + # nerd-fonts.fira-code + # nerd-fonts.space-mono + # nerd-fonts.sauce-code-pro + # nerd-fonts.monofur + # nerd-fonts.noto + # nerd-fonts.fira-mono + noto-fonts + noto-fonts-cjk-sans + noto-fonts-emoji + font-awesome + material-design-icons + noto-fonts-emoji + ]++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); + + }; # Define a user account. Don't forget to set a password with ‘passwd’. users.users.th3r00t = { diff --git a/hardware-configuration.nix b/hardware-configuration.nix index e914c6e..2692438 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -10,6 +10,7 @@ boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; boot.initrd.kernelModules = [ ]; + boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; diff --git a/home.nix b/home.nix index 13c0ab8..011fd1d 100644 --- a/home.nix +++ b/home.nix @@ -1,5 +1,4 @@ { config, pkgs, ... }: - { home.username = "th3r00t"; home.homeDirectory = "/home/th3r00t"; @@ -36,9 +35,12 @@ home.file.".ssh/allowed_signers".text = '' * ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8P/3yzsruekSaZ9b+yk429VTcfCtI1j8jnkNbPAgnr th3r00t@nixos ''; + imports = [ + includes/hyprland.nix + ]; xdg.enable = true; programs.nix-index.enable = true; - + fonts.fontconfig.enable = true; home.packages = with pkgs; [ mesa-demos bluez @@ -463,668 +465,6 @@ bind F3 send-keys 'igrep .' C-m cat = "bat"; }; }; - wayland.windowManager.hyprland = { - enable = true; - systemd.enable = true; - xwayland.enable = true; - plugins = [ - # pkgs.hyprlandPlugins.hyprbars - ]; - settings = { - input = { - kb_layout = "us"; - kb_options = "caps:escape"; - touchpad = { - natural_scroll = true; - }; - }; - decoration = { - rounding = "10"; - rounding_power = "2"; - active_opacity = "1"; - inactive_opacity = ".7"; - shadow = { - enabled = true; - range = "4"; - render_power = "3"; - color = "rgba(1a1a1aee)"; - }; - blur = { - enabled = true; - size = "3"; - passes = "1"; - vibrancy = "0.1696"; - }; - }; - "$mainMod" = "SUPER"; - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - "$mainMod ALT, mouse:272, resizewindow" - ]; - }; - extraConfig = '' - general { - gaps_in = 5 - gaps_out = 5 - border_size = 1 - col.active_border = rgb(b000b5) - col.inactive_border = rgb(1f2335) - resize_on_border = true - allow_tearing = false - layout = dwindle - } - - 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 - default_split_ratio = 1.1 - force_split = 0 - } - - exec-once = waybar - monitor = eDP-1, preferred,0x0,2 - # monitor = Virtual-1, 2800x1752@120, 1920x0, 1 - - $terminal = footclient -e tmux new-session zsh -c '~/.local/usr/bin/tmuxstartup.sh' - $fileManager = footclient -T vifm -e vifm - $systeminfo = hyprsysteminfo - $menu = wofi --show drun - $browser = qutebrowser - $notes = footclient -T capture -e pytui -n - $sysmon = footclient -T system-monitor -e bashtop - - bind = $mainMod SHIFT, M, exec, hyprvirtmon.py - bind = $mainMod SHIFT, Return, exec, $terminal - bind = $mainMod, E, exec, $fileManager - bind = $mainMod SHIFT, C, killactive - bind = $mainMod SHIFT, Q, exit - bind = $mainMod, V, togglefloating - bind = $mainMod, R, exec, $menu - bind = $mainMod, B, exec, $browser - bind = $mainMod, M, exec, $sysmon - bind = $mainMod CTRL, N, exec, $notes - # bind = $mainMod, P, exec, $menu - bind = $mainMod, V, togglefloating - bind = $mainMod, P, pseudo, # dwindle - bind = $mainMod, TAB, togglesplit, # dwindle - bind = $mainMod, Y, fullscreen, 1 - - # Move focus with mainMod + arrow keys - bind = $mainMod, left, movefocus, l - bind = $mainMod, right, movefocus, r - bind = $mainMod, up, movefocus, u - bind = $mainMod, down, movefocus, d - # Move focus with mainMod + Vim keys - bind = $mainMod, H, movefocus, l - bind = $mainMod, SEMICOLON, movefocus, r - bind = $mainMod, K, movefocus, u - bind = $mainMod, J, movefocus, d - - # Switch workspaces with mainMod + [0-9] - bind = $mainMod, 1, workspace, 1 - bind = $mainMod, 2, workspace, 2 - bind = $mainMod, 3, workspace, 3 - bind = $mainMod, 4, workspace, 4 - bind = $mainMod, 5, workspace, 5 - bind = $mainMod, 6, workspace, 6 - bind = $mainMod, 7, workspace, 7 - bind = $mainMod, 8, workspace, 8 - bind = $mainMod, 9, workspace, 9 - bind = $mainMod, 0, workspace, 10 - - # Move active window to a workspace with mainMod + SHIFT + [0-9] - bind = $mainMod SHIFT, 1, movetoworkspace, 1 - bind = $mainMod SHIFT, 2, movetoworkspace, 2 - bind = $mainMod SHIFT, 3, movetoworkspace, 3 - bind = $mainMod SHIFT, 4, movetoworkspace, 4 - bind = $mainMod SHIFT, 5, movetoworkspace, 5 - bind = $mainMod SHIFT, 6, movetoworkspace, 6 - bind = $mainMod SHIFT, 7, movetoworkspace, 7 - bind = $mainMod SHIFT, 8, movetoworkspace, 8 - bind = $mainMod SHIFT, 9, movetoworkspace, 9 - bind = $mainMod SHIFT, 0, movetoworkspace, 10 - - bind = $mainMod, S, togglespecialworkspace, magic - bind = $mainMod SHIFT, S, movetoworkspace, special:magic - - bind = $mainMod, mouse_down, workspace, e+1 - bind = $mainMod, mouse_up, workspace, e-1 - - bindm = $mainMod, mouse:272, movewindow - bindm = $mainMod, mouse:273, resizewindow - - bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ - bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- - bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle - bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ - bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- - -# Requires playerctl - bindl = , XF86AudioNext, exec, playerctl next - bindl = , XF86AudioPause, exec, playerctl play-pause - bindl = , XF86AudioPlay, exec, playerctl play-pause - bindl = , XF86AudioPrev, exec, playerctl previous - - - bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" - bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred,auto,auto" - - windowrule = float,title:^(capture)$ - windowrule = size 800 600,title:^(capture)$ - windowrule = float,title:^(system-monitor)$ - windowrule = size 1024 768,title:^(system-monitor)$ - windowrulev2 = opacity 1.0 override,class:^(firefox)$ - - # Ignore maximize requests from apps. You'll probably like this. - windowrule = suppressevent maximize, class:.* - - # Fix some dragging issues with XWayland - windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 - - ''; - }; - programs.waybar = { - enable = true; - settings = { - mainBar = { - layer = "top"; - position = "top"; - height = 30; - modules-left = [ "hyprland/workspaces" "hyprland/mode" "hyprland/window" ]; - modules-center = [ "clock" ]; - modules-right = [ - "mpd" - "idle_inhibitor" - "pulseaudio" - "network" - "power-profiles-daemon" - "cpu" - "memory" - "temperature" - "backlight" - "keyboard-state" - "battery" - "tray" - "clock" - "custom/power" - ]; - - "hyprland/workspaces" = { - format = "{name}"; - }; - "hyprland/window" = { - max-length = 50; - }; - clock = { - format = "{:%Y-%m-%d %H:%M}"; - tooltip = false; - }; - cpu = { format = "{usage}%"; }; - memory = { format = "{}%"; }; - network = { - format-wifi = "{essid} ({signalStrength}%)"; - format-ethernet = "{ifname}: {ipaddr}/{cidr}"; - }; - battery = { - format = "{capacity}%"; - format-charging = "⚡ {capacity}%"; - }; - }; - }; - style = '' - * { - /* `otf-font-awesome` is required to be installed for icons */ -color: #565f89; - font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; - font-size: 15px; - border-radius: 10px; -margin: 0px 5px 0px 5px; - background-color: #1f2335 - } - - window#waybar { - background-color: rgba(43, 48, 59, 0.5); - border-bottom: 3px solid rgba(100, 114, 125, 0.5); -color: #ffffff; - transition-property: background-color; - transition-duration: .5s; - } - - window#waybar.hidden { -opacity: 0.2; - } - - /* - window#waybar.empty { - } - window#waybar.solo { - } - */ - - window#waybar.termite { - } - - window#waybar.chromium { -border: none; - } - - button { - /* Use box-shadow instead of border so the text isn't offset */ - box-shadow: inset 0 -3px transparent; - /* Avoid rounded borders under each button name */ -border: none; - border-radius: 0; - } - - /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ -button:hover { -background: inherit; - box-shadow: inset 0 -3px #ffffff; - } - - /* you can set a style on hover for any module like this */ - -#workspaces button { -padding: 0 5px; - background-color: transparent; -color: #ffffff; -} - -#workspaces button:hover { -background: rgba(0, 0, 0, 0.2); -} - -#workspaces button.focused { - background-color: #64727D; - box-shadow: inset 0 -3px #ffffff; -} - -#workspaces button.urgent { - background-color: #eb4d4b; -} - -#mode { - /* background-color: #64727D; */ - box-shadow: inset 0 -3px #ffffff; -} - -#clock, -#battery, -#cpu, -#memory, -#disk, -#temperature, -#backlight, -#network, -#pulseaudio, -#wireplumber, -#custom-media, -#tray, -#mode, -#idle_inhibitor, -#scratchpad, -#power-profiles-daemon, -#mpd { -padding: 0 10px; - /* color: #ffffff; */ -} - -#window, -#workspaces { -margin: 0 4px; -} - -/* If workspaces is the leftmost module, omit left margin */ -.modules-left > widget:first-child > #workspaces { - margin-left: 0; -} - -/* If workspaces is the rightmost module, omit right margin */ -.modules-right > widget:last-child > #workspaces { - margin-right: 0; -} - -#clock { - /* background-color: #64727D; */ -} - -#battery { - /* background-color: #ffffff; */ - /* color: #000000; */ -} - -#battery.charging, #battery.plugged { -color: #4fd6be; - /* background-color: #26A65B; */ -} - -@keyframes blink { - to { - /* background-color: #ffffff; */ -color: #000000; - } -} - -/* Using steps() instead of linear as a timing function to limit cpu usage */ -#battery.critical:not(.charging) { - /* background-color: #f53c3c; */ -color: #ff007c; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: steps(12); - animation-iteration-count: infinite; - animation-direction: alternate; -} - -#power-profiles-daemon { - padding-right: 15px; -} - -#power-profiles-daemon.performance { - /* background-color: #f53c3c; */ -color: #c53b53; -} - -#power-profiles-daemon.balanced { - /* background-color: #2980b9; */ -color: #565f89; -} - -#power-profiles-daemon.power-saver { - /* background-color: #2ecc71; */ -color: #9d7cd8; -} - -label:focus { - /* background-color: #000000; */ - } - -#cpu { - /* background-color: #2ecc71; */ - /* color: #000000; */ -} - -#memory { - /* background-color: #9b59b6; */ -} - -#disk { - /* background-color: #964B00; */ -} - -#backlight { - /* background-color: #90b1b1; */ -} - -#network { - /* background-color: #2980b9; */ -} - -#network.disconnected { - /* background-color: #f53c3c; */ -} - - -#wireplumber { - /* background-color: #fff0f5; */ - /* color: #000000; */ -} - -#wireplumber.muted { - /* background-color: #f53c3c; */ -} - -#custom-media { - /* background-color: #66cc99; */ -color: #2a5c45; - min-width: 100px; -} - -#custom-media.custom-spotify { - background-color: #66cc99; -} - -#custom-media.custom-vlc { - background-color: #ffa000; -} - -#temperature { - /* background-color: #f0932b; */ -} - -#temperature.critical { - background-color: #eb4d4b; -} - -#tray { - /* background-color: #2980b9; */ -} - -#tray > .passive { - -gtk-icon-effect: dim; -} - -#tray > .needs-attention { - -gtk-icon-effect: highlight; -color: #eb4d4b; -} - -#idle_inhibitor { -color: #2d3436; -} - -#idle_inhibitor.activated { - /* background-color: #ecf0f1; */ -color: #2d3436; -} - -#mpd { - /* background-color: #66cc99; */ -color: #2a5c45; -} - -#mpd.disconnected { - /* background-color: #f53c3c; */ -} - -#mpd.stopped { - /* background-color: #90b1b1; */ -} - -#mpd.paused { - /* background-color: #51a37a; */ -} - -#language { -background: #00b093; -color: #740864; -padding: 0 5px; - min-width: 16px; -} - -#keyboard-state { - /* background: #97e1ad; */ -color: #000000; -padding: 0 0px; - min-width: 16px; -} - -#keyboard-state > label { -padding: 0 5px; -} - -#keyboard-state > label.locked { -background: rgba(0, 0, 0, 0.2); -} - -#scratchpad { - /* background: rgba(0, 0, 0, 0.2); */ -} - -#scratchpad.empty { - background-color: transparent; -} - -#privacy { -padding: 0; -} - -#privacy-item { -padding: 0 5px; -color: white; -} - -#privacy-item.screenshare { - background-color: #cf5700; -} - -#privacy-item.audio-in { - background-color: #1ca000; -} - -#privacy-item.audio-out { - background-color: #0069d4; -} - - -#waybar { - font-family: "SF Pro Display", Cantarell, Noto Sans, sans-serif; - font-size: 16px; -} - -#window { -padding: 0 10px; -} - -window#waybar { -border: none; - border-radius: 0; - box-shadow: none; - text-shadow: none; - transition-duration: 0s; -color: rgba(217, 216, 216, 1); -background: #1a1b26; -} - -#workspaces { -margin: 0 5px; -} - -#workspaces button { -padding: 0 8px; -color: #565f89; -border: 3px solid rgba(9, 85, 225, 0); - border-radius: 10px; - min-width: 33px; -} - -#workspaces button.visible { -color: #a9b1d6; -} - -#workspaces button.active { - border-top: 3px solid #7aa2f7; - border-bottom: 3px solid #7aa2f7; -} - -#workspaces button.urgent { - background-color: #a96d1f; -color: white; -} - -#workspaces button:hover { - box-shadow: inherit; - border-color: #bb9af7; -color: #bb9af7; -} - -/* Repeat style here to ensure properties are overwritten as there's no !important and button:hover above resets the colour */ - -#workspaces button.focused { -color: #7aa2f7; -} -#workspaces button.focused:hover { -color: #bb9af7; -} - -#pulseaudio:hover { -color: #565f89; -} - -#pulseaudio { - /* font-size: 26px; */ - /* background-color: #545c73; */ - /* color: #000000; */ -} - -#pulseaudio.muted { - /* background-color: #c53b53; */ -color: #c53b53; -} - -#custom-recorder { - font-size: 18px; -color:#ee2e24; -} - -#tray, -#mode, -#battery, -#temperature, -#cpu, -#memory, -#network, -#pulseaudio, -#idle_inhibitor, -#sway-language, -#backlight, -#custom-storage, -#custom-cpu_speed, -#custom-powermenu, -#custom-spotify, -#custom-weather, -#custom-mail, -#custom-media { -padding: 0 5px; - /* border-top: 3px solid rgba(217, 216, 216, 0.5); */ -} - -#clock { -margin: 0px 5px 0px 5px; - min-width: 30px; -} - -#battery.warning { -color: rgba(255, 210, 4, 1); -} - -#battery.critical { -color: rgba(238, 46, 36, 1); -} - -#battery.charging { -color: rgba(217, 216, 216, 1); -} - -#custom-storage.warning { -color: rgba(255, 210, 4, 1); -} - -#custom-storage.critical { -color: rgba(238, 46, 36, 1); -} - -@keyframes blink { - to { - background-color: #ffffff; -color: black; - } -} - - ''; - }; programs.hyprlock = { enable = true; settings = { diff --git a/includes/hyprland.nix b/includes/hyprland.nix new file mode 100644 index 0000000..b8dae46 --- /dev/null +++ b/includes/hyprland.nix @@ -0,0 +1,168 @@ +{ config, pkgs, ... }: +{ + imports = [ + ./waybar.nix + ]; + wayland.windowManager.hyprland = { + enable = true; + systemd.enable = true; + xwayland.enable = true; + plugins = [ + # pkgs.hyprlandPlugins.hyprbars + ]; + settings = { + input = { + kb_layout = "us"; + kb_options = "caps:escape"; + touchpad = { + natural_scroll = true; + }; + }; + decoration = { + rounding = "10"; + rounding_power = "2"; + active_opacity = "1"; + inactive_opacity = ".7"; + shadow = { + enabled = true; + range = "4"; + render_power = "3"; + color = "rgba(1a1a1aee)"; + }; + blur = { + enabled = true; + size = "3"; + passes = "1"; + vibrancy = "0.1696"; + }; + }; + "$mainMod" = "SUPER"; + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + "$mainMod ALT, mouse:272, resizewindow" + ]; + }; + extraConfig = '' + general { + gaps_in = 5 + gaps_out = 5 + border_size = 1 + col.active_border = rgb(b000b5) + col.inactive_border = rgb(1f2335) + resize_on_border = true + allow_tearing = false + layout = dwindle + } + + 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 + default_split_ratio = 1.1 + force_split = 0 + } + + exec-once = waybar + monitor = eDP-1, preferred,0x0,2 + # monitor = Virtual-1, 2800x1752@120, 1920x0, 1 + + $terminal = footclient -e tmux new-session zsh -c '~/.local/usr/bin/tmuxstartup.sh' + $fileManager = footclient -T vifm -e vifm + $systeminfo = hyprsysteminfo + $menu = wofi --show drun + $browser = qutebrowser + $notes = footclient -T capture -e pytui -n + $sysmon = footclient -T system-monitor -e bashtop + + bind = $mainMod SHIFT, M, exec, hyprvirtmon.py + bind = $mainMod SHIFT, Return, exec, $terminal + bind = $mainMod, E, exec, $fileManager + bind = $mainMod SHIFT, C, killactive + bind = $mainMod SHIFT, Q, exit + bind = $mainMod, V, togglefloating + bind = $mainMod, R, exec, $menu + bind = $mainMod, B, exec, $browser + bind = $mainMod, M, exec, $sysmon + bind = $mainMod CTRL, N, exec, $notes + # bind = $mainMod, P, exec, $menu + bind = $mainMod, V, togglefloating + bind = $mainMod, P, pseudo, # dwindle + bind = $mainMod, TAB, togglesplit, # dwindle + bind = $mainMod, Y, fullscreen, 1 + + # Move focus with mainMod + arrow keys + bind = $mainMod, left, movefocus, l + bind = $mainMod, right, movefocus, r + bind = $mainMod, up, movefocus, u + bind = $mainMod, down, movefocus, d + # Move focus with mainMod + Vim keys + bind = $mainMod, H, movefocus, l + bind = $mainMod, SEMICOLON, movefocus, r + bind = $mainMod, K, movefocus, u + bind = $mainMod, J, movefocus, d + + # Switch workspaces with mainMod + [0-9] + bind = $mainMod, 1, workspace, 1 + bind = $mainMod, 2, workspace, 2 + bind = $mainMod, 3, workspace, 3 + bind = $mainMod, 4, workspace, 4 + bind = $mainMod, 5, workspace, 5 + bind = $mainMod, 6, workspace, 6 + bind = $mainMod, 7, workspace, 7 + bind = $mainMod, 8, workspace, 8 + bind = $mainMod, 9, workspace, 9 + bind = $mainMod, 0, workspace, 10 + + # Move active window to a workspace with mainMod + SHIFT + [0-9] + bind = $mainMod SHIFT, 1, movetoworkspace, 1 + bind = $mainMod SHIFT, 2, movetoworkspace, 2 + bind = $mainMod SHIFT, 3, movetoworkspace, 3 + bind = $mainMod SHIFT, 4, movetoworkspace, 4 + bind = $mainMod SHIFT, 5, movetoworkspace, 5 + bind = $mainMod SHIFT, 6, movetoworkspace, 6 + bind = $mainMod SHIFT, 7, movetoworkspace, 7 + bind = $mainMod SHIFT, 8, movetoworkspace, 8 + bind = $mainMod SHIFT, 9, movetoworkspace, 9 + bind = $mainMod SHIFT, 0, movetoworkspace, 10 + + bind = $mainMod, S, togglespecialworkspace, magic + bind = $mainMod SHIFT, S, movetoworkspace, special:magic + + bind = $mainMod, mouse_down, workspace, e+1 + bind = $mainMod, mouse_up, workspace, e-1 + + bindm = $mainMod, mouse:272, movewindow + bindm = $mainMod, mouse:273, resizewindow + + bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ + bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- + bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ + bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- + +# Requires playerctl + bindl = , XF86AudioNext, exec, playerctl next + bindl = , XF86AudioPause, exec, playerctl play-pause + bindl = , XF86AudioPlay, exec, playerctl play-pause + bindl = , XF86AudioPrev, exec, playerctl previous + + + bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" + bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred,auto,auto" + + windowrule = float,title:^(capture)$ + windowrule = size 800 600,title:^(capture)$ + windowrule = float,title:^(system-monitor)$ + windowrule = size 1024 768,title:^(system-monitor)$ + windowrulev2 = opacity 1.0 override,class:^(firefox)$ + + # Ignore maximize requests from apps. You'll probably like this. + windowrule = suppressevent maximize, class:.* + + # Fix some dragging issues with XWayland + windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + + ''; + }; +} diff --git a/includes/waybar.nix b/includes/waybar.nix new file mode 100644 index 0000000..c0926aa --- /dev/null +++ b/includes/waybar.nix @@ -0,0 +1,503 @@ +{ config, pkgs, ... }: +{ + programs.waybar = { + enable = true; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 30; + modules-left = [ "hyprland/workspaces" "hyprland/mode" "hyprland/window" ]; + modules-center = [ "clock" ]; + modules-right = [ + "mpd" + "idle_inhibitor" + "pulseaudio" + "network" + "power-profiles-daemon" + "cpu" + "memory" + "temperature" + "backlight" + "keyboard-state" + "battery" + "tray" + "clock" + "custom/power" + ]; + + "hyprland/workspaces" = { + format = "{name}"; + }; + "hyprland/window" = { + max-length = 50; + }; + clock = { + format = "{:%Y-%m-%d %H:%M}"; + tooltip = false; + }; + cpu = { format = "{usage}%"; }; + memory = { format = "{}%"; }; + network = { + format-wifi = "{essid} ({signalStrength}%)"; + format-ethernet = "{ifname}: {ipaddr}/{cidr}"; + }; + battery = { + format = "{capacity}%"; + format-charging = "⚡ {capacity}%"; + }; + }; + }; + style = '' + * { + /* `otf-font-awesome` is required to be installed for icons */ +color: #565f89; + font-family: 'Font Awesome 6 Free Solid', Roboto, Helvetica, Arial, sans-serif; + font-size: 15px; + border-radius: 10px; +margin: 0px 5px 0px 5px; + background-color: #1f2335 + } + + window#waybar { + background-color: rgba(43, 48, 59, 0.5); + border-bottom: 3px solid rgba(100, 114, 125, 0.5); +color: #ffffff; + transition-property: background-color; + transition-duration: .5s; + } + + window#waybar.hidden { +opacity: 0.2; + } + + /* + window#waybar.empty { + } + window#waybar.solo { + } + */ + + window#waybar.termite { + } + + window#waybar.chromium { +border: none; + } + + button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each button name */ +border: none; + border-radius: 0; + } + + /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { +background: inherit; + box-shadow: inset 0 -3px #ffffff; + } + + /* you can set a style on hover for any module like this */ + +#workspaces button { +padding: 0 5px; + background-color: transparent; +color: #ffffff; +} + +#workspaces button:hover { +background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.focused { + background-color: #64727D; + box-shadow: inset 0 -3px #ffffff; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + /* background-color: #64727D; */ + box-shadow: inset 0 -3px #ffffff; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#power-profiles-daemon, +#mpd { +padding: 0 10px; + /* color: #ffffff; */ +} + +#window, +#workspaces { +margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + /* background-color: #64727D; */ +} + +#battery { + /* background-color: #ffffff; */ + /* color: #000000; */ +} + +#battery.charging, #battery.plugged { +color: #4fd6be; + /* background-color: #26A65B; */ +} + +@keyframes blink { + to { + /* background-color: #ffffff; */ +color: #000000; + } +} + +/* Using steps() instead of linear as a timing function to limit cpu usage */ +#battery.critical:not(.charging) { + /* background-color: #f53c3c; */ +color: #ff007c; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#power-profiles-daemon { + padding-right: 15px; +} + +#power-profiles-daemon.performance { + /* background-color: #f53c3c; */ +color: #c53b53; +} + +#power-profiles-daemon.balanced { + /* background-color: #2980b9; */ +color: #565f89; +} + +#power-profiles-daemon.power-saver { + /* background-color: #2ecc71; */ +color: #9d7cd8; +} + +label:focus { + /* background-color: #000000; */ + } + +#cpu { + /* background-color: #2ecc71; */ + /* color: #000000; */ +} + +#memory { + /* background-color: #9b59b6; */ +} + +#disk { + /* background-color: #964B00; */ +} + +#backlight { + /* background-color: #90b1b1; */ +} + +#network { + /* background-color: #2980b9; */ +} + +#network.disconnected { + /* background-color: #f53c3c; */ +} + + +#wireplumber { + /* background-color: #fff0f5; */ + /* color: #000000; */ +} + +#wireplumber.muted { + /* background-color: #f53c3c; */ +} + +#custom-media { + /* background-color: #66cc99; */ +color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + /* background-color: #f0932b; */ +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { + /* background-color: #2980b9; */ +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; +color: #eb4d4b; +} + +#idle_inhibitor { +color: #2d3436; +} + +#idle_inhibitor.activated { + /* background-color: #ecf0f1; */ +color: #2d3436; +} + +#mpd { + /* background-color: #66cc99; */ +color: #2a5c45; +} + +#mpd.disconnected { + /* background-color: #f53c3c; */ +} + +#mpd.stopped { + /* background-color: #90b1b1; */ +} + +#mpd.paused { + /* background-color: #51a37a; */ +} + +#language { +background: #00b093; +color: #740864; +padding: 0 5px; + min-width: 16px; +} + +#keyboard-state { + /* background: #97e1ad; */ +color: #000000; +padding: 0 0px; + min-width: 16px; +} + +#keyboard-state > label { +padding: 0 5px; +} + +#keyboard-state > label.locked { +background: rgba(0, 0, 0, 0.2); +} + +#scratchpad { + /* background: rgba(0, 0, 0, 0.2); */ +} + +#scratchpad.empty { + background-color: transparent; +} + +#privacy { +padding: 0; +} + +#privacy-item { +padding: 0 5px; +color: white; +} + +#privacy-item.screenshare { + background-color: #cf5700; +} + +#privacy-item.audio-in { + background-color: #1ca000; +} + +#privacy-item.audio-out { + background-color: #0069d4; +} + + +#waybar { + font-family: "SF Pro Display", Cantarell, Noto Sans, sans-serif; + font-size: 16px; +} + +#window { +padding: 0 10px; +} + +window#waybar { +border: none; + border-radius: 0; + box-shadow: none; + text-shadow: none; + transition-duration: 0s; +color: rgba(217, 216, 216, 1); +background: #1a1b26; +} + +#workspaces { +margin: 0 5px; +} + +#workspaces button { +padding: 0 8px; +color: #565f89; +border: 3px solid rgba(9, 85, 225, 0); + border-radius: 10px; + min-width: 33px; +} + +#workspaces button.visible { +color: #a9b1d6; +} + +#workspaces button.active { + border-top: 3px solid #7aa2f7; + border-bottom: 3px solid #7aa2f7; +} + +#workspaces button.urgent { + background-color: #a96d1f; +color: white; +} + +#workspaces button:hover { + box-shadow: inherit; + border-color: #bb9af7; +color: #bb9af7; +} + +/* Repeat style here to ensure properties are overwritten as there's no !important and button:hover above resets the colour */ + +#workspaces button.focused { +color: #7aa2f7; +} +#workspaces button.focused:hover { +color: #bb9af7; +} + +#pulseaudio:hover { +color: #565f89; +} + +#pulseaudio { + /* font-size: 26px; */ + /* background-color: #545c73; */ + /* color: #000000; */ +} + +#pulseaudio.muted { + /* background-color: #c53b53; */ +color: #c53b53; +} + +#custom-recorder { + font-size: 18px; +color:#ee2e24; +} + +#tray, +#mode, +#battery, +#temperature, +#cpu, +#memory, +#network, +#pulseaudio, +#idle_inhibitor, +#sway-language, +#backlight, +#custom-storage, +#custom-cpu_speed, +#custom-powermenu, +#custom-spotify, +#custom-weather, +#custom-mail, +#custom-media { +padding: 0 5px; + /* border-top: 3px solid rgba(217, 216, 216, 0.5); */ +} + +#clock { +margin: 0px 5px 0px 5px; + min-width: 30px; +} + +#battery.warning { +color: rgba(255, 210, 4, 1); +} + +#battery.critical { +color: rgba(238, 46, 36, 1); +} + +#battery.charging { +color: rgba(217, 216, 216, 1); +} + +#custom-storage.warning { +color: rgba(255, 210, 4, 1); +} + +#custom-storage.critical { +color: rgba(238, 46, 36, 1); +} + +@keyframes blink { + to { + background-color: #ffffff; +color: black; + } +} + + ''; + }; +}