diff --git a/pkg/omf/completions/omf.fish b/pkg/omf/completions/omf.fish
index 56aede293e5bbd903b959094e53294c5a1380296..3b8045eba00aefd9b05558390a54ec70b24632d7 100644
--- a/pkg/omf/completions/omf.fish
+++ b/pkg/omf/completions/omf.fish
@@ -3,11 +3,23 @@
 
 complete -c omf -f -d "Oh My Fish"
 
-complete -c omf -f -n "__fish_seen_subcommand_from r rm remove"     -a (printf "%s " (omf.packages.list --installed))
+set -l installed_themes (omf.packages.list --installed --theme)
+set -l installed_plugins (omf.packages.list --installed --plugin)
+set -l installed $installed_themes $installed_plugins
+for subcommand in "r rm remove" "c cd"
+  complete -c omf -f -n "__fish_seen_subcommand_from $subcommand" -a "$installed_themes" -d theme
+  complete -c omf -f -n "__fish_seen_subcommand_from $subcommand" -a "$installed_plugins" -d plugin
+end
+
+set -l available_themes (omf.packages.list --available --theme)
+set -l available_plugins (omf.packages.list --available --plugin)
+for subcommand in "i install"
+  complete -c omf -f -n "__fish_seen_subcommand_from $subcommand" -a "$available_themes" -d theme
+  complete -c omf -f -n "__fish_seen_subcommand_from $subcommand" -a "$available_plugins" -d plugin
+end
+
 complete -c omf -f -n "__fish_seen_subcommand_from d desc describe" -a (printf "%s " (omf.packages.list --database --plugin))
-complete -c omf -f -n "__fish_seen_subcommand_from c cd"            -a (printf "%s " (omf.packages.list --installed))
-complete -c omf -f -n "__fish_seen_subcommand_from i install"       -a (printf "%s " (omf.packages.list --available --plugin))
-complete -c omf -f -n "__fish_seen_subcommand_from t theme"         -a (printf "%s " (omf.packages.list --database --theme))
+complete -c omf -f -n "__fish_seen_subcommand_from t theme"         -a "$installed_themes"
 complete -c omf -f -n "__fish_seen_subcommand_from help"            -a "install theme remove update list describe cd new submit destroy doctor"
 
 complete -c omf -f -a list     -n "__fish_use_subcommand" -d "List local packages"