{ config, pkgs, username, ... }: let volumeChange = pkgs.writeShellScript "volume-change" '' # FROM: https://github.com/jsimonrichard/nix-config/blob/master/modules/my-config/desktop/hyprland/home-manager/desktop/hyprland/keybinds.nix # Arbitrary but unique message tag msgTag="dunst-sound" # Change the volume using alsa(might differ if you use pulseaudio) wpctl $@ > /dev/null # Query wpctl for the current volume and whether or not the speaker is muted volume="$(wpctl get-volume $2 | awk '{print $2 * 100}')" mute="$(wpctl get-volume $2 | awk '{print $3}')" if [[ $volume == 0 || "$mute" == "[MUTED]" ]]; then # Show the sound muted notification dunstify -a "volumeChange" -u low -i audio-volume-muted -h string:x-dunst-stack-tag:$msgTag "Volume muted" else # Show the volume notification dunstify -a "volumeChange" -u low -i audio-volume-high -h string:x-dunst-stack-tag:$msgTag \ -h int:value:"$volume" "Volume: $volume%" fi ''; in { home.packages = with pkgs; [ dunst waybar swww rofi-wayland brightnessctl networkmanagerapplet # (pkgs.waybar.overrideAttrs (oldAttrs: { # mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; # })) ]; programs.hyprlock = { enable = true; settings = { background = { monitor = ""; # path = screenshot color = "rgba(152, 179, 166, 0.9)"; blur_passes = 1; blur_size = 7; noise = 0.0117; contrast = 0.8916; brightness = 0.8172; vibrancy = 0.1696; vibrancy_darkness = 0.0; }; input-field = { monitor = ""; size = "200, 50"; outline_thickness = 3; dots_size = 0.33; # Scale of input-field height, 0.2 - 0.8 dots_spacing = 0.15; # Scale of dots' absolute size, 0.0 - 1.0 dots_center = true; dots_rounding = -1; # -1 default circle, -2 follow input-field rounding outer_color = "rgb(151515)"; inner_color = "rgb(200, 200, 200)"; font_color = "rgb(10, 10, 10)"; fade_on_empty = true; fade_timeout = 1000; # Milliseconds before fade_on_empty is triggered. placeholder_text = ''Input Password...''; # Text rendered in the input box when it's empty. hide_input = false; rounding = -1; # -1 means complete rounding (circle/oval) check_color = "rgb(204, 136, 34)"; fail_color = "rgb(204, 34, 34)"; # if authentication failed, changes outer_color and fail message color fail_text = "$FAIL ($ATTEMPTS)"; # can be set to empty fail_transition = 300; # transition time in ms between normal outer_color and fail_color capslock_color = -1; numlock_color = -1; bothlock_color = -1; # when both locks are active. -1 means don't change outer color (same for above) invert_numlock = false; # change color if numlock is off position = "0, 200"; halign = "center"; valign = "center"; }; label = [ { monitor = ""; text = "cmd[update:1000] echo \"$TIME\""; color = "rgba(200, 200, 200, 1.0)"; font_size = 55; font_family = "JetBrainsMono Nerd Font"; position = "0, 150"; halign = "center"; valign = "bottom"; shadow_passes = 5; shadow_size = 10; } { monitor = ""; text = "$USER"; color = "rgba(200, 200, 200, 1.0)"; font_size = 20; font_family = "JetBrainsMono Nerd Font"; position = "0, 80"; halign = "center"; valign = "bottom"; shadow_passes = 5; shadow_size = 10; } ]; }; }; wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.settings = { "$mod" = "SUPER"; input = { kb_options = "compose:rctrl"; }; exec-once = [ "dunst" "waybar" "${pkgs.networkmanagerapplet}/bin/nm-applet --sm-disable --indicator" "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" ]; bind = [ "$mod, F, exec, firefox" "$mod, k, exec, kitty" ", Print, exec, grimblast copy area" "$mod, l, exec, hyprlock" # Add a keybinding to lock the screen "$mod, C, exec, codium" "$mod, E, exec, hyprctl dispatch exit" "$mod, code:51, exec, 1password" # super + \ ",XF86MonBrightnessDown, exec, brightnessctl s 5%-" ",XF86MonBrightnessUp, exec, brightnessctl s +5%" ] ++ ( # workspaces # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} builtins.concatLists (builtins.genList ( x: let ws = let c = (x + 1) / 10; in builtins.toString (x + 1 - (c * 10)); in [ "$mod, ${ws}, workspace, ${toString (x + 1)}" "$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}" ] ) 10) ); windowrulev2= [ # https://jbmorley.co.uk/posts/2024-02-13-1password-and-hyprland/ "float, title:(1Password)" "size 70% 70%, title:(1Password)" "center, title:(1Password)" "float,class:(org.kde.polkit-kde-authentication-agent-1)" "opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$" "bordercolor rgba(ed8796FF), class:org.kde.polkit-kde-authentication-agent-1" "dimaround, class:org.kde.polkit-kde-authentication-agent-1" "stayfocused, class:org.kde.polkit-kde-authentication-agent-1" ]; # Bind flags # l -> locked, will also work when an input inhibitor (e.g. a lockscreen) is active. # r -> release, will trigger on release of a key. # e -> repeat, will repeat when held. # n -> non-consuming, key/mouse events will be passed to the active window in addition to triggering the dispatcher. # m -> mouse, see below # t -> transparent, cannot be shadowed by other binds. # i -> ignore mods, will ignore modifiers. binde = [ ", XF86AudioRaiseVolume, exec, ${volumeChange} set-volume @DEFAULT_AUDIO_SINK@ 5%+ --limit 1.3" "CTRL, XF86AudioRaiseVolume, exec, ${volumeChange} set-volume @DEFAULT_AUDIO_SOURCE@ 5%+ --limit 1" ]; bindle = [ ", XF86AudioLowerVolume, exec, ${volumeChange} set-volume @DEFAULT_AUDIO_SINK@ 5%-" "CTRL, XF86AudioLowerVolume, exec, ${volumeChange} set-volume @DEFAULT_AUDIO_SOURCE@ 5%-" ]; bindl = [ ", XF86AudioMute, exec, ${volumeChange} set-mute @DEFAULT_AUDIO_SINK@ toggle" ]; }; }