Skip to content

Learning Linux like its 1995

Using Arch Linux (for Hyprland experiments) takes me back to the mid 1990's when I was learning Linux from the ground up.

At the end of 1994 I was installing Slackware Linux (from 82 floppy disks) and spending hours figuring out what to compile into the Linux kernel (before the days of dynamic loading). There was a huge amount to learn (usually without my own internet connection).

Arch Linux wiki pages have a huge amount of information, showing all the possible options for every piece of software and service. This does present a dilemma of choice.

Having experienced many years with Linux, I know many of the concepts and software associated with a Linux system. I don't need to read all the options, but do find myself scrolling a lot until I find something familiar (or simple).

I have an Arch Linux desktop using Hyprland up and running, using HyDE to configure all the extra tools to make Hyprland useable as a desktop (although there are still some things to tweak and add).

Hyprland configured with HyDE after fixing waybar configuration

LSP file renaming with Neovim & LSP still fails using the Neovim LSP client, although it is fairly simple to rename a namespace and its corresponding file name using clojure-lsp command line.

Movies & Shows this week:

  • Death on the Nile 1978 with Peter Ustinov as Hercule Poirot, including an all-star cast from the time including David Niven, Angela Landsbury and Betty Davis.
  • Star Trek - The Original Series started watching this week as a way to switch off each evening, or more likely listen too whilst I write up the days journal.

Goalsλ︎

The goals for this month include

  • documenting Neovim & Conjure workflow
  • meaningful exercise every day (health permitting)
  • bicycle ride (weather permitting)
  • avoid Hyprland turning into a huge time sync (couch potato time only)

Neovimλ︎

LSP Renaming of namespaces and filenames is the only feature I do not have working with Clojure LSP and Neovim. nvim-lspconfig supports Clojure but reports the following error when trying to rename a namespace name.

Error on prepareRename: Can't rename - client does not support file renames.

The nvim-lsp-file-operations plugin was used but with no success as yet (not sure why).

clojure-lsp command lineλ︎

clojure-lsp is available on the command line path, so a command like this will change the namespace and the namespaces corresponding file name.

Clojure LSP rename namespace via command line

clojure-lsp rename --from gameboard.gameboard.api.scoreboard --to practicalli.gameboard.api.scores

Hyprlandλ︎

Hyprland has already taken up a lot of time with getting the basics up and running. It will easily take weeks and most likely months to have a rich configuration with all the eye candy I have seen. Investing that kind of time is not valuable to me, but I would still like to have an engaing setup.

There is much discussion about configuring Hyprland and lots of different community projects.

 waybar

(waybar:27164): Gtk-WARNING **: 23:35:32.704: Theme parsing error: gtk.css:6691:68: Invalid name of pseudo-class
[2025-01-18 23:35:32.740] [info] Using configuration file /home/practicalli/.config/waybar/config.jsonc
[2025-01-18 23:35:32.741] [error] Error parsing JSON: * Line 71, Column 18
  Syntax error: value, object or array expected.

