- Nix 87.3%
- Shell 5%
- Python 3%
- TypeScript 2%
- JavaScript 1.3%
- Other 1.4%
| hmModules | ||
| hosts | ||
| nixosModules | ||
| users | ||
| .gitignore | ||
| .sops.yaml | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| README.md | ||
Julia's Dotfiles
These are my dot files declared with Nix for a fully reproducible build.
These are my personal dotfiles, and they will likely not fit your needs. While the project is designed to allow configuration choices to be made, I have baked in a lot of personal decisions about what I would want. I would use this repository as a reference for creating your own dotfiles and not much more.
Hosts and Users
The repository currently hosts four hosts, and each host has a unique user which lives on it.
Ginko is my current ThinkPad laptop where I spend most of my time these days. He doesn't have much configuration on the host, but the user contains most of what I need for daily operations and development work.
Jibril is my retired Surface Laptop, she doesn't run as well as she used to. She is primarily there for historical reasons, as the machine name has been co-opted for a different use.
Onizuka is my desktop computer which is currently not plugged in. Built for gaming back when that was my focus, I don't need a fully set up machine anymore, and so he sits in storage. I plan to take him out and convert him into a more powerful remote machine on my LAN when I have time.
Juri is my cloud server. She is always on and hosts most of the services I
need. In all likelihood you are reading this on winry.woach.me which is
hosted on Juri. She has a barebones user and a heavy host file, in contrast to
the other machines.
Repository layout
The repository is broken down into modules (nixosModules/ & hmModules/) and
configurations (hosts/ & users/). Secrets are managed with sops, with rules
for sops stored in .sops.yaml. Finally flake.nix acts as an entry point for
the whole project.
flake.nix defines which configuration to use. Automatically with easy-hosts
grabbing the host files from hosts/ and importing the nixosModules/.
Manually with the user configurations being specified in the flake output since
there is no "easy-users." Those users must also have a host specified in the
form of "username@host" and the path to their configuration attached. The
provided function userConfig automatically imports hmModules/.
hosts/ defines all hosts (distinct machines) which run NixOS. All
configurations have access to secrets so long as they obey the regex in
.sops.yaml, as well as all of the modules defined in nixosModules/.
nixosModules/ has three separate sections: apps, services, and automatic. The
content of automatic/ are automatically applied to all hosts. Apps and
Services are both programs which enhance the user experience in some way.
Generally Apps need to be run, while Services will start automatically once
enabled, but this isn't a hard and fast rule.
users/ defines users which may be attached to different machines. The
configurations are done through Home Manager, and the users have access to all
the modules in hmModules/. User's are assigned machines, meaning that some of
their configurations may only work if the host they are assigned has them
enabled.
hmModules/ has three separate sections: apps, services, and automatic. The
content of automatic/ are automatically applied to all users. Apps and
Services are both programs which enhance the user experience in some way.
Generally Apps need to be run, while Services will start automatically once
enabled, but this isn't a hard and fast rule.