~strahinja/strahinja.srht.site

9f53a47ec5824ac1fa5b87d282765826f222a6bd — Страхиња Радић 1 year, 3 months ago c862643
Update to Galeb 2.2 coming in the near future (to a git repo near you...)

Signed-off-by: Страхиња Радић <contact@strahinja.org>
8 files changed, 148 insertions(+), 94 deletions(-)

M blog/index.gmi
M galeb/booting.slw
M galeb/faq.slw
M galeb/index.slw
M galeb/install.slw
M index.css
M poe/index.slw
M sled/index.slw
M blog/index.gmi => blog/index.gmi +4 -3
@@ 1,5 1,9 @@
# Блог Страхиње Радића

=> gemini://gemini.strahinja.org/blog/2023-03/20230323.gmi	2023-03-23 Слагалица
=> gemini://gemini.strahinja.org/blog/2023-03/20230312.gmi	2023-03-12 config.h и redo
=> gemini://gemini.strahinja.org/blog/2022-09/20220920.gmi	2022-09-20 DDoS ажурирањем
=> gemini://gemini.strahinja.org/blog/2022-08/20220831.gmi	2022-08-31 Важност прототипова
=> gemini://gemini.strahinja.org/blog/2022-08/20220815.gmi	2022-08-15 Галеб 2.0
=> gemini://gemini.strahinja.org/blog/2022-08/20220806.gmi	2022-08-06 mkpk
=> gemini://gemini.strahinja.org/blog/2022-07/20220719.gmi	2022-07-19 sinit


@@ 13,9 17,6 @@
=> gemini://gemini.strahinja.org/blog/2021-10/20211028.gmi	2021-10-28 Стара школа
=> gemini://gemini.strahinja.org/blog/2021-10/20211012.gmi	2021-10-12 Од текста до PDF-а
=> gemini://gemini.strahinja.org/blog/2021-10/20211008.gmi	2021-10-08 Artix
=> gemini://gemini.strahinja.org/blog/2021-09/20210926.gmi	2021-09-26 Превод lftp-а
=> gemini://gemini.strahinja.org/blog/2021-08/20210812.gmi	2021-08-12 Кодни стандард
=> gemini://gemini.strahinja.org/blog/2021-08/20210809.gmi	2021-08-09 Освежавање GPG кључева




