From 8d653ba8183b0b3efcba07b5b60298848967f479 Mon Sep 17 00:00:00 2001 From: Bruno Pinto Date: Tue, 26 May 2015 12:55:12 +0100 Subject: [PATCH 1/6] no more plugins or themes added to the repo --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 4158276..2d48bdf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ custom/* +plugins/* +themes/* .DS_Store *.pyc From 25ef546fc73f9c509e30b8c18b25ab5c10db5230 Mon Sep 17 00:00:00 2001 From: Bruno Pinto Date: Tue, 26 May 2015 14:10:58 +0100 Subject: [PATCH 2/6] simplification: do not prioritize '.config/fish/functions' --- oh-my-fish.fish | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/oh-my-fish.fish b/oh-my-fish.fish index 71058fd..7fb33fd 100644 --- a/oh-my-fish.fish +++ b/oh-my-fish.fish @@ -4,18 +4,11 @@ if not set -q fish_custom set -g fish_custom $fish_path/custom end -# Extract user defined functions from path and prepend later to -# avoid collisions with oh-my-fish internal functions and allow -# users to override/customize plugins, themes, etc. -set user_function_path $fish_function_path[1] -set -e fish_function_path[1] - # Add functions defined in oh-my-fish/functions to the path. if not contains $fish_path/functions/ $fish_function_path set fish_function_path $fish_path/functions/ $fish_function_path end - # Add imported plugins, completions and themes. Customize imported # commands via the $fish_path/custom directory, for example create # a directory under $fish_path/custom/themes with the same name as @@ -28,8 +21,5 @@ for load in $fish_custom/*.load . $load end -# Prepend extracted user functions so they have the highest priority. -set fish_function_path $user_function_path $fish_function_path - # Make sure to exit with $status of 1 when reloading the framework. or true From 6a3c7a3f1f9115ea7adfe0f5ffb53f861a2fec40 Mon Sep 17 00:00:00 2001 From: Bruno Pinto Date: Tue, 26 May 2015 14:14:37 +0100 Subject: [PATCH 3/6] remove deprecated _append_path function --- functions/_append_path.fish | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 functions/_append_path.fish diff --git a/functions/_append_path.fish b/functions/_append_path.fish deleted file mode 100644 index d37e6f3..0000000 --- a/functions/_append_path.fish +++ /dev/null @@ -1,19 +0,0 @@ -# Appends the path to the specified path list. If no list specified, -# defaults to $PATH -function _append_path - set_color red - echo '_append_path function deprecated. Rename to _prepend_path.' >&2 - set_color normal - - set -l path PATH - - if test (echo $argv | wc -w) -eq 2 - set path $argv[2] - end - - if test -d $argv[1] - if not contains $argv[1] $$path - set $path $argv[1] $$path - end - end -end From e2d9ad8ff4d6e2d0094b49d97b520631b62ea933 Mon Sep 17 00:00:00 2001 From: Bruno Pinto Date: Tue, 26 May 2015 14:28:06 +0100 Subject: [PATCH 4/6] new Plugin and Theme functions --- functions/Plugin.fish | 9 +++++++++ functions/Theme.fish | 9 +++++++++ oh-my-fish.fish | 12 ++++++++++++ templates/config.fish | 13 +++++-------- 4 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 functions/Plugin.fish create mode 100644 functions/Theme.fish diff --git a/functions/Plugin.fish b/functions/Plugin.fish new file mode 100644 index 0000000..f7defd6 --- /dev/null +++ b/functions/Plugin.fish @@ -0,0 +1,9 @@ +function Plugin --argument-names name + if [ -e $fish_path/plugins/$name -o -e $fish_custom/plugins/$name ] + import plugins/$name + else + set_color red + echo "Plugin '$name' is not installed. Run 'fish install' to download and install it." + set_color normal + end +end diff --git a/functions/Theme.fish b/functions/Theme.fish new file mode 100644 index 0000000..4b6d929 --- /dev/null +++ b/functions/Theme.fish @@ -0,0 +1,9 @@ +function Theme --argument-names name + if [ -e $fish_path/themes/$name -o -e $fish_custom/themes/$name ] + import themes/$name + else + set_color red + echo "Theme '$name' is not installed. Run 'fish install' to download and install it." + set_color normal + end +end diff --git a/oh-my-fish.fish b/oh-my-fish.fish index 7fb33fd..18f7b9e 100644 --- a/oh-my-fish.fish +++ b/oh-my-fish.fish @@ -9,6 +9,18 @@ if not contains $fish_path/functions/ $fish_function_path set fish_function_path $fish_path/functions/ $fish_function_path end +if set -q fish_plugins + set_color red + echo '$fish_plugins usage has been deprecated. Please see https://asciinema.org/a/20802.' + set_color normal +end + +if set -q fish_theme + set_color red + echo '$fish_theme usage has been deprecated. Please see https://asciinema.org/a/20802.' + set_color normal +end + # Add imported plugins, completions and themes. Customize imported # commands via the $fish_path/custom directory, for example create # a directory under $fish_path/custom/themes with the same name as diff --git a/templates/config.fish b/templates/config.fish index cf3ac0b..9020cb0 100644 --- a/templates/config.fish +++ b/templates/config.fish @@ -1,16 +1,13 @@ # Path to your oh-my-fish. set fish_path $HOME/.oh-my-fish -# Theme -set fish_theme robbyrussell - -# All built-in plugins can be found at ~/.oh-my-fish/plugins/ -# Custom plugins may be added to ~/.oh-my-fish/custom/plugins/ -# Enable plugins by adding their name separated by a space to the line below. -set fish_plugins theme - # Path to your custom folder (default path is ~/.oh-my-fish/custom) #set fish_custom $HOME/dotfiles/oh-my-fish # Load oh-my-fish configuration. . $fish_path/oh-my-fish.fish + +# Custom plugins and themes may be added to ~/.oh-my-fish/custom +# Plugins and themes can be found at https://github.com/oh-my-fish/ +Theme 'robbyrussell' +Plugin 'theme' From 21848fdf80e965b5eb2bf4e18172c2e6ac8b6288 Mon Sep 17 00:00:00 2001 From: Bruno Pinto Date: Tue, 26 May 2015 14:48:21 +0100 Subject: [PATCH 5/6] fish install and updated functions --- functions/Plugin.fish | 2 ++ functions/Theme.fish | 2 ++ functions/fish.fish | 20 +++++++++++ functions/fish.log.fish | 17 +++++++++ functions/fish.packages.fish | 28 +++++++++++++++ functions/fish.packages.install.fish | 36 +++++++++++++++++++ functions/fish.packages.update.fish | 53 ++++++++++++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 functions/fish.fish create mode 100644 functions/fish.log.fish create mode 100644 functions/fish.packages.fish create mode 100644 functions/fish.packages.install.fish create mode 100644 functions/fish.packages.update.fish diff --git a/functions/Plugin.fish b/functions/Plugin.fish index f7defd6..fcd0513 100644 --- a/functions/Plugin.fish +++ b/functions/Plugin.fish @@ -1,4 +1,6 @@ function Plugin --argument-names name + set -g fish_plugins $fish_plugins $name + if [ -e $fish_path/plugins/$name -o -e $fish_custom/plugins/$name ] import plugins/$name else diff --git a/functions/Theme.fish b/functions/Theme.fish index 4b6d929..546ea5b 100644 --- a/functions/Theme.fish +++ b/functions/Theme.fish @@ -1,4 +1,6 @@ function Theme --argument-names name + set -g fish_theme $name + if [ -e $fish_path/themes/$name -o -e $fish_custom/themes/$name ] import themes/$name else diff --git a/functions/fish.fish b/functions/fish.fish new file mode 100644 index 0000000..51791ab --- /dev/null +++ b/functions/fish.fish @@ -0,0 +1,20 @@ +# NAME +# fish - Extend default fish binary +# +# DESCRIPTION +# Extend fish binary to support plugins and themes installation +# +function fish -d "Extend fish binary" + if test (count $argv) -gt 0 + switch $argv[1] + case 'install' + fish.packages --install + case 'update' + fish.packages --update + case '*' + command fish $argv + end + else + command fish + end +end diff --git a/functions/fish.log.fish b/functions/fish.log.fish new file mode 100644 index 0000000..55eb3a8 --- /dev/null +++ b/functions/fish.log.fish @@ -0,0 +1,17 @@ +# NAME +# fish.log - simple log with color +# +# SYNOPSIS +# [...] +# +# DESCRIPTION +# Simply log a message with a specified color. +# +function fish.log -d "Simple log with color" + switch $argv[1] + case '-*' + echo $argv[1] (set_color $argv[2])$argv[3..-1](set_color normal) + case '*' + echo -e (set_color $argv[1])$argv[2..-1](set_color normal) + end +end diff --git a/functions/fish.packages.fish b/functions/fish.packages.fish new file mode 100644 index 0000000..857e438 --- /dev/null +++ b/functions/fish.packages.fish @@ -0,0 +1,28 @@ +# NAME +# fish.packages - Manage all plugins and themes +# +# SYNOPSIS +# fish.packages [OPTIONS] +# +# OPTIONS +# --install +# Install all packages +# --update +# Update all packages +# +# DESCRIPTION +# Manage all plugins and themes specified on the $fish_plugins +# and $fish_theme variables +# +function fish.packages --argument-names options -d 'Manage all plugins and themes' + set -l modified_packages 0 + + switch $options + case "--install" + fish.packages.install + case "--update" + fish.packages.update + case "*" + fish.log red 'Unknown option' + end +end diff --git a/functions/fish.packages.install.fish b/functions/fish.packages.install.fish new file mode 100644 index 0000000..57830d3 --- /dev/null +++ b/functions/fish.packages.install.fish @@ -0,0 +1,36 @@ +# NAME +# fish.packages.install - Install all plugins and themes +# +# DESCRIPTION +# Install all plugins and themes specified on the $fish_plugins +# and $fish_theme variables +# +function fish.packages.install -d "Install all plugins and themes" + set -l installed_packages 0 + + # Plugins + for plugin in $fish_plugins + if [ -e $fish_path/plugins/$plugin -o -e $fish_custom/plugins/$plugin ] + #echo "$plugin is already installed. Skipping." + else + fish.log -n white "Installing $plugin... " + git clone "https://github.com/oh-my-fish/plugins-$plugin" $fish_path/plugins/$plugin ^ /dev/null + fish.log green "√" + set -l installed_packages 1 + end + end + + # Theme + if [ -e $fish_path/themes/$fish_theme -o -e $fish_custom/themes/$fish_theme ] + #echo "$fish_theme is already installed. Skipping." + else + fish.log -n white "Installing $fish_theme... " + git clone "https://github.com/oh-my-fish/themes-$fish_theme" $fish_path/themes/$fish_theme ^ /dev/null + fish.log green "√" + set -l installed_packages 1 + end + + if [ $installed_packages -eq 0 ] + fish.log green 'All plugins were already installed.' + end +end diff --git a/functions/fish.packages.update.fish b/functions/fish.packages.update.fish new file mode 100644 index 0000000..513ce46 --- /dev/null +++ b/functions/fish.packages.update.fish @@ -0,0 +1,53 @@ +# NAME +# fish.packages.update - Update all plugins and themes +# +# DESCRIPTION +# Update all plugins and themes specified on the $fish_plugins +# and $fish_theme variables +# +function fish.packages.update -d "Update all plugins and themes" + set -l installed_packages 0 + pushd + + # Plugins + for plugin in $fish_plugins + if [ -e $fish_path/plugins/$plugin -a -e $fish_path/plugins/$plugin/.git ] + fish.log -n white "Updating $plugin... " + echo (cd $fish_path/plugins/$plugin; and git pull --rebase > /dev/null) >/dev/null + fish.log green "√" + set -l installed_packages 1 + else + if [ -e $fish_custom/plugins/$plugin -a -e $fish_custom/plugins/$plugin/.git ] + fish.log -n white "Updating $plugin... " + echo (cd $fish_custom/plugins/$plugin; and git pull --rebase > /dev/null) >/dev/null + fish.log green "√" + set -l installed_packages 1 + else + #echo "$plugin is not installed or not a git repo. Skipping." + end + end + end + + # Theme + if [ -e $fish_path/themes/$fish_theme -a -e $fish_path/themes/$fish_theme/.git ] + fish.log -n white "Updating $fish_theme... " + echo (cd $fish_path/themes/$fish_theme; and git pull --rebase > /dev/null) >/dev/null + fish.log green "√" + set -l installed_packages 1 + else + if [ -e $fish_custom/themes/$fish_theme -a -e $fish_custom/themes/$fish_theme/.git ] + fish.log -n white "Updating $fish_theme... " + echo (cd $fish_custom/themes/$fish_theme; and git pull --rebase > /dev/null) >/dev/null + fish.log green "√" + set -l installed_packages 1 + else + #echo "$fish_theme is not installed or not a git repo. Skipping." + end + end + + if [ $installed_packages -eq 0 ] + fish.log green 'No plugins to update.' + end + + popd +end From 52c4896ea9f32da77fb5510ab5721b4916fc2900 Mon Sep 17 00:00:00 2001 From: Bruno Date: Sat, 30 May 2015 12:03:12 +0100 Subject: [PATCH 6/6] Update documentation --- README.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f1b8c8a..a840e34 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ | Usage | -Contribute +Contributing | Uninstall | @@ -52,9 +52,7 @@ If you want to install it manually, [keep reading](#manual-installation). ## Usage -Enabling a new plugin or theme is as easy as it should be. Open your fish configuration file `~/.config/fish/config.fish` and specify the theme and the plugins you want to use. - -As an example, to enable rails and git-flow plugins add this line `set fish_plugins git-flow rails` to your configuration file. +Open your fish configuration file `~/.config/fish/config.fish` and specify the theme and the plugins you want to use. And then run `fish install` on your terminal to install them. Before setting down on a theme, you might want to have a go with all themes using our quick [theme switcher](https://github.com/bpinto/oh-my-fish/blob/master/plugins/theme/README.md) by typing `theme --help` on your shell. @@ -63,21 +61,15 @@ Before setting down on a theme, you might want to have a go with all themes usin If you have many functions which go well together, you can create custom plugin in the `custom/plugins/PLUGIN_NAME` directory and add to it as many functions as you want. -If you would like to override the functionality of a plugin distributed with oh-my-fish, -create a plugin of the same name in the `custom/plugins/` directory and it will be loaded -instead of the one shipped with oh-my-fish. - If you would like to use your custom theme, move it with the same name in the `custom/themes/` directory and it will override the original theme in `themes/`. If you just want to override any of the default behavior or add some environment variables, just add a new file (ending in .load) into the `custom/` directory. -## Send us your theme! +## Contributing -We are hoping to collect a bunch of themes for our command prompts. You can see existing ones in the [themes](themes/) directory. - -> __Note__: Theme authors, make sure to include a screenshot in your pull request. +Create an [issue](https://github.com/bpinto/oh-my-fish/issues) linking to your repository and we will move it to the [oh-my-fish](https://github.com/oh-my-fish) organization. ### Manual installation