feat(wallpaper): add better wallpaper module

nixos
Moritz Böhme 2023-05-07 13:53:31 +02:00
parent 326b14d39a
commit 3e9468d872
Signed by: moritz
GPG Key ID: 970C6E89EB0547A9
8 changed files with 99 additions and 23 deletions

View File

@ -9,7 +9,6 @@ let
cfg = config.my.bin; cfg = config.my.bin;
cycleSinks = import ./cycleSinks.nix { inherit pkgs; }; cycleSinks = import ./cycleSinks.nix { inherit pkgs; };
protonge = import ./protonge.nix { inherit pkgs; }; protonge = import ./protonge.nix { inherit pkgs; };
randomWallpaper = import ./randomWallpaper.nix { inherit pkgs; };
share = import ./share.nix { inherit pkgs; }; share = import ./share.nix { inherit pkgs; };
sxhkdHelp = import ./sxhkdHelp.nix { inherit pkgs; }; sxhkdHelp = import ./sxhkdHelp.nix { inherit pkgs; };
in in
@ -17,10 +16,9 @@ in
options.my.bin.enable = mkEnableOption "bin"; options.my.bin.enable = mkEnableOption "bin";
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = [
cycleSinks cycleSinks
protonge protonge
randomWallpaper
share share
sxhkdHelp sxhkdHelp
]; ];

View File

@ -1,17 +0,0 @@
{ pkgs }:
pkgs.writeShellApplication {
name = "randomWallpaper";
runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq ];
text = ''
wallpaper="$(find ~/.config/wallpapers/ -type f,l | shuf -n 1)"
if [ -z ''${WAYLAND_DISPLAY+x} ]; then
feh --bg-fill "$wallpaper"
else
hyprctl hyprpaper preload "$wallpaper"
hyprctl monitors -j | jq '.[].name' | xargs -I{} hyprctl hyprpaper wallpaper '{}',"$wallpaper"
hyprctl hyprpaper unload all
fi
'';
}

View File

@ -29,6 +29,7 @@ with lib; {
spotify.enable = mkDefault true; spotify.enable = mkDefault true;
ssh.enable = mkDefault true; ssh.enable = mkDefault true;
thunar.enable = mkDefault true; thunar.enable = mkDefault true;
wallpaper.enable = mkDefault true;
zathura.enable = mkDefault true; zathura.enable = mkDefault true;
}; };
services = { services = {

View File

@ -45,7 +45,7 @@ in
focus_follows_pointer = true; focus_follows_pointer = true;
}; };
startupPrograms = [ startupPrograms = [
"randomWallpaper" "wallpaper -r"
]; ];
extraConfig = builtins.readFile ./bspwmrc; extraConfig = builtins.readFile ./bspwmrc;
}; };

View File

@ -224,5 +224,5 @@ in
bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow bindm = $mainMod, mouse:273, resizewindow
exec-once=randomWallpaper exec-once=wallpaper -r
'' ''

View File

@ -71,7 +71,7 @@ in
command = "systemctl --user restart waybar"; command = "systemctl --user restart waybar";
always = true; always = true;
} }
{ command = "randomWallpaper"; } { command = "wallpaper -r"; }
]; ];
}; };
}; };

View File

@ -0,0 +1,24 @@
{ lib, config, pkgs, ... }:
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 {
name = "wallpaper";
runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq fzf viu ];
text = builtins.readFile ./wallpaper.sh;
};
in
[
wallpaper
];
};
}

View File

@ -0,0 +1,70 @@
#!/usr/bin/env bash
WALLPAPERS_PATH="$HOME/.config/wallpapers"
WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l)
function help() {
echo "Usage: wallpaper [OPTIONS]"
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"
}
function randomWallpaper() {
find ~/.config/wallpapers/ -type f,l | shuf -n 1
}
function setWallpaper() {
case "$DESKTOP_SESSION" in
hyprland)
hyprctl hyprpaper preload "$1" &>/dev/null
hyprctl monitors -j | jq '.[].name' | xargs -I{} -P 0 hyprctl hyprpaper wallpaper '{}',"$1" &>/dev/null
hyprctl hyprpaper unload all &>/dev/null
;;
*)
feh --bg-fill "$1" &>/dev/null
;;
esac
}
# Parse arguments
# https://stackoverflow.com/a/14203146
POSITIONAL=()
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-h | --help)
help
exit 0
;;
-r | --random)
WALLPAPER=$(randomWallpaper)
shift # past argument
;;
-s | --set)
WALLPAPER="$2"
shift # past argument
shift # past value
;;
*)
POSITIONAL+=("$1") # save it in an array for later
shift # past argument
;;
esac
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)
fi
if [[ ! -f "$WALLPAPER" ]]; then
echo "File not found: $WALLPAPER"
exit 1
fi
setWallpaper "$WALLPAPER"