adji

adji is a recursive acronym for Adji’s a Decisive and Joyful Internet browser

adji is a simple, decisive and distraction free web browser using GTK+ 3, GLib and WebKit2GTK+. This web browser takes inspiration from other web browsers like surf, lariza and vimb.

Download

adji 0.1.9 (33kb) (2023-03-09)

Setting up an environment

To optimize the usage of adji, it is recommended to configure certain environment variables, ideally by exporting them through your ~/.profile file. Here is an example of the variable values that I prefer:

# setup adji browser config 
export ADJI_ACCEPTED_LANGUAGES="en_US" 
export ADJI_COOKIE_FILE="$XDG_CACHE_HOME/adji/cookies" 
export ADJI_DEFAULT_FONT="Source Code Pro" 
export ADJI_DEFAULT_FONT_SIZE="16" 
export ADJI_DOWNLOAD_DIR="$HOME/downloads" 
export ADJI_HISTORY_FILE="$XDG_CACHE_HOME/adji/history" 
export ADJI_MONOSPACE_FONT="Source Code Pro" 
export ADJI_SANS_SERIF_FONT="Liberation Sans" 
export ADJI_SERIF_FONT="Liberation Serif" 
export ADJI_SE_URI_FORMAT="https://ddg.gg?q=%s" 
export ADJI_STATE_FILE="$XDG_CACHE_HOME/adji/state" 

Manual

ADJI(1)                     General Commands Manual                    ADJI(1) 
 
NAME 
       adji - Adji’s a Decisive and Joyful Internet browser 
 
SYNOPSIS 
       adji [-I] [URI...] 
 
DESCRIPTION 
       adji is a simple, decisive and distraction free web browser using GTK+ 
       3, GLib and WebKit2GTK+. This web browser takes inspiration from other 
       web browsers like surf(1), lariza(1) and vimb(1). 
 
OPTIONS 
       Along with the standard arguments for GTK+ 3 (see gtk-options(7)), adji 
       is equipped with the following options: 
 
       -I     Implements an independent instance without any ipc 
              configuration. 
 
       If no URI are provided, the value of the enviornment variable 
       ADJI_HOME_URI will be opened which defaults to “about:blank”. 
       Otherwise, any number of URIs may follow these options. 
 
ENVIRONMENT 
       adji recognizes the following environment variables, in addition to the 
       standard variables of GTK+ 3: 
 
       ADJI_ACCEPTED_LANGUAGES 
              When sending an HTTP request, WebKit populates the “Accepted- 
              Language” header based on the provided list of languages, which 
              can be comma-separated (e.g. “en_US,en_AU”). If no languages are 
              specified, WebKit will use en_US as the default. 
 
       ADJI_COOKIE_FILE 
              By providing a path to a cookie file, adji will provide a method 
              of sharing cookies between sessions and instances. 
 
       ADJI_DEFAULT_FONT 
              Provides a method for specifying the default font inside the web 
              view of adji.  If no default font is specified, WebKit will use 
              sans-serif as the default. 
 
       ADJI_DEFAULT_FONT_SIZE 
              Provides a method for specifying the default font size inside 
              the web view of adji.  If no default font size is specified, 
              WebKit will use 16 as the default. 
 
       ADJI_DISABLE_AUTO_LOAD_IMAGES 
              For a faster, or perhaps a more secure way of browsing the web, 
              setting this variable provides a method of preventing images 
              from loading automatically. 
 
       ADJI_DOWNLOAD_DIR 
              This variable allows you to specify the directory to where all 
              downloads are stored according to your preference. By default 
              all downloads are stored at /var/tmp. 
 
       ADJI_ENABLE_CONSOLE_TO_STDOUT 
              Output that is printed to the web view console can be copied to 
              STDOUT setting this variable. 
 
       ADJI_ENABLE_SMOOTH_SCROLLING 
              By default adji disables the janky and annoying “smooth 
              scrolling”. If you for some reason like it, setting this 
              variable will enable it. 
 
       ADJI_FIFO_NAME 
              adji implements IPC configurations using named pipes in the file 
              system. According to XDG standards, the files for these named 
              pipes are stored as 
              /var/run/user/$UID/adji_$ADJI_FIFO_NAME.fifo. 
 
              The $UID refers to the id of the user running adji. 
              $ADJI_FIFO_NAME refers to the value of this variable, which 
              defaults to default.  By specifying this variable, parallel IPC 
              configurations can be used. Be sure to also specify the 
              $ADJI_STATE_FILE accordingly. If you do not, the IPC instances 
              will conflict and overwrite the states of each other. 
 
       ADJI_HISTORY_FILE 
              When set, adji will store each visited URI to the file 
              specified. 
 
       ADJI_HOME_URI 
              The URI that will be opened in new tabs if nothing else is 
              specified. Defaults to about:blank. 
 
       ADJI_MONOSPACE_FONT 
              Provides a method for specifying the monospace font inside the 
              web view of adji. If no monospace font is specified, WebKit 
              will use monospace as the default. 
 
       ADJI_PROXY_IGNORE 
              When specifying a proxy URI, adji will send every HTTP requests 
              through that URI. To exclude traffic to certain hosts from being 
              sent through the specified proxy URI, this variable can be used 
              to provide a comma-separated list of hosts to be ignored (e.g. 
              “127.0.0.1,noxz.tech”). 
 
       ADJI_PROXY_URI 
              By specifying a proxy URI, adji will send every HTTP requests 
              through that URI. As an example a socks proxy for tor can be 
              specified in this way “socks://127.0.0.1:9050”. 
 
       ADJI_SANS_SERIF_FONT 
              Provides a method for specifying the sans-serif font inside the 
              web view of adji. If no sans-serif font is specified, WebKit 
              will use sans-serif as the default. 
 
       ADJI_SERIF_FONT 
              Provides a method for specifying the serif font inside the web 
              view of adji.  If no serif font is specified, WebKit will use 
              serif as the default. 
 
       ADJI_SE_URI_FORMAT 
              If an entry cannot be resolved as either a URI or a file path, a 
              web search will be performed. To define the method of 
              perforating this web search, a format can be utilized in the 
              following manner, using http://ddg.gg as an example: 
              “https://ddg.gg?q=%s”.  One, and only one, string reference (%s) 
              must be specified. The default value is https://ddg.gg?q=%s. 
 
       ADJI_STATE_FILE 
              By specifying a path to a state file, adji will save the state 
              of open tabs for next time the program is run. Each time a tab 
              is moved, updated or otherwise changed, the state of open tabs 
              will be saved as a list of URIs. It is important to avoid using 
              the same state file for multiple IPC configurations, as they 
              will conflict and overwrite each other. 
 
       ADJI_VERBOSE 
              If set, this feature is employed by we_redirect.so to verbosely 
              output to STDERR which redirections are being. 
 
       ADJI_USER_AGENT 
              By default, adji uses WebKit’s default value for the user agent 
              string. This variable can be utilized to specify an alternative 
              user agent to the default one. 
 
       ADJI_ZOOM_LEVEL 
              This variable can be utilized to set the zoom level of WebKit’s 
              viewports. The default value is 1.0. 
 
