Syncthing is Underrated

Syncthing is an open-source file synchronization client/server application written in Go, which implements its own - equally free - Block Exchange Protocol. All transit communications between syncthing nodes are encrypted using TLS and all nodes are uniquely identified with cryptographic certificates.1 Why I use it My main motivation for using syncthing is for one thing: Music synchronization. I want to listen the same music in my phone as in my laptop or PC (by now you should know I don’t use music streaming services). ...

June 27, 2025 · 2 min · 216 words · Kristian Alexander P

Why Use MPD in 2025

Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music. Through plugins and libraries it can play a variety of sound files while being controlled by its network protocol1. It plays audio files, organizes playlists and maintains a music database, all while using very few resources. In order to interface with it, a separate client is needed. 2 Figure 1: ncmpcpp, one of many mpd terminal clients. ...

June 26, 2025 · (updated June 27, 2025) · 2 min · 392 words · Kristian Alexander P

I3wm

I3wm is my first venture into the world of tiling window manager. After several months getting familiar to gnome desktop environment (in fedora, debian, and ubuntu of course), I got to know archlinux. I got to know how a linux desktop is basically a collection of packages (just like the operating system itself). And with archlinux, I have this freedom (for better or worse), to choose what packages I want to install into my system. ...

June 23, 2025 · (updated June 27, 2025) · 2 min · 272 words · Kristian Alexander P

learning Rust Series: Perfect Number

This will be a part of a series on my rust-learning journey. The goal of this post is to document my process of creating a simple program that determine if the number given is a perfect number1. And also list the perfect number until the given number. Imports 1 use std::io; This is the common input / output modules. Function to determine the perfect number 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fn is_perfect_number(n: i32) -> bool { let mut sum: i32 = 1; let mut i: i32 = 2; while i * i <= n { if n % i == 0 { sum = sum + i + n / i; } i += 1; } if sum == n && n != 1 { return true } else { return false } } This will calculate if the number is a perfect number or not. ...

June 17, 2024 · (updated June 27, 2025) · 4 min · 791 words · Kristian Alexander P

Org Mode Workflow

Table of Contents How I mapped my brain to org-mode Basically what I want is The 5 Steps from David Allen’s GTD Method Capture Clarify Organize Reflect Engage What I will need References Using org-mode Keybindings Specific org-mode variables org-directory and org-agenda-files org-archive-location org-todo-keywords Priority Tags Deadlines and Schedules Time-stamp Deadline Schedule The Agenda view. Configuring org-agenda-custom-commands Refiling and archiving Archiving Refiling Things of interest Using org-capture Capturing with templates Things of interest Synchronization, Capture Methods and everything else org-mode extensions Evil-mode org-fancy-priorities org-modern builtin packages saveplace savehist various files configuration How I mapped my brain to org-mode Lately I found that I am in dire need of an effective task management system as an IT support. There are some days where everything is hectic and I’m lost prioritizing my assignments. There’s moment where I was in the middle of doing one task, and suddenly another request / assignment came out of nowhere (not exactly nowhere, but you get the idea). Task management system is also useful for creating some kind of reporting, although this is not the main goal. ...

March 14, 2024 · (updated June 27, 2025) · 24 min · 4945 words · Kristian Alexander P

Using Terminal Multiplexer

What is a terminal multiplexer? let wikipedia do the talking: A terminal multiplexer is a software application that can be used to multiplex several separate pseudoterminal-based login sessions inside a single terminal display, terminal emulator window, PC/workstation system console, or remote login session, or to detach and reattach sessions from a terminal. It is useful for dealing with multiple programs from a command line interface, and for separating programs from the session of the Unix shell that started the program, particularly so a remote process continues running even when the user is disconnected. ...

March 13, 2024 · (updated June 27, 2025) · 2 min · 397 words · Kristian Alexander P

Literate Configuration with Emacs

Background I’m spending most of my long vacation reorganizing my github repositories, archiving some old repos (mostly android stuffs that I don’t use anymore). And when I’m looking into my dotfiles repos I remember once I’ve tried to use literate programming to manage them. I think one of the difficulties I had was editing the source code block inline. 1 2 3 4 This is how shell code block looks like in /Emacs/ #+begin_src sh echo true #+end_src Editing code blocks inline has many disadvantages, for one, indentation is quite tricky. You’ll never know the whitespaces until you tangled them. I’m sure there are solutions for this problems, but for now I just org-edit-special (bound to C-c '). ...

March 12, 2024 · (updated June 27, 2025) · 2 min · 417 words · Kristian Alexander P

Hugo blog org-capture-templates

