This commit is contained in:
Vilyaem 2025-03-02 03:05:35 -05:00
commit 7be70802f6
220 changed files with 39717 additions and 0 deletions

1
.Xresources Normal file
View file

@ -0,0 +1 @@
Xcursor.theme: Bibata-Modern-Classic

5
.config/.gitconfig Normal file
View file

@ -0,0 +1,5 @@
[user]
email = kenyaz@vilyaem.xyz
name = Vilyaem
[credential]
helper = cache

View file

@ -0,0 +1,26 @@
[General]
recentFileList=/home/vilyaem/kb.scad, /home/vilyaem/repos/keebcu/tedboard.scad
[3dview]
colorscheme=Metallic
[design]
autoReload=true
[view]
hide3DViewToolbar=false
hideConsole=false
hideCustomizer=true
hideEditor=true
hideEditorToolbar=false
hideErrorLog=false
orthogonalProjection=false
showAxes=true
showCrosshairs=false
showEdges=false
showScaleProportional=true
[window]
position=@Point(640 252)
size=@Size(638 232)
state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x3\0\0\0\0\0\0\x2.\0\0\x2\x8a\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0\x65\0\x64\0i\0t\0o\0r\0\x44\0o\0\x63\0k\0\0\0\0\x14\0\0\x2\x8a\0\0\0j\0\xff\xff\xff\0\0\0\x1\0\0\x1\x65\0\0\0\0\xfc\x2\0\0\0\x1\xfb\0\0\0\x1a\0p\0\x61\0r\0\x61\0m\0\x65\0t\0\x65\0r\0\x44\0o\0\x63\0k\0\0\0\0\x14\0\0\0\x96\0\0\0\x96\0\xff\xff\xff\0\0\0\x3\0\0\x2~\0\0\0\x1d\xfc\x1\0\0\0\x2\xfb\0\0\0\x16\0\x63\0o\0n\0s\0o\0l\0\x65\0\x44\0o\0\x63\0k\x1\0\0\0\0\0\0\0\x85\0\0\0)\0\xff\xff\xff\xfb\0\0\0\x18\0\x65\0r\0r\0o\0r\0L\0o\0g\0\x44\0o\0\x63\0k\x1\0\0\0\x8b\0\0\x1\xf3\0\0\0)\0\xff\xff\xff\0\0\x2~\0\0\0\x9b\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x2\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x14\0t\0\x61\0\x62\0T\0o\0o\0l\0\x42\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)

File diff suppressed because it is too large Load diff

5
.config/foot/foot.ini Normal file
View file

@ -0,0 +1,5 @@
[main]
shell=/bin/sh
font=Terminus:size=14
[colors]
alpha=0.7

View file

@ -0,0 +1,11 @@
[Filechooser Settings]
LocationMode=filename-entry
ShowHidden=false
ShowSizeColumn=true
GeometryX=270
GeometryY=102
GeometryWidth=819
GeometryHeight=542
SortColumn=modified
SortOrder=descending
StartupMode=recent

View file

@ -0,0 +1,5 @@
[Settings]
gtk-icon-theme-name = Breeze
gtk-theme-name = Breeze
gtk-font-name = Terminus
gtk-application-prefer-dark-theme = true

63
.config/htop/htoprc Normal file
View file

@ -0,0 +1,63 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
htop_version=3.3.0
config_reader_min_version=3
fields=0 48 17 18 38 39 40 2 46 47 49 1
hide_kernel_threads=1
hide_userland_threads=0
hide_running_in_container=0
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
highlight_deleted_exe=1
shadow_distribution_path_prefix=0
highlight_megabytes=1
highlight_threads=1
highlight_changes=0
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=0
header_margin=1
screen_tabs=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
show_cpu_temperature=0
degree_fahrenheit=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
enable_mouse=1
delay=15
hide_function_bar=0
header_layout=two_50_50
column_meters_0=AllCPUs Memory Swap
column_meter_modes_0=1 1 1
column_meters_1=Tasks LoadAverage Uptime
column_meter_modes_1=2 2 2
tree_view=0
sort_key=46
tree_sort_key=0
sort_direction=-1
tree_sort_direction=1
tree_view_always_by_pid=0
all_branches_collapsed=0
screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command
.sort_key=PERCENT_CPU
.tree_sort_key=PID
.tree_view_always_by_pid=0
.tree_view=0
.sort_direction=-1
.tree_sort_direction=1
.all_branches_collapsed=0
screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE Command
.sort_key=IO_RATE
.tree_sort_key=PID
.tree_view_always_by_pid=0
.tree_view=0
.sort_direction=-1
.tree_sort_direction=1
.all_branches_collapsed=0

28
.config/mimeapps.list Normal file
View file

@ -0,0 +1,28 @@
[Default Applications]
x-scheme-handler/mailto=userapp-Thunderbird-5DSCS2.desktop
message/rfc822=userapp-Thunderbird-5DSCS2.desktop
x-scheme-handler/mid=userapp-Thunderbird-5DSCS2.desktop
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
x-scheme-handler/chrome=firefox.desktop
text/html=firefox.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/xhtml+xml=firefox.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop
[Added Associations]
x-scheme-handler/mailto=userapp-Thunderbird-5DSCS2.desktop;
x-scheme-handler/mid=userapp-Thunderbird-5DSCS2.desktop;
x-scheme-handler/http=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
x-scheme-handler/chrome=firefox.desktop;
text/html=firefox.desktop;
application/x-extension-htm=firefox.desktop;
application/x-extension-html=firefox.desktop;
application/x-extension-shtml=firefox.desktop;
application/xhtml+xml=firefox.desktop;
application/x-extension-xhtml=firefox.desktop;
application/x-extension-xht=firefox.desktop;

2
.config/mpv/mpv.conf Normal file
View file

@ -0,0 +1,2 @@
ytdl-format=bestvideo[height<=480]+bestaudio/best
audio-display=no

View file

@ -0,0 +1,865 @@
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
info title
info underline
info "OS" distro
info "Host" model
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "Resolution" resolution
info "DE" de
info "WM" wm
info "WM Theme" wm_theme
info "Theme" theme
info "Icons" icons
info "Terminal" term
info "Terminal Font" term_font
info "CPU" cpu
info "GPU" gpu
info "Memory" memory
# info "GPU Driver" gpu_driver # Linux/macOS only
# info "CPU Usage" cpu_usage
# info "Disk" disk
# info "Battery" battery
# info "Font" font
# info "Song" song
# [[ "$player" ]] && prin "Music Player" "$player"
# info "Local IP" local_ip
# info "Public IP" public_ip
# info "Users" users
# info "Locale" locale # This only works on glibc systems.
info cols
}
# Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="off"
# Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
# Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
# Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="on"
# Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="off"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="mib"
# Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
# Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
# CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="off"
# GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
# Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="off"
# Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
# IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
# Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
# Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
# Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
# Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="-"
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator=":"
# Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
# Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
#image_backend="ascii"
image_backend="chafa"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="wallpaper"
# Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
# Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=3
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
# Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

3
.config/nvim/README.md Normal file
View file

@ -0,0 +1,3 @@
# Vilyaem's Neovim
This is my NeoVim configuration, I've greatly simplified it from the
NVChad nonsense I was using for a while.

243
.config/nvim/init.lua Normal file
View file

@ -0,0 +1,243 @@
--[[---------------------------------------------
- Description - Vilyaem's Neovim Configuration
- Author - Vilyaem
- -------------------------------------------]]
vim.g.mapleader = " "
--Vilyaem's Settings
vim.opt.autoindent = true
vim.opt.backspace = { 'indent', 'eol', 'start' }
vim.opt.encoding = 'utf-8'
vim.opt.expandtab = true
vim.opt.lazyredraw = true
vim.opt.list = true
vim.opt.listchars = { tab = '>.' }
vim.opt.mouse = 'a'
vim.opt.swapfile = false
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.spelllang = 'en_gb'
vim.opt.shiftwidth = 2
vim.opt.viminfo = ''
vim.opt.history = 1000
--Colouring
vim.cmd("highlight Comment guifg=NONE ")
vim.cmd("highlight @comment guifg=NONE ")
vim.api.nvim_set_hl(0,"Normal",{bg = "none"})
vim.api.nvim_set_hl(0,"NormalFloat",{bg = "none"})
--Enable King's English Spell Checking
vim.opt.spelllang = 'en_gb'
vim.opt.spell = true
-- Easy search and replace
vim.api.nvim_set_keymap('n', 'S', ':%s///g<Left><Left><Left>', { noremap = true })
vim.api.nvim_set_keymap('v', 'S', ':s///g<Left><Left><Left>', { noremap = true })
-- Easy save
vim.api.nvim_set_keymap('n', 'W', ':w<CR>', { noremap = true })
-- Function or File heading
function FileHeading()
local line = vim.fn.line(".")
vim.fn.setline(line, "/*********************************************")
vim.fn.append(line, "* Description - ")
vim.fn.append(line + 1, "* Author - Vilyaem")
vim.fn.append(line + 2, "* *******************************************/")
end
vim.api.nvim_set_keymap('i', '<F4>', '<Esc>:lua FileHeading()<CR>g;kkA', { noremap = true })
-- Section
vim.api.nvim_set_keymap('i', '<F3>', '<Esc>I/*----------!----------*/<Esc>/!<CR>?<CR>xi', { noremap = true })
--F6 talk to the soybot
vim.api.nvim_set_keymap("n","<F6>","<Esc>:Gen<CR>",{noremap = true, silent = true})
-- Set the key mappings for the GDB commands
vim.keymap.set("n", "<leader>db", "<cmd>GdbStart<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>dc", "<cmd>GdbContinue<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>dn", "<cmd>GdbNext<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>ds", "<cmd>GdbStep<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>di", "<cmd>GdbStepInto<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>do", "<cmd>GdbStepOut<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>db", "<cmd>GdbBreakpoint<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>dw", "<cmd>GdbWatch<cr>", { noremap = true, silent = true })
--Calculate expression plugin
vim.api.nvim_create_user_command("Calculate", "lua require(\"calculator\").calculate()",
{ ["range"] = 1, ["nargs"] = 0 })
--Setup packer
-- Install packer.nvim for plugin management
local function bootstrap_packer()
local fn = vim.fn
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
vim.cmd('packadd packer.nvim')
return true
end
return false
end
local packer_bootstrap = bootstrap_packer()
-- Use packer to manage plugins
require('packer').startup(function(use)
use 'wbthomason/packer.nvim' -- Package manager
use{"L3MON4D3/LuaSnip"}
use{"vzze/calculator.nvim"}
use{"hrsh7th/nvim-cmp"}
use{"hrsh7th/cmp-buffer"}
use{"hrsh7th/cmp-nvim-lsp"}
use{"hrsh7th/cmp-nvim-lua"}
use{"hrsh7th/cmp-path"}
use{"saadparwaiz1/cmp_luasnip"}
use{"stevearc/conform.nvim"}
use{"rafamadriz/friendly-snippets"}
use{"David-Kunz/gen.nvim"}
use{"lewis6991/gitsigns.nvim"}
use{"lukas-reineke/indent-blankline.nvim"}
use{"williamboman/mason.nvim"}
use{"williamboman/mason-lspconfig.nvim"}
use{"windwp/nvim-autopairs"}
use{"sakhnik/nvim-gdb"}
use{"neovim/nvim-lspconfig"}
use{"nvim-tree/nvim-tree.lua"}
use{"nvim-treesitter/nvim-treesitter"}
use{"nvim-lua/plenary.nvim"}
use{"nvim-telescope/telescope.nvim"}
use{"ThePrimeagen/vim-be-good"}
use{"folke/which-key.nvim"}
if packer_bootstrap then
require('packer').sync()
end
end)
-- Setup installed packages
require("nvim-tree").setup()
require("mason").setup()
require("telescope").setup{}
-- LSP
vim.api.nvim_create_autocmd('LspAttach', {
desc = 'LSP actions',
callback = function(event)
local opts = {buffer = event.buf}
-- these will be buffer-local keybindings
-- because they only work if you have an active language server
vim.keymap.set('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>', opts)
vim.keymap.set('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<cr>', opts)
vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>', opts)
vim.keymap.set('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<cr>', opts)
vim.keymap.set('n', 'go', '<cmd>lua vim.lsp.buf.type_definition()<cr>', opts)
vim.keymap.set('n', 'gr', '<cmd>lua vim.lsp.buf.references()<cr>', opts)
vim.keymap.set('n', 'gs', '<cmd>lua vim.lsp.buf.signature_help()<cr>', opts)
vim.keymap.set('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<cr>', opts)
vim.keymap.set({'n', 'x'}, '<F3>', '<cmd>lua vim.lsp.buf.format({async = true})<cr>', opts)
vim.keymap.set('n', '<F4>', '<cmd>lua vim.lsp.buf.code_action()<cr>', opts)
end
})
local lsp_capabilities = require('cmp_nvim_lsp').default_capabilities()
require('mason').setup({})
require('mason-lspconfig').setup({
ensure_installed = {},
handlers = {
function(clangd)
require('lspconfig').clangd.setup({
capabilities = lsp_capabilities,
})
end,
},
})
local cmp = require('cmp')
cmp.setup({
sources = {
{name = 'nvim_lsp'},
},
mapping = cmp.mapping.preset.insert({
-- Enter key confirms completion item
['<CR>'] = cmp.mapping.confirm({select = false}),
-- Ctrl + space triggers completion menu
['<C-Space>'] = cmp.mapping.complete(),
}),
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
})
-- Set package keybindings
local map = vim.keymap.set
map("i", "<C-b>", "<ESC>^i", { desc = "move beginning of line" })
map("i", "<C-e>", "<End>", { desc = "move end of line" })
map("i", "<C-h>", "<Left>", { desc = "move left" })
map("i", "<C-l>", "<Right>", { desc = "move right" })
map("i", "<C-j>", "<Down>", { desc = "move down" })
map("i", "<C-k>", "<Up>", { desc = "move up" })
map("n", "<C-h>", "<C-w>h", { desc = "switch window left" })
map("n", "<C-l>", "<C-w>l", { desc = "switch window right" })
map("n", "<C-j>", "<C-w>j", { desc = "switch window down" })
map("n", "<C-k>", "<C-w>k", { desc = "switch window up" })
map("n", "<Esc>", "<cmd>noh<CR>", { desc = "general clear highlights" })
map("n", "<C-s>", "<cmd>w<CR>", { desc = "general save file" })
map("n", "<C-c>", "<cmd>%y+<CR>", { desc = "general copy whole file" })
-- Key mappings for tab navigation
vim.api.nvim_set_keymap('n', '<Tab>', ':tabnext<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<S-Tab>', ':tabprevious<CR>', { noremap = true, silent = true })
-- Key mappings for closing and creating tabs
vim.api.nvim_set_keymap('n', '<leader>x', ':tabclose<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>b', ':tabnew<CR>', { noremap = true, silent = true })
-- Ensure new files opened from Nvim Tree open in new tabs
vim.api.nvim_create_autocmd("BufEnter", {
pattern = "*",
callback = function()
if vim.fn.winnr('$') == 1 and vim.bo.filetype == 'NvimTree' then
vim.cmd('tabnew')
end
end
})
-- Comment
map("n", "<leader>/", "gcc", { desc = "toggle comment", remap = true })
map("v", "<leader>/", "gc", { desc = "toggle comment", remap = true })
-- nvimtree
map("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "nvimtree toggle window" })
map("n", "<leader>e", "<cmd>NvimTreeFocus<CR>", { desc = "nvimtree focus window" })
-- telescope
map("n", "<leader>fw", "<cmd>Telescope live_grep<CR>", { desc = "telescope live grep" })
map("n", "<leader>fb", "<cmd>Telescope buffers<CR>", { desc = "telescope find buffers" })
map("n", "<leader>fh", "<cmd>Telescope help_tags<CR>", { desc = "telescope help page" })
map("n", "<leader>ma", "<cmd>Telescope marks<CR>", { desc = "telescope find marks" })
map("n", "<leader>fo", "<cmd>Telescope oldfiles<CR>", { desc = "telescope find oldfiles" })
map("n", "<leader>fz", "<cmd>Telescope current_buffer_fuzzy_find<CR>", { desc = "telescope find in current buffer" })
map("n", "<leader>cm", "<cmd>Telescope git_commits<CR>", { desc = "telescope git commits" })
map("n", "<leader>gt", "<cmd>Telescope git_status<CR>", { desc = "telescope git status" })
map("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" })
map("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "telescope find files" })
map(
"n",
"<leader>fa",
"<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>",
{ desc = "telescope find all files" }
)

View file

@ -0,0 +1,224 @@
-- Automatically generated packer.nvim plugin loader code
if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then
vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"')
return
end
vim.api.nvim_command('packadd packer.nvim')
local no_errors, error_msg = pcall(function()
_G._packer = _G._packer or {}
_G._packer.inside_compile = true
local time
local profile_info
local should_profile = false
if should_profile then
local hrtime = vim.loop.hrtime
profile_info = {}
time = function(chunk, start)
if start then
profile_info[chunk] = hrtime()
else
profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6
end
end
else
time = function(chunk, start) end
end
local function save_profiles(threshold)
local sorted_times = {}
for chunk_name, time_taken in pairs(profile_info) do
sorted_times[#sorted_times + 1] = {chunk_name, time_taken}
end
table.sort(sorted_times, function(a, b) return a[2] > b[2] end)
local results = {}
for i, elem in ipairs(sorted_times) do
if not threshold or threshold and elem[2] > threshold then
results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms'
end
end
if threshold then
table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)')
end
_G._packer.profile_output = results
end
time([[Luarocks path setup]], true)
local package_path_str = "/home/vilyaem/.cache/nvim/packer_hererocks/2.1.1734355927/share/lua/5.1/?.lua;/home/vilyaem/.cache/nvim/packer_hererocks/2.1.1734355927/share/lua/5.1/?/init.lua;/home/vilyaem/.cache/nvim/packer_hererocks/2.1.1734355927/lib/luarocks/rocks-5.1/?.lua;/home/vilyaem/.cache/nvim/packer_hererocks/2.1.1734355927/lib/luarocks/rocks-5.1/?/init.lua"
local install_cpath_pattern = "/home/vilyaem/.cache/nvim/packer_hererocks/2.1.1734355927/lib/lua/5.1/?.so"
if not string.find(package.path, package_path_str, 1, true) then
package.path = package.path .. ';' .. package_path_str
end
if not string.find(package.cpath, install_cpath_pattern, 1, true) then
package.cpath = package.cpath .. ';' .. install_cpath_pattern
end
time([[Luarocks path setup]], false)
time([[try_loadstring definition]], true)
local function try_loadstring(s, component, name)
local success, result = pcall(loadstring(s), name, _G.packer_plugins[name])
if not success then
vim.schedule(function()
vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {})
end)
end
return result
end
time([[try_loadstring definition]], false)
time([[Defining packer_plugins]], true)
_G.packer_plugins = {
LuaSnip = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/LuaSnip",
url = "https://github.com/L3MON4D3/LuaSnip"
},
["calculator.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/calculator.nvim",
url = "https://github.com/vzze/calculator.nvim"
},
["cmp-buffer"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/cmp-buffer",
url = "https://github.com/hrsh7th/cmp-buffer"
},
["cmp-nvim-lsp"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp",
url = "https://github.com/hrsh7th/cmp-nvim-lsp"
},
["cmp-nvim-lua"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/cmp-nvim-lua",
url = "https://github.com/hrsh7th/cmp-nvim-lua"
},
["cmp-path"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/cmp-path",
url = "https://github.com/hrsh7th/cmp-path"
},
cmp_luasnip = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/cmp_luasnip",
url = "https://github.com/saadparwaiz1/cmp_luasnip"
},
["conform.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/conform.nvim",
url = "https://github.com/stevearc/conform.nvim"
},
["friendly-snippets"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/friendly-snippets",
url = "https://github.com/rafamadriz/friendly-snippets"
},
["gen.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/gen.nvim",
url = "https://github.com/David-Kunz/gen.nvim"
},
["gitsigns.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/gitsigns.nvim",
url = "https://github.com/lewis6991/gitsigns.nvim"
},
["indent-blankline.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/indent-blankline.nvim",
url = "https://github.com/lukas-reineke/indent-blankline.nvim"
},
["mason-lspconfig.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/mason-lspconfig.nvim",
url = "https://github.com/williamboman/mason-lspconfig.nvim"
},
["mason.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/mason.nvim",
url = "https://github.com/williamboman/mason.nvim"
},
["nvim-autopairs"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/nvim-autopairs",
url = "https://github.com/windwp/nvim-autopairs"
},
["nvim-cmp"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/nvim-cmp",
url = "https://github.com/hrsh7th/nvim-cmp"
},
["nvim-gdb"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/nvim-gdb",
url = "https://github.com/sakhnik/nvim-gdb"
},
["nvim-lspconfig"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/nvim-lspconfig",
url = "https://github.com/neovim/nvim-lspconfig"
},
["nvim-tree.lua"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/nvim-tree.lua",
url = "https://github.com/nvim-tree/nvim-tree.lua"
},
["nvim-treesitter"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/nvim-treesitter",
url = "https://github.com/nvim-treesitter/nvim-treesitter"
},
["packer.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/packer.nvim",
url = "https://github.com/wbthomason/packer.nvim"
},
["plenary.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/plenary.nvim",
url = "https://github.com/nvim-lua/plenary.nvim"
},
["telescope.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/telescope.nvim",
url = "https://github.com/nvim-telescope/telescope.nvim"
},
ui = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/ui",
url = "https://github.com/NvChad/ui"
},
["vim-be-good"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/vim-be-good",
url = "https://github.com/ThePrimeagen/vim-be-good"
},
["which-key.nvim"] = {
loaded = true,
path = "/home/vilyaem/.local/share/nvim/site/pack/packer/start/which-key.nvim",
url = "https://github.com/folke/which-key.nvim"
}
}
time([[Defining packer_plugins]], false)
_G._packer.inside_compile = false
if _G._packer.needs_bufread == true then
vim.cmd("doautocmd BufRead")
end
_G._packer.needs_bufread = false
if should_profile then save_profiles() end
end)
if not no_errors then
error_msg = error_msg:gsub('"', '\\"')
vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None')
end

View file

@ -0,0 +1,47 @@
# If a config.py file exists, this file is ignored unless it's explicitly loaded
# via config.load_autoconfig(). For more information, see:
# https://github.com/qutebrowser/qutebrowser/blob/main/doc/help/configuring.asciidoc#loading-autoconfigyml
# DO NOT edit this file by hand, qutebrowser will overwrite it.
# Instead, create a config.py - see :help for details.
config_version: 2
settings:
bindings.key_mappings:
global:
<Ctrl-6>: <Ctrl-^>
<Ctrl-Enter>: <Ctrl-Return>
<Ctrl-I>: <Tab>
<Ctrl-J>: <Return>
<Ctrl-M>: <Return>
<Ctrl-[>: <Escape>
<Enter>: <Return>
<Shift-Enter>: <Return>
<Shift-Return>: <Return>
colors.webpage.darkmode.enabled:
global: true
colors.webpage.darkmode.policy.page:
global: smart
colors.webpage.preferred_color_scheme:
global: dark
content.notifications.enabled:
https://tmailor.com: false
https://www.rexoweb.com: false
content.proxy:
global: socks://localhost:9050/
downloads.location.directory:
global: /home/vilyaem/down/
fonts.default_family:
global: Terminus
fonts.web.family.sans_serif:
global: Terminus
fonts.web.family.serif:
global: Terminus
hints.chars:
global: aoeuidhtns
url.default_page:
global: file:///home/vilyaem/x/web/homepage/index.html
url.searchengines:
global:
DEFAULT: https://search.cherub.im/?q={}
url.start_pages:
global: file:///home/vilyaem/x/web/homepage/index.html

View file

@ -0,0 +1,8 @@
[FileDialog]
history=file:///home/vilyaem, file:///home/vilyaem/prog/basicrpg3
lastVisited=file:///home/vilyaem/prog/basicrpg3
qtVersion=6.7.2
shortcuts=file:, file:///home/vilyaem
sidebarWidth=98
treeViewHeader=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1\xec\0\0\0\x4\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\0\xff\0\0\0\x1\0\0\0\0\0\0\0?\0\0\0\x1\0\0\0\0\0\0\0@\0\0\0\x1\0\0\0\0\0\0\0n\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff\0\0\0\0)
viewMode=Detail

View file

View file

@ -0,0 +1,2 @@
set editing-mode vi
"\C-l": clear-screen

32
.config/screenkey.json Normal file
View file

@ -0,0 +1,32 @@
{
"no_systray": false,
"timeout": 0.0,
"recent_thr": 0.1,
"compr_cnt": 3,
"ignore": [],
"position": "fixed",
"persist": true,
"window": null,
"font_desc": "Terminus 10",
"font_size": "medium",
"font_color": "#9999c1c1f1f1",
"bg_color": "black",
"opacity": 0.7,
"key_mode": "composed",
"bak_mode": "baked",
"mods_mode": "normal",
"mods_only": false,
"multiline": false,
"vis_shift": false,
"vis_space": true,
"geometry": [
908,
22,
370,
42
],
"screen": 0,
"start_disabled": false,
"mouse": true,
"button_hide_duration": 1
}

View file

@ -0,0 +1,2 @@
program[term]=st
program[lock]=physlock

236
.config/sway/config Normal file
View file