M galeb/booting.slw => galeb/booting.slw +80 -30
@@ 22,7 22,8 @@ two is used depends on your system. If you can run
$ efibootmgr -v
```
and it doesn't give an error message but a list of boot entries, then you have
UEFI.
UEFI. With Linux as kernel, a mounted efivarfs, usually at
_/sys/firmware/efi/efivars_, is also needed for the above command to work.


## Partition table type


@@ 50,28 51,46 @@ on, or, in the case of Linux with UEFI, the kernel itself (EFISTUB).

## Linux boot

During the boot process, Linux executes the init program (usually `/sbin/init`)
During the boot process, Linux executes the init program (usually _/sbin/init_)
on the system root partition. This can be done in two ways:

* By creating an initial root partition (initramfs) having a temporary init
* By creating an **initial root partition (initramfs)** having a temporary init
  program, which if needed handles loading the necessary kernel modules
  (drivers) to access the root partition. This method supports advanced
  partition selection, for example by their UUIDs or PARTUUIDs, and doesn't
  (drivers) to access the root partition. This method also supports advanced
  partition selection, for example by their UUIDs or LABELs, and doesn't
  require the support for filesystem type of the root partition to be compiled
  in the kernel.

* By specifying the root partition on the kernel command line (through a kernel
  parameter), for example `root=/dev/sda2`. This is more minimal, as it doesn't
  require initramfs, but prone to being unable to boot a system if the disk
  configuration is changed, for example by plugging in a USB flash drive or
  otherwise changing the order of the hard disks. This is the recommended
  approach in Galeb.
  into the kernel. initramfs is passed to EFISTUB through the kernel command
  line: `initrd=\\initramfs.img`, where the &ldquo;root&rdquo; directory is ESP.

  **Note** that UEFI uses DOS filesystem path separator, backslash (`\\`),
  instead of a slash (`/`) used on Unix-like systems.

* By **compiling** the necessary filesystem modules and storage device drivers
  **into the kernel** and specifying the root partition on the kernel command
  line. This is more minimal, as it doesn't require initramfs. However, advanced
  partition selection by UUIDs and LABELs is not supported (but see below), and
  licenses for &ldquo;binary blobs&rdquo; (drivers/modules) usually clash with
  the requirements of GPL (which is the license of the kernel), preventing them
  from being compiled in the kernel in such a way. That's why initramfs is the
  most used option, and recommended in Galeb. In Galeb, there is a script
  **mkinitramfs**(8), which can be used to generate initramfs. Refer to
  [5][gmkirfs].

Partition can always be specified by a device pathname, such as
`root=/dev/sda2`, which can lead to boot failure if the storage device driver
(kernel module) is inaccessible or the disk configuration is changed. For
example, this can happen when plugging in a USB flash drive or physically
connecting hard drives to different cables, and rebooting, or otherwise changing
the order of hard disks.

Partition on GPT systems can also be specified by PARTUUID, which uniquely
identifies a partition: `root=PARTUUID=...`. This is the recommended approach.


## Recommended setup in Galeb

The following is the basic recommended partition configuration in Galeb. It
assumes an UEFI/GPT system.
The following is the basic recommended partition configuration in Galeb on the
traditional SCSI drives. It assumes an UEFI/GPT system.

{.scroll}
| Partition   | Mountpoint   | Filesystem Type | Size    |


@@ 86,20 105,50 @@ include
```
root=/dev/sda2
```
and that the ESP is in `/dev/sda1`, mounted later during the boot process to
`/boot`. This is where the kernel stub should go into, and will later be
accessible from the booted system at `/boot/vmlinuz`.
or
```
root=PARTUUID=[PARTUUID of /dev/sda2]
```
and that the ESP is in _/dev/sda1_, mounted later during the boot process to
_/boot_. This is where the kernel stub should go into, and will later be
accessible from the booted system at _/boot/vmlinuz_.

When the partition _/dev/sda2_ exists, its PARTUUID can be obtained with the
command
```
$ lsblk -no PARTUUID /dev/sda2
```

NVME SSDs require the `nvme` and `nvme\_core` kernel modules, and the partition
device pathnames usually become _/dev/nvme0n1p1_ and _/dev/nvme0n1p2_,
respectively:
{.scroll}
| Partition        | Mountpoint   | Filesystem Type | Size    |
|------------------|--------------|-----------------|---------|
| `/dev/nvme0n1p1` | `/boot`      | vfat (32-bit)   | \~500MB |
| `/dev/nvme0n1p2` | `/`          | ext4            | Rest    |

{/.scroll}
{br/}


## Creating a boot entry in efibootmgr

The necessary command line parameters will be briefly explained here. For more
information, see `man 8 efibootmgr` and `efibootmgr -h`.
information, see `man 8 lsblk`, `man 8 efibootmgr` and `efibootmgr -h`.
```
partuuid=\$(lsblk -no PARTUUID /dev/sda2)
efibootmgr -c -d /dev/sda -l '\\vmlinuz' -L 'Galeb EFISTUB' -p1 \\
	-u 'root=/dev/sda2 ro'
	-u 'initrd=\\initramfs.img root=PARTUUID='\${partuuid}' ro'