The error seems related to the "icon-size" key which had the value ${i_task which seems incomplete structure.

Chaninging "icon-size" to a specific icon size seems to make waybar run (at least via the command line)

/home/practicalli/.config/waybar/config.jsonc
"wlr/taskbar": {
    "all-outputs": true,
    "active-first": true,
    "markup": true,
    "format": "{icon}",
    "rotate": "0",
    // "icon-size": ${i_task  #(1)
    "icon-size": "8"
    },
  1. icon-size line seems incomplete, commented and replaced with a fixed value

icon-size fixed in recent commit

commit #936ea5a fixes the bug in this code

The waybar command in a terminal runs waybar okay, although there are some warnings to review.

 waybar

(waybar:27230): Gtk-WARNING **: 23:37:28.210: Theme parsing error: gtk.css:6691:68: Invalid name of pseudo-class
[2025-01-18 23:37:28.246] [info] Using configuration file /home/practicalli/.config/waybar/config.jsonc
[2025-01-18 23:37:28.250] [info] Unable to receive desktop appearance: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
[2025-01-18 23:37:28.250] [info] Using CSS file /home/practicalli/.config/waybar/style.css
[2025-01-18 23:37:28.262] [info] Hyprland IPC starting
[2025-01-18 23:37:28.263] [info] Loading persistent workspaces from Waybar config
[2025-01-18 23:37:28.263] [info] Loading persistent workspaces from Hyprland workspace rules
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event0 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event1 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event2 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event3 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event4 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event5 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event6 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event7 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event8 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event9 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event10 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/mice (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/mouse0 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/event11 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] Can't open /dev/input/mouse1 (are you in the input group?): EACCES Permission denied
[2025-01-18 23:37:28.264] [warning] module keyboard-state: Disabling module "keyboard-state", Failed to find keyboard device: EACCES Permission denied
[2025-01-18 23:37:28.488] [info] Bar configured (width: 1600, height: 30) for output: LVDS-1

** (waybar:27230): WARNING **: 23:37:28.492: Status Notifier Item with bus name ':1.28' and object path '/org/ayatana/NotificationItem/udiskie' is already registered

** (waybar:27230): WARNING **: 23:37:28.492: Status Notifier Item with bus name ':1.17' and object path '/org/ayatana/NotificationItem/nm_applet' is already registered
[2025-01-18 23:37:28.497] [error] Item 'udiskie': Could not find an icon named 'drive-removable-media-usb-panel' and no pixmap given.

add user to input groupλ︎

A user account can be added to a group using either gpasswd or usermod

Add user to existing group

 sudo usermod -aG input practicalli
[sudo] password for practicalli:

Arch Linuxλ︎

Arch Linux has many subtle differences from Debian Linux, but most differences were fairly easy to find by an internet search.

Setting local time is almost the same as Debian, except Arch Linux uses timedatectl command rather than systemctl on Debian.

Storing a Git SSH key is more challenging (as I am not running a Gnome Destop) as there is no keyring. Currently the agent needs to be started and then the key added to the agent.

Set local timeλ︎

Set the local time via the command line iusing the timectrl command

ArchLinux uses an NTP server that automatically sets the local time from a remote server (at least after installing HyDE).

To manually set the time with timedatectl the NTP server must be disabled first.

Disable NTP server

timedatectl set-ntp false

Set the local time

timedatectl set-time "2025-01-18 22:00:00"

enable NTP server

timedatectl set-ntp true

Check current date

date
Sat Jan 18 10:00:09 PM UTC 2025
timedatectl --help
timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

Commands:
  status                   Show current time settings
  show                     Show properties of systemd-timedated
  set-time TIME            Set system time
  set-timezone ZONE        Set system time zone
  list-timezones           Show known time zones
  set-local-rtc BOOL       Control whether RTC is in local time
  set-ntp BOOL             Enable or disable network time synchronization

systemd-timesyncd Commands:
  timesync-status          Show status of systemd-timesyncd
  show-timesync            Show properties of systemd-timesyncd
  ntp-servers INTERFACE SERVER…
                           Set the interface specific NTP servers
  revert INTERFACE         Revert the interface specific NTP servers

Options:
  -h --help                Show this help message
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --adjust-system-clock Adjust system clock when changing local RTC mode
     --monitor             Monitor status of systemd-timesyncd
  -p --property=NAME       Show only properties by this name
  -a --all                 Show all properties, including empty ones
     --value               When showing properties, only print the value
  -P NAME                  Equivalent to --value --property=NAME

See the timedatectl(1) man page for details.

Store Git SSH Keyλ︎

Start the SSH agent

ssh-agent

Set the SSH agent connection details in the current terminal shell

eval $(ssh-agent)

Add the key to the agent which will prompt for the passphrase of the SSH key.

ssh-add ~/.ssh/engineering

Command that use the SSH key will now retrieve the details from the agent, avoiding the need to enter the passphrase again.

The current limitation is that this needs to be done each time a terminal session is run. Ideally the SSH key would be registered in the desktop keyring and the passphrase automatically unlocked when the user logs in.

Healthλ︎

My health took more of a knock this week as I am finding it very difficult to walk. I've had pain in my right hip for a couple of weeks and on Friday I started walking and felt a sharp pain. Every step with my right leg is painful and going up and down stairs is particularly painful.

The hip pain coupled with my left knee pain significantly limiting my ability to exercise this week.

Pain started to ease over the weekend, after a very sleepy Saturday and Sunday.


Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social @practical_li