@ -0,0 +1,236 @@
# Default config for sway
#
# Copy this to ~/.config/sway/config and edit it to your liking.
#
# Read `man 5 sway` for a complete reference.
exec swaymsg "exec nhkd &"
exec swaymsg "exec xbanish &"
### Variables
#
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
set $term st
# Your preferred application launcher
# Note: pass the final command to swaymsg so that the resulting window can be opened
# on the original workspace that the command was run on.
set $menu dmenu_path | wmenu | xargs swaymsg exec --
### Output configuration
#
# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
#
# Example configuration:
#
output LVDS-1 resolution 1280x720 position 1280,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs
### Idle configuration
#
# Example configuration:
#
# exec swayidle -w \
# timeout 300 'swaylock -f -c 000000' \
# timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
# before-sleep 'swaylock -f -c 000000'
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
### Input configuration
#
# Example configuration:
#
# input "2:14:SynPS/2_Synaptics_TouchPad" {
# dwt enabled
# tap enabled
# natural_scroll enabled
# middle_emulation enabled
# }
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.
set $mod Mod1
### Key bindings
#
# Basics:
#
# Start a terminal
bindsym $mod+Shift+Return exec $term
# Kill focused window
bindsym $mod+Shift+c kill
# Start your launcher
bindsym $mod+d exec $menu
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+r reload
# Exit sway (logs you out of your Wayland session)
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
#
# Moving around:
#
# Move your focus around
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
# Or use $mod+[up|down|left|right]
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# Move the focused window with the same, but add Shift
bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
# Ditto, with arrow keys
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
#
# Workspaces:
#
# Switch to workspace
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
# Note: workspaces can have any name you want, not just numbers.
# We just use 1-10 as the default.
#
# Layout stuff:
#
# You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits
# respectively.
bindsym $mod+b splith
bindsym $mod+v splitv
# Switch the current container between different layout styles
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# Make the current focus fullscreen
bindsym $mod+f fullscreen
# Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle
# Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle
# Move focus to the parent container
bindsym $mod+a focus parent
input * {
xkb_layout "us"
xkb_variant "dvorak"
# Capslock key should work as escape key
# See /usr/share/X11/xkb/rules/xorg.lst for options
xkb_options caps:escape
repeat_delay 250
repeat_rate 70
}
#
# Scratchpad:
#
# Sway has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
# left will shrink the containers width
# right will grow the containers width
# up will shrink the containers height
# down will grow the containers height
bindsym $left resize shrink width 10px
bindsym $down resize grow height 10px
bindsym $up resize shrink height 10px
bindsym $right resize grow width 10px
# Ditto, with arrow keys
bindsym Left resize shrink width 10px
bindsym Down resize grow height 10px
bindsym Up resize shrink height 10px
bindsym Right resize grow width 10px
# Return to default mode
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
position top
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
status_command while date +'%Y-%m-%d %X'; do sleep 1; done
colors {
statusline #ffffff
#background #323232
background #000000
inactive_workspace #32323200 #32323200 #5c5c5c
}
}
include /etc/sway/config.d/*

View file

@ -0,0 +1,33 @@
# /home/vilyaem/.config/tmuxinator/work.yml
name: work
root: ~/
startup_window: sigma
startup_pane: 1
windows:
- sigma:
layout: main-horizontal
panes:
- pmake
- twinkle-console
- watch -n 1200 remind ~/.local/share/pmakeremind
- monitorworld:
layout: even-horizontal
panes:
#For Busybox...
#- watch -n 1200 curl "5.9.243.187/?1Qn"
#- watch -n 1200 curl "5.9.243.188/XMR"
- watch --color -n 1200 curl "wttr.in/?1Qn"
- watch --color -n 1200 curl "rate.sx/XMR"
- monitorserver:
layout: even-horizontal
panes:
- watch -n 1200 ssh root@novgorod 'tail /var/log/nginx/error.log'
- watch -n 1200 ssh root@novgorod 'tail /var/log/nginx/access.log'
#- ssh root@novgorod 'top'
- soybot:
layout: even-horizontal
panes:
- nvim -c ':Gen'
- workshop:
layout: horizontal

View file

@ -0,0 +1,100 @@
" You can edit this file by hand.
" The " character at the beginning of a line comments out the line.
" Blank lines are ignored.
" The Default color scheme is used for any directory that does not have
" a specified scheme and for parts of user interface like menus. A
" color scheme set for a base directory will also
" be used for the sub directories.
" The standard ncurses colors are:
" Default = -1 = None, can be used for transparency or default color
" Black = 0
" Red = 1
" Green = 2
" Yellow = 3
" Blue = 4
" Magenta = 5
" Cyan = 6
" White = 7
" Light versions of colors are also available (they set bold
" attribute in terminals with less than 16 colors):
" LightBlack
" LightRed
" LightGreen
" LightYellow
" LightBlue
" LightMagenta
" LightCyan
" LightWhite
" Available attributes (some of them can be combined):
" bold
" underline
" reverse or inverse
" standout
" italic (on unsupported systems becomes reverse)
" combine
" none
" Vifm supports 256 colors you can use color numbers 0-255
" (requires properly set up terminal: set your TERM environment variable
" (directly or using resources) to some color terminal name (e.g.
" xterm-256color) from /usr/lib/terminfo/; you can check current number
" of colors in your terminal with tput colors command)
" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color
highlight clear
highlight Win cterm=none ctermfg=white ctermbg=black
highlight Directory cterm=bold ctermfg=cyan ctermbg=default
highlight Link cterm=bold ctermfg=yellow ctermbg=default
highlight BrokenLink cterm=bold ctermfg=red ctermbg=default
highlight HardLink cterm=none ctermfg=yellow ctermbg=default
highlight Socket cterm=bold ctermfg=magenta ctermbg=default
highlight Device cterm=bold ctermfg=red ctermbg=default
highlight Fifo cterm=bold ctermfg=cyan ctermbg=default
highlight Executable cterm=bold ctermfg=green ctermbg=default
highlight Selected cterm=bold ctermfg=magenta ctermbg=default
highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default
highlight TopLine cterm=none ctermfg=black ctermbg=white
highlight TopLineSel cterm=bold ctermfg=black ctermbg=default
highlight StatusLine cterm=bold ctermfg=black ctermbg=white
highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black
highlight CmdLine cterm=none ctermfg=white ctermbg=black
highlight ErrorMsg cterm=none ctermfg=red ctermbg=black
highlight Border cterm=none ctermfg=black ctermbg=white
highlight OtherLine ctermfg=default ctermbg=default
highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white
highlight SuggestBox cterm=bold ctermfg=default ctermbg=default
highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red
highlight CmpUnmatched cterm=bold ctermfg=white ctermbg=green
highlight CmpBlank ctermfg=default ctermbg=default
highlight AuxWin ctermfg=default ctermbg=default
highlight TabLine cterm=none ctermfg=white ctermbg=black
highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default
highlight User1 ctermfg=default ctermbg=default
highlight User2 ctermfg=default ctermbg=default
highlight User3 ctermfg=default ctermbg=default
highlight User4 ctermfg=default ctermbg=default
highlight User5 ctermfg=default ctermbg=default
highlight User6 ctermfg=default ctermbg=default
highlight User7 ctermfg=default ctermbg=default
highlight User8 ctermfg=default ctermbg=default
highlight User9 ctermfg=default ctermbg=default
highlight User10 ctermfg=default ctermbg=default
highlight User11 ctermfg=default ctermbg=default
highlight User12 ctermfg=default ctermbg=default
highlight User13 ctermfg=default ctermbg=default
highlight User14 ctermfg=default ctermbg=default
highlight User15 ctermfg=default ctermbg=default
highlight User16 ctermfg=default ctermbg=default
highlight User17 ctermfg=default ctermbg=default
highlight User18 ctermfg=default ctermbg=default
highlight User19 ctermfg=default ctermbg=default
highlight User20 ctermfg=default ctermbg=default
highlight OtherWin ctermfg=default ctermbg=default
highlight LineNr ctermfg=default ctermbg=default
highlight OddLine ctermfg=default ctermbg=default

View file

@ -0,0 +1,6 @@
This directory is dedicated for user-supplied scripts/executables.
vifm modifies its PATH environment variable to let user run those
scripts without specifying full path. All subdirectories are added
as well. File in a subdirectory overrules file with the same name
in parent directories. Restart might be needed to recognize files
in newly created or renamed subdirectories.

30
.config/vifm/scripts/supervifm Executable file
View file

@ -0,0 +1,30 @@
#!/bin/sh
width="$1"
file="$2"
i=0
clear
printf "\n\n\n"
printf " "
while [ "$i" -lt $( expr "$width" / 2) ]
do
printf " "
i=$( expr "$i" + 1 )
done
if [ -z $DISPLAY ] ; then
chafa --work=1 -s 40x40 --animate=off -c 256 --symbols ascii "$file"
sleep 10
exit
fi
if [ -z "$TERM256" ] ; then
#chafa --work=1 --animate=off -c full -f sixels --bg blue "$file"
chafa --work=1 --animate=off -c 256 -f sixels --bg blue "$file"
else
#chafa --work=1 -s 32x32 --animate=off -c 256 -f symbols --bg blue "$file"
chafa --work=1 --animate=off -c 256 -f symbols --bg blue "$file"
fi
pkill chafa #make sure it's dead and not hogging resources

7011
.config/vifm/vifm-help.txt Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

46
.config/vifm/vifmrc Normal file
View file

@ -0,0 +1,46 @@
" Vilyaem's ViFM configuration
set dotfiles
set mouse=a
:view
command create :
\| let $last_char = expand(system("str=\"%a\"; echo \"${str: -1}\""))
\| if $last_char == "/"
\| mkdir "%a"
\| else
\| touch "%a"
\| endif
:map $ :shell<cr>
:map ; :
:map J :view<cr>
:map Q :quit<cr>
:map S :!sxiv *<cr>
:map ][ :compare listall<cr>
"Fix Sixel rendering bugs
:map <Up> :pwd<cr><C-p>
:map <Down> :pwd<cr><C-N>
nnoremap a :create<space>
filetype *.bmp,*.gif,*.jpe,*.jpeg,*.jpg,*.pbm,*.png,*.ppm,*.webp,*.xpm,*.dds,image_proxy sxiv
"filetype *.bmp,*.gif,*.jpe,*.jpeg,*.jpg,*.pbm,*.png,*.ppm,*.webp,*.xpm,image_proxy swiv
filetype *avi,*.mp4,*.mp3,*.m4a,*.mkv,*.webm,*.mod,*.s3m,*.it,*.raw,*.wav,*.ogg,*.ogv,*.opus mpv
filetype *.pdf,*.epub,*.djvu zathura
filetype *.mid,*.midi fluidsynth
"filetype * vim
filetype * nvim
filetype .* nvim
highlight Win cterm=none ctermfg=white ctermbg=none
"Sixel and 256 color file preview
fileviewer *.bmp,*.gif,*.jpe,*.jpeg,*.jpg,*.pbm,*.png,*.ppm,*.webp,*.xpm,image_proxy,*.ico supervifm %pw %c %pd %pc
fileviewer *.mp4,*.mkv,*.ogv,*.webm,*.avi,*.3gp ffmpegthumbnailer -s 128 -i %c -o ~/.cache/thumb.jpg ; supervifm %pw ~/.cache/thumb.jpg %pd %pc
fileviewer *.pdf pdftoppm -jpeg -f 1 -singlefile %c ~/.cache/thumb ; supervifm %pw ~/.cache/thumb.jpg %pd %pc
fileviewer *.epub gnome-epub-thumbnailer %c ~/.cache/thumb.jpg ; supervifm %pw ~/.cache/thumb.jpg %pd %pc
fileviewer *.img,*.bin,*.z,*.blend xxd %c
fileviewer *.wav,*.mp3,*.mid,*.it,*.s3m,*.mod,*.opus,*.bin,*.dll,*.exe,*.dat file %c

5
.gitconfig Normal file
View file

@ -0,0 +1,5 @@
# This is Git's per-user configuration file.
[user]
# Please adapt and uncomment the following lines:
name = Vilyaem
email = vilyaem@vilyaem.xyz

32
.tmux.conf Normal file
View file

@ -0,0 +1,32 @@
# Vilyaem's Tmux
# Default shell is zsh
set-option -g default-shell /bin/zsh
# colors
#set-option -g pane-border-bg blue
#set-option -g pane-border-fg black
set -g status-bg blue
set -g status-fg black
# Index at 1 instead of 0
set -g base-index 1
setw -g pane-base-index 1
# Different prefix key Ctrl-b -> Ctrl-a
set -g prefix C-a
# File reloading
#bind r source-file ~/.tmux.conf \; display “config file loaded.”
# Close immediately
unbind x
bind x kill-pane
bind X kill-session
# More window splitting
bind | split-window -h
bind - split-window -v

84
.vimrc Normal file
View file

@ -0,0 +1,84 @@
""VILYAEMS VIMRC
"tinier vimrc 80 line limit
filetype plugin on
set autoindent
set backspace=indent,eol,start
set encoding=utf-8
set et
set lazyredraw
set list
set listchars=tab:>.
set mouse=a
set nocompatible
set noswapfile
set number relativenumber
"set omnifunc=syntaxcomplete#Complete
set spelllang=en_gb
set sw=2
set viminfo=""
"syntax enable
"syntax spell toplevel
"Vimwiki
let g:vimwiki_list = [{'path': '~/x/wiki/md/', 'path_html': '~/x/wiki/web/',
\ 'template_path': '~/x/wiki/', 'template_default': 'page', 'template_ext': '.html'}]
"call plug#begin(system('echo "~/.vim/plugged/"'))
"Plug 'preservim/nerdtree'
"Plug 'jreybert/vimagit'
"Plug 'vimwiki/vimwiki'
"Plug 'xiyaowong/transparent.nvim'
"call plug#end()
"
" System clipboard usage
nnoremap <Leader>y "+y
nnoremap <Leader>p "+p
inoremap <Leader>y <Esc>"+y
inoremap <Leader>p <Esc>"+p
" Color column
nnoremap <Leader>co :set colorcolumn=80<cr>
nnoremap <Leader>nc :set colorcolumn-=80<cr>
"whitespace removal
"nnoremap <leader>cw :%s/\s\+$//<CR>:noh<CR>
"indent file
"nnoremap <leader>ind gg=G``
"inoremap <leader>ind <Esc>gg=G``I
"code completion
"inoremap <leader>1 <C-x><C-o>
"easy search and replace
nnoremap S :%s///g<Left><Left>
"easy save
nnoremap W :w<cr>
" c h soy++
"desc gen
function FileHeading()
let s:line=line(".")
call setline(s:line,"/*********************************************")
call append(s:line,"* Description - ")
call append(s:line+1,"* Author - Vilyaem")
call append(s:line+2,"* *******************************************/")
unlet s:line
endfunction
imap <F4> <Esc>mz:execute FileHeading()<Enter>g;kkA
"section
imap <F3> <Esc>I/*----------!----------*/<Esc>/!<Enter>?<Enter>xi
"bulid
imap <F5> <Esc>:w<Enter>:!./c.sh<Enter>
nnoremap <F5> <Esc>:w<Enter>:!./c.sh<Enter>
"comments
inoremap <leader>oc /*
inoremap <leader>cc */
inoremap <leader>cl <Esc>I/*<Esc>A*/
nnoremap <leader>cl <Esc>I/*<Esc>A*/
"syntax off

8
.xinitrc Normal file
View file

@ -0,0 +1,8 @@
xset r rate 400 100 &
picom &
setxkbmap -option caps:escape us dvorak &
xrandr -s 1280x720 &
xbanish &
nhkd &
bar &
exec dwm

4
.zprofile Normal file
View file

@ -0,0 +1,4 @@
#Login to window manager the moment I login to my first tty.
if [[ $(tty) == /dev/tty1 ]]; then
doas slim
fi

180
.zshrc Normal file
View file

@ -0,0 +1,180 @@
#############################################
# Description - My ZSH configuration
# Author - Vilyaem
# ###########################################
##########Zsh##########
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
autoload -Uz compinit -C -d "$ZSH_COMPDUMP/.zcompdump-${ZSH_VERSION}"
autoload -U colors && colors
_comp_options+=(globdots)
# Enable case-insensitive completion
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# Show possible completions in a menu
zstyle ':completion:*' menu select
# Enable auto-correction of mistyped commands
setopt correct
# Set the theme
ZSH_THEME="agnoster"
# History settings
HISTSIZE=10000000
SAVEHIST=10000000
HISTFILE=~/.cache/zsh_history
export ZSH_COMPDUMP="$HOME/.cache/zcompdump"
setopt append_history
setopt share_history
export PS1="%{$fg[blue]%}$USER%%%{$reset_color%} %~ "
#export PS1="$USER%% %~ "
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/r/zig-linux-x86_64-0.13.0/:$PATH"
export PATH="$HOME/.local/share/cargo/bin/:$PATH"
#Add Vi mode
bindkey -v
#Arrow key history completion
bindkey '^[[A' history-search-backward
bindkey '^[[B' history-search-forward
##########Default Programs##########
export BROWSER="firefox"
export BUG_PROJECT=$(pwd)/bug
export CC="gcc"
export EDITOR="v"
export MANPAGER='nvim +Man!'
export TERMINAL="st"
export SESSION_MANAGER="slim"
##########Ricing##########
export XDG_RUNTIME_DIR=/run/user/0
export GTK_THEME=Breeze:dark
export XCURSOR_THEME="Bibata-Modern-Classic"
export QT_QPA_PLATFORMTHEME="qt5ct:qt6ct"
eval $(dircolors -b)
##########Cleanup##########
export INPUTRC="~/.config/readline/.inputrc"
export XINITRC="/home/vilyaem/.config/X11/xinitrc"
export LESSHISTFILE="-"
export CARGO_HOME="$XDG_DATA_HOME"/cargo
export ASPELL_CONF="per-conf $XDG_CONFIG_HOME/aspell/aspell.conf; personal $XDG_DATA_HOME/aspell/en.pws; repl $XDG_DATA_HOME/aspell/en.prepl"
export ICEAUTHORITY="$XDG_CACHE_HOME/ICEauthority"
export ELECTRUMDIR="$XDG_DATA_HOME/electrum"
##########Wine##########
alias wine='WINEPREFIX="$HOME/.wine" WINEARCH=win32 wine'
alias wine64='WINEPREFIX="$HOME/.local/share/wineprefixes/default/" WINEARCH=win64 wine64'
#export WINEPREFIX=~/.wine64/
export WINEPREFIX=~/.local/share/wineprefixes/default/
export WINEARCH=win64
##########Aliases##########
alias abook='abook --datafile ~/.local/share/abook/addressbook'
alias alsafix='for x in `amixer controls | grep layback` ; do amixer cset "${x}" on ; done'
alias apc='doas apt list --installed | wc -l'
alias aplist='doas apt list --installed'
alias aptar='doas apt autoremove'
alias apti='doas apt install'
alias aptr='doas apt remove'
alias apts='doas apt search'
alias c='./c.sh'
alias dosbox="dosbox -conf ~/.local/share/dosbox/dosbox.conf"
alias dwifi='doas rfkill block wifi'
alias emsetup='cd ~/r/emsdk/ && ./emsdk activate latest && source ./emsdk_env.sh && pwd'
alias freedosmnt='doas mount -t msdos -o loop,offset=32256 freedos.img /mnt/'
alias gc='git clone --recurse-submodules --depth=1'
alias getcam='cp --update=none /mnt/DCIM/139CANON/* /root/media/vilyaemkenyaz/'
alias getmouse='xdotool getmouselocation --shell'
alias ghex='grabc -hex'
alias gmt='xdg-mime query filetype $1'
alias grgb='grabc -rgb' \
alias hosted='doas v /etc/hosts ; exit'
alias l='\ls --color=auto --group-directories-first'
alias ls='ls --color=auto -lah'
alias makeiso='xorriso -as mkisofs -o $1.iso .'
alias mkgource='gource --fullscreen -s 0.8 ./ --stop-at-end -follow-user --'VilyaemKenyaz''
alias nero='monero-wallet-cli --trusted-daemon --daemon-address http://node.monerodevs.org:18089 --wallet-file vilyaem'
alias neroo='monero-wallet-cli --trusted-daemon --daemon-address http://node.monerodevs.org:18089'
alias pg='ps aux | grep'
alias phptmp='doas php -S localhost:80'
alias printer='system-config-printer'
alias qrcode='qrencode -s 20 "#1" -o qr.png'
alias record='ffmpeg -y -f x11grab -r 25 -i :0.0 -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p -s 1280x720 vilcord-$(date -I).mkv'
alias recordcast='ffmpeg -y -f x11grab -r 30 -i :0.0 -f alsa -i hw:0 -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p vilcast-$(date -I).mkv'
alias recordmic='ffmpeg -y -f alsa -i hw:0 vilmic-$(date -I).ogg'
alias setbug='export BUG_PROJECT=$(pwd)/bug'
alias sk='screenkey'
alias sx='sxiv'
alias tarit='tar -czvf $1.tar.gz $1'
alias tsm='transmission-remote'
alias tsmd='pkill trans && transmission-daemon'
alias untar='tar -xzvf $1'
alias usbmnt='doas mount -t vfat /dev/sdb1 /mnt/ && ls /mnt/'
alias usbumnt='doas umount /mnt/'
alias vedit='cd ~ && v .vimrc'
alias vgamon='xrandr --output VGA1 --mode 640x480 --pos -640x0 --output HDMI1 --pos 0x0'
alias vi='nvim'
alias vim='nvim'
alias webcam='mpv /dev/video0'
alias wikiedit='z mr ; v *'
alias xb='xbacklight -set $1'
alias yt='ytfzf --ii=inv.nadeko.net --show-thumbnails -T chafa --max-threads=$(nproc)'
alias zathura='printf "use v"'
alias zipup='zip -r $1.zip $1 && rm $1'
##########Shell functions & utilities##########
#Dictionary!
dict(){
grep $@ ~/.config/dict.csv | awk -F, '{print "Definition of "$1"..."; print " " ;for (i=3; i<=NF; i++) printf "%s", $i; print ""}' | sed 's/\"//g'
}
#Internet dict.org dictionary
wdict(){
for var in "$@"
do
curl dict://dict.org/d:"$var"
done
}
#Read me a story!
story(){
pdftotext $@ - | espeak --stdout | mpv -
}
#Logout
bye(){
pkill tmux && doas su root --c 'pm-suspend'
}
#It's like notion, but not soy
note(){
printf ".H1\nJournal Entry of $(date)\n.P\n\n" > ~/.local/share/pmkentries/$(date -I).mr
remind ~/.reminders >> ~/.local/share/pmkentries/$(date -I).mr
cat ~/.local/share/pmakebase.mr >> ~/.local/share/pmkentries/$(date -I).mr
vim ~/.local/share/pmkentries/$(date -I).mr
}
#Download 'Tube links with yt-dlp
t(){
yt-dlp -f "best[height<=360]" $(echo "$@" | sed -e 's|inv\.nadeko\.net|youtube.com|g' -e 's|yewtu\.be|youtube.com|g')
}
#Watch 'tube links with mpv
tw(){
mpv $(echo "$@" | sed -e 's|inv\.nadeko\.net|youtube.com|g' -e 's|yewtu\.be|youtube.com|g')
}
#Yazi shell wrapper script
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
##########Zoxide##########
eval "$(zoxide init zsh)"

40
README.md Normal file
View file

@ -0,0 +1,40 @@
# Vilyaem's Dotfiles and Programs
This repository stores my configuration, private forks of the programs I use,
and my own personal programs and scripts..
apk.txt stores all apt packages installed, very bloated.
apkworld.txt stores all intentionally installed apt packages.
## Programs
* badwolf -- Web Browser
* dmenu -- Dynamic Menu
* nhkd -- Nano Hotkey Daemon
* vildwm -- Vilyaem's Dynamic Window Manager
* vilst -- Vilyaem's ST Terminal Emulator
* sxiv -- Image viewer
## Configurations
* OpenSCAD
* at-spi
* dosbox
* foot
* gtk-2.0
* gtk-3.0
* htop
* mpv
* neofetch
* nvim <- now home-made
* qutebrowser
* screenkey.json
* spectrwm
* sway
* tmuxinator
* vifm
* wget
* vim
## Personal Software
* bar -- Status Bar
* cl -- Screen clearer made in ASM

1778
apk.txt Normal file

File diff suppressed because it is too large Load diff

258
apkworld.txt Normal file
View file

@ -0,0 +1,258 @@
7zip
abook
acpid
aerc
alpine
alpine-base
alsa-lib-dev
alsa-tools
alsa-utils
alsaconf
apk-tools-zsh-completion
apko-zsh-completion
assimp
assimp-dev
assimp-libs
aubio
binutils
bison
boost1.84-dev
build-base
busybox-mdev-openrc
cairo
cairo-dev
cdrkit
chafa
clang
clang-dev
clang19-extra-tools
clisp
cloc
cmake
cryptsetup
ctags
cups
cups-pdf
cups-pk-helper
curl
curl-dev
czmq-dev
dbus
dbus-x11
debootstrap
deutex
dmenu
dmidecode
doas
docs
doxygen
dunst
e2fsprogs
electrum
embree
embree-dev
embree3-dev
epson-inkjet-printer-escpr
espeak
eudev
farbfeld
farstream
ffmpeg
ffmpegthumbnailer
ffplay
firefox
fluidsynth
font-dejavu
font-noto
font-noto-emoji
font-terminus-nerd
font-twemoji
fossil
fzf
g++
gajim
gcc
gcc-arm-none-eabi
gcompat
gcr
gdb
ghostscript
giflib-dev
gifsicle
gimp
git
go
gource
gperftools
groff
gst-libav
gst-plugins-base
gst-plugins-ugly
gst-vaapi
gstreamer
gstreamermm
htop
icu
icu-dev
imagemagick
imlib2
imlib2-dev
inetutils-telnet
iw
jq
kdenlive
kiwix-desktop
kiwix-tools
ledger
libcurl
libdecor-dev
libevdev
libevdev-dev
libexif-dev
libinput-dev
libjpeg
libjpeg-turbo-dev
libreoffice
libreoffice-lang-en_us
libx11-dev
libxcb-dev
libxcursor-dev
libxft-dev
libxi-dev
libxinerama-dev
libxrandr-dev
libzmq
links
linux-firmware-i915
linux-firmware-intel
linux-firmware-mediatek
linux-firmware-other
linux-firmware-rtl_bt
linux-lts
live-media-utils
lld
lua
lynx
maim
make
mandoc
mercurial
mesa-vulkan-intel
mingw-w64-gcc
minizip-dev
monero
mount
mpv
msttcorefonts-installer
mumble
musl-dbg
musl-dev
musl-utils
ncdu
ncurses-dev
neovim
newsraft
ninja
npm
nsxiv
onetbb-dev
openal-soft-dev
openscad
openssh
openssl
pandoc
picom
poppler
profanity
projectm
py3-pip
qbittorrent
qbittorrent-cli
qemu-audio-sdl
qemu-img
qemu-system-arm
qemu-system-x86_64
qemu-ui-sdl
qemu-x86_64
raylib
raylib-dev
redshift
remind
ripgrep
rsync
sacc
scc
screenkey
scrot
sdl12-compat
sdl12-compat-dev
sdl2-dev
sdl2_mixer
sdl2_mixer-dev
sdl2_net-dev
sdl2_ttf-dev
setxkbmap
shellcheck
slop
socat
sqlite
syslinux
tcc
tcc-dev
tcc-libs
tcc-libs-static
tcpdump
tealdeer
texlive
the_silver_searcher
thunderbird
tmux
tmuxinator
tor
torsocks
tree-sitter-c
tree-sitter-cpp
tree-sitter-lua
tree-sitter-make
tree-sitter-markdown
twinkle
ueberzug
util-linux-login
vifm
vim
w3m
wabt
waydroid
wget
wine
wpa_supplicant
xbacklight
xbanish
xclip
xdg-dbus-proxy
xdg-utils
xdotool
xf86-input-libinput
xf86-video-fbdev
xf86-video-intel
xhost
xinit
xinput
xkill
xorg-server
xrandr
xsetroot
xwallpaper
yasm
yt-dlp
ytfzf
zathura
zathura-pdf-mupdf
zig
zim-tools
zip
zsh
zsh-autosuggestions
zsh-syntax-highlighting
zstd-dev
zzz

BIN
badwolf/.ninja_deps Normal file

Binary file not shown.

63
badwolf/.ninja_log Executable file
View file

@ -0,0 +1,63 @@
# ninja log v5
1 65 1713286030825038925 po/messages.pot 566c6a1444ecc613
2 107 1713286030866038926 fmt.o 532a6341c0e8e918
3 388 1713286031147038932 uri.o 2458d857fa9f209f
388 407 1713286031167038933 po/fr.po 1dd8e44731f319df
407 426 1713286031186038933 locale/fr/LC_MESSAGES/Badwolf.mo ce2ac1d444874d5a
426 448 1713286031208038934 po/pt_BR.po 3802b38cf0257900
448 474 1713286031231038934 locale/pt_BR/LC_MESSAGES/Badwolf.mo ee2f19b7539c4b47
474 496 1713286031256038935 po/tr.po 9573cbbef9125bdf
496 518 1713286031275038936 locale/tr/LC_MESSAGES/Badwolf.mo 4842e28ac1b84bf7
518 541 1713286031301038936 po/de.po 2239741ba3ea8936
541 565 1713286031325038937 locale/de/LC_MESSAGES/Badwolf.mo c4ef72af4db428d6
565 586 1713286031346038937 po/vi.po 3a029179310ff9ab
586 608 1713286031368038938 locale/vi/LC_MESSAGES/Badwolf.mo 537283c15a391a8e
2 1398 1713286032153038956 userscripts.o 1ca9348aa797fd33
3 1764 1713286032524038965 keybindings.o 82f0f39378e01e4f
65 1815 1713286032575038966 downloads.o 8e1c1ba285687f86
1 1924 1713286032684038969 bookmarks.o 3414b3827617156b
107 2145 1713286032904038974 badwolf.o a671890a4d320b20
2145 2404 1713286033160038980 badwolf 4be0213d418c55b5
1 14 1713286195270042833 po/messages.pot 566c6a1444ecc613
14 23 1713286195279042833 po/fr.po 1dd8e44731f319df
15 24 1713286195280042833 po/de.po 2239741ba3ea8936
14 25 1713286195282042833 po/pt_BR.po 3802b38cf0257900
14 31 1713286195287042834 po/tr.po 9573cbbef9125bdf
16 32 1713286195287042834 po/vi.po 3a029179310ff9ab
23 34 1713286195288042834 locale/fr/LC_MESSAGES/Badwolf.mo ce2ac1d444874d5a
24 34 1713286195289042834 locale/de/LC_MESSAGES/Badwolf.mo c4ef72af4db428d6
26 40 1713286195295042834 locale/pt_BR/LC_MESSAGES/Badwolf.mo ee2f19b7539c4b47
32 41 1713286195297042834 locale/vi/LC_MESSAGES/Badwolf.mo 537283c15a391a8e
31 42 1713286195298042834 locale/tr/LC_MESSAGES/Badwolf.mo 4842e28ac1b84bf7
2 686 1713286195942042849 keybindings.o 82f0f39378e01e4f
686 913 1713286196165042854 badwolf 4be0213d418c55b5
1 24 1713287455318072780 po/messages.pot 566c6a1444ecc613
24 45 1713287455339072780 po/fr.po 1dd8e44731f319df
27 47 1713287455339072780 po/pt_BR.po 3802b38cf0257900
45 64 1713287455358072781 locale/fr/LC_MESSAGES/Badwolf.mo ce2ac1d444874d5a
47 69 1713287455363072781 locale/pt_BR/LC_MESSAGES/Badwolf.mo ee2f19b7539c4b47
64 88 1713287455382072782 po/tr.po 9573cbbef9125bdf
69 89 1713287455382072782 po/de.po 2239741ba3ea8936
88 108 1713287455397072782 locale/tr/LC_MESSAGES/Badwolf.mo 4842e28ac1b84bf7
89 115 1713287455403072782 locale/de/LC_MESSAGES/Badwolf.mo c4ef72af4db428d6
108 128 1713287455422072782 po/vi.po 3a029179310ff9ab
128 153 1713287455443072783 locale/vi/LC_MESSAGES/Badwolf.mo 537283c15a391a8e
1 1167 1713287456460072807 bookmarks.o 3414b3827617156b
2 1288 1713287456581072810 userscripts.o 1ca9348aa797fd33
2 1344 1713287456638072811 downloads.o 8e1c1ba285687f86
3 1663 1713287456956072819 badwolf.o a671890a4d320b20
1663 1893 1713287457184072824 badwolf 4be0213d418c55b5
77 1033 1713498091509103351 po/messages.pot 566c6a1444ecc613
1034 1217 1713498091693103347 po/de.po 2239741ba3ea8936
1035 1217 1713498091693103347 po/vi.po 3a029179310ff9ab
1034 1217 1713498091693103347 po/fr.po 1dd8e44731f319df
1034 1218 1713498091694103347 po/pt_BR.po 3802b38cf0257900
1034 1218 1713498091693103347 po/tr.po 9573cbbef9125bdf
1217 1277 1713498091753103346 locale/vi/LC_MESSAGES/Badwolf.mo 537283c15a391a8e
1218 1277 1713498091753103346 locale/pt_BR/LC_MESSAGES/Badwolf.mo ee2f19b7539c4b47
1218 1277 1713498091753103346 locale/tr/LC_MESSAGES/Badwolf.mo 4842e28ac1b84bf7
1217 1279 1713498091755103346 locale/de/LC_MESSAGES/Badwolf.mo c4ef72af4db428d6
1217 1279 1713498091756103346 locale/fr/LC_MESSAGES/Badwolf.mo ce2ac1d444874d5a
78 7364 1713498097838103221 downloads.o 8e1c1ba285687f86
7364 8209 1713498098681103204 badwolf 4be0213d418c55b5
0 0 1733606610253595009 fmt.o 532a6341c0e8e918

9
badwolf/AUTHORS Executable file
View file

@ -0,0 +1,9 @@
Ben K <ben-k@tutanota.com>
Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Jean-Yves Monnier <jeymon@gmail.com>
Ngô Ngọc Đức Huy <huyngo@disroot.org>
nXecure <j.xecure@gmail.com>
Oğuz Ersen <oguz@ersen.moe>
Pedro Lucas Porcellis <porcellis@eletrotupi.com>
Stacy Harper <contact@stacyharper.net>
striker.sh <strikersh@disroot.org>

26
badwolf/COPYING Executable file
View file

@ -0,0 +1,26 @@
Copyright (c) 2019-2022, Badwolf Authors <https://hacktivis.me/projects/badwolf>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the <ORGANIZATION> nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

35
badwolf/KnowledgeBase.md Executable file
View file

@ -0,0 +1,35 @@
<!--
SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
SPDX-License-Identifier: BSD-3-Clause
-->
- Similar WebKitGTK+ browser: https://www.uninformativ.de/git/lariza/
- WebKit2 Extensions Tutorial: https://blogs.igalia.com/carlosgc/2013/09/10/webkit2gtk-web-process-extensions/
- https://trac.torproject.org/projects/tor/wiki/doc/ImportantGoogleChromeBugs / https://trac.torproject.org/projects/tor/ticket/1925
- https://webkit.org/blog/3476/content-blockers-first-look/
# GObject Reference counting
- `GOBJECT_DEBUG=instance-count GTK_DEBUG=interactive %command%`
- Switch to the Statistics tab
- Press record (top-left)
- Do a bunch of actions, specially reversible ones
- Stop recording
Tiling window manager tip for WebKitGTK: Put the application and it's debugger on floating, leaving WebKitWebProcess ones in the back
# Bookmark formats
The different plain-text formats used by web browsers found in the wild, done
in Augmented BackusNaur Form (ABNF).
url = *CHAR
title = *CHAR
## uzbl
bookmark = URL TAB title [TAB tags]
tags = *(*CHAR SP)
Documenter comment: How does it manages when the separator (TAB here) is
present in the title?
## qutebrowser
bookmark = URL SP title

View file

@ -0,0 +1,11 @@
Copyright (c) <year> <owner>.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

170
badwolf/LICENSES/CC-BY-SA-4.0.txt Executable file
View file

@ -0,0 +1,170 @@
Creative Commons Attribution-ShareAlike 4.0 International
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensors permission is not necessary for any reasonfor example, because of any applicable exception or limitation to copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
Creative Commons Attribution-ShareAlike 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 Definitions.
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
3. Term. The term of this Public License is specified in Section 6(a).
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
5. Downstream recipients.
A. Offer from the Licensor Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
B. Additional offer from the Licensor Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapters License You apply.
C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified form), You must:
A. retain the following if it is supplied by the Licensor with the Licensed Material:
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
1. The Adapters License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
Section 5 Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination.
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
Creative Commons may be contacted at creativecommons.org.

90
badwolf/README.md Executable file
View file

