Jakub Czajka [Fri, 23 Dec 2022 19:57:37 +0000 (20:57 +0100)]
[common] Package libxft with the bgra patch.
Libxft has a bug which crashes the library when displaying colorful
emojis. A patch is available online. This commit packages libxft with
the patch applied.
Jakub Czajka [Fri, 23 Dec 2022 19:47:12 +0000 (20:47 +0100)]
[common] Install programs from local source code.
Guix downloads programs and source code from the internet. However, if
we want to install custom versions of these programs, we need to
compile them manually from local source code. This commit adds helper
functions for working with such programs.
Jakub Czajka [Fri, 23 Dec 2022 18:01:17 +0000 (19:01 +0100)]
[emacs] Extend the default minibuffer.
Minibuffer is a special window for selecting from a set of
values (e.g. a file to open). This commit extends the default emacs
minibuffer with orderless (narrowing the set of values) and
vertico (live preview of the set of values).
Jakub Czajka [Fri, 23 Dec 2022 17:40:24 +0000 (18:40 +0100)]
[emacs] Simplify entering long keybindings.
Emacs has a lot of built-in keybindings and users can define
more. They can be long. This commit installs which-key and
transient which help when entering long keybindings.
Jakub Czajka [Fri, 23 Dec 2022 17:11:27 +0000 (18:11 +0100)]
[emacs] Read documents within emacs.
Emacs has built-in support for reading PDFs. However, pdf-tools is
better than the default PDF reader. This commit installs pdf-tools and
the necessary dependencies.
Jakub Czajka [Thu, 22 Dec 2022 21:05:02 +0000 (22:05 +0100)]
[emacs] Structure working with packages.
Elisp code can be packaged and shared as a package. This commit
structures how emacs should work with packages. It installs
`use-package` which simplifies installation of other packages.
Jakub Czajka [Fri, 3 Jun 2022 18:10:58 +0000 (20:10 +0200)]
Load tags as a capf.
Completion at point functions extend the completion at point
mechanism. This commit enables `tags-completion-at-point-function` and
points it to the TAGS table. It is loaded as a directory local
variable.
Jakub Czajka [Fri, 3 Jun 2022 17:58:40 +0000 (19:58 +0200)]
Ignore the TAGS file.
TAGS is an output file for `etags` tag tables. Tag tables may be large
and may change over time. It is better to regenerate them instead of
tracking with `git'. This commit adds TAGS to .gitignore.
Jakub Czajka [Mon, 30 May 2022 07:24:20 +0000 (09:24 +0200)]
[bash] Avoid sourcing .bash_profile in .bashrc.
.bashrc is sourced by interactive non-login shells. However, these
shells are run in an environment that was started through a login
shell. Therefore, an interactive non-login shell should have inherited
environment variables created by a login shell in .bash_profile.
Jakub Czajka [Sat, 28 May 2022 15:44:37 +0000 (17:44 +0200)]
[bash] Define XDG base directories.
XDG base directory standard [1] defines environment variables with
important paths in user home directory. For example, XDG_CONFIG_HOME
points to a directory with configuration files.
Many programs respect the XDG base directory specification. For
example, git looks for it dotfile as either $HOME/.gitconfig or
$XDG_CONFIG_HOME/git/config. Therefore, XDG environment variables
should be defined early during startup.
This commit adds 10-xdg.sh which defines XDG base directory
variables. Prefix '10-' ensures that the files will be sourced by
~/.profile before other files in ~/.config/profile.d.
Jakub Czajka [Sun, 29 May 2022 20:23:22 +0000 (22:23 +0200)]
[bash] Define dotfiles.
Shells are command line interpreter for UNIX systems. These shells can
operate in one of three modes: interactive, non-interactive or
login. Login mode starts with a login prompt. After that it works
similarly to either interactive or non-interactive mode.
~/.bash_profile is the dotfile for bash in the login mode. It sources
program-specific *.sh profiles in {XDG_CONFIG_HOME}/profile.d. This
mimics behaviour of /etc/profile, the global shell dotfile.
~/,bashrc is the dotfile for bash in the interactive mode.