I prefer maximizing control over my system whenever possible. The top priorities for my Linux Desktop include Accessibility, Ease of Use, Reproducibility, and Stability.
And speaking of control, I’ve realized I should start documenting my processes. I mean, who knows, my wisdom might just go six feet under with me, and I’ve got a boatload of know-how tucked away up in this brain of mine. Plus, you know what they say about active externalism — it’s all about making sure your knowledge doesn’t end with you.
I’ve experimented with different tools over time ranging from shell scripts, makefiles, ansible/puppet/chef (check out the git tags) in order to enforce and sync configuration. But as the system evolves, things tend to deteriorate and everything becomes a giant mess.
Nix appears to tackle these issues, albeit in an extreme manner - less convenient and sensible, but quite effective - prioritizing correctness over flexibility. Most importantly it guarentees reproducibility, which means I can sit back and relax; if something worked, it’ll keep working unless changed.
Before anything, you can view my configuration at:
Additionally, I’ve described nix extensively in my notes over here.
This is root repository to my linux system configuration, managed by nix flake.
I’ve primarily used home-manager with snowfall-lib for installation & configuration of most packages. For native stuffs (display drivers / virtualization that requires dkms kernel integrations / service management) I’ve used Puppet RAL.
So in most cases this config should be applicable to fit wide variety of distros, including various service managers (systemd/runit/openrc/etc).
Justfile has following recipes set up.
just --list --unsortedAvailable recipes:
build
dry-run
switch
list-generations
treeview arg='.' # Shows treeview of given folder (also used in generation of README)
nvfetcher # Update all dependencies in nvfetcher.toml
bundix # Update all gems in packages/**
Main command you should remember is,
just switch && stow -t $HOME stow/TODO: Document stow folder
Autogenerated by running C-c C-v b in emacs. Be sure to load the shell module if you haven’t.
homes
└── x86_64-linux
└── animesh@framework
└── default.nix
My primary config is at homes/x86_64-linux/animesh@framework/default.nix.
modules
└── home
├── apps
│ └── brave
│ └── default.nix
├── cli
│ ├── bat
│ │ └── default.nix
│ ├── fish
│ │ ├── default.nix
│ │ └── functions.nix
│ ├── git
│ │ └── default.nix
│ ├── inxi
│ │ └── default.nix
│ ├── just
│ │ └── default.nix
│ ├── kitty
│ │ └── default.nix
│ ├── nix
│ │ ├── default.nix
│ │ ├── pin-inputs.nix
│ │ └── setup-comma.nix
│ ├── ranger
│ │ └── default.nix
│ └── starship
│ └── default.nix
├── desktop
│ ├── eww
│ │ └── default.nix
│ ├── fonts
│ │ └── default.nix
│ ├── gtk
│ │ └── default.nix
│ ├── herbstluftwm
│ │ └── default.nix
│ └── xorg
│ └── default.nix
├── editors
│ ├── emacs
│ │ └── default.nix
│ └── nvim
│ └── default.nix
├── languages
│ ├── android
│ │ └── default.nix
│ ├── go
│ │ └── default.nix
│ └── ruby
│ └── default.nix
├── modules
│ └── puppet
│ ├── default.nix
│ └── etc.nix
└── system
├── acpi-handler
│ └── default.nix
├── auto-cpufreq
│ └── default.nix
├── fstrim
│ └── default.nix
└── sysctl
└── default.nix
packages
├── emacs-chdir
│ └── default.nix
├── emacs-pcre
│ └── default.nix
├── phosphor-icons
│ └── default.nix
└── puppet
├── default.nix
└── gemset.nix
overlays
└── nvfetcher
└── default.nix
To cleanup older generations:
pushd ~/.local/state/nix/profiles && ls | awk "!/$(readlink home-manager)/ && /home-manager-/" | xargs rm && popd
nix-collect-garbage --delete-old
nix store gc --debugSometimes mmap files prevent gc, reboot + same thing may clear even more!
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
For more information, please refer to <http://unlicense.org/>Special thanks to these as my configuration have been extremely inspired by them,
- snowfallorg and https://github.com/YaroKasear/flakes providing ideal structure
- https://sourcegraph.com/github.com/jpetrucciani/nix/-/blob/mods/pog.nix shows pog module
- https://github.com/NobbZ/nixos-config/ great nix uses
- https://github.com/matklad/config & https://github.com/notusknot/dotfiles-nix (not so sure if I took something from them)
