Using Nix with Fedora's Immutable Distros
Updated: March 30, 2025 · 4 min
Disclaimer: This is my personal setup. It works well for me, but you might want to just use NixOS.
Installing Nix and Home Manager
I’ve come up with a script for installing Nix using the Determinate Installer. I love using this because It Just WorksTM for Linux and MacOS.
#!/bin/sh
echo "Installing Nix..."
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
echo "Updating Nix Channels..."
nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
nix-channel --update
echo "Installing Home Manager..."
nix-shell '<home-manager>' -A install
home-manager switch
This script:
- Installs nix
- Adds the unstable channel
- Adds the Home Manager channel
- Updates all our channels
- Installs home-manager
- Activates home-manager
If you’re not familiar with Home Manager, you’ll want to follow the official guide.
Multiple Machines
I use my nix config on my personal desktop, personal laptop, and my work laptop, but each one requires a slightly different config. To get around this, I have a single common.nix
file then an individual nix file for each machine.
❯ ll .config/home-manager/
total 24K
-rw-r--r--. 1 godmaire godmaire 133 Apr 4 15:20 artemis.nix
-rw-r--r--. 1 godmaire godmaire 1.1K Apr 6 08:42 charles.nix
-rw-r--r--. 1 godmaire godmaire 2.6K Jun 15 10:37 common.nix
-rw-r--r--. 1 godmaire godmaire 5.0K May 14 18:04 diana.nix
If we take a peek inside artemix.nix
, we can see how it imports common.nix
and which settings it needs.
{ config, lib, pkgs, ... }:
{
imports = [ ./common.nix ];
home.username = "godmaire";
home.homeDirectory = "/var/home/godmaire";
}
To actually use this config on Artemis, we can symlink it to home.nix
.
❯ ll .config/home-manager/home.nix
lrwxrwxrwx. 1 godmaire godmaire 9 Apr 4 15:19 .config/home-manager/home.nix -> artemis.nix
The only things we need to set in artemis.nix
or any other machine specific file are the home.username
and home.homeDirectory
. Everything else is in common.nix
. For my work machine, which runs MacOS, I have a few other customizations.
{ config, lib, pkgs, ... }:
{
imports = [ ./common.nix ];
home.username = "rgodmaire";
home.homeDirectory = "/Users/rgodmaire";
# Overrides
programs.emacs.package = lib.mkForce pkgs.emacs-macport;
home.packages = with pkgs; [
go
gopls
delve
gotests
gotools
python3
pyright
ruff
shellcheck
];
programs.alacritty = {
enable = true;
settings = {
font = {
normal.family = "Hack Nerd Font Mono";
size = 12.0;
};
colors = {
primary = {
background = "#282828";
foreground = "#ebdbb2";
};
normal = {
black = "#282828";
red = "#cc241d";
green = "#98971a";
yellow = "#d79921";
blue = "#458588";
magenta = "#b16286";
cyan = "#689d6a";
white = "#ebdbb2";
};
};
};
};
}
The interesting things here are the additional packages, alacritty, and the different package for emacs. We use lib.mkForce
to overwrite the existing setting in common.nix
. Everything else, such as home.packages
merges with common.nix
.
Why Not Use NixOS?
I started using Feodra Silverblue before I started using Nix. By the time I started entertaining the idea of using NixOS, I already had this setup. Either way, I’d need to have most of this in place due to me being forced to use a Macbook for work (Linux was banned 😢).
I now use NixOS full time. Drink the koolaid.