{
  "version": "https://jsonfeed.org/version/1",
  "title": "NixNet Docs (recent changes)",
  "home_page_url": "https://wiki.nixnet.services",
  "description": "List of 30 recent changes on the wiki",
  "items": [
    {
      "id": "daf2227",
      "url": "https://wiki.nixnet.services/hypha/mumble",
      "title": "Edit ‘mumble’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘mumble’\u003c/b\u003e (by amolith at 13 Oct 24 22:35 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/mumble\"\u003emumble\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/mumble.myco b/mumble.myco\nindex 65d357a..fbcb550 100644\n--- a/mumble.myco\n+++ b/mumble.myco\n@@ -8,3 +8,3 @@\n * **Link:** [[Mumble#Usage]]\r\n-* **Password:** `w0gto`\r\n+* **Password:** `jed3og-parkil-gIkzot`\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2024-10-13T22:35:13Z",
      "date_modified": "2024-10-13T22:35:13Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "67ce88f",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 24 18:29 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex d207e55..6943602 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -115,3 +115,4 @@ The only clients I know of supports A/V calls at the moment is Conversations on\n \r\n-* Group chat: [[xmpp:nixnet@muc.nixnet.services?join | nixnet@muc.nixnet.services]] (periodically closed due to targeted spam)\r\n-* Direct message: [[xmpp:support@nixnet.services | support@nixnet.services]]\r\n+* Group chat: [[xmpp:nixnet@muc.nixnet.services?join | nixnet@muc.nixnet.services]] (periodically closed due to waves of targeted spam)\r\n+* Direct message: [[xmpp:support@nixnet.services | support@nixnet.services]] (periodically disabled due to waves of targeted spam)\r\n+* Refer to [[https://nixnet.services/contact | nixnet.services/contact]] for other methods\n\\ No newline at end of file\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2024-10-07T18:29:35Z",
      "date_modified": "2024-10-07T18:29:35Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "6827933",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’: update what I use personally by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’: update what I use personally\u003c/b\u003e (by amolith at 26 Sep 24 16:25 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex bb2dc3d..d207e55 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -62,3 +62,3 @@ I do not have any Apple devices and cannot test these but I have heard good thin\n \r\n-Personally, I use Conversations on Android, Dino on Linux, and Gajim on Windows.\r\n+Personally, I use [[https://cheogram.com | Cheogram]] on Android, Gajim on Linux, and [[https://mov.im | Movim]] on Windows.\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2024-09-26T16:25:26Z",
      "date_modified": "2024-09-26T16:25:26Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "6fa142e",
      "url": "https://wiki.nixnet.services/hypha/mumble",
      "title": "Edit ‘mumble’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘mumble’\u003c/b\u003e (by amolith at 23 Sep 24 20:52 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/mumble\"\u003emumble\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/mumble.myco b/mumble.myco\nindex ff90c0f..65d357a 100644\n--- a/mumble.myco\n+++ b/mumble.myco\n@@ -1,61 +1,53 @@\n-{{Infobox Software\r\n-| name = Mumble\r\n-| logo = File:Mumblesoftwarelogo.png\r\n-| screenshot = File:Mumble-1.3.0-lite.png\r\n-| caption = Main view of Mumble\r\n-| developer              = [https://github.com/orgs/mumble-voip/people Mumble VoIP Team]\r\n-| repo = {{URL|https://github.com/mumble-voip/mumble}}\r\n-| programming language   = [[wikipedia:C++|C++]]\r\n-| operating system = [[wikipedia:Linux|Linux]], [[wikipedia:Microsoft Windows|Windows]], [[wikipedia:macOS|macOS]], [[wikipedia:Android (operating system)|Android]], [[wikipedia:iOS|iOS]]\r\n-| license = [[wikipedia:New BSD license|New BSD License]]\r\n-| website = [[#Usage|mumble.nixnet.services]]\r\n-}}\r\n-\r\n-\u0026#39;\u0026#39;\u0026#39;Mumble\u0026#39;\u0026#39;\u0026#39; is a free, open source, high quality, and low latency voice chat software. Primarily intended for gaming, it is also commonly used for recording podcasts and collaborating on software development as well as in a lot of other situations. If you want to use my server for pretty much anything related to voice (podcast, call, D\u0026amp;D session, collaborative software development), [https://nixnet.services/contact let me know] and I\u0026#39;ll create a channel and give you admin. Refer to the [[#Administration|Administration]] section for how to manage it.\r\n-\r\n-Make sure you read the [[Mumble/Privacy|Privacy Policy]] and [[Mumble/Terms of Service|Terms of Service]].\r\n-\r\n-= Installation =\r\n-Downloads for various operating systems can be found on the [https://www.mumble.info/downloads/ Mumble website]. For most Linux distributions, you can also just use your package manager: \u0026lt;code\u0026gt;sudo pacman -S mumble\u0026lt;/code\u0026gt; for Arch, \u0026lt;code\u0026gt;sudo apt install mumble\u0026lt;/code\u0026gt; for Debian, and so on. For Android, [https://f-droid.org/packages/se.lublin.mumla/ Mumla] is quite good. It does crash when you import a certificate though. The \u0026#39;\u0026#39;\u0026#39;best\u0026#39;\u0026#39;\u0026#39; experience is on desktop Linux; some people have weird audio issues on other platforms but I don\u0026#39;t know of anyone who\u0026#39;s had any problems on Linux.\r\n-\r\n-= Usage =\r\n-Launch the application then \u0026#39;\u0026#39;\u0026#39;go through the Audio Wizard\u0026#39;\u0026#39;\u0026#39;. It will help you identify most issues and get them resolved before connecting to the server. Once that\u0026#39;s finished, a dialogue should pop up prompting you to connect. Click \u0026lt;kbd\u0026gt;Add New...\u0026lt;/kbd\u0026gt;, enter \u0026lt;code\u0026gt;mumble.nixnet.services\u0026lt;/code\u0026gt; as the address, leave the port as default, enter the username you\u0026#39;d like to use, then give the server a friendly name with the \u0026lt;kbd\u0026gt;Label\u0026lt;/kbd\u0026gt; box. You\u0026#39;ll be able to quickly connect to the server again by clicking it as an option under \u0026lt;code\u0026gt;Favourite\u0026lt;/code\u0026gt;.\r\n-\r\n-After joining, you\u0026#39;ll notice that there are a variety of channels under \u0026lt;code\u0026gt;Root\u0026lt;/code\u0026gt;. To make the UI a bit easier to navigate, I recommend clicking the arrows to the left and collapsing them so you don\u0026#39;t see all the subchannels and users within them. To join them, just double-click the channel.\r\n-\r\n-== Noise Suppression ==\r\n-Mumble has the \u0026#39;\u0026#39;best\u0026#39;\u0026#39; noise suppression I\u0026#39;ve ever encountered ([https://github.com/xiph/rnnoise RNNoise]) but it\u0026#39;s disabled by default for some reason. To enable it, go to \u0026lt;code\u0026gt;Settings\u0026lt;/code\u0026gt; -\u0026gt; \u0026lt;code\u0026gt;Audio Input\u0026lt;/code\u0026gt; -\u0026gt; \u0026lt;code\u0026gt;Audio Processing\u0026lt;/code\u0026gt; and check the bottom box to enable \u0026lt;code\u0026gt;RNNoise\u0026lt;/code\u0026gt;. If you want, you can also crank the \u0026lt;code\u0026gt;Noise Suppression\u0026lt;/code\u0026gt; slider alllll the way up.\r\n-\r\n-= Global info =\r\n-* \u0026#39;\u0026#39;\u0026#39;Hosted Groups\u0026#39;\u0026#39;\u0026#39; are different communities that have requested channels; if you\u0026#39;re a member of one, you\u0026#39;ll have been told which to use. Otherwise, please refrain from joining them. If you want a channel for your group, [https://nixnet.services/contact contact me] and I\u0026#39;ll get you set up.\r\n-* \u0026#39;\u0026#39;\u0026#39;General\u0026#39;\u0026#39;\u0026#39; is exactly what it sounds like; general discussion and hangout for anyone who feels like participating. It\u0026#39;s typically empty 😉\r\n-* \u0026#39;\u0026#39;\u0026#39;Redacted Life\u0026#39;\u0026#39;\u0026#39; is a podcast by Amolith (me); the website can be found at [https://redacted.life redacted.life]. The channel currently unused but I eventually plan to do live recordings and interviews with people there.\r\n-* \u0026#39;\u0026#39;\u0026#39;Gaming\u0026#39;\u0026#39;\u0026#39; is for people who are gaming together! If there are people already in one room, please join the next. If they\u0026#39;re all full, [https://nixnet.services/contact send me a message somewhere] and I\u0026#39;ll create a new one.\r\n-* \u0026#39;\u0026#39;\u0026#39;Private\u0026#39;\u0026#39;\u0026#39; is simply for people wanting to have a private conversation. Even more important with these, if one room already has people in it, \u0026#39;\u0026#39;do not enter\u0026#39;\u0026#39;. Just join the next one down the list or [https://nixnet.services/contact send me a message] and I\u0026#39;ll create a new one.\r\n-\r\n-= Guidelines =\r\n-=== NixNet channels ===\r\n-(including Redacted Life)\r\n-In general, please be respectful of other users, especially around people you don\u0026#39;t know. When first starting the application, go through the audio wizard. As stated elsewhere, if you don\u0026#39;t have headphones, enable push-to-talk to reduce echo. When other people are talking, don\u0026#39;t talk over them and wait until there\u0026#39;s an opening. \u0026#39;\u0026#39;\u0026#39;Don\u0026#39;t yell\u0026#39;\u0026#39;\u0026#39;; not only does it contribute nothing but the distortion is incredibly annoying.\r\n-\r\n-=== Hosted Communities ===\r\n+**Mumble** is a free, open source, high quality, and low latency voice chat software. Primarily intended for gaming, it is also commonly used for recording podcasts and collaborating on software development as well as in a lot of other situations. If you want to use my server for pretty much anything related to voice (podcast, call, D\u0026amp;D session, collaborative software development), [[https://nixnet.services/contact|let me know]] and I\u0026#39;ll create a channel and give you admin. Refer to the [[Mumble#Administration]] section for how to manage it.\r\n+\r\n+* **Developer:** [[https://github.com/orgs/mumble-voip/people|Mumble VoIP Team]]\r\n+* **Repo:** [[https://github.com/mumble-voip/mumble | mumble-voip/mumble]]\r\n+* **Programming language:** [[Wikipedia\u0026gt;C++]]\r\n+* **Operating system:** [[Wikipedia\u0026gt;GNU/Linux]], [[Wikipedia\u0026gt;Microsoft Windows]], [[Wikipedia\u0026gt;macOS]], [[Wikipedia\u0026gt;Android (operating system)]], [[Wikipedia\u0026gt;iOS]]\r\n+* **Licence:** [[Wikipedia\u0026gt;New BSD License]]\r\n+* **Link:** [[Mumble#Usage]]\r\n+* **Password:** `w0gto`\r\n+\r\n+Make sure you read the [[./Terms]].\r\n+\r\n+= Installation\r\n+Downloads for various operating systems can be found on the [[https://www.mumble.info/downloads/|Mumble website]]. For most Linux distributions, you can also just use your package manager: `sudo pacman -S mumble` for Arch, `sudo apt install mumble` for Debian, and so on. For Android, [[https://f-droid.org/packages/se.lublin.mumla/|Mumla]] is quite good. It does crash when you import a certificate though. The //best// experience is on desktop Linux; some people have weird audio issues on other platforms, but I don\u0026#39;t know of anyone who\u0026#39;s had any problems on Linux.\r\n+\r\n+= Usage\r\n+Launch the application then **go through the Audio Wizard**. It will help you identify most issues and get them resolved before connecting to the server. Once that\u0026#39;s finished, a dialogue should pop up prompting you to connect. Click `Add New...`, enter `mumble.nixnet.services` as the address, leave the port as default, enter the username you\u0026#39;d like to use, then give the server a friendly name with the `Label` box. You\u0026#39;ll be able to quickly connect to the server again by clicking it as an option under `Favourite`.\r\n+\r\n+Double-click channels to join them.\r\n+\r\n+== Noise Suppression\r\n+Mumble has the //best// noise suppression I\u0026#39;ve ever encountered ([[https://github.com/xiph/rnnoise|RNNoise]]) but it\u0026#39;s disabled by default for some reason. To enable it, go to `Setting` -\u0026gt; `Audio Input` -\u0026gt; `Audio Processing` and check the bottom box to enable `RNNoise`. You can also crank the `Noise Suppression` slider all the way up.\r\n+\r\n+= Global info\r\n+* **Hosted Groups** are different communities that have requested channels; if you\u0026#39;re a member of one, you\u0026#39;ll have been told which to use. Otherwise, please refrain from joining them. If you want a channel for your group, [[https://nixnet.services/contact|contact me]] and I\u0026#39;ll get you set up.\r\n+* **General** is exactly what it sounds like; general discussion and hangout for anyone who feels like participating. It\u0026#39;s typically empty.\r\n+* **Gaming** is for people who are gaming together! If there are people already in one room, please join the next. If they\u0026#39;re all full, [[https://nixnet.services/contact|send me a message somewhere]] and I\u0026#39;ll create a new one.\r\n+* **Private** is simply for people wanting to have a private conversation. Even more important with these, if one room already has people in it, //do not enter//. Just join the next one down the list or [[https://nixnet.services/contact|send me a message]] and I\u0026#39;ll create a new one.\r\n+\r\n+= Guidelines\r\n+== NixNet channels\r\n+\r\n+In general, please be respectful of other users, especially around people you don\u0026#39;t know. When first starting the application, go through the audio wizard. As stated elsewhere, if you don\u0026#39;t have headphones, enable push-to-talk to reduce echo. When other people are talking, don\u0026#39;t talk over them and wait until there\u0026#39;s an opening.\r\n+\r\n+== Hosted Communities\r\n Abide by whatever the admin of that channel says.\r\n \r\n-=== Gaming groups ===\r\n+== Gaming groups\r\n As long as there\u0026#39;s not a serious problem like harassment, bullying, etc., I\u0026#39;m not going to step in. If the dynamic of your group is hurling good-natured insults at one another and screaming your head off, go right ahead.\r\n \r\n-= Administration =\r\n+= Administration\r\n Mumble has a very odd way of granting different permissions to different users. This is done via the Access Control List (ACL). \r\n \r\n-The nearby screenshot shows the default permissions for \u0026#39;\u0026#39;all\u0026#39;\u0026#39;: everyone who joins the channel. There\u0026#39;s also \u0026#39;\u0026#39;admin\u0026#39;\u0026#39;, \u0026#39;\u0026#39;auth\u0026#39;\u0026#39;, and whatever custom groups you create. The latter is where you add admins and mods.\r\n-[[File:ACL_-_all.png|thumb|Screenshot of the ACL pane]]\r\n+The nearby screenshot shows the default permissions for **all**: everyone who joins the channel. There\u0026#39;s also **admin**, **auth**, and whatever custom groups you create. The latter is where you add admins and mods.\r\n \r\n-Click \u0026lt;code\u0026gt;Add\u0026lt;/code\u0026gt; then fill the \u0026lt;code\u0026gt;Group\u0026lt;/code\u0026gt; box in with some random (or predetermined) string such as \u0026lt;code\u0026gt;shoh5quei4moeTh7daigoh9ah\u0026lt;/code\u0026gt;. Enter this in the box like \u0026lt;code\u0026gt;#shoh5quei4moeTh7daigoh9ah\u0026lt;/code\u0026gt;. Set the permissions you want them to have (\u0026lt;code\u0026gt;Write ACL\u0026lt;/code\u0026gt; means they have full admin) then send the original string to the people you want administering or moderating. They\u0026#39;ll need to put this in their Access Tokens which can be found in \u0026lt;code\u0026gt;Server\u0026lt;/code\u0026gt; -\u0026gt; \u0026lt;code\u0026gt;Access Tokens\u0026lt;/code\u0026gt;. I also recommend having them register and go through the certificate wizard; this will ensure their username can\u0026#39;t be taken by anyone else.\r\n+[[File:ACL_-_all.png|thumb|Screenshot of the ACL pane]]\r\n \r\n-If you have \u0026lt;code\u0026gt;Write ACL\u0026lt;/code\u0026gt; permissions in a specific channel, you can then create subchannels within and build a hierarchy for different purposes. \u0026quot;Admins\u0026quot; typically have this permission but may be slightly restricted according what the parent channel\u0026#39;s owner decides. \u0026#39;\u0026#39;Personally\u0026#39;\u0026#39;, I create a subchannel for some purpose and give the person requesting the channel the \u0026lt;code\u0026gt;Write ACL\u0026lt;/code\u0026gt; permission so they can do what they will with it from then on; it\u0026#39;s their space to use as they see fit.\r\n+Click `Add` then fill the `Group` box in with some random (or predetermined) string such as `shoh5quei4moeTh7daigoh9ah`. Enter this in the box like `#shoh5quei4moeTh7daigoh9ah`. Set the permissions you want them to have (`Write ACL` means they have full admin) then send the original string to the people you want administering or moderating. They\u0026#39;ll need to put this in their Access Tokens which can be found in `Server` -\u0026gt; `Access Tokens`. I also recommend having them register and go through the certificate wizard; this will ensure their username can\u0026#39;t be taken by anyone else.\r\n \r\n-= Troubleshooting =\r\n-If you\u0026#39;re having issues, [https://nixnet.services/contact let me know], we\u0026#39;ll get it resolved, and I\u0026#39;ll add the problem/solution here.\r\n+If you have `Write ACL` permissions in a specific channel, you can then create subchannels within and build a hierarchy for different purposes. Admins typically have this permission but may be slightly restricted according what the parent channel\u0026#39;s owner decides. Personally, I create a subchannel for some purpose and give the person requesting the channel the `Write ACL` permission so they can do what they will with it from then on; it\u0026#39;s their space to use as they see fit.\r\n \r\n-[[Category:Mumble]]\r\n-[[Category:Services]]\r\n+= Troubleshooting\r\n+If you\u0026#39;re having issues, [[https://nixnet.services/contact|let me know]], we\u0026#39;ll get it resolved, and I\u0026#39;ll add the problem/solution here.\n\\ No newline at end of file\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2024-09-23T20:52:47Z",
      "date_modified": "2024-09-23T20:52:47Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "146aa29",
      "url": "https://wiki.nixnet.services/hypha/tiny_tiny_rss",
      "title": "Edit ‘tiny_tiny_rss’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘tiny_tiny_rss’\u003c/b\u003e (by amolith at 03 Jan 24 17:43 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/tiny_tiny_rss\"\u003etiny_tiny_rss\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/tiny_tiny_rss.myco b/tiny_tiny_rss.myco\nindex f117016..74b6bde 100644\n--- a/tiny_tiny_rss.myco\n+++ b/tiny_tiny_rss.myco\n@@ -14,7 +14,7 @@ TinyTinyRSS is an open source and self-hosted RSS reader. Make sure you read the\n \r\n-{{Note|Registration is suspended for the foreseeable future; there are too many users subscribed to too many feeds and TT-RSS wasn\u0026#39;t designed to efficiently handle this load|warn}}\r\n+++**Note:**++ Registration is suspended for the foreseeable future; there are too many users subscribed to too many feeds and TT-RSS wasn\u0026#39;t designed to efficiently handle this load\r\n \r\n \r\n-= General information =\r\n-*[https://nixnet.services/contact Contact us] for an account\r\n-*Accounts that haven\u0026#39;t been logged into for at least 1 year will be deleted\r\n+= General information\r\n+* [[https://nixnet.services/contact | Contact us]] for an account\r\n+* Accounts that haven\u0026#39;t been logged into for at least 1 year will be deleted\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2024-01-03T17:43:47Z",
      "date_modified": "2024-01-03T17:43:47Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "d89c3da",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 26 Nov 23 00:53 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex 8ea16bf..bb2dc3d 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -41,3 +41,2 @@ If you’re not sure what client to use, here is a list of some of the more popu\n ** [[https://conversations.im/ | Conversations]] (free from [[https://f-droid.org/en/packages/eu.siacs.conversations/ | F-Droid]])\r\n-** [[https://f-droid.org/en/packages/eu.siacs.conversations/ | Conversations]]\r\n * Ubuntu Touch\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-11-26T00:53:32Z",
      "date_modified": "2023-11-26T00:53:32Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "5750c00",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 26 Nov 23 00:52 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex 9506fb5..8ea16bf 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -18,3 +18,3 @@ The server running on NixNet is [[https://www.ejabberd.im/ | ejabberd]], one of\n = Registration\r\n-There are two ways to register with this service: from [[https://xmpp.nixnet.services | the web UI]] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you\u0026#39;ll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it\u0026#39;s similar to a Twitter handle. Your JID will look like `username@nixnet.services`, `username@paranoid.network`, etc.\r\n+There are two ways to register with this service: from [[https://xmpp.nixnet.services | the web UI]] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you\u0026#39;ll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it\u0026#39;s similar to an email address. Your JID will look like `username@nixnet.services`, `username@paranoid.network`, etc.\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-11-26T00:52:32Z",
      "date_modified": "2023-11-26T00:52:32Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "ca8faea",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 26 Nov 23 00:51 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex c71bd9d..9506fb5 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -13,3 +13,3 @@ The server running on NixNet is [[https://www.ejabberd.im/ | ejabberd]], one of\n * **Licence:** [[Wikipedia\u0026gt;GNU General Public Licence V2]]\r\n-* **Website:** [[https://xmpp.nixnet.services/ xmpp.nixnet.services]]\r\n+* **Website:** [[https://xmpp.nixnet.services/ | xmpp.nixnet.services]]\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-11-26T00:51:55Z",
      "date_modified": "2023-11-26T00:51:55Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "bd533c5",
      "url": "https://wiki.nixnet.services/hypha/home",
      "title": "Edit ‘home’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘home’\u003c/b\u003e (by amolith at 21 Nov 23 19:19 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/home\"\u003ehome\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/home.myco b/home.myco\nindex d682050..b393939 100644\n--- a/home.myco\n+++ b/home.myco\n@@ -1,2 +1,2 @@\n-++I\u0026#39;m in the process of migrating from [[https://docs.nixnet.services]] (MediaWiki) to this site running [[https://mycorrhiza.wiki]]. Some pages won\u0026#39;t look quite right until I also finish migrating syntax.++\r\n+++I\u0026#39;m in the process of migrating from [[https://docs.nixnet.services | docs.nixnet.services]] (MediaWiki) to this site running [[https://mycorrhiza.wiki | Mycorrhiza]]. Some pages won\u0026#39;t look quite right until I also finish migrating syntax.++\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-11-21T19:19:53Z",
      "date_modified": "2023-11-21T19:19:53Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "bf0f112",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’: properly format link by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’: properly format link\u003c/b\u003e (by amolith at 21 Nov 23 19:18 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex bc27c9d..c71bd9d 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -103,3 +103,3 @@ In XMPP, group chats are called //**M**ulti **U**ser **C**hats// or MUCs. To cre\n \r\n-After the room has been created, you can send people a join link in the form of `xmpp:name@muc.example.com?join`. For example, clicking this link will prompt you to join the NixNet Community MUC: [xmpp:nixnet@muc.nixnet.services?join xmpp:nixnet@muc.nixnet.services?join]\r\n+After the room has been created, you can send people a join link in the form of `xmpp:name@muc.example.com?join`. For example, clicking this link will prompt you to join the NixNet Community MUC: [[xmpp:nixnet@muc.nixnet.services?join]]\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-11-21T19:18:48Z",
      "date_modified": "2023-11-21T19:18:48Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "94e27fd",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’: add note about closing group chat by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’: add note about closing group chat\u003c/b\u003e (by amolith at 21 Nov 23 19:17 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex 61a8414..bc27c9d 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -116,3 +116,3 @@ The only clients I know of supports A/V calls at the moment is Conversations on\n \r\n-* Group chat: [[xmpp:nixnet@muc.nixnet.services?join | nixnet@muc.nixnet.services]]\r\n+* Group chat: [[xmpp:nixnet@muc.nixnet.services?join | nixnet@muc.nixnet.services]] (periodically closed due to targeted spam)\r\n * Direct message: [[xmpp:support@nixnet.services | support@nixnet.services]]\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-11-21T19:17:29Z",
      "date_modified": "2023-11-21T19:17:29Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "b465939",
      "url": "https://wiki.nixnet.services/hypha/sql_snippets",
      "title": "Edit ‘sql_snippets’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘sql_snippets’\u003c/b\u003e (by amolith at 07 Oct 23 19:51 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/sql_snippets\"\u003esql_snippets\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/sql_snippets.myco b/sql_snippets.myco\nindex 8d8cb07..9d5fb12 100644\n--- a/sql_snippets.myco\n+++ b/sql_snippets.myco\n@@ -2,3 +2,3 @@ Some random commands I always forget when I need them\n \r\n-++Note: it isn’t \u0026#39;\u0026#39;100%\u0026#39;\u0026#39; necessary to put your SQL commands in caps. It is, however, considered best practice as it helps differentiate between what are commands and what are arguments.++\r\n+++Note: it isn’t //100%// necessary to put your SQL commands in caps. It is, however, considered best practice as it helps differentiate between what are commands and what are arguments.++\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T19:51:22Z",
      "date_modified": "2023-10-07T19:51:22Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "ac9e6da",
      "url": "https://wiki.nixnet.services/hypha/sql_snippets",
      "title": "Edit ‘sql_snippets’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘sql_snippets’\u003c/b\u003e (by amolith at 07 Oct 23 19:51 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/sql_snippets\"\u003esql_snippets\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/sql_snippets.myco b/sql_snippets.myco\nindex b523218..8d8cb07 100644\n--- a/sql_snippets.myco\n+++ b/sql_snippets.myco\n@@ -1,45 +1,47 @@\n Some random commands I always forget when I need them\r\n-{{note|It isn’t \u0026#39;\u0026#39;100%\u0026#39;\u0026#39; necessary to put your SQL commands in caps. It is, however, considered best practice as it helps differentiate between what are commands and what are arguments.|info}}\r\n-= MySQL =\r\n-== Working with users ==\r\n \r\n-* Create a DB: \u0026lt;code\u0026gt;CREATE DATABASE database_name;\u0026lt;/code\u0026gt;\r\n-* Create a user: \u0026lt;code\u0026gt;CREATE USER \u0026#39;user_name\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;;\u0026lt;/code\u0026gt;\r\n-* Grant user permissions: \u0026lt;code\u0026gt;GRANT ALL ON database_name.* TO \u0026#39;user_name\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;;\u0026lt;/code\u0026gt;\r\n-* List all users: \u0026lt;code\u0026gt;SELECT User FROM mysql.user;\u0026lt;/code\u0026gt;\r\n+++Note: it isn’t \u0026#39;\u0026#39;100%\u0026#39;\u0026#39; necessary to put your SQL commands in caps. It is, however, considered best practice as it helps differentiate between what are commands and what are arguments.++\r\n \r\n-Obviously you should change \u0026lt;code\u0026gt;password\u0026lt;/code\u0026gt; to an actually secure password, \u0026lt;code\u0026gt;user_name\u0026lt;/code\u0026gt; to something identifiable, and the same for \u0026lt;code\u0026gt;database_name\u0026lt;/code\u0026gt;. Even if it’s one user per database, it’s better to use different names for each one.\r\n+= MySQL\r\n+== Working with users\r\n \r\n-== Working with databases ==\r\n+*  Create a DB: `CREATE DATABASE database_name;`\r\n+* Create a user: `CREATE USER \u0026#39;user_name\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;;`\r\n+* Grant user permissions: `GRANT ALL ON database_name.* TO \u0026#39;user_name\u0026#39;@\u0026#39;localhost\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;;`\r\n+* List all users: `SELECT User FROM mysql.user;`\r\n \r\n-*List all databases: \u0026lt;code\u0026gt;SHOW DATABASES;\u0026lt;/code\u0026gt;\r\n-*Select a database to interact with: \u0026lt;code\u0026gt;USE database;\u0026lt;/code\u0026gt;\r\n-*List tables: \u0026lt;code\u0026gt;SHOW TABLES;\u0026lt;/code\u0026gt;\r\n-*Show contents of a table: \u0026lt;code\u0026gt;SELECT * FROM table;\u0026lt;/code\u0026gt;\r\n-*Delete a row: \u0026lt;code\u0026gt;DELETE FROM table WHERE column=value;\u0026lt;/code\u0026gt;\r\n-*Dumping databases for backups: \u0026lt;code\u0026gt;mysqldump dbname \u0026gt; dbname_$(date -u -Iseconds).sql\u0026lt;/code\u0026gt; (run as shell command)\r\n-**Dumps with compression: \u0026lt;code\u0026gt;mysqldump dbname | gzip -c - \u0026gt; dbname_$(date -u -Iseconds).sql.gz\u0026lt;/code\u0026gt;\r\n-*Restore database from backup: \u0026lt;code\u0026gt;mysql dbname \u0026lt; backup.sql\u0026lt;/code\u0026gt;\r\n-**With compression: \u0026lt;code\u0026gt;gunzip backup.sql.gz\u0026lt;/code\u0026gt; then run command above\r\n+Obviously you should change `password` to an actually secure password, `user_name` to something identifiable, and the same for `database_name`. Even if it’s one user per database, it’s better to use different names for each one.\r\n \r\n-= Postgres =\r\n-*List databases: \u0026lt;code\u0026gt;\\l\u0026lt;/code\u0026gt;\r\n-*Create user: \u0026lt;code\u0026gt;CREATE ROLE app_user WITH LOGIN ENCRYPTED PASSWORD \u0026#39;password\u0026#39;;\u0026lt;/code\u0026gt;\r\n-**Alternatively, run this as root: \u0026lt;code\u0026gt;$ sudo -u postgres createuser -P app_user\u0026lt;/code\u0026gt;\r\n-*Create database: \u0026lt;code\u0026gt;CREATE DATABASE app WITH OWNER app_user ENCODING = \u0026#39;UTF8\u0026#39;;\u0026lt;/code\u0026gt;\r\n-**Alternatively, run this as root: \u0026lt;code\u0026gt;$ sudo -u postgres createdb -O app_user app\u0026lt;/code\u0026gt;\r\n-*Modify database owner: \u0026lt;code\u0026gt;ALTER DATABASE app OWNER TO new_app_user;\u0026lt;/code\u0026gt;\r\n-*Connect/use database: \u0026lt;code\u0026gt;\\c \u0026lt;database\u0026gt;\u0026lt;/code\u0026gt;\r\n-*List tables in a database: \u0026lt;code\u0026gt;\\dt\u0026lt;/code\u0026gt;\r\n+== Working with databases\r\n \r\n-== Upgrading ==\r\n+* List all databases: `SHOW DATABASES;`\r\n+* Select a database to interact with: `USE database;`\r\n+* List tables: `SHOW TABLES;`\r\n+* Show contents of a table: `SELECT * FROM table;`\r\n+* Delete a row: `DELETE FROM table WHERE column=value;`\r\n+* Dumping databases for backups: `mysqldump dbname \u0026gt; dbname_$(date -u -Iseconds).sql` (run as shell command)\r\n+** Dumps with compression: `mysqldump dbname | gzip -c - \u0026gt; dbname_$(date -u -Iseconds).sql.gz`\r\n+* Restore database from backup: `mysql dbname \u0026lt; backup.sql`\r\n+** With compression: `gunzip backup.sql.gz` then run command above\r\n+\r\n+= Postgres\r\n+* List databases: `\\l`\r\n+* Create user: `CREATE ROLE app_user WITH LOGIN ENCRYPTED PASSWORD \u0026#39;password\u0026#39;;`\r\n+** Alternatively, run this as root: `$ sudo -u postgres createuser -P app_user`\r\n+* Create database: `CREATE DATABASE app WITH OWNER app_user ENCODING = \u0026#39;UTF8\u0026#39;;`\r\n+** Alternatively, run this as root: `$ sudo -u postgres createdb -O app_user app`\r\n+* Modify database owner: `ALTER DATABASE app OWNER TO new_app_user;`\r\n+* Connect/use database: `\\c \u0026lt;database\u0026gt;`\r\n+* List tables in a database: `\\dt`\r\n+\r\n+== Upgrading\r\n Looks like a lot of work but it\u0026#39;s not bad. This is just every little step.\r\n-*Install new version\r\n-*Check the config files for differences and selectively modify new version to match old\r\n-**Configs are at \u0026lt;code\u0026gt;/etc/postgresql/VER/main/postgresql.conf\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;…/main/pg_hba.conf\u0026lt;/code\u0026gt;\r\n-*Stop the \u0026lt;code\u0026gt;postgresql\u0026lt;/code\u0026gt; systemd service\r\n-**\u0026lt;code\u0026gt;systemctl stop postgresql\u0026lt;/code\u0026gt;\r\n-*\u0026lt;code\u0026gt;sudo su - postgres\u0026lt;/code\u0026gt;\r\n-*Check the clusters with the following (doesn\u0026#39;t actually run any migrations)\r\n-\u0026lt;pre\u0026gt;\r\n+* Install new version\r\n+* Check the config files for differences and selectively modify new version to match old\r\n+** Configs are at `/etc/postgresql/VER/main/postgresql.conf` and `…/main/pg_hba.conf`\r\n+* Stop the `postgresql` systemd service\r\n+** `systemctl stop postgresql`\r\n+* `sudo su - postgres`\r\n+* Check the clusters with the following (doesn\u0026#39;t actually run any migrations) {\r\n+  ```\r\n /usr/lib/postgresql/NEW_VER/bin/pg_upgrade \\\r\n@@ -52,21 +54,20 @@ Looks like a lot of work but it\u0026#39;s not bad. This is just every little step.\n   --check\r\n-\u0026lt;/pre\u0026gt;\r\n-*Assuming it all looks good, run the migration with the above snippet \u0026#39;\u0026#39;without\u0026#39;\u0026#39; \u0026lt;code\u0026gt;--check\u0026lt;/code\u0026gt;\r\n-*Log out of postgres and back into root\r\n-*Swap postgres\u0026#39;s ports in the config files\r\n-**In the new config, replace \u0026lt;code\u0026gt;port = 5433\u0026lt;/code\u0026gt; with \u0026lt;code\u0026gt;port = 5432\u0026lt;/code\u0026gt;\r\n-**In the old config, replace \u0026lt;code\u0026gt;port = 5432\u0026lt;/code\u0026gt; with \u0026lt;code\u0026gt;port = 5433\u0026lt;/code\u0026gt;\r\n-*Start the \u0026lt;code\u0026gt;postgresql\u0026lt;/code\u0026gt; systemd service\r\n-**\u0026lt;code\u0026gt;systemctl start postgresql\u0026lt;/code\u0026gt;\r\n-*Log into \u0026lt;code\u0026gt;postgres\u0026lt;/code\u0026gt; user again and make sure it\u0026#39;s running the right version\r\n-**\u0026lt;code\u0026gt;psql -c \u0026quot;SELECT version();\u0026quot;\u0026lt;/code\u0026gt;\r\n-*Run the generated script\r\n-**\u0026lt;code\u0026gt;./analyze_new_cluster.sh\u0026lt;/code\u0026gt;\r\n-*Exit to root user\r\n-*List installed packages and grep for postgres to remove old versions\r\n-**\u0026lt;code\u0026gt;apt list --installed | grep postgres\u0026lt;/code\u0026gt;\r\n-**\u0026lt;code\u0026gt;apt remove postgres-OLD_VER postgres-OLD_VER…\u0026lt;/code\u0026gt;\r\n-*Make sure things are running smoothly then \u0026lt;code\u0026gt;rm -rf /etc/postgresql/OLD_VER\u0026lt;/code\u0026gt;\r\n-*Log back into \u0026lt;code\u0026gt;postgres\u0026lt;/code\u0026gt; user again and drop the old cluster data with \u0026lt;code\u0026gt;./delete_old_cluster.sh\u0026lt;/code\u0026gt;\r\n-\r\n-[[Category:Admin guides]]\r\n+  ```\r\n+}\r\n+* Assuming it all looks good, run the migration with the above snippet \u0026#39;\u0026#39;without\u0026#39;\u0026#39; `--check`\r\n+* Log out of postgres and back into root\r\n+* Swap postgres\u0026#39;s ports in the config files\r\n+** In the new config, replace `port = 5433` with `port = 5432`\r\n+** In the old config, replace `port = 5432` with `port = 5433`\r\n+* Start the `postgresql` systemd service\r\n+** `systemctl start postgresql`\r\n+* Log into `postgres` user again and make sure it\u0026#39;s running the right version\r\n+** `psql -c \u0026quot;SELECT version();\u0026quot;`\r\n+* Run the generated script\r\n+** `./analyze_new_cluster.sh`\r\n+* Exit to root user\r\n+* List installed packages and grep for postgres to remove old versions\r\n+** `apt list --installed | grep postgres`\r\n+** `apt remove postgres-OLD_VER postgres-OLD_VER…`\r\n+* Make sure things are running smoothly then `rm -rf /etc/postgresql/OLD_VER`\r\n+* Log back into `postgres` user again and drop the old cluster data with `./delete_old_cluster.sh`\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T19:51:12Z",
      "date_modified": "2023-10-07T19:51:12Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "0520be5",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 23 07:27 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex ccb05ce..61a8414 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -90,3 +90,3 @@ https://xmpp.nixnet.services/\n \r\n-++Note that because we do not collect email addresses at registration, there is no way to recover a lost password. Please store it in a password manager such as [https://bitwarden.com/ Bitwarden] or [https://keepassxc.org/ KeePassXC].|warn++\r\n+++Note that because we do not collect email addresses at registration, there is no way to recover a lost password. Please store it in a password manager such as [[https://bitwarden.com/ | Bitwarden]] or [[https://keepassxc.org/ | KeePassXC]].++\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T07:27:02Z",
      "date_modified": "2023-10-07T07:27:02Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "a925809",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 23 07:24 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex ad541de..ccb05ce 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -39,26 +39,25 @@ If you’re not sure what client to use, here is a list of some of the more popu\n \r\n-*Android\r\n-**[[https://conversations.im/ | Conversations]] (free from [[https://f-droid.org/en/packages/eu.siacs.conversations/ | F-Droid]])\r\n-**[[https://f-droid.org/en/packages/eu.siacs.conversations/ | Conversations]]\r\n-*Ubuntu Touch\r\n-**[[https://www.kaidan.im/ | Kaidan]]\r\n-*Linux\r\n-**[[https://gajim.org/ | Gajim]]\r\n-**[[https://dino.im/ | Dino]]\r\n-**[[https://profanity-im.github.io/ | Profanity]] (TUI client)\r\n-*Windows\r\n-**[[https://gajim.org/ | Gajim]]\r\n+* Android\r\n+** [[https://conversations.im/ | Conversations]] (free from [[https://f-droid.org/en/packages/eu.siacs.conversations/ | F-Droid]])\r\n+** [[https://f-droid.org/en/packages/eu.siacs.conversations/ | Conversations]]\r\n+* Ubuntu Touch\r\n+** [[https://www.kaidan.im/ | Kaidan]]\r\n+* Linux\r\n+** [[https://gajim.org/ | Gajim]]\r\n+** [[https://dino.im/ | Dino]]\r\n+** [[https://profanity-im.github.io/ | Profanity]] (TUI client)\r\n+* Windows\r\n+** [[https://gajim.org/ | Gajim]]\r\n \r\n I do not have any Apple devices and cannot test these but I have heard good things, especially about Snikket.\r\n-*macOS\r\n-**[https://apps.apple.com/us/app/snikket/id1545164189 Snikket]\r\n-**[https://beagle.im/ Beagle]\r\n-*** There\u0026#39;s apparently an issue with Beagle at the moment. When signing in, you\u0026#39;ll need to click the drop-down on the right and check both \u0026lt;kbd\u0026gt;Disable TLS 1.3\u0026lt;/kbd\u0026gt; and \u0026lt;kbd\u0026gt;Use Direct TLS\u0026lt;/kbd\u0026gt;.\r\n-**[https://siskin.im/ Siskin]\r\n-**[https://monal.im/ Monal IM]\r\n-*iOS\r\n-**[https://apps.apple.com/us/app/snikket/id1545164189 Snikket]\r\n-**[https://siskin.im/ Siskin]\r\n-**[https://monal.im/ Monal IM]\r\n-\r\n+* macOS\r\n+** [[https://apps.apple.com/us/app/snikket/id1545164189 | Snikket]]\r\n+** [[https://beagle.im/ | Beagle]]\r\n+*** There\u0026#39;s apparently an issue with Beagle at the moment. When signing in, you\u0026#39;ll need to click the drop-down on the right and check both `Disable TLS 1.3` and `Use Direct TLS`.\r\n+** [[https://siskin.im/ | Siskin]]\r\n+** [[https://monal.im/ | Monal IM]]\r\n+* iOS\r\n+** [[https://apps.apple.com/us/app/snikket/id1545164189 | Snikket]]\r\n+** [[https://siskin.im/ | Siskin]]\r\n+** [[https://monal.im/ | Monal IM]]\r\n \r\n@@ -66,3 +65,3 @@ Personally, I use Conversations on Android, Dino on Linux, and Gajim on Windows.\n \r\n-== Connecting over Tor ==\r\n+== Connecting over Tor\r\n \r\n@@ -110,6 +109,6 @@ The only clients I know of supports A/V calls at the moment is Conversations on\n = Storage Limits\r\n-*Upload limit for individual files is set to 100 MB\r\n-*Total upload limit per-user is set to 1 GB; when this limit is reached, the user\u0026#39;s oldest uploads are automatically deleted until the total used storage is less than 1 GB\r\n-*Uploads older than 14 days are deleted automatically\r\n-*Messages stored with **M**essage **A**rchive **M**anagement are retained indefinitely\r\n+* Upload limit for individual files is set to 100 MB\r\n+* Total upload limit per-user is set to 1 GB; when this limit is reached, the user\u0026#39;s oldest uploads are automatically deleted until the total used storage is less than 1 GB\r\n+* Uploads older than 14 days are deleted automatically\r\n+* Messages stored with **M**essage **A**rchive **M**anagement are retained indefinitely\r\n \r\n@@ -117,3 +116,3 @@ The only clients I know of supports A/V calls at the moment is Conversations on\n \r\n-*Group chat: [xmpp:nixnet@muc.nixnet.services?join nixnet@muc.nixnet.services]\r\n-*Direct message: [xmpp:support@nixnet.services support@nixnet.services]\r\n+* Group chat: [[xmpp:nixnet@muc.nixnet.services?join | nixnet@muc.nixnet.services]]\r\n+* Direct message: [[xmpp:support@nixnet.services | support@nixnet.services]]\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T07:24:43Z",
      "date_modified": "2023-10-07T07:24:43Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "1e5dc34",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 23 07:22 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex 88399d1..ad541de 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -8,8 +8,8 @@ The server running on NixNet is [[https://www.ejabberd.im/ | ejabberd]], one of\n \r\n-**Developer:** [[https://www.process-one.net/ | ProcessOne]]\r\n-**Repo:** [[https://github.com/processone/ejabberd | processone/ejabberd]]\r\n-**Programming language:** [[Wikipedia\u0026gt;Erlang]], [[Wikipedia\u0026gt;Elixir (Programming Language)]]\r\n-**Operating system:** [[Wikipedia\u0026gt;GNU/Linux]]\r\n-**License:** [[Wikipedia\u0026gt;GNU General Public License V2]]\r\n-**Website:** [[https://xmpp.nixnet.services/ xmpp.nixnet.services]]\r\n+* **Developer:** [[https://www.process-one.net/ | ProcessOne]]\r\n+* **Repo:** [[https://github.com/processone/ejabberd | processone/ejabberd]]\r\n+* **Programming language:** [[Wikipedia\u0026gt;Erlang]], [[Wikipedia\u0026gt;Elixir (Programming Language)]]\r\n+* **Operating system:** [[Wikipedia\u0026gt;GNU/Linux]]\r\n+* **Licence:** [[Wikipedia\u0026gt;GNU General Public Licence V2]]\r\n+* **Website:** [[https://xmpp.nixnet.services/ xmpp.nixnet.services]]\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T07:22:33Z",
      "date_modified": "2023-10-07T07:22:33Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "7865080",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 23 07:02 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex 429aacd..88399d1 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -1,19 +1,15 @@\n-++Infobox Software\r\n-| name = XMPP\r\n-| logo = XMPP logo (without text).svg\r\n-| developer              = ProcessOne\r\n-| repo = ++URL|https://github.com/processone/ejabberd++\r\n-| programming language   = [[wikipedia:Erlang (programming language)|Erlang]], [[wikipedia:Elixer (Programming Language)|Elixer]]\r\n-| operating system = [[Linux|GNU/Linux]]\r\n-| license = [[GNU General Public License|GPLv2]]\r\n-| website = [https://xmpp.nixnet.services/ xmpp.nixnet.services]\r\n-++\r\n-\r\n ++Due to a ridiculous number of automated account registrations, I\u0026#39;ve rate-limited signups to 1 per hour. This will restriction will likely remain in place for the foreseeable future.++\r\n \r\n-[[wikipedia:XMPP|XMPP]] stands for //e**X**tensible **M**essaging and **P**resence **P**rotocol//. It was originally called //Jabber// and some people still use that, however. XMPP is an instant messaging protocol that provides near-real-time communication, presence information (online/offline status, typing indicators), and contact list management. You can communicate with individuals as well as join larger Multi-User Chats (MUCs). XMPP is incredibly extensible (after all, it\u0026#39;s in the name) and even allows for voice and videos calls as well as end-to-end encryption via protocols such as [[wikipedia:OMEMO|OMEMO]].\r\n+[[Wikipedia\u0026gt;XMPP]] stands for //e**X**tensible **M**essaging and **P**resence **P**rotocol//. It was originally called //Jabber// and some people still use that, however. XMPP is an instant messaging protocol that provides near-real-time communication, presence information (online/offline status, typing indicators), and contact list management. You can communicate with individuals as well as join larger Multi-User Chats (MUCs). XMPP is incredibly extensible (after all, it\u0026#39;s in the name) and even allows for voice and videos calls as well as end-to-end encryption via protocols such as [[Wikipedia\u0026gt;OMEMO]].\r\n+\r\n+XMPP is a //federated// protocol meaning that every server can communicate with every other server. Think of it like email: `bob@gmail.com` can send a message to `alice@yahoo.com` even though the email services are provided by entirely different (and competing) companies. If you like the idea of XMPP but don\u0026#39;t like my domains (listed below), you can register with another provider and have a very similar experience! [[https://providers.xmpp.net/ | XMPP Providers]] is a very convenient website that curates these various providers and categorises them based on quality of service. Any provider in Category A should be a wonderful host so picking between them is pretty much down to domain preference.\r\n \r\n-XMPP is a //federated// protocol meaning that every server can communicate with every other server. Think of it like email: `bob@gmail.com` can send a message to `alice@yahoo.com` even though the email services are provided by entirely different (and competing) companies. If you like the idea of XMPP but don\u0026#39;t like [[#Registration|my domains]], you can register with another provider and have a very similar experience! [https://providers.xmpp.net/ XMPP Provider] is a very convenient website that curates these various providers and categorises them based on quality of service. Any provider in Category A should be a wonderful host so picking between them is pretty much down to domain preference.\r\n+The server running on NixNet is [[https://www.ejabberd.im/ | ejabberd]], one of the more modern and robust implementations available.\r\n \r\n-The server running on NixNet is [https://www.ejabberd.im/ ejabberd], one of the more modern and robust implementations available.\r\n+**Developer:** [[https://www.process-one.net/ | ProcessOne]]\r\n+**Repo:** [[https://github.com/processone/ejabberd | processone/ejabberd]]\r\n+**Programming language:** [[Wikipedia\u0026gt;Erlang]], [[Wikipedia\u0026gt;Elixir (Programming Language)]]\r\n+**Operating system:** [[Wikipedia\u0026gt;GNU/Linux]]\r\n+**License:** [[Wikipedia\u0026gt;GNU General Public License V2]]\r\n+**Website:** [[https://xmpp.nixnet.services/ xmpp.nixnet.services]]\r\n \r\n@@ -22,3 +18,3 @@ The server running on NixNet is [https://www.ejabberd.im/ ejabberd], one of the\n = Registration\r\n-There are two ways to register with this service: from [https://xmpp.nixnet.services the web UI] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you\u0026#39;ll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it\u0026#39;s similar to a Twitter handle. Your JID will look like `username@nixnet.services`, `username@paranoid.network`, etc.\r\n+There are two ways to register with this service: from [[https://xmpp.nixnet.services | the web UI]] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you\u0026#39;ll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it\u0026#39;s similar to a Twitter handle. Your JID will look like `username@nixnet.services`, `username@paranoid.network`, etc.\r\n \r\n@@ -31,4 +27,4 @@ Once you\u0026#39;ve come up with an awesome JID, you need to get registered with it!\n \r\n-== Client registration ==\r\n-As I said above, this method is probably simplest. Take a look at the [[#Clients|recommended clients]], pick one, install, and open it up. There will usually be a dialogue prompting you to either log in or create an account. You want to create an account. It should be pretty self-explanatory from there, aside from the CAPTCHA. Due to a large amount of abuse, I\u0026#39;ve had to implement a CAPTCHA to deter bots from mass-registering and sending copious amounts of spam to other users. Your client may display the CAPTCHA for you but, if it doesn\u0026#39;t, you\u0026#39;ll need to copy the provided URL, open it in your browser, then enter the generated numbers back in your client.\r\n+== Client registration\r\n+As I said above, this method is probably simplest. Take a look at the recommended clients below, pick one, install, and open it up. There will usually be a dialogue prompting you to either log in or create an account. You want to create an account. It should be pretty self-explanatory from there, aside from the CAPTCHA. Due to a large amount of abuse, I\u0026#39;ve had to implement a CAPTCHA to deter bots from mass-registering and sending copious amounts of spam to other users. Your client may display the CAPTCHA for you but, if it doesn\u0026#39;t, you\u0026#39;ll need to copy the provided URL, open it in your browser, then enter the generated numbers back in your client.\r\n \r\n@@ -36,4 +32,4 @@ That should be it!\n \r\n-== Web registration ==\r\n-For this one, head over to [https://xmpp.nixnet.services xmpp.nixnet.services], pick your username, enter one of the domains [[#Registration | listed above]], and generate a strong password to store in your password manager. Fill in the CAPTCHA, hit the `Register` button, then take a look at [[#Clients|the recommended clients]].\r\n+== Web registration\r\n+For this one, head over to [[https://xmpp.nixnet.services | xmpp.nixnet.services]], pick your username, enter one of the domains listed above, and generate a strong password to store in your password manager. Fill in the CAPTCHA, hit the `Register` button, then take a look at the recommended clients below.\r\n \r\n@@ -44,11 +40,12 @@ If you’re not sure what client to use, here is a list of some of the more popu\n *Android\r\n-**[https://f-droid.org/en/packages/eu.siacs.conversations/ Conversations]\r\n+**[[https://conversations.im/ | Conversations]] (free from [[https://f-droid.org/en/packages/eu.siacs.conversations/ | F-Droid]])\r\n+**[[https://f-droid.org/en/packages/eu.siacs.conversations/ | Conversations]]\r\n *Ubuntu Touch\r\n-**[https://www.kaidan.im/ Kaidan]\r\n+**[[https://www.kaidan.im/ | Kaidan]]\r\n *Linux\r\n-**[https://gajim.org/ Gajim]\r\n-**[https://dino.im/ Dino]\r\n-**[https://profanity-im.github.io/ Profanity] (TUI client)\r\n+**[[https://gajim.org/ | Gajim]]\r\n+**[[https://dino.im/ | Dino]]\r\n+**[[https://profanity-im.github.io/ | Profanity]] (TUI client)\r\n *Windows\r\n-**[https://gajim.org/ Gajim]\r\n+**[[https://gajim.org/ | Gajim]]\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T07:02:03Z",
      "date_modified": "2023-10-07T07:02:03Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "ce35b16",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 23 05:59 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex 7aaccb2..429aacd 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -24,6 +24,6 @@ There are two ways to register with this service: from [https://xmpp.nixnet.serv\n \r\n-*nixnet.services\r\n-*paranoid.network\r\n-*linux.monster\r\n-*pwned.life\r\n+* nixnet.services\r\n+* paranoid.network\r\n+* linux.monster\r\n+* pwned.life\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T05:59:55Z",
      "date_modified": "2023-10-07T05:59:55Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "181b989",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 07 Oct 23 05:59 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex c76a5cc..7aaccb2 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -102,6 +102,6 @@ In XMPP, group chats are called //**M**ulti **U**ser **C**hats// or MUCs. To cre\n \r\n-*muc.nixnet.services\r\n-*muc.paranoid.network\r\n-*muc.linux.monster\r\n-*muc.pwned.life\r\n+* muc.nixnet.services\r\n+* muc.paranoid.network\r\n+* muc.linux.monster\r\n+* muc.pwned.life\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-07T05:59:30Z",
      "date_modified": "2023-10-07T05:59:30Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "dbff08b",
      "url": "https://wiki.nixnet.services/hypha/xmpp",
      "title": "Edit ‘xmpp’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘xmpp’\u003c/b\u003e (by amolith at 06 Oct 23 19:39 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/xmpp\"\u003exmpp\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/xmpp.myco b/xmpp.myco\nindex d0595ff..c76a5cc 100644\n--- a/xmpp.myco\n+++ b/xmpp.myco\n@@ -1,2 +1,2 @@\n-{{Infobox Software\r\n+++Infobox Software\r\n | name = XMPP\r\n@@ -4,3 +4,3 @@\n | developer              = ProcessOne\r\n-| repo = {{URL|https://github.com/processone/ejabberd}}\r\n+| repo = ++URL|https://github.com/processone/ejabberd++\r\n | programming language   = [[wikipedia:Erlang (programming language)|Erlang]], [[wikipedia:Elixer (Programming Language)|Elixer]]\r\n@@ -9,9 +9,9 @@\n | website = [https://xmpp.nixnet.services/ xmpp.nixnet.services]\r\n-}}\r\n+++\r\n \r\n-{{Note|Due to a ridiculous number of automated account registrations, I\u0026#39;ve rate-limited signups to 1 per hour. This will restriction will likely remain in place for the foreseeable future.|warn}}\r\n+++Due to a ridiculous number of automated account registrations, I\u0026#39;ve rate-limited signups to 1 per hour. This will restriction will likely remain in place for the foreseeable future.++\r\n \r\n-[[wikipedia:XMPP|XMPP]] stands for \u0026#39;\u0026#39;e\u0026#39;\u0026#39;\u0026#39;X\u0026#39;\u0026#39;\u0026#39;tensible \u0026#39;\u0026#39;\u0026#39;M\u0026#39;\u0026#39;\u0026#39;essaging and \u0026#39;\u0026#39;\u0026#39;P\u0026#39;\u0026#39;\u0026#39;resence \u0026#39;\u0026#39;\u0026#39;P\u0026#39;\u0026#39;\u0026#39;rotocol\u0026#39;\u0026#39;. It was originally called \u0026#39;\u0026#39;Jabber\u0026#39;\u0026#39; and some people still use that, however. XMPP is an instant messaging protocol that provides near-real-time communication, presence information (online/offline status, typing indicators), and contact list management. You can communicate with individuals as well as join larger Multi-User Chats (MUCs). XMPP is incredibly extensible (after all, it\u0026#39;s in the name) and even allows for voice and videos calls as well as end-to-end encryption via protocols such as [[wikipedia:OMEMO|OMEMO]].\r\n+[[wikipedia:XMPP|XMPP]] stands for //e**X**tensible **M**essaging and **P**resence **P**rotocol//. It was originally called //Jabber// and some people still use that, however. XMPP is an instant messaging protocol that provides near-real-time communication, presence information (online/offline status, typing indicators), and contact list management. You can communicate with individuals as well as join larger Multi-User Chats (MUCs). XMPP is incredibly extensible (after all, it\u0026#39;s in the name) and even allows for voice and videos calls as well as end-to-end encryption via protocols such as [[wikipedia:OMEMO|OMEMO]].\r\n \r\n-XMPP is a \u0026#39;\u0026#39;federated\u0026#39;\u0026#39; protocol meaning that every server can communicate with every other server. Think of it like email: \u0026lt;code\u0026gt;bob@gmail.com\u0026lt;/code\u0026gt; can send a message to \u0026lt;code\u0026gt;alice@yahoo.com\u0026lt;/code\u0026gt; even though the email services are provided by entirely different (and competing) companies. If you like the idea of XMPP but don\u0026#39;t like [[#Registration|my domains]], you can register with another provider and have a very similar experience! [https://providers.xmpp.net/ XMPP Provider] is a very convenient website that curates these various providers and categorises them based on quality of service. Any provider in Category A should be a wonderful host so picking between them is pretty much down to domain preference.\r\n+XMPP is a //federated// protocol meaning that every server can communicate with every other server. Think of it like email: `bob@gmail.com` can send a message to `alice@yahoo.com` even though the email services are provided by entirely different (and competing) companies. If you like the idea of XMPP but don\u0026#39;t like [[#Registration|my domains]], you can register with another provider and have a very similar experience! [https://providers.xmpp.net/ XMPP Provider] is a very convenient website that curates these various providers and categorises them based on quality of service. Any provider in Category A should be a wonderful host so picking between them is pretty much down to domain preference.\r\n \r\n@@ -19,6 +19,6 @@ The server running on NixNet is [https://www.ejabberd.im/ ejabberd], one of the\n \r\n-{{Note|Make sure you read the [[XMPP/Terms|Terms of Service]].|reminder}}\r\n+++Make sure you read the [[XMPP/Terms|Terms of Service]].++\r\n \r\n-= Registration =\r\n-There are two ways to register with this service: from [https://xmpp.nixnet.services the web UI] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you\u0026#39;ll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it\u0026#39;s similar to a Twitter handle. Your JID will look like \u0026lt;code\u0026gt;username@nixnet.services\u0026lt;/code\u0026gt;, \u0026lt;code\u0026gt;username@paranoid.network\u0026lt;/code\u0026gt;, etc.\r\n+= Registration\r\n+There are two ways to register with this service: from [https://xmpp.nixnet.services the web UI] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you\u0026#39;ll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it\u0026#39;s similar to a Twitter handle. Your JID will look like `username@nixnet.services`, `username@paranoid.network`, etc.\r\n \r\n@@ -37,5 +37,5 @@ That should be it!\n == Web registration ==\r\n-For this one, head over to [https://xmpp.nixnet.services xmpp.nixnet.services], pick your username, enter one of the domains [[#Registration | listed above]], and generate a strong password to store in your password manager. Fill in the CAPTCHA, hit the \u0026lt;code\u0026gt;Register\u0026lt;/code\u0026gt; button, then take a look at [[#Clients|the recommended clients]].\r\n+For this one, head over to [https://xmpp.nixnet.services xmpp.nixnet.services], pick your username, enter one of the domains [[#Registration | listed above]], and generate a strong password to store in your password manager. Fill in the CAPTCHA, hit the `Register` button, then take a look at [[#Clients|the recommended clients]].\r\n \r\n-= Clients =\r\n+= Clients\r\n \r\n@@ -73,3 +73,3 @@ If you want to use this XMPP server over Tor, first install and enable the daemo\n \r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n # Installation for Debian and Debian-based distributions like Ubuntu or Linux Mint\r\n@@ -85,7 +85,7 @@ If you want to use this XMPP server over Tor, first install and enable the daemo\n # sudo service tor enable --now\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n-After that, there are a few settings you’ll have to change depending on your client. At a birds-eye view, you want to enable a SOCKS5 proxy; some clients allow for this and some don\u0026#39;t. Gajim does and that\u0026#39;s my preferred client so I\u0026#39;ll describe its process. Go to Gajim -\u0026gt; Preferences -\u0026gt; Advanced and simply set the \u0026#39;\u0026#39;\u0026#39;Global Proxy\u0026#39;\u0026#39;\u0026#39; to \u0026#39;\u0026#39;\u0026#39;Tor\u0026#39;\u0026#39;\u0026#39;. As long as your Tor daemon is up and running properly, the default settings should work perfectly fine.\r\n+After that, there are a few settings you’ll have to change depending on your client. At a birds-eye view, you want to enable a SOCKS5 proxy; some clients allow for this and some don\u0026#39;t. Gajim does and that\u0026#39;s my preferred client so I\u0026#39;ll describe its process. Go to Gajim -\u0026gt; Preferences -\u0026gt; Advanced and simply set the **Global Proxy** to **Tor**. As long as your Tor daemon is up and running properly, the default settings should work perfectly fine.\r\n \r\n-= Account management =\r\n+= Account management\r\n Passwords can be changed and accounts created or deleted from the web UI.\r\n@@ -94,9 +94,9 @@ https://xmpp.nixnet.services/\n \r\n-{{Note|Note that because we do not collect email addresses at registration, there is no way to recover a lost password. Please store it in a password manager such as [https://bitwarden.com/ Bitwarden] or [https://keepassxc.org/ KeePassXC].|warn}}\r\n+++Note that because we do not collect email addresses at registration, there is no way to recover a lost password. Please store it in a password manager such as [https://bitwarden.com/ Bitwarden] or [https://keepassxc.org/ KeePassXC].|warn++\r\n \r\n-= Encryption =\r\n+= Encryption\r\n TODO\r\n \r\n-= Group chat =\r\n-In XMPP, group chats are called \u0026#39;\u0026#39;\u0026#39;\u0026#39;\u0026#39;M\u0026#39;\u0026#39;\u0026#39;ulti \u0026#39;\u0026#39;\u0026#39;U\u0026#39;\u0026#39;\u0026#39;ser \u0026#39;\u0026#39;\u0026#39;C\u0026#39;\u0026#39;\u0026#39;hats\u0026#39;\u0026#39; or MUCs. To create a MUC on any of the domains above, you\u0026#39;ll first need an account on this server. It \u0026#39;\u0026#39;shouldn\u0026#39;t\u0026#39;\u0026#39; matter which domain you\u0026#39;re using, you just need an account on one of them. When creating the MUC, you\u0026#39;ll be asked for an address. This usually takes the form of \u0026lt;code\u0026gt;name@muc.example.com\u0026lt;/code\u0026gt; or \u0026lt;code\u0026gt;name@conference.example.com\u0026lt;/code\u0026gt;. My domains all use \u0026lt;code\u0026gt;muc.\u0026lt;/code\u0026gt; so that would be …\r\n+= Group chat\r\n+In XMPP, group chats are called //**M**ulti **U**ser **C**hats// or MUCs. To create a MUC on any of the domains above, you\u0026#39;ll first need an account on this server. It //shouldn\u0026#39;t// matter which domain you\u0026#39;re using, you just need an account on one of them. When creating the MUC, you\u0026#39;ll be asked for an address. This usually takes the form of `name@muc.example.com` or `name@conference.example.com`. My domains all use `muc.` so that would be …\r\n \r\n@@ -107,8 +107,8 @@ In XMPP, group chats are called \u0026#39;\u0026#39;\u0026#39;\u0026#39;\u0026#39;M\u0026#39;\u0026#39;\u0026#39;ulti \u0026#39;\u0026#39;\u0026#39;U\u0026#39;\u0026#39;\u0026#39;ser \u0026#39;\u0026#39;\u0026#39;C\u0026#39;\u0026#39;\u0026#39;hats\u0026#39;\u0026#39; or MUCs.\n \r\n-After the room has been created, you can send people a join link in the form of \u0026lt;code\u0026gt;xmpp:name@muc.example.com?join\u0026lt;/code\u0026gt;. For example, clicking this link will prompt you to join the NixNet Community MUC: [xmpp:nixnet@muc.nixnet.services?join xmpp:nixnet@muc.nixnet.services?join]\r\n+After the room has been created, you can send people a join link in the form of `xmpp:name@muc.example.com?join`. For example, clicking this link will prompt you to join the NixNet Community MUC: [xmpp:nixnet@muc.nixnet.services?join xmpp:nixnet@muc.nixnet.services?join]\r\n \r\n-= Audio and video calls =\r\n+= Audio and video calls\r\n The only clients I know of supports A/V calls at the moment is Conversations on Android, Dino on Linux, and Siskin on iOS (if you know of any more, let me know and I\u0026#39;ll update this page). This feature should Just Work™ and, if so, there will be a telephone icon somewhere in the UI (typically the top right).\r\n \r\n-= Storage Limits =\r\n+= Storage Limits\r\n *Upload limit for individual files is set to 100 MB\r\n@@ -116,5 +116,5 @@ The only clients I know of supports A/V calls at the moment is Conversations on\n *Uploads older than 14 days are deleted automatically\r\n-*Messages stored with \u0026#39;\u0026#39;\u0026#39;M\u0026#39;\u0026#39;\u0026#39;essage \u0026#39;\u0026#39;\u0026#39;A\u0026#39;\u0026#39;\u0026#39;rchive \u0026#39;\u0026#39;\u0026#39;M\u0026#39;\u0026#39;\u0026#39;anagement are retained indefinitely\r\n+*Messages stored with **M**essage **A**rchive **M**anagement are retained indefinitely\r\n \r\n-= Support =\r\n+= Support\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-10-06T19:39:46Z",
      "date_modified": "2023-10-06T19:39:46Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "aa9322a",
      "url": "https://wiki.nixnet.services/hypha/tracking_releases",
      "title": "Create ‘tracking_releases’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eCreate ‘tracking_releases’\u003c/b\u003e (by amolith at 24 Sep 23 20:45 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/tracking_releases\"\u003etracking_releases\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/tracking_releases.myco b/tracking_releases.myco\nnew file mode 100644\nindex 0000000..ad0076f\n--- /dev/null\n+++ b/tracking_releases.myco\n@@ -0,0 +1,3 @@\n+Keeping up with new releases and staying on top of updates has honestly been one of my biggest complaints about running NixNet. Until recently, I primarily tracked releases using RSS feeds. GitHub, Gitea, and Forgejo all provide RSS feeds specifically for releases, so keeping up with releases on those platforms was extremely easy; I just created a new category in [[https://github.com/nkanaev/yarr/ | my RSS reader]], popped the feeds in, and I saw new entries for every release.\r\n+\r\n+Some software forges don\u0026#39;t provide RSS feeds for releases though. GitLab, SourceHut, and lots of custom software don\u0026#39;t have any way of tracking what\u0026#39;s going on in a repo outside of git. This is how I came up with the idea for [[s.s\u0026gt;Willow]]. It supports the lowest common denominator between all the forges: their VCS. By looking at git tags, Willow can keep track of releases on pretty much any forge. Development primarily takes place on [[https://sr.ht/~amolith/willow | SourceHut]] and there\u0026#39;s more information on [[s.s\u0026gt;Willow | my personal wiki]].\n\\ No newline at end of file\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:45:57Z",
      "date_modified": "2023-09-24T20:45:57Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "6c10453",
      "url": "https://wiki.nixnet.services/hypha/monitoring",
      "title": "Edit ‘monitoring’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘monitoring’\u003c/b\u003e (by amolith at 24 Sep 23 20:36 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/monitoring\"\u003emonitoring\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/monitoring.myco b/monitoring.myco\nindex f0f8d2d..117c243 100644\n--- a/monitoring.myco\n+++ b/monitoring.myco\n@@ -1 +1,5 @@\n-With physical servers and VMs scattered all over the world and across different providers, we need some way to monitor them and make sure they\u0026#39;re behaving as they should. We also want to recieve notifications when they aren\u0026#39;t and see a historical overview of what was going on around that time so we can troubleshoot as necessary. To that end, a combination of [[Wikipedia\u0026gt;Prometheus (software)]] and [[Wikipedia\u0026gt;Grafana]] will fit perfectly. Prometheus will act as the backend, collecting and aggregating data from literally everything (applications, VMs, and physical hosts), while Grafana will take that data and present it in a useful manner through a highly configurable and extensible dashboard. Grafana also has a built-in granular alert system to fill that need as well.\r\n+With physical servers and VMs scattered all over the world and across different providers, we need some way to monitor them and make sure they\u0026#39;re behaving as they should. We also want to receive notifications when they aren\u0026#39;t and see a historical overview of what was going on around that time so we can troubleshoot as necessary. To that end, a combination of [[Wikipedia\u0026gt;Prometheus (software)]] and [[Wikipedia\u0026gt;Grafana]] will fit perfectly. Prometheus will act as the backend, collecting and aggregating data from literally everything (applications, VMs, and physical hosts), while Grafana will take that data and present it in a useful manner through a highly configurable and extensible dashboard. Grafana also has a built-in granular alert system to fill that need as well.\r\n+\r\n+----\r\n+\r\n+The above was written a while ago. I\u0026#39;ve since decided that I don\u0026#39;t really //need// a full-blown enterprise-grade monitoring stack. My services are small and I\u0026#39;m one person, so all I realistically need to know is whether some service is up or down. I\u0026#39;ve been using [[https://github.com/louislam/uptime-kuma/ | uptime-kuma]] for quite a while now and it\u0026#39;s been a very pleasant experience; I have enough experience administering these services that I can quickly identify what the issue is and bring it back up within a reasonable period of time. I highly recommend it :)\n\\ No newline at end of file\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:36:56Z",
      "date_modified": "2023-09-24T20:36:56Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "ad27036",
      "url": "https://wiki.nixnet.services/hypha/monitoring",
      "title": "Edit ‘monitoring’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘monitoring’\u003c/b\u003e (by amolith at 24 Sep 23 20:32 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/monitoring\"\u003emonitoring\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/monitoring.myco b/monitoring.myco\nindex 3263285..f0f8d2d 100644\n--- a/monitoring.myco\n+++ b/monitoring.myco\n@@ -1,6 +1 @@\n-{{admin guides}}\r\n-{{unfinished}}\r\n-\r\n-With physical servers and VMs scattered all over the world and across different providers, we need some way to monitor them and make sure they\u0026#39;re behaving as they should. We also want to recieve notifications when they aren\u0026#39;t and see a historical overview of what was going on around that time so we can troubleshoot as necessary. To that end, a combination of [[wikipedia:Prometheus (software)|Prometheus]] and [[wikipedia:Grafana|Grafana]] will fit perfectly. Prometheus will act as the backend, collecting and aggregating data from literally everything (applications, VMs, and physical hosts), while Grafana will take that data and present it in a useful manner through a highly configurable and extensible dashboard. Grafana also has a built-in granular alert system to fill that need as well.\r\n-\r\n-[[Category:Admin guides]]\r\n+With physical servers and VMs scattered all over the world and across different providers, we need some way to monitor them and make sure they\u0026#39;re behaving as they should. We also want to recieve notifications when they aren\u0026#39;t and see a historical overview of what was going on around that time so we can troubleshoot as necessary. To that end, a combination of [[Wikipedia\u0026gt;Prometheus (software)]] and [[Wikipedia\u0026gt;Grafana]] will fit perfectly. Prometheus will act as the backend, collecting and aggregating data from literally everything (applications, VMs, and physical hosts), while Grafana will take that data and present it in a useful manner through a highly configurable and extensible dashboard. Grafana also has a built-in granular alert system to fill that need as well.\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:32:24Z",
      "date_modified": "2023-09-24T20:32:24Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "025804b",
      "url": "https://wiki.nixnet.services/hypha/u/amolith",
      "title": "Create ‘u/amolith’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eCreate ‘u/amolith’\u003c/b\u003e (by amolith at 24 Sep 23 20:27 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/u/amolith\"\u003eu/amolith\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/u/amolith.myco b/u/amolith.myco\nnew file mode 100644\nindex 0000000..67b18f8\n--- /dev/null\n+++ b/u/amolith.myco\n@@ -0,0 +1 @@\n+Creator and admin of NixNet. Personal website is [[https://secluded.site | Secluded.Site]].\n\\ No newline at end of file\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:27:20Z",
      "date_modified": "2023-09-24T20:27:20Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "4be5a29",
      "url": "https://wiki.nixnet.services/hypha/lxd_and_lxc",
      "title": "Edit ‘lxd_and_lxc’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘lxd_and_lxc’\u003c/b\u003e (by amolith at 24 Sep 23 20:24 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/lxd_and_lxc\"\u003elxd_and_lxc\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/lxd_and_lxc.myco b/lxd_and_lxc.myco\nindex ad2f228..59df6eb 100644\n--- a/lxd_and_lxc.myco\n+++ b/lxd_and_lxc.myco\n@@ -1,2 +1,4 @@\n-== Custom Images ==\r\n+[[u/Amolith]] has an introductory post about LXD and LXD [[https://secluded.site/lxd-containers-for-human-beings/ | on his blog]].\r\n+\r\n+== Custom Images\r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:24:40Z",
      "date_modified": "2023-09-24T20:24:40Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "3f2c8aa",
      "url": "https://wiki.nixnet.services/hypha/lxd_and_lxc",
      "title": "Edit ‘lxd_and_lxc’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘lxd_and_lxc’\u003c/b\u003e (by amolith at 24 Sep 23 20:23 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/lxd_and_lxc\"\u003elxd_and_lxc\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/lxd_and_lxc.myco b/lxd_and_lxc.myco\nindex c2c125d..ad2f228 100644\n--- a/lxd_and_lxc.myco\n+++ b/lxd_and_lxc.myco\n@@ -1,40 +1,37 @@\n-{{DISPLAYTITLE:LXD \u0026amp; LXC}}\r\n-{{admin guides}}\r\n-{{unfinished}}\r\n-\r\n == Custom Images ==\r\n \r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n lxc publish \u0026lt;container\u0026gt;\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n+\r\n+== LXD Networking\r\n+++Note: ignore all of the IPv6-related steps; this leads to a broken IPv6 configuration! I\u0026#39;m working on fixing my setup and will update these docs once I\u0026#39;ve figured out the issues.++\r\n \r\n-== LXD Networking ==\r\n-{{Note|Ignore all of the IPv6-related steps; this leads to a broken IPv6 configuration! We\u0026#39;re working on fixing our setup and will update these docs once we\u0026#39;ve figured out the issues.|warn}}\r\n-Before setting any static IPs, you need to enable stateful DHCPv6 on LXD\u0026#39;s virtual NIC. For more info about why, see [https://discuss.linuxcontainers.org/t/lxd-ipv6-networking-questions-novice/6961/2 a related thread on LXC\u0026#39;s Discouse insance].\r\n-\u0026lt;pre\u0026gt;\r\n+Before setting any static IPs, you need to enable stateful DHCPv6 on LXD\u0026#39;s virtual NIC. For more info about why, see [[https://discuss.linuxcontainers.org/t/lxd-ipv6-networking-questions-novice/6961/2 | a related thread on LXC\u0026#39;s Discouse insance]].\r\n+```\r\n lxc network set lxdbr0 ipv6.dhcp.stateful true\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n To bind a container to a host port with NAT, you need a static IP on the container:\r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n lxc network attach lxdbr0 \u0026lt;instance\u0026gt; eth0 eth0\r\n lxc config device set \u0026lt;instance\u0026gt; eth0 ipv4.address=\u0026lt;container-ip\u0026gt; ipv6.address=\u0026lt;container-ip\u0026gt;\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n-Then the proxy device needs to be added. Note the square brackets \u0026lt;code\u0026gt;[]\u0026lt;/code\u0026gt; surrounding the IPv6 address in the second command.\r\n-\u0026lt;pre\u0026gt;\r\n+Then the proxy device needs to be added. Note the square brackets `[]` surrounding the IPv6 address in the second command.\r\n+```\r\n lxc config device add \u0026lt;instance\u0026gt; port-forward_ipv4 proxy connect=tcp:\u0026lt;container-ip\u0026gt;:\u0026lt;port\u0026gt; listen=tcp:\u0026lt;host-public-ip\u0026gt;:\u0026lt;port\u0026gt; nat=true\r\n lxc config device add \u0026lt;instance\u0026gt; port-forward_ipv6 proxy connect=tcp:[\u0026lt;container-ip\u0026gt;]:\u0026lt;port\u0026gt; listen=tcp:[\u0026lt;host-public-ip\u0026gt;]:\u0026lt;port\u0026gt; nat=true\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n-\u0026lt;code\u0026gt;\u0026lt;host-ip\u0026gt;\u0026lt;/code\u0026gt; needs to be the public IP address of your server.\r\n+`\u0026lt;host-ip\u0026gt;` needs to be the public IP address of your server.\r\n \r\n-== LXD Storage Mounts ==\r\n-{{Note|The following commands and paths are formatted for internal NixNet usage. You may need change the paths to fit your needs.|reminder}}\r\n+== LXD Storage Mounts\r\n+++Note: the following commands and paths are formatted for internal NixNet usage. You may need change the paths to fit your needs.++\r\n \r\n The LXC help gives this hint when adding a device:\r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n lxc config device add [\u0026lt;remote\u0026gt;:]\u0026lt;container-name\u0026gt; \u0026lt;device-name\u0026gt; disk source=/opt/\u0026lt;service-name\u0026gt; path=opt\r\n-\u0026lt;/pre\u0026gt;\r\n-This adds a device of type disk to \u0026lt;code\u0026gt;\u0026lt;container-name\u0026gt;\u0026lt;/code\u0026gt;. The \u0026lt;code\u0026gt;source\u0026lt;/code\u0026gt; is the host\u0026#39;s file path, and \u0026lt;code\u0026gt;path\u0026lt;/code\u0026gt; is the path in the container.\r\n+```\r\n+This adds a device of type disk to `\u0026lt;container-name\u0026gt;`. The `source` is the host\u0026#39;s file path, and `path` is the path in the container.\r\n \r\n@@ -42,6 +39,6 @@ Due to how permissioning works on unprivileged containers, the mount permissions\n \r\n-The next step is to get the uid/gid of the user that needs to access the mounted files in the container. To get this, simply run \u0026lt;code\u0026gt;id \u0026lt;user\u0026gt;\u0026lt;/code\u0026gt; on the user. \r\n+The next step is to get the uid/gid of the user that needs to access the mounted files in the container. To get this, simply run `id \u0026lt;user\u0026gt;` on the user. \r\n \r\n For example, to get the uid of postgres:\r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n # id postgres\r\n@@ -49,3 +46,3 @@ For example, to get the uid of postgres:\n uid=70(postgres) gid=70(postgres) groups=70(postgres),70(postgres)\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n@@ -54,8 +51,6 @@ We then add these uid/gids to our offset (100000) and chown the files on the hos\n Again following postgres as an example:\r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n # chown -R 100070:100070 /opt/storage/\u0026lt;service-name\u0026gt;/postgresql/\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n The mounted files should now show up as being owned by the correct user inside of the container.\r\n-\r\n-[[Category:Admin guides]]\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:23:32Z",
      "date_modified": "2023-09-24T20:23:32Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "8dd78fe",
      "url": "https://wiki.nixnet.services/hypha/logrotate",
      "title": "Edit ‘logrotate’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘logrotate’\u003c/b\u003e (by amolith at 24 Sep 23 20:21 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/logrotate\"\u003elogrotate\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/logrotate.myco b/logrotate.myco\nindex 14fd9a7..e26f816 100644\n--- a/logrotate.myco\n+++ b/logrotate.myco\n@@ -15,3 +15,3 @@ On a typical [[Debian|Debian installation]], the default configs along with appl\n ```\r\n-It will rotate logs every day and keep 7 copies before [[wikipedia:shred (Unix)|shredding]] them. In essence, this is the same as keeping logs for a week before discarding them. \r\n+It will rotate logs every day and keep 7 copies before [[Wikipedia\u0026gt;shred (Unix)|shredding]] them. In essence, this is the same as keeping logs for a week before discarding them. \r\n \r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:21:31Z",
      "date_modified": "2023-09-24T20:21:31Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "77bc65b",
      "url": "https://wiki.nixnet.services/hypha/logrotate",
      "title": "Edit ‘logrotate’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘logrotate’\u003c/b\u003e (by amolith at 24 Sep 23 20:21 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/logrotate\"\u003elogrotate\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/logrotate.myco b/logrotate.myco\nindex ea3d4e4..14fd9a7 100644\n--- a/logrotate.myco\n+++ b/logrotate.myco\n@@ -1,8 +1,7 @@\n-{{DISPLAYTITLE:logrotate}}\r\n-[https://linux.die.net/man/8/logrotate logrotate] is a tool for automatically rotating server logs. It can be configured to keep them indefinitely, for a certain period, compress them after rotation, delete, shred, email them somewhere, etc. I find it incredibly useful to ensure I know what logs are kept, for how long, and that they\u0026#39;re securely deleted.\r\n+[[https://linux.die.net/man/8/logrotate | logrotate]] is a tool for automatically rotating server logs. It can be configured to keep them indefinitely, for a certain period, compress them after rotation, delete, shred, email them somewhere, etc. I find it incredibly useful to ensure I know what logs are kept, for how long, and that they\u0026#39;re securely deleted.\r\n \r\n-= Configuration =\r\n-On a typical [[Debian|Debian installation]], the default configs along with application-specific files are stored in \u0026lt;code\u0026gt;/etc/logrotate.d\u0026lt;/code\u0026gt;. Read \u0026lt;code\u0026gt;man logrotate\u0026lt;/code\u0026gt; for detailed information about what\u0026#39;s what but here\u0026#39;s my general template.\r\n+= Configuration\r\n+On a typical [[Debian|Debian installation]], the default configs along with application-specific files are stored in `/etc/logrotate.d`. Read `man logrotate` for detailed information about what\u0026#39;s what but here\u0026#39;s my general template.\r\n \r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n /path/to/log/location/*file.extension {\r\n@@ -15,7 +14,5 @@ On a typical [[Debian|Debian installation]], the default configs along with appl\n }\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n It will rotate logs every day and keep 7 copies before [[wikipedia:shred (Unix)|shredding]] them. In essence, this is the same as keeping logs for a week before discarding them. \r\n \r\n-\u0026lt;code\u0026gt;shredcycles 32\u0026lt;/code\u0026gt; tells logrotate to overwrite the file 32 times with different types of data before the final write with 0s. When files are \u0026quot;deleted\u0026quot;, what actually happens is the space where that file was is simply marked as empty so other files can be written on top of it. This allows for data recovery. 32 writes over the same block range is the limit at which any known recovery program can have any measure of success. If the data has been overwritten 32 times, it is \u0026#39;\u0026#39;gone\u0026#39;\u0026#39;. The 33rd time is to hide the fact that the file ever existed in the first place. \u0026#39;\u0026#39;\u0026#39;NOTE:\u0026#39;\u0026#39;\u0026#39; this is \u0026#39;\u0026#39;100%\u0026#39;\u0026#39; useless with SSDs due to how files are written to the storage device. If your server has an HDD, I highly recommend using \u0026lt;code\u0026gt;shred\u0026lt;/code\u0026gt; with 32 cycles. Otherwise, don\u0026#39;t bother and save some CPU cycles instead.\r\n-\r\n-[[Category:Admin guides]]\r\n+`shredcycles 32` tells logrotate to overwrite the file 32 times with different types of data before the final write with 0s. When files are \u0026quot;deleted\u0026quot;, what actually happens is the space where that file was is simply marked as empty so other files can be written on top of it. This allows for data recovery. 32 writes over the same block range is the limit at which any known recovery program can have any measure of success. If the data has been overwritten 32 times, it is **gone**. The 33rd time is to hide the fact that the file ever existed in the first place. //NOTE:// this is **100%** useless with SSDs due to how files are written to the storage device. If your server has an HDD, I highly recommend using `shred` with 32 cycles. Otherwise, don\u0026#39;t bother and save some CPU cycles instead.\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:21:18Z",
      "date_modified": "2023-09-24T20:21:18Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "374138d",
      "url": "https://wiki.nixnet.services/hypha/libvirt",
      "title": "Edit ‘libvirt’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘libvirt’\u003c/b\u003e (by amolith at 24 Sep 23 20:19 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/libvirt\"\u003elibvirt\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/libvirt.myco b/libvirt.myco\nindex dc49542..205f2d4 100644\n--- a/libvirt.myco\n+++ b/libvirt.myco\n@@ -1,14 +1,12 @@\n-{{DISPLAYTITLE:libvirt}}\r\n-{{admin guides}}\r\n-\r\n-= Server =\r\n-The following commands should be executed as the \u0026lt;code\u0026gt;root\u0026lt;/code\u0026gt; user. This is going to be a headless system so no graphical components are necessary; \u0026lt;code\u0026gt;--no-install-recommends\u0026lt;/code\u0026gt; will prevent them from being installed and lead to a lighter OS.\r\n-\u0026lt;pre\u0026gt;\r\n+= Server\r\n+The following commands should be executed as the `root` user. This is going to be a headless system so no graphical components are necessary; `--no-install-recommends` will prevent them from being installed and lead to a lighter OS.\r\n+```\r\n apt install --no-install-recommends qemu-kvm qemu-utils libvirt-clients libvirt-daemon-system netcat-openbsd dnsmasq\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n+\r\n+After installing these, the `libvirt` processes will start automatically so we can connect to it locally.\r\n \r\n-After installing these, the \u0026lt;code\u0026gt;libvirt\u0026lt;/code\u0026gt; processes will start automatically so we can connect to it locally.\r\n+We also want a **nonroot** user for managing these VMs.\r\n \r\n-We also want a \u0026#39;\u0026#39;nonroot\u0026#39;\u0026#39; user for managing these VMs.\r\n-\u0026lt;pre\u0026gt;\r\n+```\r\n useradd -m \u0026lt;name\u0026gt; -s /bin/bash -G libvirt\r\n@@ -17,6 +15,6 @@ cp ~/.ssh/authorized_keys /home/\u0026lt;name\u0026gt;/.ssh\n chown -R \u0026lt;name\u0026gt;: /home/\u0026lt;name\u0026gt;\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n-The next line is only necessary if you use [https://github.com/kovidgoyal/kitty/ kitty] as your terminal.\r\n-\u0026lt;pre\u0026gt;\r\n+The next line is only necessary if you use [[https://github.com/kovidgoyal/kitty/ | kitty]] as your terminal.\r\n+```\r\n cp -r ~/.terminfo /home/\u0026lt;name\u0026gt;/\r\n@@ -24,10 +22,9 @@ cp ~/.bashrc /home/\u0026lt;name\u0026gt;/\n chown -R \u0026lt;name\u0026gt;: /home/\u0026lt;name\u0026gt;\r\n-\u0026lt;/pre\u0026gt;\r\n+```\r\n \r\n-Before setting your local machine up for managing VMs, download an image or two. I always recommend [https://www.debian.org/distrib/netinst Debian] of course. Depending on what application it\u0026#39;ll be used for, you may want to consider [https://www.debian.org/devel/debian-installer/ Debian Testing] as it will have more up-to-date packages. I also recommend [https://alpinelinux.org/downloads/ Alpine Linux] if you want something more lightweight. Keep in mind, however, that this will require more setup. Unfortunately, some applications have a hard requirement for [https://ubuntu.com/download/server Ubuntu] so you may want to download that as well. All of these images should be stored in \u0026lt;code\u0026gt;/var/lib/libvirt/images\u0026lt;/code\u0026gt;\r\n+Before setting your local machine up for managing VMs, download an image or two. I always recommend [[https://www.debian.org/distrib/netinst | Debian]] of course. Depending on what application it\u0026#39;ll be used for, you may want to consider [[https://www.debian.org/devel/debian-installer/ | Debian Testing]] as it will have more up-to-date packages. I also recommend [[https://alpinelinux.org/downloads/ | Alpine Linux]] if you want something more lightweight. Keep in mind, however, that this will require more setup. Unfortunately, some applications have a hard requirement for [[https://ubuntu.com/download/server | Ubuntu]] so you may want to download that as well. All of these images should be stored in `/var/lib/libvirt/images`\r\n \r\n-= Local =\r\n-{{Note|Switch this to [https://www.libvirt.org/manpages/virsh.html virsh] and document process|error}}\r\n-[[wikipedia:Virt manager|virt-manager]] will be used to manage these VMs and it can be installed on virtually (heh) any Linux system.\r\n-\u0026lt;pre\u0026gt;\r\n+= Local\r\n+[[Wikipedia\u0026gt;Virt manager]] will be used to manage these VMs and it can be installed on virtually (heh) any Linux system.\r\n+```\r\n apt-get install virt-manager (Debian/Ubuntu)\r\n@@ -37,15 +34,13 @@ emerge virt-manager (Gentoo)\n pkg_add virt-manager (OpenBSD)\r\n-\u0026lt;/pre\u0026gt;\r\n-\r\n-Open the \u0026#39;\u0026#39;Virtual Machine Manager\u0026#39;\u0026#39; application then go to \u0026lt;code\u0026gt;File\u0026lt;/code\u0026gt; -\u0026gt; \u0026lt;code\u0026gt;Add connection\u0026lt;/code\u0026gt;. Set the first field to \u0026lt;code\u0026gt;QEMU/KVM\u0026lt;/code\u0026gt;, check the SSH box, fill in \u0026lt;code\u0026gt;Username\u0026lt;/code\u0026gt; with what you used above for \u0026lt;code\u0026gt;\u0026lt;name\u0026gt;\u0026lt;/code\u0026gt;, and your hostname is whatever you have set in your [[Debian#\u0026quot;Automating\u0026quot; SSH login|SSH config]]. I also recommend checking \u0026lt;code\u0026gt;Autoconnect\u0026lt;/code\u0026gt; but it\u0026#39;s not absolutely necessary.\r\n+```\r\n \r\n-VM creation is very specific to the service you\u0026#39;ll be running in it. However, here is a general overview. To create a new VM, click the button in the top left then choose \u0026lt;code\u0026gt;Local install media\u0026lt;/code\u0026gt; then click \u0026lt;code\u0026gt;Browse\u0026lt;/code\u0026gt;. You\u0026#39;ll be able to choose your \u0026lt;code\u0026gt;.iso\u0026lt;/code\u0026gt; there. After making your selection, clear the text in the \u0026lt;code\u0026gt;Choose the operating system . . .\u0026lt;/code\u0026gt; field then start typing the name of whatever the OS. In the case of \u0026lt;code\u0026gt;debian-10.4.0-amd64-netinst.iso\u0026lt;/code\u0026gt;, you\u0026#39;d want to type \u0026lt;code\u0026gt;Debian\u0026lt;/code\u0026gt; then select \u0026lt;code\u0026gt;Debian 10\u0026lt;/code\u0026gt;. Continue and allocate whatever RAM/CPU you want to give the server; The defaults will generally be adequate but you may want to bump them up a little. Storage is even more specific to the service but 30 GB will \u0026#39;\u0026#39;typically\u0026#39;\u0026#39; do well unless you\u0026#39;re running a storage or media server. In those cases, you\u0026#39;ll want a \u0026#39;\u0026#39;lot\u0026#39;\u0026#39; more. Continuing, name the volume whatever you\u0026#39;d like (\u0026lt;code\u0026gt;nc1\u0026lt;/code\u0026gt; for [[wikipedia:Nextcloud|Nextcloud]], \u0026lt;code\u0026gt;ws1\u0026lt;/code\u0026gt; for a webserver, something along those lines), and optionally tick the box to \u0026lt;code\u0026gt;Customise configuration before install\u0026lt;/code\u0026gt;. I do recommend this as you\u0026#39;ll be able to delete some extraneous features like a virtual sound card.\r\n+Open the **Virtual Machine Manager** application then go to `File` -\u0026gt; `Add connection`. Set the first field to `QEMU/KVM`, check the SSH box, fill in `Username` with what you used above for `\u0026lt;name\u0026gt;`, and your hostname is whatever you have set in your [[Debian#\u0026quot;Automating\u0026quot; SSH login|SSH config]]. I also recommend checking `Autoconnect` but it\u0026#39;s not absolutely necessary.\r\n \r\n-== VM config ==\r\n-#Boot Options\r\n-##✅ Start virtual machine on host boot up\r\n-#Right-click and remove \u0026lt;code\u0026gt;Sound \u0026lt;card\u0026gt;\u0026lt;/code\u0026gt;\r\n+VM creation is very specific to the service you\u0026#39;ll be running in it. However, here is a general overview. To create a new VM, click the button in the top left then choose `Local install media` then click `Browse`. You\u0026#39;ll be able to choose your `.iso` there. After making your selection, clear the text in the `Choose the operating system . . .` field then start typing the name of whatever the OS. In the case of `debian-10.4.0-amd64-netinst.iso`, you\u0026#39;d want to type `Debian` then select `Debian 10`. Continue and allocate whatever RAM/CPU you want to give the server; The defaults will generally be adequate but you may want to bump them up a little. Storage is even more specific to the service but 30 GB will **typically** do well unless you\u0026#39;re running a storage or media server. In those cases, you\u0026#39;ll want a **lot** more. Continuing, name the volume whatever you\u0026#39;d like (`nc1` for [[Wikipedia\u0026gt;Nextcloud]], `ws1` for a webserver, something along those lines), and optionally tick the box to `Customise configuration before install`. I do recommend this as you\u0026#39;ll be able to delete some extraneous features like a virtual sound card.\r\n \r\n-Unless you know you want to change something else, leave the rest as it is for now and click \u0026lt;code\u0026gt;✅ Begin Installation\u0026lt;/code\u0026gt; at the top of that window. Once it\u0026#39;s finished, you\u0026#39;ll be dropped to the OS\u0026#39;s installer screen. See the related guides for [[Debian]], [[Alpine]], and [[Ubuntu]].\r\n+== VM config\r\n+* Boot Options\r\n+** ✅ Start virtual machine on host boot up\r\n+* Right-click and remove `Sound \u0026lt;card\u0026gt;`\r\n \r\n-[[Category:Admin guides]]\r\n+Unless you know you want to change something else, leave the rest as it is for now and click `✅ Begin Installation` at the top of that window. Once it\u0026#39;s finished, you\u0026#39;ll be dropped to the OS\u0026#39;s installer screen. See the related guides for [[Debian]], [[Alpine]], and [[Ubuntu]].\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:19:31Z",
      "date_modified": "2023-09-24T20:19:31Z",
      "author": {
        "name": "amolith"
      }
    },
    {
      "id": "ea90191",
      "url": "https://wiki.nixnet.services/hypha/irc",
      "title": "Edit ‘irc’ by amolith",
      "summary": "\n\u003cp\u003e\u003cb\u003eEdit ‘irc’\u003c/b\u003e (by amolith at 24 Sep 23 20:04 UTC)\u003c/p\u003e\n\u003cp\u003eHyphae affected: \n\u003ca href=\"/hypha/irc\"\u003eirc\u003c/a\u003e\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ediff --git a/irc.myco b/irc.myco\nindex 6c51b49..7618ffd 100644\n--- a/irc.myco\n+++ b/irc.myco\n@@ -1,20 +1,20 @@\n-{{Note|A web-based IRC client has not bet set up yet|warn}}\r\n+++Note: A web-based IRC client has not bet set up yet++\r\n \r\n-[[wikipedia:IRC|IRC]] stands for \u0026#39;\u0026#39;Internet Relay Chat\u0026#39;\u0026#39; and was one of the first instant messaging protocols. Many say it has been superseded by other protocols and platforms but [https://drewdevault.com/2019/07/01/Absence-of-features-in-IRC.html some] make very good arguments for why it\u0026#39;s still very useful. Personally, I prefer it to pretty much every IM app or platform I\u0026#39;ve tried.\r\n+[[Wikipedia\u0026gt;IRC]] stands for //Internet Relay Chat// and was one of the first instant messaging protocols. Many say it has been superseded by other protocols and platforms, but [[https://drewdevault.com/2019/07/01/Absence-of-features-in-IRC.html | some]] make good arguments for why it\u0026#39;s still very useful.\r\n \r\n-Make sure you read the [[{{FULLPAGENAME}}/Privacy|Privacy Policy]] and [[{{FULLPAGENAME}}/Terms of Service|Terms of Service]].\r\n+Make sure you read the [[./Privacy Policy]] and [[./Terms of Service]].\r\n \r\n-= Connecting =\r\n-*\u0026#39;\u0026#39;\u0026#39;Hostname:\u0026#39;\u0026#39;\u0026#39; \u0026lt;code\u0026gt;irc.nixnet.services\u0026lt;/code\u0026gt;\r\n-*\u0026#39;\u0026#39;\u0026#39;Port:\u0026#39;\u0026#39;\u0026#39; \u0026lt;code\u0026gt;6697\u0026lt;/code\u0026gt;\r\n-**If your client doesn\u0026#39;t support TLS, I recommend looking into [[wikipedia:Stunnel|Stunnel]]\r\n+= Connecting\r\n+* **Hostname:** `irc.nixnet.services`\r\n+* **Port:** `6697`\r\n+** If your client doesn\u0026#39;t support TLS, I recommend looking into [[Wikipedia\u0026gt;Stunnel]]\r\n \r\n-The \u0026quot;official\u0026quot; channels are \u0026lt;code\u0026gt;#nixnet\u0026lt;/code\u0026gt; and \u0026lt;code\u0026gt;#nixnet-ot\u0026lt;/code\u0026gt;. As the names suggest, the first should be used for anything related to [https://nixnet.services NixNet] and the latter for anything off-topic. Rules are few but check the [[{{FULLPAGENAME}}/Terms of Service|Terms of Service]] for specifics.\r\n+The “official” channels are `#nixnet` and `#nixnet-ot`. As the names suggest, the first should be used for anything related to [[https://nixnet.services | NixNet]] and the latter for anything off-topic. Rules are few but check the [[./Terms of Service]] for specifics.\r\n \r\n-Don\u0026#39;t forget to run \u0026lt;code\u0026gt;/list\u0026lt;/code\u0026gt; to see all the public channels!\r\n+Don\u0026#39;t forget to run `/list` to see all the public channels!\r\n \r\n-= General =\r\n-I take a light approach to moderation in general but particularly with IRC. \u0026#39;\u0026#39;\u0026#39;Don\u0026#39;t\u0026#39;\u0026#39;\u0026#39; be \u0026quot;that person\u0026quot; who gives [[wikipedia:IRC operator|opers]] a hard time. [[wikipedia:Internet Relay Chat#Modes|Channel modes]] are set to \u0026lt;code\u0026gt;+nst\u0026lt;/code\u0026gt; by default but can easily be changed.\r\n+= General\r\n+I take a light approach to moderation in general but particularly with IRC. //Don\u0026#39;t// be “that person” who gives [[Wikipedia\u0026gt;IRC operators]] a hard time. [[Wikipedia\u0026gt;IRC#Modes]] are set to `+nst` by default, but can easily be changed.\r\n \r\n-This server runs [https://oragono.io/ oragono] and comes with a lot of nice features baked-in, such as NickServ, ChanServ, message history (disabled by default), and multi-client support. The docs are a mixture of information pertaining to admins and users; ignore the admin content and focus on what might be pertinent to users.\r\n+This server runs [[https://ergo.chat | ergo]] and comes with a lot of nice features baked-in, such as NickServ, ChanServ, message history (disabled by default), and multi-client support. The docs are a mixture of information pertaining to admins and users; ignore the admin content and focus on what might be pertinent to users.\r\n \r\n@@ -23,6 +23,3 @@ This server runs [https://oragono.io/ oragono] and comes with a lot of nice feat\n \r\n-= Clients =\r\n-If you would like a web client, I host [https://thelounge.chat TheLounge] at [https://irc.nixnet.services irc.nixnet.services]. If you\u0026#39;d like a [[wikipedia:Text-based user interface|TUI]], there are some great clients in the [https://codeberg.org/shellowl/delightful-cli#user-content-instant-messaging delightful-cli] list. I personally use [[wikipedia:WeeChat|WeeChat]]. For graphical client, [[wikipedia:HexChat|HexChat]] is a popular option, as is [[wikipedia:Pidgin (software)|Pidgin]].\r\n-\r\n-= IRC Howto =\r\n-[[IRC Howto|Finish me]]\r\n+= Clients\r\n+For a graphical client, [[Wikipedia\u0026gt;HexChat]] is a popular option if you\u0026#39;re on Linux, take a look at [[https://apps.gnome.org/Polari/ | Polari]]. If you\u0026#39;d like a [[Wikipedia\u0026gt;Text-based user interface]], there are some great clients in the [[https://codeberg.org/shellowl/delightful-cli#user-content-instant-messaging | delightful-cli]] list. Personally, I interact with IRC using an [[XMPP]] client through [[https://irc.cheogram.com/ | Cheogram\u0026#39;s bridge]].\r\n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "date_published": "2023-09-24T20:04:11Z",
      "date_modified": "2023-09-24T20:04:11Z",
      "author": {
        "name": "amolith"
      }
    }
  ]
}