summaryrefslogtreecommitdiff
path: root/src/caelestia/parser.py
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-14 22:50:55 +1000
committerGitHub <noreply@github.com>2025-06-14 22:50:55 +1000
commitee7291b7f64a359d17eb1d050086ef5357d79055 (patch)
treef1c200d8c8ba81030cbb2113a2be122db6508c8f /src/caelestia/parser.py
parentMerge pull request #5 from dalpax/patch-1 (diff)
parentMerge branch 'main' into python-rework (diff)
downloadcaelestia-cli-ee7291b7f64a359d17eb1d050086ef5357d79055.tar.gz
caelestia-cli-ee7291b7f64a359d17eb1d050086ef5357d79055.tar.bz2
caelestia-cli-ee7291b7f64a359d17eb1d050086ef5357d79055.zip
Merge pull request #6 from caelestia-dots/python-rework
feat: rewrite in python
Diffstat (limited to 'src/caelestia/parser.py')
-rw-r--r--src/caelestia/parser.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/caelestia/parser.py b/src/caelestia/parser.py
new file mode 100644
index 0000000..6d0b552
--- /dev/null
+++ b/src/caelestia/parser.py
@@ -0,0 +1,112 @@
+import argparse
+
+from caelestia.subcommands import clipboard, emoji, pip, record, scheme, screenshot, shell, toggle, wallpaper, wsaction
+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")
+
+ # Add subcommand parsers
+ command_parser = parser.add_subparsers(
+ 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("-s", "--show", action="store_true", help="print all shell IPC commands")
+ shell_parser.add_argument(
+ "-l",
+ "--log",
+ nargs="?",
+ const="quickshell.dbus.properties.warning=false;quickshell.dbus.dbusmenu.warning=false;quickshell.service.notifications.warning=false;quickshell.service.sni.host.warning=false",
+ metavar="RULES",
+ help="print the shell log",
+ )
+
+ # Create parser for toggle opts
+ 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"
+ )
+
+ # Create parser for workspace-action opts
+ ws_action_parser = command_parser.add_parser(
+ "workspace-action", help="execute a Hyprland workspace dispatcher in the current group"
+ )
+ ws_action_parser.set_defaults(cls=wsaction.Command)
+ ws_action_parser.add_argument(
+ "-g", "--group", action="store_true", help="whether to execute the dispatcher on a group"
+ )
+ ws_action_parser.add_argument(
+ "dispatcher", choices=["workspace", "movetoworkspace"], help="the dispatcher to execute"
+ )
+ ws_action_parser.add_argument("workspace", type=int, help="the workspace to pass to the dispatcher")
+
+ # Create parser for scheme opts
+ scheme_parser = command_parser.add_parser("scheme", help="manage the colour scheme")
+ scheme_parser.set_defaults(cls=scheme.Command)
+ scheme_parser.add_argument("-r", "--random", action="store_true", help="switch to a random scheme")
+ scheme_parser.add_argument("-n", "--name", choices=get_scheme_names(), help="the name of the scheme to switch to")
+ scheme_parser.add_argument("-f", "--flavour", help="the flavour to switch to")
+ scheme_parser.add_argument("-m", "--mode", choices=["dark", "light"], help="the mode to switch to")
+ scheme_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.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"
+ )
+
+ # 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")
+
+ # Create parser for clipboard opts
+ 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")
+
+ # Create parser for emoji-picker opts
+ emoji_parser = command_parser.add_parser("emoji-picker", help="toggle the emoji picker")
+ emoji_parser.set_defaults(cls=emoji.Command)
+
+ # Create parser for wallpaper opts
+ 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"
+ )
+ wallpaper_parser.add_argument(
+ "-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(
+ "-t",
+ "--threshold",
+ default=0.8,
+ help="the minimum percentage of the largest monitor size the image must be greater than to be selected",
+ )
+ wallpaper_parser.add_argument(
+ "-N",
+ "--no-smart",
+ action="store_true",
+ help="do not automatically change the scheme mode based on wallpaper colour",
+ )
+
+ # 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")
+
+ return parser, parser.parse_args()