Linux Software I use
2023-03-24
I find that a large percentage of my time "tweaking" linux is spent searching for software that I like. I've slowly built up a toolset that's lightweight and stable, and does the things that I generally need to do - and I thought that *maybe* someone else would find this list useful too. I am sure there are better ways to do some things, but I'm pretty happy with most of how my setup works.
Rather than try and come up with a list of programs I use, Gentoo already has this list sitting around for me in the form of the world file. For non-gentoo folks, the world file is a list of every package I explicitly installed, and doesn't include dependencies. So it's pretty much everything I use. I did drop some stuff from the list that's just boring, like fonts and git.
One reason this list might be interesting to someone is that this configuration is 100% wayland. I'm not running X or XWayland. So if you're looking for a wayland solution to something, this list might be a helpful list. Another reason is that I strongly dislike heavyweight software. I will generally choose the lightest-weight option available. I do still have thunderbird on this list, I'm not saying I always use the most minimal option. Sometimes I just want to look at a darn graphical calendar, but the bias in this list is clear.
Lastly you may notice that my configuration isn't over-engineered, in fact it's very under-engineerd. I have hard-coded paths just written into scripts. This is partly because this really is what I run, not some cleaned up configuration I created for posting. It's also because I don't like over-engineering. As is I can fix this stuff really easily. My notifications aren't working? Oh yeah, that wav file doesn't exist, eh, just find a new one. It's no harder to modify notifications.py than it is to modify the config that calls it. I'm probably erring too far on the side of lazyness, but hey, it works.
I've dropped some of the less interesting entries from the world file, things like git, fonts, etc.
- app-admin/keepassxc - password DB
- app-editors/vim - preferred editor
- app-laptop/laptop-mode-tools - preferred power managemenet
- app-misc/evtest - for UI tweaking, tests for events
- app-misc/jq - for commandline fiddling with json
- app-misc/khal - commandline calendar
- app-misc/khard - commandline contacts
- app-misc/ranger - commandline file browser
- app-misc/rdfind - find duplicate files
- app-misc/screen - useful for ssh access mostly
- app-office/abiword - reading microsoft .doc files
- app-office/gnumeric - spreadsheets
- app-portage/cpuid2cpuflags - identify flags for compiling
- app-portage/eix - find packages to install
- app-portage/genlop - examine build speeds and such
- app-portage/pfl - find what packages owns a file
- app-shells/gentoo-bashcomp - bach completion is nice
- app-text/antiword - make .doc files text files
- app-text/calibre - ereader (with DeDRM ability)
- app-text/xournalpp - PDF reader/editor
- dev-python/vdirsyncer - syncs data for khal,khard, and todo
- games-strategy/wesnoth - a fun game when I'm bored
- gnome-extra/nm-applet - network control
- gui-apps/clipman - better copy/paste semantics
- gui-apps/foot - terminal, I use the client/server mode, because it saves ram
- gui-apps/nwg-launchers - a nice app-grid, mostly used on my phone
- gui-apps/swaybg - set sway background
- gui-apps/swayidle - lock sway
- gui-apps/swaylock - lock sway
- gui-apps/tiramisu - notification middle-ware, I use a python script to take the output
- gui-apps/waybar - a taskbar, tray works where swaybar tray doesn't (in gentoo add the tray use flag)
- gui-apps/wlr-randr - change display settings
- gui-apps/wofi - another menu program, used for power menu on my phone
- gui-wm/sway - WM
- mail-client/mutt - email
- mail-client/thunderbird - gui email + calendar + rss reader, sometimes guis are nice
- media-gfx/geeqie - image library viewing
- media-gfx/imagemagick - image conversion
- media-libs/libsixel - allow w3m to show images in foot
- media-sound/abcde - rip CD music (I have a USB drive for this).
- media-sound/clementine - music player
- media-sound/fmit - guitar tuner
- media-sound/lingot - another guitar tuner I'm trying
- media-sound/pavucontrol - volume control
- media-video/mpv - video player
- media-video/pipewire - sound daemon
- media-video/vlc - old video player I'm moving off of
- net-fs/sshfs - to mount my servers FS if I want
- net-im/nheko - matrix chat client with E2EE
- net-irc/irssi - IRC client
- net-mail/grepmail - for looking through old mail archives
- net-misc/networkmanager - networking (matches nm-applet)
- net-misc/nextcloud-client - file sync
- net-p2p/qbittorrent - download stuff
- net-voip/linphone-desktop - SIP client
- net-vpn/wireguard-tools - VPN to server
- net-wireless/bluez-tools - bluetoothctl to manage bluetooth
- net-wireless/iw - wireless management
- net-wireless/kismet - wireless debugging
- sci-visualization/gnuplot - making graphs
- sys-apps/ripgrep - fast grep
- sys-power/acpi - get battery state
- sys-power/cpupower - CPU frequency scaling
- sys-power/hibernate-script - hibernation
- sys-process/iotop - IO load
- sys-process/lsof - find programs with open files
- www-client/chromium-bin - spare browser (when firefox fails to work)
- www-client/firefox - primary browser (I secure this one)
- www-client/w3m - console browser, and viewer for mutt
- www-misc/kiwix-desktop - wikipedia offline
- x11-misc/gmrun - app launcher
Not every piece of software I use is in the portage package system (or maybe it is but I haven't got searching for the overlay). I should probably write ebuilds for these and be all cool and Gentooy, but I haven't.
- itd - for syncing my pinetime watch
- todoman - for managing tasks (synced by vdirsyncer)
- gauth - a little TOTP tool written in go, haven't fully moved to keepassxc
Then I run a few things on my server:
- Nextcloud - for calendar, tasks, and contacts
- Nextcloud news app - for reading news
- Dovecot+fetchmail - pop email from gmail and serve it
- dnsmasq - to redirect my domain internally
But... how do you configure sway you ask? Never fear, here's my sway and waybar configs from my laptop. It's a pretty vanilla config, not much to see here. The notification bits are probably the most interesting
- waybar config waybar styling
- sway config Note: this is from my laptop and written for keepassxc to be the secrets provider (which I don't actually recommend). I'm using gnome-keyring as a secrets provider on my phone, and using systemd there. I also have some extra input/output statements to rotate the display and set up the pinephone keyboard. On openRC I start this with `exec dbus-run-session sway`, on systemd it's just `exec sway`.
- notifications.py is a python script that processes the output of tiramisu and dumps the result to an ephemral foot terminal. This is how I do notifications. The reason I do it this way is so I can make a sound when I get a message in nheko, so I don't accidentally ignore my S.O. This script just hard codes that to an "ugg" sound from wesnoth. Any old wav file will do. Note that foot is started with a special flag so sway can decorate it differently, and let it float.
Then a couple of short scripts I'll just post inline. The volume script is interesting because it changes ALL the pulseaudio volumes. This means shortcuts using it that get attached to e.g. the volume buttons on my phone, work when using plug-in headphones, a bluetooth speaker, USB headphones, or the built-in speaker. I've tried a lot of scripts over the years and this works the best so far. It DOES occasionally cause a weird jump in the settings if something else touched a volume, but I prefer everything to just adjust together for simplicity
volume
change=0
device=alsa_output.pci-0000_00_1f.3.analog-stereo
cur_vol=$(pactl get-sink-volume ${device} | awk '/front-left:/{gsub("%",""); print $5}')
new_vol=$((cur_vol + ${change}))
echo $new_vol
pactl list sinks | awk '/Name:/{print $2}' |
while read SINK; do
pactl set-sink-volume $SINK ${new_vol}%
done
lcd_brightness
#!/bin/bash
v=$(cat /sys/class/backlight/intel_backlight/brightness)
expr $v + $1 >> /sys/class/backlight/intel_backlight/brightness
It's possible to get w3m to display images in foot, even over ssh, which is pretty cool. I can run mutt on my server (I have it both places) and view images in an email if I want! This took a lot of poking around the internet, digging through configs, and guessing to figure out - and I've not seen anyone mention it anywhere, so I'm going to add it here. To convince w3m to display images in foot select "img2sixel" for the "inline image display method". For that to work img2sixel needs to be installed, which is part of libsixel in Gentoo. I have w3m-0.5.3_p20230121 built with imlib, gpm, ssl, and unicode use flags. I also have fbcon set, but I'm 95% sure it's not needed. As long as the terminal supports sixel (a format for displaying images in terminal emulator) it'll work. If it's working w3m www.google.com will display the google logo as an image.