#!/usr/bin/python3 import os import sys import random import re import argparse def get_wallpapers(query: str, path: str): "Fetch a wallpaper" # Search through all wallpapers wallpapers = [f for f in os.listdir(path) if re.search(r"png|jpg", f)] queried_wallpapers = [f for f in wallpapers if re.search(rf"{query}", f)] return queried_wallpapers def pick_wallpaper(wallpaper_list, *args): # Error handling if not wallpaper_list: print("No wallpapers found!") sys.exit(1) else: new_wallpaper = random.choice(wallpaper_list) return new_wallpaper def list_wallpapers(wallpaper_list, *args): print("Wallpapers matching your query:") for wallpaper in wallpaper_list: print(wallpaper) if __name__ == "__main__": ### DEFAULT WALLPAPER DIRECTORY HERE path = "~/wallpaper" parser = argparse.ArgumentParser() parser.add_argument("-q", "--query", help="Refine selection") parser.add_argument("-p", "--path", help="Path to wallpaper directory") parser.add_argument("-l", "--list", action="store_true", help="List potential wallpapers" ) args = parser.parse_args() query = "" if args.query: query = args.query print(f"Searching for wallpapers filename matching: {query}") if args.path: path = args.path print(f"Searching in: {path}") # Get a list of all wallpapers wallpaper_list = get_wallpapers(query, path) if args.list: print("=================================================") print("Arg '--list' is set. No wallpaper will be applied") print("=================================================") list_wallpapers(wallpaper_list) sys.exit(1) # Pick one wallpaper query_result = pick_wallpaper(wallpaper_list) wallpaper = path + "/" + query_result os.system(f"feh --bg-scale {wallpaper}") print(f"Updated wallpaper to: {wallpaper}")