This will install dependencies and also set up git to run code quality checks when you attempt to make a commit. If you are using a codespace, this should run automatically.
bundle install
bundle exec overcommit --install
The demo animations are created using vhs. If you are going to create or update the demo animations, please follow the installation instructions for vhs.
3rd-party plugins are Ruby gems that users can install and activate in their configuration files.
You can view an officially supported plugin, like Repofetch::Github
, as an
example for writing a plugin. Some information for writing a plugin is provided
below, but you can view more information from the generated documentation. Versioned
documentation is deployed to rdoc.info, and
bleeding-edge documentation is deployed to
GitHub Pages.
The easiest way to set up a plugin is to inherit from Repofetch::Plugin
, which
will provide several helper methods that repofetch relies on to construct the
output. A few methods need to be implemented to complete your plugin:
When a user does not explicitly choose their plugin from the command-line,
repofetch must select the plugin by matching it against a directory. matches_repo?
is a class method that takes a Git::Base
instance and returns true
if repofetch should use the plugin for that repository, and false
if repofetch should
not use the plugin (e.g. a GitHub plugin would return false
for a GitLab repository).
When repofetch selects a plugin using matches_repo?
, it will then try to create an
instance of that plugin by calling from_git
. From git will receive the
Git::Base
instance, an array of CLI args that the plugin can use, and
an instance of Repofetch::Config
.
If the user explicitly chooses the plugin to use via repofetch --plugin <plugin>
, then
repofetch will pick that plugin and call its from_args
class method. from_args
takes
an array of CLI args and an instance of Repofetch::Config
.
The following requirements assume you are not manually implementing a plugin's
to_s
method, and you are inheriting from Repofetch::Plugin
.
ascii
should return a string for the ASCII artheader
should return the header text or an array of header text that will be above the---
separator on the right side.stats
should return an array of values that implementto_s
. These will be the stats displayed to the right of the ASCII art. You can useRepofetch::Stat
andRepofetch::TimespanStat
to create a pretty stat.
theme
can return an instance ofRepofetch::Theme
to use a different color scheme.primary_color
will set the color for the header and stat labels.
The ASCII art should be no more than 40 characters wide or 20 characters tall.
It can receive ANSI escape sequences for styling by using %{<style>}
. For example,
using the default theme, %{red}foo%{reset}
would print foo
with red text. See the
source code of Repofetch::Theme
for all available default styles.
A plugin must register itself so that repofetch can discover it. You can call either
the plugin class's register
method, or Repofetch.register_plugin
.
This is a simple example of a plugin.
require 'repofetch'
class MyCoolPlugin < Repofetch::Plugin
def initialize(detected_from_git, arg_count)
@detected_from_git = detected_from_git
@arg_count = arg_count
end
def self.from_git(git, args)
new(true, args.length)
end
def self.from_args(args)
new(false, args.length)
end
def ascii
<<~ASCII
####################
# %{bold}Hello, World%{reset} #
####################
ASCII
end
def header
# NOTE: The inherited header_joiner method will make the final header "My Plugin @ Me"
# You can override this method to use a different joiner, or override formatted_header
# for more control.
['My Plugin', 'Me']
end
def stats
[
Repofetch::Stat.new('git repo detected', @detected_from_git, emoji: '📂'),
Repofetch::Stat.new('args passed', @arg_count)
]
end
end
# When the user adds your plugin to their configuration file, this line will register the plugin
MyCoolPlugin.register
- For ASCII art, try to avoid using explicit black and white colors for negative and positive space. This can harm compatibility between light and dark terminals. Instead, simply use whitespace for negative space, and uncolored text for positive space.