Skip to content

zemmsoares/polybar-news

Folders and files

NameName
Last commit message
Last commit date
Jul 12, 2023
Jul 12, 2023
Jul 5, 2023
Oct 29, 2022
Jul 12, 2023
Jul 12, 2023
Jul 12, 2023
Jul 5, 2023
Jul 5, 2023

Repository files navigation

Polybar-news

A module to display the latest news on Polybar and i3blocks from multiple sources.

Polybar-news

Table of Contents

Dependencies

  • requests - Python requests
  • zscroll - For Polybar text scrolling (optional)
  • scroll - For i3blocks text scrolling (optional)

Setup Instructions

  1. Clone the repository

  2. Set up a Python environment and install dependencies (optional but recommended)

    # Create the environment
    python -m venv /path/to/environment
    
    # Activate the environment
    source /path/to/environment/bin/activate
    
    # Install the dependencies
    pip install requests
    *Note: If you don't want to use a Python virtual environment, you can install the dependencies globally with pip install requests, but be aware this might conflict with other Python software on your system.

  3. Create a config.py file in the root of the project folder. You can use the following examples as a template depending on the news source you want to use.

    For Hackernews:

    news_source = "hackernews" 
    
    # Number of news articles to fetch
    number_news = 5

    For NewsAPI:

    news_source = "newsapi" 
    
    # Number of news articles to fetch
    number_news = 5
    
    # Register at NewsAPI.org to receive your API key.
    api_key = "<your_api_key_here>" 
    
    # Configure your desired news sources. 
    # For available options, refer to NewsAPI.org/sources.
    
    sources = "<your_desired_sources_here>"
    
    # Configure your desired country. 
    # Note: You can only filter either by sources or country. (leave one empty "")
    country = "<your_desired_country_here>"  
  4. Add the following modules to your Polybar or i3blocks configuration file. Be sure to replace /path/to/environment and /path/to/polybar-news with your own paths.

    Polybar Modules

    ; Fetches news from API and saves it into articles.json
    [module/news-fetcher]
    type = custom/script
    exec = /path/to/environment/bin/python /path/to/polybar-news/news_fetcher.py
    ; This module runs every 900 seconds (15 minutes) if the news source is NewsAPI due to its API limit of 100 calls per day for free tier accounts
    interval = 900
    
    ; Rotates through the list of news articles in articles.json 
    ; and saves the current article's title and URL in separate text files
    ; This module runs every X seconds to change the displayed article
    [module/news-rotator]
    type = custom/script
    interval = 60
    exec = /path/to/environment/bin/python /path/to/polybar-news/news_rotator.py
    
    ; Displays the current news article title
    ; Refreshes every second to ensure updated information is displayed 
    ; On left click, opens the current article's URL in the default web browser
    [module/news-display]
    type = custom/script
    tail = true
    interval = 1
    format-prefix = " ο‡ͺ "
    format = <label>
    label-padding = 1
    label-maxlen = 50
    exec = /path/to/polybar-news/print_current_article.sh
    click-left = < /path/to/polybar-news/current_article_url.txt xargs -I % xdg-open %

    i3Blocks

    # Fetches news from API and saves it into articles.json
    [news-fetcher]
    command=/path/to/environment/bin/python /path/to/polybar-news/news_fetcher.py
    interval=900
    separator=false
    
    # Rotates through the list of news articles in articles.json
    # and saves the current article's title and URL in separate text files
    # This module runs every X seconds to change the displayed article
    [news-rotator]
    command=/path/to/environment/bin/python /path/to/polybar-news/news_rotator.py
    interval=60
    separator=false
    
    # Displays the current news article title
    # Refreshes every second to ensure updated information is displayed
    # On left click, opens the current article's URL in the default web browser
    [news-display]
    command=path/to/polybar-news/print_current_article.sh
    interval=1
    separator=true
    markup=pango
    label=ο‡ͺ 
    command=if [ $button ]; then xdg-open "$(cat /path/to/polybar-news/current_article_url.txt)"; else $HOME/.config/i3/i3blocks/scroll path/to/polybar-news/print_current_article.sh; fi
    
  5. Text Scrolling (Optional)

    Polybar

    1. Install zscroll

    2. Modify the news-display module in your Polybar configuration file to use the scroll_current_article.sh script:

      [module/news-display]
      ...
      exec = /path/to/polybar-news/scroll_current_article.sh
      ...

    i3blocks

    1. Download the scroll script:

      curl -o ~/.config/i3blocks/scroll https://raw.githubusercontent.com/Anachron/i3blocks/master/blocks/scroll
    2. Make the scroll script executable:

      chmod +x ~/.config/i3blocks/scroll
    3. Modify the news-display module in your i3blocks configuration file to use the scroll script and print_current_article.sh script:

      [news-display]
      command=~/.config/i3blocks/scroll /path/to/polybar-news/print_current_article.sh
      interval=1
      separator=true
      markup=pango
      label=ο‡ͺ 
      command=if [ $button ]; then xdg-open "$(cat /path/to/polybar-news/current_article_url.txt)"; else $HOME/.config/i3/i3blocks/scroll path/to/polybar-news/print_current_article.sh; fi

Contributing

Contributions are always welcome! Feel free to open a pull request to contribute code, or create an issue to report a bug or suggest a new feature.

License

This project is licensed under the MIT License - see the LICENSE file for details.