FILES 
       These paths will be constructed using XDG variables. 
 
       ˜/.config/adji/redirect 
              Redirect rules used by we_redirect.so.  See the WEB EXTENSION 
              section. 
 
       ˜/.config/adji/exthandler 
              adji has a built-in mechanism for externally handling URIs. You 
              can use the file specified by the path to define how these URIs 
              should be handled in a customized manner. A system call passes 
              the URI as the first parameter. 
 
       ˜/.config/adji/scripts 
              Directory to store user scripts (JavaScript). 
 
       ˜/.config/adji/styles 
              Directory to store user style sheets (CSS). 
 
       ˜/.config/adji/web_extensions 
              Directory where WebKit will search for web extensions. 
 
       ˜/.cache/adji 
       ˜/.cache/webkitgtk 
       ˜/.local/share/webkitgtk 
              WebKitGTK will store its caches and local storage data in these 
              directories.  It is recommended to periodically clean these 
              directories or mount them as some sort of volatile storage. 
 
USAGE 
   Entry 
       Entry refers to the entry/location/command bar at the bottom of the 
       window. 
 
       Mod1-h Navigate the caret to the left in the entry. 
 
       Mod1-l Navigate the caret to the right in the entry. 
 
       Enter/Return 
              The entered command or URI is resolved as appropriate. If no 
              resolution is found, the entry is reverted back to its original 
              value.  Escape The entry is reverted back to its original value. 
 
   Tab bar 
       Button1 
              When a tab is clicked, the corresponding pair of web view and 
              entry will be made visible 
 
       Button2 
              Clicking on a tab using the scroll wheel will close the pair of 
              view and entry represented by that tab 
 
       Scroll wheel 
              While hovering over the tab bar, scrolling the scroll wheel will 
              allow you to move through tabs in the same direction as your 
              scroll. 
 
   Download bar 
       The download bar remains hidden until a download is initiated. As the 
       download progresses, the progress is shown and updated. Each download 
       is represented by a button that can be clicked. During an active 
       download, clicking the button will abort the download and remove the 
       button. Once the download is complete, the button will simply be 
       removed when clicked. 
 
   Web view 
       Escape Stops the web rendering. 
 
       Button2 
              Opens a hovered URI in a new tab. 
 
       Button8 
              Go back in history. 
 
       Button9 
              Go forward in history. 
 
       Mod1-[Scroll Wheel] 
              The zoom level of the current web view can be adjusted by 
              scrolling while holding down the Mod1 key. 
 
   Global keyboard commands 
       Mod1-Ctrl-Shift-j 
              Move the current tab to the left (further down in the stack) 
              within the tab bar. 
 
       Mod1-Ctrl-Shift-K 
              Move the current tab to the right (further up in the stack) 
              within the tab bar. 
 
       Mod1-Ctrl-j 
              Switch to the previous tab (the one to the left of the current 
              one). 
 
       Mod1-Ctrl-k 
              Switch to the next tab (the one to the right of the current 
              one). 
 
       Mod1-[1..n] 
              Switch to the nth tab. 
 
       Mod1-q Close the current tab. 
 
       Mod1-w Go the specified home page. 
 
       Mod1-t Open the specified home page within a new tab. 
 
       Mod1-r Reload the page, bypassing the cache. 
 
       Mod1-o Focus the entry bar for input. 
 
       Mod1-/ Initiate an in-page search. 
 
       Mod1-n Perform a forward search within the context of the in-page 
              search. 
 
       Mod1-Shift-n 
              Perform a backwards search within the context of the in-page 
              search. 
 
       Mod1-b Toggle the visibility of the tab bar. 
 
       Mod1-Shift-h 
              Go back in history. 
 
       Mod1-Shift-l 
              Go forward in history. 
 
       Mod1-s Toggle JavaScript functionality on or off. 
 
       Mod1-c Toggle the TLS error policy between fail or ignore. 
 
       Mod1-h Move/scroll towards the left on the page. 
 
       Mod1-l Move/scroll towards the right on the page. 
 
       Mod1-j Move/scroll towards the bottom of the page. 
 
       Mod1-k Move/scroll towards the top of the page. 
 
       Mod1-Shift-g 
              Go to the bottom of the page. 
 
       Mod1-g Go to the top of the page. 
 
       Mod1-p Open the print dialog. 
 
   Entry commands 
       Commands can be executed from the entry using a proceeding “:”. adji 
       accepts two types of commands. 
 
       q      If applicable, the program saves its state before quitting. 
 
       /      To initiate an in-page search for a specific phrase, such as 
              “banana”, you would enter the succeeding phrase in the format of 
              :/banana. 
 
   User scripts 
       Upon successful loading of a page, the directory ˜/.config/adji/scripts 
       is scanned, and every file with the “.js” extension is executed as a 
       JavaScript file within the context of the loaded page. 
 
   User styles 
       Upon successful loading of a page, the directory ˜/.config/adji/styles 
       is scanned, and every file with the “.css” extension is injected as a 
       style sheet within the context of the loaded page. These style sheets 
       can be utilized to customize the appearance of web pages according to 
       your preferences. 
 
