diff options
| author | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2025-01-18 19:00:03 +0100 |
|---|---|---|
| committer | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2025-01-18 19:00:03 +0100 |
| commit | 3eb4d872f7157b67691fb5a98e2cf53f716c5457 (patch) | |
| tree | f8a994a39e359e2620ff01baa2e1096f7e0da633 /guides/setups/operating-systems | |
| parent | 9398b60e08f07022cf02bb290f36718b1c744eae (diff) | |
| download | memory-leaks-3eb4d872f7157b67691fb5a98e2cf53f716c5457.tar.xz | |
Resume gratuitous shuffling
Diffstat (limited to 'guides/setups/operating-systems')
| -rw-r--r-- | guides/setups/operating-systems/apps-demo/.gitignore | 2 | ||||
| -rw-r--r-- | guides/setups/operating-systems/apps-demo/activate | 34 | ||||
| -rwxr-xr-x | guides/setups/operating-systems/apps-demo/napp/bin/napp | 3 | ||||
| -rwxr-xr-x | guides/setups/operating-systems/apps-demo/napp/share/doc.sh | 18 | ||||
| -rw-r--r-- | guides/setups/operating-systems/apps-demo/napp/share/napp.md | 3 | ||||
| -rw-r--r-- | guides/setups/operating-systems/apps.org | 186 | ||||
| -rw-r--r-- | guides/setups/operating-systems/console.org | 19 | ||||
| -rw-r--r-- | guides/setups/operating-systems/opensuse.org | 29 |
8 files changed, 0 insertions, 294 deletions
diff --git a/guides/setups/operating-systems/apps-demo/.gitignore b/guides/setups/operating-systems/apps-demo/.gitignore deleted file mode 100644 index 111d960..0000000 --- a/guides/setups/operating-systems/apps-demo/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -man -info diff --git a/guides/setups/operating-systems/apps-demo/activate b/guides/setups/operating-systems/apps-demo/activate deleted file mode 100644 index b8c9138..0000000 --- a/guides/setups/operating-systems/apps-demo/activate +++ /dev/null @@ -1,34 +0,0 @@ -# Hey Emacs; this is a -*- shell-script -*-. -# Hopefully invoked by bash 🤞 - -_apps_dir=$(realpath --no-symlinks $(dirname ${BASH_SOURCE})) - -_apps_PATH=$( - shopt -s nullglob - bins=( "${_apps_dir}"/*/bin ) - IFS=: eval 'echo "${bins[*]}"' -) -export PATH=${_apps_PATH}:${PATH} - -_apps_XDG_DATA_DIRS=$( - shopt -s nullglob - # We could set globstar and let Bash loose, searching the depths - # of _apps_dir for - # **/{applications/*.desktop,systemd/user/*.service} - # but it seems like asking for trouble. Make some assumptions - # about where applications typically dump their XDG-related files. - datadirs=($( - { - for dkentry in "${_apps_dir}"/*/share/applications/*.desktop - do - echo ${dkentry%/applications/*.desktop} - done - for unit in "${_apps_dir}"/*/lib*/systemd/user/*.service - do - echo ${unit%/systemd/user/*.service} - done - } | sort -u - )) - IFS=: eval 'echo "${datadirs[*]}"' -) -export XDG_DATA_DIRS="${_apps_XDG_DATA_DIRS}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" diff --git a/guides/setups/operating-systems/apps-demo/napp/bin/napp b/guides/setups/operating-systems/apps-demo/napp/bin/napp deleted file mode 100755 index 1bd6e9f..0000000 --- a/guides/setups/operating-systems/apps-demo/napp/bin/napp +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -echo 😴 diff --git a/guides/setups/operating-systems/apps-demo/napp/share/doc.sh b/guides/setups/operating-systems/apps-demo/napp/share/doc.sh deleted file mode 100755 index e7c8eb1..0000000 --- a/guides/setups/operating-systems/apps-demo/napp/share/doc.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -eux - -mkdir -p info man/man1 - -pandoc napp.md -s -o man/man1/napp.1 -pandoc napp.md -s -o info/napp.texi \ - -H <(cat <<EOF -@dircategory Software development -@direntry -* Napp: (napp). -* Napp node: (napp)napp -@end direntry -EOF -) -makeinfo info/napp.texi -o info -install-info info/napp.info info/dir diff --git a/guides/setups/operating-systems/apps-demo/napp/share/napp.md b/guides/setups/operating-systems/apps-demo/napp/share/napp.md deleted file mode 100644 index ce841df..0000000 --- a/guides/setups/operating-systems/apps-demo/napp/share/napp.md +++ /dev/null @@ -1,3 +0,0 @@ -# napp - -You need it. diff --git a/guides/setups/operating-systems/apps.org b/guides/setups/operating-systems/apps.org deleted file mode 100644 index 0ff0184..0000000 --- a/guides/setups/operating-systems/apps.org +++ /dev/null @@ -1,186 +0,0 @@ -#+TITLE: Installing applications under =$HOME= - -One day I woke up and decided to stop letting ~make install~ put -programs under =/usr/local/=. Not every project provides an -=uninstall= target, so over time, as more and more applications get -lumped under that hierarchy, it becomes a clutter of stuff that I -cannot remove without… - -1. guesstimating what files belong to any given program using - timestamps, -2. weighing my odds of passing correctly crafted globs to the likes of - =sudo find -delete= and =sudo rm -r= without destroying my system. - -Instead I figured I would start ~./configure~'ing programs with -=--prefix=${HOME}/apps/${program}=, and teach whichever dotfiles -manage session environment variables to arrange for installed -resources to be found. - -How hard could it be? - -* =PATH= -The Correct Way™ to set environment variables seems to depend on - -1. the kind of session (TTY vs GUI), -2. the init system (e.g. [[https://www.freedesktop.org/software/systemd/man/environment.d.html][systemd user environment variables]]) -3. the desktop environment (e.g. [[https://userbase.kde.org/Session_Environment_Variables][Plasma session environment variables]]), -4. the display server, -5. the distro? - - e.g. Debian's SSDM [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=794419][used not to]] source =~/.profile=, - - and [[https://github.com/sddm/sddm/issues/448][developers said]] it should not anyway, - - except [[https://github.com/sddm/sddm/issues/1551][it has provisions to do so]]? -6. [[https://man7.org/linux/man-pages/man8/pam_env.8.html][PAM]]? - -Empirically with Plasma on both Tumbleweed (20230929) and Debian 12, -=~/.profile= seems to be run for both TTY and GUI sessions. Unclear -what arcane magic is causing that: probably the login manager - on -Tumbleweed =/usr/share/sddm/scripts/Xsession= seems to start a ~bash ---login~, but getting lost in the =/usr/etc/X11/xdm/= weeds trying to -track down who might source that =Xesssion= script. - -=~/.profile= it is, then 🤞 - -(For other DEs on X, my recollection was that =~/.xsessionrc= is the -way to go for GUI sessions? No clue about Wayland) - -* ~man~ pages -=manpath(5)= says: - -#+begin_quote -By default, man-db examines the user's =$PATH=. For each -=path_element= found there, it adds =manpath_element= to the search -path. - -If there is no =MANPATH_MAP= line in the configuration file for a -given =path_element=, then it adds all of =path_element/../man=, -=path_element/man=, =path_element/../share=man=, and -=path_element/shared/=man= that exist as directories to the search -path. -#+end_quote - -How convenient! Setting =PATH= automatically takes care of ~man~ -then… unless =MANPATH= is set, in which case that logic is bypassed. - -** openSUSE -=/usr/etc/profile.d/manpath.sh= [fn:: sourced by =/etc/profile=, -sourced by =/usr/etc/profile= and =~/.profile=.] plays a little danse -to (a) query ~manpath~, which runs the heuristic described above (b) -set the resulting value "in stone" by exporting =MANPATH=. - -This means that ~man~ will not consider any =PATH= element added by -the user after that profile fragment was sourced. - -Solutions: - -1. Unset =MANPATH= in =~/.profile=, after =/etc/profile= is read. - =~/.profile= is "read each time a login shell is strated. All - other interactive shells will only read .bashrc", so unclear - whether that will affect graphical sessions. -2. Extend =PATH= with apps /before/ those profile fragments are - loaded. Unclear how to accomplish that: - - [[https://wiki.archlinux.org/title/environment_variables#Per_user][systemd user environment variables]]? Seems to be limited to - =KEY=VALUE= directives; I would like to run a bit of logic that - will automatically add every =~/apps/*/bin= directory. - - [[https://userbase.kde.org/Session_Environment_Variables][Plasma session environment variables]]? Presumably will not affect - TTYs? -3. Embrace the distro's method: if =MANPATH= is set, extend it. - -Went with solution 1 because empirically =~/.profile= seems to be -sourced for GUI sessions (as noted in § =PATH=). - -* ~info~ pages -Similar to ~man~, ~info~ knows to work with =PATH=. The priority -[[https://git.savannah.gnu.org/cgit/texinfo.git/tree/info/infopath.c?h=texinfo-7.0.3#n41][seems to be]]: - -1. the =INFOPATH= environment variable, -2. the =INFODIR= build macro, /if =infopath-no-defaults= is not set/, -3. the =DEFAULT_INFOPATH= build macro, /if =INFOPATH= is unset or ends - with a trailing colon/. - -Any of these can contain the =PATH= literal, which means "iterate over -=${PATH}= and add nearby =share/info= & =info= directories". By -default, =DEFAULT_INFOPATH= contains =PATH= 🥳 but =INFODIR= has -priority and is set to something boring like =/usr/share/info= 😒 - -Solution: - -#+begin_src bash -cat <<EOF > ~/.infokey -#var -# Disable INFODIR; fall back to DEFAULT_INFOPATH which prioritizes -# program PATH over /usr/share/info. -infopath-no-defaults=On -EOF -#+end_src - -* DONE systemd services -=systemd.unit(5)= § "User Unit Search Path" mentions a couple of -variables that we could append: - -- =$XDG_CONFIG_DIRS/systemd/user/*= -- =$XDG_DATA_DIRS/systemd/user/*= - -And: - -#+begin_quote -When the variable =$SYSTEMD_UNIT_PATH= is set, the contents of this -variable overrides the unit load path. If =$SYSTEMD_UNIT_PATH= ends -with an empty component (=:=), the usual unit load path will be -appended to the contents of the variable. -#+end_quote - -So we could either: - -1. find the directory 𝒟 where an app tucks =systemd/user= in its - installation tree, and append 𝒟 to one of the XDG variables, -2. find the directory where an app tucks its =.service= files, and - append that directory to =SYSTEMD_UNIT_PATH=, keeping a final - colon. - -(1) could feed multiple birds with one scone: in particular, -=XDG_DATA_DIRS= is used for other purposes (see § Desktop entry -files). Serendipitously, [[https://github.com/systemd/systemd/blob/1d87a00a951dca801c8ccd79c1460fa91efa7dce/src/basic/path-lookup.c#L147][the systemd sources]] suggest =DATA= over -=CONFIG= for our purposes: - -#+begin_src c - /* Implement the mechanisms defined in - * - * https://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html - * - * We look in both the config and the data dirs because we - * want to encourage that distributors ship their unit files - * as data, and allow overriding as configuration. - */ -#+end_src - -* DONE Desktop entry files -The Freedesktop [[https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html][Desktop Menu]] and [[https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html][Desktop Entry]] specs spell out how -=XDG_DATA_DIRS= will be searched for =applications/*.desktop= files. - -* TODO ~bash~ completions - -* Putting it all together -Presenting [[./apps-demo/activate][=~/apps/activate=]], to be sourced from =~/.profile=: - -#+INCLUDE: "apps-demo/activate" src sh - -* Resources -** [[https://nullprogram.com/blog/2017/06/19/][nullprogram.com]] — Building and Installing Software in $HOME -Explains how to set things up so that one can use =~/.local= as a -first-class citizen for applications, libraries and development -resources (headers, pkg-config, manpages). - -** [[https://specifications.freedesktop.org][specifications.freedesktop.org]] — Freedesktop.org Specifications -Hosts the specifications for the behavior and environment variables -most GNU/Linux distros (that I have experience with) adhere to, e.g. - -- the [[https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html][Base Directory spec]] :: defines the various - =XDG_*_@(HOME|DIR|DIRS)= variables referenced here; -- the [[https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html][Desktop Entry spec]] :: explains the significance of a desktop - file's filename with respect to its position within =XDG_DATA_DIRS=; -- the [[https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html][Desktop Menu spec]] :: defines the expected file locations for - desktop files (and more) with respect to XDG base directories. - -** [[https://wiki.archlinux.org/title/Environment_variables#Per_user][wiki.archlinux.org]] — Environment variables § Per user - ArchWiki -A thorough overview of the myriad of ways users can amend environment -variables, as examined in § PATH. diff --git a/guides/setups/operating-systems/console.org b/guides/setups/operating-systems/console.org deleted file mode 100644 index a6839c1..0000000 --- a/guides/setups/operating-systems/console.org +++ /dev/null @@ -1,19 +0,0 @@ -* Keyboard settings -Debian's =console-setup= package provides =setupcon=, a neat utility -that reads XKB settings from =/etc/default/keyboard= and translates -them to whatever format the Linux console understands. - -To get something similar to =ctrl:nocaps= on distros that do not -feature this utility: -#+begin_src sh -$ localectl | grep "VC Keymap" # To spot the current KEYMAP. -$ sudo mkdir -p /usr/local/share/kbd/keymaps -# KEYMAPS_DIR: depending on the distro: -# - /usr/share/kbd/keymaps/xkb -# - /lib/kbd/keymaps/xkb -$ gunzip --stdout ${KEYMAPS_DIR}/${KEYMAP}.map.gz | - sed 's/^keycode 58 = .*$/keycode 58 = Control/' | - sudo tee /usr/local/share/kbd/keymaps/${KEYMAP}-nocaps.map -# In /etc/vconsole.conf, change KEYMAP to ^this^ absolute filename. -# Reboot. -#+end_src diff --git a/guides/setups/operating-systems/opensuse.org b/guides/setups/operating-systems/opensuse.org deleted file mode 100644 index 5ea173c..0000000 --- a/guides/setups/operating-systems/opensuse.org +++ /dev/null @@ -1,29 +0,0 @@ -* Packages -… that took me more than one minute to find. -** spell-checking -- hunspell -- myspell-fr_FR -* HOWTO -** Open ports -#+begin_src sh -$ firewall-cmd --add-port=8000/tcp -$ firewall-cmd --add-service=mdns -#+end_src -To make permanent, either: -- run the command with =--permanent=, and restart ~firewalld~ for - immediate application, -- run the command /a second time/ with =--permanent=, -- run ~firewall-cmd --runtime-to-permanent~. -** Auto-mount second disk under =$HOME/media= -#+begin_example -$ lsblk --fs -[…] -nvme0n1 -└─nvme0n1p1 xfs […UUID…] -$ sudo $edit /etc/fstab -[… add: -UUID=[…UUID…] […$HOME…]/media xfs user,exec 0 0 -…] -$ mkdir ~/media -$ mount ~/media -#+end_example |
