Compare commits
32 Commits
7a3d2fee77
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fe71483c3d | |||
| def20c0070 | |||
| b39108df2c | |||
| e4fe282ffd | |||
| f76234271a | |||
| 546bf20a70 | |||
| 6ec6899793 | |||
| c0a5c4312f | |||
| 9764a025a9 | |||
| 25c6507c3e | |||
| b33c816191 | |||
| f2c68c8511 | |||
| 06848de32a | |||
| 29413b1f67 | |||
| bfeeacc434 | |||
| 749ee86763 | |||
| e56b948f91 | |||
| c0da93fe55 | |||
| 9b931a6284 | |||
| f16c1137f9 | |||
| eb7217973d | |||
| d9bbfff120 | |||
| 21fe0c40e9 | |||
| 7be2e897d4 | |||
| deddffad50 | |||
| 00f6800290 | |||
| 56aed1cf2d | |||
| 88266b040f | |||
| 5f7fc8ea05 | |||
| 3a634375a0 | |||
| fd62c17426 | |||
| 90c612bb57 |
8
.prettierrc.json
Normal file
8
.prettierrc.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"tabWidth": 2,
|
||||
"printWidth": 90,
|
||||
"useTabs": false,
|
||||
"proseWrap": "always",
|
||||
"endOfLine": "lf",
|
||||
"embeddedLanguageFormatting": "auto"
|
||||
}
|
||||
251
CONTRIBUTING.md
Normal file
251
CONTRIBUTING.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# CONTRIBUTING
|
||||
|
||||
## Tldr
|
||||
|
||||
**Do's**
|
||||
|
||||
- Be concise
|
||||
- Follow the [Formatting Rules](#formatting-rules) to the best of your ability
|
||||
- Segment larger changes into managable, reviewable commits
|
||||
- Leave a trail of your development so I can tell you put some effort in (doesnt really
|
||||
apply to smaller commits)
|
||||
- Write your own code
|
||||
- Leave some way of crediting your work
|
||||
- Disclose the capacity in which you used AI. Most of the time, anything more than making
|
||||
examples or helping you understand the codebase will be disallowed. As little AI code
|
||||
should make it to production as possible
|
||||
|
||||
**Dont's**
|
||||
|
||||
- Report upstream issues to me (ie an issue with the app itself, not my config)
|
||||
- Make major structural changes
|
||||
- Submit chore commits such as updating the flake, I can do that myself
|
||||
- Add new hosts for no reason, make your own flake and import the modules you want for
|
||||
your host
|
||||
- Majorly change existing hosts for your own preference
|
||||
- Ask AI to fix your issues and expect me to merge changes
|
||||
- Delete existing modules. Executive decisions like that will be made at my disgression,
|
||||
and will be done as non-destructively as possible, such as moving those modules to a
|
||||
"deprecated" branch in the future.
|
||||
|
||||
## General format
|
||||
|
||||
All emails regarding this repo (or another) should have a subject prepended with the
|
||||
following:
|
||||
|
||||
```text
|
||||
[GIT] [voidarc/nixos] (request type)
|
||||
```
|
||||
|
||||
The content of the second set of brackets should be replaced with the specific submodule
|
||||
or repo that is being referred to. For example, in the case of a quickshell bug, it should
|
||||
contain `voidarc/quickshell`.
|
||||
|
||||
In general, for most requests, I also implore you to include a github username (or
|
||||
equivalent, codeberg, gitlab, etc.) so that I have a frame of reference for you as a
|
||||
person, and also so that you can be credited in any resulting commits. Depending on
|
||||
scenario, this requirement can be waived, or substituted for a reddit account or
|
||||
something.
|
||||
|
||||
The third set of brackets pertains to the subject proper, and should only reasonably
|
||||
contain `issue`, `patch` or `feature`. If you believe that your request does not fit into
|
||||
any of those categories, then feel free to do whatever you want within reason.
|
||||
|
||||
## Issues
|
||||
|
||||
Issues are restricted to bugs or otherwise not fixed problems in the code. If it is an
|
||||
upstream bug, ie one not caused by my specific config, please don't send me a complaint
|
||||
about it, refer to the source app. The subject for an issue should be formatted as such:
|
||||
|
||||
```Text
|
||||
(prefix) (module type) (specific module) - (description of issue)
|
||||
```
|
||||
|
||||
The prefix shoud be formatted as above. In the case of an issue pertaining to another
|
||||
repo, the module type and module name may be omitted, unless it is an issue with the
|
||||
dendritic module implementation, in which case the repo in the subject should be this one.
|
||||
|
||||
The module type should match the repo's folder structure, being one of `feature`,
|
||||
`system`, `attr/attribute` or `host`. Self explanitory. Doesn't have to be an exact match.
|
||||
|
||||
The specific module should be the name of the module itself, not just the directory that
|
||||
contains it, due to the fact that some directories and files contain multiple modules. In
|
||||
the case of a file containing both a package and a module, favour the module that
|
||||
implements the package, and not the package itself (`self.nixosModules` rather than
|
||||
`self'.packages`).
|
||||
|
||||
The description should follow standard conventions, as you would report on other
|
||||
platforms. Don't make it stupidly long, common sense required.
|
||||
|
||||
The body of the email should be reminiscent of a github issue, and contain the following
|
||||
items in roughly the presented order:
|
||||
|
||||
- Clear description of the issue (and why it's an issue in the first place, and not
|
||||
personal preference)
|
||||
- Step by step instructions on how to replicate the given issue
|
||||
- Step by step instructions detailing what you believe the behaviour should be
|
||||
- Any attempts to fix the issue, or references to suspected code that may be causing the
|
||||
issue
|
||||
|
||||
If you have attempted to fix the issue, or altered the code, please refer to the next
|
||||
section
|
||||
|
||||
## Patches / Contributions (Pull requests)
|
||||
|
||||
Patches are for altered code that you would like me to review and possibly add to the
|
||||
codebase. Most of the time, these should be for issues that you have encountered using the
|
||||
repo, not new features entirely. If a patch doesn't fit an issue, is mostly or fully AI
|
||||
generated, or otherwise doesnt fit the repo, it will be rejected.
|
||||
|
||||
The format here is similar, but with a few key differences. The type of request should
|
||||
obviously be patch, and the rest should be identical to the previous type, containing
|
||||
module type, name, and a short description of the issue.
|
||||
|
||||
The body should also follow similar beats, having a breakdown of the issue and detailing
|
||||
the intended behaviour. Beyond the detailing portion, there are some other specific things
|
||||
that are required for issues in particular.
|
||||
|
||||
- A description of whatever alterations have been made to the code
|
||||
- Some form of username so that, in the event of a merge, you can be credited properly
|
||||
- A disclosure of how much or little AI was used in the creation of the patch. For
|
||||
completeness, even if no AI is used, please include "No AI was used" anyway, it is not
|
||||
implied.
|
||||
|
||||
A git patch file should be attatched to the email, not a link to a github repo or
|
||||
something else. Any "patch" email with no attatchments will probably not be looked at any
|
||||
further than the issue section. For patches, please refer to the
|
||||
[Formatting Rules](#formatting-rules)
|
||||
|
||||
Both issues and patches are on a first come first serve basis. Because there is no public
|
||||
forum (I'm sure as hell not maintaining one), if someone submits an issue or patch, even
|
||||
if someone else independantly discovered the bug, the first person will most likely be
|
||||
credited for that issue.
|
||||
|
||||
If you have previously opened an issue, and wish to make a patch for the same issue, reply
|
||||
to the initial issue email, and prefix the subject with `PATCH:` instead of the usual
|
||||
`RE:` or whatever your email client chooses to prepend. The rest of the subject should
|
||||
remain the same. The email should then contain the patch-specific sections, found above.
|
||||
Don't bother re-iterating the issue.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
Feature requests are for anything that doesn't already exist or doesnt otherwise fall into
|
||||
the previous categories. These are more freeform, and could come in the form of a useful
|
||||
app, a better way of managing something, or a better replacement for something that is
|
||||
already in the repo. Most importantly, this is NOT somewhere to shill an app you
|
||||
vibe-coded. Any AI generated apps will be rejected out of principle.
|
||||
|
||||
Headers should follow this structure, but, again, this is lenient:
|
||||
|
||||
```text
|
||||
(prefix) - (Feature type) - (App name): (description)
|
||||
```
|
||||
|
||||
The feature type, as before, should be one of the given folders in the repo. Generally,
|
||||
this will be a `feature` for a new app, but could be `system` for a new driver or
|
||||
`attribute` for a new collection of packages. If it is more general than any of those
|
||||
categories, or smaller in scope than an entire feature, use the feature type `other`, and
|
||||
detail what you are requesting (other should be used if you are just requesting a singular
|
||||
package be added to the system, for example).
|
||||
|
||||
Instead of following a fixed structure for the body, it is up to you to make a case for
|
||||
whatever you are suggesting. Whatever that entails is up to you. It could be use cases, it
|
||||
could be reasons it is better than whatever I am using. Be as verbose or as minimal as you
|
||||
wish, but keep in mind that the better your argument is, the more likely I am to accept
|
||||
your contribution. Again, if you wish, you can leave a username so that you can be
|
||||
correctly credited if I decide to include whatever you suggested.
|
||||
|
||||
If you are suggesting a new feature, app or otherwise, you may also choose to make a basic
|
||||
or full module implementing that feature, and then attach that to the email in the form of
|
||||
a patch. Refer to the [Formatting Rules](#formatting-rules) for further instruction on how
|
||||
to write your code.
|
||||
|
||||
Please also leave references for whatever it is you're suggesting, not just the name of
|
||||
the app. This could come in the form of documentation, a homepage, or the link for its
|
||||
github. In general, if an app has none of these things, or is closed source in any
|
||||
capacity, it will not be accepted.
|
||||
|
||||
## Formatting rules
|
||||
|
||||
Formatting in this repo should attempt to be standard to whatever I am using. For ease of
|
||||
use, either refer to or use my nvim config (`#nvim` output for this repo, refer to the
|
||||
README for how to run it). This prevents ugly git histories with commits specifically for
|
||||
formatting etc.
|
||||
|
||||
### General rules
|
||||
|
||||
When submitting a patch, there should be no merge conflicts with the current HEAD at the
|
||||
time of creation. It is a good rule of thumb to pull from remote before making a patch,
|
||||
incase behaviour changes.
|
||||
|
||||
If there are commits pushed between the time you send a patch and the time it is reviewed,
|
||||
any resulting merge conflicts are not your fault, and therefore will not be treated as
|
||||
such. Don't resubmit the same patch because there are new commits on remote, when patches
|
||||
are reviewed they are inserted at the point at which they were created, not on top of
|
||||
newer commits.
|
||||
|
||||
#### Branches
|
||||
|
||||
All patches should be mergable to the main branch, ie not have a patch for the `feature-x`
|
||||
branch or some nonsense. I do not have your git history, and therefore don't have whatever
|
||||
branch you created on my machine. In general, most changes should be restricted to one
|
||||
commit, so that crediting is easy.
|
||||
|
||||
If a change is more than one or two commits, make a new branch, make the changes that you
|
||||
want, then merge to the latest head before submitting a patch. When merging back to main,
|
||||
please use a merge commit instead of fast forwarding or clobbering the branch. This makes
|
||||
it easy to see who made what changes in the git history, and keeps blame easy to read.
|
||||
This merge commit will be where your credit goes. If you submit a patch that contains a
|
||||
load of commits on the main branch, the chances I accept the patch are very low.
|
||||
|
||||
### Code
|
||||
|
||||
There are many types of code in this repo, so if there is any confusion, either refer to
|
||||
the config that I am using in nvim, or send me an email asking me how to handle it.
|
||||
|
||||
#### Nix
|
||||
|
||||
For starters, all nix code should be formatted with
|
||||
[Alejandra](https://github.com/kamadorueda/alejandra). If you choose to format your code
|
||||
with nix-fmt or something else, chances are I won't refuse it, but I will overwrite your
|
||||
commits with a formatted version. To format the entire repo properly, run the following
|
||||
command:
|
||||
|
||||
```bash
|
||||
nix-shell -p alejandra --run "alejandra ."
|
||||
```
|
||||
|
||||
This will recursively check and format all `.nix` files in the repo, which is what I want.
|
||||
|
||||
As a secondary requirement, try to follow the already set out conventions that are on
|
||||
display in this repo, as well as the conventions of dendritic nix. A few examples:
|
||||
|
||||
- All top level objects should be merged into one unless there is a good reason for it
|
||||
- The first item in a module should be the module definition (`flake.nixosModules.xyz`)
|
||||
- All modules should be portable unless there is a good reason for it
|
||||
- Modules should reference eachother through `self.nixosModules` instead of relative
|
||||
paths, which should be avoided in most scenarios
|
||||
- In general, if a package is available in nixpkgs, an input need not be added. This rule
|
||||
differs case-by-case due to versioning differences.
|
||||
|
||||
#### Markdown
|
||||
|
||||
All markdown files should be formatted using prettier, with the settings provided in this
|
||||
repo. For reference, the rules are:
|
||||
|
||||
- 90 characters maximum, excluding code blocks
|
||||
- word wrapping
|
||||
- tab width of 2, as well as replacing spaces with tabs
|
||||
|
||||
#### Other languages
|
||||
|
||||
For one-off config languages (think `kitty.conf`), no formatting is needed. Whitespace can
|
||||
be added at the programmer's disgression.
|
||||
|
||||
For standard structured languages, such as json, yaml or toml, if there is an available
|
||||
prettier formatter, then it should be used. In general, tabwidth should be 2 and spaces
|
||||
should be used across the board. Don't use some esoteric formatter just to be special.
|
||||
|
||||
For actual programming languages, like qml or lua, either use the provided formatter, such
|
||||
as `qmlformat`, with the settings configured, or refer to my nvim config (in this case I
|
||||
use `stylua` with the default settings)
|
||||
120
README.md
120
README.md
@@ -1,38 +1,75 @@
|
||||
# The Void
|
||||
*An opinionated dendritic nix configuration*
|
||||
|
||||
_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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
One command for a truly reproducible, fully contained, configured system. This is the
|
||||
endgame.
|
||||
|
||||
### Mandatory thing on AI
|
||||
|
||||
I am not completely against AI. However, asking an agent to write a load of code and then
|
||||
posting it to reddit as if you made it yourself is disingenuous and (in my opinion) at
|
||||
least slightly morally incorrect. Many a time I have seen a cool project on a subreddit
|
||||
just for it to turn out to be ai generated garbage that I refuse to use out of principle.
|
||||
|
||||
I would go out on a limb and say that 99% of this codebase was written with no AI
|
||||
assistance. Every config, every module, every obscure fix for a bug that only exists
|
||||
because I'm using a dendritic pattern instead of being normal was programmed by hand by a
|
||||
real human (yours truly). I'm not saying I had no assistance at all, there are sections
|
||||
that are verbatim copied from the wiki of whatever app or language that I was using, but
|
||||
by and large, no AI code has made it into this repo.
|
||||
|
||||
There may be commits somewhere saying that opencode refactored something, or that it
|
||||
solved some obscure bug I was having, but after having those changes implemented for me, I
|
||||
took it upon myself to understand what actually happened, in order to make maintaining
|
||||
this config as easy as possible in the future.
|
||||
|
||||
This repo is not temporary. I daily drive this, and I intend to for many years to come.
|
||||
Going forward, I will keep to the same standard of only using AI as a last resort, and
|
||||
when needs must, only implementing and commiting changes that I fully understand and
|
||||
could've eventually come to myself. Sometimes, at the end of a long coding session, a man
|
||||
gets lazy. I could spend another 45 minutes fixing some quickshell update order bug, or I
|
||||
could get deepseek to do it. In the end, it was a 5 line fix that, in hindsight, was
|
||||
pretty obvious (lol).
|
||||
|
||||
## Usage
|
||||
|
||||
Usage is similar to any other flake, with everything in the module directory being an output.
|
||||
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
|
||||
@@ -43,12 +80,21 @@ modules/
|
||||
|
||||
### 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.
|
||||
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.
|
||||
HACKSTATION contains all features available (near enough), with mobile02 being a lighter
|
||||
version of the system, looking the same visually, but with less bloat, only really having
|
||||
firefox and a terminal.
|
||||
|
||||
It is recommended to clone the repo beforehand, but the system can be built directly from
|
||||
remote. When cloning the repo, in order to properly evaluate the `vinix` and `nrs` shell
|
||||
aliases, the config should be built from the directory you cloned it to, not from another
|
||||
directory. When building from remote, or in any other scenario in which the `$PWD`
|
||||
environment variable is not available, the zsh module will throw and evaluation warning,
|
||||
but the build will not be hindered.
|
||||
|
||||
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 .
|
||||
@@ -56,19 +102,37 @@ 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.
|
||||
|
||||
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`.
|
||||
|
||||
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`. No, that isn't my usual password.
|
||||
|
||||
### 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`
|
||||
|
||||
`appname` can be substituted for the name of any folder in the `modules/features` dir, ie
|
||||
`kitty` or `otter-launcher`. Most if not all modules in a subdirectory will have a module
|
||||
name corresponding to that directory. This only applies for `default.nix` files, so files
|
||||
that have different names are not expected to follow this convention, even if there is not
|
||||
ea `default.nix` in that directory.
|
||||
|
||||
## Issues and contributing
|
||||
|
||||
Because this is a private git server, there is no inline way to submit issues,
|
||||
contributions, or feature ideas. If you should wish, you may send such requests to
|
||||
<admin@voidarc.co.uk>, with the format found in CONTRIBUTING.md. Failure to follow the
|
||||
format found there will most likely result in your email being ignored.
|
||||
|
||||
86
flake.lock
generated
86
flake.lock
generated
@@ -125,11 +125,11 @@
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782949081,
|
||||
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
|
||||
"lastModified": 1785627969,
|
||||
"narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
|
||||
"rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -366,11 +366,11 @@
|
||||
"wshowkeys": "wshowkeys"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785262861,
|
||||
"narHash": "sha256-aSqAk+X2lcfWKICSTtVdramX5kkuUFy5MGOc58sl1NQ=",
|
||||
"lastModified": 1786876041,
|
||||
"narHash": "sha256-VshRLF8nJ1CB3D09OzoNgXPGVCJo0SOFG740TRJoumE=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "b8677a83f0f796acfd7dd26832ef27214f5a431f",
|
||||
"revCount": 50,
|
||||
"rev": "c853222bde4a2ba8e74d4a4a6fe2d1e26f92ddd6",
|
||||
"revCount": 54,
|
||||
"type": "git",
|
||||
"url": "https://git.voidarc.co.uk/voidarc/hypr"
|
||||
},
|
||||
@@ -699,11 +699,11 @@
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1782614948,
|
||||
"narHash": "sha256-ePjCwr1sNm9NYUqywL7QfK3JnlS015msC+eBu2zKlp8=",
|
||||
"lastModified": 1785031560,
|
||||
"narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "db3f255737b94216eb71cce308e2912cf6bc2d7c",
|
||||
"rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -790,6 +790,22 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_12": {
|
||||
"locked": {
|
||||
"lastModified": 1786599213,
|
||||
"narHash": "sha256-yNJd40f11EzXBjSByCB7IPpeFFAdeoSKKM67dGkfFoU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0e251e24a4f24e036a084b6b4b2d2491af4167f4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1784356753,
|
||||
@@ -856,11 +872,11 @@
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1785104993,
|
||||
"narHash": "sha256-eKbrvPoAOFutbYMdbB3r5EQVmFxKv24iKqHPPUXA0gM=",
|
||||
"lastModified": 1781216227,
|
||||
"narHash": "sha256-9mUW6gNwoN2SWc/l0fW4svPNOulXLl8ijqKyeSOGgJE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8623c4c20aa4ca2f5fb81510d2944066c3fb0d96",
|
||||
"rev": "a0374025a863d007d98e3297f6aa46cc3141c2f0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -904,11 +920,11 @@
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1783224372,
|
||||
"narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=",
|
||||
"lastModified": 1769170682,
|
||||
"narHash": "sha256-oMmN1lVQU0F0W2k6OI3bgdzp2YOHWYUAw79qzDSjenU=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d407951447dcd00442e97087bf374aad70c04cea",
|
||||
"rev": "c5296fdd05cfa2c187990dd909864da9658df755",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -924,11 +940,11 @@
|
||||
"wrappers": "wrappers_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783352922,
|
||||
"narHash": "sha256-59Kea6PaeTM6ZBEAWzdPnuLlij2emLd21JsPnobR3B0=",
|
||||
"lastModified": 1786871016,
|
||||
"narHash": "sha256-gZN2w9EStnsw3JTHLCMQ1op5cETvQQZM2k3zf5zpk+M=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "970da906087f0691932418db8757803d64f60c28",
|
||||
"revCount": 94,
|
||||
"rev": "63853fc7c573cba12abcc14d5c70a9ed3de56b4a",
|
||||
"revCount": 103,
|
||||
"type": "git",
|
||||
"url": "https://git.voidarc.co.uk/voidarc/nvim"
|
||||
},
|
||||
@@ -992,11 +1008,11 @@
|
||||
"systems": "systems_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783875707,
|
||||
"narHash": "sha256-Ryg3PqFcGydelQpgPF0j8GMaXaGDrNTSesEy6fDw/eg=",
|
||||
"lastModified": 1780973227,
|
||||
"narHash": "sha256-vlNT2248Oxg3++bk8ZkozsU4wDbxOkh6dl3GeoBmmXE=",
|
||||
"owner": "kuokuo123",
|
||||
"repo": "otter-launcher",
|
||||
"rev": "242e5da4f0acc0b4301be7b4546f5afb3e4b23d6",
|
||||
"rev": "764a38d1de308da3268222692652a0a85bb71eee",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1031,11 +1047,11 @@
|
||||
"quickshell": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1783436659,
|
||||
"narHash": "sha256-rh0BJlcRM8nFet9aYIaZMxe7M6BMNJOrSgJi3cPQ+Tc=",
|
||||
"lastModified": 1786547899,
|
||||
"narHash": "sha256-QxLEKq1R455FlEmaarx3cq9mk4jSBxHg3CyseLiOick=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "68d4240fcbc605ee36a0e71797c04c0ac33f3e19",
|
||||
"revCount": 25,
|
||||
"rev": "e33041b66c66a1b68930bfd3bb58746ffbd5f4b2",
|
||||
"revCount": 72,
|
||||
"type": "git",
|
||||
"url": "https://git.voidarc.co.uk/voidarc/quickshell"
|
||||
},
|
||||
@@ -1086,11 +1102,11 @@
|
||||
"nixpkgs": "nixpkgs_9"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785224226,
|
||||
"narHash": "sha256-Aj0ZA0boiYSPrvN+5ECpcYmx8OFEF+M1OoVY7ko0H/E=",
|
||||
"lastModified": 1781157498,
|
||||
"narHash": "sha256-gDNHztsHGFAmbbj7Gcu8vWcFU5+4c1EeGU4lhb7Hnqo=",
|
||||
"owner": "AceSLS",
|
||||
"repo": "SLSsteam",
|
||||
"rev": "4f7b79143a47a8ecb97c323745c7593d55fd6f20",
|
||||
"rev": "981da676e76f72b1ed3c387f192509ac9a1b91e4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1357,11 +1373,11 @@
|
||||
"nixpkgs": "nixpkgs_11"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782135443,
|
||||
"narHash": "sha256-vAmbArdCyjqpVW+37aCy/PMBOLIqukUXLQuEKLwUhA4=",
|
||||
"lastModified": 1786836119,
|
||||
"narHash": "sha256-oXGC2aM3Bh0MidmPwp/3XtNk69Bgni+WzN9iRhhg+HA=",
|
||||
"owner": "BirdeeHub",
|
||||
"repo": "nix-wrapper-modules",
|
||||
"rev": "6e7f66fa2cdf4d63162580b438f7fcf87c28a46f",
|
||||
"rev": "747261641d825be8d97abf755399b24057140ab6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1395,9 +1411,7 @@
|
||||
"wshowkeys_2": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_3",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
"nixpkgs": "nixpkgs_12"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781708685,
|
||||
|
||||
@@ -32,10 +32,7 @@
|
||||
url = "github:coffeeispower/woomer";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
wshowkeys = {
|
||||
url = "github:voidarclabs/wshowkeys";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
wshowkeys.url = "github:voidarclabs/wshowkeys";
|
||||
weylus = {
|
||||
url = "github:voidarclabs/WeylusCommunityEdition";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
11
modules/attrs/music/default.nix
Normal file
11
modules/attrs/music/default.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{moduleWithSystem, ...}: {
|
||||
flake.nixosModules.music = moduleWithSystem ({pkgs, unfreePkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
ardour
|
||||
unfreePkgs.vital
|
||||
distrho-ports
|
||||
cardinal
|
||||
calf
|
||||
];
|
||||
});
|
||||
}
|
||||
@@ -14,6 +14,7 @@
|
||||
audio
|
||||
systemTheme
|
||||
];
|
||||
|
||||
runtimePkgs = self'.packages.hyprland.passthru.runtimePackages;
|
||||
lib = pkgs.lib;
|
||||
|
||||
@@ -27,12 +28,16 @@
|
||||
enable = true;
|
||||
package = self'.packages.hyprland;
|
||||
};
|
||||
|
||||
services.displayManager.defaultSession = "hyprland";
|
||||
services.xserver.enable = true;
|
||||
security.polkit.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
hyprlock
|
||||
gsettings-desktop-schemas
|
||||
];
|
||||
|
||||
system.activationScripts.hyprRuntimeEnv = lib.stringAfter ["specialfs"] ''
|
||||
mkdir -p /run/hypr-runtime-env/bin
|
||||
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: pkg: ''
|
||||
@@ -40,6 +45,7 @@
|
||||
'')
|
||||
runtimePkgs)}
|
||||
'';
|
||||
|
||||
system.activationScripts.hyprConfig = lib.stringAfter ["specialfs"] ''
|
||||
mkdir -p /run/hypr/config
|
||||
ln -sfn ${inputs'.hyprland.packages.repo-files}/* /run/hypr/config
|
||||
|
||||
71
modules/features/i3/config
Normal file
71
modules/features/i3/config
Normal file
@@ -0,0 +1,71 @@
|
||||
set $mod Mod4
|
||||
set $term kitty
|
||||
set $menu dmenu_run
|
||||
|
||||
exec --no-startup-id xrandr --output HDMI-1 --mode 1920x1080 --rate 60 --pos -1920x0 --output DP-1 --mode 1920x1080 --rate 60 --pos 0x0 --output DP-2 --mode 1920x1080 --rate 60 --pos 1920x0
|
||||
|
||||
font pango:FiraMono Nerd Font 10
|
||||
|
||||
workspace 1 output DP-1
|
||||
workspace 2 output HDMI-A-1
|
||||
workspace 3 output DP-2
|
||||
|
||||
# Window functions
|
||||
bindsym $mod+BackSpace kill
|
||||
bindsym $mod+b fullscreen toggle
|
||||
|
||||
# Apps
|
||||
bindsym $mod+Return exec --no-startup-id $term
|
||||
bindsym $mod+d exec --no-startup-id $menu
|
||||
bindsym $mod+f exec --no-startup-id firefox
|
||||
bindsym $mod+s exec --no-startup-id nemo
|
||||
|
||||
# Focus windows
|
||||
bindsym $mod+k focus up
|
||||
bindsym $mod+j focus down
|
||||
bindsym $mod+h focus left
|
||||
bindsym $mod+l focus right
|
||||
|
||||
# Move windows
|
||||
bindsym $mod+Shift+h move left
|
||||
bindsym $mod+Shift+l move right
|
||||
bindsym $mod+Shift+k move up
|
||||
bindsym $mod+Shift+j move down
|
||||
|
||||
# Workspaces
|
||||
bindsym $mod+q workspace number 1
|
||||
bindsym $mod+w workspace number 2
|
||||
bindsym $mod+e workspace number 3
|
||||
bindsym $mod+r workspace number 4
|
||||
bindsym $mod+t workspace number 5
|
||||
bindsym $mod+y workspace number 6
|
||||
bindsym $mod+u workspace number 7
|
||||
bindsym $mod+i workspace number 8
|
||||
bindsym $mod+o workspace number 9
|
||||
bindsym $mod+p workspace number 10
|
||||
|
||||
# Move container to workspace
|
||||
bindsym $mod+Shift+q move container to workspace number 1
|
||||
bindsym $mod+Shift+w move container to workspace number 2
|
||||
bindsym $mod+Shift+e move container to workspace number 3
|
||||
bindsym $mod+Shift+r move container to workspace number 4
|
||||
bindsym $mod+Shift+t move container to workspace number 5
|
||||
bindsym $mod+Shift+y move container to workspace number 6
|
||||
bindsym $mod+Shift+u move container to workspace number 7
|
||||
bindsym $mod+Shift+i move container to workspace number 8
|
||||
bindsym $mod+Shift+o move container to workspace number 9
|
||||
bindsym $mod+Shift+p move container to workspace number 10
|
||||
|
||||
# Logout menu
|
||||
bindsym $mod+Shift+a exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
|
||||
|
||||
# Reload
|
||||
bindsym $mod+Shift+m reload
|
||||
|
||||
# Drag windows with titlebar
|
||||
tiling_drag modifier titlebar
|
||||
|
||||
# Bar
|
||||
bar {
|
||||
status_command i3status
|
||||
}
|
||||
48
modules/features/i3/default.nix
Normal file
48
modules/features/i3/default.nix
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
inputs,
|
||||
moduleWithSystem,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.i3 = moduleWithSystem ({
|
||||
pkgs,
|
||||
self',
|
||||
...
|
||||
}: {
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
|
||||
desktopManager = {
|
||||
xterm.enable = false;
|
||||
};
|
||||
|
||||
windowManager.i3 = {
|
||||
enable = true;
|
||||
package = self'.packages.i3;
|
||||
extraPackages = with pkgs;
|
||||
[
|
||||
dmenu
|
||||
i3status
|
||||
xinit
|
||||
];
|
||||
};
|
||||
};
|
||||
});
|
||||
perSystem = {pkgs, self', ...}: {
|
||||
packages.i3 = inputs.wrappers.lib.wrapPackage ({...}: {
|
||||
inherit pkgs;
|
||||
package = pkgs.i3;
|
||||
runtimePkgs = with pkgs;
|
||||
[
|
||||
xrandr
|
||||
firefox
|
||||
]
|
||||
++ (with self'.packages; [
|
||||
kitty
|
||||
nemo
|
||||
]);
|
||||
flags = {
|
||||
"-c" = ./config;
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -29,6 +29,7 @@
|
||||
settings = {
|
||||
font_size = 11;
|
||||
scrollbar = "never";
|
||||
pixel_scroll = false;
|
||||
window_padding_width = 9;
|
||||
background_opacity = 0.50;
|
||||
confirm_os_window_close = 0;
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.quickshell = moduleWithSystem ({self', ...}: {
|
||||
flake.nixosModules.quickshell = moduleWithSystem ({
|
||||
self',
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
environment.systemPackages = with self'.packages; [
|
||||
quickshell
|
||||
];
|
||||
|
||||
11
modules/features/tailscale/default.nix
Normal file
11
modules/features/tailscale/default.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
self,
|
||||
moduleWithSystem,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.tailscale = moduleWithSystem ({...}: {
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -34,6 +34,11 @@ template = '''
|
||||
{{- end -}}
|
||||
'''
|
||||
|
||||
[[blocks.segments]] # Hostname
|
||||
type = 'text'
|
||||
style = 'plain'
|
||||
template = '{{ if eq .HostName "server02" }}<green> {{.HostName}}</> <#7f849c>|</> {{ end }}'
|
||||
|
||||
[[blocks.segments]] # Python venv
|
||||
type = 'text'
|
||||
style = 'plain'
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
zsh = let
|
||||
flakeLocation = builtins.getEnv "PWD";
|
||||
in
|
||||
assert flakeLocation != "";
|
||||
lib.warnIf (flakeLocation == "") "Flake Location is undefined. Are you building in the right directory?"
|
||||
inputs.wrappers.wrappers.zsh.wrap {
|
||||
inherit pkgs;
|
||||
runtimePkgs = [pkgs.carapace pkgs.devenv pkgs.fzf];
|
||||
@@ -44,8 +44,14 @@
|
||||
lg = lib.getExe pkgs.lazygit;
|
||||
man = "man -P \"${lib.getExe pkgs.bat} -p\"";
|
||||
nsh = "nix-shell -p";
|
||||
nrs = "( cd ${flakeLocation} && sudo nixos-rebuild switch --impure --flake . )";
|
||||
vinix = "nvim --cmd 'cd ${flakeLocation}'";
|
||||
nrs =
|
||||
if flakeLocation != ""
|
||||
then "( cd ${flakeLocation} && sudo nixos-rebuild switch --impure --flake . )"
|
||||
else "echo 'Flake location not specified. Did you build with --impure?'";
|
||||
vinix =
|
||||
if flakeLocation != ""
|
||||
then "nvim --cmd 'cd ${flakeLocation}'"
|
||||
else "echo 'Flake location not specified. Did you build with --impure?'";
|
||||
};
|
||||
zshrc.content = ''
|
||||
source ${./devenv.zsh}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
davinci
|
||||
sddm-autologin
|
||||
nix-ld
|
||||
|
||||
i3
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
mobile02Configuration
|
||||
intelDrivers
|
||||
development
|
||||
upower
|
||||
music
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -11,15 +11,22 @@
|
||||
environment.systemPackages = with pkgs; [
|
||||
playerctl
|
||||
pavucontrol
|
||||
pulseaudioFull
|
||||
pipewire
|
||||
pipewire.jack
|
||||
];
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
|
||||
nixpkgs.config.pulseaudio = true;
|
||||
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
wireplumber.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,15 +3,19 @@
|
||||
moduleWithSystem,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.desktop = moduleWithSystem ({...}: let
|
||||
flake.nixosModules.desktop = moduleWithSystem ({pkgs, ...}: let
|
||||
modules = with self.nixosModules; [
|
||||
core
|
||||
hyprland
|
||||
sddm
|
||||
network
|
||||
omnisearch
|
||||
tailscale
|
||||
];
|
||||
in {
|
||||
imports = modules;
|
||||
environment.systemPackages = with pkgs; [
|
||||
mpv
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.amdDrivers = {
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
{...}: {
|
||||
flake.nixosModules.amdDrivers = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
mesa
|
||||
rocmPackages.rocm-smi
|
||||
|
||||
11
modules/system/drivers/upower.nix
Normal file
11
modules/system/drivers/upower.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{...}: {
|
||||
flake.nixosModules.upower = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
upower
|
||||
];
|
||||
services = {
|
||||
upower.enable = true;
|
||||
power-profiles-daemon.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user