Skip to content

Build Instructions

Kevin Kim edited this page Aug 16, 2025 · 5 revisions

Build Instructions

Nimf provides a Docker-based unified build system for consistent build environments across all Linux distributions.

🚀 Quick Build

Docker Build (Recommended)

# Build for specific distributions
./scripts/build-docker.sh ubuntu.2404
./scripts/build-docker.sh debian.bookworm
./scripts/build-docker.sh fedora.latest
./scripts/build-docker.sh arch

# ARM64 builds
./scripts/build-docker.sh ubuntu.2404.arm64
./scripts/build-docker.sh debian.bookworm.arm64
./scripts/build-docker.sh fedora.latest.arm64

# Test build on all environments
./scripts/build-docker.sh --all

# Additional options
./scripts/build-docker.sh ubuntu.2404 --interactive  # Run shell after build
./scripts/build-docker.sh debian.trixie --clean      # Clean existing images before build

Native Build

# Build directly from source
git clone --recurse-submodules https://github.com/hamonikr/nimf
cd nimf
./autogen.sh
./configure --prefix=/usr --enable-gtk4 --enable-bundled-libhangul
make -j$(nproc)
sudo make install

📦 Build Output

✅ Modular Package Structure (v1.3.9+)

Core Package (nimf)

  • Input Engines: Korean (built-in libhangul), Japanese (anthy), Chinese (rime)
  • Client Modules: GTK2/3/4, Qt5/6 full support
  • Service Modules: ayatana-appindicator, enhanced Wayland, XIM
  • Development Files: Headers, libraries, pkg-config files

Multilingual Extension (nimf-i18n)

  • 100+ Languages: m17n-based multilingual input engines
  • Optional Installation: Install only when needed

📁 Output Location

dist/
├── ubuntu.2404/           # Ubuntu 24.04 packages
├── debian.bookworm/       # Debian Bookworm packages
├── debian.trixie/         # Debian Trixie packages
├── fedora.latest/         # Fedora packages
├── opensuse/              # openSUSE packages
└── arch/                  # Arch Linux packages

🎯 Supported Platforms

Distribution Architecture Package Format Status Build Method
Ubuntu 22.04+ x86_64 .deb ✅ Stable Docker
Ubuntu 24.04+ x86_64, ARM64 .deb ✅ Stable Docker
Debian Bookworm x86_64, ARM64 .deb ✅ Stable Docker
Debian Trixie x86_64, ARM64 .deb ✅ Stable Docker
Debian Sid x86_64 .deb ✅ Stable Docker
Fedora Latest x86_64, ARM64 .rpm ✅ Stable Docker
openSUSE Leap 15.6 x86_64, ARM64 .rpm ✅ Stable Docker
Arch Linux x86_64 .pkg.tar.zst ✅ Stable Docker

⚙️ Advanced Options

Docker Build Options

# Build only (no package generation)
./scripts/build-docker.sh ubuntu.2404 --build-only

# Package only (skip build)
./scripts/build-docker.sh debian.bookworm --package-only

# Interactive shell after build
./scripts/build-docker.sh fedora.latest --interactive

# Clean existing images before build
./scripts/build-docker.sh arch --clean

# Test all environments
./scripts/build-docker.sh --all

# Show help
./scripts/build-docker.sh --help

🔧 Manual Build by Distribution

Ubuntu/Debian/LinuxMint

Install Dependencies

sudo apt install build-essential devscripts debhelper autoconf automake \
    libglib2.0-dev intltool gtk-doc-tools libgtk-3-dev libgtk2.0-dev \
    qtbase5-dev qt6-base-dev libayatana-appindicator3-dev librsvg2-bin \
    libhangul-dev anthy libxkbcommon-dev libxklavier-dev libm17n-dev \
    m17n-db librime-dev

Build and Install

git clone https://github.com/hamonikr/nimf.git
cd nimf
debuild -b -uc -us

# Package installation (v1.4.0 modular structure)
cd ..
sudo dpkg -i nimf_*.deb

# Add multilingual support (optional)
sudo dpkg -i nimf-i18n_*.deb

# Configure input method
im-config -n nimf

Ubuntu 22.04+ Notes

# Always update all packages to latest before building on Ubuntu 22.04
sudo apt update && sudo apt upgrade -y

# Prevent qtbase5-private-dev package conflicts

