nextcloud

Immolation at the altar of software transmutation

For the past few years we’ve been seeking to leave the grasp of Google as we’ve noticed a serious divergence between its lofty aspirations and its actual provision of services. We have personally been using the Google Workspace services through multiple incarnations and they’ve always worked well, even if Google decides to shove its dick Buzz Meet chat client down your throat. Most of the time you can disable that.

But it is now obvious the teams running these services are under tremendous pressure to monetize the services beyond the cost per user they charge for entrance. What this service does for us, at its core, is the integration between Gmail and Calendar, with everything else being just a good extra to have. Google won this war on the web in the aughts while Microwoft won it on the desktop back in the 90s with Outlook and Excel.

Yes, there are other companies that do this but it is likely you’ll still use the Gmail or Gcalendar apps, the Outlook apps, or the iOS apps if you’re in the Apple ecosystem. Even people self-hosting their own services will default to using these apps as they’re a known interface that doesn’t change too often.

Now, my previous post was Perhaps WSL2 Should be a Wake-up Call, which itself sparked a lively discussion on lobste.rs, where the author makes this comment

And I think one of the reasons for that is the constant software churn in the desktop space. Lots of things, including various GTK/Gnome or KDE components, ritually get tore down, burnt and rebuilt every 6-8 years or so, and at one point you just get perpetual beta fatigue. I’m not sure how else to call it. Much of it, in the last decade, has been in the name of “better” or “more modern” UX, and yet we’re not in a much better position than ten years ago in terms of userbase. Meanwhile, Microsoft swoops in and, on their second attempt, comes up with a pretty convincing Linux desktop, with a small crew and very little original thought around it, just by focusing on things that actually make a difference.

He’s only making a reference to the Desktop space but we think it can also be applied to the web.

Perusing RSS we found this post by someone more or less looking to do the same thing as us: Organize their life by hosting their own services. While the post is from a few months ago (March 2021), most of these principles still apply as we write this post:

  • Email is what it is. You just have to fucken deal with it.
  • CalDAV and iCalendar are getting even more crufty and their libraries aren’t well maintained. Clients will happily YOLO your data into oblivion if you’re not careful.
  • WebDAV is just… okay, I guess? File sync is more or less a solved challenge. But even then keeping notes in Markdown is a challenge. We prefer CommonMark but support is still spotty years after the specification came out.
  • Tasks? You’re better off keeping your stuff in text files. It’s that bad. Or use a dedicated service.

Now, those are the protocols. What about the actual software?

Servers:
– Email? Sure, you can run your own, it’s not that hard. Plenty of options out there and AFAIK they’re not immolating themselves anytime soon.
– Nextcloud almost decided immolate itself at the altar of language transmutation cos Owncloud decided to do it and people got jealous. Using PHP 8.
– Radicale is coming along on Python3. But myself I still have a bad taste after the move from Python2 to Python3. That immolation left a lot of ash to clean up.
sabre/dav uses PHP 5.4 🤢
– Other solutions… lol what other solutions?

Clients, mobile:
Email: You’ll probably still use the Gmail, Outlook, or Apple apps via IMAP. The open source options… are not well-maintained, or make questionable UI/UX decisions, or are just plain ugly. They don’t have to be better or more modern like in the quote above, but your eyes shouldn’t feel like bleeding when you open them.
Calendar: DAVx⁵ is coming along, but it’s a client library, enabling apps with an actual UI/UX to talk to your self-hosted services. Android only though. Haven’t found any indications of it.
– You need DAVx⁵ to get Android to sync calendar with the OS. The documentation en’t the best. It does work once you get it to work just don’t fiddle with the thing.
– Using iOS? Good luck, at least Apple decided to build support into it. You’ll cry when they take it away.
– You could use web-based interfaces but… then you have to deal with browsers. Here we must commend Mozilla for turning Firefox into a shitty Chrome clone.
Contacts: You’re still relying on DAVx⁵.
Files: Nextcloud app works just fine on both Android and iOS. It does force you go to through it to get to your files as opposed to actively storing them on your devices; you can use FolderSync. Looking around we didn’t find an equivalent on iOS.
Tasks: Again, you’re better off with plain text files or a dedicated service for this.

