commit 4bbbb9ff59923a8c1e7ec9d49f5d7833830766a8
parent 13ad21990b37c7ad50409671a2957acfffba3ec4
Author: Jack Sangdahl <jack@pngu.org>
Date: Wed, 18 Feb 2026 20:52:40 -0700
Improve upon nvim configuration notes
Diffstat:
| M | programs.html | | | 455 | +++++++++++++++++++++++++++++++++++++------------------------------------------- |
1 file changed, 210 insertions(+), 245 deletions(-)
diff --git a/programs.html b/programs.html
@@ -11,20 +11,17 @@
<h2>Programs & Utilities</h2>
<p><i>2026-01-17</i></p>
<hr />
- This page contains a list of various packages, programs, and utilities that
- I use across most of my systems, along with some relevant configuration and
- nuances.
+ This page contains a list of various packages, programs, and utilities that I use across most of
+ my systems, along with some relevant configuration and nuances.
<h3>Shell</h3>
<ul>
<li>
<a href="https://github.com/sharkdp/bat" target="_blank">bat</a>
<p>
- A <code>cat</code> alternative with line numbers and syntax
- highlighting. The <code>--all</code> flag is especially helpful for
- showing spaces, tabs, and line endings in files. The only
- configuration really needed is setting the theme and perhaps more
- preferentially, an alias that also disables paging, like normal
- <code>cat</code> output:
+ A <code>cat</code> alternative with line numbers and syntax highlighting. The
+ <code>--all</code> flag is especially helpful for showing spaces, tabs, and line endings
+ in files. The only configuration really needed is setting the theme and perhaps more
+ preferentially, an alias that also disables paging, like normal <code>cat</code> output:
</p>
<pre><code>export BAT_THEME="base16"
alias cat="bat --paging=never"</code></pre>
@@ -32,11 +29,11 @@ alias cat="bat --paging=never"</code></pre>
<li>
<a href="https://direnv.net" target="_blank">direnv</a>
<p>
- Allows for a shell script to be run upon entering a directory. This is
- particularly useful for automatically activating Python virtual
- environments. Configuration consists of creating the
- <code>.envrc</code> file that is sourced at entry, and allowing this
- to happen by running <code>direnv allow</code> within the directory.
+ Allows for a shell script to be run upon entering a directory. This is particularly useful
+ for automatically activating Python virtual environments. Configuration consists of
+ creating the
+ <code>.envrc</code> file that is sourced at entry, and allowing this to happen by running
+ <code>direnv allow</code> within the directory.
</p>
<pre><code class="language-shell">if [ -f ".venv/bin/activate" ]; then
source .venv/bin/activate
@@ -45,17 +42,13 @@ fi</code></pre>
<li>
<a href="https://github.com/lsd-rs/lsd" target="_blank">lsd</a>
<p>
- A <code>ls</code> alternative that mostly provides intuitive colours
- and icons. As for configuration, I found it beneficial to
- <a
- href="https://git.pngu.org/dots/tree/.config/lsd/config.yaml"
- target="_blank"
+ A <code>ls</code> alternative that mostly provides intuitive colours and icons. As for
+ configuration, I found it beneficial to
+ <a href="https://git.pngu.org/dots/tree/.config/lsd/config.yaml" target="_blank"
>trim down</a
>
some of the default output, and
- <a
- href="https://git.pngu.org/dots/tree/.config/lsd/colors.yaml"
- target="_blank"
+ <a href="https://git.pngu.org/dots/tree/.config/lsd/colors.yaml" target="_blank"
>configure colours</a
>
accordingly.
@@ -65,81 +58,126 @@ fi</code></pre>
<a href="https://neovim.io" target="_blank">neovim</a>
<p>
My Neovim configuration is based on
- <a href="https://nvchad.com" target="_blank">Nvchad</a>, and
- configured with my desired language servers, formatters, and plugins.
- The following packages are installed through
- <a href="https://mason-registry.dev" target="_blank">Mason</a>:
+ <a href="https://nvchad.com" target="_blank">Nvchad</a>, and configured with my desired
+ language servers, formatters, and plugins.
+ <a href="https://mason-registry.dev" target="_blank">Mason</a> serves a package manager
+ for Neovim packages. I use the following LSPs in
+ <a href="https://github.com/neovim/nvim-lspconfig" target="_blank">nvim-lspconfig</a>:
</p>
<ul>
<li>
- <a href="https://docs.astral.sh/ruff" target="_blank">Ruff</a>:
- Python formatter and linter
+ <p>
+ <a href="https://clangd.llvm.org" target="_blank">Clangd</a>: for C/C++. Works well,
+ despite sometimes falling over when interpreting division (<code>/</code>) as trying
+ to reference a path. The <code>HeaderInsertion: Never</code> directive on macOS does
+ not seem to work, too.
+ </p>
</li>
<li>
- <a
- href="https://github.com/python-lsp/python-lsp-server"
- target="_blank"
- >Python LSP</a
- >: what it says on the tin
+ <p>
+ <a href="https://github.com/microsoft/vscode-css-languageservice" target="_blank"
+ >CSS LSP</a
+ >: for CSS. No complaints, beside the Node.js dependency.
+ </p>
</li>
<li>
- <a href="https://prettier.io" target="_blank">Prettier</a>:
- formatter for HTML and CSS (for me at least). This package
- unfortunately requires <code>npm</code> to be installed on the host
- system.
+ <p>
+ <a href="https://github.com/microsoft/vscode-html-languageservice" target="_blank"
+ >HTML LSP</a
+ >: for HTML. Helps cut the typing needed for working with HTML tags in half. Also
+ depends on Node.js.
+ </p>
</li>
<li>
- <a
- href="https://github.com/LuaLS/lua-language-server"
- target="'_blank"
- >Lua LSP</a
- >: also what it says on the tin
+ <p>
+ <a href="https://docs.basedpyright.com/latest" target="_blank">Basedpyright</a>: for
+ Python. Very robust and works fantastically alongside Ruff.
+ </p>
</li>
<li>
- <a href="https://github.com/JohnnyMorganz/StyLua" target="_blank"
- >Stylua</a
- >: Lua formatter
+ <p>
+ <a href="https://github.com/LuaLS/lua-language-server" target="_blank">Lua LSP</a>:
+ for Lua. No complaints, fast, minimal dependencies.
+ </p>
</li>
<li>
- <a href="https://github.com/chipsalliance/verible" target="_blank"
- >Verible</a
- >: SystemVerilog language server, formatter, and linter
+ <p>
+ <a href="https://chipsalliance.github.io/verible" target="_blank">Verible</a>: for
+ SystemVerilog and related languages. A rather robust package that contains linting and
+ formatting as well.
+ </p>
+ </li>
+ </ul>
+ I use the following formatters in
+ <a href="https://github.com/stevearc/conform.nvim/tree/master" target="_blank"
+ >conform.nvim</a
+ >:
+ <ul>
+ <li>
+ <p>
+ <a href="https://clang.llvm.org/docs/ClangFormat.html">ClangFormat</a>: for C/C++.
+ Works well, part of standard Clang software bundle. However, this is not the case on
+ macOS, and ClangFormat must be installed explicitly.
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="https://oxc.rs" target="_blank">Oxfmt</a>: for CSS, HTML, & Markdown.
+ Preferable over the better-known <a href="https://prettier.io">Prettier</a> or
+ <a href="https://biomejs.dev" target="_blank">Biome</a>, being much faster.
+ Unfortunately still depends on Node.js.
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="https://github.com/JohnnyMorganz/StyLua" target="_blank">Stylua</a>: for Lua.
+ Does what it says on the tin.
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="https://docs.astral.sh/ruff" target="_blank">Ruff</a>: for Python. Rather
+ robust and very fast. Capable of fixing code (e.g. removing an accidental trailing
+ semicolon), formatting code, and sorting Python <code>import</code>'s.
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="https://chipsalliance.github.io/verible/verilog_format.html" target="_blank"
+ >Verible Format</a
+ >: for SystemVerilog and related languages. Formatter works well, however disagrees
+ with some platforms I use, such as
+ <a href="https://chipdev.io" target="_blank">chipdev.io</a>, which requires manual
+ intervention.
+ </p>
</li>
</ul>
</li>
<li>
- <a href="https://github.com/BurntSushi/ripgrep" target="_blank"
- >ripgrep</a
- >
+ <a href="https://github.com/BurntSushi/ripgrep" target="_blank">ripgrep</a>
<p>
- An incredibly robust <code>grep</code> alternative, which I am quite
- sure I do not use to its full potential. Things like omitting
- directories are especially useful, and also intuitive — e.g.
- <code>rg -g '!dir/' foo</code>.
+ An incredibly robust <code>grep</code> alternative, which I am quite sure I do not use to
+ its full potential. Things like omitting directories are especially useful, and also
+ intuitive — e.g. <code>rg -g '!dir/' foo</code>.
</p>
</li>
<li>
<a href="https://starship.rs" target="_blank">starship</a>
<p>
- An alternative terminal prompt to <code>$</code> that has extensive
- customisation and functionality regarding current working directory. I
- find the virtual environment status very useful.
+ An alternative terminal prompt to <code>$</code> that has extensive customisation and
+ functionality regarding current working directory. I find the virtual environment status
+ very useful.
</p>
</li>
<li>
<a href="https://github.com/XAMPPRocky/tokei" target="_blank">tokei</a>
- <p>
- Counts lines of code, as well as different languages, comments, etc.
- </p>
+ <p>Counts lines of code, as well as different languages, comments, etc.</p>
</li>
<li>
- <a href="https://github.com/ajeetdsouza/zoxide" target="_blank"
- >zoxide</a
- >
+ <a href="https://github.com/ajeetdsouza/zoxide" target="_blank">zoxide</a>
<p>
- A <code>cd</code> alternative that auto-jumps to previously visited
- directories. This turns a long
- <code>cd to/a/nested/directory/named/foo</code> command to just
+ A <code>cd</code> alternative that auto-jumps to previously visited directories. This
+ turns a long <code>cd to/a/nested/directory/named/foo</code> command to just
<code>cd foo</code>, after entering it once.
</p>
</li>
@@ -168,140 +206,113 @@ zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle :compinstall filename '~/.zshrc'
autoload -U compinit && compinit</code></pre>
<p>
- ZSH's default Vi mode has room for improvement unfortunately, but it
- is usable nonetheless.
+ ZSH's default Vi mode has room for improvement unfortunately, but it is usable
+ nonetheless.
</p>
</li>
<ul>
<li>
- <a
- href="https://github.com/zsh-users/zsh-autosuggestions"
- target="_blank"
+ <a href="https://github.com/zsh-users/zsh-autosuggestions" target="_blank"
>zsh-autosuggestions</a
>
<p>
- Similarly to Zoxide mentioned above, this plugin aides in running
- previously long commands. Instead of typing out a cumbersome
- <code>awk</code> command that you've run before, one can tap the
- right arrow key to fill the command after typing the first few
- characters.
+ Similarly to Zoxide mentioned above, this plugin aides in running previously long
+ commands. Instead of typing out a cumbersome
+ <code>awk</code> command that you've run before, one can tap the right arrow key to fill
+ the command after typing the first few characters.
</p>
<p>
- Depending on your terminal's colour configuration, the default
- colour of the suggested text to fill may not be very readable. If
- so, set it manually at shell startup:
+ Depending on your terminal's colour configuration, the default colour of the suggested
+ text to fill may not be very readable. If so, set it manually at shell startup:
</p>
<pre><code>export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#C7C7C7"</code></pre>
</li>
<li>
- <a
- href="https://github.com/zsh-users/zsh-syntax-highlighting"
- target="_blank"
+ <a href="https://github.com/zsh-users/zsh-syntax-highlighting" target="_blank"
>zsh-syntax-highlighting</a
>
<p>
- Provides syntax highlighting directly to commands run in your shell.
- A small detail but invaluable for things like underlining a path
- that is valid, quoted and conditional arguments, and so on.
+ Provides syntax highlighting directly to commands run in your shell. A small detail but
+ invaluable for things like underlining a path that is valid, quoted and conditional
+ arguments, and so on.
</p>
</li>
</ul>
</ul>
<h3>Graphical</h3>
<p>
- My non-headless Linux systems run under Wayland, so in turn, the following
- applications are more or less Wayland specific.
+ My non-headless Linux systems run under Wayland, so in turn, the following applications are
+ more or less Wayland specific.
</p>
<ul>
<li>
<a href="https://codeberg.org/dnkl/fuzzel" target="_blank">fuzzel</a>
<p>
Application launcher that is incredibly easy to
- <a
- href="https://git.pngu.org/dots/tree/.config/fuzzel/fuzzel.ini"
- target="_blank"
+ <a href="https://git.pngu.org/dots/tree/.config/fuzzel/fuzzel.ini" target="_blank"
>configure</a
>.
</p>
</li>
<li>
- <a href="https://gitlab.freedesktop.org/emersion/grim" target="_blank"
- >grim</a
- >
+ <a href="https://gitlab.freedesktop.org/emersion/grim" target="_blank">grim</a>
<ul>
<li>
- <a href="https://github.com/emersion/slurp" target="_blank"
- >slurp</a
- >
+ <a href="https://github.com/emersion/slurp" target="_blank">slurp</a>
</li>
</ul>
<p>
- Screenshot tools that are boring and functional. Grim is the
- screenshot utility itself, while Slurp allows for selecting a region
- to capture. The combination is easily bound to Sway shortcuts to
- either copy to clipboard (see
- <a href="https://github.com/bugaevc/wl-clipboard" target="_blank"
- >wl-clipboard</a
- >), or save to <code>$XDG_PICTURES_DIR</code>, respectively:
+ Screenshot tools that are boring and functional. Grim is the screenshot utility itself,
+ while Slurp allows for selecting a region to capture. The combination is easily bound to
+ Sway shortcuts to either copy to clipboard (see
+ <a href="https://github.com/bugaevc/wl-clipboard" target="_blank">wl-clipboard</a>), or
+ save to <code>$XDG_PICTURES_DIR</code>, respectively:
</p>
<pre><code>bindsym $mod+p exec grim -g "$(slurp)" - | wl-copy
bindsym $mod+Shift+p exec grim -g "$(slurp)"</code></pre>
<p></p>
</li>
<li>
- <a href="https://github.com/jovanlanik/gtklock" target="_blank"
- >gtklock</a
- >
+ <a href="https://github.com/jovanlanik/gtklock" target="_blank">gtklock</a>
<p>
A GTK-based lock screen program that's useful when I'm out and about.
- <a
- href="https://git.pngu.org/dots/tree/.config/gtklock"
- target="_blank"
- >Configuration</a
- >
- is rather simple, and it is styled via CSS, which I find to be a perk.
- Also triggered from a Sway mapping:
+ <a href="https://git.pngu.org/dots/tree/.config/gtklock" target="_blank">Configuration</a>
+ is rather simple, and it is styled via CSS, which I find to be a perk. Also triggered from
+ a Sway mapping:
</p>
<pre><code>bindsym $mod+Escape exec gtklock -d</code></pre>
</li>
<li>
<a href="https://sr.ht/~exec64/imv" target="_blank">imv</a>
<p>
- An image viewer that supports the file formats I encounter, and even
- has Vim keybindings.
+ An image viewer that supports the file formats I encounter, and even has Vim keybindings.
</p>
</li>
<li>
<a href="https://mako-project.org" target="_blank">mako</a>
<p>
Notification daemon that's libnotify compatible, and easily
- <a
- href="https://git.pngu.org/dots/tree/.config/mako/config"
- target="_blank"
- >configured</a
- >. Its daemon must be started by Sway:
- <code>exec /usr/bin/mako</code>.
+ <a href="https://git.pngu.org/dots/tree/.config/mako/config" target="_blank">configured</a
+ >. Its daemon must be started by Sway: <code>exec /usr/bin/mako</code>.
</p>
</li>
<li>
<a href="https://fonts.google.com/noto" target="_blank">noto fonts</a>
(+ cjk & emoji)
<p>
- Incredibly widely used fonts, including support for CJK and Cyrillic
- languages, and emoji support in applications such as Discord.
+ Incredibly widely used fonts, including support for CJK and Cyrillic languages, and emoji
+ support in applications such as Discord.
</p>
</li>
<li>
<a href="https://swaywm.org" target="_blank">sway</a>
<p>
Rather powerful window manager. Especially appreciate the input
- <a
- href="https://git.pngu.org/dots/tree/.config/sway/config"
- target="_blank"
+ <a href="https://git.pngu.org/dots/tree/.config/sway/config" target="_blank"
>configuration</a
>
- options like easily changing trackpad behaviours and switching between
- languages. Things like these are challenging on X. I use
+ options like easily changing trackpad behaviours and switching between languages. Things
+ like these are challenging on X. I use
<a href="https://github.com/swaywm/swaybg" target="_blank">swaybg</a>
to set wallpapers.
</p>
@@ -310,24 +321,20 @@ bindsym $mod+Shift+p exec grim -g "$(slurp)"</code></pre>
<a href="https://github.com/Alexays/Waybar" target="_blank">waybar</a>
<p>
Status bar with loads of functionality.
- <a
- href="https://git.pngu.org/dots/tree/.config/sway/config"
- target="_blank"
+ <a href="https://git.pngu.org/dots/tree/.config/sway/config" target="_blank"
>Configuration</a
>
- is done via a JSON-esque file and styled via CSS, which offers nearly
- too much opportunity.
+ is done via a JSON-esque file and styled via CSS, which offers nearly too much
+ opportunity.
</p>
</li>
<li>
<a href="https://github.com/wez/wezterm" target="_blank">wezterm</a>
<p>
Terminal of choice. I went back and forth between this, and
- <a href="https://git.pngu.org/st" target="_blank">st</a>, and while
- fun, st lacks Wayland and macOS support. Wezterm is easily
- <a href="https://git.pngu.org/dots/tree/.config/wezterm/wezterm.lua"
- >configured</a
- >
+ <a href="https://git.pngu.org/st" target="_blank">st</a>, and while fun, st lacks Wayland
+ and macOS support. Wezterm is easily
+ <a href="https://git.pngu.org/dots/tree/.config/wezterm/wezterm.lua">configured</a>
in Lua.
</p>
</li>
@@ -335,9 +342,7 @@ bindsym $mod+Shift+p exec grim -g "$(slurp)"</code></pre>
<a href="https://pwmt.org/projects/zathura" target="_blank">zathura</a>
<p>
PDF viewer with Vim keybindings and commands. Allows for ample
- <a
- href="https://git.pngu.org/dots/tree/.config/zathura/zathurarc"
- target="_blank"
+ <a href="https://git.pngu.org/dots/tree/.config/zathura/zathurarc" target="_blank"
>configuration</a
>
of colours and fonts.
@@ -349,62 +354,43 @@ bindsym $mod+Shift+p exec grim -g "$(slurp)"</code></pre>
<li>
<a href="https://chrony-project.org" target="_blank">chrony</a>
<p>
- The system clock frequently falls out of sync on some of my older
- hardware and Chrony is a solution. Enable the system service and
- select a
+ The system clock frequently falls out of sync on some of my older hardware and Chrony is a
+ solution. Enable the system service and select a
<a href="https://www.ntppool.org/zone/@" target="_blank">NTP pool</a>.
</p>
</li>
<li>
- <a href="https://github.com/dracut-ng/dracut-ng" target="_blank"
- >dracut</a
- >
+ <a href="https://github.com/dracut-ng/dracut-ng" target="_blank">dracut</a>
<p>
- On my systems, Dracut is used to generate initramfs during kernel
- installation, and create a bootable
- <a
- href="https://uapi-group.org/specifications/specs/unified_kernel_image"
- target="_blank"
+ On my systems, Dracut is used to generate initramfs during kernel installation, and create
+ a bootable
+ <a href="https://uapi-group.org/specifications/specs/unified_kernel_image" target="_blank"
>UKI</a
- >, which omits the need for a bootloader, such as GRUB. See
- system-specific pages for more details.
+ >, which omits the need for a bootloader, such as GRUB. See system-specific pages for more
+ details.
</p>
</li>
<li>
- <a href="https://github.com/rhboot/efibootmgr" target="_blank"
- >efibootmgr</a
- >
+ <a href="https://github.com/rhboot/efibootmgr" target="_blank">efibootmgr</a>
<p>
- Similar to usage of the above, efibootmgr is used to create boot
- entries for bootable kernel images, both in the form of UKI's or
- <a
- href="https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html"
- target="_blank"
+ Similar to usage of the above, efibootmgr is used to create boot entries for bootable
+ kernel images, both in the form of UKI's or
+ <a href="https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html" target="_blank"
>EFI Stub</a
- >'s. Also handy for cleaning up other entries littered around by other
- operating systems.
+ >'s. Also handy for cleaning up other entries littered around by other operating systems.
</p>
</li>
<li>
- <a
- href="https://git.kernel.org/cgit/network/wireless/iwd.git"
- target="_blank"
- >iwd</a
- >
+ <a href="https://git.kernel.org/cgit/network/wireless/iwd.git" target="_blank">iwd</a>
<ul>
<li>
- <a
- href="https://roy.marples.name/projects/openresolv"
- target="_blank"
- >openresolv</a
- >
+ <a href="https://roy.marples.name/projects/openresolv" target="_blank">openresolv</a>
</li>
</ul>
<p>
- Preferred networking setup for its minimal system footprint,
- reliability (significantly over WPA Supplicant), and ease of use with
- most networks I encounter. It can be configured to use its internal
- DHCP client, and a DNS manager such as a resolvconf:
+ Preferred networking setup for its minimal system footprint, reliability (significantly
+ over WPA Supplicant), and ease of use with most networks I encounter. It can be configured
+ to use its internal DHCP client, and a DNS manager such as a resolvconf:
</p>
<pre><code>[General]
EnableNetworkConfiguration=true
@@ -415,34 +401,30 @@ NameResolvingService=resolvconf</code></pre>
<li>
<a href="https://github.com/Duncaen/OpenDoas" target="_blank">doas</a>
<p>
- A <code>sudo</code> alternative that is a fraction of the size of the
- traditional authentication program, and performs everything most
- single-user, non-server systems would need. Configuration to allow
- persistent authentication for some time after a user of the
- <code>wheel</code> group has entered their password is straight
- forward:
+ A <code>sudo</code> alternative that is a fraction of the size of the traditional
+ authentication program, and performs everything most single-user, non-server systems would
+ need. Configuration to allow persistent authentication for some time after a user of the
+ <code>wheel</code> group has entered their password is straight forward:
</p>
<pre><code>permit persist :wheel</code></pre>
</li>
<li>
<a href="https://github.com/rvaiya/keyd" target="_blank">keyd</a>
<p>
- Key remapping for Linux systems that's capable of reproducing much of
- my <a href="https://qmk.fm" target="_blank">QMK</a> configuration,
- which primarily includes combos, layers, home row mods, and more. This
- is certainly suitable for making my laptop's keyboard usable, albeit
- uncomfortable.
- <a href="https://git.pngu.org/dots/tree/.config/keyd.conf"></a> is
- certainly straight forward as well. This file must however either live
- at or be symlinked to <code>/etc/keyd/default.conf</code>.
+ Key remapping for Linux systems that's capable of reproducing much of my
+ <a href="https://qmk.fm" target="_blank">QMK</a> configuration, which primarily includes
+ combos, layers, home row mods, and more. This is certainly suitable for making my laptop's
+ keyboard usable, albeit uncomfortable.
+ <a href="https://git.pngu.org/dots/tree/.config/keyd.conf"></a> is certainly straight
+ forward as well. This file must however either live at or be symlinked to
+ <code>/etc/keyd/default.conf</code>.
</p>
</li>
<li>
<a href="https://github.com/OpenRC/openrc" target="_blank">openrc</a>
<p>
- Undoubtedly my preferred init system. Incredibly reliable and not
- built such that things like reboot depend on some other program (hint
- hint systemd...). Usage is also intuitive:
+ Undoubtedly my preferred init system. Incredibly reliable and not built such that things
+ like reboot depend on some other program (hint hint systemd...). Usage is also intuitive:
</p>
<pre><code>$ rc-status
Runlevel: default
@@ -465,10 +447,9 @@ Dynamic Runlevel: hotplugged
<a href="https://github.com/rizsotto/Bear" target="_blank">bear</a>
<p>
The clangd language server sources a
- <code>compile_commands.json</code> file that provides information like
- where header files are found, compilation flags, etc. Clang(d) has no
- built-in provision for generating this file, so bear is the tool for
- the job. Usage is rather straight forward:
+ <code>compile_commands.json</code> file that provides information like where header files
+ are found, compilation flags, etc. Clang(d) has no built-in provision for generating this
+ file, so bear is the tool for the job. Usage is rather straight forward:
</p>
<pre><code>$ bear -- cc misc.c
$ cat compile_commands.json
@@ -483,101 +464,85 @@ $ cat compile_commands.json
}
]</code></pre>
<p>
- Running <code>bear -- make</code> would be appropriate for projects
- that use a Makefile.
+ Running <code>bear -- make</code> would be appropriate for projects that use a Makefile.
</p>
</li>
<li>
<a href="https://lldb.llvm.org" target="_blank">lldb</a>
<p>
- A debugger that behaves similarly to GDB, but is much more intuitive
- in my opinion. This
+ A debugger that behaves similarly to GDB, but is much more intuitive in my opinion. This
<a href="https://github.com/gdbinit/lldbinit" target="_blank">here</a>
- extends LLDB a bit by providing some graphical features and overall
- more information by default. The script lives in
- <code>~/.local/lldbinit.py</code> and call it from
- <code>.lldbinit</code>:
+ extends LLDB a bit by providing some graphical features and overall more information by
+ default. The script lives in
+ <code>~/.local/lldbinit.py</code> and call it from <code>.lldbinit</code>:
</p>
<pre><code>command script import ~/.local/lldbinit.py</code></pre>
</li>
<li>
<a href="https://github.com/pkgconf/pkgconf" target="_blank">pkgconf</a>
<p>
- Used to automatically configure compiler and linker flags for
- libraries that need them. Helpful working on projects across different
- systems and architectures.
+ Used to automatically configure compiler and linker flags for libraries that need them.
+ Helpful working on projects across different systems and architectures.
</p>
</li>
<li>
<a href="https://github.com/astral-sh/uv" target="_blank">uv</a>
<p>
- Python installation and package manager. Incredibly fast and intuitive
- to use, and preferable to <code>pip</code> and other Python utilities.
+ Python installation and package manager. Incredibly fast and intuitive to use, and
+ preferable to <code>pip</code> and other Python utilities.
</p>
</li>
</ul>
<h3>Miscellaneous</h3>
<ul>
<li>
- <a href="https://github.com/wwmm/easyeffects" target="_blank"
- >easy effects</a
- >
+ <a href="https://github.com/wwmm/easyeffects" target="_blank">easy effects</a>
<p>
At the desktop, I use a Schiit
- <a href="https://www.schiit.com/products/bifrost" target="_blank"
- >Bifrost DAC</a
- >
+ <a href="https://www.schiit.com/products/bifrost" target="_blank">Bifrost DAC</a>
and
- <a href="https://www.schiit.com/products/jotunheim-3" target="_blank"
- >Jotunheim amp</a
- >
- for headphone audio. Easy Effects has a range of audio plugins,
- including a parametric equaliser.
- <a href="https://github.com/jaakkopasanen/AutoEq" target="_blank"
- >AutoEQ</a
- >
- provides easy equalising for nearly all headphones and is a fantastic
- resource.
+ <a href="https://www.schiit.com/products/jotunheim-3" target="_blank">Jotunheim amp</a>
+ for headphone audio. Easy Effects has a range of audio plugins, including a parametric
+ equaliser.
+ <a href="https://github.com/jaakkopasanen/AutoEq" target="_blank">AutoEQ</a>
+ provides easy equalising for nearly all headphones and is a fantastic resource.
</p>
</li>
<li>
<a href="https://eyed3.readthedocs.io" target="_blank">eyed3</a>
<p>
- I keep a collection of some music, and eyeD3 allows setting the
- metadata associated a given MP3 file. It is quite robust and allows
- configuring most fields one may need:
+ I keep a collection of some music, and eyeD3 allows setting the metadata associated a
+ given MP3 file. It is quite robust and allows configuring most fields one may need:
</p>
<pre><code>eyeD3 --remove-all -t="Song Title" -a="Artist" --add-image="cover.png:FRONT_COVER" audio_file.mp3</code></pre>
<p>
- This example removes other metadata, sets the song title and artist,
- and adds a front album cover image.
+ This example removes other metadata, sets the song title and artist, and adds a front
+ album cover image.
</p>
</li>
<li>
<a href="https://www.imagemagick.org" target="_blank">imagemagick</a>
<p>
- I occasionally find myself in need of some sort of basic image
- manipulation, like rotating, resizing, or combining images. Searching
- the web for "rotate image online" is silly, and Imagemagick is capable
- of far more than just that.
+ I occasionally find myself in need of some sort of basic image manipulation, like
+ rotating, resizing, or combining images. Searching the web for "rotate image online" is
+ silly, and Imagemagick is capable of far more than just that.
</p>
</li>
<li>
<a href="https://www.weechat.org" target="_blank">weechat</a>
<p>
- I am active in a few IRC channels, however not often enough to need a
- fancy GUI client. Weechat is quite configurable and easy to use, with
- much of the shortcuts match those found in browsers and Vim.
+ I am active in a few IRC channels, however not often enough to need a fancy GUI client.
+ Weechat is quite configurable and easy to use, with much of the shortcuts match those
+ found in browsers and Vim.
</p>
</li>
<li>
<a href="https://github.com/yadm-dev/yadm" target="_blank">yadm</a>
<p>
- This tool (read git wrapper) keeps track of all my system
- configuration files with the ease and convenience of git. Each system
- gets a branch and files I want to exclude are excluded via the
- standard <code>.gitignore</code>. This makes setting up new systems or
+ This tool (read git wrapper) keeps track of all my system configuration files with the
+ ease and convenience of git. Each system gets a branch and files I want to exclude are
+ excluded via the standard <code>.gitignore</code>. This makes setting up new systems or
undoing changes incredibly easy.
</p>
</li>