feat(hyprland): add random wallpaper service

This commit is contained in:
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
# 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
''

View file

@ -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,34 +145,42 @@ 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";
home-manager.users.moritz.systemd.user.services.nextcloud-client.Service = {
RestartSec = "500ms";
Restart = "on-failure";
};
};
# add user packages for wayland and hyprland in particular
users.users.moritz.packages = with pkgs; [

View file

@ -4,21 +4,27 @@
with lib;
let
cfg = config.my.programs.wallpaper;
in
{
options.my.programs.wallpaper.enable = mkEnableOption "wallpaper";
config = mkIf cfg.enable {
environment.systemPackages =
let
wallpaper = pkgs.writeShellApplication {
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";
package = mkOption {
type = types.package;
default = script;
};
};
config = mkIf cfg.enable {
environment.systemPackages =
[
wallpaper
cfg.package
];
};
}

View file

@ -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 <PATH> 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 <PATH> \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 [[ $# -gt 1 ]]; then
help
exit 1
fi
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
if [[ ! -f "$WALLPAPER" ]]; then
WALLPAPER=$(realpath "$WALLPAPER")
if [[ ! -e "$WALLPAPER" ]]; then
echo "File not found: $WALLPAPER"
exit 1
fi
echo "Setting wallpaper: '$WALLPAPER'"
setWallpaper "$WALLPAPER"