@ -0,0 +1,90 @@
# BadWolf
```
SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
SPDX-License-Identifier: BSD-3-Clause
```
Minimalist and privacy-oriented WebKitGTK+ browser.
Homepage: <https://hacktivis.me/projects/badwolf>
The name is a reference to BBC's Doctor Who TV series, I took it simply because I wanted to have a specie in the name, like some other web browsers do, but doesn't go into the “gentle” zone.
## Differences
Comparing from other small WebKit browsers for unixes found in the wild:
- Independent of environment, should just work if GTK and WebKitGTK does
- Storing data should be:
- explicit and optional (i.e. Applying preferences doesn't imply Saving to disk)
- not queryabe by WebKit (so the web can't use it)
- done in a standard format (like XBEL for bookmarks)
- Static UI, no element should be added at runtime, this is to avoid potential tracking via viewport changes
- Small codebase, should be possible to read and understand it completely over an afternoon.
- Does not use modal editing (from vi) as that was designed for editing, not browsing
- UTF-8 encoding by default
Motivation from other clients <https://hacktivis.me/articles/www-client%20are%20broken>
## Contributing
### Translations
You need to have gettext installed. If you want a GUI, poedit exists and Weblate is a good web platform that I might consider hosting at some point.
- Syncing POT file with the source code: ``ninja po/messages.pot``
- Syncing PO file with the POT file: ``ninja po/de.po``
- Initialising a new PO file (example for German, `de_DE`): ``msginit -l de_DE -i po/messages.pot -o po/de.po``
## Contacts / Discussions
- IRC: `#badwolf-browser` on [GeekNode](https://www.geeknode.org/)
- Matrix (bridge): [#badwolf-browser:matrix.fdn.fr](https://matrix.to/#/#badwolf-browser:matrix.fdn.fr)
## Repositories
### git
- Main: <https://hacktivis.me/git/badwolf/>, <git://hacktivis.me/git/badwolf.git>
- Mirror: <https://gitlab.com/lanodan/badWolf.git>, this one can also be used if you prefer tickets/PRs over emails
### release assets
- Main: <https://hacktivis.me/releases/>
- Mirror: <https://gitlab.com/lanodan/badWolf/tags>
- `*.tar.*` files are tarballs archives to be extracted with a program like `tar(1)`, GNU tar and LibArchive bsdtar are known to work.
- `*.sign` files are minisign (OpenBSD `signify(1)` compatible) signatures, they key used for it can be found at <https://hacktivis.me/releases/signify/> as well as other places (feel free to ping me to get it)
## Manual Installation
### Dependencies
- POSIX-compatible Shell (i.e. mrsh, dash, lksh)
- [ninja](https://ninja-build.org/) or [samurai](https://github.com/michaelforney/samurai)
- A pkg-config implementation (pkgconf is recommended)
- C11 Compiler (such as clang or gcc)
- [WebKitGTK](https://webkitgtk.org/), only the latest stable(2.32.0+) is supported
- [libxml-2.0](http://www.xmlsoft.org/), no known version limitation
- (optional, translating) [po4a](https://po4a.org/) to modify manpage translations
- (optional, translating) gettext implementation (such as GNU Gettext)
- (optional, translating) ed(1), the standard editor
- (optional, lint) [mandoc](https://mdocml.bsd.lv/) (the command) for linting the manpage
- (optional, lint) [shellcheck](https://www.shellcheck.net/) for linting the `./configure` script
- (optional, lint) [flawfinder](https://www.dwheeler.com/flawfinder/) for examining C source code for flaws
- (optional, lint) [reuse](https://reuse.software/) for checking REUSE compliance
Note: Packagers can safely ignore the lint dependencies.
### Compiling
```
./configure && ninja
```
Note: `configure` is a simple shell script (so not autotools) which supports variables like `PREFIX`.
### Installing
```
ninja install
# DESTDIR is supported
```
Debian users will probably want to use `checkinstall` instead.
An example AppArmor profile is provided at `usr.bin.badwolf`, please do some long runtime checks before shipping it or a modified version, help can be provided but with no support.
If you modify the icons, you'll need `inkscape` (command line only), to regenerate the bitmap versions. It isn't needed for a normal installation as the bitmap icons are bundled.
## Notes
Most of the privacy/security stuff will be done with patches against WebKit as quite a lot isn't into [WebKitSettings](https://webkitgtk.org/reference/webkit2gtk/stable/WebKitSettings.html) and with generic WebKit extensions that should be reusable.

167
badwolf/badwolf.1 Executable file
View file

@ -0,0 +1,167 @@
.\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
.\" SPDX-License-Identifier: BSD-3-Clause
.Dd 2022-07-13
.Dt BADWOLF 1
.Os
.Sh NAME
.Nm badwolf
.Nd minimalist and privacy-oriented web browser based on WebKitGTK
.Sh SYNOPSIS
.Nm
.Op Ar webkit/gtk options
.Op Ar URLs or paths
.Sh DESCRIPTION
.Nm
is a minimalist browser that cares about privacy, it is based on WebKitGTK and thus also accepts WebKitGTK (and dependencies) flags and environment variables, unfortunately there doesn't seems to be manpages for theses.
.Pp
Runtime configuration specific to
.Nm
will probably get added at a later release.
.Sh KEYBINDINGS
The following section lists the keybinding by their action, each item is described by the widget the focus is on or
.Aq any
if it works for the whole window, followed by the keybind it grabs.
.Bl -tag -width Ds
.It webview Ctrl-Scroll
Zooms the webpage in/out.
.It webview Ctrl-0
Resets webpage zoom to 100%.
.It webview Ctrl-MousePrimary, webview MouseMiddle
Opens the selected link in a new tab. (Note: JS still overrides the event)
.It any Ctrl-t
Creates a new tab (in a new session, similar as pressing the button)
.It browser Ctrl-F4, browser Alt-d
Closes the current tab
.It browser Ctrl-f
Focuses on the search entry
.It browser Ctrl-l
Focuses on the location(URL) entry
.It browser Ctrl-Shift-r / Ctrl-r, browser F5
Reloads the content in the current tab (with/without clearing cache)
.It browser Escape
Stops loading the content in the current tab
.It browser F7
Toggles caret browsing.
.It browser F12
Opens the web inspector.
.It browser Ctrl-[ / Ctrl-]
Go back/forward in current tab's history
.It browser Ctrl-p
Print the current page. (spawns a dialog)
.It any Alt-Left / Alt-Right
Go to the previous/next tab
.It any F1
Shows the about dialog
.It any Alt-n
Where n is any numeric-row key.
Go to the n-th tab, 0 goes to the last one.
.El
.Ss DEFAULT ONES
Here is a incomplete list of the default Webkit/GTK keybindings:
.Bl -tag -width Ds
.It any Ctrl-PageUp / Ctrl-PageDown
Go to the previous/next tab
.It search Ctrl-g / Ctrl-Shift-g
When the search box is focused it goes to the Next/Previous search term.
.It search Escape
Cancels current search
.It textarea Ctrl-;
Insert Emoji
.El
.Sh ENVIRONMENT
.Bl -tag -width Ds
.It Ev BADWOLF_L10N
A colon-separated list in the form lang_COUNTRY where lang is in ISO-639 and COUNTRY in ISO-3166.
For example
.Ic BADWOLF_L10N="en_GB:fr_FR:de_DE" .
When this variable isn't set, spelling isn't activated.
A more generic variable name is also intended to be used in the future.
.Pp
To get the list of supported dictionaries execute
.Ic enchant-lsmod-2 -list-dicts
or before enchant 2.0:
.Ic enchant-lsmod -list-dicts
.El
.Sh FILES
The following paths are using
.Xr sh 1
syntax to correctly support XDG Base Directory Specification, you can use the
.Xr echo 1
command to check where it is on your system.
.Pp
.Bl -tag -width Ds -compact
.It Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json
WebKit-specific content-filter file, this allows to block unwanted content (ads, nagware, ...).
For some introductory information about the format see:
.Lk https://webkit.org/blog/3476/content-blockers-first-look/
.Lk https://webkit.org/blog/4062/targeting-domains-with-content-blockers/
.Lk https://developer.apple.com/documentation/safariservices/creating_a_content_blocker
.Pp
For a converter using AblockPlus-style filters, try:
.Lk https://gitlab.com/eyeo/adblockplus/abp2blocklist
.Pp
For a ready-to-use file (that you should update periodically), try:
.Lk https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json
.It Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters
This is where the compiled filters are stored, the file(s) in it are automatically generated and so shouldn't be edited.
Documented here only for sandboxing / access-control purposes.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel
XBEL (XML Bookmark Exchange Language) file, known to be currently supported by:
.Xr elinks 1 ,
.Xr konqueror 1 ,
.Xr kbookmarkeditor 1 .
.Pp
You can do a symbolic link from their path, but you might prefer to use
.Lk https://www.w3.org/TR/xinclude/ XInclude
which is natively supported by
.Nm
to automatically merge multiple XBEL files.
.Pp
Also the bookmark entries aren't re-sorted, so you might want to put your most frequently used ones at the top of the file.
.Pp
For more information about this format see:
.Lk http://pyxml.sourceforge.net/topics/xbel/
.Pp
For an example XBEL file see:
.Lk https://hacktivis.me/bookmarks.xbel
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/
Directory containing the
.Lk https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html WebKitWebExtensions
to be loaded into
.Nm . Note: They aren't the JavaScript-based Web-Extensions supported by Firefox or Chrome, but native code in shared objects using the WebKitGTK API.
.Pp
Examples of useful extensions may be found at:
.Lk https://hacktivis.me/git/badwolf-extensions
.It Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css
CSS files (respectively system and user-level) for styling
.Nm
interface.
See
.Lk https://docs.gtk.org/gtk3/css-properties.html
for the properties being available.
.Pp
For testing your styles I would recommend using the
.Ev GTK_DEBUG=interactive
environment variable on launching
.Nm
and going to the CSS tab.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/
Directory containing JS userscripts (ending in
.Ic .js )
ran at the start of page loads,
nesting down into iframes, useful to override website behaviors or add
missing features to websites.
.Pp
Please note that for now unlike GreaseMonkey-style userscripts, they are
always run, regardless of the hostname / URLs.
.El
.Sh AUTHORS
.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me
.Sh BUGS
You can submit contributions or tickets to
.Lk https://sr.ht/~lanodan/badwolf/
with
.Xr git-send-email 1
for patches.

1179
badwolf/badwolf.c Executable file

File diff suppressed because it is too large Load diff

189
badwolf/badwolf.de.1 Executable file
View file

@ -0,0 +1,189 @@
.\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
.\" SPDX-License-Identifier: BSD-3-Clause
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.Dd 2022-07-13
.Dt BADWOLF 1
.Os
.Sh NAME
.Nm badwolf
.Nd minimalistischer und privatsphäre-orientierter Webbrowser basierend auf WebKitGTK
.Sh ÜBERSICHT
.Nm
.Op Ar WebKit-/GTK-Optionen
.Op Ar URLs oder Pfade
.Sh BESCHREIBUNG
.Nm
ist ein minimalistischer Webbrowser, der die Privatssphäre seiner
Nutzer respektiert. Er basiert auf WebKitGTK und akzeptiert daher alle
Optionen und Umgebungsvariablen, die WebKitGTK (und Abhängigkeiten) auch
akzeptieren, leider gibt es dafür keine Manpages.
.Pp
Laufzeitspezifische Konfigurationsmöglichkeiten für
.Nm
werden
wahrscheinlich in einer späteren Version hinzugefügt.
.Sh TASTENKOMBINATIONEN
Der folgende Abschnitt listet die unterstützten Tastenkombinationen und ihre
Funktionen auf. Vor jeder Tastenkombination steht der greifende Kontext.
.Bl -tag -width Ds
.It webview Ctrl-Scroll
Zoomt die Website rein/raus.
.It webview Ctrl-0
Setzt den Zoom auf 100% zurück.
.It webview Ctrl-MousePrimary, webview MouseMiddle
Öffnet den hervorgehobenen Link in einem neuen Tab. (Hinweis: Dieses
Verhalten kann mit Javascript manipuliert werden)
.It any Ctrl-t
Eröffnet einen neuen Tab in einer neuen Sitzung (ähnlich wie der "Neuer
Tab"-Knopf)
.It browser Ctrl-F4, browser Alt-d
Schließt den aktuellen Tab
.It browser Ctrl-f
Hebt das Suchfeld hervor
.It browser Ctrl-l
Hebt die Addresszeile hervor
.It browser Ctrl-Shift-r / Ctrl-r, browser F5
Lädt den aktuellen Tab neu (jeweils mit und ohne den Cache zu leeren)
.It browser Escape
Bricht das Laden ab
.It browser F7
Aktiviert den Tastaturmodus (Navigation mit dem Textcursor)
.It browser F12
Öffnet die Entwickleroptionen
.It browser Ctrl-[ / Ctrl-]
Zur vorherigen/nächsten Seite im Suchverlauf gehen
.It browser Ctrl-p
Druckt die aktuelle Seite aus. (Eröffnet Dialogfenster)
.It any Alt-Left / Alt-Right
Wechseln zum vorherigen/nächsten Tab
.It any F1
Zeigt Informationen über das Programm
.It any Alt-n
n ist eine Zahl. Wechseln zum Tab n. 0 wechselt zum letzten Tab.
.El
.Ss STANDARDTASTENKOMBINATIONEN
Im Folgenden befindet sich eine unvollständige Liste mit standartmäßigen
Webkit-/GTK-Tastenkombinationen:
.Bl -tag -width Ds
.It any Ctrl-PageUp / Ctrl-PageDown
Wechseln zum vorherigen/nächsten Tab
.It search Ctrl-g / Ctrl-Shift-g
Zum nächsten/vorherigen Suchtreffer gehen
.It search Escape
Bricht die Suche ab
.It textarea Ctrl-;
Emoji einfügen😚
.El
.Sh UMGEBUNGSVARIABLEN
.Bl -tag -width Ds
.It Ev BADWOLF_L10N
Eine mit Doppelpunkten getrennte List im Format sprache_LAND wo die sprache
ISO-639 und das LAND ISO-3166 ist. Z.B.:
.Ic BADWOLF_L10N="en_GB:fr_FR:de_DE" .
Wenn diese Variable nicht gesetzt ist,
gibt es keine Rechtschreibprüfung. Der Variablenname könnte in der Zukunft
durch einen generischeren ersetzt werden.
.Pp
Um eine List mit installierten Sprächen zu bekommen, muss
.Ic enchant-lsmod-2 -list-dicts
ausgeführt werden. Bei Versionen vor enchant
2.0:
.Ic enchant-lsmod -list-dicts
.El
.Sh DATEIEN
Die im Folgenden aufgelistetene Pfade benutzen
.Xr sh 1
-Syntaxe, um der
XDG-Base-Directory-Specifation gerecht zu werden. Du kannst den Befehl
.Xr echo 1
benutzen, um zu gucken, wo das auf dem Computer ist.
.Pp
.Bl -tag -width Ds -compact
.It Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json
WebKit-spezifischer Inhaltsfilter-Datei, mit der unerwünschte Inhalte
(z.B. Werbung, Schadsoftware, ...) geblockt werden können. Für mehr
Informationen, siehe:
.Lk https://webkit.org/blog/3476/content-blockers-first-look/
.Lk https://webkit.org/blog/4062/targeting-domains-with-content-blockers/
.Lk https://developer.apple.com/documentation/safariservices/creating_a_content_blocker
.Pp
Es gibt einen Übersetzer, der AdblockPlus-Filterlisten in Webkit-Blocklisten
übersetzen kann:
.Lk https://gitlab.com/eyeo/adblockplus/abp2blocklist
.Pp
Für eine fertige Datei (die regelmäßig aktualisiert werden sollte), siehe:
.Lk https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json
.It Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters
Hier werden kompilierte Filter gespeichert. Diese Dateien werden automatisch
generiert und sollten deswegen nicht bearbeitet werden. Diese Datei wird
hier überhaupt nur dokumentiert, damit sie in Sandboxen/Zugriffskontrollen
eingearbeitet werden kann.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel
XBEL (XML Bookmark Exchange Language) Datei, wird momentan unterstützt von:
.Xr elinks 1 ,
.Xr konqueror 1 ,
.Xr kbookmarkeditor 1 .
.Pp
Du kannst einfach eine Verknüpfung zu deren Dateien erstellen, aber
vielleicht möchtest du lieber
.Lk https://www.w3.org/TR/xinclude/ XInclude
benutzen, welches von
.Nm
systemeigen unterstützt wird und mehrer
XBEL-Dateien zusammenfügt.
.Pp
Außerdem werden die Lesezeicheneinträge nicht neusortiert, deswegen ist es
eventuell gewünscht, die am häufigsten genutzen Einträge an den Anfang der
Datei zu schieben.
.Pp
Für weitere Informationen über dieses Format siehe:
.Lk http://pyxml.sourceforge.net/topics/xbel/
.Pp
Für eine Beispiel-XBEL-Datei siehe:
.Lk https://hacktivis.me/bookmarks.xbel
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/
Verzeichnis mit den
.Lk https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html WebKitWebExtensions
die in
.Nm geladen werden sollen. Hinweis: Es handelt sich dabei nicht um Javascript-basierte Erweitungen wie man sie von Firefox oder Chrome kennt, sondern um systemeigenen Code aus Shared Objects der WebKitGTK API.
.Pp
Für Beispiele nützlicher Erweiterungen siehe:
.Lk https://hacktivis.me/git/badwolf-extensions
.It Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css
CSS-Dateien (jeweils System und User-Ebene), um das Aussehen das Interfaces
anzupassen. Siehe
.Lk https://docs.gtk.org/gtk3/css-properties.html
für die zur Verfügung stehen Eigenschaften.
.Pp
Für das Austesten eines Aussehens ist es zu empfehlen die Umgebungsvariable
.Ev GTK_DEBUG=interactive
biem Start zu setzen und dann in den CSS tab zu
gehen.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/
Verzeichnis, welches die JavaScript-Userscripts enthält (Dateiendung
.Ic .js ) ,
die am Start des Ladens jeder Seite ausgeführt werden und sich auch
in iframes verschachteln. Nützlich um Website-Verhalten zu manipulieren oder
fehlende Funktionen zu ergänzen.
.Pp
Es ist anzumerken, dass — anders als bei GreaseMonkey-artigen Userscripts —
die
.Nm
-Userscripts immer ausgeführt werden, unabhängig von
Hostname/URLs.
.El
.Sh AUTOREN.
.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me ,
Übersetzung von Ben Kaps
.Sh BUGS
Verbesserungen oder Fehlerberichte können unter
.Lk https://sr.ht/~lanodan/badwolf/
mit
.Xr git-send-email 1
für Patches eingereicht werden.

20
badwolf/badwolf.desktop Executable file
View file

@ -0,0 +1,20 @@
# https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/
# SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
[Desktop Entry]
Version=1.1
Type=Application
Categories=Network;WebBrowser
Comment=A minimalist and privacy-oriented web browser
Comment[fr]=Un navigateur web minimaliste et orienté vers le respect de la vie privée
Comment[tr]=Sadelik ve gizlilik odaklı web tarayıcısı
Exec=badwolf %U
GenericName=Web Browser
GenericName[fr]=Navigateur Web
GenericName[tr]=Web Tarayıcısı
Icon=badwolf
Keywords=Internet;WWW;Browser;Web;WebKit;WebKitGTK
Keywords[fr]=Internet;WWW;Browser;Web;Surfer;Navigateur;WebKit;WebKitGTK
Keywords[tr]=Internet;WWW;Browser;Web;WebKit;WebKitGTK;İnternet;Tarayıcı;
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https
Name=Badwolf

190
badwolf/badwolf.fr.1 Executable file
View file

@ -0,0 +1,190 @@
.\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
.\" SPDX-License-Identifier: BSD-3-Clause
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.Dd 2022-07-13
.Dt BADWOLF 1
.Os
.Sh NAME
.Nm badwolf
.Nd navigateur minimaliste et orienté vie-privée basé sur WebKitGTK
.Sh SYNOPSIS
.Nm
.Op Ar options webkit/gtk
.Op Ar URLs or chemins
.Sh DESCRIPTION
.Nm
est un navigateur minimaliste qui prend soin de la vie privée, c'est
basé WebKitGTK et accept donc les options et variables d'environements de
WebKitGTK et ses dépendances, malheuresement il ne semble pas avoir de pages
de man pour celles-ci.
.Pp
Une configuration dynamique spécifique à
.Nm
sera sans doute rajoutée
dans une version suivante.
.Sh RACCOURCIS
Cette section liste les raccourcis et leurs actions, chaque point est décris
avec le widget actif ou avec
.Aq tout
quand il fonctionne sur la fenêtre
entière, suivit par le raccourcis.
.Bl -tag -width Ds
.It vueweb Ctrl-Défilement
(Dé)-Grossir le zoom de la page.
.It vueweb Ctrl-0
Remettre le zoom de la page à 100%.
.It vueweb Ctrl-SourisPremier, vueweb SourisMilieu
Ouvrir le lien sélectionné dans un nouvel onglet. (Note: JS modifie
quand-même l'action)
.It tout Ctrl-t
Créer un nouvel onglet (dans une nouvelle session, comme un apuis sur le
bouton dédié)
.It navigateur Ctrl-F4, navigateur Alt-d
Fermer l'onglet courant.
.It navigateur Ctrl-f
Aller dans le champ de recherche.
.It navigateur Ctrl-l
Aller dans la barre d'URL.
.It navigateur Ctrl-Maj-r / Ctrl-r, navigateur F5
Recharger le contenu dans l'onglet courant (avec/sans nettoyer le cache).
.It navigateur Échap
Arrêter le chargement dans l'onglet courant.
.It navigateur F7
(Dé)-Activer la navigation par curseur.
.It navigateur F12
Ouvrir les outils de dévelopement.
.It navigateur Ctrl-[ / Ctrl-]
Naviguer dans l'historique courrant précédent/suivant.
.It navigateur Ctrl-p
Imprimer la page courante. (ouvre une nouvelle fenêtre)
.It tout Alt-Gauche / Alt-Droite
Aller à l'onglet précédent/suivant.
.It tout F1
Montrer la fenêtre d'À Propos.
.It tout Alt-n
Où n est n'importe quelle touche de la barre numérique.
Aller à l'onglet n, 0 va au dernier.
.El
.Ss PAR DÉFAULTS
Ceci est une liste incomplète des raccourcis par défaults dans WebKit/GTK:
.Bl -tag -width Ds
.It tout Ctrl-PageUp / Ctrl-PageDown
Aller à l'onglet précédent/suivant.
.It recherche Ctrl-g / Ctrl-Maj-g
Quand le champ de recherche est actif, aller au résultat précédent/suivant.
.It recherche Échap
Annule la recherche actuelle.
.It champ-texte Ctrl-;
Insérer un Émoji
.El
.Sh ENVIRONMENT
.Bl -tag -width Ds
.It Ev BADWOLF_L10N
Une liste séparé par des deux-points dans le format langue_PAYS où la langue
est en ISO-639 et le PAYS en ISO-3166.
Par example
.Ic BADWOLF_L10N="en_GB:fr_FR:de_DE" .
Quand cette variable n'est pas configuré, la correction orthographique est
désactivée.
Un nom plus générique est voulu pour le futur.
.Pp
Pour avoir la liste des dictionaires installés, executez:
.Ic enchant-lsmod-2 -list-dicts
ou avant enchant 2.0:
.Ic enchant-lsmod -list-dicts
.El
.Sh FICHIERS
Les chemins suivants utilisent la syntaxe de
.Xr sh 1
pour correctement
supporter la XDG Base Directory Specification, vous pouver utiliser la
commande
.Xr echo 1
pour vérifier où cela se trouve sur votre système.
.Pp
.Bl -tag -width Ds -compact
.It Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json
Fichier content-filter spécifique à WebKit, cela permet de blocker le
contenu indésirable (pubs, nagware, …).
Pour une introduction au format, voir (en anglais):
.Lk https://webkit.org/blog/3476/content-blockers-first-look/
.Lk https://webkit.org/blog/4062/targeting-domains-with-content-blockers/
.Lk https://developer.apple.com/documentation/safariservices/creating_a_content_blocker
.Pp
Pour un convertiseur de filtres compatibles AdBlockPlus, essayez:
.Lk https://gitlab.com/eyeo/adblockplus/abp2blocklist
.Pp
Pour un fichier prêt à l'usage (que vous devrez mettre à jour
périodiquement), essayez:
.Lk https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json
.It Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters
Stockage des filtres compilés, les fichiers présents sont automatiquement
générés et ne doivent pas être édité.
Documenté ici seulement pour les isolations ou la gestion des contrôle
d'accès.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel
Fichier XBEL (XML Bookmark Exchange Language; Language XML d'Échange de
Marques-Pages), connu pour être supporté par:
.Xr elinks 1 ,
.Xr konqueror 1 ,
.Xr kbookmarkeditor 1 .
.Pp
Vous pouvez faire un lien symbolique depuis leur fichiers, mais vous pouvez
aussi utiliser
.Lk https://www.w3.org/TR/xinclude/ XInclude
qui est supporté nativement par
.Nm
pour automatiquement fusionner
plusieurs fichiers XBEL.
.Pp
Aussi les marques-pages ne sont pas re-triés, vous pouvez donc mettre les
plus fréquement utilisés au début du fichier.
.Pp
Pour plus d'information à propos du format, voir (en anglais):
.Lk http://pyxml.sourceforge.net/topics/xbel/
.Pp
Pour un example de fichier XBEL voir:
.Lk https://hacktivis.me/bookmarks.xbel
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/
Répertoire contenant les
.Lk https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html WebKitWebExtensions
pour être chargés dans
.Nm . Note\ : Ce ne sont pas les Web-Extensions basé sur JavaScript et supporté par Firefox ou Chrome, mais du code natif dans des shared objects qui utilisent l'API WebKitGTK.
.Pp
Des examples de quelques extensions utiles peuvent être trouvés sur:
.Lk https://hacktivis.me/git/badwolf-extensions
.It Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css
Fichiers CSS (respectivement système et utilisateur) pour changer le style
de l'interface de
.Nm .
Voir
.Lk https://docs.gtk.org/gtk3/css-properties.html
pour la liste des propriétés disponibles.
.Pp
Pour tester les styles je recommende d'utiliser la variable d'environemnt
.Ev GTK_DEBUG=interactive
et d'aller à l'onglet CSS.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/
Dossier contenant les userscripts JavaScript (finisant en
.Ic .js )
lancés
à chaque chargement de page, descendant dans les iframes, utile pour changer
le comportement ou rajouter des fonctionalitées aux sites web.
.Pp
Veuillez noter que pour l'instant, contrairement aux userscripts à la
GreaseMonkey, ils sont toujours exécutés, sans filtrage de domaines / URLs.
.El
.Sh AUTHORS
.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me
.Sh BUGS
Vous pouvez soumettre des contributions ou des tickets à
.Lk https://sr.ht/~lanodan/badwolf/
avec
.Xr git-send-email 1
pour les modifications.

62
badwolf/badwolf.h Executable file
View file

@ -0,0 +1,62 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#ifndef BADWOLF_H_INCLUDED
#define BADWOLF_H_INCLUDED
#include <gtk/gtk.h>
#include <inttypes.h> /* uint64_t */
#include <webkit2/webkit2.h>
#if !WEBKIT_CHECK_VERSION(2, 32, 0)
#error WebkitGTK 2.32.0 is the latest supported version for badwolf.
#endif
#ifdef UNUSED
#error UNUSED is already defined
#elif defined(__GNUC__)
#define UNUSED(x) UNUSED_##x __attribute__((unused))
#else
#define UNUSED(x) x
#endif
extern const gchar *homepage;
extern const gchar *version;
struct Window
{
GtkWidget *main_window;
GtkWidget *notebook;
GtkWidget *new_tab;
GtkWidget *downloads_tab;
WebKitUserContentManager *content_manager;
WebKitUserContentFilterStore *content_store;
};
struct Client
{
GtkWidget *box;
GtkWidget *toolbar;
GtkWidget *back;
GtkWidget *forward;
GtkWidget *javascript;
GtkWidget *auto_load_images;
GtkWidget *location;
uint64_t context_id;
WebKitWebView *webView;
struct Window *window;
GtkWidget *statusbar;
GtkWidget *statuslabel;
GtkWidget *search;
};
GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser);
void webView_tab_label_change(struct Client *browser, const gchar *title);
struct Client *
new_browser(struct Window *window, const gchar *target_url, struct Client *old_browser);
int badwolf_new_tab(GtkNotebook *notebook, struct Client *browser, bool auto_switch);
gint badwolf_get_tab_position(GtkContainer *notebook, GtkWidget *child);
#endif /* BADWOLF_H_INCLUDED */

164
badwolf/badwolf.inkscape.svg Executable file
View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0rc1 (09960d6f05, 2020-04-09)"
sodipodi:docname="badwolf.inkscape.svg"
id="svg17"
viewBox="0 0 16.93333 16.93333"
version="1.1"
height="64"
width="64">
<metadata
id="metadata21">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
inkscape:current-layer="g16"
inkscape:window-maximized="0"
inkscape:window-y="18"
inkscape:window-x="0"
inkscape:cy="32"
inkscape:cx="-34.886275"
inkscape:zoom="5.9765625"
showgrid="false"
id="namedview19"
inkscape:window-height="1062"
inkscape:window-width="1920"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff"
inkscape:document-rotation="0" />
<defs
id="defs9">
<linearGradient
id="linearGradient880">
<stop
style="stop-color:#00ffd6;stop-opacity:1"
stop-color="#139e7c"
offset="0"
id="stop876" />
<stop
style="stop-color:#007f64;stop-opacity:1"
stop-color="#122548"
offset="1"
id="stop878" />
</linearGradient>
<linearGradient
id="linearGradient844"
inkscape:collect="always">
<stop
id="stop840"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop842"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<clipPath
id="clippy">
<rect
ry="1"
y="0"
x="0"
height="16.933333"
width="16.933333"
id="rect4" />
</clipPath>
<linearGradient
id="a">
<stop
id="stop2"
offset="0"
stop-color="#139e7c" />
<stop
id="stop4"
offset="1"
stop-color="#122548" />
</linearGradient>
<radialGradient
fy="-4.2398162"
fx="8.6972151"
xlink:href="#a"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.612,0.05608289,-0.03812291,-1.775534,30.49128,-9.106413)"
r="8.4666672"
cy="-4.2398162"
cx="8.6972151"
id="b" />
<linearGradient
xlink:href="#a"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.340793,0,0,1.340793,-5.009645,-4.9950368)"
y2="13.79657"
y1="9.051465"
x2="6.0263619"
x1="9.1526928"
id="c" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="4.7058144"
x2="-10.735905"
y1="4.7058144"
x1="-10.466779"
id="linearGradient846"
xlink:href="#linearGradient844"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="11.681454"
x2="6.7958536"
y1="8.9934816"
x1="7.463346"
id="linearGradient874"
xlink:href="#linearGradient880"
inkscape:collect="always" />
</defs>
<g
clip-path="url(#clippy)"
id="g16">
<rect
style="fill-opacity:1;fill:url(#b)"
id="rect11"
fill="url(#b)"
ry="0"
height="16.93333"
width="16.93333" />
<path
style="stroke-width:0.50270823;stroke-miterlimit:4;stroke-dasharray:none;stroke:#23e0b7;stroke-opacity:1;fill-opacity:1;fill:url(#linearGradient846)"
id="path13"
stroke-width="0.264583"
stroke="#47b79f"
d="m 21.86801,-1.9920238 a 13.40211,8.185254 0 0 1 -6.713234,7.092927 13.40211,8.185254 0 0 1 -13.41427,-0.012891 13.40211,8.185254 0 0 1 -6.676652,-7.105795 l 13.40204,0.025759 z"
inkscape:connector-curvature="0" />
<path
id="wolf"
style="mix-blend-mode:luminosity;fill:#120d09;fill-opacity:1;stroke:url(#linearGradient874);stroke-width:0.674952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
stroke-width="0.569064"
stroke="url(#c)"
fill-rule="evenodd"
fill="#0f0805"
d="M 5.954321,19.118114 C 6.279375,16.458717 6.8910042,15.96845 5.7885535,13.873872 5.195892,12.824843 3.5059475,11.558594 2.6479315,10.539665 2.1673827,9.7904655 1.0434685,9.2171762 0.3615065,7.7493392 0.201822,6.7648665 2.5855305,8.9732112 3.2563495,8.9366162 3.5137348,8.6517205 1.6556185,6.7595682 1.8277525,6.0733512 1.97089,5.5027309 2.0400037,4.9353402 2.6089912,4.5036212 c 1.197317,-0.3311996 3.39131,2.812714 4.927271,3.260379 2.110609,-0.7248708 3.1742058,1.490123 4.8202378,1.830078 1.322712,0.1565739 3.207405,1.5936848 4.252409,2.9707628 -0.845016,0.590474 -3.044526,-0.706301 -4.410436,-0.108108 -0.538115,0.825242 1.099559,5.219231 1.386259,5.733128"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
badwolf/badwolf.o Executable file

Binary file not shown.

134
badwolf/badwolf.svg Executable file
View file

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="svg17"
viewBox="0 0 16.93333 16.93333"
version="1.1"
height="64"
width="64">
<metadata
id="metadata21">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs9">
<linearGradient
id="linearGradient880">
<stop
style="stop-color:#00ffd6;stop-opacity:1"
stop-color="#139e7c"
offset="0"
id="stop876" />
<stop
style="stop-color:#007f64;stop-opacity:1"
stop-color="#122548"
offset="1"
id="stop878" />
</linearGradient>
<linearGradient
id="linearGradient844">
<stop
id="stop840"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop842"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<clipPath
id="clippy">
<rect
ry="1"
y="0"
x="0"
height="16.933333"
width="16.933333"
id="rect4" />
</clipPath>
<linearGradient
id="a">
<stop
id="stop2"
offset="0"
stop-color="#139e7c" />
<stop
id="stop4"
offset="1"
stop-color="#122548" />
</linearGradient>
<radialGradient
fy="-4.2398162"
fx="8.6972151"
xlink:href="#a"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.612,0.05608289,-0.03812291,-1.775534,30.49128,-9.106413)"
r="8.4666672"
cy="-4.2398162"
cx="8.6972151"
id="b" />
<linearGradient
xlink:href="#a"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.340793,0,0,1.340793,-5.009645,-4.9950368)"
y2="13.79657"
y1="9.051465"
x2="6.0263619"
x1="9.1526928"
id="c" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="4.7058144"
x2="-10.735905"
y1="4.7058144"
x1="-10.466779"
id="linearGradient846"
xlink:href="#linearGradient844" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="11.681454"
x2="6.7958536"
y1="8.9934816"
x1="7.463346"
id="linearGradient874"
xlink:href="#linearGradient880" />
</defs>
<g
clip-path="url(#clippy)"
id="g16">
<rect
style="fill-opacity:1;fill:url(#b)"
id="rect11"
fill="url(#b)"
ry="0"
height="16.93333"
width="16.93333" />
<path
style="stroke-width:0.50270823;stroke-miterlimit:4;stroke-dasharray:none;stroke:#23e0b7;stroke-opacity:1;fill-opacity:1;fill:url(#linearGradient846)"
id="path13"
stroke-width="0.264583"
stroke="#47b79f"
d="m 21.86801,-1.9920238 a 13.40211,8.185254 0 0 1 -6.713234,7.092927 13.40211,8.185254 0 0 1 -13.41427,-0.012891 13.40211,8.185254 0 0 1 -6.676652,-7.105795 l 13.40204,0.025759 z" />
<path
id="wolf"
style="mix-blend-mode:luminosity;fill:#120d09;fill-opacity:1;stroke:url(#linearGradient874);stroke-width:0.674952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
stroke-width="0.569064"
stroke="url(#c)"
fill-rule="evenodd"
fill="#0f0805"
d="M 5.954321,19.118114 C 6.279375,16.458717 6.8910042,15.96845 5.7885535,13.873872 5.195892,12.824843 3.5059475,11.558594 2.6479315,10.539665 2.1673827,9.7904655 1.0434685,9.2171762 0.3615065,7.7493392 0.201822,6.7648665 2.5855305,8.9732112 3.2563495,8.9366162 3.5137348,8.6517205 1.6556185,6.7595682 1.8277525,6.0733512 1.97089,5.5027309 2.0400037,4.9353402 2.6089912,4.5036212 c 1.197317,-0.3311996 3.39131,2.812714 4.927271,3.260379 2.110609,-0.7248708 3.1742058,1.490123 4.8202378,1.830078 1.322712,0.1565739 3.207405,1.5936848 4.252409,2.9707628 -0.845016,0.590474 -3.044526,-0.706301 -4.410436,-0.108108 -0.538115,0.825242 1.099559,5.219231 1.386259,5.733128" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

186
badwolf/badwolf.tr.1 Executable file
View file

@ -0,0 +1,186 @@
.\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
.\" SPDX-License-Identifier: BSD-3-Clause
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.Dd 2022-07-13
.Dt BADWOLF 1
.Os
.Sh AD
.Nm badwolf
.Nd WebKitGTK tabanlı sade ve gizlilik odaklı web tarayıcısı
.Sh ÖZET
.Nm
.Op Ar webkit/gtk seçenekleri
.Op Ar URL veya yollar
.Sh AÇIKLAMA
.Nm
gizliliğe önem veren sade bir tarayıcıdır, WebKitGTK tabanlıdır ve bu
nedenle WebKitGTK (ve bağımlılıkları) seçeneklerini ve ortam değişkenlerini
de kabul eder, ne yazık ki bunlar için kılavuz sayfası yok gibi görünüyor.
.Pp
.Nm
e özgü çalışma zamanı yapılandırması muhtemelen daha sonraki bir
sürümde eklenecek.
.Sh TUŞ ATAMALARI
Aşağıdaki bölüm tuş atamalarını eylemlerine göre listeler, her öge odağın
üzerinde olduğu widget ile veya tüm pencere için çalışıyorsa
.Aq tümü
ile, ardından yakaladığı tuş ataması ile açıklanmaktadır.
.Bl -tag -width Ds
.It web_görünümü Ctrl-Scroll
Web sayfasını yakınlaştırır/uzaklaştırır.
.It web_görünümü Ctrl-0
Web sayfasının yakınlaştırmasını %100 olarak sıfırlar.
.It webview Ctrl-MousePrimary, webview MouseMiddle
Opens the selected link in a new tab. (Note: JS still overrides the event)
.It tümü Ctrl-t
Yeni bir sekme oluşturur (yeni bir oturumda, düğmeye basmaya benzer şekilde)
.It tarayıcı Ctrl-F4, tarayıcı Alt-d
Geçerli sekmeyi kapatır
.It tarayıcı Ctrl-f
Arama girişine odaklanır
.It tarayıcı Ctrl-l
Konum (URL) girişine odaklanır
.It tarayıcı Ctrl-Shift-r / Ctrl-r, tarayıcı F5
Geçerli sekmedeki içeriği yeniden yükler (önbelleği temizleyerek/önbelleği
temizlemeden)
.It tarayıcı Escape
Geçerli sekmedeki içeriğin yüklenmesini durdurur
.It tarayıcı F7
İmleç gezinmesini açar/kapatır.
.It tarayıcı F12
Web inceleyicisini açar.
.It tarayıcı Ctrl-[ / Ctrl-]
Geçerli sekmenin geçmişinde geri/ileri git
.It tarayıcı Ctrl-p
Geçerli sayfayı yazdır. (bir iletişim kutusu açar)
.It tümü Alt-Left / Alt-Right
Önceki/sonraki sekmeye git
.It tümü F1
Hakkında iletişim kutusunu göster
.It tümü Alt-n
n herhangi bir sayısal satır tuşudur. n'inci sekmeye git, 0 son sekmeye
gider.
.El
.Ss ÖNTANIMLI OLANLAR
Öntanımlı Webkit/GTK tuş atamalarının bir kısmının listesi:
.Bl -tag -width Ds
.It tümü Ctrl-PageUp / Ctrl-PageDown
Önceki/sonraki sekmeye git
.It arama Ctrl-g / Ctrl-Shift-g
Arama kutusuna odaklanıldığında Sonraki/Önceki arama terimine gider.
.It arama Escape
Geçerli aramayı iptal eder
.It textarea Ctrl-;
Insert Emoji
.El
.Sh ORTAM
.Bl -tag -width Ds
.It Ev BADWOLF_L10N
dil_ÜLKE biçiminde iki nokta üst üste ile ayrılan bir liste; burada dil
ISO-639'da ve ÜLKE ISO-3166'da yer tanımlandığı gibidir. Örneğin:
.Ic BADWOLF_L10N="tr_TR:fr_FR:de_DE" .
Bu değişken ayarlanmadığında, yazım
etkinleştirilmez. Gelecekte daha genel bir değişken adının kullanılması da
amaçlanmaktadır.
.Pp
Desteklenen sözlüklerin listesini görmek için
.Ic enchant-lsmod-2 -list-dicts
komutunu, enchant 2.0 öncesi için
.Ic enchant-lsmod -list-dicts
komutunu çalıştırın
.El
.Sh DOSYALAR
Aşağıdaki yollar, XDG Temel Dizin Tanımlamasını doğru şekilde desteklemek
için
.Xr sh 1
sözdizimini kullanmaktadır, sisteminizde nerede olduğunu
görmek için
.Xr echo 1
komutunu kullanabilirsiniz.
.Pp
.Bl -tag -width Ds -compact
.It Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json
WebKit'e özgü içerik filtresi dosyası, istenmeyen içeriğin (reklamlar,
dırdırcı yazılımlar, ...) engellenmesini sağlar. Biçim hakkında bazı
tanıtıcı bilgiler için şuraya bakın:
.Lk https://webkit.org/blog/3476/content-blockers-first-look/
.Lk https://webkit.org/blog/4062/targeting-domains-with-content-blockers/
.Lk https://developer.apple.com/documentation/safariservices/creating_a_content_blocker
.Pp
AblockPlus tarzı filtreler kullanan bir dönüştürücü için şunu deneyin:
.Lk https://gitlab.com/eyeo/adblockplus/abp2blocklist
.Pp
Kullanıma hazır (düzenli olarak güncellemeniz gereken) bir dosya için şunu
deneyin:
.Lk https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json
.It Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters
Burası derlenen filtrelerin depolandığı yerdir, içindeki dosya(lar) otomatik
olarak oluşturulur ve bu nedenle düzenlenmemelidir. Burada yalnızca koruma
kısıtlaması/erişim denetimi amacıyla açıklanmaktadır.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel
XBEL (XML Bookmark Exchange Language) file, known to be currently supported
by:
.Xr elinks 1 ,
.Xr konqueror 1 ,
.Xr kbookmarkeditor 1 .
.Pp
You can do a symbolic link from their path, but you might prefer to use
.Lk https://www.w3.org/TR/xinclude/ XInclude
which is natively supported by
.Nm
to automatically merge multiple XBEL
files.
.Pp
Also the bookmark entries aren't re-sorted, so you might want to put your
most frequently used ones at the top of the file.
.Pp
Bu biçim hakkında daha fazla bilgi için:
.Lk http://pyxml.sourceforge.net/topics/xbel/
.Pp
Örnek bir XBEL dosyası için:
.Lk https://hacktivis.me/bookmarks.xbel
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/
Bu dizin şunları içerir
.Lk https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html WebKitWebExtensions
şuraya yüklenecek:
.Nm . Not: Bunlar Firefox veya Chrome tarafından desteklenen JavaScript tabanlı Web Uzantıları değil, WebKitGTK API'sini kullanan paylaşılan nesnelerdeki yerel kodlardır.
.Pp
Faydalı uzantı örnekleri şurada bulunabilir:
.Lk https://hacktivis.me/git/badwolf-extensions
.It Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css
.Nm
arayüzünü biçimlendirmek için CSS dosyaları (sırasıyla sistem ve
kullanıcı düzeyinde). Bkz:
.Lk https://docs.gtk.org/gtk3/css-properties.html
kullanılabilir özellikler için.
.Pp
Görünümlerinizi test etmek için
.Nm
başlatılırken
.Ev GTK_DEBUG=interactive
ortam değişkenini kullanmanız ve CSS sekmesine
gitmeniz tavsiye edilir.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/
Directory containing JS userscripts (ending in
.Ic .js )
ran at the start
of page loads, nesting down into iframes, useful to override website
behaviors or add missing features to websites.
.Pp
Please note that for now unlike GreaseMonkey-style userscripts, they are
always run, regardless of the hostname / URLs.
.El
.Sh YAZARLAR
.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me
.Sh HATALAR
Katkılarınızı veya biletlerinizi şuraya gönderebilirsiniz
.Lk https://sr.ht/~lanodan/badwolf/
yamalar için
.Xr git-send-email 1
ile.

165
badwolf/badwolf.vi.1 Executable file
View file

@ -0,0 +1,165 @@
.\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
.\" Copyright © 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
.\" SPDX-License-Identifier: BSD-3-Clause
.Dd 2022-07-13
.Dt BADWOLF 1
.Os
.Sh NAME
.Nm badwolf
.Nd trình duyệt web tối giản tôn trọng quyền riêng sử dụng WebKitGTK
.Sh TÓM TẮT
.Nm
.Op Ar tuỳ chọn webkit/gtk
.Op Ar URLs hoặc đường dẫn
.Sh MIÊU TẢ
.Nm
là một trình duyệt web tối giản và tôn trọng quyền riêng tư của người dùng. Nó được xây dựng sử dụng WebKitGTK và vì vậy nhận các tuỳ chọn và biến môi trường của WebKitGTK (và các thư viện phụ thuộc), tuy nhiên có vẻ không có trang manpages cho những tuỳ chọn này.
.Pp
Tuỳ chỉnh thời điểm chạy dành riêng cho
.Nm
sẽ có thể được thêm vào trong lần phát hành tới.
.Sh PHÍM TẮT
Phần sau liệt kê các phím tắt và tác dụng, mỗi mục bắt đầu bằng bộ phận được chọn hoặc.
.Aq tất cả
nếu nó có tác dụng với toàn bộ cửa sổ, sau đó là phím tắt để kích hoạt.
.Bl -tag -width Ds
.It trên trang web Ctrl-Lăn chuột
Phóng to/thu nhỏ trang web.
.It trên trang web Ctrl-0
Đặt lại kích thước về 100%.
.It trên trang web Ctrl-Chuột chính, trên trang web Chuột giữa
Mở đường dẫn trong tab mới. (Ghi chú: JS có thể ghi đè sự kiện này)
.It tất cả Ctrl-t
Tạo tab mới (trong một phiên làm việc mới, tương tự như khi bấm nút)
.It trình duyệt Ctrl-F4, trình duyệt Alt-d
Đóng tab hiện tại
.It trình duyệt Ctrl-f
Kích hoạt chế độ tìm kiếm trong trang
.It trình duyệt Ctrl-l
Đi tới thanh đường dẫn (URL)
.It trình duyệt Ctrl-Shift-r / Ctrl-r, trình duyệt F5
Tải lại trang ở tab hiện tại (có/không xoá bộ nhớ cache)
.It trình duyệt Esc
Dừng tải trangg ở tab hiện tại
.It trình duyệt F7
Bật chế độ duyệt bằng con trỏ
.It trình duyệt F12
Mở
Opens the web inspector.
.It trình duyệt Ctrl-[ / Ctrl-]
Mở trang trước/sau trong lịch sử của tab hiện tại
.It trình duyệt Ctrl-p
Mở hộp thoại để in trang hiện tại
.It tất cả Alt-trái / Alt-phải
Đi tới tab bên trái/phải
.It tất cả F1
Hiển thị thông tin về trình duyệt
.It tất cả Alt-n
Với n là phím số:
Đi tới tab thứ n; đi tới tab cuối với n=0.
.El
.Ss MẶC ĐỊNH
Đây là danh sách không đầy đủ một số phím tắt mặc định của Webkit/GTK:
.Bl -tag -width Ds
.It tất cả Ctrl-PageUp / Ctrl-PageDown
Đi tới tab bên trái/phải
.It tìm kiếm Ctrl-g / Ctrl-Shift-g
Đi tới vị trí kết quả tìm kiếm tiếp theo/trước đó.
.It tìm kiếm Escape
Thoát chế độ tìm kiếm
.It vùng văn bản Ctrl-;
Chèn biểu tượng cảm xúc
.El
.Sh BIẾN MÔI TRƯỜNG
.Bl -tag -width Ds
.It Ev BADWOLF_L10N
Danh sách theo format lang_COUNTRY với lang là mã ngôn ngữ theo ISO-639 và COUNTRY là mã nước theo ISO-3166, ngắt bằng dấu chấm phẩy.
Ví dụ,
.Ic BADWOLF_L10N="en_GB:fr_FR:de_DE" .
Khi biến này không được cài, chức năng sửa lỗi chính tả không hoạt động.
Trong tương lại, dự định sẽ có một tên biến chung hơn.
.Pp
Để liệt kê danh sách từ điển được hỗ trợ, chạy lệnh:
.Ic enchant-lsmod-2 -list-dicts
hoặc trước enchant 2.0:
.Ic enchant-lsmod -list-dicts
.El
.Sh FILE
Các đường dẫn sau sử dụng cú pháp của
.Xr sh 1
để hỗ trợ Quy chuẩn Thư mục Căn bản XDG đúng cách, bạn có thể dùng lệnh
.Xr echo 1
để kiểm tra các thư mục này ở đâu trên hệ thống của mình.
.Pp
.Bl -tag -width Ds -compact
.It Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json
File chứa các bộ lọc nội dung riêng cho WebKit, cho phép bạn chặn nội dung không mong muốn (quảng cáo, làm phiền, ...)
Dưới đây là một số nguồn (bằng tiếng Anh) để biết thêm về định dạng file này:
.Lk https://webkit.org/blog/3476/content-blockers-first-look/
.Lk https://webkit.org/blog/4062/targeting-domains-with-content-blockers/
.Lk https://developer.apple.com/documentation/safariservices/creating_a_content_blocker
.Pp
Để chuyển từ bộ lọc kiểu AblockPlus-style filters, có thể thử:
.Lk https://gitlab.com/eyeo/adblockplus/abp2blocklist
.Pp
Dưới đây là một số nguồn bộ lọc có sẵn (cần cập nhật thường xuyên):
.Lk https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json
.It Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters
Đây là nơi các bộ lọc sau khi được phiên dịch, các file trong thư mục này được tự động tạo ra và không nên được chỉnh sửa.
Vị trí thư mục này được ghi chép lại để giúp cho mục đích cách ly và quản lý truy cập.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel
File chứa dấu trang theo định dạng XBEL (XML Bookmark Exchange Language), được hộ trợ bởi các trình duyệt:
.Xr elinks 1 ,
.Xr konqueror 1 ,
.Xr kbookmarkeditor 1 .
.Pp
Bạn có thể tạo đường dẫn mềm tới file dấu trang của chúng, nhưng bạn có thể muốn sử dụng
.Lk https://www.w3.org/TR/xinclude/ XInclude
được hỗ trợ bởi
.Nm
để tự động kết hợp nhiều file XBEL.
.Pp
Các dấu trang không được sắp xếp lại nên bạn có thể muốn đặt những trang được truy cập thường xuyên lên đầu.
.Pp
Để biết thêm thông tin chi tiết về định dạng file, xem trang (bằng tiếng Anh):
.Lk http://pyxml.sourceforge.net/topics/xbel/
.Pp
File XBEL mẫu:
.Lk https://hacktivis.me/bookmarks.xbel
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/
Thư mục chứa
.Lk https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html WebKitWebExtensions
để tải cho
.Nm . Ghi chú: Đây không phải các tiện ích mở rộng sử dụng JavaScript như được hỗ trợ bởi Firefox hay Chrome, các thư viện chia sẻ sử dụng API của WebKitGTK.
.Pp
Bạn có thể xem một số tiện ích hữu dụng tại:
.Lk https://hacktivis.me/git/badwolf-extensions
.It Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css
File CSS (ở mức độ hệ thống và người dùng, theo thứ tự trên) để tuỳ chỉnh giao diện của
.Nm .
Xem trang
.Lk https://docs.gtk.org/gtk3/css-properties.html
(tiếng Anh) để biết các thuộc tính có thể sử dụng.
.Pp
Để kiểm tra tuỳ chỉnh CSS, bạn nên bật chế độ debug bằng cách đặt biến môi trường
.Ev GTK_DEBUG=interactive
khi bật trình duyệt
.Nm
và đến tab CSS.
.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/
Thư mục chứa script JS của người dùng (kết thúc bằng đuôi
.Ic .js )
để chạy khi trang cũng như các iframes bắt đầu tải,
hữu ích khi muốn ghi đè các hành vi không mong muốn hoặc thêm tính năng cho trang web.
.Pp
Lưu ý rằng hiện nay, không như script kiểu GreaseMonkey, tất cả đều được chạy, không kể đến URL hay máy chủ được truy cập.
.El
.Sh TÁC GIẢ
.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me
.Sh BÁO LỖI
Bạn có thể đóng góp hoặc báo lỗi tại
.Lk https://sr.ht/~lanodan/badwolf/
với lệnh
.Xr git-send-email 1
đối với code.

125
badwolf/bookmarks.c Executable file
View file

@ -0,0 +1,125 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "bookmarks.h"
#include "badwolf.h"
#include "config.h"
#include <glib/gi18n.h> /* _() and other internationalization/localization helpers */
#include <glib/gprintf.h> /* g_fprintf() */
#include <gtk/gtk.h>
#include <libxml/xinclude.h>
#include <libxml/xpath.h>
#include <unistd.h> /* access() */
static gboolean
location_completion_matches(GtkEntryCompletion *completion,
const gchar *key,
GtkTreeIter *iter,
gpointer UNUSED(user_data))
{
gchar *buffer;
gchar *pattern;
gboolean result;
pattern = g_strdup_printf("*%s*", key);
gtk_tree_model_get(gtk_entry_completion_get_model(completion), iter, 0, &buffer, -1);
result = g_pattern_match_simple(pattern, buffer);
g_free(buffer);
g_free(pattern);
return result;
}
void
bookmarks_completion_setup(GtkEntryCompletion *location_completion, GtkTreeModel *tree_model)
{
gtk_entry_completion_set_model(location_completion, tree_model);
gtk_entry_completion_set_text_column(location_completion, 0);
gtk_entry_completion_set_match_func(location_completion, location_completion_matches, NULL, NULL);
gtk_entry_completion_set_inline_selection(location_completion, BADWOLF_LOCATION_INLINE_SELECTION);
}
static void
location_completion_cleanup(xmlXPathObjectPtr xpathObj, xmlXPathContextPtr xpathCtx, xmlDocPtr doc)
{
if(xpathObj != NULL) xmlXPathFreeObject(xpathObj);
if(xpathCtx != NULL) xmlXPathFreeContext(xpathCtx);
if(doc != NULL) xmlFreeDoc(doc);
}
static void
load_xpath_results(GtkListStore *list_store, xmlNodeSetPtr nodes)
{
GtkTreeIter iter;
int size;
size = (nodes) ? nodes->nodeNr : 0;
g_fprintf(stderr, _("Bookmarks: Found %d bookmarks.\n"), size);
for(int i = 0; i < size; i++)
if(nodes->nodeTab[i])
{
gtk_list_store_append(list_store, &iter);
gtk_list_store_set(
list_store, &iter, 0, (char *)xmlXPathCastNodeToString(nodes->nodeTab[i]), -1);
}
}
GtkTreeModel *
bookmarks_completion_init()
{
xmlDocPtr doc = NULL;
xmlXPathContextPtr xpathCtx = NULL;
xmlXPathObjectPtr xpathObj = NULL;
const xmlChar *xpathExpr = (const xmlChar *)"//bookmark/@href";
char *filename = g_build_filename(g_get_user_data_dir(), "badwolf", "bookmarks.xbel", NULL);
GtkListStore *list_store = gtk_list_store_new(1, G_TYPE_STRING);
/* flawfinder: ignore, just a presence check */
if(access(filename, R_OK) != 0)
{
g_fprintf(stderr, _("Bookmarks: No loadable file found at %s\n"), filename);
goto failure;
}
g_fprintf(stderr, _("Bookmarks: loading at %s\n"), filename);
doc = xmlParseFile(filename);
if(doc == NULL)
{
g_fprintf(stderr, _("Bookmarks: unable to parse file \"%s\"\n"), filename);
goto failure;
}
xmlXIncludeProcess(doc);
xpathCtx = xmlXPathNewContext(doc);
if(xpathCtx == NULL)
{
g_fprintf(stderr, _("Bookmarks: unable to create new XPath context\n"));
goto failure;
}
xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx);
if(xpathObj == NULL)
{
g_fprintf(stderr, _("Bookmarks: unable to evaluate XPath expression \"%s\"\n"), xpathExpr);
goto failure;
}
load_xpath_results(list_store, xpathObj->nodesetval);
location_completion_cleanup(xpathObj, xpathCtx, doc);
g_fprintf(stderr, _("Bookmarks: Done.\n"));
return GTK_TREE_MODEL(list_store);
failure:
location_completion_cleanup(xpathObj, xpathCtx, doc);
g_free(filename);
return NULL;
}

6
badwolf/bookmarks.h Executable file
View file

@ -0,0 +1,6 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include <gtk/gtk.h>
GtkTreeModel *bookmarks_completion_init();
void bookmarks_completion_setup(GtkEntryCompletion *location_completion, GtkTreeModel *tree_model);

BIN
badwolf/bookmarks.o Executable file

Binary file not shown.

34
badwolf/bookmarks_test.c Executable file
View file

@ -0,0 +1,34 @@
// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "bookmarks.h"
#include <glib.h>
#include <gtk/gtk.h>
#include <stdlib.h> /* setenv */
static void
bookmarks_completion_init_test(void)
{
GtkTreeModel *result;
char *filename = g_build_filename(g_get_current_dir(), "bookmarks_test.fixtures/full/", NULL);
g_assert_true(setenv("XDG_DATA_HOME", filename, 1) == 0);
result = bookmarks_completion_init();
g_assert_true(result != NULL);
g_free(filename);
g_assert_true(unsetenv("XDG_DATA_HOME") == 0);
}
int
main(int argc, char *argv[])
{
g_test_init(&argc, &argv, NULL);
g_test_add_func("/bookmarks_completion_init/test", bookmarks_completion_init_test);
return g_test_run();
}

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="bookmarks.xsl"?>
<!DOCTYPE xbel PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
"http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
<!--
SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
SPDX-License-Identifier: BSD-3-Clause
-->
<xbel>
<folder>
<title>Operating Systems</title>
<bookmark href="http://9front.org/">
<title>9Front</title>
<desc>Fork of Plan 9, a Unix successor by Bell Labs</desc>
</bookmark>
</folder>
<bookmark href="https://litepub.social/"><title>LitePub</title><desc>Profile of ActivityPub used by Pleroma et al.</desc></bookmark>
<!-- comment -->
</xbel>

62
badwolf/build.ninja Executable file
View file

@ -0,0 +1,62 @@
# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
# Written by hand, config.ninja is the generated one
rule po2mo
command = mkdir -p "$$(dirname $out)" && msgfmt -o $out $in
rule translate_manpage
command = po4a-translate --format man -M utf-8 --master badwolf.1 --po $in --localized $out
rule scour
command = mkdir -p "$$(dirname $out)" && scour --no-line-breaks --enable-id-stripping --remove-metadata $in $out
rule gen_icon
command = mkdir -p "$$(dirname $out)" && inkscape -w $width -h $height $in -o $out
rule run_tests
command = for test in $in; do ./$$test || exit 1; done
rule install
command = sh -e ./install.sh
include config.ninja
build po/manpage.pot: xgettext_man badwolf.1 | po/pot_license.ed
build icons/hicolor/scalable/apps/badwolf.svg: scour badwolf.svg
build uri_test: cc_exe uri_test.c uri.o
build fmt_test: cc_exe fmt_test.c fmt.o
build bookmarks_test: cc_exe bookmarks_test.c bookmarks.o
build test: run_tests uri_test fmt_test bookmarks_test
rule list_authors
command = git log --use-mailmap --format='format:%aN <%aE>' --date='format:%Y' | sort | uniq >$out
build AUTHORS: list_authors | .git
rule format
command = clang-format -style=file -assume-filename=.clang-format -i *.c *.h
build format: format
rule mandoc
command = $MANDOC -Tlint -Wunsupp,error,warning ./badwolf.1 && $MANDOC -Tlint -Wunsupp,error ./badwolf.*.1
build lint_mandoc: mandoc
rule shellcheck
command = $SHELLCHECK ./configure
build lint_shellcheck: shellcheck | ./configure
rule flawfinder
command = $FLAWFINDER .
build lint_flawfinder: flawfinder
rule reuse
command = $REUSE lint
build lint_reuse: reuse
rule true
command = true
build lint: true | lint_mandoc lint_shellcheck lint_flawfinder lint_reuse
build all: phony badwolf

112
badwolf/config.h Executable file
View file

@ -0,0 +1,112 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#ifndef CONFIG_H_INCLUDED
#define CONFIG_H_INCLUDED
/* BADWOLF_TAB_POSITION: Position of the tab listing, can be one of:
* - GTK_POS_TOP
* - GTK_POS_BOTTOM
* - GTK_POS_RIGHT
* - GTK_POS_LEFT
*
* See https://docs.gtk.org/gtk3/enum.PositionType.html
*/
#define BADWOLF_TAB_POSITION GTK_POS_TOP
/* BADWOLF_TAB_LABEL_CHARWIDTH: Amount of characters the tab label text fits
* Quite conflicts with BADWOLF_TAB_BOX_WIDTH, recommended to only define one
*/
#define BADWOLF_TAB_LABEL_CHARWIDTH 26
/* BADWOLF_TAB_BOX_WIDTH: Requested width (in pixels) for the whole tab
* Quite conflicts with BADWOLF_TAB_LABEL_CHARWIDTH, recommended to only define one
*/
//#define BADWOLF_TAB_BOX_WIDTH 120
// BADWOLF_TAB_HEXPAND: Should the tab try to fill the available horizontal space?
#define BADWOLF_TAB_HEXPAND FALSE
/* BADWOLF_TAB_LABEL_ELLIPSIZE: pango ellipsize mode of the tab label text, can be one of:
* - PANGO_ELLIPSIZE_NONE
* - PANGO_ELLIPSIZE_START
* - PANGO_ELLIPSIZE_MIDDLE
* - PANGO_ELLIPSIZE_END
*
* See https://docs.gtk.org/Pango/enum.EllipsizeMode.html
*/
#define BADWOLF_TAB_LABEL_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE
// BADWOLF_BOX_PADDING: Amount of padding between browsers box (tab child) elements
#define BADWOLF_BOX_PADDING 0
// BADWOLF_TOOLBAR_PADDING: Amount of padding between toolbar elements
#define BADWOLF_TOOLBAR_PADDING 0
// BADWOLF_TOOLBAR_PADDING: Amount of padding between toolbar elements
#define BADWOLF_TOOLBAR_SEPARATOR_PADDING 4
// BADWOLF_STATUSBAR_PADDING: Amount of padding between statusbar elements
#define BADWOLF_STATUSBAR_PADDING 0
// BADWOLF_DOWNLOAD_PADDING: Amount of padding between download list row-elements
#define BADWOLF_DOWNLOAD_PADDING 5
/* BADWOLF_DEFAULT_WIDTH / BADWOLF_DEFAULT_HEIGHT:
* Used to define the default width/height of the window,
* useful for floating Window Managers, probably useless in tiling ones
*
* See https://docs.gtk.org/gtk3/method.Window.set_default_size.html
*/
#define BADWOLF_DEFAULT_WIDTH 800
#define BADWOLF_DEFAULT_HEIGHT 600
/* BADWOLF_WEBKIT_SETTINGS:
* Used when creating a new view with webkit_settings_new_with_settings the usage is:
* setting-name, setting-value, setting-name, , NULL
*
* See: https://webkitgtk.org/reference/webkit2gtk/stable/class.Settings.html#properties
*/
// clang-format off
#define BADWOLF_WEBKIT_SETTINGS \
"default-charset", "utf-8", \
"enable-caret-browsing", TRUE, \
"enable-developer-extras", TRUE, \
"enable-dns-prefetching", FALSE, \
"enable-hyperlink-auditing", FALSE, \
"enable-java", FALSE, \
"enable-javascript-markup", TRUE, \
"enable-javascript", TRUE, \
"enable-plugins", FALSE, \
"javascript-can-access-clipboard", FALSE, \
"javascript-can-open-windows-automatically", FALSE, \
"media-playback-requires-user-gesture", TRUE, \
"minimum-font-size", 12, \
"allow-top-navigation-to-data-urls", FALSE, \
NULL
// clang-format on
/* BADWOLF_STATUSLABEL_ELLIPSIZE: pango ellipsize mode of the status bar label text, can be one of:
* - PANGO_ELLIPSIZE_NONE
* - PANGO_ELLIPSIZE_START
* - PANGO_ELLIPSIZE_MIDDLE
* - PANGO_ELLIPSIZE_END
*
* See https://docs.gtk.org/Pango/enum.EllipsizeMode.html
*/
#define BADWOLF_STATUSLABEL_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE
/* BADWOLF_DOWNLOAD_FILE_PATH_ELLIPSIZE: pango ellipsize mode of the download destination path,
* can be one of:
* - PANGO_ELLIPSIZE_NONE
* - PANGO_ELLIPSIZE_START
* - PANGO_ELLIPSIZE_MIDDLE
* - PANGO_ELLIPSIZE_END
*
* See https://docs.gtk.org/Pango/enum.EllipsizeMode.html
*/
#define BADWOLF_DOWNLOAD_FILE_PATH_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE
// BADWOLF_LOCATION_INLINE_SELECTION: show selected completion as a selection in location entry
#define BADWOLF_LOCATION_INLINE_SELECTION TRUE
#endif /* CONFIG_H_INCLUDED */

108
badwolf/config.ninja Executable file
View file

@ -0,0 +1,108 @@
# Autogenerated by ./configure
rule gen_config
command = ./configure ""
generator = 1
build config.ninja: gen_config configure
PREFIX = /usr/local
PKGCONFIG = pkg-config
MSGFMT = msgfmt
INKSCAPE = inkscape
CC = cc
CFLAGS = -g -O2 -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wconversion -Wsign-conversion -Werror=implicit-function-declaration -Werror=implicit-int -Werror=vla
LDFLAGS =
ED = ed
MANDOC = mandoc
XGETTEXT = xgettext
MSGMERGE = msgmerge
SHELLCHECK = true
FLAWFINDER = true
REUSE = true
DEPS_cflags = -pthread -I/usr/include/libxml2 -I/usr/include/webkitgtk-4.1 -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/libsoup-3.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/webkitgtk-4.1 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
DEPS_libs = -lxml2 -lwebkit2gtk-4.1 -lgtk-3 -lgdk-3 -lz -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lsoup-3.0 -Wl,--export-dynamic -lgmodule-2.0 -pthread -lgio-2.0 -ljavascriptcoregtk-4.1 -lgobject-2.0 -lglib-2.0
GETTEXT_OPTS = --copyright-holder="Badwolf Authors <https://hacktivis.me/projects/badwolf>" --package-name="Badwolf" --package-version="1.3.0" --msgid-bugs-address="contact+badwolf-msgid@hacktivis.me"
rule xgettext
command = $XGETTEXT --keyword=_ --language=C --from-code=UTF-8 -o $out --add-comments --sort-output --foreign-user --no-location --no-wrap $GETTEXT_OPTS $in && ed -s $out <po/pot_license.ed
rule msgmerge
# touch: msgmerge doesn't always updates timestamps
command = $MSGMERGE --update --backup=off $out $in && touch $out
rule xgettext_man
command = if test -e $out; $
then po4a-updatepo --format man -M utf-8 --master $in $GETTEXT_OPTS --po $out && ed -s $out <po/pot_license.ed;$
else po4a-gettextize --format man -M utf-8 --master $in $GETTEXT_OPTS --po $out && ed -s $out <po/pot_license.ed;$
fi
rule cc_exe
command = $CC -std=c11 $CFLAGS -include configure.h $DEPS_cflags -o $out $in $LDFLAGS $DEPS_libs
rule cc_obj
command = $CC -std=c11 $CFLAGS -include configure.h $DEPS_cflags -c -o $out $in
build po/messages.pot: xgettext bookmarks.c userscripts.c fmt.c fmt_test.c uri.c uri_test.c keybindings.c downloads.c badwolf.c | po/pot_license.ed
build badwolf: cc_exe bookmarks.o userscripts.o fmt.o uri.o keybindings.o downloads.o badwolf.o
build bookmarks.o: cc_obj bookmarks.c | bookmarks.h badwolf.h config.h
build userscripts.o: cc_obj userscripts.c | userscripts.h badwolf.h config.h
build fmt.o: cc_obj fmt.c | fmt.h
build uri.o: cc_obj uri.c | uri.h
build keybindings.o: cc_obj keybindings.c | keybindings.h badwolf.h
build downloads.o: cc_obj downloads.c | downloads.h badwolf.h config.h
build badwolf.o: cc_obj badwolf.c | badwolf.h bookmarks.h config.h downloads.h fmt.h keybindings.h uri.h userscripts.h
build po/fr.po: msgmerge po/messages.pot
build locale/fr/LC_MESSAGES/Badwolf.mo: po2mo po/fr.po
build po/pt_BR.po: msgmerge po/messages.pot
build locale/pt_BR/LC_MESSAGES/Badwolf.mo: po2mo po/pt_BR.po
build po/tr.po: msgmerge po/messages.pot
build locale/tr/LC_MESSAGES/Badwolf.mo: po2mo po/tr.po
build po/de.po: msgmerge po/messages.pot
build locale/de/LC_MESSAGES/Badwolf.mo: po2mo po/de.po
build po/vi.po: msgmerge po/messages.pot
build locale/vi/LC_MESSAGES/Badwolf.mo: po2mo po/vi.po
build po/de_man.po: xgettext_man badwolf.1
build badwolf.de.1: translate_manpage po/de_man.po
build po/fr_man.po: xgettext_man badwolf.1
build badwolf.fr.1: translate_manpage po/fr_man.po
build po/tr_man.po: xgettext_man badwolf.1
build badwolf.tr.1: translate_manpage po/tr_man.po
build po/vi_man.po: xgettext_man badwolf.1
build badwolf.vi.1: translate_manpage po/vi_man.po
build icons/hicolor/24x24/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = 24
height = 24
build icons/hicolor/32x32/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = 32
height = 32
build icons/hicolor/48x48/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = 48
height = 48
build icons/hicolor/64x64/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = 64
height = 64
build icons/hicolor/128x128/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = 128
height = 128
build icons/hicolor/256x256/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = 256
height = 256
build icons: phony | icons/hicolor/24x24/apps/badwolf.png icons/hicolor/32x32/apps/badwolf.png icons/hicolor/48x48/apps/badwolf.png icons/hicolor/64x64/apps/badwolf.png icons/hicolor/128x128/apps/badwolf.png icons/hicolor/256x256/apps/badwolf.png
build trans_man: phony | badwolf.de.1 badwolf.fr.1 badwolf.tr.1 badwolf.vi.1
build bundled: phony | icons trans_man
default badwolf locale/fr/LC_MESSAGES/Badwolf.mo locale/pt_BR/LC_MESSAGES/Badwolf.mo locale/tr/LC_MESSAGES/Badwolf.mo locale/de/LC_MESSAGES/Badwolf.mo locale/vi/LC_MESSAGES/Badwolf.mo
rule remove
command = rm -fr ${in} ${foo}
build install: install | badwolf locale/fr/LC_MESSAGES/Badwolf.mo locale/pt_BR/LC_MESSAGES/Badwolf.mo locale/tr/LC_MESSAGES/Badwolf.mo locale/de/LC_MESSAGES/Badwolf.mo locale/vi/LC_MESSAGES/Badwolf.mo
build clean: remove
foo = badwolf locale/fr/LC_MESSAGES/Badwolf.mo locale/pt_BR/LC_MESSAGES/Badwolf.mo locale/tr/LC_MESSAGES/Badwolf.mo locale/de/LC_MESSAGES/Badwolf.mo locale/vi/LC_MESSAGES/Badwolf.mo bookmarks.o userscripts.o fmt.o uri.o keybindings.o downloads.o badwolf.o fmt_test.o uri_test.o bookmarks_test.o
build distclean: remove | clean
foo = config.ninja configure.h install.sh
build fullclean: remove | distclean
foo = badwolf.de.1 badwolf.fr.1 badwolf.tr.1 badwolf.vi.1 icons/hicolor/24x24 icons/hicolor/32x32 icons/hicolor/48x48 icons/hicolor/64x64 icons/hicolor/128x128 icons/hicolor/256x256

455
badwolf/configure vendored Executable file
View file

@ -0,0 +1,455 @@
#!/bin/sh
# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
VERSION=1.3.0
VERSION_FULL=${VERSION}$(./version.sh)
DEPS="gtk+-3.0 libxml-2.0"
SRCS="bookmarks.c userscripts.c fmt.c fmt_test.c uri.c uri_test.c keybindings.c downloads.c badwolf.c"
OBJS="bookmarks.o userscripts.o fmt.o uri.o keybindings.o downloads.o badwolf.o"
OBJS_test="fmt_test.o uri_test.o bookmarks_test.o"
EXE=badwolf
EXE_test="fmt_test uri_test bookmarks_test"
DOCS="usr.bin.badwolf README.md KnowledgeBase.md interface.md"
TRANS="fr pt_BR tr de vi"
TRANS_MAN="de fr tr vi"
lint_targets=""
min_webkitgtk=2.32.0
min_glib_guri=2.66.0
arg0="$0"
args="$@"
usage() {
cat <<END
Usage: [variables] configure [variables]
Variables:
PREFIX=DIR
BINDIR=DIR
MANDIR=DIR
DOCDIR=DIR
DATADIR=DIR
APPSDIR=DIR
PKGCONFIG=BIN
MSGFMT=BIN
INKSCAPE=BIN
CC=BIN
CFLAGS=OPTIONS
ED=BIN
LDFLAGS=OPTIONS
EXTRA_CFLAGS=OPTIONS
XGETTEXT=BIN
MSGMERGE=BIN
MANDOC=BIN
SHELLCHECK=BIN
FLAWFINDER=BIN
REUSE=BIN
WITH_WEBKITGTK=(4.0|4.1)
WITH_URI_PARSER=(guri|libsoup2)
Variables are set in the following order: Default, Environment, Arguments
Dependencies: See README.md
END
}
is_ok() {
status="$?"
if test $status -eq 0; then
printf " OK\n"
else
printf " FAIL\n"
fi
return $status
}
required() {
is_ok || exit 1
}
pkg_config_check() {
printf 'Checking: %s %s ...' "${PKGCONFIG}" "$*"
"${PKGCONFIG}" "$@"
is_ok
}
## User configuration
# defaults
PREFIX="${PREFIX:-/usr/local}"
PKGCONFIG="${PKGCONFIG:-pkg-config}"
MSGFMT="${MSGFMT:-msgfmt}"
INKSCAPE="${INKSCAPE:-inkscape}"
CC="${CC:-cc}"
CFLAGS="${CFLAGS:--g -O2 -D_FORTIFY_SOURCE=2}"
ED="${ED:-ed}"
XGETTEXT="${XGETTEXT:-xgettext}"
MSGMERGE="${MSGMERGE:-msgmerge}"
MANDOC="${MANDOC:-mandoc}"
SHELLCHECK="${SHELLCHECK:-shellcheck}"
FLAWFINDER="${FLAWFINDER:-flawfinder}"
REUSE="${REUSE:-reuse}"
# Also allow variables through arguments
for i; do
case "$i" in
-h|--help)
usage
exit 1
;;
-*)
printf "Unknown argument %s\n" "${i}"
usage
exit 1
;;
*=*)
# shellcheck disable=SC2163
export "$i"
shift
;;
*)
printf "Unknown argument %s\n" "${i}"
usage
exit 1
;;
esac
done
# Fallback definitions for dirs, based on $PREFIX
BINDIR="${BINDIR:-${PREFIX}/bin}"
MANDIR="${MANDIR:-${PREFIX}/share/man}"
DOCDIR="${DOCDIR:-${PREFIX}/share/doc/badwolf-${VERSION}}"
DATADIR="${DATADIR:-${PREFIX}/share/badwolf}"
APPSDIR="${APPSDIR:-${PREFIX}/share/applications}"
# Add some extra CFLAGS
CFLAGS="${CFLAGS} -Wall -Wextra -Wconversion -Wsign-conversion -Werror=implicit-function-declaration -Werror=implicit-int -Werror=vla ${EXTRA_CFLAGS}"
## System checks
# commands
printf 'Checking %s command existance ...' "${PKGCONFIG}"
command -v "${PKGCONFIG}" >/dev/null ; required
printf 'Checking %s command existance ...' "${CC}"
command -v "${CC}" >/dev/null ; required
printf 'Checking %s command existance ...' "${ED}"
if command -v "${ED}" >/dev/null ; is_ok
then
:
else
echo 'Warning: Fixing copyright in po/*.pot files via ed(1) disabled'
ED="false"
fi
printf 'Checking %s command existance ...' "${MANDOC}"
if command -v "${MANDOC}" >/dev/null ; is_ok
then
lint_targets="${lint_targets} lint_mandoc"
else
echo 'Warning: manpage linting via mandoc(1) disabled'
MANDOC="true"
fi
printf 'Checking %s command existance ...' "${XGETTEXT}"
if command -v "${XGETTEXT}" >/dev/null ; is_ok
then
if [ "${XGETTEXT}" != "true" ]
then
# This is due to NetBSD base system having a very old version of gettext (0.16)
printf 'Checking if %s --help lists --package-name= option ...' "${XGETTEXT}"
if "${XGETTEXT}" --help 2>&1 | grep -q package-name=; is_ok
then
:
else
echo 'Warning: translation updates disabled, you may want to set XGETTEXT'
XGETTEXT="true"
fi
else
echo 'Warning: translation updates disabled'
fi
else
echo 'Warning: translation updates disabled'
XGETTEXT="true"
fi
printf 'Checking %s command existance ...' "${MSGMERGE}"
if command -v "${MSGMERGE}" >/dev/null ; is_ok
then
:
else
echo 'Warning: translation updates disabled'
MSGMERGE="true"
fi
printf 'Checking %s command existance ...' "${SHELLCHECK}"
if command -v "${SHELLCHECK}" >/dev/null ; is_ok
then
lint_targets="${lint_targets} lint_shellcheck"
else
echo 'Warning: shell linting via shellcheck(1) disabled'
SHELLCHECK="true"
fi
printf 'Checking %s command existance ...' "${FLAWFINDER}"
if command -v "${FLAWFINDER}" >/dev/null ; is_ok
then
lint_targets="${lint_targets} lint_flawfinder"
else
echo 'Warning: C analysis via flawfinder(1) disabled'
FLAWFINDER="true"
fi
printf 'Checking %s command existance ...' "${REUSE}"
if command -v "${REUSE}" >/dev/null ; is_ok
then
lint_targets="${lint_targets} lint_reuse"
else
echo 'Warning: License linting via reuse(1) disabled'
REUSE="true"
fi
echo
# pkg-config
for dep in ${DEPS}
do
pkg_config_check --exists "$dep" || exit 1
done
case "${WITH_WEBKITGTK}n" in
4.1n)
pkg_config_check --atleast-version="${min_webkitgtk}" webkit2gtk-4.1 || exit 1
DEPS="${DEPS} webkit2gtk-4.1"
;;
4.0n)
pkg_config_check --atleast-version="${min_webkitgtk}" webkit2gtk-4.0 || exit 1
DEPS="${DEPS} webkit2gtk-4.0"
;;
n)
echo "notice: Packagers should consider setting the ABI version (4.0 or 4.1) in WITH_WEBKITGTK" >&2
if pkg_config_check --atleast-version="${min_webkitgtk}" webkit2gtk-4.1
then
DEPS="${DEPS} webkit2gtk-4.1"
else
pkg_config_check --atleast-version="${min_webkitgtk}" webkit2gtk-4.0 || exit 1
DEPS="${DEPS} webkit2gtk-4.0"
fi
;;
*)
echo "error: invalid webkit2gtk version in WITH_WEBKITGTK environment variable, must be 4.0 or 4.1" >&2
exit 1
;;
esac
case "${WITH_URI_PARSER}n" in
gurin)
echo "URI parser selected: GUri from glib-2.0"
pkg_config_check --atleast-version="${min_glib_guri}" glib-2.0 || exit 1
DEPS="${DEPS} glib-2.0"
;;
libsoup2n)
echo "URI parser selected: libsoup-2.4"
pkg_config_check libsoup-2.4 || exit 1
DEPS="${DEPS} libsoup-2.4"
CFLAGS="${CFLAGS} -DUSE_LIBSOUP2"
if echo "${DEPS}" | grep -q 'webkit2gtk-4.1'
then
echo 'warning: libsoup2 selected while WebKitGTK with libsoup3 API is used' >&2
fi
;;
n)
echo "notice: Packagers should consider setting the URI parsing library (guri or libsoup2) in WITH_URI_PARSER" >&2
if echo "${DEPS}" | grep -q 'webkit2gtk-4.0'
then
pkg_config_check libsoup-2.4 || exit 1
echo "URI parser selected: libsoup-2.4"
DEPS="${DEPS} libsoup-2.4"
CFLAGS="${CFLAGS} -DUSE_LIBSOUP2"
else
pkg_config_check --atleast-version="${min_glib_guri}" glib-2.0 || exit 1
echo "URI parser selected: GUri from glib-2.0"
DEPS="${DEPS} glib-2.0"
fi
;;
*)
echo "error: invalid uri provider in WITH_URI_PARSER environment variable, must be guri or libsoup2" >&2
;;
esac
printf 'Using pkg-config to get CFLAGS for %s ...' "${DEPS}"
get_cflags() { "${PKGCONFIG}" --cflags "${DEPS}"; }
DEPS_cflags="$(get_cflags)"
required
printf 'Using pkg-config to get LIBS for %s ...' "${DEPS}"
get_libs() { "${PKGCONFIG}" --libs "${DEPS}"; }
DEPS_libs="$(get_libs)"
required
echo
printf 'Writing to configure.h ...'
cat >configure.h <<EOF
#define DATADIR "${DATADIR}"
#define PACKAGE "Badwolf"
#define _XOPEN_SOURCE 700
#define _POSIX_C_SOURCE 200809L
#define VERSION "${VERSION_FULL}"
EOF
is_ok
## Configuration write
printf 'Writing to config.ninja ...'
cat >config.ninja <<EOF
# Autogenerated by $arg0 $args
rule gen_config
command = $arg0 "$args"
generator = 1
build config.ninja: gen_config configure
PREFIX = ${PREFIX}
PKGCONFIG = ${PKGCONFIG}
MSGFMT = ${MSGFMT}
INKSCAPE = ${INKSCAPE}
CC = ${CC}
CFLAGS = ${CFLAGS}
LDFLAGS = ${LDFLAGS}
ED = ${ED}
MANDOC = ${MANDOC}
XGETTEXT = ${XGETTEXT}
MSGMERGE = ${MSGMERGE}
SHELLCHECK = ${SHELLCHECK}
FLAWFINDER = ${FLAWFINDER}
REUSE = ${REUSE}
DEPS_cflags = ${DEPS_cflags}
DEPS_libs = ${DEPS_libs}
GETTEXT_OPTS = --copyright-holder="Badwolf Authors <https://hacktivis.me/projects/badwolf>" --package-name="Badwolf" --package-version="${VERSION_FULL}" --msgid-bugs-address="contact+badwolf-msgid@hacktivis.me"
rule xgettext
command = \$XGETTEXT --keyword=_ --language=C --from-code=UTF-8 -o \$out --add-comments --sort-output --foreign-user --no-location --no-wrap \$GETTEXT_OPTS \$in && ed -s \$out <po/pot_license.ed
rule msgmerge
# touch: msgmerge doesn't always updates timestamps
command = \$MSGMERGE --update --backup=off \$out \$in && touch \$out
rule xgettext_man
command = if test -e \$out; $
then po4a-updatepo --format man -M utf-8 --master \$in \$GETTEXT_OPTS --po \$out && ed -s \$out <po/pot_license.ed;$
else po4a-gettextize --format man -M utf-8 --master \$in \$GETTEXT_OPTS --po \$out && ed -s \$out <po/pot_license.ed;$
fi
rule cc_exe
command = \$CC -std=c11 \$CFLAGS -include configure.h \$DEPS_cflags -o \$out \$in \$LDFLAGS \$DEPS_libs
rule cc_obj
command = \$CC -std=c11 \$CFLAGS -include configure.h \$DEPS_cflags -c -o \$out \$in
build po/messages.pot: xgettext ${SRCS} | po/pot_license.ed
build badwolf: cc_exe ${OBJS}
EOF
all="badwolf"
for obj in ${OBJS}; do
obj_c="$(echo "$obj" | sed -e 's;\.o;.c;g')"
echo -n "build ${obj}: cc_obj ${obj_c} | "
grep '#include "' "${obj_c}" | sed -e 's;#include ";;' -e 's;";;' | tr '\n' ' '
echo
done >>config.ninja
for trans in ${TRANS}; do
echo "build po/${trans}.po: msgmerge po/messages.pot"
echo "build locale/${trans}/LC_MESSAGES/Badwolf.mo: po2mo po/${trans}.po"
all="${all} locale/${trans}/LC_MESSAGES/Badwolf.mo"
done >>config.ninja
for man in ${TRANS_MAN}; do
echo "build po/${man}_man.po: xgettext_man badwolf.1"
echo "build badwolf.${man}.1: translate_manpage po/${man}_man.po"
bundled="${bundled} badwolf.${man}.1"
trans_man="${trans_man} badwolf.${man}.1"
done >>config.ninja
for i in 24 32 48 64 128 256; do
echo "build icons/hicolor/${i}x${i}/apps/badwolf.png: gen_icon icons/hicolor/scalable/apps/badwolf.svg
width = $i
height = $i"
bundled="${bundled} icons/hicolor/${i}x${i}"
icons_list="${icons_list} icons/hicolor/${i}x${i}/apps/badwolf.png"
done >>config.ninja
cat >>config.ninja <<EOF
build icons: phony | ${icons_list}
build trans_man: phony | ${trans_man}
build bundled: phony | icons trans_man
default ${all}
rule remove
command = rm -fr \${in} \${foo}
build install: install | ${all}
build clean: remove
foo = ${all} ${OBJS} ${OBJS_test}
build distclean: remove | clean
foo = config.ninja configure.h install.sh
build fullclean: remove | distclean
foo = ${bundled}
EOF
is_ok
printf 'Writing to ./install.sh ...'
cat >install.sh <<EOF
# Autogenerated by $arg0 $args
# doins <DIR> <filename ...>
doins() {
dir="\${DESTDIR}/\$1"; shift
mkdir -p "\${dir}/" || exit 1
echo "\$@ → \${dir}/"
cp -pr "\$@" "\${dir}/"
}
# newins <DIR> <orig-filename> <dest-filename>
newins() {
dir="\${DESTDIR}/\$1"
mkdir -p "\${dir}/" || exit 1
echo "\$2 → \${dir}/\$3"
cp -pr "\$2" "\${dir}/\$3"
}
doins "${BINDIR}" ./badwolf
doins "${MANDIR}/man1" ./badwolf.1
for man in ${TRANS_MAN}; do
newins "${MANDIR}/\${man}/man1" "./badwolf.\${man}.1" "badwolf.1"
done
doins "${DATADIR}" ./locale
doins "${DATADIR}" ./interface.css
doins "${APPSDIR}" badwolf.desktop
doins "${DOCDIR}" ${DOCS}
doins "${PREFIX}/share" icons
printf "\nNote: An example AppArmor profile has been installed at '${DOCDIR}/usr.bin.badwolf'\n"
EOF
is_ok
echo 'Done, you can now run ninja or samu'

