From f9fd542206d64ec7b2fdf67a7c89a973f7eefd69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Mon, 8 May 2023 12:54:21 +0200 Subject: [PATCH] feat(hyprland): add random wallpaper service --- modules/programs/hyprland/config.nix | 26 +++++++++---------- modules/programs/hyprland/default.nix | 33 ++++++++++++++++--------- modules/programs/wallpaper/default.nix | 24 +++++++++++------- modules/programs/wallpaper/wallpaper.sh | 29 ++++++++++++++++------ 4 files changed, 70 insertions(+), 42 deletions(-) diff --git a/modules/programs/hyprland/config.nix b/modules/programs/hyprland/config.nix index 4672193..5feef36 100644 --- a/modules/programs/hyprland/config.nix +++ b/modules/programs/hyprland/config.nix @@ -165,26 +165,26 @@ in bind = $mainMod , RETURN , exec , kitty # XF86 keys - bind = , XF86AudioLowerVolume , exec , pamixer -d 5 - bind = , XF86AudioRaiseVolume , exec , pamixer -i 5 + binde = , XF86AudioLowerVolume , exec , pamixer -d 5 + binde = , XF86AudioRaiseVolume , exec , pamixer -i 5 bind = , XF86AudioMute , exec , pamixer -t bind = , XF86AudioNext , exec , playerctl -p "spotifyd,firefox" next bind = , XF86AudioPlay , exec , playerctl -p "spotifyd,firefox" play-pause bind = , XF86AudioPrev , exec , playerctl -p "spotifyd,firefox" previous - bind = , XF86MonBrightnessDown , exec , brightnessctl s 10%- - bind = , XF86MonBrightnessUp , exec , brightnessctl s 10%+ + binde = , XF86MonBrightnessDown , exec , brightnessctl s 10%- + binde = , XF86MonBrightnessUp , exec , brightnessctl s 10%+ # Move focus with mainMod + hjkl - bind = $mainMod, H, movefocus, l - bind = $mainMod, L, movefocus, r - bind = $mainMod, K, movefocus, u - bind = $mainMod, J, movefocus, d + binde = $mainMod, H, movefocus, l + binde = $mainMod, L, movefocus, r + binde = $mainMod, K, movefocus, u + binde = $mainMod, J, movefocus, d # Change current active window size with mainMod + SHIFT + hjkl - bind = $mainMod SHIFT, H, resizeactive, -10 0 - bind = $mainMod SHIFT, J, resizeactive, 0 10 - bind = $mainMod SHIFT, K, resizeactive, 0 -10 - bind = $mainMod SHIFT, L, resizeactive, 10 0 + binde = $mainMod SHIFT, H, resizeactive, -10 0 + binde = $mainMod SHIFT, J, resizeactive, 0 10 + binde = $mainMod SHIFT, K, resizeactive, 0 -10 + binde = $mainMod SHIFT, L, resizeactive, 10 0 # Move current active window with mainMod + ALT + hjkl bind = $mainMod ALT, H, movewindow, l @@ -223,6 +223,4 @@ in # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow - - exec-once=wallpaper -r '' diff --git a/modules/programs/hyprland/default.nix b/modules/programs/hyprland/default.nix index aad7afd..654a13a 100644 --- a/modules/programs/hyprland/default.nix +++ b/modules/programs/hyprland/default.nix @@ -30,9 +30,12 @@ in config = mkIf cfg.enable { my = { programs = { + wallpaper.enable = true; kitty.enable = true; rofi.enable = true; + }; + wallpapers.enable = true; services.dunst.enable = true; }; @@ -142,33 +145,41 @@ in }; in { - enable = true; - partOf = [ "graphical-session.target" ]; wantedBy = [ "graphical-session.target" ]; - after = [ "graphical-session.target" ]; serviceConfig = { + ExecStartPre = "${pkgs.coreutils}/bin/sleep 0.5"; ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper -c ${config}"; - RestartSec = "1s"; + RestartSec = "500ms"; Restart = "on-failure"; }; }; + systemd.user.services.random-wallpaper = { + wantedBy = [ "graphical-session.target" ]; + requires = [ "hyprpaper.service" ]; + serviceConfig = { + ExecStartPre = "${pkgs.coreutils}/bin/sleep 0.5"; + ExecStart = "${getExe config.my.programs.wallpaper.package} -r"; + RestartSec = "500ms"; + Restart = "on-failure"; + }; + }; + # only consider graphical-session.target started when hyprland-sesstion.target is reached systemd.user.targets.hyprland-session = { + partOf = [ "graphical-session.target" ]; wantedBy = [ "graphical-session.target" ]; before = [ "graphical-session.target" ]; }; systemd.user.services.xdg-desktop-portal-hyprland = { - after = [ "hyprland-session.target" ]; - wantedBy = [ "hyprland-session.target" ]; + after = [ "hyrpland-session.target" ]; + requiredBy = [ "xdg-desktop-portal.service" ]; }; - home-manager.users.moritz.systemd.user.services.nextcloud-client = { - Service = { - RestartSec = "1s"; - Restart = "on-failure"; - }; + home-manager.users.moritz.systemd.user.services.nextcloud-client.Service = { + RestartSec = "500ms"; + Restart = "on-failure"; }; # add user packages for wayland and hyprland in particular diff --git a/modules/programs/wallpaper/default.nix b/modules/programs/wallpaper/default.nix index f8ec99c..0412238 100644 --- a/modules/programs/wallpaper/default.nix +++ b/modules/programs/wallpaper/default.nix @@ -4,21 +4,27 @@ with lib; let cfg = config.my.programs.wallpaper; + + + script = pkgs.writeShellApplication { + name = "wallpaper"; + runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq fzf viu ]; + text = builtins.readFile ./wallpaper.sh; + }; in { - options.my.programs.wallpaper.enable = mkEnableOption "wallpaper"; + options.my.programs.wallpaper = { + enable = mkEnableOption "wallpaper"; + package = mkOption { + type = types.package; + default = script; + }; + }; config = mkIf cfg.enable { environment.systemPackages = - let - wallpaper = pkgs.writeShellApplication { - name = "wallpaper"; - runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq fzf viu ]; - text = builtins.readFile ./wallpaper.sh; - }; - in [ - wallpaper + cfg.package ]; }; } diff --git a/modules/programs/wallpaper/wallpaper.sh b/modules/programs/wallpaper/wallpaper.sh index 2644566..5b52710 100644 --- a/modules/programs/wallpaper/wallpaper.sh +++ b/modules/programs/wallpaper/wallpaper.sh @@ -4,12 +4,13 @@ WALLPAPERS_PATH="$HOME/.config/wallpapers" WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l) function help() { - echo "Usage: wallpaper [OPTIONS]" + echo "Usage:" + echo -e " wallpaper [OPTIONS] [PATH]" echo "" echo "Options:" - echo " -h, --help Show this help message and exit" - echo " -r, --random Set a random wallpaper" - echo " -s, --set Set a wallpaper" + echo -e " -h, --help \n\t Show this help message and exit" + echo -e " -r, --random \n\t Set a random wallpaper" + echo -e " -s, --set \n\t Set a wallpaper" } function randomWallpaper() { @@ -17,7 +18,7 @@ function randomWallpaper() { } function setWallpaper() { - case "$DESKTOP_SESSION" in + case "${XDG_CURRENT_DESKTOP,,}" in hyprland) hyprctl hyprpaper preload "$1" &>/dev/null hyprctl monitors -j | jq '.[].name' | xargs -I{} -P 0 hyprctl hyprpaper wallpaper '{}',"$1" &>/dev/null @@ -58,13 +59,25 @@ done set -- "${POSITIONAL[@]}" # restore positional arguments -if [[ -z ${WALLPAPER+x} ]]; then - WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap) +if [[ $# -gt 1 ]]; then + help + exit 1 fi -if [[ ! -f "$WALLPAPER" ]]; then +if [[ $# -eq 1 ]]; then + WALLPAPER="$1" +fi + +if [[ -z ${WALLPAPER+x} ]]; then + WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap) +fi + +WALLPAPER=$(realpath "$WALLPAPER") + +if [[ ! -e "$WALLPAPER" ]]; then echo "File not found: $WALLPAPER" exit 1 fi +echo "Setting wallpaper: '$WALLPAPER'" setWallpaper "$WALLPAPER"