```

### Explanation

{dl}
{dt}**`partuuid=\$(lsblk -no PARTUUID /dev/sda2)`**{/dt}
{dd}Obtain the PARTUUID of _/dev/sda2_ and store it in the shell variable
`partuuid`.{/dd}{/dl}

{dl}
{dt}**`-c`**{/dt}
{dd}Create a new boot entry.{/dd}{/dl}


@@ 110,9 159,7 @@ efibootmgr -c -d /dev/sda -l '\\vmlinuz' -L 'Galeb EFISTUB' -p1 \\

{dl}
{dt}**`-l '\\vmlinuz'`**{/dt}
{dd}Boot loader (our EFISTUB) is in the file `vmlinuz` on ESP. UEFI uses DOS
filesystem path separator, backslash (`\\`), instead of a slash (`/`) used on
Unix-like systems.{/dd}{/dl}
{dd}Boot loader (our EFISTUB) is in the file _vmlinuz_ on ESP.{/dd}{/dl}

{dl}
{dt}**`-L 'Galeb EFISTUB'`**{/dt}


@@ 120,15 167,16 @@ Unix-like systems.{/dd}{/dl}

{dl}
{dt}**`-p1`**{/dt}
{dd}ESP is the partition #1 on the boot disk (`/dev/sda1`).{/dd}{/dl}
{dd}ESP is the partition #1 on the boot disk (_/dev/sda1_).{/dd}{/dl}

{dl}
{dt}**`-u`**{/dt}
{dd}Treat the kernel command line as UCS-2.{/dd}{/dl}

{dl}
{dt}**`'root=/dev/sda2 ro'`**{/dt}
{dd}Kernel command line, quoted to prevent parsing by the shell.{/dd}{/dl}
{dt}**`'initrd=\\initramfs.img root=PARTUUID='\${partuuid}' ro'`**{/dt}
{dd}Kernel command line, quoted to prevent parsing by the shell. Value of the
shell variable `partuuid` is inserted where needed.{/dd}{/dl}


## Boot image


@@ 137,11 185,11 @@ After the boot scripts have finished, you will be presented with a choice to
create a boot image. The boot image will be compressed with **xz** and needs to
be sent to a USB flash medium, for example:
```
# xz -dc galeb-2.1-x86_64-20220913.raw.xz > /dev/sdb
# xz -dc galeb-2.2-x86_64-20230417.raw.xz > /dev/sdb
```
or, if you have [**pv**][pv]:
```
# xz -dc galeb-2.1-x86_64-20220913.raw.xz | pv > /dev/sdb
# xz -dc galeb-2.2-x86_64-20230417.raw.xz | pv > /dev/sdb
```
_Be careful when specifying the device you send the output to, in order to not
overwrite any existing partitions (your hard disk, etc)!_ You can find out the


@@ 157,10 205,10 @@ The boot image is designed for UEFI systems and will be partitioned as GPT.

When you reboot, enter UEFI setup and choose to boot from USB flash. Fallback
shim will automatically create a boot entry for Galeb, which will set the device
specified as `USBROOT` in `lib/env.sh` as the root device for that entry. If the
specified as `USBROOT` in _lib/env.sh_ as the root device for that entry. If the
boot fails, you need to reboot back into your original system, remove the UEFI
entry (for example, by using **efibootmgr**(8)), change `USBROOT` in
`lib/env.sh`, rerun the bootstrap scripts, copy the newly generated image to USB
_lib/env.sh_, rerun the bootstrap scripts, copy the newly generated image to USB
flash and reboot.

You can safely remove the &ldquo;Galeb USB&rdquo; UEFI entry if you don't need


@@ 174,6 222,7 @@ you choose to boot from the Galeb USB medium.
2. [https://wiki.archlinux.org/title/EFI\_system\_partition][esp]
3. [https://wiki.archlinux.org/title/EFISTUB][efistub]
4. [http://www.ivarch.com/programs/pv.shtml][pv]
5. [https://git.sr.ht/~strahinja/galeb-mkinitramfs/][gmkirfs]

 
{made-by}


@@ 183,3 232,4 @@ you choose to boot from the Galeb USB medium.
[esp]: https://wiki.archlinux.org/title/EFI_system_partition
[efistub]: https://wiki.archlinux.org/title/EFISTUB
[pv]: http://www.ivarch.com/programs/pv.shtml
[gmkirfs]: https://git.sr.ht/~strahinja/galeb-mkinitramfs/

M galeb/faq.slw => galeb/faq.slw +40 -37
@@ 9,16 9,16 @@ meta: index-meta.tsv
{main}
# FAQ

{dl}
{dl.faq}
{dt}**Q: What does &ldquo;Galeb&rdquo; mean?**{/dt}
{dd}
**A:** &ldquo;Seagull&rdquo;.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How do you pronounce it?**{/dt}
{dd}**A:** \[gɑ:leb].{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Is this Linux? GNU/Linux? Something else?**{/dt}
{dd}**A:** Kernel = Linux. libc = musl-libc. coreutils = suckless core. Init
system = suckless init. Process supervisor = suckless svc, heavily modified by


@@ 27,50 27,50 @@ Thus, &ldquo;suckless/musl/Linux&rdquo;, or &ldquo;musl/Linux&rdquo;. It is not
wrong to throw GNU in the name as well, but this system is definitely different
than something like Debian, Fedora or Ubuntu.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How do I install this thing?**{/dt}
{dd}**A:** By reading files in [this repository][galebrepo] and typing
commands.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: What if I don't want to read and/or type commands?**{/dt}
{dd}**A:** Go back to &ldquo;ricing&rdquo; Ubuntu. Nothing to see
here.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Halp! This doesn't work! How to fix?**{/dt}
{dd}**A:** RTFM. Search the Web. Apply logic. Otherwise, see above.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: No thanks, I will instead go back to another distro or Windoze. But
won't that hurt your business?**{/dt}
{dd}**A:** What business? Use whatever software you like, or don't, it's up to
you.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How to boot? There's no GRUB!**{/dt}
{dd}**A:** See [BOOTING][booting].{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How do I install a package?**{/dt}
{dd}**A:** `cd / && xz -dc /pkg/some_pkg.tar.xz | tar -xf -`  
or use [**mkpk**(8)][mkpk]:  
`mkpk install some_pkg`  
(when there is a tarball in `/pkg`).{/dd}{/dl}
(when there is a tarball in _/pkg_).{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How do I uninstall a package?**{/dt}
{dd}**A:** `cd / && xz -dc /pkg/some_pkg.tar.xz | tar -tf - | xargs rm`  
or use **mkpk**(8):  
`mkpk uninstall some_pkg`  
Remove unwanted empty directories manually.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How do I find a package the `$file` belongs to?**{/dt}
{dd}**A:** `for pkg in /pkg/*.tar.xz; do if xz -dc $pkg | tar -tf - | \\`  
`grep $file >/dev/null; then echo $pkg; fi; done`{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: What license applies here?**{/dt}
{dd}**A:** License for each individual program is its own. License for files in
this repository is GPLv3, unless otherwise noted.


@@ 80,7 80,7 @@ restrict statically linking non-copylefted software.

In contrast, glibc (not used here) is mainly licensed under the LGPL v2.1+,
which requires software using it to provide means for it to be potentially
combined with modified versions of glibc (eg. have `*.o` files and makefiles or
combined with modified versions of glibc (eg. have _\*.o_ files and makefiles or
just full source code available[^1]).

Scripts used to build the binary form of Galeb are publicly available, and they


@@ 95,9 95,9 @@ comfortably possible, musl-libc was chosen over glibc, even if glibc has a
stricter (and thus ultimately better for *all* the users) license. Refer to
[^3].{/dd}{/dl}

{dl}
{dt}**Q: Why is `/usr` a link to `/`, instead of `/bin` being a link to
`/usr/bin` etc?**{/dt}
{dl.faq}
{dt}**Q: Why is _/usr_ a link to _/_, instead of _/bin_ being a link to
_/usr/bin_ etc?**{/dt}
{dd}**A:** Galeb doesn't follow FHS. Instead, it builds on
[https://sta.li/filesystem/](https://sta.li/filesystem/)



@@ 127,7 127,7 @@ stricter (and thus ultimately better for *all* the users) license. Refer to

The differences in Galeb are:

* Things in `/sucks` also include:
* Things in _/sucks_ also include:
{ul}
{li}All programs which are not designed to be linked statically,{/li}
{li}Programs I couldn't easily configure to be statically compiled yet (eg.


@@ 135,21 135,23 @@ Perl) - that could change over time,{/li}
{li}Programs which in my opinion suck.{/li}{/ul}
Also see [BUGS](index.html#heading-4).

* There is also `/local` serving the purpose of `/usr/local`.
* There is also _/local_ serving the purpose of _/usr/local_.

* `/var/run` is a symlink to `/run` tmpfs.
* _/var/run_ is a symlink to _/run_ tmpfs.

* There is also user-writeable `/tmp` tmpfs.
* There is also user-writeable _/tmp_ tmpfs.

* Package sources and related files are in `/src`.
* Package sources and related files are in _/src_.

* Compiled packages are in `/pkg`.
* Legal documents (licenses) are in _/share/legal_.

* 9base is in `/plan9`.
* Compiled packages are in _/pkg_.

* 9base is in _/plan9_.

{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why not use fakechroot + fakeroot + chroot instead of writing a
convoluted shell script which requires root access? I don't want to use
that!**{/dt}


@@ 169,25 171,25 @@ create package tarballs.

You are correct to be concerned about running unknown scripts as root. That's
why you should always inspect any scripts before running them (especially as
root). You are _expected_ to at least set your username in `lib/env.sh` before
root). You are _expected_ to at least set your username in _lib/env.sh_ before
running bootstrap scripts.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why use OpenSSL instead of BearSSL?**{/dt}
{dd}**A:** Python doesn't support it yet (apparently?):  
[https://github.com/oasislinux/oasis/issues/14][oasispython]{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why not use scron (simple cron) instead of dcron?**{/dt}
{dd}**A:** Because it doesn't support per-user crontabs.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why not use heirloom vi/ex?**{/dt}
{dd}**A:** Unfortunately, heirloom vi gives &ldquo;Out of memory - too many
lines in file&rdquo;:
[https://github.com/n-t-roff/heirloom-ex-vi/issues/3][exviissue]{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why not use vis instead of vim?**{/dt}
{dd}**A:** It didn't work well in tty under tmux. It only &ldquo;works&rdquo;
(to a degree – with visual artefacts when moving through a file) with


@@ 195,7 197,7 @@ lines in file&rdquo;:
`TERM` settings. I might bring vis back instead of vim if I or its authors
figure out how to fix it.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why isn't there a graphical login and GNOME/Plasma etc?**{/dt}
{dd}**A:** Surely you jest… … … No? Alright – because they are against the
fundamental principles behind Galeb.


@@ 205,28 207,28 @@ graphical login programs (also called _display managers_, DMs) when there is
already getty. Even as eye candy, the only time one is looking at a display
manager is when not logged in.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Can you add FOO as a package?**{/dt}
{dd}**A:** When I created Galeb, I made my own choice of initial packages. You
are free to add whatever you like. Some of my choices regarding packages not
being included are deliberate.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: How do I activate wireless?**{/dt}
{dd}**A:** See [BUGS](index.html#heading-4).{/dd}{/dl}
{dd}**A:** Read the file [WIRELESS][wireless].{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why is the startup so slow?**{/dt}
{dd}**A:** When booting from USB flash, this is a known consequence of a slow
medium, and not specific to Galeb. What is also slowing up boot is customized
**smdev**, which is made to do work comparable to **udev** on startup. If this
bothers you, and you don't need device links and nodes created on boot, edit
`/bin/rc.init`.
_/bin/rc.init_.

Startup speed is irrelevant anyway. Unix-like systems are designed to be robust
and rarely need a reboot, unlike some other operating systems.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why are some manpages showing some characters as weird question
marks?**{/dt}
{dd}**A:** Because the default console font, `LatArCyrHeb-16`, doesn't have


@@ 247,3 249,4 @@ characters, for example
[mkpk]: https://git.sr.ht/~strahinja/mkpk/
[oasispython]: https://github.com/oasislinux/oasis/issues/14/
[proot]: https://proot-me.github.io/
[wireless]: /galeb/wireless.html

M galeb/index.slw => galeb/index.slw +0 -9
@@ 101,14 101,6 @@ See [FAQ][faq].
* x86\_64 is assumed. Other architectures are not planned for now, although
  patches supporting them are welcome.

* Ethernet connection is assumed. wpa\_supplicant is included in the build
  script, as well as the needed libnl, but both are commented out. It has
  dbus stripped out, and I haven't been able to test how well it would behave.
  Use at your own risk. You will have to create a service file for **svc**(8) as
  well. Adding support for wireless is planned for a future update to Galeb,
  and it will likely include the support for [Christoph Lohmann's][r36] conn,
  rfkilld, nldev and nlmon.

* utmp is nonfunctional as I have been reluctant to include skalibs. That might
  change in a future version of Galeb.



@@ 196,6 188,5 @@ but if you are multi~-booting, that limit can easily be hit.
[licenses]: https://www.gnu.org/licenses/
[morpheus]: https://git.2f30.org/morpheus/log.html
[musllfs]: https://github.com/dslm4515/Musl-LFS/
[r36]: http://r-36.net/scm/
[score]: https://core.suckless.org/
[stali]: https://sta.li

M galeb/install.slw => galeb/install.slw +4 -0
@@ 47,6 47,10 @@ prompted to set a root password if you build from source).
* **rsync** files from the boot USB flash to the prepared hard disk partitions
  and adjust the configuration files.

* Continuing from this, _/etc/fstab_ needs special attention for filesystems to
  be properly mounted. If you used PARTUUID, double check if the PARTUUIDs match
  the ones for the partitions **on the hard disk**!

* Setup UEFI entries for booting from hard disk (see [BOOTING][booting]).

* After rebooting from hard disk, install more software from source or using the

M index.css => index.css +7 -2
@@ 113,13 113,18 @@ dd > ul
	padding-left: 1.5em;
}

main > dl > dt,
main > dl > dd
main > dl.faq > dt,
main > dl.faq > dd
{
	text-indent: -1.3em;
	padding-left: 1.3em;
}

main > dl > dd
{
	padding-left: 1.3em;
}

dd p,
dd li
{

M poe/index.slw => poe/index.slw +5 -5
@@ 15,7 15,7 @@ meta: index-meta.tsv

## Q&amp;A

{dl}
{dl.faq}
{dt}**Q: Why?**{/dt}
{dd}**A:**
- There should be no need for GNOME to edit _.po_ files.


@@ 23,27 23,27 @@ meta: index-meta.tsv
- No, plugin for vi(m) isn't enough.
{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why C?**{/dt}
{dd}
**A:** Because `<Go/Rust/whatever soydev language of the moment>`
sucks.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Why is poe saying there are `<N+1>` messages in my file when other
editors say there are `<N>` messages?**{/dt}
{dd}
**A:** Because **poe** takes into account (and allows editing of) the first,
special msgid.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: This doesn't do X!**{/dt}
{dd}
**A:** I might consider adding a feature if I have time, but already **poe** has
all the major ones I planned. It is meant to be a simple _.po_ editing
program.{/dd}{/dl}

{dl}
{dl.faq}
{dt}**Q: Is this suckless?**{/dt}
{dd}
**A:** Definitely not. Any TUI is not suckless. gettext is not suckless, and

M sled/index.slw => sled/index.slw +8 -8
@@ 15,7 15,7 @@ meta: index-meta.tsv

## Q&amp;A

{dl}
{dl.faq}
{dt}
**Q: Why?**{/dt}
{dd}{p}


@@ 30,7 30,7 @@ meta: index-meta.tsv
  closer to suckless principles.
{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: Why can't sled open the file &ldquo;read only&rdquo; even if modification
is disallowed?**{/dt}


@@ 47,7 47,7 @@ being separate from displaying the contents of a non-writable file.{/p}
If this bothers you, you can use something like the included shell script
**sledv**.{/p}{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: Is editing multiple files planned?**{/dt}
{dd}


@@ 58,21 58,21 @@ open several terminal emulators like **st**(1) and have your window manager
arrange their windows. Inter-process &ldquo;clipboard&rdquo; can be managed by a
terminal multiplexer or X.Org itself.{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: Is there a _\~/.config/sled/config_ or _\~/.sledrc?_**{/dt}
{dd}
**A:** No, and never will be. **sled** is intended to be configured through
editing _config.h_ and recompilation, like suckless software.{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: Are plugins planned?**{/dt}
{dd}
**A:** No. Like suckless software, **sled** is meant to be extended through
patches.{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: Why doesn't sled have feature X from text editor Y?**{/dt}
{dd}


@@ 80,7 80,7 @@ patches.{/dd}{/dl}
you are free to offer a patch supporting the feature, which will be included in
the repository, with credits to the author.{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: How can I configure sled if I installed it (from AUR|through my distro's
package manager)?**{/dt}


@@ 89,7 89,7 @@ package manager)?**{/dt}
customize and compile it from source, just like with suckless
software.{/dd}{/dl}

{dl}
{dl.faq}
{dt}
**Q: Why am I getting a &ldquo;Permission denied&rdquo; when trying to edit a
file?**{/dt}