[{"content":"Tools are not just means, but extensions of one\u0026rsquo;s lifestyle.\nThis section documents my digital lifestyle built around tools and systems:\nNixOS — Declarative system configuration, reproducible dev environments Emacs — The ultimate text editor, my second brain Knowledge Management — Logseq, Zotero, and GTD as an information processing pipeline Homelab — Self-hosted services and home server notes E-ink — Balancing digital reading with eye comfort Hi-Fi — Listening notes with TOPPING DX5II + Sennheiser HD600 There are no standard answers here — only ever-evolving personal solutions.\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/","section":"Digital Life","summary":"","title":"Digital Life","type":"digital-life"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/emacs/","section":"Tags","summary":"","title":"Emacs","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/series/emacs-ecosystem/","section":"Series","summary":"","title":"Emacs Ecosystem","type":"series"},{"content":"","date":"2026年5月4日","externalUrl":null,"permalink":"/series/emacs-%E7%94%9F%E6%80%81/","section":"Series","summary":"","title":"Emacs 生态","type":"series"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/fish/","section":"Tags","summary":"","title":"Fish","type":"tags"},{"content":"The first time you use Fish, you\u0026rsquo;ll wonder why other shells don\u0026rsquo;t even ship with autocomplete by default.\nFish (Friendly Interactive Shell) is a shell designed for interactive use. It comes with syntax highlighting, autosuggestions, and fuzzy search built-in—no need to install Oh-My-Zsh and dozens of plugins like with Zsh.\nInstallation # NixOS:\nusers.defaultUserShell = pkgs.fish; programs.fish.enable = true; Or via Home Manager:\nprograms.fish = { enable = true; interactiveShellInit = \u0026#39;\u0026#39; set -g fish_greeting \u0026#39;\u0026#39;; }; Why Switch from Zsh to Fish # Feature Zsh (default) Fish (default) Syntax highlighting ❌ Needs plugin ✅ Built-in Autosuggestions ❌ Needs plugin ✅ Built-in Fuzzy completion ❌ Needs plugin ✅ Built-in Man page completion ❌ ✅ Auto-generated Config syntax Bash compatible Clean and intuitive Startup speed Slow (many plugins) Fast Fish\u0026rsquo;s philosophy is \u0026ldquo;the default should be the best.\u0026rdquo;\nDaily Usage # Autosuggestions # As you type, Fish shows suggestions in grey based on history and context:\n$ git comm ↑ grey text: \u0026#34;git commit -m \u0026#34; → Press → or Ctrl+F to accept Tab Completion # Press Tab to list all options, with fuzzy matching:\n$ cd pro\u0026lt;Tab\u0026gt; projects/ proposals/ prometheus/ Syntax Highlighting # Valid commands are green, invalid ones red. Existing paths are blue, non-existent ones have red underlines:\n$ ech hello # \u0026#34;ech\u0026#34; in red (command not found) $ cat /tmp/test # \u0026#34;/tmp/test\u0026#34; underlined red (file doesn\u0026#39;t exist) Configuration # Fish config lives in ~/.config/fish/:\n~/.config/fish/ ├── config.fish # Main config ├── conf.d/ # Auto-loaded scripts │ ├── abbr.fish │ ├── aliases.fish │ └── path.fish └── functions/ # Custom functions My config.fish # # Remove greeting set -g fish_greeting # Environment variables set -gx EDITOR emacsclient -c set -gx VISUAL emacsclient -c set -gx LANG en_US.UTF-8 # PATH fish_add_path ~/.cargo/bin fish_add_path ~/.local/bin fish_add_path /nix/var/nix/profiles/default/bin Abbreviations vs Aliases # Fish recommends abbr over alias because abbreviations expand as you type, so you can see the actual command:\nabbr -a g git abbr -a ga \u0026#39;git add\u0026#39; abbr -a gc \u0026#39;git commit\u0026#39; abbr -a gp \u0026#39;git push\u0026#39; abbr -a gs \u0026#39;git status\u0026#39; abbr -a l \u0026#39;ls -la\u0026#39; abbr -a .. \u0026#39;cd ..\u0026#39; abbr -a ... \u0026#39;cd ../..\u0026#39; Effect: Type gs, press space, it auto-expands to git status.\nCustom Functions # # ~/.config/fish/functions/ll.fish function ll ls -lah $argv end # ~/.config/fish/functions/mkcd.fish function mkcd mkdir -p $argv[1] cd $argv[1] end NixOS-specific Tips # Auto-detect nix-shell # # config.fish if test -n \u0026#34;$IN_NIX_SHELL\u0026#34; set -g fish_greeting \u0026#34;📦 nix-shell\u0026#34; end direnv + nix-direnv # # home.nix programs.direnv = { enable = true; nix-direnv.enable = true; }; Automatically loads dev environment when entering a directory with .envrc, unloads when leaving.\nBash Incompatibility Notes # Fish syntax differs from Bash. For scripts, it\u0026rsquo;s recommended to:\nUse #!/usr/bin/env bash in script shebangs — keep writing scripts in Bash Use Fish only for interactive use — don\u0026rsquo;t write scripts in Fish When copy-pasting Bash commands from the web — most simple commands work, complex pipes may need tweaking Summary # If you\u0026rsquo;re tired of configuring Zsh, Fish is the most hassle-free choice. It won\u0026rsquo;t turn you into a \u0026ldquo;shell config expert,\u0026rdquo; but it will make you slightly happier every time you open a terminal.\nThe NixOS Toolchain series wraps up here for now. Next up might be some specific Nix configuration tips.\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/fish-guide/","section":"Digital Life","summary":"","title":"Fish Shell: An Interactive Shell That Works Out of the Box","type":"digital-life"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/git/","section":"Tags","summary":"","title":"Git","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/headphone/","section":"Tags","summary":"","title":"Headphone","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/series/hi-fi-listening/","section":"Series","summary":"","title":"Hi-Fi Listening","type":"series"},{"content":"Good gear doesn\u0026rsquo;t make you hear more — it makes you hear more truthfully.\nMy Setup # Device Model Role DAC/Amp TOPPING DX5II All-in-one DAC + preamp + headphone amp Headphone Sennheiser HD600 Open-back dynamic flagship Cable Stock cable Haven\u0026rsquo;t upgraded yet Why This Combo # The HD600 is a timeless classic. With 300Ω impedance and open-back design, it delivers a natural, spacious soundstage and precise midrange reproduction. It doesn\u0026rsquo;t win with treble sparkle or bass rumble, but strives for authentic instrument reproduction.\nThe DX5II as an all-in-one has more than enough power to drive the HD600. The ESS9038Pro DAC chip + NFCA amp module offers excellent noise floor control, and the compact size fits nicely on a desk.\nListening Impressions # Genres That Shine # Classical — The HD600\u0026rsquo;s soundstage and midrange density make string quartets and vocals utterly captivating Jazz — Saxophone and piano timbre come through beautifully Acoustic / Vocal-focused — Warm mids without muddiness Genres That Struggle # Electronic / EDM — Bass extension and quantity are conservative, not party-worthy Metal — Transient response is just okay, can get slightly chaotic on big dynamics Usage Scenarios # I mainly use this setup for:\nLate-night coding sessions with classical or jazz Weekend afternoons for focused full-album listening Comparing different recording versions (the DX5II\u0026rsquo;s detail retrieval is sufficient for this) Future Upgrades # Try balanced cable + balanced output A/B test against HD650 / HD6XX Get a dedicated headphone amp for comparison (e.g., Schiit Magni) Listening is highly subjective — these are just my personal impressions.\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/hifi-notes/","section":"Digital Life","summary":"","title":"Hi-Fi Listening Notes: DX5II + HD600","type":"digital-life"},{"content":"","date":"2026年5月4日","externalUrl":null,"permalink":"/series/hi-fi-%E5%90%AC%E9%9F%B3/","section":"Series","summary":"","title":"Hi-Fi 听音","type":"series"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/hifi/","section":"Tags","summary":"","title":"Hifi","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/homelab/","section":"Tags","summary":"","title":"Homelab","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/magit/","section":"Tags","summary":"","title":"Magit","type":"tags"},{"content":"After using Magit, I never opened git log in a terminal again.\nMagit is arguably the most powerful Git client in the Emacs ecosystem. It\u0026rsquo;s not just a wrapper around Git commands—it reimagines the entire Git workflow as an interactive interface.\nInstallation # (use-package magit :ensure t :bind (\u0026#34;C-x g\u0026#34; . magit-status)) Core Workflow # 1. Check Repository Status # C-x g opens the magit-status buffer:\nHead: main Add series grouping Merge: origin/main Add series grouping Untracked files (1) content/digital-life/magit-guide.md Unstaged changes (2) modified content/digital-life/emacs-config.md modified content/digital-life/nixos-setup.md Everything at a glance—ten times more readable than git status.\n2. Committing Code # In the magit-status buffer:\nKey Action s Stage current file u Unstage c c Write commit message (opens editor) C-c C-c Confirm commit 3. History and Diff # Key Action l l View log d d View diff b b Switch branch P p Push to remote F p Pull from remote 4. Interactive Rebase # This is one of Magit\u0026rsquo;s killer features. r i enters interactive rebase mode, where you can:\nDrag commits to reorder them Mark commits as squash, fixup, or drop Preview results in real time No need to memorize git rebase -i syntax.\nAdvanced Tips # Blame Per Line # ;; Blame current file M-x magit-blame Shows the last commit info for each line directly in the code margin.\nStage Partial Changes # Press TAB to expand a file in the diff region, then s to stage only the current hunk—no need for git add -p.\nQuick Commit \u0026amp; Push # (defun my/magit-commit-and-push (message) (interactive \u0026#34;sCommit message: \u0026#34;) (magit-stage-modified) (magit-commit-create (list \u0026#34;-m\u0026#34; message)) (magit-push-current-to-pushremote nil)) Comparison with Other Tools # Tool Startup UX Emacs Integration Terminal Git Fast Poor None Lazygit Fast Good Requires switching windows SourceTree Slow Mediocre None Magit Medium Excellent Native For Emacs users, Magit\u0026rsquo;s integration is unbeatable—you\u0026rsquo;re already editing code, and one keystroke completes the entire Git workflow without context switching.\nNext up: Org-mode Time Management in Practice\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/magit-guide/","section":"Digital Life","summary":"","title":"Magit: The Git Porcelain inside Emacs","type":"digital-life"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/music/","section":"Tags","summary":"","title":"Music","type":"tags"},{"content":"Emacs is not just an editor — it\u0026rsquo;s a way of life.\nThis note documents my core Emacs use cases and key configurations.\nWhy Emacs # Need Emacs Solution Text editing Evil + custom keybindings Note-taking Org-mode / Org-roam Task management Org-agenda + GTD Programming LSP + Tree-sitter Email mu4e RSS elfeed Core Packages # (use-package evil :init (setq evil-want-integration t) (setq evil-want-keybinding nil) :config (evil-mode 1)) (use-package org-roam :custom (org-roam-directory (file-truename \u0026#34;~/notes\u0026#34;)) :config (org-roam-db-autosync-mode)) (use-package magit :bind (\u0026#34;C-x g\u0026#34; . magit-status)) Org-mode GTD Flow # Capture — Quickly dump ideas with org-capture Clarify — Review Inbox nightly, sort into Projects / Next Actions / Someday Engage — Check org-agenda for today\u0026rsquo;s tasks Reflect — Weekly review every Sunday External Tool Integration # Zotero — Manage references via org-cite Logseq — Bidirectional sync of Org files (I mainly use Logseq on mobile, Emacs on desktop) TODO # Optimize startup speed (currently ~2.5s) Configure Denote as lightweight supplement Try Eglot as LSP-mode alternative ","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/emacs-config/","section":"Digital Life","summary":"","title":"My Emacs Workflow","type":"digital-life"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/nixos/","section":"Tags","summary":"","title":"Nixos","type":"tags"},{"content":"NixOS is a Linux distribution built on top of the Nix package manager, known for its declarative configuration and reproducibility.\nThis post documents my journey of installing and configuring NixOS from scratch.\nPreparation # Download the NixOS minimal ISO Create a bootable USB (I used dd) Back up your data (important!) Partitioning and Installation # # List disks lsblk # Partition (using /dev/nvme0n1 as example) parted /dev/nvme0n1 -- mklabel gpt parted /dev/nvme0n1 -- mkpart primary 512MiB -8GiB parted /dev/nvme0n1 -- mkpart primary linux-swap -8GiB 100% # Format mkfs.ext4 -L nixos /dev/nvme0n1p1 mkswap -L swap /dev/nvme0n1p2 configuration.nix # Here\u0026rsquo;s my basic configuration:\n{ config, pkgs, ... }: { imports = [ ./hardware-configuration.nix ]; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; networking.hostName = \u0026#34;nixos-desktop\u0026#34;; time.timeZone = \u0026#34;Asia/Shanghai\u0026#34;; i18n.defaultLocale = \u0026#34;en_US.UTF-8\u0026#34;; users.users.yourname = { isNormalUser = true; extraGroups = [ \u0026#34;wheel\u0026#34; \u0026#34;networkmanager\u0026#34; ]; packages = with pkgs; [ firefox git ]; }; environment.systemPackages = with pkgs; [ vim wget git ]; system.stateVersion = \u0026#34;24.11\u0026#34;; } Next Steps # Migrate to Flakes Configure Home Manager Set up devShells Remote build cache Configuration is a work in progress. Feedback welcome.\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/nixos-setup/","section":"Digital Life","summary":"","title":"NixOS Setup and Configuration Notes","type":"digital-life"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/series/nixos-toolchain/","section":"Series","summary":"","title":"NixOS Toolchain","type":"series"},{"content":"","date":"2026年5月4日","externalUrl":null,"permalink":"/series/nixos-%E5%B7%A5%E5%85%B7%E9%93%BE/","section":"Series","summary":"","title":"NixOS 工具链","type":"series"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/pkm/","section":"Tags","summary":"","title":"Pkm","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/productivity/","section":"Tags","summary":"","title":"Productivity","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/rust/","section":"Tags","summary":"","title":"Rust","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/shell/","section":"Tags","summary":"","title":"Shell","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/terminal/","section":"Tags","summary":"","title":"Terminal","type":"tags"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/tui/","section":"Tags","summary":"","title":"Tui","type":"tags"},{"content":"This is my digital garden for thoughts and explorations.\nI believe technology should serve life, and life itself deserves to be documented with care.\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/","section":"Welcome to My Blog","summary":"","title":"Welcome to My Blog","type":"page"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/en/tags/yazi/","section":"Tags","summary":"","title":"Yazi","type":"tags"},{"content":"The spiritual successor to Ranger, rewritten in Rust—ten times faster.\nYazi is a Rust-based terminal file manager aiming to be \u0026ldquo;Finder in the terminal.\u0026rdquo; It supports async I/O, parallel preview, and a built-in plugin system, delivering a very modern experience.\nInstallation # In NixOS home.nix or configuration.nix:\nhome.packages = with pkgs; [ yazi ]; Or install via cargo:\ncargo install --locked yazi-fm yazi-cli Basic Operations # Launch: yazi\nKey Action j/k or ↓/↑ Move up/down h/l or ←/→ Enter/exit directory Enter Open file Space Select/deselect y Copy d Cut p Paste D Delete (to trash) / Search z Jump (zoxide integration) ~ Go to home directory Killer Features # 1. Real-time Preview # Preview content without opening files:\nImages: Display directly in terminal (requires sixel/kitty/iTerm2 support) PDF: First page thumbnail Video: First frame screenshot Code: Syntax highlighting Works best with Kitty terminal on NixOS.\n2. Async Operations # Copying a 10GB folder won\u0026rsquo;t block the UI. You can continue browsing while the operation runs in the background.\n3. Zoxide Integration # If you use zoxide (the z command), Yazi has built-in support:\nPress z → type \u0026#34;doc\u0026#34; → Enter Jumps directly to ~/Documents 4. Shell Integration # Add to .bashrc / .zshrc / config.fish:\n# Auto-cd to current directory on quit function yy() { local tmp=\u0026#34;$(mktemp -t \u0026#34;yazi-cwd.XXXXXX\u0026#34;)\u0026#34; yazi \u0026#34;$@\u0026#34; --cwd-file=\u0026#34;$tmp\u0026#34; if cwd=\u0026#34;$(cat -- \u0026#34;$tmp\u0026#34;)\u0026#34; \u0026amp;\u0026amp; [ -n \u0026#34;$cwd\u0026#34; ] \u0026amp;\u0026amp; [ \u0026#34;$cwd\u0026#34; != \u0026#34;$PWD\u0026#34; ]; then cd -- \u0026#34;$cwd\u0026#34; fi rm -f -- \u0026#34;$tmp\u0026#34; } Usage: yy to launch Yazi, press q to quit, and your shell automatically cds to the last visited directory.\nConfiguration # Yazi config lives in ~/.config/yazi/:\n~/.config/yazi/ ├── yazi.toml # Main config ├── keymap.toml # Key bindings ├── theme.toml # Theme └── plugins/ # Plugins My keymap.toml snippet # [[manager.prepend_keymap]] on = [ \u0026#34;g\u0026#34;, \u0026#34;d\u0026#34; ] run = \u0026#39;cd ~/Documents\u0026#39; desc = \u0026#34;Go to Documents\u0026#34; [[manager.prepend_keymap]] on = [ \u0026#34;g\u0026#34;, \u0026#34;D\u0026#34; ] run = \u0026#39;cd ~/Downloads\u0026#39; desc = \u0026#34;Go to Downloads\u0026#34; [[manager.prepend_keymap]] on = [ \u0026#34;g\u0026#34;, \u0026#34;c\u0026#34; ] run = \u0026#39;cd ~/.config\u0026#39; desc = \u0026#34;Go to Config\u0026#34; Ranger vs Yazi # Feature Ranger Yazi Language Python Rust Startup Slow (~1s) Instant (\u0026lt;50ms) Async I/O No Native Image Preview Extra config needed Works out of the box Plugin Ecosystem Rich Growing Memory Higher Very low If you\u0026rsquo;re still using Ranger, I highly recommend trying Yazi. Same muscle memory, but several levels better.\nNext up: Fish Shell Configuration Guide\n","date":"4 May 2026","externalUrl":null,"permalink":"/en/digital-life/yazi-guide/","section":"Digital Life","summary":"","title":"Yazi: A Terminal File Manager Written in Rust","type":"digital-life"},{"content":"Hi, I\u0026rsquo;m [Your Name].\nI\u0026rsquo;m a [Your Profession/Role] based in [Your City].\nI\u0026rsquo;m passionate about technology, photography, and artificial intelligence. In daily life, I capture light and moments with my Sony A7R2 paired with a Sigma 24-70mm lens; in the digital realm, I build my workflow with NixOS and Emacs, exploring the frontiers of large language models and AI agents.\nMy Gear # Camera: Sony A7R2 + Sigma 24-70mm f/2.8 DG DN Audio: TOPPING DX5II + Sennheiser HD600 OS: NixOS Editor: Emacs Knowledge Management: Logseq + Zotero + GTD Reading: E-ink devices Server: Homelab Interests # Photography NixOS Emacs Billiards Movies E-ink Homelab PKM Hi-Fi AI LLMs Agent Contact # Feel free to reach out:\nGitHub: [Your GitHub] Email: [Your Email] If you share any of these interests, I\u0026rsquo;d love to connect!\n","date":"26 March 2026","externalUrl":null,"permalink":"/en/about/","section":"Welcome to My Blog","summary":"","title":"About Me","type":"page"},{"content":"Artificial intelligence is reshaping how we create, think, and work.\nIn this section, I document my hands-on experiences and reflections on large language models, AI agents, and related tools. From local deployments to cloud APIs, from prompt engineering to agent architectures — exploring how AI can truly integrate into daily workflows.\n","externalUrl":null,"permalink":"/en/ai/","section":"AI","summary":"","title":"AI","type":"ai"},{"content":"","externalUrl":null,"permalink":"/en/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/en/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"Life is not elsewhere — the present moment is everything.\nHere I record thoughts that resist categorization: a perfect break on the billiard table, a striking shot in a movie theater, and sudden insights from everyday life.\nBeyond technology lies a much wider world.\n","externalUrl":null,"permalink":"/en/essays/","section":"Essays","summary":"","title":"Essays","type":"essays"},{"content":"\u0026ldquo;Photography is writing with light.\u0026rdquo;\nA collection of images captured with my Sony A7R2 paired with the Sigma 24-70mm f/2.8. From city streets to natural landscapes, from monochrome light to color narratives — each photograph is a slice of time and space.\n","externalUrl":null,"permalink":"/en/photography/","section":"Photography","summary":"","title":"Photography","type":"photography"}]