1592 words
8 minutes
Setup Debian 13 (Trixe) của mình
  • Bài viết này được thực hiện trên Debian 13 Trixe KDE Plasma

Đưa user hiện tại làm root#

Terminal window
sudo nano /etc/sudoesr
  • Kéo tới dòng này, thêm vào ở dưới root tên user của bạn để cấp full quyền root
  • Nếu không thì user lcaohoanq sẽ không thể cài, update package được
Terminal window
# User privilege specification
root ALL=(ALL:ALL) ALL
lcaohoanq ALL=(ALL:ALL) ALL

Mount ổ cứng#

  • Hiện tại mình đang dùng 2 ổ cứng, 1 ổ SSD boot + 1 ổ NVME data
  • Check thông tin
Terminal window
sudo blkid
/dev/nvme0n1p1: LABEL="DATA" UUID="26a0de97-0abd-45e1-b610-129d3045f430" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Basic data partition" PARTUUID="3aec2ba0-c66e-01db-d015-761d37e3ed00"
/dev/sda5: UUID="9eacdd7d-3177-4e92-a812-63e0abaade65" TYPE="swap" PARTUUID="f6b8904f-05"
/dev/sda1: UUID="2c9bf3d9-8c80-4d4d-8632-4b10e65726d3" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f6b8904f-01"
  • Gọn hơn, xem dung lượng và UUID của ổ
Terminal window
lsblk -o NAME,SIZE,UUID
NAME SIZE UUID
sda 223.6G
├─sda1 212.2G 2c9bf3d9-8c80-4d4d-8632-4b10e65726d3
├─sda2 1K
└─sda5 11.4G 9eacdd7d-3177-4e92-a812-63e0abaade65
nvme0n1 238.5G
└─nvme0n1p1 238.5G 26a0de97-0abd-45e1-b610-129d3045f430
  • Mình muốn mount ổ /dev/nvme0n1p1 -> /media/data, mình cần 4 thông tin

    • UUID của ổ
    • destination -> /media/data
    • định dạng phân vùng -> ext4
    • defaults 0 2 ->
      • 0: Liên quan tới tool dump (backup kiểu cổ)
        • 0 = không backup
        • 1 = có backup
        • dump gần như không còn dùng
      • 2: fsck (file system check)
        • Nó quyết định thứ tự kiểm tra filesystem khi boot.
        • 0 -> không kiểm tra
        • 1 -> kiểm tra đầu tiên, chỉ dành cho root /
        • 2 -> kiểm tra sau root -> Dùng cho disk phụ
  • Gom lại ta được lệnh: UUID=26a0de97-0abd-45e1-b610-129d3045f430 /media/data ext4 defaults 0 2

  • Bắt đầu mount, vào fstab

Terminal window
sudo nano /etc/fstab
  • Kiểm tra thông tin, và thêm vào dòng cuối cùng
Terminal window
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=2c9bf3d9-8c80-4d4d-8632-4b10e65726d3 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=9eacdd7d-3177-4e92-a812-63e0abaade65 none swap sw 0 0
UUID=26a0de97-0abd-45e1-b610-129d3045f430 /media/data ext4 defaults 0 2
  • Lưu thay đổi, thường sau khi sudo mount -a thường bắt deamon reload, chú ý nhìn output của terminal và làm theo nhé
Terminal window
# apply without rebooting
sudo mount -a
# If meet any error about no mount directory found, just need to reboot
  • Check lại
Terminal window
# verify mounting
df -h
# hoặc xài duf
duf

Các phần mềm CLI mình hay cài#

  • Cài một lần luôn cho khỏe
  • Mình đang xài Debian nên dùng apt nhé
  • Đối với các package phổ biến
Terminal window
sudo apt install \
zsh \ # shell
kitty \ # terminal
bat \ # cat xịn hơn
eza \ # ls xịn hơn
fzf \ # file & search
zoxide \ # cd xịn hơn
fastfetch \
htop \
btop \
duf \ # du df xịn hơn
xclip \ # copy paste với clipboard
ranger \ # thao tác file trong terminal
byobu \ # tmux xịn hơn
fd-find \
ripgrep \ # search recursive directories
tmux \ # terminal multiplexer
pipx \
  • zoxide
Terminal window
eval "$(zoxide init zsh)"
  • fd: rename thành fd để tránh trùng tên với package khác, tạo symlink