5
badwolf/configure.h Executable file
View file

@ -0,0 +1,5 @@
#define DATADIR "/usr/local/share/badwolf"
#define PACKAGE "Badwolf"
#define _XOPEN_SOURCE 700
#define _POSIX_C_SOURCE 200809L
#define VERSION "1.3.0"

77
badwolf/decisions.md Executable file
View file

@ -0,0 +1,77 @@
<!--
SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
SPDX-License-Identifier: BSD-3-Clause
-->
# Decisions taken over the project lifetime
## What is this?
See <https://akazlou.com/posts-output/2015-11-09-every-project-should-have-decisions/>
Basically, the idea is to have a file in your projects repo, where you record
the decisions you make over the course of the project's lifetime.
Rewriting history will not be done but Post-Scriptum notices will.
## 2023-07-23 : Switch from Makefile to *.ninja
Problems:
- Makefile+config.mk pretty much reached it's limits with manpage translations as you can't just string substitute your way out when it's both prefix & suffix.
- meson/CMake/…: Still the same issues. With GNU autotools also becoming more and more problematic: <https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213>, <https://lists.gnu.org/archive/html/autoconf-patches/2022-09/msg00011.html>, <https://wiki.gentoo.org/wiki/Modern_C_porting>
Solution picked: Transform Makefile into a static build.ninja file, and make configure generate a config.ninja file with the dynamic variables, rules and targets written in.
## 2021-09-07 : Move to a ./configure script
Problem: WebKitGTK gained a new ABI, changing 4.0 to 4.1 for libsoup3, which itself also meant some changes in badwolf
Usual solutions:
- meson: It's intended usage of having a separated build directory would mean loosing the ability to provide commands to update translations files, icons, …
- CMake: Same kind of problem as meson, while being significantly more complex and massive
- GNU autotools: Not the kind of thing I would want to depend on, specially given it's automagic behavior
- waf, scons, …: Just problems on themselves
- Bazel: Just no.
The one I picked: Custom POSIX Shell script. Slightly similar to what musl, ffmpeg, vis, … have been doing.
## 2020-10-22 : Mark the context_id as A-Z instead of Hex
The way I did it at first was to use the hexadecimal representation, but as it starts from 0 there could be confusions with a shortcut hint for alt-n, there could still be confusion with some kind of tab numbering but with a bit of usage it's hopefully going to be obvious.
## 2020-07-04 : Automatically switch to a user-created tab / Breaking the UI
I got pointed out that when creating a new tab the user has to needlessly switch to it while it could be done when they request it.
I also decided to still release it in a point release, so without bump of Major because while it does changes the behavior it doesn't break the associated meaning, while this would be a breaking change for an API I could take it as a minor adjustment in a user-interface.
Note: This would be an API if user-interface interactions could be scripted (like in HaikuOS) but I'm not aware of people actually doing this one with GTK programs.
## 2020-02-04 & 2020-02-09 : Use BSD extensions in the Makefile
The BSD extensions += and ?= for variable extension is used to avoid having to explicitly pass a list of variables to make, thus making build recipes simpler.
They are also compatible with GNU make so portability shouldn't have significantly dropped.
Which also meant dropping `.POSIX` into the file so `CC` wouldn't be set by default to `c99` (which isn't what I want, the codebase is in C11).
## 2020-01-30 02:59 : Make window declaration static
This allows to avoid a quite useless memory allocation that would only be freed at the end of the program.
## 2020-01-22 15:30 : Update copyright to Badwolf Authors
I don't want copyright assignment to me or any organisation, it should belong to every contributor, meaning that any copyright change will need to be accepted by them or their contribution would need to be replaced if need to be.
## 2020-01-08 08:42:00Z : Start of the decisions.md file
From memory and git log:
- Changelog is done when preparing for a release, it is copied into the git tag description. This means that there isn't a central file and isn't a changelog entry added with commits.
- OpenPGP is deprecated in favor of signify, reasons being security and portability.
- Prefer using lower and more standard/ubiquitous layers for implementations, one example is the about information with printf and Gtk Dialog rather than a custom scheme in WebKitGTK.
- using GLib instead of POSIX was done at first but the quality/behaviour of GLib (like `g_malloc()` calling `abort()` on errors) reverted this decision.
- WebKitGTK was picked because it is the only WebKit port which is maintained enough without a bus-factor (consider giving QtWebKit a hand too?).
- The `.clang-format` file was copied from the one living in my home directory:
- function declaration is at the start of the line to allow jumping to it with a simple editor
- braces on their own lines to allow for comments space
- "tabs for indentation and space for alignment" style is used for flexibility
- mdoc was picked over other formats for the manpage, as it is implemented in mandoc and GNU groff, much simpler to read/write and transform to other formats (like HTML or Markdown).
- Markdown was picked over other formats for informal documentation, it is a simple format supported by most forges, a format which is easier to write and parse could be considered
- Proprietary systems are not supported for their lack of auditability and transparency.
- C was picked because:
1. I wanted to avoid being limited by binding completeness or model
2. I think it is a good language which is fit for this purpose provided you are careful enough (such as using LLVM to it's full potential for checks)
3. It is portable and doesn't introduces more dependencies than is already needed
- POSIX was picked for it's portability (only known one where it's absent is Windows but it's not going to be supported)
- Writing a portable (almost POSIX-only) Makefile with `pkg-config(1)` was picked over other build systems which tend to be over-complicated and rely on only one implementation.
- Originally the URL entry accepted only valid URLs, this was changed to a bit of heuristics for fixing it when it was entered by the user.
- No search entry is provided, this is to encourage users to avoid search engines as much as possible, support for SmartBookmarks with keywords (similar to DuckDuckGo/Searx !bangs) will be added after support for suggestions via bookmarks
- Bookmarks are first-class citizens as they are data explicitly controlled by the user
- No browsing history is provided, this is to encourage to use and improve bookmarks, it will be added later on with data retention limits, ability to wipe it and non-reachable from WebKit (and so the Wild Web).
- Javascript is turned off by default with a checkbox to enable it temporarily, Permissions Requests (microphone, geolocation, …) are all denied, something similar to uMatrix and NoScript will eventually be done to fix this

226
badwolf/downloads.c Executable file
View file

@ -0,0 +1,226 @@
// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "downloads.h"
#include "badwolf.h"
#include "config.h"
#include <glib/gi18n.h> /* _() and other internationalization/localization helpers */
static void
download_stop_iconCb_clicked(GtkButton *UNUSED(stop_icon), gpointer user_data)
{
WebKitDownload *webkit_download = (WebKitDownload *)user_data;
webkit_download_cancel(webkit_download);
}
void
download_format_elapsed(char *restrict formatted,
size_t formatted_size,
char *restrict format,
int total)
{
/* flawfinder: ignore, format string only passed by ourselves */
snprintf(formatted,
formatted_size,
format,
total / 3600, /* hours */
(total % 3600) / 60, /* minutes */
total % 60); /* seconds */
}
void
download_new_entry(WebKitDownload *webkit_download, struct Download *download)
{
download->error = 0;
download->container = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, BADWOLF_DOWNLOAD_PADDING);
download->progress = gtk_progress_bar_new();
download->file_path = gtk_label_new(NULL);
download->status = gtk_label_new(_("Download starting…"));
download->icon =
gtk_image_new_from_icon_name("network-idle-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
download->stop_icon = gtk_button_new_from_icon_name("process-stop", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(download->progress), TRUE);
gtk_label_set_ellipsize(GTK_LABEL(download->file_path), BADWOLF_DOWNLOAD_FILE_PATH_ELLIPSIZE);
g_signal_connect(
download->stop_icon, "clicked", G_CALLBACK(download_stop_iconCb_clicked), webkit_download);
gtk_box_pack_start(GTK_BOX(download->container), download->icon, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(download->container), download->progress, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(download->container), download->stop_icon, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(download->container), download->status, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(download->container), download->file_path, FALSE, FALSE, 0);
gtk_list_box_insert(GTK_LIST_BOX(download->window->downloads_tab), download->container, -1);
gtk_widget_show_all(download->container);
}
void
downloadCb_created_destination(WebKitDownload *UNUSED(webkit_download),
gchar *destination,
gpointer user_data)
{
char *markup;
struct Download *download = (struct Download *)user_data;
markup = g_markup_printf_escaped(
"<a href=\"%s\">%s</a>", destination, webkit_uri_for_display(destination));
gtk_label_set_markup(GTK_LABEL(download->file_path), markup);
g_free(markup);
}
gboolean
downloadCb_decide_destination(WebKitDownload *webkit_download,
gchar *suggested_filename,
gpointer user_data)
{
struct Client *browser = (struct Client *)user_data;
gint chooser_response;
GtkWindow *parent_window = GTK_WINDOW(browser->window->main_window);
GtkFileChooserNative *file_dialog =
gtk_file_chooser_native_new(NULL, parent_window, GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL);
GtkFileChooser *file_chooser = GTK_FILE_CHOOSER(file_dialog);
gtk_file_chooser_set_current_name(file_chooser, suggested_filename);
gtk_file_chooser_set_do_overwrite_confirmation(file_chooser, TRUE);
webkit_download_set_allow_overwrite(webkit_download, TRUE);
chooser_response = gtk_native_dialog_run(GTK_NATIVE_DIALOG(file_dialog));
if(chooser_response == GTK_RESPONSE_ACCEPT)
webkit_download_set_destination(webkit_download, gtk_file_chooser_get_uri(file_chooser));
else
webkit_download_cancel(webkit_download);
g_object_unref(file_dialog);
return FALSE; /* Let it propagate */
}
void
downloadCb_failed(WebKitDownload *webkit_download, GError *error, gpointer user_data)
{
struct Download *download = (struct Download *)user_data;
/* flawfinder: ignore. proper buffer limits are used */
char formatted[BUFSIZ];
int total = (int)webkit_download_get_elapsed_time(webkit_download);
char *format;
download->error = error;
if(g_error_matches(error, WEBKIT_DOWNLOAD_ERROR, WEBKIT_DOWNLOAD_ERROR_CANCELLED_BY_USER))
format = _("%02i:%02i:%02i Download cancelled");
else
format = _("%02i:%02i:%02i Download error");
download_format_elapsed(formatted, sizeof(formatted), format, total);
gtk_label_set_text(GTK_LABEL(download->status), formatted);
gtk_image_set_from_icon_name(
GTK_IMAGE(download->icon), "network-error-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
}
void
downloadCb_finished(WebKitDownload *webkit_download, gpointer user_data)
{
struct Download *download = (struct Download *)user_data;
/* flawfinder: ignore. proper buffer limits are used */
char formatted[BUFSIZ];
int total = (int)webkit_download_get_elapsed_time(webkit_download);
gchar *format_size = g_format_size(webkit_download_get_received_data_length(webkit_download));
download_format_elapsed(
formatted, sizeof(formatted), _("%02i:%02i:%02i Download finished"), total);
gtk_widget_destroy(download->stop_icon);
if(download->error == 0)
{
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(download->progress), 1);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(download->progress), format_size);
gtk_label_set_text(GTK_LABEL(download->status), formatted);
gtk_image_set_from_icon_name(
GTK_IMAGE(download->icon), "network-idle-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
}
// TODO: Send notification
}
void
downloadCb_received_data(WebKitDownload *webkit_download,
guint64 UNUSED(data_lenght),
gpointer user_data)
{
struct Download *download = (struct Download *)user_data;
/* flawfinder: ignore. proper buffer limits are used */
char formatted[BUFSIZ];
int total = (int)webkit_download_get_elapsed_time(webkit_download);
gchar *format_size = g_format_size(webkit_download_get_received_data_length(webkit_download));
download_format_elapsed(formatted, sizeof(formatted), _("%02i:%02i:%02i Downloading…"), total);
gtk_image_set_from_icon_name(
GTK_IMAGE(download->icon), "network-receive-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_label_set_text(GTK_LABEL(download->status), formatted);
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(download->progress),
webkit_download_get_estimated_progress(webkit_download));
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(download->progress), format_size);
g_free(format_size);
}
GtkWidget *
badwolf_downloads_tab_new()
{
return gtk_list_box_new();
}
void
badwolf_downloads_tab_attach(struct Window *window)
{
GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
gtk_widget_set_name(scrolled_window, "browser__scrollwin_downloads");
gtk_container_add(GTK_CONTAINER(scrolled_window), window->downloads_tab);
gtk_notebook_insert_page(GTK_NOTEBOOK(window->notebook), scrolled_window, NULL, 0);
gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(window->notebook), scrolled_window, TRUE);
GtkWidget *tab_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_set_name(tab_box, "browser__tabbox");
GtkWidget *icon = gtk_image_new_from_icon_name("emblem-downloads", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_name(icon, "browser__tabbox__icon");
GtkWidget *label = gtk_label_new(_("Badwolf Downloads"));
gtk_widget_set_name(label, "browser__tabbox__label");
#ifdef BADWOLF_TAB_BOX_WIDTH
gtk_widget_set_size_request(label, BADWOLF_TAB_BOX_WIDTH, -1);
#endif
#ifdef BADWOLF_TAB_LABEL_CHARWIDTH
gtk_label_set_width_chars(GTK_LABEL(label), BADWOLF_TAB_LABEL_CHARWIDTH);
#endif
gtk_widget_set_hexpand(tab_box, BADWOLF_TAB_HEXPAND);
gtk_label_set_ellipsize(GTK_LABEL(label), BADWOLF_TAB_LABEL_ELLIPSIZE);
gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE);
gtk_box_pack_start(GTK_BOX(tab_box), icon, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(tab_box), label, TRUE, TRUE, 0);
gtk_widget_set_tooltip_text(tab_box, _("Badwolf Downloads"));
gtk_notebook_set_tab_label(GTK_NOTEBOOK(window->notebook), scrolled_window, tab_box);
gtk_notebook_set_menu_label_text(
GTK_NOTEBOOK(window->notebook), scrolled_window, _("Badwolf Downloads"));
gtk_widget_show_all(tab_box);
}

