From a27cc6ff5e6f851fd499cfa03a95922fb58c3fd7 Mon Sep 17 00:00:00 2001 From: David Young Date: Sat, 31 Oct 2026 08:34:17 -0600 Subject: [PATCH] updates to the content --- content/_index.md | 10 ++--- content/contribute.md | 9 +++-- content/install.md | 12 +++++- content/software/_index.md | 6 +-- content/software/bitwarden.md | 2 +- content/software/mise.md | 22 ++++++++--- content/software/openssh.md | 12 +++++- content/software/ruby-on-rails.md | 6 ++- content/software/vscodium.md | 2 +- content/software/zig.md | 32 ++++++++++++++++ content/system.md | 62 ++++++++++++++++++++++++++++++- content/utilities.md | 14 ++++--- hugo.toml | 2 +- 13 files changed, 158 insertions(+), 33 deletions(-) create mode 100644 content/software/zig.md diff --git a/content/_index.md b/content/_index.md index c7a76ec..13bc0dd 100644 --- a/content/_index.md +++ b/content/_index.md @@ -29,15 +29,15 @@ sections: - label: "A tiling desktop you drive from the keyboard" body: "[GNOME](https://www.gnome.org) with the Tiling Shell extension: a flexible tiling system you can lay out however you like, Super + arrow keys to move windows, and the full mouse-friendly desktop when you want it." - label: "The software you'd install anyway" - body: "From pacman, the AUR, Flathub and mise: browsers, messaging, office, media, notes, remote desktop, database clients and local AI, plus a full developer toolchain." + body: "From pacman, the AUR and Flathub: browsers, messaging, office, media, notes, remote desktop, database clients and local AI, plus a full developer toolchain, with mise for any other language you want." - label: "Sandboxed AI agents" body: "opencode, Hermes Agent, Cline Desktop and Claude Code run in a sandbox that can only change your project folder and can't read your keys or passwords." - label: "Snapshots and backups" body: "Snapper snapshots / before every update. `configure` adds encrypted, daily restic backups of your home folder to your Nextcloud." - label: "Safe by default" - body: "The ufw firewall is on, Docker can't punch holes in it, and [`audit`](/utilities/#audit) shows every open port and who can reach it." + body: "The ufw firewall is on, Docker can't punch holes in it, SSH takes keys, not passwords, and [`audit`](/utilities/#audit) shows every open port and who can reach it." - label: "One command to stay current" - body: "`update` snapshots, then updates Arch, GNOME, AUR, Flatpaks, Ruby, extensions and firmware, and tells you if a step failed." + body: "`update` snapshots, then updates Arch, GNOME, AUR, Flatpaks, your mise languages, extensions and firmware, and tells you if a step failed." ctas: - label: "Browse the software" url: "/software/" @@ -52,11 +52,11 @@ sections: items: - value: "1" label: "command to install, after Arch and GNOME" - - value: "48" + - value: "43" label: "Flatpak apps, from browsers to video editing" - value: "4" label: "AI coding agents, each in a sandbox" - - value: "20" + - value: "21" label: "steps that `update` runs, in order" - type: steps diff --git a/content/contribute.md b/content/contribute.md index 92bdad9..f139101 100644 --- a/content/contribute.md +++ b/content/contribute.md @@ -12,15 +12,18 @@ sections: - label: "Open the repository" url: "https://gitea.federated.computer/Federated_Computer/coredesktop" style: primary + - label: "Report an issue" + url: "https://gitea.federated.computer/Federated_Computer/coredesktop/issues" + style: ghost - type: steps kicker: "Ways to help" headline: "Pick one." items: - title: "Suggest software" - body: "Missing a title or service you use every day? Tell us, and say why." + body: "Missing a title or service you use every day? [Open an issue](https://gitea.federated.computer/Federated_Computer/coredesktop/issues) and say why. Found a bug? Report it there too." - title: "Send a pull request" - body: "Packages live in `packages.conf`, Flatpaks in `install-flatpaks.sh`, update steps in `updates.d/` and setup in `configure.d/`." + body: "Packages live in `packages.conf`, Flatpaks in `install-flatpaks.sh`, update steps in `updates.d/` and setup in `configure.d/`. Every push is checked with [shellcheck](https://www.shellcheck.net); run `make check` first, which runs shellcheck and the bats tests." - title: "Build a sibling" body: "Have something that's only for you or your team? Make it a [sibling project](/siblings/) instead." @@ -43,7 +46,7 @@ sections: body: | Copyright 2026 Federated Computer, Inc. Permission is granted, free of charge, to anyone who gets a copy of this software to use, copy, modify, merge, publish, distribute, sublicense and sell it, as long as the copyright and permission notice are included. The software is provided as is, without warranty of any kind. - Read the full text in [LiCENSE.md](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/LiCENSE.md). + Read the full text in [LICENSE.md](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/LICENSE.md). - type: text kicker: "Thanks" diff --git a/content/install.md b/content/install.md index cf20033..7ff51f4 100644 --- a/content/install.md +++ b/content/install.md @@ -16,6 +16,16 @@ sections: url: "https://archlinux.org/download/" style: ghost + - type: checklist + id: requirements + kicker: "Requirements" + headline: "What you need." + items: + - "A 64-bit PC (x86_64) that can run Arch Linux, with an internet connection." + - "At least **100 GB for `/`**, the root partition. CoreDesktop installs about 50 GB of software, and `update` needs at least 10 GB free." + - "A fresh Arch Linux install with GNOME, as below. CoreDesktop changes [system settings](/system/#what-coredesktop-changes), so it's best not to run it on a machine you've already set up the way you like." + - "A [Federated Computer Core](https://federated.computer/) is optional. Without one, everything works except what `configure core` sets up: your Core's apps, files, calendars and email, its Tailscale network, and backups." + - type: steps kicker: "Part one" headline: "Installing Arch." @@ -66,7 +76,7 @@ sections: headline: "While it runs, and after." items: - title: "Enter your password once" - body: "It asks once, at the start. Then be patient: it takes a while." + body: "It asks once, at the start. Then it checks the machine: it stops if this isn't Arch, you're root, you can't use sudo or there's no internet, and asks before going on with less than about 60 GB free or `/` not on btrfs. Then be patient: it takes a while." - title: "Run configure" body: "At the end it offers to run `configure`, which connects your Federated Core, sets up backups and signs you in to the AI agents. If a newer kernel came in, it asks you to reboot first." - title: "If something fails, run it again" diff --git a/content/software/_index.md b/content/software/_index.md index 0d1164e..d405e39 100644 --- a/content/software/_index.md +++ b/content/software/_index.md @@ -1,6 +1,6 @@ --- title: "Software" -description: "What Federated CoreDesktop installs: pacman packages, AUR packages, 48 Flatpaks, Ruby and Rails with mise, and a full set of development tools." +description: "What Federated CoreDesktop installs: pacman packages, AUR packages, 43 Flatpaks, a full set of development tools, and mise for any other language." sections: - type: hero compact: true @@ -25,8 +25,8 @@ sections: rows: - ["pacman", "[Arch's own packages](https://archlinux.org/packages/): neovim, tmux, Go, Rust, Docker, Tailscale, Element, LibreOffice and more, plus Federated Computer's own packages, such as [Federated Calendar](/software/federated-calendar/), from its `[federated]` repository", "[packages.conf](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/packages.conf)"] - ["AUR", "Community packages, built and kept up to date with yay: Helium Browser, Winboat and more", "[packages.conf](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/packages.conf)"] - - ["Flathub", "48 desktop apps in their own sandboxes", "[install-flatpaks.sh](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/install-flatpaks.sh)"] - - ["mise", "Ruby and Rails", "[install-mise-ruby-rails.sh](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/install-mise-ruby-rails.sh)"] + - ["Flathub", "43 desktop apps in their own sandboxes", "[install-flatpaks.sh](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/install-flatpaks.sh)"] + - ["mise", "Only the languages you choose with `configure languages`, such as Ruby on Rails, Java or Deno", "[40-languages.sh](https://gitea.federated.computer/Federated_Computer/coredesktop/src/branch/main/configure.d/40-languages.sh)"] - type: catalog id: catalog diff --git a/content/software/bitwarden.md b/content/software/bitwarden.md index 7b4aba7..82a76d8 100644 --- a/content/software/bitwarden.md +++ b/content/software/bitwarden.md @@ -27,6 +27,6 @@ The desktop app can also store SSH keys and act as an SSH agent, so `ssh` and `g ## On CoreDesktop -CoreDesktop installs the Bitwarden desktop app from pacman. Open it from the app menu, or run `bitwarden-desktop`. Install and every `update` make sure your `~/.bashrc` has a line that points `SSH_AUTH_SOCK` at `~/.bitwarden-ssh-agent.sock`, so once you turn on the SSH agent in Bitwarden's settings, your terminal uses the keys in your vault. +CoreDesktop installs the Bitwarden desktop app from pacman. Open it from the app menu, or run `bitwarden-desktop`. Install and every `update` make sure your `~/.bashrc` has a line that points `SSH_AUTH_SOCK` at `~/.bitwarden-ssh-agent.sock` while Bitwarden is running its SSH agent, and leaves it on GNOME's agent otherwise. So once you turn on the SSH agent in Bitwarden's settings, terminals opened after Bitwarden starts use the keys in your vault; a terminal opened before then uses GNOME's agent, so open a new one. When you set up [backups](/utilities/#configure), save the passphrase in Bitwarden. The [AI sandbox](/ai-sandbox/) keeps agents out of `~/.config/Bitwarden`. `update` keeps Bitwarden current with the rest of the Arch packages. diff --git a/content/software/mise.md b/content/software/mise.md index 74f982c..04ee04b 100644 --- a/content/software/mise.md +++ b/content/software/mise.md @@ -1,8 +1,9 @@ --- title: "mise" category: "Languages and runtimes" -tagline: "Installs and switches versions of Ruby, Node, Python and other tools, per project." -source: "installer" +tagline: "Installs the languages CoreDesktop doesn't, and the version each project needs." +source: "pacman" +package: "mise" command: "mise" website: "https://mise.jdx.dev/" code: "https://github.com/jdx/mise" @@ -10,18 +11,27 @@ code: "https://github.com/jdx/mise" ## What it is -mise is a version manager for programming languages and developer tools. It installs as many versions of Ruby, Node.js, Python, Go and hundreds of other tools as you need, and switches between them automatically as you move between projects, based on a `mise.toml` (or an asdf `.tool-versions` file) in each project. It can also set environment variables and run tasks for a project. +mise is a version manager for programming languages and developer tools. It installs as many versions of Ruby, Java, Deno, Node.js, Python and hundreds of other tools as you need, and switches between them automatically as you move between projects, based on a `mise.toml` (or an asdf `.tool-versions` file) in each project. It can also set environment variables and run tasks for a project. ## Why it's here +- **The languages you choose.** Go, Rust, Node.js, Python, Bun and Zig come from pacman; mise installs anything else. - **The right version per project.** Change directory and the versions change with you. - **One tool for every language.** No separate rbenv, nvm and pyenv. -- **Fast.** It changes your PATH directly instead of running every command through a wrapper. ## On CoreDesktop -CoreDesktop installs mise with its official installer from mise.run, which puts it in `~/.local/bin` and turns it on in `~/.bashrc`. CoreDesktop uses it to install [Ruby and Rails](/software/ruby-on-rails/), and `update` runs `mise self-update` and upgrades Ruby. Commands run over SSH can find tools installed with mise, and the `ga` function, which creates a Git worktree, trusts the new worktree's mise config. +mise is installed from pacman, and CoreDesktop's shell setup turns it on. To add languages, run `configure languages`: it asks whether you want [Ruby on Rails](/software/ruby-on-rails/), then lets you name anything else mise can install, with a version, such as `java@21 deno@latest`. `mise registry` lists what it can install. + +`update` keeps what you install up to date within the version you chose: `latest` moves to each new release, and `21` stays on version 21. To remove a language, run `mise unuse -g `, for example `mise unuse -g java`. + +If a project needs a version other than the one installed, tell mise in the project's folder: ``` -mise use node@22 +cd ~/Projects/my-app +mise use node@20 ``` + +This writes a `mise.toml` in the project. Inside that folder `node` is version 20, and everywhere else it's the version from pacman. Commit `mise.toml` with your project, and anyone else using mise gets the same version. + +Commands run over SSH can find tools installed with mise, and the `ga` function, which creates a Git worktree, trusts the new worktree's mise config. Machines that had mise from its own installer switch to the pacman package on their next `update`. diff --git a/content/software/openssh.md b/content/software/openssh.md index 0678224..0e3ad2b 100644 --- a/content/software/openssh.md +++ b/content/software/openssh.md @@ -25,6 +25,14 @@ ssh you@machine.local ## On CoreDesktop -OpenSSH is installed from pacman and `sshd.service` is enabled, so you can SSH into this computer. The firewall allows SSH on port 22, and Avahi advertises it on your LAN, so other machines can reach this one as `.local`. Commands run with `ssh machine command` can find tools in `~/.local/bin` and mise. +OpenSSH is installed from pacman and `sshd.service` is enabled, so you can SSH into this computer. It accepts keys only, not passwords, so nobody on the same Wi-Fi can try to guess yours. Copy your public key to this computer once, from the computer you connect from: -For the client, CoreDesktop sets keepalives so a dropped connection is noticed within a minute (your `~/.ssh/config` still wins per host) and points `SSH_AUTH_SOCK` at Bitwarden's SSH agent. It also adds shell functions for port forwarding: `fip ...` forwards local ports to the same ports on a host, `dip ...` stops them, and `lip` lists them. `update` keeps OpenSSH current with the pacman packages. +``` +ssh-copy-id you@machine.local +``` + +To allow passwords again, delete `/etc/ssh/sshd_config.d/10-coredesktop-keys-only.conf` and run `sudo systemctl reload sshd`. On machines installed earlier, where someone has logged in over SSH with a password, `update` leaves passwords on so nobody is locked out; add your key, then run `bash ~/.local/share/coredesktop/system/sshd.sh` to switch. + +The firewall allows SSH on port 22, and Avahi advertises it on your LAN, so other machines can reach this one as `.local`. Commands run with `ssh machine command` can find tools in `~/.local/bin` and mise. + +For the client, CoreDesktop sets keepalives so a dropped connection is noticed within a minute (your `~/.ssh/config` still wins per host) and uses [Bitwarden](/software/bitwarden/)'s SSH agent while Bitwarden is running it, and GNOME's otherwise. It also adds shell functions for port forwarding: `fip ...` forwards local ports to the same ports on a host, `dip ...` stops them, and `lip` lists them. `update` keeps OpenSSH current with the pacman packages. diff --git a/content/software/ruby-on-rails.md b/content/software/ruby-on-rails.md index 77c4ec9..d569d17 100644 --- a/content/software/ruby-on-rails.md +++ b/content/software/ruby-on-rails.md @@ -1,7 +1,7 @@ --- title: "Ruby and Rails" category: "Languages and runtimes" -tagline: "The Ruby language and the Rails web framework, installed with mise and kept up to date." +tagline: "The Ruby language and the Rails web framework, installed with mise if you choose them." source: "mise" command: "rails" website: "https://rubyonrails.org/" @@ -27,7 +27,9 @@ Ruby libraries are called gems; Bundler installs the ones a project needs from i ## On CoreDesktop -CoreDesktop installs Ruby with [mise](/software/mise/) rather than pacman: it installs the latest Ruby and makes it your default (`mise use -g ruby@latest`), then installs the Bundler and Rails gems. Each `update` updates mise, moves you to the newest Ruby, and runs `gem update` to update your gems, Rails included. +Ruby and Rails aren't installed for everyone. To add them, run `configure languages` and answer yes to Ruby on Rails. It installs the latest Ruby with [mise](/software/mise/) (`mise use -g ruby@latest`), then the Bundler and Rails gems. Each new version of Ruby gets Rails and Bundler automatically, and `update` moves you to the newest Ruby and updates Rails and Bundler, leaving your other gems as they are. + +Machines that had Ruby from an earlier CoreDesktop keep it, and `update` reinstalls Rails if an earlier move to a new Ruby lost it. If you don't use Ruby, remove it with `mise unuse -g ruby`. Start a new app with: diff --git a/content/software/vscodium.md b/content/software/vscodium.md index bc56bb1..f4321a6 100644 --- a/content/software/vscodium.md +++ b/content/software/vscodium.md @@ -22,6 +22,6 @@ Extensions come from Open VSX, an open registry, rather than Microsoft's marketp ## On CoreDesktop -VSCodium is installed from Flathub. Open it from the app menu. Some of its extensions run local servers; `audit` lists their ports and shows that only this computer can reach them. +VSCodium is installed from Flathub, instead of VS Code. Open it from the app menu. For an extension only Microsoft's marketplace has, such as Remote-SSH, install VS Code yourself with `flatpak install flathub com.visualstudio.code`, and `update` leaves it alone. Machines that had VS Code from an earlier CoreDesktop have it removed once; its settings stay in `~/.var/app/com.visualstudio.code`. Some of its extensions run local servers; `audit` lists their ports and shows that only this computer can reach them. `update` keeps VSCodium current with the rest of the Flatpaks. diff --git a/content/software/zig.md b/content/software/zig.md new file mode 100644 index 0000000..ce16cdb --- /dev/null +++ b/content/software/zig.md @@ -0,0 +1,32 @@ +--- +title: "Zig" +category: "Languages and runtimes" +tagline: "A small systems language, and a C and C++ compiler that cross-compiles out of the box." +source: "pacman" +package: "zig" +command: "zig" +website: "https://ziglang.org/" +code: "https://codeberg.org/ziglang/zig" +links: + - name: "Zig documentation" + url: "https://ziglang.org/documentation/master/" +--- + +## What it is + +Zig is a general-purpose systems programming language, meant as a simpler alternative to C. It has no hidden control flow or hidden memory allocations, runs code at compile time with `comptime`, and comes with its own build system. The `zig` command can also compile C and C++, and cross-compile for other operating systems and processors without extra toolchains. + +## Why it's here + +- **Low-level without the surprises.** Manual memory management, with checks that catch many mistakes in debug builds. +- **A better C toolchain.** `zig cc` builds C code for other targets with nothing else to install. +- **Builds the tools you use.** Some terminal apps and libraries are written in Zig and build with it. + +## On CoreDesktop + +Zig is installed from pacman, alongside Go, Rust, Node.js, Python and Bun. `update` keeps it current with the rest of the pacman packages. For another version in one project, use [mise](/software/mise/). + +``` +zig init +zig build run +``` diff --git a/content/system.md b/content/system.md index 7a53f7d..be2b8f7 100644 --- a/content/system.md +++ b/content/system.md @@ -1,6 +1,6 @@ --- title: "System" -description: "How Federated CoreDesktop sets up your system: tiling, the shell, the firewall, Snapper snapshots, GPU drivers, mDNS, printing, open-port audits and sensible defaults." +description: "How Federated CoreDesktop sets up your system: tiling, the shell, SSH, the firewall, Snapper snapshots, GPU drivers, mDNS, printing and sensible defaults, every setting it changes, and how to undo it." sections: - type: hero compact: true @@ -35,7 +35,7 @@ sections: kicker: "Firewall" headline: "ufw is on, and Docker can't get around it." body: | - Incoming connections are blocked except SSH (22), mDNS (5353/udp), LocalSend (53317) and anything arriving over Tailscale. + Incoming connections are blocked except SSH (22, keys only), mDNS (5353/udp), LocalSend (53317) and anything arriving over Tailscale. Docker normally publishes container ports around ufw, so **ufw-docker** is installed too. To let a container's port through, or to open a port for something else, such as a dev server you want to reach from another machine: @@ -47,6 +47,25 @@ sections: To see every open port and who can reach it, run [audit](/utilities/#audit). + - type: text + id: ssh + kicker: "SSH" + headline: "Reach this machine with a key, not a password." + body: | + The SSH server is on, so you can reach this computer from your other ones, and it accepts keys only. On a laptop at a café or a conference, that means nobody on the same Wi-Fi can try to guess your password. To log in over SSH, copy your public key to this computer once, from the computer you connect from: + + ``` + ssh-copy-id you@machine.local + ``` + + To allow passwords again, delete `/etc/ssh/sshd_config.d/10-coredesktop-keys-only.conf` and run `sudo systemctl reload sshd`. + + On machines installed earlier, where someone has logged in over SSH with a password, `update` leaves password login on, so nobody is locked out. Add your key, then switch with: + + ``` + bash ~/.local/share/coredesktop/system/sshd.sh + ``` + - type: text id: snapshots kicker: "Snapshots" @@ -92,10 +111,49 @@ sections: - "If memory runs out, systemd-oomd closes the app causing it, instead of the whole desktop freezing." - "Boot no longer waits for the network." - "Commands run over SSH (`ssh {machine} {command}`) can find tools in `~/.local/bin` and mise." + - "SSH uses Bitwarden's SSH agent while Bitwarden is running it (turn it on in Bitwarden's settings), and GNOME's otherwise. A terminal opened before Bitwarden started uses GNOME's; open a new one." - type: callout text: "On a machine without systemd-resolved, set up mDNS yourself with `bash ~/.local/share/coredesktop/fixmdns.sh`. See the [Arch wiki](https://wiki.archlinux.org/title/Avahi#Hostname_resolution) for more." + - type: table + id: what-coredesktop-changes + kicker: "What CoreDesktop changes" + headline: "Every system setting, beyond the software." + lede: "Listed so you know what you're running, and so you can undo what you don't want." + headers: ["Area", "What changes"] + rows: + - ["`/etc/pacman.conf`", "Adds the `[federated]` repository and trusts its signing key"] + - ["SSH", "sshd is on, with key login only (`/etc/ssh/sshd_config.d/10-coredesktop-keys-only.conf`). Client keepalives are in `/etc/ssh/ssh_config.d/20-coredesktop-keepalive.conf`"] + - ["Firewall", "ufw is on, with the [rules above](#firewall), and ufw-docker's rules in `/etc/ufw/after.rules`"] + - ["Login lockout", "`deny` and `unlock_time` in `/etc/security/faillock.conf`"] + - ["systemd", "A 10-second stop timeout (`/etc/systemd/system.conf.d/` and `/etc/systemd/user.conf.d/10-coredesktop-timeout.conf`), systemd-oomd for apps (`/etc/systemd/user/app.slice.d/10-coredesktop-oomd.conf`), and NetworkManager-wait-online masked"] + - ["`/etc/security/pam_env.conf`", "A PATH line, so SSH commands find `~/.local/bin` and mise"] + - ["mDNS", "Avahi is on, nss-mdns is added to `/etc/nsswitch.conf`, and SSH is advertised in `/etc/avahi/services/ssh.service`"] + - ["Services", "Avahi, Bluetooth, CUPS, fwupd, GDM, NetworkManager, sshd, Docker, Tailscale, ufw and systemd-oomd are turned on. Your user is added to the docker group"] + - ["Snapper", "btrfs only: a config for `/` in `/etc/snapper/configs/root`"] + - ["NVIDIA", "Only if it installs the driver: `/etc/mkinitcpio.conf.d/nvidia.conf` and NVIDIA's suspend services"] + - ["Your home folder", "Lines in `~/.bashrc` (CoreDesktop's shell setup, `~/.local/bin` on PATH, the Bitwarden SSH agent), the commands in `~/.local/bin` (update, refresh, sibling, version, configure, audit), GNOME extensions and their settings, Claude Code's `~/.claude/settings.json` if you had none, a user timer that checks for updates, and a user service that pauses your Core's email if its password stops working"] + - ["configure", "Only for what you set up: your Nextcloud files mount in `/etc/fstab`, GNOME Online Accounts, passwords in your GNOME keyring, and the backup timer"] + + - type: text + id: uninstalling + kicker: "Uninstalling" + headline: "Undo CoreDesktop by hand." + body: | + CoreDesktop doesn't have an uninstaller, but you can undo it yourself. If you set up a Core, do this first, while `configure` is still installed, so your app passwords are revoked: `configure backup` (turn backups off), `configure tailscale` (leave the network), then `configure core` and **Remove a Core** for each Core. + + Then remove CoreDesktop's own files: + + ``` + systemctl --user disable --now coredesktop-update-check.timer coredesktop-backup.timer coredesktop-email-watch.service + rm -f ~/.config/systemd/user/coredesktop-* + rm -f ~/.local/bin/{update,refresh,sibling,version,configure,audit} + rm -rf ~/.local/share/coredesktop ~/.local/share/siblings ~/.local/state/coredesktop ~/.config/coredesktop + ``` + + Delete the CoreDesktop lines from `~/.bashrc`, and undo the [system settings](#what-coredesktop-changes) you don't want. The software stays installed: remove what you don't want with `sudo pacman -Rns ` and `flatpak uninstall `. + - type: final-cta headline: "Keep it all current with one command." body: "`update` snapshots first, then updates everything, and tells you what failed." diff --git a/content/utilities.md b/content/utilities.md index 63463f0..c4103c1 100644 --- a/content/utilities.md +++ b/content/utilities.md @@ -31,7 +31,7 @@ sections: items: - label: "update" title: "Keep everything current" - body: "Snapshots your system, then updates [Arch](https://archlinux.org), [GNOME](https://www.gnome.org), AUR packages, Flatpaks, Ruby, extensions and firmware." + body: "Snapshots your system, then updates [Arch](https://archlinux.org), [GNOME](https://www.gnome.org), AUR packages, Flatpaks, the languages you added with mise, extensions and firmware." link: "/utilities/#update" linktext: "How update works" - label: "refresh" @@ -71,17 +71,17 @@ sections: - type: checklist kicker: "What update does" headline: "Each step in updates.d, in order." - lede: "update pulls the latest CoreDesktop, then runs each step in `~/.local/share/coredesktop/updates.d/`. If a step fails, the other steps still run, and the failed ones are listed at the end." + lede: "update pulls the latest CoreDesktop (fast-forward only: if you've changed your copy, it warns you instead of merging), then runs each step in `~/.local/share/coredesktop/updates.d/`. If a step fails, the other steps still run, and the failed ones are listed at the end." items: - "Stops if there's less than 10 GiB free on `/`. Run `UPDATE_FORCE=1 update` to skip the check." - "Snapshots `/` first, if [Snapper is set up](/system/#snapshots)." - - "Updates the Arch keyring, then Arch and GNOME, then AUR packages, Flatpaks, Ruby, CoreDesktop's pipx apps, GNOME extensions and firmware." + - "Updates the Arch keyring, then Arch and GNOME, then AUR packages, Flatpaks, the languages you added with [mise](/software/mise/), CoreDesktop's pipx apps, GNOME extensions and firmware." - "Warns you not to reboot if the initramfs failed to rebuild." - "Runs any one-time migrations, the way existing machines pick up new CoreDesktop setup." - - "Removes packages installed only as dependencies that nothing needs anymore, and lists them. Packages CoreDesktop installs are never removed this way." + - "Lists packages that were installed only because something else needed them, and that nothing needs any more, and asks before removing them. The answer defaults to no. Packages CoreDesktop installs are never on this list." - type: callout - text: "To keep a package you use directly from being removed, run `sudo pacman -D --asexplicit `. And if an update ever barfs, check the **Latest News** on [archlinux.org](https://archlinux.org) for fixes." + text: "To keep a package you use directly off that list for good, run `sudo pacman -D --asexplicit `. And if an update ever barfs, check the **Latest News** on [archlinux.org](https://archlinux.org) for fixes." - type: command id: refresh @@ -142,7 +142,7 @@ sections: - type: features kicker: "What configure covers" - headline: "Your Core, your network, your backups, your agents." + headline: "Your Core, your network, your backups, your agents, your languages." items: - label: "Your Federated Computer Core" body: "Give it your Superpanel's address (e.g. https://superpanel.example.com), your Core email, name and password. It adds Superpanel to your apps, your Nextcloud calendar, contacts and files and your email to GNOME Online Accounts, mounts your Nextcloud files at `/mnt/example.com`, and points Element at your Core's Matrix server." @@ -152,6 +152,8 @@ sections: body: "Encrypted restic backups to a `.backup-{machine name}` folder in your Nextcloud files. It keeps 7 daily, 4 weekly and 6 monthly backups, and leaves out caches and things that can be reinstalled." - label: "Your AI agents" body: "Signs you in to Claude Code, opencode and Hermes Agent, and lets you choose their model providers. See the [AI Sandbox](/ai-sandbox/)." + - label: "Languages" + body: "`configure languages` asks whether you want [Ruby on Rails](/software/ruby-on-rails/), then installs anything else [mise](/software/mise/) can, with a version, such as `java@21 deno@latest`. Go, Rust, Node.js, Python, Bun and Zig are already installed." - type: callout text: "**Save your backup passphrase.** configure shows it once. Keep it somewhere other than this computer, such as Bitwarden. Without it, the backups can't be restored." diff --git a/hugo.toml b/hugo.toml index 1960bc9..81dd6f5 100644 --- a/hugo.toml +++ b/hugo.toml @@ -153,7 +153,7 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "robotsTXT"] blurb = "Coding agents in a sandbox, local models and voice typing." [[params.softwareGroups]] name = "Code editors" - blurb = "From vi to VS Code." + blurb = "From vi to VSCodium." [[params.softwareGroups]] name = "Languages and runtimes" blurb = "Compilers, interpreters, package managers and site builders."