A Deep Dive into the Fringes of NixOS: When the Bleeding Edge Cuts a Little Too Deep
This isn’t your typical Linux tweak job. This is NixOS on the unstable channel, where the latest updates flow in like a torrent, sometimes leaving you high and dry on the shores of the unexpected. Join me as I navigate the choppy waters of a recent upgrade that wiped out my file manager, leaving me stranded in a sea of command-line interfaces.
We’ll delve into the depths of NixOS configuration, explore the minimalist philosophy behind its latest release, and witness the resurrection of my beloved Nautilus file manager. If you’re curious about life on the bleeding edge of Linux, brace yourself for a tale of system hardening, unexpected consequences, and the unwavering spirit of a tinkerer determined to tame the unstable beast.
I’m in the fringe. The fringe I’m on
No guile win but file gone
Not files like those lost to us
But rather much like nautilus
I’m currently using NixOS on the unstable channel, which has recently dropped NixOS 25.05 dropped codenamed Warbler (November 2024), upgrading me from the previous Vicuna 24.11. This is my day-to-day worksystem. I have a Logitech MX BRIO on this thing and run Slack and Zoom regularly for work. Would that be mainstreamy-fringe or the fringy-mainstream?
Either way, stuff broke as one would expect it to on the bleeding edge. And so now, I fix. First, it’s clarification time of what I am on…
[mike@nixos:~]$ sudo nix-channel --list | grep nixos
nixos https://nixos.org/channels/nixos-unstable
nixpkgs https://nixos.org/channels/nixpkgs-unstable
[mike@nixos:~]$ nixos-version
25.05beta710087.23e89b7da85c (Warbler)
[mike@nixos:~]$
…and what I was on… hmmm, my boot menu shows by last NixOS version from 2024-11-17 was Vicuna 24.11pre697431.86e78d3d2084. So I’ve been living with this no file program thing for a week.
I may go back to 24.11 depending on my experience coming up. I lost my file manager! I can’t even “Select file” in a browser prompt. There is no prompt pop-up! Now I’m all for the bleeding edge, but this is just a bit too much. Before I give up being on the unstable channel, I’m gonna make a grab for nautilus specifically. I don’t know if that’s the default one used. I never thought to check, but NixOS uses a very default vanilla GNOME so I’m guessing yes.
That being the case and knowing how these things work, simply asking for nautilus should be enough to force the installation of whatever dependency chain currently gets left out. I suspect the NixOS powers-that-be really trim the baseline footprint on a new version release like this to control for variables. What’s further, I’m gonna guess there’s a powerful NixOS contingency out there that uses headless OSes to reduce surface area, harden systems and whutnot. Leaving out basic desktop abilities like popping up a file requester by default feels like a system hardening checklist item.
I’ll take it!
So long as my premise is correct. And so I initially add gnome.nautilus
to my
environment.systemPackages = with pkgs
list and am informed that nautilus has
been promoted to root. Taken out of gnome home? Hmmm. Sus. There’s no place like
gnome, but whatever. I remove the gnome.
prefix, do my sudo nixos-rebuild
switch
, reboot and there’s the files
program back on my app launcher panel
like this time last week before I threw caution to the wind and bravely let the
big unstable channel branch build on my system with the NixOS equivalent of
sudo apt-get update && sudo apt-get upgrade
…
sudo nix-channel --update
sudo nixos-rebuild switch
And wait a half-hour. And BAM! Warbler. Took me a bit to realize. I do this to make sure my GPU performance with the local LLM stuff I do on my RTX 3080 Ship of Theseus (Chip O’Theseus) machine is totally tweaked out. Hitting the vision models of Llama 3.2 on the Ollama website triggered the whole adventure. Updating individual components just isn’t worth it when your whole machine rolls forward and back so easily in time like a time-machine with fully re-generated systems. There’s a sort of bravery here I’ve never felt on other systems. Truly the right OS for a Ship of Theseus approach designed to Noah’s Ark your whole technology tool home forward in time forever.
Anyhoo I update my configuration.nix
, reboot and there’s Nautilus. I feel like
Ned Land. Or would that be Professor Aronnax? Either way, I found it.
{ config, pkgs, lib, ... }:
{
# Import hardware-specific configuration
imports = [
./hardware-configuration.nix
];
# Set the system state version
system.stateVersion = "unstable";
# Boot loader configuration
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Enable experimental features for Nix
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Networking configuration
networking.hostName = "nixos";
networking.networkmanager.enable = true;
# Set time zone and locale
time.timeZone = "America/New_York";
i18n.defaultLocale = "en_US.UTF-8";
# X Server and Desktop Environment configuration
services.xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
xkb.layout = "us"; # Keyboard layout
videoDrivers = ["nvidia"];
};
# Enable dconf and configure GNOME extensions
programs.dconf.enable = true;
services.xserver.desktopManager.gnome.extraGSettingsOverrides = ''
[org.gnome.shell]
enabled-extensions=['gTile@vibou']
'';
services.gnome.core-utilities.enable = false;
environment.gnome.excludePackages = [ ];
# Graphics configuration (updated from OpenGL)
hardware.graphics = {
enable = true; # Renamed from hardware.opengl.enable
enable32Bit = true; # Renamed from hardware.opengl.driSupport32Bit
};
# NVIDIA configuration
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
powerManagement.finegrained = false;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
# Allow unfree packages and enable CUDA
nixpkgs.config.allowUnfree = true;
nixpkgs.config.cuda.enable = true;
# Audio configuration
# sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# User configuration
users.users.mike = {
isNormalUser = true;
description = "Mike";
extraGroups = [ "networkmanager" "wheel" ];
};
# Auto-login configuration
services.displayManager.autoLogin = {
enable = true;
user = "mike";
};
# Enable Firefox
programs.firefox.enable = true;
# System packages
environment.systemPackages = with pkgs; [
cheese
cmake
code-cursor
coreutils
cudaPackages.cudatoolkit
curl
discord
feh
figlet
gcc
git
gnome-terminal
gnomeExtensions.gtile
google-chrome
jq
libreoffice
msmtp
nautilus
neovim
obs-studio
ollama
slack
sqlitebrowser
stdenv.cc.cc.lib
tmux
tree
unzip
v4l-utils
wget
xclip
zlib
zoom-us
(python311.withPackages (ps: with ps; [
requests
simplenote
]))
# Add your script here
(pkgs.writeShellScriptBin "gsr" ''
#!/usr/bin/env bash
if [ $# -ne 2 ]; then
echo "Usage: $0 'old term' 'new term'"
exit 1
fi
find . -type f -not -path '*/.*' -not -path '*/site-packages/*' -print0 | \
xargs -0 sed -i "s/\\b$1\\b/$2/g"
'')
];
# Environment variables
environment.variables = {
CUDA_HOME = "${pkgs.cudaPackages.cudatoolkit}";
};
# Power management configuration
services.logind = {
lidSwitch = "ignore";
extraConfig = ''
HandleSuspendKey=ignore
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
IdleAction=ignore
'';
};
# Ollama service configuration
services.ollama = {
enable = true;
acceleration = "cuda";
};
# Git daemon configuration
services.gitDaemon = {
enable = true;
basePath = "/srv/git";
exportAll = true;
user = "mike";
group = "users";
};
# Create Git repository directory
systemd.tmpfiles.rules = [
"d /srv/git 0755 mike users -"
];
# Open firewall port for Git daemon
networking.firewall.allowedTCPPorts = [ 9418 ];
# Force Neovim to use the correct init.lua through symlink
system.activationScripts.linkNeovimConfig = {
text = ''
mkdir -p /home/mike/.config/nvim
ln -sf /home/mike/repos/nixos/init.lua /home/mike/.config/nvim/init.lua
'';
};
# Keep the nix-config symlink creation
system.activationScripts.linkNixConfig = {
text = ''
ln -sf /home/mike/repos/nixos /etc/nixos
'';
};
# Neovim configuration (without specifying a custom init.lua location)
programs.neovim = {
enable = true;
defaultEditor = true;
# Remove any customRC or configure options here
};
# Shell aliases
environment.shellAliases = {
vim = "nvim"; # Keep alias for vim to nvim
xc = "xclip -selection clipboard <";
xv = "xclip -selection clipboard -o >";
gs = "grep -r --exclude-dir='.*' --exclude-dir='site-packages' -i -n";
r = "cd ~/repos";
n = "cd ~/repos/nixos && sudo nixos-rebuild switch";
};
# System activation scripts
system.activationScripts = {
removeOldVimSymlink = {
text = ''
if [ -L /home/mike/.vim/vimrc ]; then
rm /home/mike/.vim/vimrc
fi
'';
deps = [];
};
};
# Enable Logitech device support
hardware.logitech.wireless = {
enable = true;
enableGraphical = true;
};
# Enable Video4Linux support
boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ];
boot.kernelModules = [ "v4l2loopback" ];
boot.extraModprobeConfig = ''
options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
'';
}
Me: Perplexity, explain to the nice people who Ned Land and Professor Aronnax are.
Perplexity: Ned Land and Professor Pierre Aronnax are two key characters from Jules Verne’s novel “Twenty Thousand Leagues Under the Sea”, who represent starkly different personalities and approaches to life.
Ned Land Ned Land is a master harpooner from Quebec, Canada, known for his physical strength, bravery, and practical nature[1][3][5]. He is a skilled hunter with exceptional eyesight who values freedom and direct action[1][3]. As a man of the sea, Land is more comfortable with physical work and survival skills, preferring hands-on experience over intellectual contemplation[7]. He is deeply homesick aboard the Nautilus, longing to return to land and eat meat[1]. Despite his rough exterior, Land has strong moral principles, demonstrated by his willingness to save Captain Nemo from a shark attack, even though he distrusts him[1][3].
Professor Pierre Aronnax Professor Aronnax is a forty-year-old Assistant Professor at the Paris Museum of Natural History, specializing in marine biology[2][4]. He is the narrator of the novel and an intellectual who authored a book called “The Mysteries of the Great Ocean Depths”[2][4]. Unlike Ned Land, Aronnax is more contemplative and fascinated by scientific discovery, initially enjoying the submarine journey and Nemo’s technological marvels[2]. However, he is criticized for being passive, often observing events rather than taking decisive action[2][7].
Their Relationship Despite their differences, Aronnax and Ned Land develop a strong bond during their imprisonment on the Nautilus. They ultimately work together to escape, with Land’s practical skills and determination proving crucial to their liberation[6][7].
Citations:
[1] https://www.sparknotes.com/lit/20000-leagues-under-the-sea/character-ned-land/
[2] https://stevenrsouthard.com/character-analysis-pierre-aronnax/
[3] https://www.shmoop.com/study-guides/20000-leagues-under-the-sea/ned-land.html
[4] https://www.sparknotes.com/lit/20000-leagues-under-the-sea/character-pierre-aronnax/
[5] https://www.charactour.com/hub/characters/view/Ned-Land.20000-Leagues-Under-the-Sea
[6] https://study.com/academy/lesson/professor-aronnax-in-20-000-leagues-under-the-sea.html
[7] https://stevenrsouthard.com/character-analysis-ned-land/
Me: Yes, but who found it and which would I be more like in this context?
Perplexity: In the context of your NixOS adventure, you would be more like Professor Aronnax. You found the solution to your file manager problem by adding nautilus
to your system packages, demonstrating a methodical and intellectual approach to problem-solving[1]. Like Aronnax, who was fascinated by the technological marvels of the Nautilus, you show a keen interest in exploring and understanding the intricacies of your NixOS system.
Your statement “I feel like Ned Land. Or would that be Professor Aronnax? Either way, I found it” indicates that you successfully resolved the issue[1]. However, your detailed explanation of the problem, your understanding of the NixOS architecture, and your systematic approach to fixing it align more closely with Aronnax’s character traits than with Ned Land’s more direct, action-oriented personality.
Me: Yes, but didn’t Ned spot it first?
Perplexity: In the novel “Twenty Thousand Leagues Under the Sea”, Ned Land is indeed the first to spot the mysterious submarine, using his exceptional eyesight and keen observational skills as a harpooner[1]. While Professor Aronnax is the scientific narrator who analyzes and documents their journey, Ned Land is the character who initially detects the underwater vessel during their maritime expedition[1].
His practical, sailor’s perspective and sharp vision make him crucial in first identifying the Nautilus, which sets the entire adventure in motion. This aligns perfectly with his character as a skilled hunter and man of action, in contrast to Aronnax’s more intellectual approach.
Sigh, Perplexity just doesn’t get geek humor like Gemini. Or would that in this context be guix humor? Anyone? Bueller?