31
badwolf/downloads.h Executable file
View file

@ -0,0 +1,31 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "badwolf.h"
#include <gtk/gtk.h>
struct Download
{
struct Window *window;
GtkWidget *container;
GtkWidget *icon;
GtkWidget *stop_icon;
GtkWidget *file_path;
GtkWidget *progress;
GtkWidget *status;
GError *error;
};
void download_new_entry(WebKitDownload *webkit_download, struct Download *download);
void
downloadCb_created_destination(WebKitDownload *download, gchar *destination, gpointer user_data);
gboolean downloadCb_decide_destination(WebKitDownload *download,
gchar *suggested_filename,
gpointer user_data);
void downloadCb_failed(WebKitDownload *webkit_download, GError *error, gpointer user_data);
void downloadCb_finished(WebKitDownload *download, gpointer user_data);
void downloadCb_received_data(WebKitDownload *download, guint64 data_lenght, gpointer user_data);
GtkWidget *badwolf_downloads_tab_new();
void badwolf_downloads_tab_attach(struct Window *window);

BIN
badwolf/downloads.o Executable file

Binary file not shown.

31
badwolf/fmt.c Executable file
View file

@ -0,0 +1,31 @@
// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "fmt.h"
/* flawfinder: ignore. `alpha_digits` is never modified */
static const char alpha_digits[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void
fmt_context_id(uint64_t num, char *out)
{
/* flawfinder: ignore. bound checks are done */
char buf[BADWOLF_CTX_SIZ] = {0, 0, 0, 0, 0, 0, 0};
int len = 0;
buf[++len] = ' ';
buf[++len] = ':';
buf[++len] = alpha_digits[num % 26];
num /= 26;
while(num > 0 && len < (BADWOLF_CTX_SIZ - 1))
{
buf[++len] = alpha_digits[(num - 1) % 26];
num /= 26;
}
for(int i = 0; i < len; i++)
{
out[i] = buf[len - i];
}
}

7
badwolf/fmt.h Executable file
View file

@ -0,0 +1,7 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include <stdint.h> // uint64_t
#define BADWOLF_CTX_SIZ 7
void fmt_context_id(uint64_t num, char *out);

BIN
badwolf/fmt.o Normal file

Binary file not shown.

58
badwolf/fmt_test.c Executable file
View file

@ -0,0 +1,58 @@
// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "fmt.h"
#include <glib.h>
#include <inttypes.h> // PRIu64
#include <stdint.h> // UINT64_C
static void
fmt_context_id_test(void)
{
struct
{
const char *expect;
uint64_t context_id;
} cases[] = {
//
{"A: ", UINT64_C(0)},
{"B: ", UINT64_C(1)},
{"Y: ", UINT64_C(24)},
{"Z: ", UINT64_C(25)},
{"AA: ", UINT64_C(26)},
{"AB: ", UINT64_C(27)},
{"AZ: ", UINT64_C(51)},
{"BA: ", UINT64_C(52)},
{"BB: ", UINT64_C(53)},
{"QKWW: ", UINT64_C(4294967296)}, // 2^32
{"JFHI: ", UINT64_C(9223372036854775808)}, // 2^63
{"TLPO: ", UINT64_C(18446744073709551614)}, // 2^64 -2
{"TLPP: ", UINT64_C(18446744073709551615)}, // 2^64 -1 (aka UINT64_MAX)
};
for(size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++)
{
g_info("fmt_context_id(%" PRIu64 ")", cases[i].context_id);
/* flawfinder: ignore. bound checks are done */
char got[BADWOLF_CTX_SIZ] = {0, 0, 0, 0, 0, 0, 0};
fmt_context_id(cases[i].context_id, got);
if(strncmp(got, cases[i].expect, BADWOLF_CTX_SIZ) != 0)
{
g_error("expected: \"%s\", got: \"%s\"", cases[i].expect, got);
}
}
}
int
main(int argc, char *argv[])
{
g_test_init(&argc, &argv, NULL);
g_test_add_func("/fmt_context_id/test", fmt_context_id_test);
return g_test_run();
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><clipPath id="clippy"><rect width="16.933" height="16.933" ry="1"/></clipPath><radialGradient id="b" cx="8.6972" cy="-4.2398" r="8.4667" gradientTransform="matrix(-2.612 .056083 -.038123 -1.7755 30.491 -9.1064)" gradientUnits="userSpaceOnUse"><stop stop-color="#139e7c" offset="0"/><stop stop-color="#122548" offset="1"/></radialGradient><linearGradient id="linearGradient846" x1="-10.467" x2="-10.736" y1="4.7058" y2="4.7058" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="linearGradient874" x1="7.4633" x2="6.7959" y1="8.9935" y2="11.681" gradientUnits="userSpaceOnUse"><stop stop-color="#00ffd6" offset="0"/><stop stop-color="#007f64" offset="1"/></linearGradient></defs><g clip-path="url(#clippy)"><rect width="16.933" height="16.933" ry="0" fill="url(#b)"/><path d="m21.868-1.992a13.402 8.1853 0 0 1-6.7132 7.0929 13.402 8.1853 0 0 1-13.414-0.012891 13.402 8.1853 0 0 1-6.6767-7.1058l13.402 0.025759z" fill="url(#linearGradient846)" stroke="#23e0b7" stroke-width=".50271"/><path d="m5.9543 19.118c0.32505-2.6594 0.93668-3.1497-0.16577-5.2442-0.59266-1.049-2.2826-2.3153-3.1406-3.3342-0.48055-0.7492-1.6045-1.3225-2.2864-2.7903-0.15968-0.98447 2.224 1.2239 2.8948 1.1873 0.25739-0.2849-1.6007-2.177-1.4286-2.8633 0.14314-0.57062 0.21225-1.138 0.78124-1.5697 1.1973-0.3312 3.3913 2.8127 4.9273 3.2604 2.1106-0.72487 3.1742 1.4901 4.8202 1.8301 1.3227 0.15657 3.2074 1.5937 4.2524 2.9708-0.84502 0.59047-3.0445-0.7063-4.4104-0.10811-0.53812 0.82524 1.0996 5.2192 1.3863 5.7331" fill="#120d09" fill-rule="evenodd" stroke="url(#linearGradient874)" stroke-width=".67495" style="mix-blend-mode:luminosity"/></g></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

8
badwolf/icons_size.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
# SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
# Transforms an icon size from the Icon Theme Specification to rsvg-convert(1) options
#sed -r -e 's;^([^x]*)x([^@]*)$;-w \1 -h \2;' -e 's;^([^x]*)x([^@]*)@(.*)$;-w \1 -h \2 -z \3;'
sed -r 's;^([^x]*)x([^@]*)$;-w \1 -h \2;'

31
badwolf/install Executable file
View file

@ -0,0 +1,31 @@
# Autogenerated by ./configure
# doins <DIR> <filename ...>
doins() {
dir="${DESTDIR}/$1"; shift
mkdir -p "${dir}/" || exit 1
echo "$@ → ${dir}/"
cp -pr "$@" "${dir}/"
}
# newins <DIR> <orig-filename> <dest-filename>
newins() {
dir="${DESTDIR}/$1"
mkdir -p "${dir}/" || exit 1
echo "$2 → ${dir}/$3"
cp -pr "$2" "${dir}/$3"
}
doins "/usr/local/bin" ./badwolf
doins "/usr/local/share/man/man1" ./badwolf.1
for man in de fr tr vi; do
newins "/usr/local/share/man/${man}/man1" "./badwolf.${man}.1" "badwolf.1"
done
doins "/usr/local/share/badwolf" ./locale
doins "/usr/local/share/badwolf" ./interface.css
doins "/usr/local/share/applications" badwolf.desktop
doins "/usr/local/share/doc/badwolf-1.3.0" usr.bin.badwolf README.md KnowledgeBase.md interface.md
doins "/usr/local/share" icons
printf "\nNote: An example AppArmor profile has been installed at '/usr/local/share/doc/badwolf-1.3.0/usr.bin.badwolf'\n"

31
badwolf/install.sh Executable file
View file

@ -0,0 +1,31 @@
# Autogenerated by ./configure
# doins <DIR> <filename ...>
doins() {
dir="${DESTDIR}/$1"; shift
mkdir -p "${dir}/" || exit 1
echo "$@${dir}/"
cp -pr "$@" "${dir}/"
}
# newins <DIR> <orig-filename> <dest-filename>
newins() {
dir="${DESTDIR}/$1"
mkdir -p "${dir}/" || exit 1
echo "$2${dir}/$3"
cp -pr "$2" "${dir}/$3"
}
doins "/usr/local/bin" ./badwolf
doins "/usr/local/share/man/man1" ./badwolf.1
for man in de fr tr vi; do
newins "/usr/local/share/man/${man}/man1" "./badwolf.${man}.1" "badwolf.1"
done
doins "/usr/local/share/badwolf" ./locale
doins "/usr/local/share/badwolf" ./interface.css
doins "/usr/local/share/applications" badwolf.desktop
doins "/usr/local/share/doc/badwolf-1.3.0" usr.bin.badwolf README.md KnowledgeBase.md interface.md
doins "/usr/local/share" icons
printf "\nNote: An example AppArmor profile has been installed at '/usr/local/share/doc/badwolf-1.3.0/usr.bin.badwolf'\n"

7
badwolf/interface.css Executable file
View file

@ -0,0 +1,7 @@
/*
* SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
* SPDX-License-Identifier: BSD-3-Clause
*/
#browser__location, #browser__statuslabel, #browser__tabbox__context_label { font-family: monospace; }
button:checked label { font-weight: bold; }

51
badwolf/interface.md Executable file
View file

@ -0,0 +1,51 @@
<!--
SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
SPDX-License-Identifier: BSD-3-Clause
-->
# Badwolf
- A tablist with a new tab button at the end
- right-clicking on the tablist gives you the list in a context-menu format
- middle-clicking on the focused tab closes it
- Each tab contains a Browser View or the Downloads View
## Tab Labels
- An A-Z represented number identifying the webkit process context
- An icon to indicate if a media is playing
- The title of the web view
- A close button
## Browser View
The Browser View contains the following items:
- Toolbar
- WebKit WebView
- Status Bar
### Toolbar
- Backward navigation button followed by a smaller forward navigation button
- Separator
- Javascript-markup toggler marked "JS" followed by an image-loading toggler marked "IMG"
- Potentially some future elements
- Location entry linked to the WebKit WebView, with integrated progress indication also linked to the WebKit WebView
- Potentially some future elements
- Print button
- Potentially some future elements
The element focused by default is the location entry.
### Status bar
- Search entry linked to the WebKit WebView
- Potentially some future elements
- Label showing where the mouse is pointing
- Potentially some future elements
## Downloads View
The download view is a table contains the following items on each row corresponding to each download:
- Icon linked to the network status
- Progress bar, with integrated received-size indication
- (when downloading) Cancelling button
- Label about the current status
- Link to download destination
- Potentially some future elements

237
badwolf/keybindings.c Executable file
View file

@ -0,0 +1,237 @@
// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "keybindings.h"
#include "badwolf.h"
#include <glib/gi18n.h> /* _() */
static gboolean
about_dialogCb_activate_link(GtkAboutDialog *about_dialog, gchar *uri, gpointer user_data)
{
struct Window *window = (struct Window *)user_data;
badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, uri, NULL), TRUE);
gtk_window_close(GTK_WINDOW(about_dialog));
return TRUE;
}
static void
badwolf_about_dialog(GtkWindow *main_window, gpointer user_data)
{
struct Window *window = (struct Window *)user_data;
GtkWidget *about_dialog = gtk_about_dialog_new();
char *comments = NULL;
comments = g_strdup_printf(_("Minimalist and privacy-oriented web browser based on WebKitGTK\n"
"Runtime WebKit version: %d.%d.%d"),
webkit_get_major_version(),
webkit_get_minor_version(),
webkit_get_micro_version());
gtk_window_set_transient_for(GTK_WINDOW(about_dialog), main_window);
gtk_window_set_destroy_with_parent(GTK_WINDOW(about_dialog), TRUE);
gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(about_dialog),
"SPDX License Identifiers: BSD-3-Clause AND CC-BY-SA-4.0");
gtk_about_dialog_set_copyright(
GTK_ABOUT_DIALOG(about_dialog),
"2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf>");
gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about_dialog), homepage);
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about_dialog), comments);
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog), version);
gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(about_dialog), "badwolf");
g_signal_connect(about_dialog, "activate-link", G_CALLBACK(about_dialogCb_activate_link), window);
gtk_dialog_run(GTK_DIALOG(about_dialog));
gtk_widget_destroy(about_dialog);
}
static void
toggle_caret_browsing(WebKitWebView *webView)
{
WebKitSettings *settings = webkit_web_view_get_settings(webView);
webkit_settings_set_enable_caret_browsing(settings,
!webkit_settings_get_enable_caret_browsing(settings));
webkit_web_view_set_settings(webView, settings);
}
/* commonCb_key_press_event: Global callback for keybindings
*
* Theses shortcuts should be avoided as much as possible:
* - Single key shortcuts (ie. backspace and space)
* - Triple key shortcuts (except for Ctrl+Shift)
* - Unix Terminal shortcuts (specially Ctrl-W)
*
* loosely follows https://developer.gnome.org/hig/guidelines/keyboard.html
*/
gboolean
commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client *browser)
{
GtkNotebook *notebook = GTK_NOTEBOOK(window->notebook);
if(((GdkEventKey *)event)->state & GDK_CONTROL_MASK)
{
if(browser != NULL)
{
switch(((GdkEventKey *)event)->keyval)
{
/*case GDK_KEY_F4:*/
case GDK_KEY_q:
webkit_web_view_try_close(browser->webView);
return TRUE;
case GDK_KEY_w:
webkit_web_view_try_close(browser->webView);
return TRUE;
case GDK_KEY_r:
if(((GdkEventKey *)event)->state & GDK_SHIFT_MASK)
webkit_web_view_reload_bypass_cache(browser->webView);
else
webkit_web_view_reload(browser->webView);
return TRUE;
case GDK_KEY_f:
gtk_widget_grab_focus(browser->search);
return TRUE;
case GDK_KEY_l:
gtk_widget_grab_focus(browser->location);
return TRUE;
case GDK_KEY_bracketleft:
webkit_web_view_go_back(browser->webView);
return TRUE;
case GDK_KEY_bracketright:
webkit_web_view_go_forward(browser->webView);
return TRUE;
case GDK_KEY_0:
webkit_web_view_set_zoom_level(WEBKIT_WEB_VIEW(browser->webView), 1);
return TRUE;
case GDK_KEY_p:
webkit_print_operation_run_dialog(webkit_print_operation_new(browser->webView),
GTK_WINDOW(browser->window->main_window));
return TRUE;
case GDK_KEY_Return:
if(((GdkEventKey *)event)->state & GDK_SHIFT_MASK)
badwolf_new_tab(notebook, new_browser(window, NULL, NULL), TRUE);
}
}
else
{
if((((GdkEventKey *)event)->keyval >= GDK_KEY_0) &&
(((GdkEventKey *)event)->keyval <= GDK_KEY_9))
gtk_notebook_set_current_page(notebook, (gint)(((GdkEventKey *)event)->keyval - GDK_KEY_1));
switch(((GdkEventKey *)event)->keyval)
{
case GDK_KEY_Page_Down:
gtk_notebook_next_page(notebook);
return TRUE;
case GDK_KEY_Page_Up:
gtk_notebook_prev_page(notebook);
return TRUE;
case GDK_KEY_t:
badwolf_new_tab(notebook, new_browser(window, NULL, NULL), TRUE);
return TRUE;
}
}
}
if((((GdkEventKey *)event)->state & GDK_MOD1_MASK))
{
if((browser != NULL) && (((GdkEventKey *)event)->keyval == GDK_KEY_d))
{
webkit_web_view_try_close(browser->webView);
return TRUE;
}
switch(((GdkEventKey *)event)->keyval)
{
case GDK_KEY_Left:
gtk_notebook_prev_page(notebook);
return TRUE;
case GDK_KEY_Right:
gtk_notebook_next_page(notebook);
return TRUE;
}
}
if(browser != NULL)
{
switch(((GdkEventKey *)event)->keyval)
{
case GDK_KEY_F5:
webkit_web_view_reload(browser->webView);
return TRUE;
case GDK_KEY_Escape:
webkit_web_view_stop_loading(browser->webView);
return TRUE;
case GDK_KEY_F7:
toggle_caret_browsing(browser->webView);
return TRUE;
case GDK_KEY_F12:
webkit_web_inspector_show(webkit_web_view_get_inspector(browser->webView));
return TRUE;
}
}
else
{
switch(((GdkEventKey *)event)->keyval)
{
case GDK_KEY_F1:
badwolf_about_dialog(GTK_WINDOW(window->main_window), window);
return TRUE;
}
}
return FALSE;
}
gboolean
WebViewCb_key_press_event(WebKitWebView *UNUSED(webView), GdkEvent *event, gpointer user_data)
{
struct Client *browser = (struct Client *)user_data;
if(commonCb_key_press_event(browser->window, event, browser)) return TRUE;
return FALSE;
}
gboolean
boxCb_key_press_event(GtkWidget *UNUSED(widget), GdkEvent *event, gpointer user_data)
{
struct Client *browser = (struct Client *)user_data;
if(commonCb_key_press_event(browser->window, event, browser)) return TRUE;
return FALSE;
}
gboolean
main_windowCb_key_press_event(GtkWidget *UNUSED(widget), GdkEvent *event, gpointer user_data)
{
struct Window *window = (struct Window *)user_data;
if(commonCb_key_press_event(window, event, NULL)) return TRUE;
return FALSE;
}
gboolean
tab_boxCb_button_release_event(GtkWidget *UNUSED(widget), GdkEvent *event, gpointer user_data)
{
struct Client *browser = (struct Client *)user_data;
if(((GdkEventButton *)event)->button == GDK_BUTTON_MIDDLE)
{
webkit_web_view_try_close(browser->webView);
return TRUE;
}
return FALSE;
}

