https://github.com/lgug2z/nixos-hetzner-cloud-starter
A sane, batteries-included starter template for running NixOS on Hetzner Cloud
https://github.com/lgug2z/nixos-hetzner-cloud-starter
Last synced: 4 months ago
JSON representation
A sane, batteries-included starter template for running NixOS on Hetzner Cloud
- Host: GitHub
- URL: https://github.com/lgug2z/nixos-hetzner-cloud-starter
- Owner: LGUG2Z
- Created: 2023-10-04T04:42:06.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-09T23:05:09.000Z (almost 2 years ago)
- Last Synced: 2025-05-14T03:42:51.226Z (about 1 year ago)
- Language: Nix
- Size: 28.3 KB
- Stars: 44
- Watchers: 2
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# nixos-hetzner-cloud-starter
This repository is intended to be a sane, batteries-included starter template
for running a [JeezyVim](https://github.com/LGUG2Z/JeezyVim)-powered NixOS
development environment on Hetzner Cloud. It exists as a sister-project of
[nixos-wsl-starter](https://github.com/lgug2z/nixos-wsl-starter).
If you don't want to dig into NixOS too much right now, the only file you need
to concern yourself with is [home.nix](home.nix). This is where you can add and
remove binaries to your global `$PATH`.
Go to [https://search.nixos.org](https://search.nixos.org/packages) to find the
correct package names, though usually they will be what you expect them to be
in other package managers.
`unstable-packages` is for packages that you want to always keep at the latest
released versions, and `stable-packages` is for packages that you want to track
with the current release of NixOS (currently 24.05).
If you want to update the versions of the available `unstable-packages`, run
`nix flake update` to pull the latest version of the Nixpkgs repository and
then apply the changes.
Make sure to look at all the `FIXME` notices in the various files which are
intended to direct you to places where you may want to make configuration
tweaks.
If you found this starter template useful, please consider
[sponsoring](https://github.com/sponsors/LGUG2Z) and [subscribing to my YouTube
channel](https://www.youtube.com/channel/UCeai3-do-9O4MNy9_xjO6mg?sub_confirmation=1).
## What Is Included
This starter is a lightly-opinionated take on a productive terminal-driven
development environment based on my own preferences. However, it is trivial to
customize to your liking both by removing and adding tools that you prefer.
- The default editor is [JeezyVim](https://github.com/LGUG2Z/JeezyVim)
- The default shell is `fish`
- `docker` is enabled by default
- The prompt is [Starship](https://starship.rs/)
- [`fzf`](https://github.com/junegunn/fzf),
[`lsd`](https://github.com/lsd-rs/lsd),
[`zoxide`](https://github.com/ajeetdsouza/zoxide), and
[`broot`](https://github.com/Canop/broot) are integrated into `fish` by
default
- These can all be disabled easily by setting `enable = false` in
[home.nix](home.nix), or just removing the lines all together
- [`direnv`](https://github.com/direnv/direnv) is integrated into `fish` by
default
- `git` config is generated in [home.nix](home.nix) with options provided to
enable private HTTPS clones with secret tokens
- `fish` config is generated in [home.nix](home.nix), and includes useful
navigiation and git aliases
## Quickstart
[](https://www.youtube.com/watch?v=wr22CyoyRo4)
- Create a server on Hetzner Cloud
- Location: Any
- Image: Ubuntu 22.04
- Type: Any (Shared vCPU `CPX11` is a good starting point)
- SSH: Use your "default" SSH public key for ease
- Architecture: x86
- Volumes: Not required
- Firewalls: Not required
- Backups: Not required
- Placement Groups: Not required
- Labels: Not required
- Cloud Config: Leave blank
- Name: Any
- `cp ~/.ssh/id_rsa.pub .` to make sure you have your SSH public key in this
repo
- Go through all the `FIXME:` notices in this repo and make changes wherever
you want
- Run [`nixos-anywhere`](https://github.com/nix-community/nixos-anywhere)
against `root@`
```bash
nix run github:numtide/nixos-anywhere -- --flake .#nixos root@
```
- Wait for the installation to complete
- Try to SSH into the server with `ssh @`
- You'll probably receive an error like the one below; follow the steps to
remove the ip address from `known_hosts`
```text
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Please contact your system administrator.
Add correct host key in ~/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in ~/.ssh/known_hosts:6
remove with:
ssh-keygen -f ~/.ssh/known_hosts" -R ""
Host key for has changed and you have requested strict checking.
Host key verification failed.
```
- Now you can SSH into the server
- In a local terminal window, apply updated configurations to the remote server
```bash
nixos-rebuild switch --flake .#nixos --target-host root@
```
Note: If developing in Rust, you'll still be managing your toolchains and
components like `rust-analyzer` with `rustup`!
## Project Layout
In order to keep the template as approachable as possible for new NixOS users,
this project uses a flat layout without any nesting or modularization.
- `flake.nix` is where dependencies are specified
- `nixpkgs` is the current release of NixOS
- `nixpkgs-unstable` is the current trunk branch of NixOS (ie. all the
latest packages)
- `home-manager` is used to manage everything related to your home
directory (dotfiles etc.)
- `nur` is the community-maintained [Nix User
Repositories](https://nur.nix-community.org/) for packages that may not
be available in the NixOS repository
- `nix-index-database` tells you how to install a package when you run a
command which requires a binary not in the `$PATH`
- `disko` is used to prepare VM storage for NixOS
- `hetzner.nix` is where OpenSSH is configured and where the `root` SSH public
key is set
- `linux.nix` is where the VM is configured
- The hostname is set here
- The default shell is set here
- User groups are set here
- NixOS options are set here
- `home.nix` is where packages, dotfiles, terminal tools, environment variables
and aliases are configured