diff --git a/docs/posts/2025/january/13.md b/docs/posts/2025/january/13.md new file mode 100644 index 00000000..09a2a2db --- /dev/null +++ b/docs/posts/2025/january/13.md @@ -0,0 +1,271 @@ +--- +title: Learning Linux like its 1995 +date: 2025-01-13 +authors: + - practicalli +categories: + - practicalli +tags: + - clojure +--- + +Using [Arch Linux](#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](#hyprland), 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](https://github.com/practicalli/graphic-design/blob/live/os/hyprland/hyprland-hyde-with-waybar.png?raw=true){loading=lazy} + +[LSP file renaming with Neovim & LSP](#neovim) 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](https://en.wikipedia.org/wiki/Death_on_the_Nile_(1978_film)) 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](https://en.wikipedia.org/wiki/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. + +```shell +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. + +!!! NOTE "Clojure LSP rename namespace via command line" + ```shell + 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. + + + + +```shell +❯ 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) + +```config title="/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 + + +The `waybar` command in a terminal runs waybar okay, although there are some warnings to review. + +```shell +❯ 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` + +!!! NOTE "Add user to existing group" + ```shell + ❯ 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](#set-local-time) is almost the same as Debian, except Arch Linux uses `timedatectl` command rather than `systemctl` on Debian. + +[Storing a Git SSH key](#store-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. + +!!! NOTE "Disable NTP server" + ```shell + timedatectl set-ntp false + ``` + +!!! NOTE "Set the local time" + ```shell + timedatectl set-time "2025-01-18 22:00:00" + ``` + +!!! NOTE "enable NTP server" + ```shell + timedatectl set-ntp true + ``` + +!!! NOTE "Check current date" + ```shell + date + Sat Jan 18 10:00:09 PM UTC 2025 + ``` + +??? EXAMPLE "timedatectl --help" + ```shell + 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 + +```shell +ssh-agent +``` + +Set the SSH agent connection details in the current terminal shell + +```shell +eval $(ssh-agent) +``` + +Add the key to the agent which will prompt for the passphrase of the SSH key. + +```shell +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. + +[:globe_with_meridians: Practical.li Website](https://practical.li){target=_blank .md-button} + +[:fontawesome-brands-github: Practical.li GitHub Org](https://github.com/practicalli){target=_blank .md-button} +[:fontawesome-brands-github: practicalli-johnny profile](https://github.com/practicalli-johnny){target=_blank .md-button} + +[:fontawesome-brands-mastodon: @practicalli@clj.social](https://clj.social/@practicalli){target=_blank .md-button} +[:fontawesome-brands-twitter: @practical_li](https://twitter.com/practcial_li){target=_blank .md-button}