17
badwolf/keybindings.h Executable file
View file

@ -0,0 +1,17 @@
// SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#ifndef KEYBINDINGS_H_INCLUDED
#define KEYBINDINGS_H_INCLUDED
#include "badwolf.h"
#include <gtk/gtk.h>
#include <webkit2/webkit2.h>
gboolean boxCb_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data);
gboolean commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client *browser);
gboolean main_windowCb_key_press_event(GtkWidget *widget, GdkEvent *event, gpointer user_data);
gboolean WebViewCb_key_press_event(WebKitWebView *webView, GdkEvent *event, gpointer user_data);
gboolean tab_boxCb_button_release_event(GtkWidget *widget, GdkEvent *event, gpointer user_data);
#endif /* KEYBINDINGS_H_INCLUDED */

BIN
badwolf/keybindings.o Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
badwolf/mo/.keep Executable file
View file

237
badwolf/po/de.po Executable file
View file

@ -0,0 +1,237 @@
# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
msgid ""
msgstr ""
"Project-Id-Version: Badwolf 1.0.3+g1b10b33.develop\n"
"Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n"
"POT-Creation-Date: 2023-07-31 14:04+0200\n"
"PO-Revision-Date: 2023-07-31 13:57+0200\n"
"Last-Translator: Ben K. <ben-k@tutanota.com>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.3.2\n"
#, c-format
msgid "%02i:%02i:%02i Download cancelled"
msgstr "%02i:%02i:%02i Herunterladen abgebrochen"
#, c-format
msgid "%02i:%02i:%02i Download error"
msgstr "%02i:%02i:%02i Herunterladen fehlgeschlagen"
#, c-format
msgid "%02i:%02i:%02i Download finished"
msgstr "%02i:%02i:%02i Fertig Heruntergeladen"
#, c-format
msgid "%02i:%02i:%02i Downloading…"
msgstr "%02i:%02i:%02i Lade herunter…"
msgid "Badwolf Downloads"
msgstr "Heruntergeladene Dateien"
msgid "Bookmarks: Done.\n"
msgstr "Lesezeichen: Erledigt. \n"
#, c-format
msgid "Bookmarks: Found %d bookmarks.\n"
msgstr "Lesezeichen: %d Lesezeichen gefunden. \n"
#, c-format
msgid "Bookmarks: No loadable file found at %s\n"
msgstr "Lesezeichen: Keine ladbare Datei unter %s gefunden\n"
#, c-format
msgid "Bookmarks: loading at %s\n"
msgstr "Lesezeichen: %s geladen\n"
#, fuzzy
msgid "Bookmarks: unable to create new XPath context\n"
msgstr "Lesezeichen: Die Datei \"%s\" konnte nicht geparst werden\n"
#, fuzzy, c-format
msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n"
msgstr "Lesezeichen: Die Datei \"%s\" konnte nicht geparst werden\n"
#, c-format
msgid "Bookmarks: unable to parse file \"%s\"\n"
msgstr "Lesezeichen: Die Datei \"%s\" konnte nicht geparst werden\n"
#, fuzzy, c-format
msgid "Buildtime WebKit version: %d.%d.%d\n"
msgstr "Ausführende WebKit-Version: %d.%d.%d\n"
msgid "Continue"
msgstr "Weiter"
msgid ""
"Couldn't verify the TLS certificate to ensure a better security of the "
"connection. You might want to verify your machine and network.\n"
"\n"
msgstr ""
"Das TLS-Zertifikat konnte nicht verifiziert werden, um eine bessere "
"Sicherheit der Verbindung sicherzustellen. Sie möchten vielleicht ihr Gerät "
"und ihr Netzwerk überprüfen. \n"
msgid "Crashed"
msgstr "Abgestürtzt"
msgid "Download starting…"
msgstr "Download startet…"
msgid "Empty Title"
msgstr "Kein Titel"
msgid "Error: Some unknown error occurred validating the certificate.\n"
msgstr ""
"Fehler: Es ist ein unbekannter Fehler beim überprüfen des Zertifikats "
"aufgetreten.\n"
#, fuzzy
msgid "Error: The X509 Certificate Authority is unknown.\n"
msgstr "Fehler: Das Zertifikat wird als unsicher angesehen.\n"
#, fuzzy
msgid "Error: The certificate has been revoked.\n"
msgstr ""
"Fehler: Das Zertifikat ist abgelaufen. Bitte überprüfen Sie, ob die Uhr "
"ihres Systems richtig eingestellt ist.\n"
msgid "Error: The certificate has expired. Check your system's clock.\n"
msgstr ""
"Fehler: Das Zertifikat ist abgelaufen. Bitte überprüfen Sie, ob die Uhr "
"ihres Systems richtig eingestellt ist.\n"
msgid "Error: The certificate is considered to be insecure.\n"
msgstr "Fehler: Das Zertifikat wird als unsicher angesehen.\n"
msgid "Error: The certificate isn't valid yet. Check your system's clock.\n"
msgstr ""
"Fehler: Das Zertifikat ist noch nicht gültig. Bitte überprüfen Sie, ob die "
"Uhr ihres Systems richtig eingestellt ist.\n"
msgid "Error: The given identity doesn't match the expected one.\n"
msgstr ""
"Fehler: Die gegebene Identität passt nicht mit der Erwarteten zusammen.\n"
#, c-format
msgid ""
"Minimalist and privacy-oriented web browser based on WebKitGTK\n"
"Runtime WebKit version: %d.%d.%d"
msgstr ""
"Minimalistischer und Privatsphäre-orientierter Internetbrowser basierend of "
"WebKitGTK\n"
"Runtime WebKit version: %d.%d.%d"
msgid "New tab"
msgstr "Neuer Reiter"
msgid "Open new tab"
msgstr "Neuen Reiter öffnen"
msgid "Out of Memory"
msgstr "Ihnen scheint der Arbeitsspeicher ausgegangen zu sein! (Out of Memory)"
#, c-format
msgid "Running Badwolf version: %s\n"
msgstr "Ausführende Badwolf-Version: %s\n"
#, c-format
msgid "Runtime WebKit version: %d.%d.%d\n"
msgstr "Ausführende WebKit-Version: %d.%d.%d\n"
#, c-format
msgid "TLS Error for %s."
msgstr "TLS-Fehler für %s."
msgid "Temporarily Add Exception"
msgstr "Eine Ausnahme machen"
msgid "Toggle javascript"
msgstr "JavaScript ein-/ausschalten"
msgid "Toggle loading images automatically"
msgstr "Das automatische Laden von Bildern ein-/ausschalten"
msgid "Unknown Crash"
msgstr "Unbekannter Absturz"
msgid "_IMG"
msgstr "_IMG"
msgid "_JS"
msgstr "_JS"
#, c-format
msgid "badwolf: Checking for userscripts matching %s\n"
msgstr "badwolf: Suche nach Userscripts mit %s \n"
#, c-format
msgid "badwolf: Error reading userscript: %s\n"
msgstr "badwolf: Fehler beim Leser von Userscript: %s\n"
#, c-format
msgid "badwolf: Failed to list userscripts: Out of Memory\n"
msgstr ""
"badwolf: Kann Userscripts nicht auflisten: Arbeitsspeicher nicht "
"ausreichend\n"
#, c-format
msgid "badwolf: Failed to list userscripts: Read Error\n"
msgstr "badwolf: Kann Userscripts nicht auslisten: Lesefehler\n"
#, c-format
msgid "badwolf: Notice: Found %zd userscripts\n"
msgstr "badwolf: Hinweis: %zd Userscripts gefunden\n"
#, c-format
msgid "badwolf: Notice: No userscripts found\n"
msgstr "badwolf: Hinweis: Keine Userscripts gefunden\n"
#, c-format
msgid "badwolf: Notice: Userscript loading: %d loaded, %d failed to load\n"
msgstr ""
"badwolf: Hinweis: Userscripts werden geladen: %d erfolgreich, %d "
"fehlerhalft\n"
#, c-format
msgid "badwolf: content-filter loaded, adding to content-manager…\n"
msgstr ""
#, c-format
msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n"
msgstr ""
"badwolf: kompilieren von content-filters.json fehlgeschlagen, err: [%d] %s\n"
#, fuzzy, c-format
msgid "badwolf: failed to load content-filter, err: [%d] %s\n"
msgstr ""
"badwolf: kompilieren von content-filters.json fehlgeschlagen, err: [%d] %s\n"
#, c-format
msgid "content-filters file set to: %s\n"
msgstr "Inhaltsfilter-Datei wurde gesetzt auf: %s\n"
msgid "search in current page"
msgstr "Die aktuelle Seite durchsuchen"
msgid "the web process crashed.\n"
msgstr "Der Webprozess ist abgestürzt.\n"
msgid "the web process exceeded the memory limit.\n"
msgstr "Der Webprozess hat das Arbeitsspeicherlimit überschritten.\n"
msgid "the web process terminated for an unknown reason.\n"
msgstr "Der Webprozess wurde aus unbekannten Gründen beendet.\n"
#, c-format
msgid "webkit-web-extension directory set to: %s\n"
msgstr ""
#. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext.
msgid "ø"
msgstr "ø"