Clients, desktop:
Email: Seriously, this is fucken ridiculous. Thunderbird still trudging along but its developers seriously want to self-immolate after Mozilla just cut them away. There are no other serious desktop email clients other than Outlook, or going web-based. Whatever GNOME or KDE devlopers cooked up expect them to switch the interface on you cos they wanted to self-immolate. You could go text based but that only works if you’re familiar with the command line. Most people aren’t.
– Going web-based? Most open source web clients have… questionable interfaces.
Contacts: Again, you’re either using Thunderbird, Outlook, or web-based. No, GNOME/KDE apps don’t count. Yes, I’ve used them.
Files: Nextcloud is pretty nice on this cos it stays out of your way, instead of shoving itself into your workflow like Dropbox tries.
Tasks: You have more variety here but… seriously, just use text files. Or a dedicated service that you like.

For now we’re using Nextcloud. We’re okay with it and we’re personally glad it’s sticking with PHP. We just don’t like its newfound tendency to act like it’s the systemd of sync and collaboration. It calls itself a “suite” but most things are only accessible through the web interface. It works fine and that’s all it has to do.

The problem is the churn of apps around the protocols it uses. I can only imagine what GNOME/KDE apps would be like if their devlopers had stuck with the same paradigms and then iterating on them as time went by. Evolution would have 21 years worth of work. Kmail gets sacrificed to whatever the new version of Qt is.

We’re just rambling now but… We still remember Amarok 1.4.6. That one hurt so bad we started using Spotify instead after Clementine deleted a third of our MP3s.

wiki.vim update

Alright so after a while we just got tired of vimvwiki and vim-pandoc-syntax fighting over syntax formatting and coloring and we weren’t using all the features available in vimwki so ended up switching to wiki.vim and it’s working out pretty good after we switched the journal configuration from daily to monthly with these settings:

Plugin 'lervag/wiki.vim'
let g:wiki_root = '~/Nextcloud/wiki.vim/' " Have wiki live inside Nextcloud
let g:wiki_filetypes = ['md']             " markdown wiki
let g:wiki_link_extension = '.md'         " markdown wiki
let g:wiki_link_target_type = 'md'        " markdown wiki
let g:wiki_write_on_nav = 1               " Write to disk when navigating from file to file
let g:wiki_journal = { 'frequency': 'monthly', 'date_format': { 'monthly': '%Y-%m'}} " Set to journal monthly

The notes are also in the vimrc file cos we know we’ll forget what each specific setting does. Also, why do vim plugin authors think the vim help file is enough? At least have the fucken decency of making it into HTML so you can link to specific bits of it. We hate reading documentation in vim itself when there are much better solutions out there.

But anyways.

We’re using the barest of features cos we don’t really know enough vim commands but we’re already plenty quick with the ones we know. Now we’re trying to figure out what would happen if we stick this wiki into a git repository and manage it that way, which would be awesome for a todo list.

So what we’ve got right now is usually two windows side by side, one for the todo.md file and the other one for the journal for that month. It’s working out pretty well as long as we remember to do a :wa to write all files to disk so Nextcloud doesn’t complain about version differences between server and clients.

Nextcloud itself is still working pretty good. The VM host it lives in will get rebuilt and I’m thinking I’ll migrate from Ubuntu to Debian when I setup a new VM for it.

Aaaah what else was there…? Ah yeah, got three jerbs now

  • Barista
  • Host
  • Sysadmin

The todo.md file mentioned above didn’t even exist until three days ago cos it wasn’t needed but now it absolutely is. Stuff is put on paper first (can’t have phone out at barista/host jobs without a manager complaining), then it goes into the file. It’s working out pretty well. Yes there are apps like Google Tasks, Todoist, Google Keep, Notion but they’re all just so slow and then you’re committed to their own specific way of doing things.

No thanks, I’ll just keep everything in text files cos plain text is forever.

Going back to the jobs… life is going to be absolute mayhem for a few months or until we break and get fired from one, which personally hope is the barista jerb— main clientele will be law enforcement and en’t nobody got time for abuse from those entities.