Blogging with org-mode I do almost all my note-taking in Emacs org-mode, so naturally I also prefer to write my blog posts in it. As for my ox-hugo blogging flow, I use the less preferred method: one org file per post, the consequence is I cannot just copy-paste the org capture setup provided by the doc site. I also setup my posts in a subdirectory beneath the HUGO_BASE_DIR: 1 tree -n .. Code Snippet 1: my content directory 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 .. ├── about │ └── about.org ├── archives.org ├── configuring-neovim │ └── configuring-neovim.org ├── emacs-avy │ ├── avy.gif │ └── emacs-avy.org ├── emacs-builtin-use-package │ ├── emacs-builtin-use-package.org │ ├── prefix-key.png │ └── which-key-mode.png ├── emacs-evil │ └── emacs-evil.org ├── emacs-general │ └── emacs-general.org ├── emacs-sane-defaults │ ├── default-emacs.png │ ├── emacs-after.png │ ├── emacs-dired.png │ ├── emacs-eshell.png │ ├── emacs-sane-defaults.org │ └── emacs-tetris.png ├── emacs-shell │ ├── emacs-shell.org │ ├── eshell-command-form.png │ ├── eshell-elisp-form.png │ └── eshell.png ├── emacs-version-control │ ├── emacs-magit-status.png │ └── emacs-version-control.org ├── emacs-vertico │ ├── consult-buffer.png │ ├── consult-flymake.png │ ├── consult-outline.png │ ├── consult-yank-pop.png │ ├── corfu-completion.png │ ├── emacs-vertico.org │ ├── emacs-vertico.png │ ├── emacs-without-vertico.png │ ├── marginalia-describe-variable.png │ ├── marginalia-files.png │ ├── marginalia-find-file-with-icons.png │ ├── nerd-icons-corfu.png │ ├── orderless-default.png │ ├── vertico-buffer-mode.png │ ├── vertico-flat-mode.png │ ├── vertico-grid-mode.png │ ├── vertico-indexed-mode.png │ ├── vertico-quick.png │ └── vertico-reverse-mode.png ├── github-action-hugo-emacs │ ├── action-secrets-and-variables.png │ ├── deploy-github.png │ └── github-action-hugo-emacs.org ├── hugo-blogging-org-capture-templates │ ├── hugo-blogging-org-capture-templates.org │ └── transient.png ├── hyprland │ ├── applications.gif │ ├── hyprland.org │ └── hyprland.png ├── i3wm │ ├── i3wm-2025-06-23 23:42:18.gif │ ├── i3wm-2025-06-23_22-28.png │ ├── i3wm-dependency-2025-06-24_00-05.png │ ├── i3wm-scratch-2025-06-23 22-53.gif │ └── i3wm.org ├── learning-rust │ ├── learning-rust.org │ └── rust-perfect-number.png ├── literate-configuration │ ├── github-pages-deployed.png │ ├── literate-configuration.org │ ├── literate-emacs-screenshot.png │ └── org-edit-special.png ├── modular-guix-system-configuration │ ├── EFI-partition.png │ ├── TRAMP.png │ ├── btrfs-subvolumes.png │ ├── cow-store.png │ ├── filesystem.png │ ├── linux-partition.png │ ├── modular-guix-system-configuration.org │ ├── mount-btrfs.png │ ├── mounting-subvolumes.png │ └── swapfile-creation.png ├── notmuch-mail-emacs │ ├── full.png │ └── notmuch-mail-emacs.org ├── org-mode-workflow │ ├── emacs-dashboard.png │ ├── org-agenda-custom-commands-upcoming.png │ ├── org-agenda-custom-commands-work.png │ ├── org-agenda-custom-incomplete.png │ ├── org-agenda-custom-next-three-days.png │ ├── org-agenda-custom-today.png │ ├── org-capture-1.png │ ├── org-capture-2.png │ ├── org-capture-firefox.png │ ├── org-capture-with-template-1.png │ ├── org-capture-with-template-2.png │ ├── org-capture-with-template-3.png │ ├── org-capture-with-template-4.png │ ├── org-mode-workflow.org │ ├── org-modern-agenda.png │ ├── org-modern.png │ ├── org-protocol-capture-firefox.png │ ├── task-flow.svg │ └── vanilla-emacs-org-agenda.png ├── projects │ └── projects.org ├── search.org ├── shell-tips-and-tricks │ └── shell-tips-and-tricks.org ├── syncthing-is-underrated │ ├── syncthing-is-underrated.org │ └── syncthing-web-2025-06-27_00-11.png ├── terminal-multiplexer │ ├── gnu-screen-2.png │ ├── gnu-screen.png │ └── terminal-multiplexer.org ├── theming-emacs │ ├── default-emacs.png │ ├── emacs-doom-theme-modeline-and-dashboard.png │ ├── emacs-wombat.png │ └── theming-emacs.org └── why-use-mpd ├── cantata-2025-06-26_22-54.png ├── mpc-2025-06-26_23-41.png ├── ncmpcpp-2025-06-26_22-44.png └── why-use-mpd.org 26 directories, 107 files Custom org-capture-templates First off, org-capture-templates is just like its name; it is a template for creation of new entries. It is used by org-mode, which is a killer feature of Emacs. Initially it was design to capture notes with little interruption1. But since it was all Emacs Lisp, we can modify it with ease. ...

March 3, 2024 · (updated June 27, 2025) · 12 min · 2371 words · Kristian Alexander P

Emacs Version Control

Magit Magit is a complete text-based user interface to Git. It fills the glaring gap between the Git command-line interface and various GUIs, letting you perform trivial as well as elaborate version control tasks with just a couple of mnemonic key presses. Magit looks like a prettified version of what you get after running a few Git commands but in Magit every bit of visible information is also actionable to an extent that goes far beyond what any Git GUI provides and it takes care of automatically refreshing this output when it becomes outdated. In the background Magit just runs Git commands and if you wish you can see what exactly is being run, making it possible for you to learn the git command-line by using Magit1. ...

February 29, 2024 · (updated June 27, 2025) · 7 min · 1396 words · Kristian Alexander P

Emacs shell

Eshell It is a shell written in Emacs Lisp. Eshell is both a command shell and an Emacs Lisp REPL (Read Eval Print Loop), as a result, you can invoke commands in two different ways: command form or in Lisp form. As always, the official documentation provides you with more than enough information on Eshell. Figure 1: Eshell Command form Command form looks much the same as in other shells. A command consists of arguments separated by spaces; the first argument is the command to run, with any subsequent arguments being passed to that command. ...

February 28, 2024 · (updated June 27, 2025) · 2 min · 241 words · Kristian Alexander P