Benton Edmondson 2869f0ddea readme: fix typo | 5 months ago | |
---|---|---|
.github | 1 year ago | |
.vscode | 1 year ago | |
ansi | 1 year ago | |
assets | 1 year ago | |
client | 1 year ago | |
config | 1 year ago | |
feed | 1 year ago | |
gemtext | 1 year ago | |
history | 1 year ago | |
hypertext | 1 year ago | |
jtp | 1 year ago | |
markdown | 1 year ago | |
mime | 1 year ago | |
object | 1 year ago | |
plaintext | 1 year ago | |
pub | 1 year ago | |
splicer | 1 year ago | |
style | 1 year ago | |
ui | 1 year ago | |
.gitignore | 1 year ago | |
go.mod | 5 months ago | |
go.sum | 5 months ago | |
license | 1 year ago | |
main.go | 1 year ago | |
readme.md | 5 months ago |
A command-line Fediverse client that doesn’t require a server.
uname -ms
and, based on the output, download the latest corresponding release.cd
into the directory that servitor is in (e.g. cd ~/Downloads
).mv servitor-version-arch-os servitor
to rename the binary to servitor
.chmod +x servitor
to make it executable../servitor open @Gargron@mastodon.social
, for example, to try it out.mv servitor ~/.local/bin
to allow it to be run from anywhere (might not work on some distributions).I only test Linux x86_64
releases.
servitor open @username@example.org
to open profiles.servitor open https://example.org/user/username
to open links.servitor feed feed-name
to open feeds (see below).The config file is located at ~/.config/servitor/config.toml
.
[feeds]
# the entries will be spliced together
# in chronological order, like an RSS reader
linux = [ # open with `servitor feed linux`
"@torvalds@social.kernel.org",
"@luke@videos.lukesmith.xyz",
"@thelinuxexperiment@tilvids.com",
]
dnd = [ # open with `servitor feed dnd`
"@rpgmemes@ttrpg.network",
"@dnd@lemmy.world",
]
[style.colors]
primary = "#A4f59b"
error = "#9c3535"
highlight = "#0d7d00"
code_background = "#4b4b4b"
[network]
preload_amount = 5 # the number of posts to load in above and below the highlighted post
timeout_seconds = 5
cache_size = 128 # the number of JSON responses the cache can hold
[media]
# described below
There are various ways to open files on Linux (xdg-open
, mailcap
, handlr
, bespoke scripts, etc). The media.hook
config option allows you to configure whichever one you use. The value is a list of strings that will be executed as a command. Parameters will be substituted as follows:
%url
— substituted with the URL being opened%mimetype
— substituted with the media type being opened, e.g. image/png
%supertype
— substituted with the first part of the media type, e.g. image
%subtype
— substituted with the subtype, e.g. png
Here is a simple example config that opens videos and gifs in mpv
, images in feh
, and everything else in firefox
:
[media]
hook = [
"sh", "-c",
'''
if test "$2" = "video"; then exec mpv --keep-open=yes "$0"; fi
if test "$1" = "image/gif"; then exec mpv --keep-open=yes "$0"; fi
if test "$2" = "image"; then exec feh --scale-down --image-bg black "$0"; fi
exec firefox "$0"
''',
"%url", "%mimetype", "%supertype"
]
media.hook
defaults to ["xdg-open", "%url"]
.
j
— move down\
k
— move up\
space
— select the highlighted item\
c
— view the creator of the highlighted item\
r
— view the recipient of the highlighted item (e.g. the group it was posted to)\
a
— view the actor of the activity (e.g. view the retweeter of a retweet)\
h
— move back in your browser history\
l
— move forward in your browser history\
g
— move to the expanded item (i.e. move to the current OP)\
ctrl+c
— exit the program
p
— open the highlighted user's profile picture\
b
— open the highlighted user's banner\
o
— open the content of a post itself (e.g. open the video associated with a video post)\
number keys — open a link within the highlighted text
CGO_ENABLED=0 go build -ldflags "-X main.version=$(git rev-parse --short HEAD)"
go get -u all && go mod tidy
go test ./...
go fmt ./...
Please submit a PR if you know of another good resource.
For the purpose of this browser, the fediverse can be thought of as a collection of internet forums that use a shared protocol called ActivityPub. Instead of serving content over text/html
, they serve their content over application/activity+json
, which provides for higher-level semantics such as comment sections, retweets, etc.
Just like conventional forums, each site has a different moderation policy, and the administrators of each site have complete control over the moderation of that site. Unlike conventional internet forums, the fediverse allows users from one site to interact with (like, follow, comment on, etc) users and posts on another site, assuming the administrators of the both sites permit the interaction.
Servitor can render posts published in:
I tried to minimize the number of dependencies used. They are: