myNixOS
Personal NixOS configuration using flake-parts + import-tree with a modular structure.
Stack
| Component |
Program |
| OS |
NixOS (unstable) |
| Compositor |
Niri (scrollable tiling Wayland) |
| Bar / Shell |
Noctalia |
| Terminal |
Kitty |
| Terminal Multiplexer |
tmux |
| Browser |
Firefox |
| File Manager |
Yazi |
| Audio |
PipeWire + WirePlumber |
| Display Manager |
Ly |
Directory Structure
myNixOS/
├── flake.nix # Flake entry point
├── flake.lock # Dependency lock file
├── .agents/
│ └── AGENTS.md # Rules for AI agents
└── modules/
├── parts.nix # flake-parts configuration (systems)
├── hosts/
│ ├── my-machine/ # Intel machine
│ │ ├── default.nix # nixosConfigurations.myMachine
│ │ ├── hardware.nix # Machine-specific hardware (Intel)
│ │ └── configuration.nix # Imports + machine-specific settings
│ └── amd-machine/ # AMD machine
│ ├── default.nix # nixosConfigurations.amdMachine
│ ├── hardware.nix # Machine-specific hardware (AMD)
│ └── configuration.nix # Imports + machine-specific settings
└── features/
├── packages.nix # ✅ Shared packages (all machines)
├── niri.nix # Compositor + keybinds
├── tmux.nix # Terminal multiplexer + pane keybinds
├── audio.nix # PipeWire audio stack
├── bluetooth.nix # Bluetooth + Blueman
├── noctalia.nix # Bar/shell Noctalia
└── noctalia.json # Noctalia configuration
Hosts
| Host |
CPU |
Konfigurasi |
Rebuild Command |
my-machine |
Intel |
nixosConfigurations.myMachine |
sudo nixos-rebuild switch --flake /home/cola/myNixOS#myMachine |
amd-machine |
AMD |
nixosConfigurations.amdMachine |
sudo nixos-rebuild switch --flake /home/cola/myNixOS#amdMachine |
Semua paket dan fitur aplikasi dibagi bersama melalui modules/features/. Hanya hardware.nix yang berbeda antar mesin.
How to Rebuild
Intel machine:
sudo nixos-rebuild switch --flake /home/cola/myNixOS#myMachine
AMD machine:
sudo nixos-rebuild switch --flake /home/cola/myNixOS#amdMachine
Installed Packages
System
| Package |
Purpose |
vim |
Text editor |
git |
Version control |
wget |
File downloader |
firefox |
Browser |
procps |
System process tools |
Desktop
| Package |
Purpose |
kitty |
Terminal emulator |
yazi |
Terminal file manager (panduan) |
Wayland Utilities
| Package |
Purpose |
wl-clipboard |
Copy-paste (wl-copy / wl-paste) |
grim |
Screenshot tool |
slurp |
Select screenshot area |
brightnessctl |
Screen brightness control |
playerctl |
Media player control |
Services (via feature modules)
| Feature |
Details |
| PipeWire |
Audio server + WirePlumber session manager |
| Bluetooth |
BlueZ + Blueman GUI |
| Niri |
Scrollable tiling Wayland compositor |
| Noctalia |
Bar, launcher, control center |
| tmux |
Terminal sessions and split panes |
Keybindings
Mod = Super / Windows key
Programs
| Shortcut |
Action |
Mod + Return |
Open terminal (Kitty) |
Mod + E |
Open file manager (Yazi di Kitty) |
Mod + B |
Open browser (Firefox) |
Mod + S |
Toggle launcher (Noctalia) |
Kitty Clipboard
| Shortcut |
Action |
Ctrl + V |
Paste teks dari clipboard melalui Kitty |
Ctrl + Shift + V |
Kirim Ctrl+V ke aplikasi terminal, misalnya paste gambar di Codex |
Window Management
| Shortcut |
Action |
Mod + Q |
Close window |
Mod + F |
Toggle fullscreen |
Mod + Shift + F |
Toggle floating |
Focus Navigation
| Shortcut |
Action |
Mod + H |
Focus left |
Mod + L |
Focus right |
Mod + J |
Focus down |
Mod + K |
Focus up |
Move Window
| Shortcut |
Action |
Mod + Shift + H |
Move window left |
Mod + Shift + L |
Move window right |
Mod + Shift + J |
Move window down |
Mod + Shift + K |
Move window up |
Workspace
| Shortcut |
Action |
Mod + 1-5 |
Switch to workspace |
Mod + Shift + 1-5 |
Move window to workspace |
Screenshot
| Shortcut |
Action |
Print / Mod + Ctrl + S |
Fullscreen screenshot → disimpan ke ~/Pictures/ & clipboard |
Mod + Print / Mod + Shift + S |
Select area pada layar yang dibekukan → disimpan ke ~/Pictures/ & clipboard |
Hardware Keys
| Shortcut |
Action |
Brightness Up/Down |
Adjust screen brightness (±5%) |
Audio Play |
Play / Pause media |
Audio Next |
Next track |
Audio Prev |
Previous track |
Audio Stop |
Stop media |
System
| Shortcut |
Action |
Mod + Shift + E |
Exit Niri |
Using tmux
Jalankan tmux dari Fish di dalam Kitty:
tmux
Semua keybind tmux diawali dengan prefix Ctrl+b. Tekan Ctrl+b, lepaskan,
lalu tekan tombol perintah berikutnya.
Pane keybindings
| Shortcut |
Action |
Ctrl+b, lalu ` |
` |
Ctrl+b, lalu - |
Split pane atas/bawah |
Ctrl+b, lalu h |
Fokus ke pane kiri |
Ctrl+b, lalu j |
Fokus ke pane bawah |
Ctrl+b, lalu k |
Fokus ke pane atas |
Ctrl+b, lalu l |
Fokus ke pane kanan |
Ctrl+b, lalu x |
Tutup pane aktif (dengan konfirmasi) |
Pane baru otomatis menggunakan working directory dari pane yang sedang aktif.
Mouse juga dapat digunakan untuk memilih pane dan mengubah ukurannya.
Session management
# Membuat named session
tmux new -s kerja
# Menampilkan session yang tersedia
tmux ls
# Masuk kembali ke session
tmux attach -t kerja
# Menutup named session dari luar tmux
tmux kill-session -t kerja
Gunakan Ctrl+b, lalu d untuk detach tanpa menghentikan program di dalam
tmux. Untuk keluar dan menutup pane, jalankan exit; session akan berakhir saat
seluruh pane sudah ditutup.
How to Add a New Feature
- Create a file at
modules/features/<name>.nix:
{ self, inputs, ... }: {
flake.nixosModules.<featureName> = { pkgs, lib, ... }: {
# configuration here
};
}
- Import it di semua
configuration.nix yang ingin menggunakannya:
imports = [
# ...
self.nixosModules.<featureName>
];
Tip: Untuk menambahkan paket yang berlaku di semua mesin, cukup edit modules/features/packages.nix saja.
- Must
git add the new file before rebuilding:
git add modules/features/<name>.nix
git commit -m "feat: add <name>"
# Intel:
sudo nixos-rebuild switch --flake /home/cola/myNixOS#myMachine
# AMD:
sudo nixos-rebuild switch --flake /home/cola/myNixOS#amdMachine
Git Workflow
# After making changes
git add .
git commit -m "feat/fix/refactor: description"
# Rebuild sesuai mesin yang sedang digunakan:
sudo nixos-rebuild switch --flake /home/cola/myNixOS#myMachine # Intel
sudo nixos-rebuild switch --flake /home/cola/myNixOS#amdMachine # AMD
⚠️ New .nix files must be git added before rebuilding, because Nix flakes only read files that are already tracked by git.