607
badwolf/po/de_man.po Executable file
View file

@ -0,0 +1,607 @@
# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
#
msgid ""
msgstr ""
"Project-Id-Version: Badwolf 1.2.0+geb77866.develop\n"
"Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n"
"POT-Creation-Date: 2023-09-19 07:34+0200\n"
"PO-Revision-Date: 2023-07-31 13:36+0200\n"
"Last-Translator: <ben@ist-toll.xyz>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.3.2\n"
#. type: Dd
#: badwolf.1:4
#, no-wrap
msgid "2022-07-13"
msgstr "2022-07-13"
#. type: Dt
#: badwolf.1:5
#, no-wrap
msgid "BADWOLF 1"
msgstr "BADWOLF 1"
#. type: Sh
#: badwolf.1:7
#, no-wrap
msgid "NAME"
msgstr "NAME"
#. type: Plain text
#: badwolf.1:9
msgid "E<.Nm badwolf>"
msgstr "E<.Nm badwolf>"
#. type: Nd
#: badwolf.1:9
#, no-wrap
msgid "minimalist and privacy-oriented web browser based on WebKitGTK"
msgstr "minimalistischer und privatsphäre-orientierter Webbrowser basierend auf WebKitGTK"
#. type: Sh
#: badwolf.1:10
#, no-wrap
msgid "SYNOPSIS"
msgstr "ÜBERSICHT"
#. type: Plain text
#: badwolf.1:14
msgid "E<.Nm> E<.Op Ar webkit/gtk options> E<.Op Ar URLs or paths>"
msgstr "E<.Nm> E<.Op Ar WebKit-/GTK-Optionen> E<.Op Ar URLs oder Pfade>"
#. type: Sh
#: badwolf.1:14
#, no-wrap
msgid "DESCRIPTION"
msgstr "BESCHREIBUNG"
#. type: Plain text
#: badwolf.1:17
msgid ""
"E<.Nm> is a minimalist browser that cares about privacy, it is based on "
"WebKitGTK and thus also accepts WebKitGTK (and dependencies) flags and "
"environment variables, unfortunately there doesn't seems to be manpages for "
"theses."
msgstr ""
"E<.Nm> ist ein minimalistischer Webbrowser, der die Privatssphäre seiner "
"Nutzer respektiert. Er basiert auf WebKitGTK und akzeptiert daher alle "
"Optionen und Umgebungsvariablen, die WebKitGTK (und Abhängigkeiten) auch "
"akzeptieren, leider gibt es dafür keine Manpages."
#. type: Plain text
#: badwolf.1:21
msgid ""
"Runtime configuration specific to E<.Nm> will probably get added at a later "
"release."
msgstr ""
"Laufzeitspezifische Konfigurationsmöglichkeiten für E<.Nm> werden "
"wahrscheinlich in einer späteren Version hinzugefügt."
#. type: Sh
#: badwolf.1:21
#, no-wrap
msgid "KEYBINDINGS"
msgstr "TASTENKOMBINATIONEN"
#. type: Plain text
#: badwolf.1:25
msgid ""
"The following section lists the keybinding by their action, each item is "
"described by the widget the focus is on or E<.Aq any> if it works for the "
"whole window, followed by the keybind it grabs."
msgstr ""
"Der folgende Abschnitt listet die unterstützten Tastenkombinationen und ihre "
"Funktionen auf. Vor jeder Tastenkombination steht der greifende Kontext."
#. type: It
#: badwolf.1:26
#, no-wrap
msgid "webview Ctrl-Scroll"
msgstr "webview Ctrl-Scroll"
#. type: Plain text
#: badwolf.1:28
msgid "Zooms the webpage in/out."
msgstr "Zoomt die Website rein/raus."
#. type: It
#: badwolf.1:28
#, no-wrap
msgid "webview Ctrl-0"
msgstr "webview Ctrl-0"
#. type: Plain text
#: badwolf.1:30
msgid "Resets webpage zoom to 100%."
msgstr "Setzt den Zoom auf 100% zurück."
#. type: It
#: badwolf.1:30
#, no-wrap
msgid "webview Ctrl-MousePrimary, webview MouseMiddle"
msgstr "webview Ctrl-MousePrimary, webview MouseMiddle"
#. type: Plain text
#: badwolf.1:32
msgid ""
"Opens the selected link in a new tab. (Note: JS still overrides the event)"
msgstr ""
"Öffnet den hervorgehobenen Link in einem neuen Tab. (Hinweis: Dieses "
"Verhalten kann mit Javascript manipuliert werden)"
#. type: It
#: badwolf.1:32
#, no-wrap
msgid "any Ctrl-t"
msgstr "any Ctrl-t"
#. type: Plain text
#: badwolf.1:34
msgid "Creates a new tab (in a new session, similar as pressing the button)"
msgstr ""
"Eröffnet einen neuen Tab in einer neuen Sitzung (ähnlich wie der \"Neuer "
"Tab\"-Knopf)"
#. type: It
#: badwolf.1:34
#, no-wrap
msgid "browser Ctrl-F4, browser Alt-d"
msgstr "browser Ctrl-F4, browser Alt-d"
#. type: Plain text
#: badwolf.1:36
msgid "Closes the current tab"
msgstr "Schließt den aktuellen Tab"
#. type: It
#: badwolf.1:36
#, no-wrap
msgid "browser Ctrl-f"
msgstr "browser Ctrl-f"
#. type: Plain text
#: badwolf.1:38
msgid "Focuses on the search entry"
msgstr "Hebt das Suchfeld hervor"
#. type: It
#: badwolf.1:38
#, no-wrap
msgid "browser Ctrl-l"
msgstr "browser Ctrl-l"
#. type: Plain text
#: badwolf.1:40
msgid "Focuses on the location(URL) entry"
msgstr "Hebt die Addresszeile hervor"
#. type: It
#: badwolf.1:40
#, no-wrap
msgid "browser Ctrl-Shift-r / Ctrl-r, browser F5"
msgstr "browser Ctrl-Shift-r / Ctrl-r, browser F5"
#. type: Plain text
#: badwolf.1:42
msgid "Reloads the content in the current tab (with/without clearing cache)"
msgstr "Lädt den aktuellen Tab neu (jeweils mit und ohne den Cache zu leeren)"
#. type: It
#: badwolf.1:42
#, no-wrap
msgid "browser Escape"
msgstr "browser Escape"
#. type: Plain text
#: badwolf.1:44
msgid "Stops loading the content in the current tab"
msgstr "Bricht das Laden ab"
#. type: It
#: badwolf.1:44
#, no-wrap
msgid "browser F7"
msgstr "browser F7"
#. type: Plain text
#: badwolf.1:46
msgid "Toggles caret browsing."
msgstr "Aktiviert den Tastaturmodus (Navigation mit dem Textcursor)"
#. type: It
#: badwolf.1:46
#, no-wrap
msgid "browser F12"
msgstr "browser F12"
#. type: Plain text
#: badwolf.1:48
msgid "Opens the web inspector."
msgstr "Öffnet die Entwickleroptionen"
#. type: It
#: badwolf.1:48
#, no-wrap
msgid "browser Ctrl-[ / Ctrl-]"
msgstr "browser Ctrl-[ / Ctrl-]"
#. type: Plain text
#: badwolf.1:50
msgid "Go back/forward in current tab's history"
msgstr "Zur vorherigen/nächsten Seite im Suchverlauf gehen"
#. type: It
#: badwolf.1:50
#, no-wrap
msgid "browser Ctrl-p"
msgstr "browser Ctrl-p"
#. type: Plain text
#: badwolf.1:52
msgid "Print the current page. (spawns a dialog)"
msgstr "Druckt die aktuelle Seite aus. (Eröffnet Dialogfenster)"
#. type: It
#: badwolf.1:52
#, no-wrap
msgid "any Alt-Left / Alt-Right"
msgstr "any Alt-Left / Alt-Right"
#. type: Plain text
#: badwolf.1:54 badwolf.1:65
msgid "Go to the previous/next tab"
msgstr "Wechseln zum vorherigen/nächsten Tab"
#. type: It
#: badwolf.1:54
#, no-wrap
msgid "any F1"
msgstr "any F1"
#. type: Plain text
#: badwolf.1:56
msgid "Shows the about dialog"
msgstr "Zeigt Informationen über das Programm"
#. type: It
#: badwolf.1:56
#, no-wrap
msgid "any Alt-n"
msgstr "any Alt-n"
#. type: Plain text
#: badwolf.1:59
msgid ""
"Where n is any numeric-row key. Go to the n-th tab, 0 goes to the last one."
msgstr "n ist eine Zahl. Wechseln zum Tab n. 0 wechselt zum letzten Tab."
#. type: Ss
#: badwolf.1:60
#, no-wrap
msgid "DEFAULT ONES"
msgstr "STANDARDTASTENKOMBINATIONEN"
#. type: Plain text
#: badwolf.1:62
msgid "Here is a incomplete list of the default Webkit/GTK keybindings:"
msgstr ""
"Im Folgenden befindet sich eine unvollständige Liste mit standartmäßigen "
"Webkit-/GTK-Tastenkombinationen:"
#. type: It
#: badwolf.1:63
#, no-wrap
msgid "any Ctrl-PageUp / Ctrl-PageDown"
msgstr "any Ctrl-PageUp / Ctrl-PageDown"
#. type: It
#: badwolf.1:65
#, no-wrap
msgid "search Ctrl-g / Ctrl-Shift-g"
msgstr "search Ctrl-g / Ctrl-Shift-g"
#. type: Plain text
#: badwolf.1:67
msgid ""
"When the search box is focused it goes to the Next/Previous search term."
msgstr "Zum nächsten/vorherigen Suchtreffer gehen"
#. type: It
#: badwolf.1:67
#, no-wrap
msgid "search Escape"
msgstr "search Escape"
#. type: Plain text
#: badwolf.1:69
msgid "Cancels current search"
msgstr "Bricht die Suche ab"
#. type: It
#: badwolf.1:69
#, no-wrap
msgid "textarea Ctrl-;"
msgstr "textarea Ctrl-;"
#. type: Plain text
#: badwolf.1:71
msgid "Insert Emoji"
msgstr "Emoji einfügen😚"
#. type: Sh
#: badwolf.1:72
#, no-wrap
msgid "ENVIRONMENT"
msgstr "UMGEBUNGSVARIABLEN"
#. type: It
#: badwolf.1:74
#, no-wrap
msgid "Ev BADWOLF_L10N"
msgstr "Ev BADWOLF_L10N"
#. type: Plain text
#: badwolf.1:80
msgid ""
"A colon-separated list in the form lang_COUNTRY where lang is in ISO-639 and "
"COUNTRY in ISO-3166. For example E<.Ic BADWOLF_L10N=\"en_GB:fr_FR:"
"de_DE\">. When this variable isn't set, spelling isn't activated. A more "
"generic variable name is also intended to be used in the future."
msgstr ""
"Eine mit Doppelpunkten getrennte List im Format sprache_LAND wo die sprache "
"ISO-639 und das LAND ISO-3166 ist. Z.B.: E<.Ic BADWOLF_L10N=\"en_GB:fr_FR:"
"de_DE\">. Wenn diese Variable nicht gesetzt ist, gibt es keine "
"Rechtschreibprüfung. Der Variablenname könnte in der Zukunft durch einen "
"generischeren ersetzt werden."
#. type: Plain text
#: badwolf.1:85
msgid ""
"To get the list of supported dictionaries execute E<.Ic enchant-lsmod-2 -"
"list-dicts> or before enchant 2.0: E<.Ic enchant-lsmod -list-dicts>"
msgstr ""
"Um eine List mit installierten Sprächen zu bekommen, muss E<.Ic enchant-"
"lsmod-2 -list-dicts> ausgeführt werden. Bei Versionen vor enchant 2.0: E<.Ic "
"enchant-lsmod -list-dicts>"
#. type: Sh
#: badwolf.1:86
#, no-wrap
msgid "FILES"
msgstr "DATEIEN"
#. type: Plain text
#: badwolf.1:92
msgid ""
"The following paths are using E<.Xr sh 1> syntax to correctly support XDG "
"Base Directory Specification, you can use the E<.Xr echo 1> command to check "
"where it is on your system."
msgstr ""
"Die im Folgenden aufgelistetene Pfade benutzen E<.Xr sh 1>-Syntaxe, um der "
"XDG-Base-Directory-Specifation gerecht zu werden. Du kannst den Befehl E<.Xr "
"echo 1> benutzen, um zu gucken, wo das auf dem Computer ist."
#. type: It
#: badwolf.1:94
#, no-wrap
msgid "Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json"
msgstr "Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json"
#. type: Plain text
#: badwolf.1:97
msgid ""
"WebKit-specific content-filter file, this allows to block unwanted content "
"(ads, nagware, ...). For some introductory information about the format see:"
msgstr ""
"WebKit-spezifischer Inhaltsfilter-Datei, mit der unerwünschte Inhalte (z.B. "
"Werbung, Schadsoftware, ...) geblockt werden können. Für mehr Informationen, "
"siehe:"
#. type: Plain text
#: badwolf.1:102
msgid "For a converter using AblockPlus-style filters, try:"
msgstr ""
"Es gibt einen Übersetzer, der AdblockPlus-Filterlisten in Webkit-Blocklisten "
"übersetzen kann:"
#. type: Plain text
#: badwolf.1:105
msgid "For a ready-to-use file (that you should update periodically), try:"
msgstr ""
"Für eine fertige Datei (die regelmäßig aktualisiert werden sollte), siehe:"
#. type: It
#: badwolf.1:106
#, no-wrap
msgid "Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters"
msgstr "Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters"
#. type: Plain text
#: badwolf.1:109
msgid ""
"This is where the compiled filters are stored, the file(s) in it are "
"automatically generated and so shouldn't be edited. Documented here only "
"for sandboxing / access-control purposes."
msgstr ""
"Hier werden kompilierte Filter gespeichert. Diese Dateien werden automatisch "
"generiert und sollten deswegen nicht bearbeitet werden. Diese Datei wird "
"hier überhaupt nur dokumentiert, damit sie in Sandboxen/Zugriffskontrollen "
"eingearbeitet werden kann."
#. type: It
#: badwolf.1:109
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel"
#. type: Plain text
#: badwolf.1:114
msgid ""
"XBEL (XML Bookmark Exchange Language) file, known to be currently supported "
"by: E<.Xr elinks 1>, E<.Xr konqueror 1>, E<.Xr kbookmarkeditor 1>."
msgstr ""
"XBEL (XML Bookmark Exchange Language) Datei, wird momentan unterstützt von: "
"E<.Xr elinks 1>, E<.Xr konqueror 1>, E<.Xr kbookmarkeditor 1>."
#. type: Plain text
#: badwolf.1:116
msgid "You can do a symbolic link from their path, but you might prefer to use"
msgstr ""
"Du kannst einfach eine Verknüpfung zu deren Dateien erstellen, aber "
"vielleicht möchtest du lieber"
#. type: Plain text
#: badwolf.1:120
msgid ""
"which is natively supported by E<.Nm> to automatically merge multiple XBEL "
"files."
msgstr ""
"benutzen, welches von E<.Nm> systemeigen unterstützt wird und mehrer XBEL-"
"Dateien zusammenfügt."
#. type: Plain text
#: badwolf.1:122
msgid ""
"Also the bookmark entries aren't re-sorted, so you might want to put your "
"most frequently used ones at the top of the file."
msgstr ""
"Außerdem werden die Lesezeicheneinträge nicht neusortiert, deswegen ist es "
"eventuell gewünscht, die am häufigsten genutzen Einträge an den Anfang der "
"Datei zu schieben."
#. type: Plain text
#: badwolf.1:124
msgid "For more information about this format see:"
msgstr "Für weitere Informationen über dieses Format siehe:"
#. type: Plain text
#: badwolf.1:127
msgid "For an example XBEL file see:"
msgstr "Für eine Beispiel-XBEL-Datei siehe:"
#. type: It
#: badwolf.1:128
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/"
#. type: Plain text
#: badwolf.1:130
msgid "Directory containing the"
msgstr "Verzeichnis mit den"
#. type: Plain text
#: badwolf.1:133
msgid ""
"to be loaded into E<.Nm . Note: They aren't the JavaScript-based Web-"
"Extensions supported by Firefox or Chrome, but native code in shared objects "
"using the WebKitGTK API.>"
msgstr ""
"die in E<.Nm geladen werden sollen. Hinweis: Es handelt sich dabei nicht um "
"Javascript-basierte Erweitungen wie man sie von Firefox oder Chrome kennt, "
"sondern um systemeigenen Code aus Shared Objects der WebKitGTK API.>"
#. type: Plain text
#: badwolf.1:135
msgid "Examples of useful extensions may be found at:"
msgstr "Für Beispiele nützlicher Erweiterungen siehe:"
#. type: It
#: badwolf.1:136
#, no-wrap
msgid "Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css"
msgstr "Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css"
#. type: It
#: badwolf.1:137
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css"
#. type: Plain text
#: badwolf.1:142
msgid ""
"CSS files (respectively system and user-level) for styling E<.Nm> "
"interface. See"
msgstr ""
"CSS-Dateien (jeweils System und User-Ebene), um das Aussehen das Interfaces "
"anzupassen. Siehe"
#. type: Plain text
#: badwolf.1:144
msgid "for the properties being available."
msgstr "für die zur Verfügung stehen Eigenschaften."
#. type: Plain text
#: badwolf.1:150
msgid ""
"For testing your styles I would recommend using the E<.Ev "
"GTK_DEBUG=interactive> environment variable on launching E<.Nm> and going to "
"the CSS tab."
msgstr ""
"Für das Austesten eines Aussehens ist es zu empfehlen die Umgebungsvariable "
"E<.Ev GTK_DEBUG=interactive> biem Start zu setzen und dann in den CSS tab zu "
"gehen."
#. type: It
#: badwolf.1:150
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/"
#. type: Plain text
#: badwolf.1:156
msgid ""
"Directory containing JS userscripts (ending in E<.Ic .js>) ran at the start "
"of page loads, nesting down into iframes, useful to override website "
"behaviors or add missing features to websites."
msgstr ""
"Verzeichnis, welches die JavaScript-Userscripts enthält (Dateiendung E<.Ic ."
"js>), die am Start des Ladens jeder Seite ausgeführt werden und sich auch in "
"iframes verschachteln. Nützlich um Website-Verhalten zu manipulieren oder "
"fehlende Funktionen zu ergänzen."
#. type: Plain text
#: badwolf.1:159
msgid ""
"Please note that for now unlike GreaseMonkey-style userscripts, they are "
"always run, regardless of the hostname / URLs."
msgstr ""
"Es ist anzumerken, dass — anders als bei GreaseMonkey-artigen Userscripts — "
"die E<.Nm>-Userscripts immer ausgeführt werden, unabhängig von Hostname/URLs."
#. type: Sh
#: badwolf.1:160
#, no-wrap
msgid "AUTHORS"
msgstr "AUTOREN."
#. type: Plain text
#: badwolf.1:162
msgid "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>"
msgstr ""
"E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>, "
"Übersetzung von Ben Kaps"
#. type: Sh
#: badwolf.1:162
#, no-wrap
msgid "BUGS"
msgstr "BUGS"
#. type: Plain text
#: badwolf.1:164
msgid "You can submit contributions or tickets to"
msgstr "Verbesserungen oder Fehlerberichte können unter "
#. type: Plain text
#: badwolf.1:167
msgid "with E<.Xr git-send-email 1> for patches."
msgstr "mit E<.Xr git-send-email 1> für Patches eingereicht werden."

221
badwolf/po/fr.po Executable file
View file

@ -0,0 +1,221 @@
# BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
# SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
msgid ""
msgstr ""
"Project-Id-Version: Badwolf 0.3.0+gd88f2e7\n"
"Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n"
"POT-Creation-Date: 2023-07-16 04:25+0200\n"
"PO-Revision-Date: 2021-04-10 18:43+0200\n"
"Last-Translator: Haelwenn (lanodan) Monnier <contact@hacktivis.me>\n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#, c-format
msgid "%02i:%02i:%02i Download cancelled"
msgstr "%02i:%02i:%02i Téléchargement annulé"
#, c-format
msgid "%02i:%02i:%02i Download error"
msgstr "%02i:%02i:%02i Erreur du téléchargement"
#, c-format
msgid "%02i:%02i:%02i Download finished"
msgstr "%02i:%02i:%02i Téléchargement finit"
#, c-format
msgid "%02i:%02i:%02i Downloading…"
msgstr "%02i:%02i:%02i Téléchargement en cours…"
msgid "Badwolf Downloads"
msgstr "Téléchargements Badwolf"
msgid "Bookmarks: Done.\n"
msgstr "Marque-Pages: Terminé.\n"
#, c-format
msgid "Bookmarks: Found %d bookmarks.\n"
msgstr "Marque-Pages: %d marque-pages trouvés.\n"
#, c-format
msgid "Bookmarks: No loadable file found at %s\n"
msgstr "Marques-Pages: Aucun fichier chargeable trouvé à %s\n"
#, c-format
msgid "Bookmarks: loading at %s\n"
msgstr "Marques-Pages: chargement à %s\n"
msgid "Bookmarks: unable to create new XPath context\n"
msgstr "Marques-Pages: Échec à la création du contexte XPath\n"
#, c-format
msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n"
msgstr "Marques-Pages: Échec à l'évaluation de l'expression XPath « %s »\n"
#, c-format
msgid "Bookmarks: unable to parse file \"%s\"\n"
msgstr "Marques-Pages: Ëchec au parsage du fichier « %s »\n"
#, c-format
msgid "Buildtime WebKit version: %d.%d.%d\n"
msgstr "Version WebKit à la compilation: %d.%d.%d\n"
msgid "Continue"
msgstr "Continuer"
msgid ""
"Couldn't verify the TLS certificate to ensure a better security of the "
"connection. You might want to verify your machine and network.\n"
"\n"
msgstr ""
"Impossibilité de vérifier le certificat TLS pour assurer une meilleure "
"sécurité de la connection. Pensez potentiellement à vérifier votre machine "
"et son réseau.\n"
"\n"
msgid "Crashed"
msgstr "Crash"
msgid "Download starting…"
msgstr "Démarrage du téléchargement"
msgid "Empty Title"
msgstr "Titre Vide"
msgid "Error: Some unknown error occurred validating the certificate.\n"
msgstr ""
"Erreur : Une erreur inconnue est apparue pendant la validation du "
"certificat.\n"
msgid "Error: The X509 Certificate Authority is unknown.\n"
msgstr "Erreur : L'autorité de certification (CA X509) est inconnue.\n"
msgid "Error: The certificate has been revoked.\n"
msgstr "Erreur : Le certificat à été révoqué.\n"
msgid "Error: The certificate has expired. Check your system's clock.\n"
msgstr "Erreur : Le certificat a expiré.\n"
msgid "Error: The certificate is considered to be insecure.\n"
msgstr "Erreur : Le certificat est considéré comme non-sécurisé.\n"
msgid "Error: The certificate isn't valid yet. Check your system's clock.\n"
msgstr "Erreur : Le certificat n'est pas encore valide.\n"
msgid "Error: The given identity doesn't match the expected one.\n"
msgstr "Erreur : L'identité ne correspond pas à celle attendue.\n"
#, c-format
msgid ""
"Minimalist and privacy-oriented web browser based on WebKitGTK\n"
"Runtime WebKit version: %d.%d.%d"
msgstr ""
"Navigateur WebKitGTK+ minimaliste et orienté vie privée\n"
"Version WebKit au lancement: %d.%d.%d"
msgid "New tab"
msgstr "Nouvel onglet"
msgid "Open new tab"
msgstr "Ouvrir un nouvel onglet"
msgid "Out of Memory"
msgstr "Manque de Mémoire"
#, c-format
msgid "Running Badwolf version: %s\n"
msgstr "Version de Badwolf: %s\n"
#, c-format
msgid "Runtime WebKit version: %d.%d.%d\n"
msgstr "Version WebKit au lancement: %d.%d.%d\n"
#, c-format
msgid "TLS Error for %s."
msgstr "Erreur TLS pour %s."
msgid "Temporarily Add Exception"
msgstr "Ajouter Temporairement une Exception"
msgid "Toggle javascript"
msgstr "(Dés)activer javascript"
msgid "Toggle loading images automatically"
msgstr "(Dés)activer le chargement automatique des images"
msgid "Unknown Crash"
msgstr "Crash inconnu"
msgid "_IMG"
msgstr "_IMG"
msgid "_JS"
msgstr "_JS"
#, c-format
msgid "badwolf: Checking for userscripts matching %s\n"
msgstr "badwolf: Recherche de userscripts correspondant à %s\n"
#, c-format
msgid "badwolf: Error reading userscript: %s\n"
msgstr "badwolf: Erreur de lecture d'usercript: %s\n"
#, c-format
msgid "badwolf: Failed to list userscripts: Out of Memory\n"
msgstr "badwolf: Échec de listage des userscripts : Manque de mémoire\n"
#, c-format
msgid "badwolf: Failed to list userscripts: Read Error\n"
msgstr "badwolf: Échec de listage des userscripts : Erreur de lecture\n"
#, c-format
msgid "badwolf: Notice: Found %zd userscripts\n"
msgstr "badwolf: Notice: %zd userscripts trouvés\n"
#, c-format
msgid "badwolf: Notice: No userscripts found\n"
msgstr "badwolf: Notice: Aucun userscripts trouvés\n"
#, c-format
msgid "badwolf: Notice: Userscript loading: %d loaded, %d failed to load\n"
msgstr "badwolf: Notice: Chargement des userscripts: %d chargés, %d en erreur\n"
#, c-format
msgid "badwolf: content-filter loaded, adding to content-manager…\n"
msgstr "badwolf: content-filter chargé, ajout à content-manager…\n"
#, c-format
msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n"
msgstr "badwolf: échec de compilation de content-filters.json, err: [%d] %s\n"
#, c-format
msgid "badwolf: failed to load content-filter, err: [%d] %s\n"
msgstr "badwolf: échec de chargement de content-filter, err: [%d] %s\n"
#, c-format
msgid "content-filters file set to: %s\n"
msgstr "Fichier content-filters configuré à: %s\n"
msgid "search in current page"
msgstr "recherche dans la page courante"
msgid "the web process crashed.\n"
msgstr "le processus web a cessé de fonctionner.\n"
msgid "the web process exceeded the memory limit.\n"
msgstr "le processus web a dépassé la limitation de mémoire.\n"
msgid "the web process terminated for an unknown reason.\n"
msgstr "le processus web sest interrompu pour une raison inconnue.\n"
#, c-format
msgid "webkit-web-extension directory set to: %s\n"
msgstr "Répertoire webkit-web-extension configuré à %s\n"
#. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext.
msgid "ø"
msgstr ""

