aboutsummaryrefslogblamecommitdiffstats
path: root/README.md
blob: 9fc0c8b82f01c7a3933527bf0ea7685bfab956a0 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                                                     













                                                                                                   

                       
 
                                                                                              






                                   
                                       







                                                       
                                           








                                            

      
                                                                         

                                                                                  
 
                                     
 



                                  

                             
                                       
                                                                                                                            

                                         


              
                                                            
 
                                                             
 
              
 
               
 



                                           
           
 






                                                      

                                
                                                                                                                                        
 
                                                                                           
 
               
 


                                                                                                                                                    
 
          
 
                                                                                      
 
                                                                                                                   
 
                                                                        
 



                                                                




                                                                                                                            
 
       
 
                
 
                                                                                                                
 


                                                                                                                               
 
                                                           
 
                      
 
                                                                                                                                       
 
                                        

           
 
                                                                   
 
                                             
 

              
                                          
 
                   
 
                                                                       
 
         
 
                                                                    
 
                        
 
                                                                                            
 
                                              
 
                                               
 








                                                      

                                    
                       
                            




                                                        
                             

                                                                       

                                      






                                        

































                                                                                                        
      
 

                                                                              

                     
                                              

                                                         
 
         
 
             
 



                                                                                                                                                                                                                                                             
                    


                                                                                                                                                         









                                                                                  
<pre style="font-family: menlo, courier, monospace;">
                     ██
                     ██
                     ██
 ██░████    ░████▒   ██  ▓██▒   ░████░
 ███████▓  ░██████▒  ██ ▓██▒   ░██████░
 ███  ▒██  ██▒  ▒██  ██▒██▒    ███  ███
 ██    ██  ████████  ████▓     ██░  ░██
 ██    ██  ████████  █████     ██    ██
 ██    ██  ██        ██░███    ██░  ░██
 ██    ██  ███░  ▒█  ██  ██▒   ███  ███
 ██    ██  ░███████  ██  ▒██   ░██████░
 ██    ██   ░█████▒  ██   ███   ░████░

             v0.2 manual
               7/4/2018
</pre>

<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again -->

