feat(hyprland): add random wallpaper service
This commit is contained in:
parent
f02b3ae0ea
commit
f9fd542206
4 changed files with 70 additions and 42 deletions
|
@ -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
|
|
||||||
''
|
''
|
||||||
|
|
|
@ -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,34 +145,42 @@ 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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";
|
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
|
||||||
users.users.moritz.packages = with pkgs; [
|
users.users.moritz.packages = with pkgs; [
|
||||||
|
|
|
@ -4,21 +4,27 @@
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.my.programs.wallpaper;
|
cfg = config.my.programs.wallpaper;
|
||||||
in
|
|
||||||
{
|
|
||||||
options.my.programs.wallpaper.enable = mkEnableOption "wallpaper";
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
environment.systemPackages =
|
script = pkgs.writeShellApplication {
|
||||||
let
|
|
||||||
wallpaper = pkgs.writeShellApplication {
|
|
||||||
name = "wallpaper";
|
name = "wallpaper";
|
||||||
runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq fzf viu ];
|
runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq fzf viu ];
|
||||||
text = builtins.readFile ./wallpaper.sh;
|
text = builtins.readFile ./wallpaper.sh;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
{
|
||||||
|
options.my.programs.wallpaper = {
|
||||||
|
enable = mkEnableOption "wallpaper";
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = script;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.systemPackages =
|
||||||
[
|
[
|
||||||
wallpaper
|
cfg.package
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 [[ $# -gt 1 ]]; then
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $# -eq 1 ]]; then
|
||||||
|
WALLPAPER="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -z ${WALLPAPER+x} ]]; then
|
if [[ -z ${WALLPAPER+x} ]]; then
|
||||||
WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap)
|
WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -f "$WALLPAPER" ]]; then
|
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"
|
||||||
|
|
Loading…
Reference in a new issue