Ah yes! Another useful tool is barinsta. The regular Instagram app just kept giving me ads and that gets so annoying. The interface harkens back to the initial releases of touchscreen apps but the developer makes it very clear they want you to be conscious of your actions while using the app. The fact you don’t get any ads is just an extra benefit of that. Thanks to it it’s super quick to catch up on my feed instead of spending an hour and still be missing stuff. Install it from F-Droid and if you see anyone trying to put it up on Google Play, report it to the devs.

Other than that we’re also trying to post to Flickr more often. We’re paying for it, might as well use it.

Pretty sure that’s it for now.

vim with rclone on MFA-enabled Nextcloud

I forgot that I enabled MFA on my Nextcloud instance and it broke rclone. This is something the Nextcloud documentation makes clear but neither the instance nor rclone itself will tell you what’s actually wrong or how to fix it.

First, on Nextcloud:

  1. Go to Settings › Security.
  2. Scroll down to the bottom. Enter something descriptive like “rclone” in the entry box, then click Generate App Password.
  3. Nextcloud will display an application-specific password. Leave the screen here. Nextcloud will only display it the one time

You can always start over if you don’t copy it so depending on your password policies you might want to save it in your password manager.

Now, switch over to your shell:

  1. First, kill the current rclone mount: $ fusermount -u /home/nullrend/Nextcloud. Do not just kill the rclone job. Apparently the rclone devs think it’s too hard to implement a rclone umount /mount/dir command or sum’thin’.
  2. Do $ rclone config and delete the current Nextcloud remote endpoint. Much easier to start from scratch.
  3. When you get to the password entry, enter the password given to you by Nextcloud.
  4. Finish the process.

At this point you can save the password on Nextcloud so it actually allows rclone to connect through WebDAV.

To mount the new remote endpoint do something like $ rclone mount endpoint:/ ~/Nextcloud --daemon --dir-cache-time 120m --max-read-ahead 256 --no-modtime --vfs-cache-mode full --vfs-cache-poll-interval 120m. You will need to play with the caching flags depending on what you’re doing and what your needs are.

For my own use case I’m mostly using vim to interact with my vimwiki files so I also often do :set noswapfile to stop vim from bitching about files that are likely open elsewhere.

For want of a nail…

‘k, so in a previous post I wrote how I reworked my note-taking and went back to plain text. I had to make a few changes since then:

  • I couldn’t take the atrocious UI of Epsilon Notes any longer. Fucken’a. I just accessed my notes directly through the Nextcloud app and that worked well enough.
  • Vimwiki is working quite nicely, just wish it didn’t fuck with the filetype highlighting but the built-in works well enough. Better concealment of links would be nice too.

Switched out Epsilon for Markor, which is prettier and less of a pain in the ass. But trying to set it up is when I started running into an issue with Nextcloud:

It does not support bidirectional folder sync. At all.

The way Nextcloud syncs everything means you have to access your files through the Nextcloud app instead of being able to use your usual app to open a file. It’s not that much of a change but it does prove annoying because that change is forced on you by the application instead of you (the user) adjusting your workflow organically. People have been requesting this ability since 2016 and the app still doesn’t have it.

When I was using Dropbox as my syncing backend my workflow would be like this:

  1. Mark KeePass file as a favorite in Dropbox.
  2. Dropbox syncs the file to all devices so it’s available through the filesystem itself.
  3. As the file is now stored in a local filesystem you can now navigate to it as you usually would:
    • On desktop you can use a file manager to view the file and open it. Alternatively you can use KeePass to navigate to the file and open it.
    • On Android you can open your keepass app, navigate to the database file, and open it.
    • On iOS the same flow as Android applies.
  4. Should the file change Dropbox will sync it silently in the background to all devices. Password applications will notice the change and ask if you want to reload.

