From a69695dd736fb4eb404c4c44f9fb157c2677a744 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Tue, 25 Jun 2024 17:31:49 +0300 Subject: [PATCH] Add hyprland utilities Signed-off-by: Nikolaos Karaolidis --- .../common/configs/brightnessctl/default.nix | 12 ++++++++++ hosts/common/configs/btop/default.nix | 5 ++++ hosts/common/configs/fastfetch/default.nix | 5 ++++ hosts/common/configs/ranger/default.nix | 5 ++++ hosts/common/configs/tree/default.nix | 5 ++++ hosts/common/default.nix | 12 ++++------ users/common/default.nix | 11 ++------- .../options/home-manager/theme/default.nix | 5 ++++ users/configs/brightnessctl/default.nix | 10 ++++++++ users/configs/firefox/default.nix | 4 ++++ users/configs/gtk/default.nix | 6 ++--- users/configs/gtk/theme.css | 14 +++++------ users/configs/hyprland/default.nix | 12 ++++------ users/configs/pavucontrol/default.nix | 5 ++++ users/configs/pipewire/default.nix | 19 +++++++++++++++ users/configs/playerctl/default.nix | 17 ++++++++++++++ users/configs/qalculate/default.nix | 11 +++++++++ users/configs/rofi/default.nix | 4 ++++ users/configs/theme/default.nix | 23 ++++++++++++++++--- users/configs/wev/default.nix | 5 ++++ users/nick/default.nix | 8 ++++++- users/nick/nogui.nix | 2 +- 22 files changed, 162 insertions(+), 38 deletions(-) create mode 100644 hosts/common/configs/brightnessctl/default.nix create mode 100644 hosts/common/configs/btop/default.nix create mode 100644 hosts/common/configs/fastfetch/default.nix create mode 100644 hosts/common/configs/ranger/default.nix create mode 100644 hosts/common/configs/tree/default.nix create mode 100644 users/configs/brightnessctl/default.nix create mode 100644 users/configs/pavucontrol/default.nix create mode 100644 users/configs/pipewire/default.nix create mode 100644 users/configs/playerctl/default.nix create mode 100644 users/configs/qalculate/default.nix create mode 100644 users/configs/wev/default.nix diff --git a/hosts/common/configs/brightnessctl/default.nix b/hosts/common/configs/brightnessctl/default.nix new file mode 100644 index 0000000..cc9abf8 --- /dev/null +++ b/hosts/common/configs/brightnessctl/default.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ brightnessctl ]; + + services.udev.extraRules = '' + ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils-full}/bin/chgrp video /sys/class/backlight/%k/brightness" + ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils-full}/bin/chmod g+w /sys/class/backlight/%k/brightness" + ACTION=="add", SUBSYSTEM=="leds", RUN+="${pkgs.coreutils-full}/bin/chgrp input /sys/class/leds/%k/brightness" + ACTION=="add", SUBSYSTEM=="leds", RUN+="${pkgs.coreutils-full}/bin/chmod g+w /sys/class/leds/%k/brightness" + ''; +} diff --git a/hosts/common/configs/btop/default.nix b/hosts/common/configs/btop/default.nix new file mode 100644 index 0000000..29c4959 --- /dev/null +++ b/hosts/common/configs/btop/default.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ btop ]; +} diff --git a/hosts/common/configs/fastfetch/default.nix b/hosts/common/configs/fastfetch/default.nix new file mode 100644 index 0000000..23745db --- /dev/null +++ b/hosts/common/configs/fastfetch/default.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ fastfetch ]; +} diff --git a/hosts/common/configs/ranger/default.nix b/hosts/common/configs/ranger/default.nix new file mode 100644 index 0000000..bae7f36 --- /dev/null +++ b/hosts/common/configs/ranger/default.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ ranger ]; +} diff --git a/hosts/common/configs/tree/default.nix b/hosts/common/configs/tree/default.nix new file mode 100644 index 0000000..3fe33f9 --- /dev/null +++ b/hosts/common/configs/tree/default.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ tree ]; +} diff --git a/hosts/common/default.nix b/hosts/common/default.nix index 0c8b317..689548b 100644 --- a/hosts/common/default.nix +++ b/hosts/common/default.nix @@ -4,6 +4,7 @@ imports = [ ./configs/persist ./configs/sops + ./configs/brightnessctl ./configs/pipewire ./configs/zsh ./configs/neovim @@ -12,6 +13,10 @@ ./configs/nix-ld ./configs/git ./configs/gpg-agent + ./configs/tree + ./configs/ranger + ./configs/btop + ./configs/fastfetch ./scripts/cleanup ]; @@ -32,13 +37,6 @@ networking.networkmanager.enable = true; i18n.defaultLocale = "en_US.UTF-8"; - environment.systemPackages = with pkgs; [ - tree - ranger - btop - fastfetch - ]; - users = { mutableUsers = false; defaultUserShell = pkgs.zsh; diff --git a/users/common/default.nix b/users/common/default.nix index 7bb2db4..50b9f7a 100644 --- a/users/common/default.nix +++ b/users/common/default.nix @@ -1,4 +1,4 @@ -{ config, inputs, pkgs, ... }: +{ config, inputs, ... }: { imports = [ @@ -21,14 +21,7 @@ ./options/home-manager/theme ]; - home = { - packages = with pkgs; [ - pavucontrol - ]; - - stateVersion = "24.05"; - }; - + home.stateVersion = "24.05"; systemd.user.startServices = "sd-switch"; nix.settings = config.nix.settings; }]; diff --git a/users/common/options/home-manager/theme/default.nix b/users/common/options/home-manager/theme/default.nix index ec88b19..0301ffa 100644 --- a/users/common/options/home-manager/theme/default.nix +++ b/users/common/options/home-manager/theme/default.nix @@ -7,6 +7,11 @@ let runtimeInputs = with pkgs; [ coreutils-full ]; bashOptions = [ "nounset" "pipefail" ]; text = '' + if [ -z "$WAYLAND_DISPLAY" ]; then + echo "No Wayland session active. Exiting." + exit 0 + fi + [ ! -L "${cfg.configDir}/wallpaper" ] && ln -sf "${cfg.wallpaper}" "${cfg.configDir}/wallpaper" [ ! -f "${cfg.configDir}/mode" ] && echo "${cfg.mode}" > "${cfg.configDir}/mode" diff --git a/users/configs/brightnessctl/default.nix b/users/configs/brightnessctl/default.nix new file mode 100644 index 0000000..0a41730 --- /dev/null +++ b/users/configs/brightnessctl/default.nix @@ -0,0 +1,10 @@ +{ user ? throw "user argument is required" }: { pkgs, ... }: + +{ + home-manager.users."${user.name}" = { + wayland.windowManager.hyprland.settings.bindle = [ + ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl -q s 5%+" + ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl -q s 5%-" + ]; + }; +} diff --git a/users/configs/firefox/default.nix b/users/configs/firefox/default.nix index e3302e2..09f11fa 100644 --- a/users/configs/firefox/default.nix +++ b/users/configs/firefox/default.nix @@ -88,6 +88,10 @@ }; }; + wayland.windowManager.hyprland.settings.bind = [ + "$mod, b, exec, ${pkgs.firefox}/bin/firefox" + ]; + home.persistence = { "/persist${user.home}".directories = [ ".mozilla" ]; "/cache${user.home}".directories = [ ".cache/mozilla" ]; diff --git a/users/configs/gtk/default.nix b/users/configs/gtk/default.nix index 5de26c0..38e5e11 100644 --- a/users/configs/gtk/default.nix +++ b/users/configs/gtk/default.nix @@ -32,7 +32,7 @@ in theme.extraConfig = let name = "theme-gtk"; in "${pkgs.writeShellApplication { inherit name; - runtimeInputs = with pkgs; [ glib ]; + runtimeInputs = with pkgs; [ dconf ]; text = '' MODE=$(cat "${hmConfig.theme.configDir}/mode") @@ -42,8 +42,8 @@ in GTK_THEME="adw-gtk3-dark" fi - gsettings set org.gnome.desktop.interface gtk-theme "$GTK_THEME" - gsettings set org.gnome.desktop.interface color-scheme "prefer-$MODE" + dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'" + dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'" ''; }}/bin/${name} &"; }; diff --git a/users/configs/gtk/theme.css b/users/configs/gtk/theme.css index f90d9df..3310a9c 100644 --- a/users/configs/gtk/theme.css +++ b/users/configs/gtk/theme.css @@ -6,7 +6,7 @@ @define-color accent_bg_color {{colors.primary_container.default.hex}}; @define-color accent_fg_color {{colors.on_primary.default.hex}}; -@define-color accent_color @accent_bg_color; +@define-color accent_color {{colors.primary.default.hex}}; @define-color headerbar_bg_color @window_bg_color; @define-color headerbar_fg_color @window_fg_color; @@ -30,19 +30,19 @@ @define-color warning_bg_color {{colors.warning_container.default.hex}}; @define-color warning_fg_color {{colors.on_warning.default.hex}}; -@define-color warning_color @warning_bg_color; +@define-color warning_color {{colors.warning.default.hex}}; @define-color error_bg_color {{colors.error_container.default.hex}}; @define-color error_fg_color {{colors.on_error.default.hex}}; -@define-color error_color @error_bg_color; +@define-color error_color {{colors.error.default.hex}}; @define-color success_bg_color {{colors.success_container.default.hex}}; @define-color success_fg_color {{colors.on_success.default.hex}}; -@define-color success_color @success_bg_color; +@define-color success_color {{colors.success.default.hex}}; @define-color destructive_bg_color {{colors.danger_container.default.hex}}; @define-color destructive_fg_color {{colors.on_danger.default.hex}}; -@define-color destructive_color @destructive_bg_color; +@define-color destructive_color {{colors.danger.default.hex}}; -@panel_bg_color @window_bg_color -@panel_fg_color @window_fg_color +@define-color panel_bg_color @window_bg_color; +@define-color panel_fg_color @window_fg_color; diff --git a/users/configs/hyprland/default.nix b/users/configs/hyprland/default.nix index d8d81bd..6c95d81 100644 --- a/users/configs/hyprland/default.nix +++ b/users/configs/hyprland/default.nix @@ -1,8 +1,5 @@ -{ user ? throw "user argument is required" }: { config, lib, pkgs, ... }: +{ user ? throw "user argument is required" }: { lib, pkgs, ... }: -let - hmConfig = config.home-manager.users."${user.name}"; -in { programs.hyprland.enable = true; @@ -15,9 +12,8 @@ in bind = [ "$mod, Return, exec, $term" - "$mod, r, exec, ${pkgs.rofi-wayland}/bin/rofi -cache-dir ${hmConfig.xdg.cacheHome}/rofi -show drun" - "$mod, b, exec, ${pkgs.firefox}/bin/firefox" + "$mod, `, togglespecialworkspace" "$mod, 1, workspace, 1" "$mod, 2, workspace, 2" "$mod, 3, workspace, 3" @@ -29,6 +25,7 @@ in "$mod, 9, workspace, 9" "$mod, 0, workspace, 10" + "$mod_SHIFT, `, movetoworkspacesilent, special" "$mod_SHIFT, 1, movetoworkspacesilent, 1" "$mod_SHIFT, 2, movetoworkspacesilent, 2" "$mod_SHIFT, 3, movetoworkspacesilent, 3" @@ -75,6 +72,7 @@ in "$mod_SHIFT, Tab, bringactivetotop" "$mod, f, fullscreen, 0" + "$mod, m, fullscreen, 1" "$mod, p, pin" "$mod, Space, togglefloating" "$mod, Space, centerwindow" @@ -100,7 +98,7 @@ in }; programs.zsh.loginExtra = lib.mkAfter '' - if [ -z "''${WAYLAND_DISPLAY}" ] && [ -n "''${XDG_VTNR}" ] && [ "''${XDG_VTNR}" -eq 1 ]; then + if [ -z "$WAYLAND_DISPLAY" ] && [ -n "$XDG_VTNR" ] && [ "$XDG_VTNR" -eq 1 ]; then hyprland &> /tmp/hyprland.log fi ''; diff --git a/users/configs/pavucontrol/default.nix b/users/configs/pavucontrol/default.nix new file mode 100644 index 0000000..0bcd65e --- /dev/null +++ b/users/configs/pavucontrol/default.nix @@ -0,0 +1,5 @@ +{ user ? throw "user argument is required" }: { pkgs, ... }: + +{ + home-manager.users."${user.name}".home.packages = with pkgs; [ pavucontrol ]; +} diff --git a/users/configs/pipewire/default.nix b/users/configs/pipewire/default.nix new file mode 100644 index 0000000..ba4d9f5 --- /dev/null +++ b/users/configs/pipewire/default.nix @@ -0,0 +1,19 @@ +{ user ? throw "user argument is required" }: { pkgs, ... }: + +{ + home-manager.users."${user.name}" = { + wayland.windowManager.hyprland.settings = { + bindle = [ + ", XF86AudioRaiseVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ -l 2.0 2%+" + ", XF86AudioLowerVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ -l 2.0 2%-" + "CTRL, XF86AudioRaiseVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SOURCE@ -l 1.0 2%+" + "CTRL, XF86AudioLowerVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SOURCE@ -l 1.0 2%-" + ]; + + bindl = [ + ", XF86AudioMute, exec, ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec, ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ]; + }; + }; +} diff --git a/users/configs/playerctl/default.nix b/users/configs/playerctl/default.nix new file mode 100644 index 0000000..a1204a6 --- /dev/null +++ b/users/configs/playerctl/default.nix @@ -0,0 +1,17 @@ +{ user ? throw "user argument is required" }: { pkgs, ... }: + +{ + home-manager.users."${user.name}" = { + home.packages = with pkgs; [ playerctl ]; + services.playerctld.enable = true; + + wayland.windowManager.hyprland.settings.bindle = [ + ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause" + ", XF86AudioStop, exec, ${pkgs.playerctl}/bin/playerctl stop" + ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next" + ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous" + "CTRL, XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl position 10+" + "CTRL, XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl position 10-" + ]; + }; +} diff --git a/users/configs/qalculate/default.nix b/users/configs/qalculate/default.nix new file mode 100644 index 0000000..6cd4afc --- /dev/null +++ b/users/configs/qalculate/default.nix @@ -0,0 +1,11 @@ +{ user ? throw "user argument is required" }: { config, pkgs, ... }: + +{ + home-manager.users."${user.name}" = { + home.packages = with pkgs; [ qalculate-gtk ]; + + wayland.windowManager.hyprland.settings.bind = [ + ", XF86Calculator, exec, ${pkgs.qalculate-gtk}/bin/qalculate-gtk" + ]; + }; +} diff --git a/users/configs/rofi/default.nix b/users/configs/rofi/default.nix index 5cedc33..467288d 100644 --- a/users/configs/rofi/default.nix +++ b/users/configs/rofi/default.nix @@ -9,5 +9,9 @@ in packages = with pkgs; [ rofi-wayland ]; persistence."/cache${user.home}".directories = [ "${hmConfig.xdg.relativeCacheHome}/rofi" ]; }; + + wayland.windowManager.hyprland.settings.bind = [ + "$mod, r, exec, ${pkgs.rofi-wayland}/bin/rofi -cache-dir ${hmConfig.xdg.cacheHome}/rofi -show drun" + ]; }; } diff --git a/users/configs/theme/default.nix b/users/configs/theme/default.nix index 7035aff..9b65313 100644 --- a/users/configs/theme/default.nix +++ b/users/configs/theme/default.nix @@ -1,4 +1,4 @@ -{ user ? throw "user argument is required" }: { config, pkgs, ... }: +{ user ? throw "user argument is required" }: { config, inputs, lib, pkgs, ... }: let hmConfig = config.home-manager.users."${user.name}"; @@ -6,7 +6,24 @@ in { home-manager.users."${user.name}" = { theme.enable = true; - wayland.windowManager.hyprland.initExtraConfig = "${hmConfig.theme.pkg}/bin/theme &"; - home.persistence."/persist${user.home}".directories = [ "${hmConfig.xdg.relativeConfigHome}/theme" ]; + + wayland.windowManager.hyprland = { + initExtraConfig = '' + ${hmConfig.theme.pkg}/bin/theme & + ''; + + settings.bind = [ + "CTRL_ALT, r, exec, ${hmConfig.theme.pkg}/bin/theme" + "CTRL_ALT, t, exec, ${hmConfig.theme.pkg}/bin/theme toggle" + ]; + }; + + home = { + activation.themeInit = inputs.home-manager.lib.hm.dag.entryAfter [ "writeBoundary" ] '' + run ${hmConfig.theme.pkg}/bin/theme + ''; + + persistence."/persist${user.home}".directories = [ "${hmConfig.xdg.relativeConfigHome}/theme" ]; + }; }; } diff --git a/users/configs/wev/default.nix b/users/configs/wev/default.nix new file mode 100644 index 0000000..a04227f --- /dev/null +++ b/users/configs/wev/default.nix @@ -0,0 +1,5 @@ +{ user ? throw "user argument is required" }: { pkgs, ... }: + +{ + home-manager.users."${user.name}".home.packages = with pkgs; [ wev ]; +} diff --git a/users/nick/default.nix b/users/nick/default.nix index 7617f56..39432ef 100644 --- a/users/nick/default.nix +++ b/users/nick/default.nix @@ -10,12 +10,18 @@ in (import ../configs/matugen { inherit user; }) (import ../configs/firefox { inherit user; }) (import ../configs/hyprland { inherit user; }) + (import ../configs/wev { inherit user; }) + (import ../configs/brightnessctl { inherit user; }) + (import ../configs/pavucontrol { inherit user; }) + (import ../configs/pipewire { inherit user; }) + (import ../configs/playerctl { inherit user; }) (import ../configs/rofi { inherit user; }) (import ../configs/swww { inherit user; }) (import ../configs/kitty { inherit user; }) - (import ../configs/vscode { inherit user; }) (import ../configs/gtk { inherit user; }) (import ../configs/x { inherit user; }) + (import ../configs/vscode { inherit user; }) + (import ../configs/qalculate { inherit user; }) ]; home-manager.users.nick = { diff --git a/users/nick/nogui.nix b/users/nick/nogui.nix index 7c7ef93..69934f2 100644 --- a/users/nick/nogui.nix +++ b/users/nick/nogui.nix @@ -25,7 +25,7 @@ in fullName = "Nikolaos Karaolidis"; description = user.fullName; hashedPasswordFile = config.sops.secrets.nick-password.path; - extraGroups = [ "wheel" ]; + extraGroups = [ "wheel" "video" ]; linger = true; uid = 1000; };