HamoniKR

Latest Version (4.0+)

# Use specific branch (for versions before Ubuntu 21.10)
git clone -b before-ubuntu21.10 https://github.com/hamonikr/nimf.git

# Automatic dependency installation
sudo mk-build-deps --install debian/control

# Or manual installation
sudo apt install -y libglib2.0-dev intltool libgtk-3-dev libgtk2.0-dev \
    qtbase5-dev qtbase5-private-dev libappindicator3-dev librsvg2-bin \
    libhangul-dev libanthy-dev anthy librime-dev libxkbcommon-dev \
    libwayland-dev wayland-protocols libxklavier-dev libm17n-dev m17n-db \
    gtk-doc-tools devscripts build-essential debhelper

cd nimf
debuild -b -uc -us

Fedora/CentOS/RedHat

Install Dependencies

sudo dnf install anthy-devel gcc-c++ glib2-devel gtk-doc gtk2-devel \
    gtk3-devel intltool libappindicator-gtk3-devel libhangul-devel \
    librime-devel librsvg2-tools libtool libxkbcommon-devel \
    libxklavier-devel m17n-db-devel m17n-lib-devel qt5-qtbase-devel \
    qt5-qtbase-private-devel qt6-qtbase-devel qt6-qtbase-private-devel \
    wayland-devel wayland-protocols-devel rpm-build

Build

git clone https://github.com/hamonikr/nimf.git
cd nimf
# Use RPM build script or Docker build recommended
./scripts/build-docker.sh fedora.latest

Arch Linux/Manjaro

Install Dependencies

sudo pacman -S base-devel git glib2 gtk3 gtk2 qt5-base qt6-base \
    libappindicator-gtk3 librsvg noto-fonts-cjk libhangul anthy \
    librime libxkbcommon wayland libxklavier m17n-lib m17n-db gtk-doc

Manjaro Build (x86_64)

git clone https://github.com/hamonikr/nimf.git
cd nimf

# Modify makepkg.conf (prevent errors)
sudo sed -i 's/CFLAGS=.*/CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -Wno-error=deprecated-declarations"/' /etc/makepkg.conf

makepkg -s
sudo pacman -U nimf-*.pkg.tar.zst

# Environment variable setup
echo 'export GTK_IM_MODULE=nimf
export QT4_IM_MODULE="nimf"
export QT_IM_MODULE=nimf
export XMODIFIERS="@im=nimf"
nimf' >> ~/.xprofile

openSUSE

Install Dependencies

sudo zypper install gcc-c++ glib2-devel gtk2-devel gtk3-devel \
    libqt5-qtbase-devel libappindicator3-devel librsvg-devel \
    libhangul-devel anthy-devel librime-devel libxkbcommon-devel \
    wayland-devel libxklavier-devel m17n-lib-devel gtk-doc rpm-build

🖥️ ARM Platform Build

Raspberry Pi 4 (ARM64)

Using APT Repository (Recommended)

# Add HamoniKR repository
wget -qO- https://update.hamonikr.org/add-update-repo.apt | sudo -E bash -

# Install packages
sudo apt install nimf nimf-libhangul

# Full language support
sudo apt install libnimf1 nimf nimf-anthy nimf-dev nimf-libhangul nimf-m17n nimf-rime

im-config -n nimf

Build from Source (Armbian)

# Install additional dependencies
sudo apt install fakeroot libgtk-3-bin

# Build time: approximately 40+ minutes
git clone https://github.com/hamonikr/nimf.git
cd nimf
debuild -b -uc -us

# Install
cd ..
sudo dpkg -i libnimf1_*.deb nimf_*.deb nimf-libhangul_*.deb
im-config -n nimf
reboot

⚠️ Notes

  • Build Time: 40+ minutes or more
  • Memory: Minimum 1GB RAM recommended
  • Storage: Minimum 2GB free space for build

Pre-built Packages

Pre-built packages provided by davidjung-kr:

# Download pre-built packages
wget https://github.com/davidjung-kr/nimf-bin-armhf/releases/latest/download/nimf-armhf.tar.gz

# Extract and install
tar -xzf nimf-armhf.tar.gz
cd nimf-armhf
sudo dpkg -i *.deb

# Configure input method
im-config -n nimf
reboot

