diff --git a/completions/caelestia.fish b/completions/caelestia.fish index b337bba..bdbde7e 100644 --- a/completions/caelestia.fish +++ b/completions/caelestia.fish @@ -71,7 +71,7 @@ complete -c caelestia -n "$seen shell && $seen wallpaper && $seen set" -F complete -c caelestia -n "$seen shell && $seen notifs && not $seen clear" -a 'clear' -d 'Clear popup notifications' # Toggles -set -l commands communication music specialws sysmon todo +set -l commands communication music specialws sysmon todo steam complete -c caelestia -n "$seen toggle && not $seen drawers && not $seen $commands" -a "$commands" -d 'toggle' # Scheme diff --git a/src/caelestia/parser.py b/src/caelestia/parser.py index f84f991..27d466b 100644 --- a/src/caelestia/parser.py +++ b/src/caelestia/parser.py @@ -1,27 +1,52 @@ import argparse -from caelestia.subcommands import clipboard, emoji, pip, record, scheme, screenshot, shell, toggle, wallpaper +from caelestia.subcommands import ( + clipboard, + emoji, + pip, + record, + scheme, + screenshot, + shell, + toggle, + wallpaper, +) from caelestia.utils.paths import wallpapers_dir from caelestia.utils.scheme import get_scheme_names, scheme_variants from caelestia.utils.wallpaper import get_wallpaper def parse_args() -> (argparse.ArgumentParser, argparse.Namespace): - parser = argparse.ArgumentParser(prog="caelestia", description="Main control script for the Caelestia dotfiles") - parser.add_argument("-v", "--version", action="store_true", help="print the current version") + parser = argparse.ArgumentParser( + prog="caelestia", description="Main control script for the Caelestia dotfiles" + ) + parser.add_argument( + "-v", "--version", action="store_true", help="print the current version" + ) # Add subcommand parsers command_parser = parser.add_subparsers( - title="subcommands", description="valid subcommands", metavar="COMMAND", help="the subcommand to run" + title="subcommands", + description="valid subcommands", + metavar="COMMAND", + help="the subcommand to run", ) # Create parser for shell opts shell_parser = command_parser.add_parser("shell", help="start or message the shell") shell_parser.set_defaults(cls=shell.Command) - shell_parser.add_argument("message", nargs="*", help="a message to send to the shell") - shell_parser.add_argument("-d", "--daemon", action="store_true", help="start the shell detached") - shell_parser.add_argument("-s", "--show", action="store_true", help="print all shell IPC commands") - shell_parser.add_argument("-l", "--log", action="store_true", help="print the shell log") + shell_parser.add_argument( + "message", nargs="*", help="a message to send to the shell" + ) + shell_parser.add_argument( + "-d", "--daemon", action="store_true", help="start the shell detached" + ) + shell_parser.add_argument( + "-s", "--show", action="store_true", help="print all shell IPC commands" + ) + shell_parser.add_argument( + "-l", "--log", action="store_true", help="print the shell log" + ) shell_parser.add_argument( "--log-rules", default="quickshell.dbus.properties.warning=false;quickshell.dbus.dbusmenu.warning=false;quickshell.service.notifications.warning=false;quickshell.service.sni.host.warning=false;qt.qpa.wayland.textinput.warning=false", @@ -30,75 +55,145 @@ def parse_args() -> (argparse.ArgumentParser, argparse.Namespace): ) # Create parser for toggle opts - toggle_parser = command_parser.add_parser("toggle", help="toggle a special workspace") + toggle_parser = command_parser.add_parser( + "toggle", help="toggle a special workspace" + ) toggle_parser.set_defaults(cls=toggle.Command) toggle_parser.add_argument( - "workspace", choices=["communication", "music", "sysmon", "specialws", "todo"], help="the workspace to toggle" + "workspace", + choices=["communication", "music", "sysmon", "specialws", "todo", "steam"], + help="the workspace to toggle", ) # Create parser for scheme opts scheme_parser = command_parser.add_parser("scheme", help="manage the colour scheme") scheme_command_parser = scheme_parser.add_subparsers(title="subcommands") - list_parser = scheme_command_parser.add_parser("list", help="list available schemes") + list_parser = scheme_command_parser.add_parser( + "list", help="list available schemes" + ) list_parser.set_defaults(cls=scheme.List) - list_parser.add_argument("-n", "--names", action="store_true", help="list scheme names") - list_parser.add_argument("-f", "--flavours", action="store_true", help="list scheme flavours") - list_parser.add_argument("-m", "--modes", action="store_true", help="list scheme modes") - list_parser.add_argument("-v", "--variants", action="store_true", help="list scheme variants") + list_parser.add_argument( + "-n", "--names", action="store_true", help="list scheme names" + ) + list_parser.add_argument( + "-f", "--flavours", action="store_true", help="list scheme flavours" + ) + list_parser.add_argument( + "-m", "--modes", action="store_true", help="list scheme modes" + ) + list_parser.add_argument( + "-v", "--variants", action="store_true", help="list scheme variants" + ) get_parser = scheme_command_parser.add_parser("get", help="get scheme properties") get_parser.set_defaults(cls=scheme.Get) - get_parser.add_argument("-n", "--name", action="store_true", help="print the current scheme name") - get_parser.add_argument("-f", "--flavour", action="store_true", help="print the current scheme flavour") - get_parser.add_argument("-m", "--mode", action="store_true", help="print the current scheme mode") - get_parser.add_argument("-v", "--variant", action="store_true", help="print the current scheme variant") + get_parser.add_argument( + "-n", "--name", action="store_true", help="print the current scheme name" + ) + get_parser.add_argument( + "-f", "--flavour", action="store_true", help="print the current scheme flavour" + ) + get_parser.add_argument( + "-m", "--mode", action="store_true", help="print the current scheme mode" + ) + get_parser.add_argument( + "-v", "--variant", action="store_true", help="print the current scheme variant" + ) set_parser = scheme_command_parser.add_parser("set", help="set the current scheme") set_parser.set_defaults(cls=scheme.Set) - set_parser.add_argument("--notify", action="store_true", help="send a notification on error") - set_parser.add_argument("-r", "--random", action="store_true", help="switch to a random scheme") - set_parser.add_argument("-n", "--name", choices=get_scheme_names(), help="the name of the scheme to switch to") + set_parser.add_argument( + "--notify", action="store_true", help="send a notification on error" + ) + set_parser.add_argument( + "-r", "--random", action="store_true", help="switch to a random scheme" + ) + set_parser.add_argument( + "-n", + "--name", + choices=get_scheme_names(), + help="the name of the scheme to switch to", + ) set_parser.add_argument("-f", "--flavour", help="the flavour to switch to") - set_parser.add_argument("-m", "--mode", choices=["dark", "light"], help="the mode to switch to") - set_parser.add_argument("-v", "--variant", choices=scheme_variants, help="the variant to switch to") + set_parser.add_argument( + "-m", "--mode", choices=["dark", "light"], help="the mode to switch to" + ) + set_parser.add_argument( + "-v", "--variant", choices=scheme_variants, help="the variant to switch to" + ) # Create parser for screenshot opts - screenshot_parser = command_parser.add_parser("screenshot", help="take a screenshot") + screenshot_parser = command_parser.add_parser( + "screenshot", help="take a screenshot" + ) screenshot_parser.set_defaults(cls=screenshot.Command) - screenshot_parser.add_argument("-r", "--region", nargs="?", const="slurp", help="take a screenshot of a region") screenshot_parser.add_argument( - "-f", "--freeze", action="store_true", help="freeze the screen while selecting a region" + "-r", "--region", nargs="?", const="slurp", help="take a screenshot of a region" + ) + screenshot_parser.add_argument( + "-f", + "--freeze", + action="store_true", + help="freeze the screen while selecting a region", ) # Create parser for record opts record_parser = command_parser.add_parser("record", help="start a screen recording") record_parser.set_defaults(cls=record.Command) - record_parser.add_argument("-r", "--region", nargs="?", const="slurp", help="record a region") - record_parser.add_argument("-s", "--sound", action="store_true", help="record audio") + record_parser.add_argument( + "-r", "--region", nargs="?", const="slurp", help="record a region" + ) + record_parser.add_argument( + "-s", "--sound", action="store_true", help="record audio" + ) # Create parser for clipboard opts - clipboard_parser = command_parser.add_parser("clipboard", help="open clipboard history") + clipboard_parser = command_parser.add_parser( + "clipboard", help="open clipboard history" + ) clipboard_parser.set_defaults(cls=clipboard.Command) - clipboard_parser.add_argument("-d", "--delete", action="store_true", help="delete from clipboard history") + clipboard_parser.add_argument( + "-d", "--delete", action="store_true", help="delete from clipboard history" + ) # Create parser for emoji-picker opts emoji_parser = command_parser.add_parser("emoji", help="emoji/glyph utilities") emoji_parser.set_defaults(cls=emoji.Command) - emoji_parser.add_argument("-p", "--picker", action="store_true", help="open the emoji/glyph picker") - emoji_parser.add_argument("-f", "--fetch", action="store_true", help="fetch emoji/glyph data from remote") + emoji_parser.add_argument( + "-p", "--picker", action="store_true", help="open the emoji/glyph picker" + ) + emoji_parser.add_argument( + "-f", "--fetch", action="store_true", help="fetch emoji/glyph data from remote" + ) # Create parser for wallpaper opts - wallpaper_parser = command_parser.add_parser("wallpaper", help="manage the wallpaper") + wallpaper_parser = command_parser.add_parser( + "wallpaper", help="manage the wallpaper" + ) wallpaper_parser.set_defaults(cls=wallpaper.Command) wallpaper_parser.add_argument( - "-p", "--print", nargs="?", const=get_wallpaper(), metavar="PATH", help="print the scheme for a wallpaper" + "-p", + "--print", + nargs="?", + const=get_wallpaper(), + metavar="PATH", + help="print the scheme for a wallpaper", ) wallpaper_parser.add_argument( - "-r", "--random", nargs="?", const=wallpapers_dir, metavar="DIR", help="switch to a random wallpaper" + "-r", + "--random", + nargs="?", + const=wallpapers_dir, + metavar="DIR", + help="switch to a random wallpaper", + ) + wallpaper_parser.add_argument( + "-f", "--file", help="the path to the wallpaper to switch to" + ) + wallpaper_parser.add_argument( + "-n", "--no-filter", action="store_true", help="do not filter by size" ) - wallpaper_parser.add_argument("-f", "--file", help="the path to the wallpaper to switch to") - wallpaper_parser.add_argument("-n", "--no-filter", action="store_true", help="do not filter by size") wallpaper_parser.add_argument( "-t", "--threshold", @@ -115,6 +210,8 @@ def parse_args() -> (argparse.ArgumentParser, argparse.Namespace): # Create parser for pip opts pip_parser = command_parser.add_parser("pip", help="picture in picture utilities") pip_parser.set_defaults(cls=pip.Command) - pip_parser.add_argument("-d", "--daemon", action="store_true", help="start the daemon") + pip_parser.add_argument( + "-d", "--daemon", action="store_true", help="start the daemon" + ) return parser, parser.parse_args() diff --git a/src/caelestia/subcommands/toggle.py b/src/caelestia/subcommands/toggle.py index 57c0543..05df8a8 100644 --- a/src/caelestia/subcommands/toggle.py +++ b/src/caelestia/subcommands/toggle.py @@ -70,6 +70,14 @@ class Command: ["kitty", "--detach", "-T", "btop", "fish", "-C", "btop"], ) + def steam(self) -> None: + self.spawn_or_move( + lambda c: c["class"] == "steam" or c["initialTitle"] == "Steam", + ["steam"], + "steam", + ) + hypr.dispatch("togglespecialworkspace", "steam") + def todo(self) -> None: hypr.dispatch("togglespecialworkspace", "todo") self.spawn_or_move(lambda c: c["class"] == "Todoist", ["todoist"], "todo")