this is just setup for what the dbus proxy will require in the near future
.❄️≡We|_c0m3 7o m`/ f14k≡❄️.
(er, it's not a flake anymore. welcome to my nix files.)
What's Here
this is the top-level repo from which i configure/deploy all my NixOS machines:
- desktop
- laptop
- server
- mobile phone (Pinephone)
everything outside of hosts/ and secrets/ is intended for export, to be importable for use by 3rd parties. the only hard dependency for my exported pkgs/modules should be nixpkgs. building hosts/ will require sops.
you might specifically be interested in these files (elaborated further in #key-points-of-interest):
- my packages
- my implementation of impermanence
- my way of deploying dotfiles/configuring programs per-user:
if you find anything here genuinely useful, message me so that i can work to upstream it!
Using This Repo In Your Own Config
follow the instructions here to access my packages through the Nix User Repositories.
Layout
doc/
- instructions for tasks i find myself doing semi-occasionally in this repo.
hosts/
- configs which aren't factored with external use in mind.
- that is, if you were to add this repo to a flake.nix for your own use, you won't likely be depending on anything in this directory.
integrations/
- code intended for consumption by external tools (e.g. the Nix User Repos).
modules/
- config which is gated behind
enable
flags, in similar style to nixpkgs'nixos/
directory. - if you depend on this repo for anything besides packages, it's most likely for something in this directory.
- config which is gated behind
overlays/
- predominantly a list of
callPackage
directives.
- predominantly a list of
pkgs/
- derivations for things not yet packaged in nixpkgs.
- derivations for things from nixpkgs which i need to
override
for some reason. - inline code for wholly custom packages (e.g.
pkgs/by-name/sane-scripts/
for CLI tools that are highly specific to my setup).
scripts/
- scripts which aren't reachable on a deployed system, but may aid manual deployments.
secrets/
- encrypted keys, API tokens, anything which one or more of my machines needs read access to but shouldn't be world-readable.
- not much to see here.
templates/
- used to instantiate short-lived environments.
- used to auto-fill the boiler-plate portions of new packages.
Key Points of Interest
i.e. you might find value in using these in your own config:
modules/fs/
- use this to statically define leafs and nodes anywhere in the filesystem,
not just inside
/nix/store
. - e.g. specify that
/var/www
should be:- owned by a specific user/group
- set to a specific mode
- symlinked to some other path
- populated with some statically-defined data
- populated according to some script
- created as a dependency of some service (e.g.
nginx
)
- this is akin to using Home Manager's file API -- the part which lets you
statically define
~/.config
files -- just with a different philosophy. namely, it avoids any custom activation scripts by leveragingsystemd-tmpfiles
.
- use this to statically define leafs and nodes anywhere in the filesystem,
not just inside
modules/persist/
- my implementation of impermanence, built atop the above
fs
module, with a few notable features:- no custom activation scripts or services (uses
systemd-tmpfiles
and.mount
units) - "persist" cache directories -- to free up RAM -- but auto-wipe them on mount and encrypt them to ephemeral keys so they're unreadable post shutdown/unmount.
- persist to encrypted storage which is unlocked at login time.
- no custom activation scripts or services (uses
- my implementation of impermanence, built atop the above
modules/programs/
- like nixpkgs'
programs
options, but allows both system-wide or per-user deployment. - allows
fs
andpersist
config values to be gated behind program deployment:- e.g.
/home/<user>/.mozilla/firefox
is persisted only for users whosane.programs.firefox.enableFor.user."<user>" = true;
- e.g.
- allows aggressive sandboxing any program:
sane.programs.firefox.sandbox.enable = true; # wraps the program so that it isolates itself into a new namespace when invoked
sane.programs.firefox.sandbox.whitelistWayland = true; # allow it to render a wayland window
sane.programs.firefox.sandbox.extraHomePaths = [ "Downloads" ]; # allow it read/write access to ~/Downloads
- integrated with
fs
andpersist
modules so that programs' config files and persisted data stores are linked into the sandbox w/o any extra involvement.
- like nixpkgs'
modules/users/
- convenience layer atop the above modules so that you can just write
fs.".config/git"
instead offs."/home/colin/.config/git"
- simplified
systemd.services
API
- convenience layer atop the above modules so that you can just write
Mirrors
this repo exists in a few known locations:
- primary: https://git.uninsane.org/colin/nix-files
- mirror: https://github.com/nix-community/nur-combined/tree/master/repos/colinsane
Contact
if you want to contact me for questions, or collaborate to split something useful into a shared repo, etc,
you can reach me via any method listed here.
patches, for this repo or any other i host, will be warmly welcomed in any manner you see fit:
git send-email
, DM'ing the patch over Matrix/Lemmy/ActivityPub/etc, even a literal PR where you
link me to your own clone.