- [Neko](#neko)
    - [Features](#features)
    - [Screenshots](#screenshots)
- [Installation](#installation)
    - [Requirements](#requirements)
    - [Building](#building)
        - [Dependencies](#dependencies)
- [Configuration](#configuration)
    - [Storage](#storage)
- [Usage](#usage)
    - [Web Interface](#web-interface)
    - [Add Feed](#add-feed)
    - [Crawl Feeds](#crawl-feeds)
    - [Export](#export)
- [All Command Line Options](#all-command-line-options)
- [Configuration File](#configuration-file)
- [TODO](#todo)
- [History](#history)
    - [Early 2017](#early-2017)
    - [July 2018 -- v0.2](#july-2018----v02)
- [Feedback](#feedback)

<!-- markdown-toc end -->


# Neko

`neko` is a self-hosted, rss reader focused on simplicity and efficiency.

Backend is written in `Go` and there is a simple javascript frontend and cat ears.

*note: the cat ears are in your mind*

## Features

   * limited features (#1 feature)
   * keyboard shortcuts
      * **j** - next item
      * **k** - previous item
      * that's all you should ever need
   * automatically marks items read in an infinite stream of never-ending content (until you run out of content and it ends)
   * full text search
   * scrapes full text of pages on demand

## Screenshots

![Screenshot 1](screenshot/neko.jpg?raw=true "Screenshot 1")

![Screenshot 2](screenshot/neko2.jpg?raw=true "Screenshot 2")

# Installation

## Requirements

If you are using a binary, no dependencies!

NOTE: I haven't put up any binaries yet.
 
## Building

### Dependencies

   * [Go](https://golang.org)
   * [go-sqlite3](https://github.com/mattn/go-sqlite3)
      * [sqlite](https://sqlite.org/index.html)
      * [gcc](https://gcc.gnu.org)

    $ go get adammathes.com/neko
   
This will download `neko`, dependencies, and build them all in `$GOPATH/src/`. By default this should be something like `$HOME/go/src/`.

A `neko` binary should now be in `$GOPATH/bin/`. By default this is usually `$HOME/go/bin/`

# Configuration

Everything can handled with a few command line flags. You shouldn't need to change the defaults most of the time.

You can also set options using a configuration file [`yaml`](http://yaml.org), described at the end of this README (but you probably don't need to.)

## Storage

By default `neko` will create the file `neko.db` in the current directory for storage.

You can override the location of this database file with the `--database` command line option or `-d` short option.

    $ neko --database=/var/db/neko.db --add=http://trenchant.org/rss.xml

which is equivalent to --

    $ neko -d /var/db/neko.db --add=http://trenchant.org/rss.xml

For expert users -- this is a [SQLite](https://sqlite.org/) database and can be manipulated with standard sqlite commands --

    $ sqlite3 neko.db .schema
    
-- will print out the database schema.

# Usage

## Web Interface

You can do most of what you need to do with `neko` from the web interface, which is what `neko` does by default.

    $ neko
    
`neko` web interface should now be available at `127.0.0.1:4994` -- opening a browser up to that should show you the interface.

You can specify a different port using the `--http` option.

    $ neko --http=9001

If you are hosting on a publicly available server instead of a personal computer, you can protect the interface with a password flag --

    $ neko --password=rssisveryimportant
    
## Add Feed

You can add feeds directly from the command line for convenience --

    $ neko --add=http://trenchant.org/rss.xml

## Crawl Feeds

Update feeds from the command line with --

    $ neko --update

This will fetch, download, parse, and store in the database your feeds.

## Export

Export de facto RSS feed standard OPML from the command line with --

    $ neko --export=opml

Change `opml` to `text` for a simple list of feed URLs, or `json` for JSON formatted output.

Export is also available in the web interface.

Import of OPML and other things is a TODO item.

# All Command Line Options

View all command line options with `-h` or `--help`

    $ neko -h

Usage of neko:
  -a, --add http://example.com/rss.xml
    	add the feed at URL http://example.com/rss.xml
  -c, --config string
    	read configuration from file
  -d, --database string
    	sqlite database file
  -x, --export string
    	export feed. format required: text, json or opml
  -h, --help
    	print usage information
  -s, --http int
    	HTTP port to serve on
  -i, --imageproxy
    	rewrite and proxy all image requests for privacy (experimental)
  -m, --minutes int
    	minutes between crawling feeds
  -p, --password string
    	password to access web interface
  -u, --update
    	fetch feeds and store new items
  -v, --verbose
    	verbose output

These are POSIX style flags so --

    $ neko --minutes=120

is equivalent to

    $ neko -m 120

# Configuration File

For convenience, you can specify options in a configuration file.

    $ neko -c /etc/neko.conf

A subset of the command line options are supported in the configuration file, with the same semantics --

   * database
   * http
   * imageproxy
   * minutes
   * password

For example --

```
database: /var/db/neko.db
http: 9001
imageproxy: true
minutes: 90
password: VeryLongRandomStringBecauseSecurityIsFun

```


# TODO

   * manually initiate crawl/refresh from web interface (done: /crawl/)
   * auto-refresh feeds from web interface (wip: but may not be working right)
   * import
   * mark all as read
   * rewrite frontend in a modern js framework
   * prettify interface
   * cross-compilation of binaries for "normal" platforms

# History

## Early 2017

I decided I didn't like the [original version of this that was python and mongo](https://github.com/adammathes/neko_v1) so rewrote it. I wanted to learn some Go. So assume the code is not great since I don't know what I'm doing even more so than normal.

The Javascript frontend is still the same, I keep saying I will rewrite that too since it's old backbone.js code but it still seems to mostly work. It's not very pretty though.

## July 2018 -- v0.2

Significant changes to simplify setup, configuration, usage. The goal was typing `neko` should be all you need to do to get started and use the software.

   * removed MySQL requirement (eliminating a ton of configuration and complexity)
   * added SQLite support (easier!)
   * auto-initialization of database file with embedded schema
   * removed json-formatted config file -- all options are command line options
   * `neko` runs web server by default
   * `neko` server crawls feeds regularly rather than requiring cron

# Feedback

Pull requests and issues are welcomed at https://github.com/adammathes/neko