Mounting NFS and SMB Shares
Mounting NFS and SMB Shares So They Actually Show Up in Dolphin
The full path from mkdir to fstab to actually seeing your shares as real folders … the real Fedora commands and the real NixOS config I use.
July 18, 2026 · 6 min
The actual goal
I wanted my QNAP and T620 shares to show up as normal folders in Dolphin on every machine I use, not something I connect to manually every session. Real mountpoints, mounted at boot, showing up as actual directories. Two different systems here, so two genuinely different setups … Fedora with a plain fstab, NixOS with a declarative config.
Fedora side (JackSparrow2 itself) … the full block
Step 1 … every mountpoint directory, created up front:
sudo mkdir -p \
/mnt/nfs-data2 \
/mnt/nfs-LINUXTWEAKS \
/mnt/nfs-Public \
/mnt/nfs-RELATIONSHIPS \
/mnt/nfs-homes \
/mnt/nfs-techs \
/mnt/smb-LINUXTWEAKS \
/mnt/smb-Public \
/mnt/smb-RELATIONSHIPS \
/mnt/smb-homes \
/mnt/smb-techs
I mount both NFS and SMB versions side by side … genuinely useful for testing which protocol actually behaves better for a given workload, rather than committing to one blind.
Step 2 … back up fstab before touching it, every time, no exceptions:
sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d-%H%M%S)
Cost nothing, saved me more than once.
Step 3 … a real credentials file for the SMB mounts, so the password isn’t sitting in plain fstab where anyone reading it can see it:
sudo mkdir -p /etc/samba/creds
sudo tee /etc/samba/creds/jacksparrow2 > /dev/null << 'EOF'
username=tolga
password=your-actual-samba-password
EOF
sudo chmod 600 /etc/samba/creds/jacksparrow2
sudo chown root:root /etc/samba/creds/jacksparrow2
600 and root:root matter here … this file has a real password in it, no reason for it to be readable by anyone else on the box.
Step 4 … the actual fstab block, both protocols, every share:
sudo tee -a /etc/fstab > /dev/null << 'EOF'
# -- MOUNTS ----
192.168.0.xxx:/mnt/data2 /mnt/nfs-data2 nfs soft,timeo=30,retrans=2,noatime 0 0
192.168.0.xxx:/LINUXTWEAKS /mnt/nfs-LINUXTWEAKS nfs vers=3,soft,timeo=30,retrans=2,noatime 0 0
192.168.0.xxx:/Public /mnt/nfs-Public nfs vers=3,soft,timeo=30,retrans=2,noatime 0 0
192.168.0.xxx:/RELATIONSHIPS /mnt/nfs-RELATIONSHIPS nfs vers=3,soft,timeo=30,retrans=2,noatime 0 0
192.168.0.xxx:/homes /mnt/nfs-homes nfs vers=3,soft,timeo=30,retrans=2,noatime 0 0
192.168.0.xxx:/techs /mnt/nfs-techs nfs vers=3,soft,timeo=30,retrans=2,noatime 0 0
//192.168.0.xxx/LINUXTWEAKS /mnt/smb-LINUXTWEAKS cifs credentials=/etc/samba/creds/jacksparrow2,uid=1000,gid=1000,noatime,_netdev 0 0
//192.168.0.xxx/Public /mnt/smb-Public cifs credentials=/etc/samba/creds/jacksparrow2,uid=1000,gid=1000,noatime,_netdev 0 0
//192.168.0.xxx/RELATIONSHIPS /mnt/smb-RELATIONSHIPS cifs credentials=/etc/samba/creds/jacksparrow2,uid=1000,gid=1000,noatime,_netdev 0 0
//192.168.0.xxx/homes /mnt/smb-homes cifs credentials=/etc/samba/creds/jacksparrow2,uid=1000,gid=1000,noatime,_netdev 0 0
//192.168.0.xxx/techs /mnt/smb-techs cifs credentials=/etc/samba/creds/jacksparrow2,uid=1000,gid=1000,noatime,_netdev 0 0
EOF
soft,timeo=30,retrans=2 on every NFS line … the box that taught me why: a hard mount that stalls during boot can hang the entire startup sequence in a state you can’t even kill. _netdev on the CIFS lines so systemd knows to wait for networking before attempting them.
Step 5 … apply and test:
sudo systemctl daemon-reload
sudo mount -a
Step 6 … actually verify, both protocols:
mount | grep -E 'nfs-|smb-'
df -h | grep -E 'nfs-|smb-'
df -h alongside mount gives me real used/available space per share, not just a yes/no on whether it’s attached … a mount can show as active while genuinely broken, df reporting real numbers is a better signal that it’s actually working.
NixOS side (my desktop) … the config, not a plain fstab
NixOS doesn’t have a hand-edited /etc/fstab … fileSystems entries in configuration.nix (or an imported module) get compiled into real systemd mount units at build time. This is the actual config I run, split across two files.
The main module, importing a T620-specific submodule and handling direct QNAP NFS mounts:
{ config
, lib
, pkgs
, username
, ...
}:
let
nfsOpts = [
"x-systemd.after=network-online.target"
"x-systemd.automount"
"x-systemd.idle-timeout=600"
"x-systemd.mount-timeout=30"
"x-systemd.requires=network-online.target"
"_netdev"
"noauto"
"nofail"
"vers=3"
"rw"
"soft"
"timeo=30"
];
in
{
imports = [
./T620
];
systemd.tmpfiles.rules = [
"d /mnt/nfs-Relationships 0755 ${username} ${username} -"
"d /mnt/nfs-linuxtweaks 0755 ${username} ${username} -"
"d /mnt/nfs-public 0755 ${username} ${username} -"
"d /mnt/nfs-techs 0755 ${username} ${username} -"
];
fileSystems = {
"/mnt/nfs-public" = {
device = "192.168.0.xxx:/Public";
fsType = "nfs";
options = nfsOpts;
};
"/mnt/nfs-linuxtweaks" = {
device = "192.168.0.xxx:/LINUXTWEAKS";
fsType = "nfs";
options = nfsOpts;
};
"/mnt/nfs-techs" = {
device = "192.168.0.xxx:/techs";
fsType = "nfs";
options = nfsOpts;
};
"/mnt/nfs-Relationships" = {
device = "192.168.0.xxx:/RELATIONSHIPS";
fsType = "nfs";
options = nfsOpts;
};
};
}
# rebuild with the automount fix if it's ever stuck on a stale unit:
# sudo systemctl stop 'mnt-nfs\x2d*.automount' 2>/dev/null || true && sudo nixos-rebuild switch
#
# QNAP-side permissions needed first for Public and LINUXTWEAKS:
# ssh admin@192.168.0.xxx
# chown -R tolga:everyone /share/Public /share/LINUXTWEAKS
# chmod -R 777 /share/Public /share/LINUXTWEAKS
The T620 submodule … SMB shares straight off JackSparrow2 itself, kept separate because it’s genuinely a different backend and different protocol entirely:
{
config,
lib,
pkgs,
username,
...
}:
let
t620Host = "192.168.0.xxx"; # JackSparrow2 LAN IP ... check if it changes
credsFile = "/etc/nixos/modules/mnt/T620/credentials";
smbOpts = [
"credentials=${credsFile}"
"uid=${username}"
"gid=users"
"vers=3.1.1"
"actimeo=60"
"_netdev"
"nofail"
];
in
{
systemd.tmpfiles.rules = [
"d /mnt/t620-1TB 0755 ${username} users -"
"d /mnt/t620-home 0755 ${username} users -"
"d /mnt/t620-linuxtweaks 0755 ${username} users -"
"d /mnt/t620-public 0755 ${username} users -"
"d /mnt/t620-public-qnap 0755 ${username} users -"
"d /mnt/t620-relationships 0755 ${username} users -"
"d /mnt/t620-techs 0755 ${username} users -"
];
fileSystems = {
"/mnt/t620-1TB" = {
device = "//${t620Host}/1TB_Storage";
fsType = "cifs";
options = smbOpts;
};
"/mnt/t620-public" = {
device = "//${t620Host}/Public";
fsType = "cifs";
options = smbOpts;
};
"/mnt/t620-public-qnap" = {
device = "//${t620Host}/Public_QNAP";
fsType = "cifs";
options = smbOpts;
};
"/mnt/t620-relationships" = {
device = "//${t620Host}/RELATIONSHIPS";
fsType = "cifs";
options = smbOpts;
};
"/mnt/t620-linuxtweaks" = {
device = "//${t620Host}/LINUXTWEAKS";
fsType = "cifs";
options = smbOpts;
};
"/mnt/t620-techs" = {
device = "//${t620Host}/techs";
fsType = "cifs";
options = smbOpts;
};
"/mnt/t620-home" = {
device = "//${t620Host}/${username}";
fsType = "cifs";
options = smbOpts;
};
};
}
Genuinely important detail I got wrong the first time: actimeo=60 was added deliberately after finding Dolphin felt slow browsing these shares with the CIFS default caching behaviour … 60 seconds of attribute caching made a real, noticeable difference on repeat folder access without introducing anything unsafe for how I actually use these shares.
The credentials file the T620 module points at, kept outside the Nix store entirely on purpose so the password never ends up readable in /nix/store:
sudo mkdir -p /etc/nixos/modules/mnt/T620
sudo tee /etc/nixos/modules/mnt/T620/credentials > /dev/null << 'EOF'
username=tolga
password=your-actual-samba-password
domain=WORKGROUP
EOF
sudo chmod 600 /etc/nixos/modules/mnt/T620/credentials
Apply it:
sudo nixos-rebuild switch
Verify:
mount | grep t620
mount | grep nfs-
ls /mnt/t620-public
Getting it into Dolphin
Once either the Fedora fstab lines or the NixOS fileSystems config are actually mounted, there’s nothing left to do for Dolphin specifically … the mountpoints just show up as real folders at whatever path you defined, /mnt/smb-Public or /mnt/t620-public, no different from any other directory on disk. No need to browse smb:// manually once it’s properly mounted this way; that’s only for ad-hoc access to a share you haven’t set up a permanent mount for.
What actually mattered
Back up fstab before every edit. Use soft with a real timeout on every NFS mount, never plain hard. Keep SMB credentials in their own locked-down file, never inline in fstab or committed into the Nix store. On NixOS specifically, actimeo on CIFS mounts is worth tuning if browsing feels sluggish … the default caching behaviour isn’t wrong, just conservative. And verify with both mount and df -h, not one or the other, since a mount reporting active isn’t proof it’s actually serving real data.


Leave a Reply