My NixOS and Home Manager configuration
  • Nix 92.7%
  • Lua 3.6%
  • Python 2.2%
  • Shell 0.8%
  • Just 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Artur Sannikov 6d1e4e76be
All checks were successful
Check nix code and format / Formatting (push) Successful in 58s
feat(displayManager): force defaultSession to niri
2026-08-05 14:18:21 +03:00
.forgejo/workflows fix(ci): deadnix command 2026-07-03 10:39:46 +03:00
.github feat: add github-specific readme 2026-07-26 19:38:10 +03:00
modules feat(displayManager): force defaultSession to niri 2026-08-05 14:18:21 +03:00
scripts feat(dendritic): fix location of hardware-configuration for dendritic 2026-06-16 21:56:43 +03:00
.editorconfig feat: add .editorconfig 2026-03-08 13:20:18 +02:00
.gitignore chore: cleanup .gitignore 2026-02-11 21:29:34 +02:00
flake.lock chore: update flake.lock 2026-08-05 01:22:55 +00:00
flake.nix feat(nixpkgs): add master branch and use same unfree packages for channels 2026-07-28 10:35:50 +03:00
Justfile feat(Justfile): add boot-deploy 2026-07-25 12:35:29 +03:00
LICENSE license: GPL-3 -> MIT 2025-10-04 17:11:05 +03:00
README.md docs(readme): add note about setting root password for remote install 2026-07-25 13:03:51 +03:00

Artur's NixOS & Nix Home Manager configurations

License Badge

This repository contains NixOS configuration for my desktop, personal, and work laptops, Hetzner VM, and a small VM running on Proxmox (for my homelab). The configurations are based on a Nix flake for easy management and configuration. Changes are made in devel branch and then merged into main branch.

Note

The configuration follows the dendritic pattern. My old configuration is located in the old-config branch.

System Information

System Information:

  • Desktop environment: KDE Plasma 6
  • File systems: BTRFS/ZFS
  • Shell: zsh
  • Terminal: Kitty
  • Editor: Nixvim

Updates

Updates are managed via flake.lock on my Forgejo instance. The workflows are public.

Secrets

I keep secrets in a private repository and pull them into my configuration with flake. EmergentMind wrote a great post on how to implement this.

Nixvim

Nixvim is available as a flake output from this repo. To start it, run

nix run "git+https://codeberg.org/arsann/nixos#nvim"

Or if you want to use the devel branch:

nix run "git+https://codeberg.org/arsann/nixos?ref=devel#nvim"

Stuff to Do Manually

Not everything is feasible (still?) to declare. Not an exhaustive list of stuff to do after the installation:

  • Login into Librewolf for syncing
  • Login into gh
  • Login into fj (forgejo-cli)
  • Login into bw
  • Set up Thunderbird if it asks for password
  • Set up tailscale
  • Install Better Bibtex for Zotero

nixos-anywhere Deployment

The script scripts/nixos-anywhere-deployment.sh allows the remote deployment of NixOS machines. I use it to deploy, for example, my Hetzner box, running my Git server. It handles everything: from disk configuration to the actual configuration.

The only required environment variable is NIXOS_ANYWHERE_HOST.

export NIXOS_ANYWHERE_HOST=<host>

For secrets, I use pass utility. The secrets are decrypted by the host SSH key, which is an entry nixos_anywhere_ed25519_hostkey.

If you are deploying a new machine, first generate a unique SSH key for this machine and add it to pass.

cd /tmp
ssh-keygen -f ./id_ed25519
# This will overwrite the entry
pass insert --multiline --force nixos_anywhere_ed25519_hostkey < /tmp/id_ed25519
nix-shell -p ssh-to-age --run 'cat /tmp/id_ed25519.pub | ssh-to-age'

# Add the generate age key to .sops.yaml

Then update the key
sops --config ../nix-secrets/.sops.yaml updatekeys ../nix-secrets/secrets.yaml

# Update the flake in nixos main repo
nix flake update nix-secrets

# Remove the generated key
rm /tmp/id_ed25519*

After loading the minimal NixOS ISO, run the commands:

sudo su
passwd
# insert root password

During the installation you will be promoted to insert the root password several types.

Configuration Mirrors

This configuration is available on my own Forgejo instance, Codeberg and GitHub.