With Nextcloud it goes something like this:

  1. Mark KeePass file as a favorite in Nextcloud.
  2. Nextcloud will sync the file to desktop clients but only mark it as a favorite in mobile devices.
  3. You now have a split flow as the file will be available through the local filesystem on desktop but not on mobile:
    • On desktop you use a file manager, or use KeePass itself. Same UX as you would in Dropbox.
    • On Android you need to open the Nextcloud app, navigate to the database file and the OS will recognize the filetype and open it. You can’t use your password app directly as the file does not exist in any local filesystem. When Android terminates your password app and you then have to reload the file through the Nextcloud app.
    • On iOS it looks like you can select which folders to sync to local filesystem. I haven’t tried using the iOS app myself but if someone can confirm this is the behavior it’d be awesome.
  4. Should the file change Nextcloud will sync it silently in the background but behavior will vary depending on platform:
    • Desktop: File is available through local filesystem. Password applications will notice the change and ask if you want to reload.
    • Android: You go through the Nextcloud app, same as before. Trying to use a password app will result in the app telling you the file doesn’t exist, so you then have to go through the Nextcloud app.
    • iOS: I’m not sure what the behavior is. I’d assume it’s the same as on desktop.

To replicate the default desktop behavior (syncing to local filesystem) you end up having to use other apps like FolderSync. This way files and folders are available just like any other file on the Android device, letting you use automation or customization apps without issues, and saving you from having to configure syncronization settings for each app. Looking at you, Joplin.

My suspicion is Nextcloud developers are doing it this way to increase your awareness of the brand and the application, following the footsteps of Dropbox. For the longest time Dropbox was a rock-solid syncing application that did one thing and it did it really well, but now they’re trying to force changes nobody likes in an effort to make more money.

If this is indeed the case Nextcloud developers are learning all the wrong lessons from Dropbox’ failure to understand what it had. Instead of strenghtening its core they’re throwing a million other things at the wall to see what sticks:

  • Talk: Chat server, basically. There’s already plenty of those already available and I don’t see them supplanting IRC, Discord, or Slack. Ever. Nevermind Zoom or Jitsi.
  • Deck: Project management? There are better apps for that that are easier to configure, manage and secure.
  • Notes: There are a myriad note taking applications out there that work better. I don’t need yet another one.
  • Passwords: Again, there are better alternatives: KeePass, 1Password, LastPass.

Nextcloud has a chance to do that one thing well and do it better than Dropbox ever did— that is, file syncing. I feel they’re consciously choosing to throw it away because they want to get a bit more clout and a bit more money. If they keep at it they’re going to end up like Mozilla.

Another attempt at a note-taking workflow

In a previous post I mentioned one of the tools I use is Wiki.js. It was a great thing to learn how to set it up but… I was never entirely happy with it:

  • It’s somewhat slow on loading.
  • Not that customizable yet.
  • The update process is a total pain in the ass. They want you to use Docker and this ‘ere server can run it but performance wouldn’t be that nice.
  • On mobile I have to depend on the vagaries of whatever browser I’m using (Firefox) so I don’t get that good of an editing interface.
  • This is a private repository of knowledge so if it turns out wiki.js has a security issue my wiki is now at risk until I go through the pain of updating again.

So that’s that. I’d been playing with vimwiki since it’s text-based. After a bit of playing I was able to make it work nicely on the gVim instance I run on the Windows 10 desktop and the Ubuntu instance I run in WSL.

The mobile side of things was immensely helped along by Epsilon Notes, which blows iA Writer completely out of the water. Along the way I tried using Joplin which at first glance seems awesome but then you run into this issue:

Screencapture of JoplinApp filenames

Yes, I get the logic of completely unique filenames but it also means that I’m locked into the app. This is something people have complained about as it defeats all efforts at interoperability. I mean, these are fucken markdown files. And this is an open source app!

Oh right, it also uses its own WebDAV connection to the Nexcloud instance, so slow your roll.

So back to Epsilon. It’s got a few goodies:

  • Line numbers
  • CommonMark is the default markdown dialect.
  • It’s native to Android.
  • Let’s you use front matter for tags but doesn’t require it. I personally don’t care for it.
  • It sets up its own folder in the device filesystem which you can then sync with Nextcloud.

The workflow

All right, so this is what I have right now

vim/gvim