606
badwolf/po/fr_man.po Executable file
View file

@ -0,0 +1,606 @@
# SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n"
"POT-Creation-Date: 2023-03-17 08:18+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Dd
#: badwolf.1:4
#, no-wrap
msgid "2022-07-13"
msgstr "2022-07-13"
#. type: Dt
#: badwolf.1:5
#, no-wrap
msgid "BADWOLF 1"
msgstr "BADWOLF 1"
#. type: Sh
#: badwolf.1:7
#, no-wrap
msgid "NAME"
msgstr "NAME"
#. type: Plain text
#: badwolf.1:9
msgid "E<.Nm badwolf>"
msgstr "E<.Nm badwolf>"
#. type: Nd
#: badwolf.1:9
#, no-wrap
msgid "minimalist and privacy-oriented web browser based on WebKitGTK"
msgstr "navigateur minimaliste et orienté vie-privée basé sur WebKitGTK"
#. type: Sh
#: badwolf.1:10
#, no-wrap
msgid "SYNOPSIS"
msgstr "SYNOPSIS"
#. type: Plain text
#: badwolf.1:14
msgid "E<.Nm> E<.Op Ar webkit/gtk options> E<.Op Ar URLs or paths>"
msgstr "E<.Nm> E<.Op Ar options webkit/gtk> E<.Op Ar URLs or chemins>"
#. type: Sh
#: badwolf.1:14
#, no-wrap
msgid "DESCRIPTION"
msgstr "DESCRIPTION"
#. type: Plain text
#: badwolf.1:17
msgid ""
"E<.Nm> is a minimalist browser that cares about privacy, it is based on "
"WebKitGTK and thus also accepts WebKitGTK (and dependencies) flags and "
"environment variables, unfortunately there doesn't seems to be manpages for "
"theses."
msgstr ""
"E<.Nm> est un navigateur minimaliste qui prend soin de la vie privée, c'est "
"basé WebKitGTK et accept donc les options et variables d'environements de "
"WebKitGTK et ses dépendances, malheuresement il ne semble pas avoir de pages "
"de man pour celles-ci."
#. type: Plain text
#: badwolf.1:21
msgid ""
"Runtime configuration specific to E<.Nm> will probably get added at a later "
"release."
msgstr ""
"Une configuration dynamique spécifique à E<.Nm> sera sans doute rajoutée "
"dans une version suivante."
#. type: Sh
#: badwolf.1:21
#, no-wrap
msgid "KEYBINDINGS"
msgstr "RACCOURCIS"
#. type: Plain text
#: badwolf.1:25
msgid ""
"The following section lists the keybinding by their action, each item is "
"described by the widget the focus is on or E<.Aq any> if it works for the "
"whole window, followed by the keybind it grabs."
msgstr ""
"Cette section liste les raccourcis et leurs actions, chaque point est décris "
"avec le widget actif ou avec E<.Aq tout> quand il fonctionne sur la fenêtre "
"entière, suivit par le raccourcis."
#. type: It
#: badwolf.1:26
#, no-wrap
msgid "webview Ctrl-Scroll"
msgstr "vueweb Ctrl-Défilement"
#. type: Plain text
#: badwolf.1:28
msgid "Zooms the webpage in/out."
msgstr "(Dé)-Grossir le zoom de la page."
#. type: It
#: badwolf.1:28
#, no-wrap
msgid "webview Ctrl-0"
msgstr "vueweb Ctrl-0"
#. type: Plain text
#: badwolf.1:30
msgid "Resets webpage zoom to 100%."
msgstr "Remettre le zoom de la page à 100%."
#. type: It
#: badwolf.1:30
#, no-wrap
msgid "webview Ctrl-MousePrimary, webview MouseMiddle"
msgstr "vueweb Ctrl-SourisPremier, vueweb SourisMilieu"
#. type: Plain text
#: badwolf.1:32
msgid ""
"Opens the selected link in a new tab. (Note: JS still overrides the event)"
msgstr ""
"Ouvrir le lien sélectionné dans un nouvel onglet. (Note: JS modifie quand-"
"même l'action)"
#. type: It
#: badwolf.1:32
#, no-wrap
msgid "any Ctrl-t"
msgstr "tout Ctrl-t"
#. type: Plain text
#: badwolf.1:34
msgid "Creates a new tab (in a new session, similar as pressing the button)"
msgstr ""
"Créer un nouvel onglet (dans une nouvelle session, comme un apuis sur le "
"bouton dédié)"
#. type: It
#: badwolf.1:34
#, no-wrap
msgid "browser Ctrl-F4, browser Alt-d"
msgstr "navigateur Ctrl-F4, navigateur Alt-d"
#. type: Plain text
#: badwolf.1:36
msgid "Closes the current tab"
msgstr "Fermer l'onglet courant."
#. type: It
#: badwolf.1:36
#, no-wrap
msgid "browser Ctrl-f"
msgstr "navigateur Ctrl-f"
#. type: Plain text
#: badwolf.1:38
msgid "Focuses on the search entry"
msgstr "Aller dans le champ de recherche."
#. type: It
#: badwolf.1:38
#, no-wrap
msgid "browser Ctrl-l"
msgstr "navigateur Ctrl-l"
#. type: Plain text
#: badwolf.1:40
msgid "Focuses on the location(URL) entry"
msgstr "Aller dans la barre d'URL."
#. type: It
#: badwolf.1:40
#, no-wrap
msgid "browser Ctrl-Shift-r / Ctrl-r, browser F5"
msgstr "navigateur Ctrl-Maj-r / Ctrl-r, navigateur F5"
#. type: Plain text
#: badwolf.1:42
msgid "Reloads the content in the current tab (with/without clearing cache)"
msgstr ""
"Recharger le contenu dans l'onglet courant (avec/sans nettoyer le cache)."
#. type: It
#: badwolf.1:42
#, no-wrap
msgid "browser Escape"
msgstr "navigateur Échap"
#. type: Plain text
#: badwolf.1:44
msgid "Stops loading the content in the current tab"
msgstr "Arrêter le chargement dans l'onglet courant."
#. type: It
#: badwolf.1:44
#, no-wrap
msgid "browser F7"
msgstr "navigateur F7"
#. type: Plain text
#: badwolf.1:46
msgid "Toggles caret browsing."
msgstr "(Dé)-Activer la navigation par curseur."
#. type: It
#: badwolf.1:46
#, no-wrap
msgid "browser F12"
msgstr "navigateur F12"
#. type: Plain text
#: badwolf.1:48
msgid "Opens the web inspector."
msgstr "Ouvrir les outils de dévelopement."
#. type: It
#: badwolf.1:48
#, no-wrap
msgid "browser Ctrl-[ / Ctrl-]"
msgstr "navigateur Ctrl-[ / Ctrl-]"
#. type: Plain text
#: badwolf.1:50
msgid "Go back/forward in current tab's history"
msgstr "Naviguer dans l'historique courrant précédent/suivant."
#. type: It
#: badwolf.1:50
#, no-wrap
msgid "browser Ctrl-p"
msgstr "navigateur Ctrl-p"
#. type: Plain text
#: badwolf.1:52
msgid "Print the current page. (spawns a dialog)"
msgstr "Imprimer la page courante. (ouvre une nouvelle fenêtre)"
#. type: It
#: badwolf.1:52
#, no-wrap
msgid "any Alt-Left / Alt-Right"
msgstr "tout Alt-Gauche / Alt-Droite"
#. type: Plain text
#: badwolf.1:54 badwolf.1:65
msgid "Go to the previous/next tab"
msgstr "Aller à l'onglet précédent/suivant."
#. type: It
#: badwolf.1:54
#, no-wrap
msgid "any F1"
msgstr "tout F1"
#. type: Plain text
#: badwolf.1:56
msgid "Shows the about dialog"
msgstr "Montrer la fenêtre d'À Propos."
#. type: It
#: badwolf.1:56
#, no-wrap
msgid "any Alt-n"
msgstr "tout Alt-n"
#. type: Plain text
#: badwolf.1:59
msgid ""
"Where n is any numeric-row key. Go to the n-th tab, 0 goes to the last one."
msgstr ""
"Où n est n'importe quelle touche de la barre numérique.\n"
"Aller à l'onglet n, 0 va au dernier."
#. type: Ss
#: badwolf.1:60
#, no-wrap
msgid "DEFAULT ONES"
msgstr "PAR DÉFAULTS"
#. type: Plain text
#: badwolf.1:62
msgid "Here is a incomplete list of the default Webkit/GTK keybindings:"
msgstr ""
"Ceci est une liste incomplète des raccourcis par défaults dans WebKit/GTK:"
#. type: It
#: badwolf.1:63
#, no-wrap
msgid "any Ctrl-PageUp / Ctrl-PageDown"
msgstr "tout Ctrl-PageUp / Ctrl-PageDown"
#. type: It
#: badwolf.1:65
#, no-wrap
msgid "search Ctrl-g / Ctrl-Shift-g"
msgstr "recherche Ctrl-g / Ctrl-Maj-g"
#. type: Plain text
#: badwolf.1:67
msgid ""
"When the search box is focused it goes to the Next/Previous search term."
msgstr ""
"Quand le champ de recherche est actif, aller au résultat précédent/suivant."
#. type: It
#: badwolf.1:67
#, no-wrap
msgid "search Escape"
msgstr "recherche Échap"
#. type: Plain text
#: badwolf.1:69
msgid "Cancels current search"
msgstr "Annule la recherche actuelle."
#. type: It
#: badwolf.1:69
#, no-wrap
msgid "textarea Ctrl-;"
msgstr "champ-texte Ctrl-;"
#. type: Plain text
#: badwolf.1:71
msgid "Insert Emoji"
msgstr "Insérer un Émoji"
#. type: Sh
#: badwolf.1:72
#, no-wrap
msgid "ENVIRONMENT"
msgstr "ENVIRONMENT"
#. type: It
#: badwolf.1:74
#, no-wrap
msgid "Ev BADWOLF_L10N"
msgstr "Ev BADWOLF_L10N"
#. type: Plain text
#: badwolf.1:80
msgid ""
"A colon-separated list in the form lang_COUNTRY where lang is in ISO-639 and "
"COUNTRY in ISO-3166. For example E<.Ic BADWOLF_L10N=\"en_GB:fr_FR:"
"de_DE\">. When this variable isn't set, spelling isn't activated. A more "
"generic variable name is also intended to be used in the future."
msgstr ""
"Une liste séparé par des deux-points dans le format langue_PAYS où la langue "
"est en ISO-639 et le PAYS en ISO-3166.\n"
"Par example E<.Ic BADWOLF_L10N=\"en_GB:fr_FR:de_DE\">.\n"
"Quand cette variable n'est pas configuré, la correction orthographique est "
"désactivée.\n"
"Un nom plus générique est voulu pour le futur."
#. type: Plain text
#: badwolf.1:85
msgid ""
"To get the list of supported dictionaries execute E<.Ic enchant-lsmod-2 -"
"list-dicts> or before enchant 2.0: E<.Ic enchant-lsmod -list-dicts>"
msgstr ""
"Pour avoir la liste des dictionaires installés, executez: E<.Ic enchant-"
"lsmod-2 -list-dicts> ou avant enchant 2.0: E<.Ic enchant-lsmod -list-dicts>"
#. type: Sh
#: badwolf.1:86
#, no-wrap
msgid "FILES"
msgstr "FICHIERS"
#. type: Plain text
#: badwolf.1:92
msgid ""
"The following paths are using E<.Xr sh 1> syntax to correctly support XDG "
"Base Directory Specification, you can use the E<.Xr echo 1> command to check "
"where it is on your system."
msgstr ""
"Les chemins suivants utilisent la syntaxe de E<.Xr sh 1> pour correctement "
"supporter la XDG Base Directory Specification, vous pouver utiliser la "
"commande E<.Xr echo 1> pour vérifier où cela se trouve sur votre système."
#. type: It
#: badwolf.1:94
#, no-wrap
msgid "Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json"
msgstr "Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json"
#. type: Plain text
#: badwolf.1:97
msgid ""
"WebKit-specific content-filter file, this allows to block unwanted content "
"(ads, nagware, ...). For some introductory information about the format see:"
msgstr ""
"Fichier content-filter spécifique à WebKit, cela permet de blocker le "
"contenu indésirable (pubs, nagware, …).\n"
"Pour une introduction au format, voir (en anglais):"
#. type: Plain text
#: badwolf.1:102
msgid "For a converter using AblockPlus-style filters, try:"
msgstr "Pour un convertiseur de filtres compatibles AdBlockPlus, essayez:"
#. type: Plain text
#: badwolf.1:105
msgid "For a ready-to-use file (that you should update periodically), try:"
msgstr ""
"Pour un fichier prêt à l'usage (que vous devrez mettre à jour "
"périodiquement), essayez:"
#. type: It
#: badwolf.1:106
#, no-wrap
msgid "Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters"
msgstr "Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters"
#. type: Plain text
#: badwolf.1:109
msgid ""
"This is where the compiled filters are stored, the file(s) in it are "
"automatically generated and so shouldn't be edited. Documented here only "
"for sandboxing / access-control purposes."
msgstr ""
"Stockage des filtres compilés, les fichiers présents sont automatiquement "
"générés et ne doivent pas être édité.\n"
"Documenté ici seulement pour les isolations ou la gestion des contrôle "
"d'accès."
#. type: It
#: badwolf.1:109
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel"
#. type: Plain text
#: badwolf.1:114
msgid ""
"XBEL (XML Bookmark Exchange Language) file, known to be currently supported "
"by: E<.Xr elinks 1>, E<.Xr konqueror 1>, E<.Xr kbookmarkeditor 1>."
msgstr ""
"Fichier XBEL (XML Bookmark Exchange Language; Language XML d'Échange de "
"Marques-Pages), connu pour être supporté par: E<.Xr elinks 1>, E<.Xr "
"konqueror 1>, E<.Xr kbookmarkeditor 1>."
#. type: Plain text
#: badwolf.1:116
msgid "You can do a symbolic link from their path, but you might prefer to use"
msgstr ""
"Vous pouvez faire un lien symbolique depuis leur fichiers, mais vous pouvez "
"aussi utiliser"
#. type: Plain text
#: badwolf.1:120
msgid ""
"which is natively supported by E<.Nm> to automatically merge multiple XBEL "
"files."
msgstr ""
"qui est supporté nativement par E<.Nm> pour automatiquement fusionner "
"plusieurs fichiers XBEL."
#. type: Plain text
#: badwolf.1:122
msgid ""
"Also the bookmark entries aren't re-sorted, so you might want to put your "
"most frequently used ones at the top of the file."
msgstr ""
"Aussi les marques-pages ne sont pas re-triés, vous pouvez donc mettre les "
"plus fréquement utilisés au début du fichier."
#. type: Plain text
#: badwolf.1:124
msgid "For more information about this format see:"
msgstr "Pour plus d'information à propos du format, voir (en anglais):"
#. type: Plain text
#: badwolf.1:127
msgid "For an example XBEL file see:"
msgstr "Pour un example de fichier XBEL voir:"
#. type: It
#: badwolf.1:128
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/"
#. type: Plain text
#: badwolf.1:130
msgid "Directory containing the"
msgstr "Répertoire contenant les"
#. type: Plain text
#: badwolf.1:133
msgid ""
"to be loaded into E<.Nm . Note: They aren't the JavaScript-based Web-"
"Extensions supported by Firefox or Chrome, but native code in shared objects "
"using the WebKitGTK API.>"
msgstr ""
"pour être chargés dans E<.Nm . Note : Ce ne sont pas les Web-Extensions basé "
"sur JavaScript et supporté par Firefox ou Chrome, mais du code natif dans "
"des shared objects qui utilisent l'API WebKitGTK.>"
#. type: Plain text
#: badwolf.1:135
msgid "Examples of useful extensions may be found at:"
msgstr "Des examples de quelques extensions utiles peuvent être trouvés sur:"
#. type: It
#: badwolf.1:136
#, no-wrap
msgid "Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css"
msgstr "Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css"
#. type: It
#: badwolf.1:137
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css"
#. type: Plain text
#: badwolf.1:142
msgid ""
"CSS files (respectively system and user-level) for styling E<.Nm> "
"interface. See"
msgstr ""
"Fichiers CSS (respectivement système et utilisateur) pour changer le style "
"de l'interface de E<.Nm .>\n"
"Voir"
#. type: Plain text
#: badwolf.1:144
msgid "for the properties being available."
msgstr "pour la liste des propriétés disponibles."
#. type: Plain text
#: badwolf.1:150
msgid ""
"For testing your styles I would recommend using the E<.Ev "
"GTK_DEBUG=interactive> environment variable on launching E<.Nm> and going to "
"the CSS tab."
msgstr ""
"Pour tester les styles je recommende d'utiliser la variable d'environemnt E<."
"Ev GTK_DEBUG=interactive> et d'aller à l'onglet CSS."
#. type: It
#: badwolf.1:150
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/"
msgstr "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/"
#. type: Plain text
#: badwolf.1:156
msgid ""
"Directory containing JS userscripts (ending in E<.Ic .js>) ran at the start "
"of page loads, nesting down into iframes, useful to override website "
"behaviors or add missing features to websites."
msgstr ""
"Dossier contenant les userscripts JavaScript (finisant en E<.Ic .js>) lancés "
"à chaque chargement de page, descendant dans les iframes, utile pour changer "
"le comportement ou rajouter des fonctionalitées aux sites web."
#. type: Plain text
#: badwolf.1:159
msgid ""
"Please note that for now unlike GreaseMonkey-style userscripts, they are "
"always run, regardless of the hostname / URLs."
msgstr ""
"Veuillez noter que pour l'instant, contrairement aux userscripts à la "
"GreaseMonkey, ils sont toujours exécutés, sans filtrage de domaines / URLs."
#. type: Sh
#: badwolf.1:160
#, no-wrap
msgid "AUTHORS"
msgstr "AUTHORS"
#. type: Plain text
#: badwolf.1:162
msgid "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>"
msgstr "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>"
#. type: Sh
#: badwolf.1:162
#, no-wrap
msgid "BUGS"
msgstr "BUGS"
#. type: Plain text
#: badwolf.1:164
msgid "You can submit contributions or tickets to"
msgstr "Vous pouvez soumettre des contributions ou des tickets à"
#. type: Plain text
#: badwolf.1:167
msgid "with E<.Xr git-send-email 1> for patches."
msgstr "avec E<.Xr git-send-email 1> pour les modifications."

545
badwolf/po/manpage.pot Executable file
View file

@ -0,0 +1,545 @@
# SPDX-FileCopyrightText: 2019-2022 Badwolf Authors <https://hacktivis.me/projects/badwolf>
# SPDX-License-Identifier: BSD-3-Clause
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Badwolf 1.2.0+geb77866.develop\n"
"Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n"
"POT-Creation-Date: 2023-03-17 08:18+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Dd
#: badwolf.1:4
#, no-wrap
msgid "2022-07-13"
msgstr ""
#. type: Dt
#: badwolf.1:5
#, no-wrap
msgid "BADWOLF 1"
msgstr ""
#. type: Sh
#: badwolf.1:7
#, no-wrap
msgid "NAME"
msgstr ""
#. type: Plain text
#: badwolf.1:9
msgid "E<.Nm badwolf>"
msgstr ""
#. type: Nd
#: badwolf.1:9
#, no-wrap
msgid "minimalist and privacy-oriented web browser based on WebKitGTK"
msgstr ""
#. type: Sh
#: badwolf.1:10
#, no-wrap
msgid "SYNOPSIS"
msgstr ""
#. type: Plain text
#: badwolf.1:14
msgid "E<.Nm> E<.Op Ar webkit/gtk options> E<.Op Ar URLs or paths>"
msgstr ""
#. type: Sh
#: badwolf.1:14
#, no-wrap
msgid "DESCRIPTION"
msgstr ""
#. type: Plain text
#: badwolf.1:17
msgid ""
"E<.Nm> is a minimalist browser that cares about privacy, it is based on "
"WebKitGTK and thus also accepts WebKitGTK (and dependencies) flags and "
"environment variables, unfortunately there doesn't seems to be manpages for "
"theses."
msgstr ""
#. type: Plain text
#: badwolf.1:21
msgid ""
"Runtime configuration specific to E<.Nm> will probably get added at a later "
"release."
msgstr ""
#. type: Sh
#: badwolf.1:21
#, no-wrap
msgid "KEYBINDINGS"
msgstr ""
#. type: Plain text
#: badwolf.1:25
msgid ""
"The following section lists the keybinding by their action, each item is "
"described by the widget the focus is on or E<.Aq any> if it works for the "
"whole window, followed by the keybind it grabs."
msgstr ""
#. type: It
#: badwolf.1:26
#, no-wrap
msgid "webview Ctrl-Scroll"
msgstr ""
#. type: Plain text
#: badwolf.1:28
msgid "Zooms the webpage in/out."
msgstr ""
#. type: It
#: badwolf.1:28
#, no-wrap
msgid "webview Ctrl-0"
msgstr ""
#. type: Plain text
#: badwolf.1:30
msgid "Resets webpage zoom to 100%."
msgstr ""
#. type: It
#: badwolf.1:30
#, no-wrap
msgid "webview Ctrl-MousePrimary, webview MouseMiddle"
msgstr ""
#. type: Plain text
#: badwolf.1:32
msgid "Opens the selected link in a new tab. (Note: JS still overrides the event)"
msgstr ""
#. type: It
#: badwolf.1:32
#, no-wrap
msgid "any Ctrl-t"
msgstr ""
#. type: Plain text
#: badwolf.1:34
msgid "Creates a new tab (in a new session, similar as pressing the button)"
msgstr ""
#. type: It
#: badwolf.1:34
#, no-wrap
msgid "browser Ctrl-F4, browser Alt-d"
msgstr ""
#. type: Plain text
#: badwolf.1:36
msgid "Closes the current tab"
msgstr ""
#. type: It
#: badwolf.1:36
#, no-wrap
msgid "browser Ctrl-f"
msgstr ""
#. type: Plain text
#: badwolf.1:38
msgid "Focuses on the search entry"
msgstr ""
#. type: It
#: badwolf.1:38
#, no-wrap
msgid "browser Ctrl-l"
msgstr ""
#. type: Plain text
#: badwolf.1:40
msgid "Focuses on the location(URL) entry"
msgstr ""
#. type: It
#: badwolf.1:40
#, no-wrap
msgid "browser Ctrl-Shift-r / Ctrl-r, browser F5"
msgstr ""
#. type: Plain text
#: badwolf.1:42
msgid "Reloads the content in the current tab (with/without clearing cache)"
msgstr ""
#. type: It
#: badwolf.1:42
#, no-wrap
msgid "browser Escape"
msgstr ""
#. type: Plain text
#: badwolf.1:44
msgid "Stops loading the content in the current tab"
msgstr ""
#. type: It
#: badwolf.1:44
#, no-wrap
msgid "browser F7"
msgstr ""
#. type: Plain text
#: badwolf.1:46
msgid "Toggles caret browsing."
msgstr ""
#. type: It
#: badwolf.1:46
#, no-wrap
msgid "browser F12"
msgstr ""
#. type: Plain text
#: badwolf.1:48
msgid "Opens the web inspector."
msgstr ""
#. type: It
#: badwolf.1:48
#, no-wrap
msgid "browser Ctrl-[ / Ctrl-]"
msgstr ""
#. type: Plain text
#: badwolf.1:50
msgid "Go back/forward in current tab's history"
msgstr ""
#. type: It
#: badwolf.1:50
#, no-wrap
msgid "browser Ctrl-p"
msgstr ""
#. type: Plain text
#: badwolf.1:52
msgid "Print the current page. (spawns a dialog)"
msgstr ""
#. type: It
#: badwolf.1:52
#, no-wrap
msgid "any Alt-Left / Alt-Right"
msgstr ""
#. type: Plain text
#: badwolf.1:54 badwolf.1:65
msgid "Go to the previous/next tab"
msgstr ""
#. type: It
#: badwolf.1:54
#, no-wrap
msgid "any F1"
msgstr ""
#. type: Plain text
#: badwolf.1:56
msgid "Shows the about dialog"
msgstr ""
#. type: It
#: badwolf.1:56
#, no-wrap
msgid "any Alt-n"
msgstr ""
#. type: Plain text
#: badwolf.1:59
msgid "Where n is any numeric-row key. Go to the n-th tab, 0 goes to the last one."
msgstr ""
#. type: Ss
#: badwolf.1:60
#, no-wrap
msgid "DEFAULT ONES"
msgstr ""
#. type: Plain text
#: badwolf.1:62
msgid "Here is a incomplete list of the default Webkit/GTK keybindings:"
msgstr ""
#. type: It
#: badwolf.1:63
#, no-wrap
msgid "any Ctrl-PageUp / Ctrl-PageDown"
msgstr ""
#. type: It
#: badwolf.1:65
#, no-wrap
msgid "search Ctrl-g / Ctrl-Shift-g"
msgstr ""
#. type: Plain text
#: badwolf.1:67
msgid "When the search box is focused it goes to the Next/Previous search term."
msgstr ""
#. type: It
#: badwolf.1:67
#, no-wrap
msgid "search Escape"
msgstr ""
#. type: Plain text
#: badwolf.1:69
msgid "Cancels current search"
msgstr ""
#. type: It
#: badwolf.1:69
#, no-wrap
msgid "textarea Ctrl-;"
msgstr ""
#. type: Plain text
#: badwolf.1:71
msgid "Insert Emoji"
msgstr ""
#. type: Sh
#: badwolf.1:72
#, no-wrap
msgid "ENVIRONMENT"
msgstr ""
#. type: It
#: badwolf.1:74
#, no-wrap
msgid "Ev BADWOLF_L10N"
msgstr ""
#. type: Plain text
#: badwolf.1:80
msgid ""
"A colon-separated list in the form lang_COUNTRY where lang is in ISO-639 and "
"COUNTRY in ISO-3166. For example E<.Ic "
"BADWOLF_L10N=\"en_GB:fr_FR:de_DE\">. When this variable isn't set, spelling "
"isn't activated. A more generic variable name is also intended to be used "
"in the future."
msgstr ""
#. type: Plain text
#: badwolf.1:85
msgid ""
"To get the list of supported dictionaries execute E<.Ic enchant-lsmod-2 "
"-list-dicts> or before enchant 2.0: E<.Ic enchant-lsmod -list-dicts>"
msgstr ""
#. type: Sh
#: badwolf.1:86
#, no-wrap
msgid "FILES"
msgstr ""
#. type: Plain text
#: badwolf.1:92
msgid ""
"The following paths are using E<.Xr sh 1> syntax to correctly support XDG "
"Base Directory Specification, you can use the E<.Xr echo 1> command to check "
"where it is on your system."
msgstr ""
#. type: It
#: badwolf.1:94
#, no-wrap
msgid "Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json"
msgstr ""
#. type: Plain text
#: badwolf.1:97
msgid ""
"WebKit-specific content-filter file, this allows to block unwanted content "
"(ads, nagware, ...). For some introductory information about the format "
"see:"
msgstr ""
#. type: Plain text
#: badwolf.1:102
msgid "For a converter using AblockPlus-style filters, try:"
msgstr ""
#. type: Plain text
#: badwolf.1:105
msgid "For a ready-to-use file (that you should update periodically), try:"
msgstr ""
#. type: It
#: badwolf.1:106
#, no-wrap
msgid "Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters"
msgstr ""
#. type: Plain text
#: badwolf.1:109
msgid ""
"This is where the compiled filters are stored, the file(s) in it are "
"automatically generated and so shouldn't be edited. Documented here only "
"for sandboxing / access-control purposes."
msgstr ""
#. type: It
#: badwolf.1:109
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel"
msgstr ""
#. type: Plain text
#: badwolf.1:114
msgid ""
"XBEL (XML Bookmark Exchange Language) file, known to be currently supported "
"by: E<.Xr elinks 1>, E<.Xr konqueror 1>, E<.Xr kbookmarkeditor 1>."
msgstr ""
#. type: Plain text
#: badwolf.1:116
msgid "You can do a symbolic link from their path, but you might prefer to use"
msgstr ""
#. type: Plain text
#: badwolf.1:120
msgid ""
"which is natively supported by E<.Nm> to automatically merge multiple XBEL "
"files."
msgstr ""
#. type: Plain text
#: badwolf.1:122
msgid ""
"Also the bookmark entries aren't re-sorted, so you might want to put your "
"most frequently used ones at the top of the file."
msgstr ""
#. type: Plain text
#: badwolf.1:124
msgid "For more information about this format see:"
msgstr ""
#. type: Plain text
#: badwolf.1:127
msgid "For an example XBEL file see:"
msgstr ""
#. type: It
#: badwolf.1:128
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/"
msgstr ""
#. type: Plain text
#: badwolf.1:130
msgid "Directory containing the"
msgstr ""
#. type: Plain text
#: badwolf.1:133
msgid ""
"to be loaded into E<.Nm . Note: They aren't the JavaScript-based "
"Web-Extensions supported by Firefox or Chrome, but native code in shared "
"objects using the WebKitGTK API.>"
msgstr ""
#. type: Plain text
#: badwolf.1:135
msgid "Examples of useful extensions may be found at:"
msgstr ""
#. type: It
#: badwolf.1:136
#, no-wrap
msgid "Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css"
msgstr ""
#. type: It
#: badwolf.1:137
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css"
msgstr ""
#. type: Plain text
#: badwolf.1:142
msgid ""
"CSS files (respectively system and user-level) for styling E<.Nm> "
"interface. See"
msgstr ""
#. type: Plain text
#: badwolf.1:144
msgid "for the properties being available."
msgstr ""
#. type: Plain text
#: badwolf.1:150
msgid ""
"For testing your styles I would recommend using the E<.Ev "
"GTK_DEBUG=interactive> environment variable on launching E<.Nm> and going to "
"the CSS tab."
msgstr ""
#. type: It
#: badwolf.1:150
#, no-wrap
msgid "Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/"
msgstr ""
#. type: Plain text
#: badwolf.1:156
msgid ""
"Directory containing JS userscripts (ending in E<.Ic .js>) ran at the start "
"of page loads, nesting down into iframes, useful to override website "
"behaviors or add missing features to websites."
msgstr ""
#. type: Plain text
#: badwolf.1:159
msgid ""
"Please note that for now unlike GreaseMonkey-style userscripts, they are "
"always run, regardless of the hostname / URLs."
msgstr ""
#. type: Sh
#: badwolf.1:160
#, no-wrap
msgid "AUTHORS"
msgstr ""
#. type: Plain text
#: badwolf.1:162
msgid "E<.An Haelwenn (lanodan) Monnier Aq Mt contact+badwolf@hacktivis.me>"
msgstr ""
#. type: Sh
#: badwolf.1:162
#, no-wrap
msgid "BUGS"
msgstr ""
#. type: Plain text
#: badwolf.1:164
msgid "You can submit contributions or tickets to"
msgstr ""
#. type: Plain text
#: badwolf.1:167
msgid "with E<.Xr git-send-email 1> for patches."
msgstr ""

Some files were not shown because too many files have changed in this diff Show more