feat(hyprland): add random wallpaper service

nixos
Moritz Böhme 2023-05-08 12:54:21 +02:00
parent f02b3ae0ea
commit f9fd542206
Signed by: moritz
GPG Key ID: 970C6E89EB0547A9
4 changed files with 70 additions and 42 deletions

View File

@ -165,26 +165,26 @@ in
bind = $mainMod , RETURN , exec , kitty bind = $mainMod , RETURN , exec , kitty
# XF86 keys # XF86 keys
bind = , XF86AudioLowerVolume , exec , pamixer -d 5 binde = , XF86AudioLowerVolume , exec , pamixer -d 5
bind = , XF86AudioRaiseVolume , exec , pamixer -i 5 binde = , XF86AudioRaiseVolume , exec , pamixer -i 5
bind = , XF86AudioMute , exec , pamixer -t bind = , XF86AudioMute , exec , pamixer -t
bind = , XF86AudioNext , exec , playerctl -p "spotifyd,firefox" next bind = , XF86AudioNext , exec , playerctl -p "spotifyd,firefox" next
bind = , XF86AudioPlay , exec , playerctl -p "spotifyd,firefox" play-pause bind = , XF86AudioPlay , exec , playerctl -p "spotifyd,firefox" play-pause
bind = , XF86AudioPrev , exec , playerctl -p "spotifyd,firefox" previous bind = , XF86AudioPrev , exec , playerctl -p "spotifyd,firefox" previous
bind = , XF86MonBrightnessDown , exec , brightnessctl s 10%- binde = , XF86MonBrightnessDown , exec , brightnessctl s 10%-
bind = , XF86MonBrightnessUp , exec , brightnessctl s 10%+ binde = , XF86MonBrightnessUp , exec , brightnessctl s 10%+
# Move focus with mainMod + hjkl # Move focus with mainMod + hjkl
bind = $mainMod, H, movefocus, l binde = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r binde = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u binde = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d binde = $mainMod, J, movefocus, d
# Change current active window size with mainMod + SHIFT + hjkl # Change current active window size with mainMod + SHIFT + hjkl
bind = $mainMod SHIFT, H, resizeactive, -10 0 binde = $mainMod SHIFT, H, resizeactive, -10 0
bind = $mainMod SHIFT, J, resizeactive, 0 10 binde = $mainMod SHIFT, J, resizeactive, 0 10
bind = $mainMod SHIFT, K, resizeactive, 0 -10 binde = $mainMod SHIFT, K, resizeactive, 0 -10
bind = $mainMod SHIFT, L, resizeactive, 10 0 binde = $mainMod SHIFT, L, resizeactive, 10 0
# Move current active window with mainMod + ALT + hjkl # Move current active window with mainMod + ALT + hjkl
bind = $mainMod ALT, H, movewindow, l bind = $mainMod ALT, H, movewindow, l
@ -223,6 +223,4 @@ in
# Move/resize windows with mainMod + LMB/RMB and dragging # Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow bindm = $mainMod, mouse:273, resizewindow
exec-once=wallpaper -r
'' ''

View File

@ -30,9 +30,12 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
my = { my = {
programs = { programs = {
wallpaper.enable = true;
kitty.enable = true; kitty.enable = true;
rofi.enable = true; rofi.enable = true;
}; };
wallpapers.enable = true;
services.dunst.enable = true; services.dunst.enable = true;
}; };
@ -142,33 +145,41 @@ in
}; };
in in
{ {
enable = true;
partOf = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ]; wantedBy = [ "graphical-session.target" ];
after = [ "graphical-session.target" ];
serviceConfig = { serviceConfig = {
ExecStartPre = "${pkgs.coreutils}/bin/sleep 0.5";
ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper -c ${config}"; ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper -c ${config}";
RestartSec = "1s"; RestartSec = "500ms";
Restart = "on-failure"; 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 # only consider graphical-session.target started when hyprland-sesstion.target is reached
systemd.user.targets.hyprland-session = { systemd.user.targets.hyprland-session = {
partOf = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ]; wantedBy = [ "graphical-session.target" ];
before = [ "graphical-session.target" ]; before = [ "graphical-session.target" ];
}; };
systemd.user.services.xdg-desktop-portal-hyprland = { systemd.user.services.xdg-desktop-portal-hyprland = {
after = [ "hyprland-session.target" ]; after = [ "hyrpland-session.target" ];
wantedBy = [ "hyprland-session.target" ]; requiredBy = [ "xdg-desktop-portal.service" ];
}; };
home-manager.users.moritz.systemd.user.services.nextcloud-client = { home-manager.users.moritz.systemd.user.services.nextcloud-client.Service = {
Service = { RestartSec = "500ms";
RestartSec = "1s"; Restart = "on-failure";
Restart = "on-failure";
};
}; };
# add user packages for wayland and hyprland in particular # add user packages for wayland and hyprland in particular

View File

@ -4,21 +4,27 @@
with lib; with lib;
let let
cfg = config.my.programs.wallpaper; 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 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 { config = mkIf cfg.enable {
environment.systemPackages = 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
]; ];
}; };
} }

View File

@ -4,12 +4,13 @@ WALLPAPERS_PATH="$HOME/.config/wallpapers"
WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l) WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l)
function help() { function help() {
echo "Usage: wallpaper [OPTIONS]" echo "Usage:"
echo -e " wallpaper [OPTIONS] [PATH]"
echo "" echo ""
echo "Options:" echo "Options:"
echo " -h, --help Show this help message and exit" echo -e " -h, --help \n\t Show this help message and exit"
echo " -r, --random Set a random wallpaper" echo -e " -r, --random \n\t Set a random wallpaper"
echo " -s, --set <PATH> Set a wallpaper" echo -e " -s, --set <PATH> \n\t Set a wallpaper"
} }
function randomWallpaper() { function randomWallpaper() {
@ -17,7 +18,7 @@ function randomWallpaper() {
} }
function setWallpaper() { function setWallpaper() {
case "$DESKTOP_SESSION" in case "${XDG_CURRENT_DESKTOP,,}" in
hyprland) hyprland)
hyprctl hyprpaper preload "$1" &>/dev/null hyprctl hyprpaper preload "$1" &>/dev/null
hyprctl monitors -j | jq '.[].name' | xargs -I{} -P 0 hyprctl hyprpaper wallpaper '{}',"$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 set -- "${POSITIONAL[@]}" # restore positional arguments
if [[ -z ${WALLPAPER+x} ]]; then if [[ $# -gt 1 ]]; then
WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap) help
exit 1
fi 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" echo "File not found: $WALLPAPER"
exit 1 exit 1
fi fi
echo "Setting wallpaper: '$WALLPAPER'"
setWallpaper "$WALLPAPER" setWallpaper "$WALLPAPER"