Assuming there’s already a working Windows gVim instance, a working WSL installation, and a working Nextcloud desktop client:

  1. Setup vim with vimwiki.
  2. Configure vimwiki to store its files in a directory being synced by the Nextcloud desktop client. For the sake of simplicity and avoid changing my .vimrc file unnecesarily in WSL/ubuntu I symlinked ~/vimwiki to the appropriate directory in Windows; this way the _vimrc file in gVim could remain the same. Using either vim instance gets me to the same location.
  3. Create your vimwiki index file: <Leader>ww, and save it. It should get picked up by Nextcloud.

Nextcloud

Using the web interface or the Android client, mark the vimwiki folder as a favorite so Nextcloud keeps it synced at all times. I don’t think there’s a way to do this in the desktop client yet.

Epsilon Notes

Assuming there’s already a working Nextcloud app

  1. Install Epsilon from the Play Store.
  2. Tap the folder icon on the top right and navigate to /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/USER@HOST/vimwiki/. If you have multiple Nextcloud accounts on the same app you’ll see all of those listed with a USER@HOST folder each and you can just jump between folders.

Another way of doing this is setting up custom folders but I think doing it this way makes for a simpler configuration. It’d probably be really useful you have multiple vimwikis or multiple Nextcloud accounts though.

Bonus: Servers

I have a couple of boxes that run headless and I also wanted to have my notes available on there. There isn’t a terminal Nextcloud client but I found Rclone. I could have used cadaver but Rclone is designed specifically for cloud file storage:

These instructions worked under my Debian 10 install:

  1. Install rclone and fuse3: sudo aptitude install rclone fuse3.
  2. Configure Rclone with rclone config. Documentation.
  3. Create an Rclone mount with something like
rclone --vfs-cache-mode writes mount NEXTCLOUD:/vimwiki ~/vimwiki --daemon

Which assumes NEXTCLOUD is what you named the remote configuration, your vimwiki directory lives at $HOME, and you want the connection to remain alive until you decide to stop it manually. The --vfs-cache-mode writes flag will enable some amount of caching. Documentation.
4. At this point you can access your vimwiki as if they were on the local filesystem.

Fucken awesome amirite

SO now we have wiki-like notes that can be edited on desktop, mobile, or server, using whichever editor you prefer. Another bonus: You’re not locked in to anything. I could edit notes on desktop with Notepad++, Sublime Text, or Atom. On mobile you can edit them with whatever text editor you end up with. On a server you can edit them natively with whatever you have at hand.

And in the sad event you don’t have anything you can still access them through the Nextcloud web interface. They even got a markdown editor but I’m not sure what dialect it uses.

The only thing I dont have anymore is a nice clean way to print these notes but this is where pandoc and a print.css file should be useful. If worst comes to worst I can always paste something into LibreOffice and just change the styling that way. Another thing I’ll have to change is how I search for things but since I do have access to the terminal I can always resort to grep if worst comes to worst.

Extras

I did have a few things that led me to try and avoid using web interfaces for this

  • The Website Obesity Crisis. Comments on reddit and Hacker News
  • The reckless, infinite scope of web browsers
  • I tried creating a web browser, and Google blocked me
  • Browser bloat has been a problem for a long, long time now.
  • The proliferation of browser-based text editors (StackEdit, Dillinger, Editor.md, WordPress) that try to do too much and they end up falling flat on their face cos nothing beats the responsiveness of editing locally.
  • The flipside of the above is I can use editors native to each platform. This post was typed on vim, then pasted into WP, for example. This makes for a much, much nicer editing experience specially when doing long-form text or to-do lists.
  • Avoiding lock-in. It was a drag to move from one platform to another and paste everything manually, cos all of these tools depend on locking you in.
  • Security. My Nextcloud instance is exposed to the Internet but I can always implement more things cos I control the network, the hardware, and the operating system.
  • Other people who were also on search of a good editing experience, like this, or this.
  • Easy migration of mark-up. I’m trying to use editors that support CommonMark since that way I can always be more or less sure of how something is going to look if I export it elsewhere, and I have the freedom of switching to something else like ReStructured Text or AsciiDoc, which I have considered.

I’m super excited about this. My notes en’t locked in anywhere and they’re all in plain-text, which is the only thing guaranteed to not change in the next 20 years,