🐧 Manjaro ARM (Raspberry Pi 4)

Environment Information

  • OS: Manjaro ARM XFCE
  • Platform: Raspberry Pi 4
  • Architecture: ARM64

Build and Install

# Use special ARM branch
git clone -b manjaro-arm --single-branch https://github.com/hamonikr/nimf.git

# Install dependencies
sudo pacman -S meson ninja qt5-tools base-devel

# Build
cd nimf/manjaro-arm
makepkg -s

# Install
sudo pacman -U nimf-*.pkg.tar.xz

Environment Setup

# Create/edit ~/.xprofile file
nano ~/.xprofile

# Add the following content
export GTK_IM_MODULE=nimf
export QT4_IM_MODULE="nimf"
export QT_IM_MODULE=nimf
export XMODIFIERS="@im=nimf"
nimf

Reboot

sudo reboot

🔧 Manual Build (Advanced Users)

Build from Source

git clone --recurse-submodules https://github.com/hamonikr/nimf.git
cd nimf
./autogen.sh
./configure --prefix=/usr --enable-gtk-doc --enable-bundled-libhangul
make -j$(nproc)
sudo make install

Configure Options (v1.4.0)

# Basic options
--prefix=/usr                    # Installation path
--disable-hardening              # Disable hardening

# Input engine toggles
--disable-nimf-libhangul         # Disable Korean input
--disable-nimf-anthy             # Disable Japanese input
--disable-nimf-m17n              # Disable multilingual input
--disable-nimf-rime              # Disable Chinese input

# UI toolkit support
--enable-gtk4                    # Build GTK4 IM module
--enable-qt6                     # Enable Qt6 support
--with-gtk=3|4                   # Select GTK version for nimf-settings

# Platform support
--disable-x11                    # Wayland-only build (disable X11)

# System integration
--with-im-config-data            # Install im-config data
--with-imsettings-data           # Install imsettings data

Setup and Activation

Using im-config (Debian/Ubuntu)

im-config -n nimf

Using im-chooser (Fedora/CentOS)

imsettings-switch nimf

Manual Environment Variable Setup

# Add to ~/.bashrc or ~/.zshrc
export GTK_IM_MODULE=nimf
export QT4_IM_MODULE=nimf
export QT_IM_MODULE=nimf
export XMODIFIERS=@im=nimf

# System-wide setup (/etc/environment)
sudo tee -a /etc/environment << EOF
GTK_IM_MODULE=nimf
QT4_IM_MODULE=nimf
QT_IM_MODULE=nimf
XMODIFIERS=@im=nimf
EOF

🐛 Build Troubleshooting

Common Issues

  1. gettext Version Error

    AM_GNU_GETTEXT_VERSION error occurs
    

    → Automatically resolved (auto-fixed in autogen.sh)

  2. Qt6 Related Errors

    Qt6 libraries not found
    

    → Use --disable-qt6 option or install Qt6 packages

  3. Docker Permission Error

    sudo usermod -aG docker $USER
    newgrp docker
  4. Ubuntu 22.04 Package Conflicts

    # Update all packages to latest before building
    sudo apt update && sudo apt upgrade -y
  5. Manjaro Compilation Errors

    # Ignore deprecated-declarations warnings in makepkg.conf
    sudo sed -i 's/CFLAGS=.*/CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -Wno-error=deprecated-declarations"/' /etc/makepkg.conf

Debug Build

# Verbose log output
./scripts/build-docker.sh --verbose

# Check Docker build logs
docker logs nimf-build-ubuntu

# Manual debug build
G_MESSAGES_DEBUG=nimf ./configure --enable-debug
make -j$(nproc)

Dependency Issue Resolution

# Ubuntu/Debian
sudo apt update && sudo apt install -f

# Fedora
sudo dnf check-update && sudo dnf install --best --allowerasing

# Arch Linux
sudo pacman -Syu

🗑️ Removal

Package Removal

# Ubuntu/Debian
sudo apt purge '*nimf*'
sudo apt autoremove

# Fedora
sudo dnf remove nimf

# Arch Linux
sudo pacman -Rns nimf

Source Build Removal

sudo make uninstall  # From source directory

Configuration File Removal

rm -rf ~/.config/nimf
sudo rm -rf /etc/nimf

🌐 Language Support

📚 Related Documentation

Clone this wiki locally