Compare commits
2 Commits
458ff46192
...
bbc74a9614
| Author | SHA1 | Date | |
|---|---|---|---|
| bbc74a9614 | |||
| bd5fdfb8f3 |
74
README.md
Normal file
74
README.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# The Void
|
||||
*An opinionated dendritic nix configuration*
|
||||
|
||||
## The Concept
|
||||
|
||||
I have been trying to get consistent, across device experiences from the second that I
|
||||
started using linux. I tried my best with arch, but I foolishly believed that just remembering
|
||||
what packages I installed would be enough. Then I started managing my dotfiles with GNU stow,
|
||||
but that only allowed for a single host per repo. I moved over to doot, and simultaneously nixos.
|
||||
|
||||
I believed a dotfiles manager was my endgame. The final evolution, but it was far from ideal. I had to
|
||||
manage a mess of dotfiles, submodules and nix packages that were completely uncoupled from the apps that
|
||||
used them. Hyprland just assumed that I had all of my apps installed, assumed that otter-launcher's
|
||||
config existed. Just by forgetting an app or a toml file, I had the potential to brick my entire setup.
|
||||
|
||||
This is no longer the case.
|
||||
|
||||
The solution is similar to that of safely typed languages, like rust. Rust, instead of having optional parameters
|
||||
like typescript, requires that a variable be passed to a function, regardless of whether it contains anything.
|
||||
This leads to what is essentially a fixed dependancy tree, where there are no points of failiure, only allowing
|
||||
for logic errors and such. The same methodology can be applied to nix, using flake parts and wrapper scripts.
|
||||
|
||||
Instead of defining the packages beside the app, and its config, you can use the config to define the required binaries.
|
||||
By wrapping a config that contains a nix variable, ie a binary, that binary is intrinsically linked to that config,
|
||||
and will therefore always be installed. No more dependancy issues, and because the configs are defined within nix too, no
|
||||
more potential for missing config files. Dotfile managers are no more, long live dotfile managers. Any app with a `--config`
|
||||
flag can now be fully versioned and self contained within one repo, config and all, accessible on any machine with nix.
|
||||
|
||||
One command for a truly reproducible, fully contained, configured system. This is the endgame.
|
||||
|
||||
## Usage
|
||||
|
||||
Usage is similar to any other flake, with everything in the module directory being an output.
|
||||
|
||||
The folder structure is simply defined:
|
||||
```
|
||||
modules/
|
||||
|- features/ - all available apps, every subfolder contains a seperate wrapped binary
|
||||
|- attrs/ - attributes composed of other modules, no new features defined
|
||||
|- system/ - basic system modules, no binaries. Should not be run standalone. (Think network and audio config)
|
||||
|- hosts/ - available presets for machines. Output names match subfolder names, eg #HACKSTATION, and hostnames
|
||||
```
|
||||
|
||||
### Nixos Configurations
|
||||
|
||||
Due to the host module referencing `/etc/nixos/hardware-configuration.nix`, so that it is seperated from the repo,
|
||||
all rebuild commands will need `--impure`, unless you copy your configuration into the repo.
|
||||
|
||||
HACKSTATION is the heavier system, mobile02 is minimal and has no specialist hyprland config.
|
||||
|
||||
It is recommended to clone the repo beforehand, but the system can be built directly from remote
|
||||
```bash
|
||||
# Local Clone, . is the directory containing flake.nix
|
||||
sudo nixos-rebuild switch --impure --flake .
|
||||
|
||||
# Build from remote
|
||||
sudo nixos-rebuild switch --impure --flake "git+https://git.voidarc.co.uk/voidarc/nixos.git?ref=dendritic"
|
||||
```
|
||||
Both of these commands can be appended with a desired hostname in order to build that configuration.
|
||||
```bash
|
||||
# Example of building mobile02 from a local repo
|
||||
sudo nixos-rebuild switch --impure --flake .#mobile02
|
||||
```
|
||||
There is no default output, so if the current hostname doesn't match a host, you will get an error.
|
||||
Building this config should be non destructive to any existing dotfiles, but will remove all users (not home directories)
|
||||
from the system other than `user01`, who's default password is `qwer`.
|
||||
|
||||
### Binaries
|
||||
|
||||
Any binary can be run with the same base command (will change when merged to main)
|
||||
```bash
|
||||
nix run "git+https://git.voidarc.co.uk/voidarc/nixos.git?ref=dendritic#appname"
|
||||
```
|
||||
`Appname` can be substituted for the name of any folder in the `modules/features` dir, ie `kitty` or `otter-launcher`
|
||||
16
flake.lock
generated
16
flake.lock
generated
@@ -373,11 +373,11 @@
|
||||
"wshowkeys": "wshowkeys"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783777857,
|
||||
"narHash": "sha256-5tIpGp3E+hsDvWQWtAEvvQfUv+wdi6OsS1qziLPMJhk=",
|
||||
"lastModified": 1783943095,
|
||||
"narHash": "sha256-yolDQ38XW+EpTKMLli8BOcHKnIbR53iM03K9T6wkc9I=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "e561e6d3be18fc3d5dc35380dc6a87ebc518b471",
|
||||
"revCount": 47,
|
||||
"rev": "84edd88834b645751babc02f44408ccb703e421f",
|
||||
"revCount": 48,
|
||||
"type": "git",
|
||||
"url": "https://git.voidarc.co.uk/voidarc/hypr"
|
||||
},
|
||||
@@ -389,11 +389,11 @@
|
||||
"hyprland-config": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1783777857,
|
||||
"narHash": "sha256-5tIpGp3E+hsDvWQWtAEvvQfUv+wdi6OsS1qziLPMJhk=",
|
||||
"lastModified": 1783943095,
|
||||
"narHash": "sha256-yolDQ38XW+EpTKMLli8BOcHKnIbR53iM03K9T6wkc9I=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "e561e6d3be18fc3d5dc35380dc6a87ebc518b471",
|
||||
"revCount": 47,
|
||||
"rev": "84edd88834b645751babc02f44408ccb703e421f",
|
||||
"revCount": 48,
|
||||
"type": "git",
|
||||
"url": "https://git.voidarc.co.uk/voidarc/hypr"
|
||||
},
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
packages = {
|
||||
hyprland = inputs'.hyprland.packages.default.override {
|
||||
flags."--config" = "/run/hypr/config/hyprland.lua";
|
||||
env."MODULES_ROOT" = "/run/hypr/config/modules";
|
||||
runtimePackages =
|
||||
inputs.hyprland.lib.defaultRuntimePkgs.${system}
|
||||
// {
|
||||
|
||||
Reference in New Issue
Block a user