Terminal window
sudo ln -s $(which fdfind) /usr/local/bin/fd
# fdfind --version
fd --version
  • lazydocker: Quản lý docker trong terminal

    • Repo: https://github.com/jesseduffield/lazydocker

    • Cài đặt:

      Terminal window
      curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
    • Config thêm alias trong ~/.zshrc

      Terminal window
      echo "alias lzd='lazydocker'" >> ~/.zshrc
      source ~/.zshrc
  • yazi: Tương tự ranger, nhưng nhanh hơn (viết bằng Rust)

    Terminal window
    # Download the latest release of Yazi from GitHub:
    wget -qO yazi.zip https://github.com/sxyazi/yazi/releases/latest/download/yazi-x86_64-unknown-linux-gnu.zip
    # Extract files to temporary directory:
    unzip -q yazi.zip -d yazi-temp
    # Move executables to /usr/local/bin directory: (ya command is used for Yazi plugins management)
    sudo mv yazi-temp/*/{ya,yazi} /usr/local/bin
    # Check version
    yazi --version
    # Remove temporary directory and downloaded archive:
    rm -rf yazi-temp yazi.zip
  • tldr: Tương tự man, gọn hơn dễ đọc

    Terminal window
    npm i -g tldr
    # sử dụng tldr yazi thoi
  • maven

Terminal window
sudo apt install maven default-jdk
  • Test lại đã cài được chưa
Terminal window
mvn --version
Terminal window
Apache Maven 3.9.9
Maven home: /usr/share/maven
Java version: 21.0.9, vendor: Debian, runtime: /usr/lib/jvm/java-21-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.12.57+deb13-amd64", arch: "amd64", family: "unix"
Terminal window
java --version
Terminal window
openjdk 21.0.9 2025-10-21
OpenJDK Runtime Environment (build 21.0.9+10-Debian-1deb13u1)
OpenJDK 64-Bit Server VM (build 21.0.9+10-Debian-1deb13u1, mixed mode, sharing)
  • Tham khảo thêm ở đây

Nodejs#

Terminal window
# Download and install nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# in lieu of restarting the shell
\. "$HOME/.nvm/nvm.sh"
# Download and install Node.js:
nvm install 22
# Verify the Node.js version:
node -v # Should print "v22.21.1".
# Verify npm version:
npm -v # Should print "10.9.4".
  • Cài thêm pnpm, yarn, bun
Terminal window
npm i -g pnpm yarn bun

DevOps#

.secret.baseline#

Terminal window
pipx install detect-secrets # hoặc venv nếu bạn muốn
pre-commit install # cài git hooks
  • Cần có 3 file commit trên repo
    • .pre-commit-config.yaml
    • .secrets.baseline
    • .gitignore

Team Setup#

Terminal window
pipx install detect-secrets
pipx ensurepath
pre-commit install

Commit bất kỳ có secrets → sẽ bị chặn. Nếu bị false positive:

Terminal window
detect-secrets scan > .secrets.baseline
git add .secrets.baseline
git commit -m "Update baseline"

vim, neovim, lazyVim#

Terminal window
# Pre-built archives
# The Releases page provides pre-built binaries for Linux systems.
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
sudo rm -rf /opt/nvim-linux-x86_64
sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
  • Then add this to your shell config (~/.bashrc, ~/.zshrc, …):
Terminal window
export PATH="$PATH:/opt/nvim-linux-x86_64/bin"
image
  • Cài Thêm Trong LazyExtras để support nhiều ngôn ngữ + tools

Docker#

Terminal window
sudo docker run hello-world
  • Nhưng xài lệnh docker ps thì không được
docker: Got permission denied while trying to connect
to the Docker daemon socket at unix:///var/run/docker.sock:
Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create:
dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
  • 100% mình cài mới là bị, do user hiện tại chưa được add vào group docker, cách fix Docker: Permission denied

  • Mình chạy thêm vài container utility nữa docker-compose

    • portainer: rất tiện, mình hay triển khai trên server thực tế
    • dozzle (8888): check log đẹp hơn, đỡ docker logs -f
    • postgres

SSH#

GitHub#

Terminal window
mkdir ~/.ssh
# or i have my own .ssh key, i have created before
cp .ssh/ /home/lcaohoanq/.ssh/ -r
Terminal window
# Ensure ssh-agent is enabled
sudo pacman -S openssh
Terminal window
# The command starts the ssh-agent in the background
eval "$(ssh-agent -s)"
  • Notice that if the .pub key have differ name need to specify the absolute path ssh-add /home/username/.ssh/id_xxxxx
Terminal window
ssh-add id_xxxxx
# If meet the key are too open
sudo chmod 400 /home/lcaohoanq/.ssh/id_xxxxx
# If meet permission denied when ssh-add
sudo chown lcaohoanq:lcaohoanq ~/.ssh/id_xxxxx
# Verify
ssh -T git@github.com

GitLab#

  • Giống y chang ở trên, đổi lệnh cuối thành gitlab
Terminal window
ssh -T git@gitlab.com

Bộ gõ#

  • Mình dùng fcitx5
Terminal window
sudo apt install fcitx5 libfcitx5-qt-data fcitx5-config-qt fcitx5-unikey fcitx5-material-color fcitx5-anthy
  • Add thêm

    • Unikey vào nhé (dưới Keyboard - English US)
    • Anthy nếu gõ tiếng Nhật
  • Default chuyển ngôn ngữ Ctrl + Space, mình đổi qua Ctrl + Left Shift

  • Ngoài ra các bạn có thể tham khảo thêm bộ ibus-bamboo, dự án đã dừng phát triển ở repo gốc, hiện đang có những dev đang fork maintain

  • https://github.com/BambooEngine/ibus-bamboo/issues/590

Terminal window
sudo apt update
sudo apt install ibus ibus-unikey ibus-anthy
# start ibus-daemon
ibus-daemon -drx
# set ibus is default input method
im-config -n ibus

Shortcut#

  • Kitty: Meta + Return = Super + Enter

System Settings#

App & Windows - Window Management - Virtual Desktops#

  • Add desktop -> 3 Row 1,2,3
  • Thêm xong thì mở rộng không gian ra 3 cửa sổ, có thể lăn chuột vào để đổi desktop (ở taskbar) hoặc Ctrl + Meta + Left/Right (Arrow)

Grub#

Alt text

Terminal window
cd Downloads &&
git clone https://github.com/Lxtharia/minegrub-theme.git &&
cd minegrub-theme &&
# Im just too lazy too config just apply the install, high risk high return boys <3
sudo ./install_theme.sh
  • Lưu thay đổi và reboot
Terminal window
sudo grub-mkconfig -o /boot/grub/grub.cfg

zsh config#

  • Mình dùng oh-my-zsh, nhớ cài zsh trước nhen
Terminal window
sudo apt-get install zsh curl && sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • Chú ý có các plugin này cần phải clone về nha
Terminal window
# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# fzf-tab
git clone https://github.com/Aloxaf/fzf-tab ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab

kitty config#

Homebrew#

Terminal window
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Set path
Terminal window
echo >> /home/lcaohoanq/.zshrc
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/lcaohoanq/.zshrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
  • Cài thêm GCC
Terminal window
brew install gcc

AWS CLI#

Terminal window
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Terminal window
aws --version
aws-cli/2.32.20 Python/3.13.11 Linux/6.12.57+deb13-amd64 exe/x86_64.debian.13

spotifty#

  • Cài qua snapd, mạng mạnh nhưng lần nào tải đều rất lâu

cloudflare warp client#

zalo#

Terminal window
git clone https://github.com/ducseul/zalo-linux-unofficial.git && cd zalo-linux-unofficial && bash install.sh
  • Không sync lần đầu đăng nhập được, còn mọi tính năng ngon lành

easy effect#

Terminal window
sudo apt install easyeffects
Terminal window
bash -c "$(curl -fsSL https://raw.githubusercontent.com/JackHack96/PulseEffects-Presets/master/install.sh)"

Thunnar File Manager#

  • Cài thêm hỗ trợ preview ảnh iphone HEIC
Terminal window
sudo apt install libheif-examples gstreamer1.0-plugins-bad heif-gdk-pixbuf

Gỡ cài đặt#

  • Konsole, XTerm

Direnv#

  • Tự động load .env khi cd vào project, ứng dụng trong lúc mình chạy mvn spring-boot thì nó inject .env runtime luôn
Terminal window
sudo apt install direnv
  • Trong thư mục project thêm .envrc với nội dung:
Terminal window
echo 'dotenv' > .envrc
direnv allow
  • Mở ~/.zshrc thêm vào:
Terminal window
eval "$(direnv hook zsh)"
  • Reload
Terminal window
source ~/.zshrc
  • Check load được .env chưa
Terminal window
direnv status
direnv exec path /usr/bin/direnv
DIRENV_CONFIG /home/lcaohoanq/.config/direnv
bash_path /usr/bin/bash
disable_stdin false
warn_timeout 5s
whitelist.prefix []
whitelist.exact map[]
Loaded RC path /media/data/do-an/bit-learning-be/.envrc
Loaded watch: ".envrc" - 2025-12-28T15:27:13+07:00
Loaded watch: "../../../../home/lcaohoanq/.local/share/direnv/allow/ee9b5cabee7b12419963b71760e247b9627d3f25976e39b6eec94126f4a206ec" - 2025-12-28T15:27:13+07:00
Loaded watch: ".env" - 2025-12-26T08:27:45+07:00
Loaded RC allowed false
Loaded RC allowPath
Found RC path /media/data/do-an/bit-learning-be/.envrc
Found watch: ".envrc" - 2025-12-28T15:27:13+07:00
Found watch: "../../../../home/lcaohoanq/.local/share/direnv/allow/ee9b5cabee7b12419963b71760e247b9627d3f25976e39b6eec94126f4a206ec" - 2025-12-28T15:27:13+07:00
Found RC allowed true
Found RC allowPath /home/lcaohoanq/.local/share/direnv/allow/ee9b5cabee7b12419963b71760e247b9627d3f25976e39b6eec94126f4a206ec
Setup Debian 13 (Trixe) của mình
https://blog.lcaohoanq.works/posts/debian-trixe-kde-setup/
Author
Thợ Dev
Published at
2025-12-16
License
CC BY-NC-SA 4.0