Skip to content

Nix flake repository for personal hosts using literate config

License

Notifications You must be signed in to change notification settings

Swarsel/.dotfiles

Repository files navigation

Disclaimer

You probably do not want to use this setup verbatim. This is made to fit my specific use cases, with some strings hardcoded and some niche settings that are not needed on most hosts. Also, nothing is ever stable here and changes are made on a daily basis.

That being said, there is a lot of general configuration that you probably can use without changes; if you only want to use this repository as a starting point for your own configuration, you should be fine. See below for more information. Also, if you see something that can be done more efficiently or better in general, please let me know! :)

~SwarselSystems~

Shell: zsh
DM: greetd
WM: SwayFX
Bar: Waybar
Editor: Emacs
Terminal: kitty
Launcher: fuzzel
Alerts: mako
Browser: firefox
Theme: city-lights

The files that are possibly of biggest interest are found here:

This is a nix flakes based setup that manages multiple hosts, including mixed (NixOS with home-manager as a submodule) as well as standalone home-manager machines, also using some overlays etc. There even is a configuration for an Android build. It is all wrapped in literal configuration .org files, because that allows me to have easy access without actually having to remember where the specific configuration files are all located. early-init.el is not tangled for the reason that adding it would break the emacs-overlay parsing.

Have fun!

General Nix tips

Sadly all things nix feel a bit underdocumented (even though it mostly is not). Below is a small list of tips that I thought could be helpful if you are new to the nix ecosystem:

Deployment

Below is a rough general guide to setup this system on a new NixOS host. Again, this is not recommended as this is a personal configuration. This also might not be the most efficient way to deploy a new Nix system, but it should work in the general case.

For a pure Home-Manager configuration, you need a few different steps. The biggest change is that you then want to call home-manager --flake .#<your-username>@<your-hostname> switch as the last step instead of nixos-rebuild [...]. A complete general guide for that case cannot really be given since you are most likely setting up the flake on a existing machine that already has a lot of configuration. If you are setting up a new system, I would recommend to use NixOS unless circumstances force you to use something else.

To do that:
  1. adapt Nix.org
    1. adapt system specific options:
      • Make a copy of "System Specific Configurations/TEMPLATE".

      • Adapt all references to TEMPLATE to your host- and usernames etc - pay special attention to the header lines in each nix source block, i.e. the "#+begin_src nix [...] :tangle profiles/TEMPLATE/[...]" lines.

      • Add the settings needed for your specific machine.

    2. adapt flake:
      • add a configuration block to "Noweb-Ref blocks/flake.nix/nixosConfigurations" (for example, you can copy one of the other blocks),
        • adapt the paths to the files you chose to tangle to.
        • adjust the "Inputs & Inputs@Outputs" and "let" sections if needed.
      • (Use "[...]/homeConfigurations" instead if adding a home-manager config.)
  2. Make sure Nix.org was actually tangled.
  • Beware: This assumes you have access to a way of tangling an .org file (for most people this will mean having a working Emacs). If you do not have that, see below.
If you have no way of tangling .org files

In that case make a copy of the /.dotfiles/profiles/TEMPLATE folder and adapt each file manually according to the above, then edit the /.dotfiles/flake.nix manually.

Basic system setup
  1. Make sure you have an internet connection (ethernet or for Wi-Fi e.g. call nmcli/nmtui)
  2. nix --experimental-features 'nix-command flakes' shell nixpkgs#git
  3. git clone https://github.com/Swarsel/dotfiles.git
  4. cp /etc/nixos/hardware-configuration.nix ~/.dotfiles/profiles/<YOUR_HOSTNAME>
  5. git -C ~/.dotfiles add ~/dotfiles/profiles/<YOUR_HOSTNAME>
  6. sudo nixos-rebuild --flake ~/.dotfiles/#<YOUR_HOSTNAME> boot
  7. Reboot.
  • This build will take a while (mostly because it fully builds Emacs), so do not worry too much :)
  • If you want to use sops-nix for secrets management, you need to provide your own key as well as a key for each host you are going to create. Then you need to adapt .sops.yaml to account for these keys and the directory where you are going to store the secrets. You can edit the secrets using sops using your key for authentication. You also need to edit the respective sections of the configuration to account for these locations.
  • In case you get a dependency error for some of the firefox-addons, just comment out those specific extensions and try to uncomment them again a few days later. Sometimes when these packages are updated, the old .xpi file is deleted by the addon developer and the download link breaks. It is usually updated swiftly. If you do not want to wait, you can also package the addon yourself - there is one example in the files how this is done in general.