WEB EXTENSION 
       we_redirect.so 
          To specify redirect rules in the redirect file, you should use 
          the following format: /pattern/destination/.  Each rule should 
          be written on a single line, and an arbitrary separator should 
          be used to initialize each rule. This separator can be any 
          character except for the “#” symbol, which is used for line 
          comments. The pattern can be any regular expression pattern that 
          matches a URI request. The destination can be left empty, or it 
          can contain a replacement pattern that references regex groups 
          from the pattern. If the destination is empty, the request will 
          be terminated and act as a URI block. 
 
          Regular expressions in terms of syntax and semantics are akin to 
          Perl regular expressions. 
 
EXAMPLES 
       adji -I 
              This command launches an independent adji instance without any 
              IPC configuration. It will not load or save any states. 
              However, if certain environment variables like ADJI_HISTORY_FILE 
              and ADJI_COOKIE_FILE are defined, this instance will use them. 
              Therefore, it cannot be considered completely isolated. 
 
              To make such an instance more isolated the variables 
              ADJI_HISTORY_FILE, ADJI_COOKIE_FILE, XDG_CACHE_HOME, and 
              XDG_DATA_HOME should be set to the value “/dev/null” before 
              executing the command. 
 
       ADJI_PROXY_URI=socks://127.0.0.1:9050 adji -I 
              This command launches an independent adji instance without any 
              IPC configuration. It routes every HTTP request through a 
              designated proxy URI, specifically a tor socks proxy in this 
              case. It will not load or save any states. 
 
              However, to enhance privacy and isolation of this instance, 
              measures must be taken to prevent data leakage through cookies 
              or other sources. Additionally, consider using a more privacy- 
              focused web browser. 
 
KNOWN ISSUES 
       Double-clicking on a tab grabs the focus and prevents global key 
       commands from functioning. This issue could be addressed by focusing 
       the web view upon tab click events. However, as it is a minor problem 
       and only present in a mouse workflow, such a solution has not been 
       implemented. 
 
AUTHOR 
       Chris Noxz <chris@noxz.tech> 
 
COPYRIGHT 
       Copyright © 2023 Chris Noxz. 
 
       License: GPLv3+ 
 
       GNU GPL version 3 or later 
       <https://www.gnu.org/licenses/licenses.html>. 
 
       This is free software: you are free to change and redistribute it. 
       There is NO WARRANTY, to the extent permitted by law. 
 
                                  adji-0.1.9                           ADJI(1) 

Installation

Edit config.mk to match your local setup (adji is installed into the /usr/local namespace by default), then simply enter the following command to install (if necessary as root):

make clean install 

get source here.