Compare commits

...

17 commits

Author SHA1 Message Date
Alexandre Cavalheiro S. Tiago da Silva b0dd61fa9d
fix(neovim): remove razor from ensure_installed in treesitter
The language's treesitter spec is not in the family yet, have to
manually download, compile and add it.
2025-03-21 16:51:51 -03:00
Alexandre Cavalheiro S. Tiago da Silva ebcc6a62d3
feat: expose my nix binary cache 2025-03-21 16:44:57 -03:00
Alexandre Cavalheiro S. Tiago da Silva 6741c18dfd
fix(hyprland): v1 rules have been replaced with v2 2025-03-21 15:19:48 -03:00
Alexandre Cavalheiro S. Tiago da Silva 8c46dc08fc
chore(hyprland): use mesa instead of mesa.drivers
mesa.drivers is deprecated
2025-03-21 15:19:21 -03:00
Alexandre Cavalheiro S. Tiago da Silva a9b3ef3f32
chore: remove vesktop override 2025-03-21 15:18:55 -03:00
Alexandre Cavalheiro S. Tiago da Silva 9a4a6141e2
chore: flake update 2025-03-21 15:09:53 -03:00
Alexandre Cavalheiro S. Tiago da Silva 7b2323c5a5
chore: remove gakuen-cosplay input and its services 2025-03-21 14:50:30 -03:00
Alexandre Cavalheiro S. Tiago da Silva f7c1959973
chore: update gakuen-cosplay input and gakuen-cosplay-api service 2025-03-16 00:04:30 -03:00
Alexandre Cavalheiro S. Tiago da Silva 3f4728de40
feat(shared/nixos): add avahi service to enable ipp everywhere 2025-03-15 12:35:06 -03:00
Alexandre Cavalheiro S. Tiago da Silva 2501f0b8a4
fix(neovim)!: remove lazy.nvim dev options and change nvim-ufo url
This was bad, it relies on a path only one of my machines has access to.

Updated `nvim-ufo` to use my fork until my merge is accepted (or not).
2025-03-15 12:35:06 -03:00
Alexandre Cavalheiro S. Tiago da Silva 7f47e25e05
chore: update gakuen-cosplay input
Also update the path where we store the data used in the api
2025-03-15 01:26:56 -03:00
Alexandre Cavalheiro S. Tiago da Silva e72b1b1230
feat(packages): add miraclecast 2025-03-07 22:44:08 -03:00
Alexandre Cavalheiro S. Tiago da Silva cf1eae0829
chore: add a CC0-1.0 LICENSE 2025-03-07 00:33:02 -03:00
Alexandre Cavalheiro S. Tiago da Silva 15fccff855
chore(flake): remove line break from template description 2025-03-06 11:31:41 -03:00
Alexandre Cavalheiro S. Tiago da Silva f126b88daf
fix(packages/zenergy): remove package from flake and explain how to use it 2025-03-06 11:29:34 -03:00
Alexandre Cavalheiro S. Tiago da Silva a471e424f8
docs: touch-ups 2025-03-06 11:27:58 -03:00
Alexandre Cavalheiro S. Tiago da Silva f87f9995be
refactor!: restructure and document configuration 2025-03-06 05:30:47 -03:00
131 changed files with 1312 additions and 761 deletions

121
LICENSE Normal file
View file

@ -0,0 +1,121 @@
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.

67
README.md Normal file
View file

@ -0,0 +1,67 @@
# linuxware
This repository contains the configuration of my main Linux based system(s), currently this repository consists of a
[NixOS] system configuration alongside [dotfiles] generated by [Home Manager] and [dotfiles] maintained by me.
## Navigation guide
In this section I will detail how you can navigate and make the most use out of my configuration.
### File structure
- [`flake.nix` & `flake.lock`](#flake)
- _This is the "entry-point" of the [NixOS] configuration._
- [`hosts/`](/hosts/)
- _Inside you can find the per-system customizations I've made._
- [`modules/`](/modules/)
- _These contain the modules I export in the [flake](#flake)._
- [`packages/`](/packages/)
- _Encompasses the packages I maintain outside or in tandem with [nixpkgs]._
- [`shared/`](/shared/)
- _The [NixOS] and [Home Manager] configuration that's shared across hosts._
- [`assets/`](/assets/)
- _All media used in this configuration or shown inside READMEs._
> _Be sure to click the hyperlinks for the relevant documentation._
#### Flake
A flake basically contains what you want to consume in your environment and what you want to export to be consumed, on
top of having a lockfile to pin the versions of what you are consuming.
Personally, the best way to learn how to use it as a beginner is the [Unofficial NixOS & Flakes
Book](https://nixos-and-flakes.thiscute.world/). I will not explain how to configure or use my flake as that would be
lenghty.
I export four modules that you can use in your configuration:
- [Hyprland NixOS configuration](/modules/hyprland/README.md)
- _Accessed through `<linuxware>.nixosModules.hyprland`._
- [Hyprland home-manager configuration](/modules/hyprland/README.md#configuration)
- _Accessed through `<linuxware>.homeManagerModules.hyprland`._
- [Emacs home-manager configuration & dotfiles](/modules/emacs/README.md)
- _Accessed through `<linuxware>.homeManagerModules.emacs`_
- [Neovim home-manager configuration & dotfiles](/modules/neovim/README.md)
- _Accessed through `<linuxware>.homeManagerModules.neovim`._
> _Be sure to click the hyperlinks for the relevant documentation._
To facilitate on-boarding, once you've set-up the experimental features needed for flakes I have provided a template
with this repository for you to use; it comes with a [NixOS] system configuration, [Home Manager] configuration
alongside the modules that I provide.
All you have to do is enter the directory you want your configuration to reside and execute
`nix flake init -t github:wizardlink/linuxware`. Be sure to read the `README.md` file!
## Desktop screenshot
![image](/assets/screenshots/full-system.png)
> _All screenshots of the system and it's components are available [here](/assets/README.md)._
<!-- REFERENCES -->
[dotfiles]: https://wiki.archlinux.org/title/Dotfiles
[home manager]: https://github.com/nix-community/home-manager
[nixos]: https://nixos.org/
[nixpkgs]: https://github.com/NixOS/nixpkgs/

42
assets/README.md Normal file
View file

@ -0,0 +1,42 @@
## Desktop
![image](./screenshots/full-system.png)
### Window gaps
![image](./screenshots/hyprland-gaps.png)
### Window borders
![image](./screenshots/hyprland-active.png)
![image](./screenshots/hyprland-inactive.png)
## Programs
### Neovim
![image](./screenshots/neovim-dashboard.png)
![image](./screenshots/neovim-nix.png)
![image](./screenshots/neovim-rust.png)
### Alacritty & Fish
![image](./screenshots/alacritty-and-fish.png)
### Rofi
![image](./screenshots/rofi.png)
### Waybar
![image](./screenshots/waybar.png)
### Emacs
![image](./screenshots/doomemacs.png)
## System
### SDDM background
![image](./sddm/Background.jpg)

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View file

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

View file

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
assets/screenshots/rofi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View file

Before

Width:  |  Height:  |  Size: 4.8 MiB

After

Width:  |  Height:  |  Size: 4.8 MiB

View file

@ -20,11 +20,11 @@
]
},
"locked": {
"lastModified": 1739298463,
"narHash": "sha256-oAFv9jKwwA7d7384d2LeywDSgwhvb3ZnrwbfoWPhXsI=",
"lastModified": 1742213273,
"narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "f239e5aadd6d23c48e085c2de3397e2058e54d16",
"rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf",
"type": "github"
},
"original": {
@ -69,25 +69,6 @@
"type": "github"
}
},
"gakuen-cosplay": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
},
"locked": {
"lastModified": 1741220025,
"narHash": "sha256-Eib4BQfSCQ0XSB0OJ+IahFIf5WN3VyJ2Zx0AAvID5z8=",
"ref": "refs/heads/main",
"rev": "c5fcfedf91b8a34014132902fc76eac6674ed49a",
"revCount": 15,
"type": "git",
"url": "file:///mnt/internal/shared/work/gakuen/projects/cosplayer_submission"
},
"original": {
"type": "git",
"url": "file:///mnt/internal/shared/work/gakuen/projects/cosplayer_submission"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
@ -117,11 +98,11 @@
]
},
"locked": {
"lastModified": 1741217763,
"narHash": "sha256-g/TrltIjFHIjtzKY5CJpoPANfHQWDD43G5U1a/v5oVg=",
"lastModified": 1742569620,
"narHash": "sha256-igC2cu+cPRB3E4QwKR+vGagyAtoyB+DrmWwDKm8jkaw=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "486b066025dccd8af7fbe5dd2cc79e46b88c80da",
"rev": "8a68f18e96bcab13e4f97bece61e6602298a3141",
"type": "github"
},
"original": {
@ -133,8 +114,8 @@
"hydractify-bot": {
"inputs": {
"naersk": "naersk",
"nixpkgs": "nixpkgs_3",
"utils": "utils_2"
"nixpkgs": "nixpkgs_2",
"utils": "utils"
},
"locked": {
"lastModified": 1736510643,
@ -166,11 +147,11 @@
]
},
"locked": {
"lastModified": 1738664950,
"narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=",
"lastModified": 1742215578,
"narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3",
"rev": "2fd36421c21aa87e2fe3bee11067540ae612f719",
"type": "github"
},
"original": {
@ -218,17 +199,17 @@
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs_4",
"nixpkgs": "nixpkgs_3",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_3",
"systems": "systems_2",
"xdph": "xdph"
},
"locked": {
"lastModified": 1741218628,
"narHash": "sha256-Z+jPT8nijCV1EzCZ5XkLr8x82WPCX/GKk8OKg8Kr+s4=",
"lastModified": 1742563987,
"narHash": "sha256-P7rQo7SClIFU6OkUlnN01OqVWsjTMgmG/8gqhpXHfRI=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "243376078655f304b01e5097c59108745bbb9da9",
"rev": "c7f0519fafbf334a8f5088a8a0fc385732a24036",
"type": "github"
},
"original": {
@ -346,11 +327,11 @@
]
},
"locked": {
"lastModified": 1739048914,
"narHash": "sha256-vd5rJBTmp2w7SDgfv23Zcd84ktI5eDA7e5UBzx+pKrU=",
"lastModified": 1741191527,
"narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "a7334904d591f38757c46fbe2ab68651877d9099",
"rev": "72df3861f1197e41b078faa3e38eedd60e00018d",
"type": "github"
},
"original": {
@ -371,11 +352,11 @@
]
},
"locked": {
"lastModified": 1739891528,
"narHash": "sha256-h8HOCZ/rw2Buzku+GKF77VXxrGjCSOQkLhptiEKMYg0=",
"lastModified": 1741534688,
"narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "61a5382f4b1ab578064d470b1b3d3f0df396b8ba",
"rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3",
"type": "github"
},
"original": {
@ -396,11 +377,11 @@
]
},
"locked": {
"lastModified": 1739049028,
"narHash": "sha256-RleJp7LYbr6s+M1xgbmhtBs+fYa3ZdIiF7+QalJ4D1g=",
"lastModified": 1739870480,
"narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "04146df74a8d5ec0b579657307be01f1e241125f",
"rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b",
"type": "github"
},
"original": {
@ -411,7 +392,7 @@
},
"naersk": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1721727458,
@ -429,18 +410,6 @@
}
},
"nixpkgs": {
"locked": {
"lastModified": 0,
"narHash": "sha256-zON2GNBkzsIyALlOCFiEBcIjI4w38GYOb+P+R4S8Jsw=",
"path": "/nix/store/s1fbk6a410xn8vcaj54iqv22agyn0ria-source",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 0,
"narHash": "sha256-AlcmCXJZPIlO5dmFzV3V2XF6x/OpNWUV8Y/FMPGd8Z4=",
@ -452,7 +421,7 @@
"type": "indirect"
}
},
"nixpkgs_3": {
"nixpkgs_2": {
"locked": {
"lastModified": 1729850857,
"narHash": "sha256-WvLXzNNnnw+qpFOmgaM3JUlNEH+T4s22b5i2oyyCpXE=",
@ -468,13 +437,13 @@
"type": "github"
}
},
"nixpkgs_4": {
"nixpkgs_3": {
"locked": {
"lastModified": 1739020877,
"narHash": "sha256-mIvECo/NNdJJ/bXjNqIh8yeoSjVLAuDuTUzAo7dzs8Y=",
"lastModified": 1742069588,
"narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a79cfe0ebd24952b580b1cf08cd906354996d547",
"rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5",
"type": "github"
},
"original": {
@ -484,13 +453,13 @@
"type": "github"
}
},
"nixpkgs_5": {
"nixpkgs_4": {
"locked": {
"lastModified": 1741010256,
"narHash": "sha256-WZNlK/KX7Sni0RyqLSqLPbK8k08Kq7H7RijPJbq9KHM=",
"lastModified": 1742422364,
"narHash": "sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ba487dbc9d04e0634c64e3b1f0d25839a0a68246",
"rev": "a84ebe20c6bc2ecbcfb000a50776219f48d134cc",
"type": "github"
},
"original": {
@ -510,11 +479,11 @@
]
},
"locked": {
"lastModified": 1737465171,
"narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=",
"lastModified": 1742058297,
"narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
"rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a",
"type": "github"
},
"original": {
@ -526,11 +495,10 @@
"root": {
"inputs": {
"clipboard-sync": "clipboard-sync",
"gakuen-cosplay": "gakuen-cosplay",
"home-manager": "home-manager",
"hydractify-bot": "hydractify-bot",
"hyprland": "hyprland",
"nixpkgs": "nixpkgs_5",
"nixpkgs": "nixpkgs_4",
"spicetify-nix": "spicetify-nix"
}
},
@ -539,14 +507,14 @@
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_4"
"systems": "systems_3"
},
"locked": {
"lastModified": 1740889006,
"narHash": "sha256-A1iyKVvZrLdLwqWPC9OvPjC85ADQn2R1EGfCzJBl+wI=",
"lastModified": 1742512598,
"narHash": "sha256-nFPhSSxrPrpkmFR6vQq8OpUS+lGIAxDCUKg+5/qcnR8=",
"owner": "Gerg-L",
"repo": "spicetify-nix",
"rev": "f8d3757d4ae3af2175a631fb9598a42d30ee75fc",
"rev": "610654a0afe56766e639077d9d267148667a25e8",
"type": "github"
},
"original": {
@ -571,21 +539,6 @@
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
@ -600,7 +553,7 @@
"type": "github"
}
},
"systems_4": {
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -619,24 +572,6 @@
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
@ -679,11 +614,11 @@
]
},
"locked": {
"lastModified": 1737634991,
"narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=",
"lastModified": 1741934139,
"narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a",
"rev": "150b0b6f52bb422a1b232a53698606fe0320dde0",
"type": "github"
},
"original": {

View file

@ -8,7 +8,6 @@
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
spicetify-nix = {
url = "github:Gerg-L/spicetify-nix";
inputs.nixpkgs.follows = "nixpkgs";
@ -22,8 +21,6 @@
hyprland.url = "github:hyprwm/Hyprland";
hydractify-bot.url = "github:hydractify/hydractify-bot";
gakuen-cosplay.url = "git+file:///mnt/internal/shared/work/gakuen/projects/cosplayer_submission";
};
outputs =
@ -42,13 +39,13 @@
let
specialArgs = inputs;
modules = [
./specific/desktop/nixos.nix
./hosts/wizdesk/nixos.nix
home-manager.nixosModules.home-manager
{
home-manager.extraSpecialArgs = inputs;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.wizardlink = import ./specific/desktop/home-manager.nix;
home-manager.users.wizardlink = import ./hosts/wizdesk/home-manager.nix;
}
];
in
@ -58,13 +55,13 @@
let
specialArgs = inputs;
modules = [
./specific/laptop/nixos.nix
./hosts/wizlap/nixos.nix
home-manager.nixosModules.home-manager
{
home-manager.extraSpecialArgs = inputs;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.wizardlink = import ./specific/laptop/home-manager.nix;
home-manager.users.wizardlink = import ./hosts/wizlap/home-manager.nix;
}
];
in
@ -73,10 +70,26 @@
formatter."${system}" = pkgs.nixfmt-rfc-style;
packages."${system}" = {
miraclecast = pkgs.callPackage ./packages/miraclecast.nix { };
wb32dfu-udev-rules = pkgs.callPackage ./packages/wb32dfu-udev-rules { };
};
nixosModules = {
hyprland = import ./modules/hyprland/nixos.nix;
};
homeManagerModules = {
emacsConfig = import ./modules/home-manager/programs/emacs;
hyprlandConfig = import ./modules/home-manager/programs/hyprland;
neovim = import ./modules/home-manager/programs/neovim;
emacs = import ./modules/emacs;
hyprland = import ./modules/hyprland/home-manager.nix;
neovim = import ./modules/neovim;
};
templates.default = {
path = ./modules/template;
description = ''
A NixOS & Home-Manager template to get started with the https://github.com/wizardlink/linuxware configuration.
'';
};
};
}

15
hosts/README.md Normal file
View file

@ -0,0 +1,15 @@
## wizdesk
My main machine, this is where I host everything that's accessible through the `thewizard.link` domain.
### Specs
![image](/assets/screenshots/fastfetch-wizdesk.png)
## wizlap
My ASUS Vivobook 15 (M1502IA), I mostly use it when I have to travel so there isn't much to say about it.
### Specs
They can be found in ASUS' store/support page, I haven't modified it yet.

View file

@ -7,11 +7,11 @@
# Import configurations for better modularity.
imports = [
../../modules/home-manager
./services/openttd.nix
./services/terraria.nix
./services/hydractify-bot.nix
./services/gakuen-cosplay-api.nix
../../modules/emacs
../../modules/hyprland/home-manager.nix
../../modules/neovim
../../shared/home-manager
./services/home-manager
];
# Home Manager needs a bit of information about you and the paths it should
@ -28,11 +28,6 @@
# release notes.
home.stateVersion = "23.05"; # Please read the comment before changing.
home.sessionVariables = {
EDITOR = "nvim";
MANPAGER = "nvim +Man!";
};
home.file = {
# Create wallpaper script to be read by the start_services.sh script.
".local/share/scripts/wallpaper.sh" = {
@ -137,6 +132,13 @@
screenshot.enable = true;
};
# Enable hypridle and hyprlock
hypridle.enable = true;
hyprlock = {
enable = true;
background = "/mnt/internal/personal/wallpapers/wallhaven-2em8y6.jpg";
};
# Add monitor configuration to hyprland
extraConfig = # hyprlang
''

View file

@ -1,11 +1,11 @@
{ pkgs, ... }:
{ pkgs, config, ... }:
{
imports = [
../../modules/nixos
../../modules/hyprland/nixos.nix
../../shared/nixos
./hardware-configuration.nix
./hardware.nix
./services.nix
./services/nixos
];
#
@ -134,11 +134,36 @@
};
#
# NETWORK #
# HARDWARE #
#
# Enable WOL on my ethernet interface.
networking.interfaces.enp5s0.wakeOnLan.enable = true;
# Enable Zenergy
boot.initrd.kernelModules = [
"zenergy"
];
boot.extraModulePackages = [
config.boot.kernelPackages.zenergy
];
# Enable openrazer for managing Razer products' configuration
hardware.openrazer = {
enable = true;
users = [ "wizardlink" ];
};
services.udev = {
# Vial udev rule for Monsgeek M1
extraRules = ''
# Monsgeek M1
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="fffe", ATTRS{idProduct}=="0005", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
'';
# WB32 DFU rules - needed for flashing
packages = [ (pkgs.callPackage ../../packages/wb32dfu-udev-rules { }) ];
};
# enable a better driver for wireless xbox controllers.
hardware.xpadneo.enable = true;
#
# PACKAGES #

View file

@ -0,0 +1,9 @@
{ ... }:
{
imports = [
./hydractify-bot.nix
./openttd.nix
./terraria.nix
];
}

View file

@ -43,15 +43,8 @@
reverse_proxy 127.0.0.1:8111
'';
virtualHosts."api.cosplay.thewizard.link".extraConfig = ''
reverse_proxy 127.0.0.1:3000
'';
virtualHosts."cosplay.thewizard.link".extraConfig = ''
root * /srv/cosplay
encode
try_files {path} /index.html
file_server
virtualHosts."nixbin.thewizard.link".extraConfig = ''
reverse_proxy 127.0.0.1:7373
'';
};
}

View file

@ -0,0 +1,12 @@
{ ... }:
{
imports = [
./archi.nix
./caddy.nix
./forgejo.nix
./jellyfin.nix
./nix-serve.nix
./postgresql.nix
];
}

View file

@ -4,6 +4,6 @@
services.nix-serve = {
enable = true;
port = 7373;
secretKeyFile = "/etc/keys/nix-store-wizdesk-1";
secretKeyFile = "/etc/keys/nixbin.thewizard.link-1";
};
}

View file

@ -7,7 +7,10 @@
# Import configurations for better modularity.
imports = [
../../modules/home-manager
../../modules/emacs
../../modules/hyprland/home-manager.nix
../../modules/neovim
../../shared/home-manager
];
# Home Manager needs a bit of information about you and the paths it should
@ -24,11 +27,6 @@
# release notes.
home.stateVersion = "23.05"; # Please read the comment before changing.
home.sessionVariables = {
EDITOR = "nvim";
MANPAGER = "nvim +Man!";
};
home.file = {
# Create wallpaper script to be read by the start_services.sh script.
".local/share/scripts/wallpaper.sh" = {

View file

@ -1,10 +1,10 @@
{ ... }:
{ config, ... }:
{
imports = [
../../modules/nixos
../../modules/hyprland/nixos.nix
../../shared/nixos
./hardware-configuration.nix
./hardware.nix
];
#
@ -19,6 +19,9 @@
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05";
# Consume my desktop's binary cache. This is specially useful since (in theory)
# I will always update the flake and desktop machine first, so when I pull the changes,
# my desktop will have all the binaries my laptop needs.
nix.settings.substituters = [ "http://192.168.0.100:7373" ];
nix.settings.trusted-public-keys = [
"wizdesk-1:2UvctPjiMwMs7r2r7VPvoPmh4OcUjY3JmaRDJnOTZY8="
@ -97,4 +100,19 @@
LC_TIME = "en_GB.UTF-8";
};
};
#
# HARDWARE #
#
# Enable Zenergy
boot.initrd.kernelModules = [
"zenergy"
];
boot.extraModulePackages = [
config.boot.kernelPackages.zenergy
];
# enable a better driver for wireless xbox controllers.
hardware.xpadneo.enable = true;
}

10
modules/README.md Normal file
View file

@ -0,0 +1,10 @@
This directory encompasses all modules/resources that are exported by this repository's flake.
## Currently maintained modules
- [hyprland](./hyprland)
- [neovim](./neovim)
- [emacs](./emacs)
- [template](./template)
> _Be sure to click the hyperlinks for the relevant documentation._

6
modules/emacs/README.md Normal file
View file

@ -0,0 +1,6 @@
This module has no options, it simply just adds the necessary packages to run
[DOOM Emacs](https://github.com/doomemacs/doomemacs) and writes contents inside [./doom](./doom) into `$XDG_CONFIG_HOME/doom`.
## Screenshots
![image](/assets/screenshots/doomemacs.png)

View file

@ -1,92 +0,0 @@
{ pkgs, clipboard-sync, ... }:
{
imports = [
./programs
];
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
## Tools
# Utilities
fastfetch
firefox
pavucontrol
protonvpn-gui
qbittorrent
qdirstat
speedcrunch
vlc
yt-dlp
zathura
# Personal utilities
anki
ledger
(vesktop.override {
# FIXME: Need to pin until https://github.com/NixOS/nixpkgs/issues/380429 gets resolved.
electron = electron_33;
})
# Editing
libreoffice
# Creative work
aseprite
blender
krita
lmms
orca-slicer
shotcut
vcv-rack
vhs
## Entertainment
jellyfin-media-player
# Gaming
gamescope
heroic
protontricks
wineWowPackages.unstableFull
winetricks
# Games
openttd
prismlauncher
shattered-pixel-dungeon
xonotic
## Libraries
libsForQt5.kdegraphics-thumbnailers
libsForQt5.kio-extras
rnnoise-plugin
## Development
beekeeper-studio
godot_4
hoppscotch
lazygit
## Desktop environment
clipboard-sync.packages.${pkgs.stdenv.hostPlatform.system}.default
cliphist
grim
libsForQt5.ark
loupe
mako
slurp
swww
# Mail client
thunderbird
];
}

View file

@ -1,73 +0,0 @@
# My [Home Manager] module for neovim configuration
This is my personal configuration for _[neovim]_ using [Nix](https://nixos.org/), so this will not work outside of it - though it can be made to be.
In this case, I am outputting a [Home Manager] module to be used directly in your configuration, it currently barely has
any
options and is opinionated due to it being my personal configuration for daily use... But I plan to slowly add options
to make it usable by other people.
## Installing
First you add this repository as a flake input:
```nix
{
inputs = {
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
wizardlink.url = "git+https://git.thewizard.link/wizardlink/linuxware";
};
outputs = { home-manager, ... }@inputs: {
homeConfigurations.YOURHOSTNAME = home-manager.lib.homeManagerConfiguration {
# ...
extraSPecialArgs = inputs;
};
};
}
```
Then in your [Home Manager] configuration you can just import it:
```nix
{ wizardlink }:
{
imports = [
wizardlink.homeManagerModules.neovim
];
}
```
## Configuring
### [nixd](https://github.com/nix-community/nixd/)
```nix
programs.neovim.flake = {
hostname = "nixos"; # Your hostname used to build your system.
location = "git+file:///home/wizardlink/.system"; # Where you store your flake.
};
```
## My neovim failed because of package X not existing
My configuration is based off of `nixos-unstable` so sometimes your package may not exist or have a different name, I
apologise for that but I don't plan on maintaining backwards compatibility. :(
## How it looks
Here's some screenshots of how it currently looks like:
![image](./docs/example_1.png)
![image](./docs/example_2.png)
![image](./docs/example_3.png)
The theme I'm using is [catppuccin](https://github.com/catppuccin) in case you're curious.
[neovim]: https://neovim.io/
[Home Manager]: https://github.com/nix-community/home-manager

View file

@ -0,0 +1,60 @@
The [NixOS] module installs [Hyprland] onto the system.
Whilst the [Home Manager] module generates the dotfiles for [Hyprland] and optionally [hyprlock] and [hypridle].
It can be configured through `modules.hyprland`.
## Module options
### extraConfig
`modules.hyprland.extraConfig` when set will be appended to the top of the configuration I generate, you can see where
that is [here](./home-manager.nix#L189).
There are no monitors configured by default, so you should use this option to do so.
### hypridle.enable
Whether to configure and enable the [hypridle] package. Be mindful that it may not auto-start, I have yet to find why but
even though it configures to start after `graphical-session.target`, that isn't reached in Hyprland sometimes.
### hyprlock.enable
Whether to configure and enable the [hyprlock] package, by itself it does nothing but when [hypridle] is also enabled it
will automatically call [hyprlock] after a 120 second timeout.
### hyprlock.background
A path to an image that will be used as background when [hyprlock] is invoked.
### scripts.screenshot.enable
When enabled it will create two script files in `$XDG_DATA_HOME/scripts/hyprland` and two keybinds for you to run these
scripts, allowing you to take screenshots of a region and the entire screen of your first monitor.
### scripts.startup.enable
Not my proudest option, this will add two packages containing a startup script for apps that I use in the daily &
services. If this module ever gets actually used by someone, then I'll refine it.
## Visuals
### Active window
![image](/assets/screenshots/hyprland-active.png)
### Inactive window
![image](/assets/screenshots/hyprland-inactive.png)
### Gaps
![image](/assets/screenshots/hyprland-gaps.png)
<!-- REFERENCES -->
[hyprland]: https://hyprland.org/
[hyprlock]: https://github.com/hyprwm/hyprlock
[hypridle]: https://github.com/hyprwm/hypridle
[home manager]: https://github.com/nix-community/home-manager
[nixos]: https://nixos.org

View file

@ -21,6 +21,18 @@ in
description = "Configuration to be appended to my own.";
};
hypridle.enable = lib.mkEnableOption "hypridle";
hyprlock = {
enable = lib.mkEnableOption "hyprlock";
background = lib.mkOption {
type = lib.types.path;
default = "";
example = "~/wallpapers/abc.png";
description = "The image to be used as background for hyprlock.";
};
};
scripts = {
screenshot.enable = lib.mkEnableOption "screenshot";
startup.enable = lib.mkEnableOption "startup";
@ -28,13 +40,18 @@ in
};
config = {
home.sessionVariables = {
NIXOS_OZONE_WL = "1";
QT_QPA_PLATFORM = "wayland";
};
xdg.configFile."hypr/frappe.conf".source = builtins.fetchurl {
url = "https://raw.githubusercontent.com/catppuccin/hyprland/main/themes/frappe.conf";
sha256 = "1clw669i1n3dhawdw4clmjv75fy3smycb5iqk3sanzpr3y0i4vwx";
};
# Enable hypridle and hyprlock
services.hypridle = {
services.hypridle = lib.mkIf cfg.hypridle.enable {
enable = true;
settings = {
general = {
@ -43,21 +60,24 @@ in
lock_cmd = "hyprlock";
};
listener = [
{
timeout = 120;
on-timeout = "hyprlock";
}
{
timeout = 180;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
listener =
[
{
timeout = 180;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
]
++ lib.optionals cfg.hyprlock.enable [
{
timeout = 120;
on-timeout = "hyprlock";
}
];
};
};
programs.hyprlock = {
programs.hyprlock = lib.mkIf cfg.hyprlock.enable {
enable = true;
extraConfig = # hyprlang
''
@ -76,7 +96,7 @@ in
# BACKGROUND
background {
monitor =
path = $HOME/internal/personal/wallpapers/wallhaven-2em8y6.jpg
path = ${cfg.hyprlock.background}
blur_passes = 0
color = $base
}
@ -283,7 +303,7 @@ in
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
@ -361,37 +381,38 @@ in
bind = SHIFT CTRL, F12, pass, ^(com.obsproject.Studio)$
# Window rules for xwaylandvideobridge
windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$
windowrulev2 = noanim,class:^(xwaylandvideobridge)$
windowrulev2 = nofocus,class:^(xwaylandvideobridge)$
windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$
windowrule = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$
windowrule = noanim,class:^(xwaylandvideobridge)$
windowrule = nofocus,class:^(xwaylandvideobridge)$
windowrule = noinitialfocus,class:^(xwaylandvideobridge)$
# Rules for windowkill
windowrule = noborder, ^(steam_app_2726450)$
windowrule = pin, ^(steam_app_2726450)$
windowrule = opacity 0.9, ^(steam_app_2726450)$
windowrule = tag +windowkill, class:^(steam_app_2726450)$
windowrule = noborder, tag:windowkill
windowrule = pin, tag:windowkill
windowrule = opacity 0.9, tag:windowkill
# Rules for Awakened PoE
windowrulev2 = tag +poe, class:^(steam_app_238960)$
windowrulev2 = allowsinput, tag:poe
windowrule = tag +poe, class:^(steam_app_238960)$
windowrule = allowsinput, tag:poe
windowrulev2 = tag +apt, class:^(awakened-poe-trade)$
windowrulev2 = float, tag:apt
windowrulev2 = noblur, tag:apt
windowrulev2 = noborder, tag:apt
windowrulev2 = noshadow, tag:apt
windowrule = tag +apt, class:^(awakened-poe-trade)$
windowrule = float, tag:apt
windowrule = noblur, tag:apt
windowrule = noborder, tag:apt
windowrule = noshadow, tag:apt
# Rules for anki
windowrulev2 = float, class:^(anki)$
windowrule = float, class:^(anki)$
windowrulev2 = tag +gw2, class:^(steam_app_1284210)$
windowrulev2 = noblur, tag:gw2
windowrulev2 = noborder, tag:gw2
windowrule = tag +gw2, class:^(steam_app_1284210)$
windowrule = noblur, tag:gw2
windowrule = noborder, tag:gw2
# Rules for godot
windowrulev2 = tag +godot, class:^(Godot)$, title:^(.+)$
windowrulev2 = center, tag:godot
windowrulev2 = size 50% 50%, tag:godot
windowrule = tag +godot, class:^(Godot)$, title:^(.+)$
windowrule = center, tag:godot
windowrule = size 50% 50%, tag:godot
'';
};
}

View file

@ -0,0 +1,26 @@
{ pkgs, hyprland, ... }:
let
hyprland-pkgs = hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in
{
# Enable Hyprland's cachix
nix.settings.substituters = [ "https://hyprland.cachix.org" ];
nix.settings.trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
# Enable Hyprland
programs.hyprland = {
enable = true;
package = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
# Overwrite the Mesa packages with Hyprland's for consitency
hardware.graphics = {
package = hyprland-pkgs.mesa;
package32 = hyprland-pkgs.pkgsi686Linux.mesa;
};
}

44
modules/neovim/README.md Normal file
View file

@ -0,0 +1,44 @@
This module generates dotfiles for [neovim].
The module extends `programs.neovim`.
## Module options
### programs.neovim.nixd.hostname
By default [nixd] is enabled, you **need** to pass the current machine's
hostname that is used to generate your system.
### programs.neovim.nixd.location
The location of your system's flake, [nixd] will execute an expression defined in the LSP's configuration that reads
the flake's contents to evaluate [NixOS] and [Home Manager] options.
### programs.neovim.ollama.enable
Whether to add an [ollama] package to be used with [ollama.nvim](https://github.com/nomnivore/ollama.nvim).
### programs.neovim.ollama.type
The type of [ollama] package to be added, valid options are: `amd`, `nvidia` or `cpu`.
## My neovim failed because of package X not existing
My configuration is based off of `nixos-unstable` so sometimes your package may not exist or have a different name, I
apologise for that but I don't plan on maintaining backwards compatibility. :(
## How it looks
Here's some screenshots of how it currently looks like:
![image](/assets/screenshots/neovim-dashboard.png)
![image](/assets/screenshots/neovim-nix.png)
![image](/assets/screenshots/neovim-rust.png)
The theme I'm using is [catppuccin](https://github.com/catppuccin) in case you're curious.
[neovim]: https://neovim.io/
[Home Manager]: https://github.com/nix-community/home-manager
[nixos]: https://nixos.org
[nixd]: https://github.com/nix-community/nixd/
[ollama]: https://ollama.com/

View file

@ -56,81 +56,89 @@ in
};
config = {
home.sessionVariables = {
EDITOR = "nvim";
MANPAGER = "nvim +Man!";
};
programs.neovim = {
withNodeJs = true;
withPython3 = true;
extraLuaConfig = builtins.readFile ./init.lua;
extraPackages = with pkgs; [
# Needed by ollama.nvim
curl
ollamaPackage
extraPackages =
with pkgs;
[
# Needed by LuaSnip
luajitPackages.jsregexp
# Needed by LuaSnip
luajitPackages.jsregexp
# Treesitter
gcc # For compiling languages
# Treesitter
gcc # For compiling languages
# CMAKE
neocmakelsp
# CMAKE
neocmakelsp
# C/C++
clang-tools
vscode-extensions.ms-vscode.cpptools
# C/C++
clang-tools
vscode-extensions.ms-vscode.cpptools
# C#
#csharp-ls Testing roslyn.nvim
roslyn-ls
rzls
csharpier
netcoredbg
# C#
#csharp-ls Testing roslyn.nvim
roslyn-ls
rzls
csharpier
netcoredbg
# HTML/CSS/JSON
emmet-ls
vscode-langservers-extracted
# HTML/CSS/JSON
emmet-ls
vscode-langservers-extracted
# LUA
lua-language-server
stylua
# LUA
lua-language-server
stylua
# Markdown
markdownlint-cli
marksman
# Markdown
markdownlint-cli
marksman
# Nix
deadnix
nixd
nixfmt-rfc-style
statix
# Nix
deadnix
nixd
nixfmt-rfc-style
statix
# Python
basedpyright
python312Packages.flake8
ruff
# Python
basedpyright
python312Packages.flake8
ruff
# TypeScript/JavaScript
vtsls
deno
vscode-js-debug
# TypeScript/JavaScript
vtsls
deno
vscode-js-debug
# Rust
rust-analyzer
cargo # Needed by blink-cmp
taplo
vscode-extensions.vadimcn.vscode-lldb
# Rust
rust-analyzer
cargo # Needed by blink-cmp
taplo
vscode-extensions.vadimcn.vscode-lldb
# Vue
prettierd
vue-language-server
# Vue
prettierd
vue-language-server
# Svelte
nodePackages.svelte-language-server
# Svelte
nodePackages.svelte-language-server
# YAML
yaml-language-server
];
# YAML
yaml-language-server
]
++ pkgs.lib.optionals config.programs.neovim.ollama.enable [
# Needed by ollama.nvim
curl
ollamaPackage
];
};
xdg.configFile."nvim/lua" = {

View file

@ -28,11 +28,4 @@ require("lazy").setup({
},
},
},
dev = {
path = "/mnt/internal/repos",
patterns = {
"nvim-ufo",
"nix-store.nvim",
},
},
} --[[@as LazyConfig]])

View file

@ -1,6 +1,6 @@
---@type LazySpec
return {
"kevinhwang91/nvim-ufo",
"wizardlink/nvim-ufo",
opts = {
provider_selector = function(_, filetype, _)
---@type table<string, UfoProviderEnum | UfoProviderEnum[]>

View file

@ -29,7 +29,6 @@ return {
"objc",
"proto",
"python",
"razor",
"svelte",
"tsx",
"typescript",

View file

@ -1,111 +0,0 @@
{ pkgs, ... }:
{
# Enable GPG.
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable fish system-wide to integrate with nixpkgs.
programs.fish.enable = true;
# Enable Steam.
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
# ^ Enables so we can transfer games to other computers in the network.
# Add Proton-GE to 'compatibilitytools.d'.
extraCompatPackages = with pkgs; [ proton-ge-bin ];
};
# Enable and configure gamemode.
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
gpu = {
apply_gpu_optimisations = "accept-responsibility";
gpu_device = 1;
amd_performance_level = "auto";
};
};
};
# Enable KDEConnect
programs.kdeconnect = {
enable = true;
package = pkgs.kdePackages.kdeconnect-kde;
};
# Enable Docker.
virtualisation.docker.enable = true;
# Enable virt-manager
programs.virt-manager.enable = true;
# Enable virtd and spice USB redirection
virtualisation.spiceUSBRedirection.enable = true;
virtualisation.libvirtd.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
## Tools
# Utilities
bat
duf
fuseiso
lm_sensors
p7zip
tree
unrar
unzip
wget
zip
# File managing
sshfs
yazi
# Virtualization
docker-compose
quickemu
# Desktop
wl-clipboard
xclip
zoxide
(catppuccin-sddm.override # So SDDM finds the theme files.
{
flavor = "frappe";
font = "IBM Plex Sans";
fontSize = "11";
background = "${./theming/sddm/Background.jpg}";
loginBackground = true;
}
)
# Networking
gping
nmap
# Processes
(btop.override {
# AMD GPU support
rocmSupport = true;
})
killall
# Filter
fzf
ripgrep
## Libraries
libsForQt5.qt5.qtgraphicaleffects
libsForQt5.qt5.qtquickcontrols2
];
}

View file

@ -1,41 +0,0 @@
{
pkgs,
lib,
config,
...
}:
{
# Enable polkit,
security.polkit.enable = true;
# install an agent to interface with it,
environment.systemPackages = with pkgs; [ polkit_gnome ];
# And enable GNOME keyring for registering keys.
services.gnome.gnome-keyring.enable = true;
# Enable flatpak to all users.
services.flatpak.enable = true;
services.postgresql = {
identMap = lib.mkIf config.services.postgresql.enable ''
# MAP_NAME SYSTEM_USER DB_USER
superuser_map root postgres
superuser_map postgres postgres
superuser_map /^(.*)$ \1
'';
authentication = lib.mkIf config.services.postgresql.enable (
lib.mkOverride 10 ''
# TYPE DATABASE USER ADDRESS METHOD MAP
local all all peer map=superuser_map
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
local replication all peer map=superuser_map
host replication all 127.0.0.1/32 ident map=superuser_map
host replication all ::1/128 ident map=superuser_map
''
);
};
}

View file

@ -1,15 +0,0 @@
{ ... }:
{
# Enable sound with pipewire.
services.pulseaudio.enable = false;
services.pipewire = {
enable = true;
audio.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
}

View file

@ -1,12 +0,0 @@
{ ... }:
{
# Set the default fonts for the system.
fonts.fontconfig = {
defaultFonts = {
serif = [ "IBM Plex Serif" ];
sansSerif = [ "IBM Plex Sans" ];
monospace = [ "IBM Plex Mono" ];
};
};
}

View file

@ -0,0 +1,18 @@
# READ THIS BEFORE PROCEEDING
Below is a checklist of changes you need to do before rebuilding your system.
## Generate your system configuration and replace the placeholders.
You can achieve this by running `sudo nixos-generate-config`, then overwrite `hardware-configuration.nix` and
`configuration.nix` with the contents of the files found in `/etc/nixos`.
## Replace placeholder text
In `flake.nix` you will find `your-hostname-here`, replace with your machine's current hostname.
In `home-manager.nix` you have to replace:
- `your-username-here` with your user's username;
- `your-home-directory-here` with the path of your home directory, usually the same as your username;
- `your-hostname-here` with your machine's current hostname;
- `your-flake-location-here` with where you are storing the flake.

View file

@ -0,0 +1 @@
{ ... }: { }

View file

@ -0,0 +1,48 @@
{
description = "NixOS System Flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# Ideally using nixos-unstable since my configuration
# is based off of this channel.
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
linuxware = {
url = "github:wizardlink/linuxware";
inputs.nixpkgs.follows = "nixpkgs"; # Pin to your local `nixpkgs` if you use the unstable channel.
};
};
outputs =
{
home-manager,
nixpkgs,
linuxware,
...
}@inputs:
let
system = "x86_64-linux";
in
{
your-hostname-here =
let
specialArgs = inputs;
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.extraSpecialArgs = inputs;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.wizardlink = import ./home-manager.nix;
}
linuxware.nixosModules.hyprland
];
in
nixpkgs.lib.nixosSystem { inherit system specialArgs modules; };
};
}

View file

@ -0,0 +1 @@
{ ... }: { }

View file

@ -0,0 +1,98 @@
{
config,
pkgs,
linuxware,
...
}:
{
imports = [
linuxware.homeManagerModules.emacs
linuxware.homeManagerModules.hyprland
linuxware.homeManagerModules.neovim
];
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "your-username-here";
home.homeDirectory = "/home/your-home-directory-here";
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "24.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = [
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/wizardlink/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = {
# EDITOR = "emacs";
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
programs.neovim = {
# Enable Neovim, pre-configured by `linuxware`.
enable = true;
# Configure nixd
nixd = {
hostname = "your-hostname-here";
location = "your-flake-location-here";
};
};
}

32
packages/README.md Normal file
View file

@ -0,0 +1,32 @@
## [zenergy](https://github.com/BoukeHaarsma23/zenergy/)
This is a kernel driver that adds the ability for user to fetch power draw data from AMD CPUs. I maintain it in
[nixpkgs], so you shouldn't use this package _unless_ it is broken in your current
version of [nixpkgs].
Unfortunately this cannot be outputted as a package in the flake since to create a derivation the `kernel` parameter
must be present, which, each user will have their own kernel package.
Thus you need to copy the `zenergy.nix` file somewhere in your configuration and inside `boot.extraModulePackages` pass
the package with the following expression: `config.boot.kernelPackages.callPackage ./path/to/zenergy.nix`; successfully
installing the package onto your system.
## wb32dfu-udev-rules
This package installs the udev rules necessary to allow flashing QMK/Vial onto keyboards that use WB32-DFU bootloaders.
It is meant to be used in tandem with [NixOS] using the
[`services.udev.packages`](https://search.nixos.org/options?query=services.udev.packages) configuration.
## [miraclecast](https://github.com/albfan/miraclecast/)
This is a suite of programs that allows you to connect external monitors through Wi-Fi, though unfortunately some of the
programs have no documentation and some an unhelpful help command too.
Currently the **package is available in [nixpkgs]** __however it currently fails to compile__, so you have to rely on my
configuration of this package or wait for [nixpkgs#387762](https://github.com/NixOS/nixpkgs/pull/387762) to be merged.
<!-- REFERENCES -->
[nixpkgs]: https://github.com/NixOS/nixpkgs/
[nixos]: https://nixos.org

91
packages/miraclecast.nix Normal file
View file

@ -0,0 +1,91 @@
{
lib,
fetchFromGitHub,
glib,
gst_all_1,
iproute2,
libtool,
makeBinaryWrapper,
meson,
miraclecast,
ninja,
pkg-config,
readline,
stdenv,
systemdLibs,
testers,
udev,
wpa_supplicant,
relyUdev ? true,
}:
let
gstreamerPluginPaths = lib.concatMapStrings (pth: pth + "/lib/gstreamer-1.0:") [
(lib.getLib gst_all_1.gstreamer)
gst_all_1.gst-libav
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
];
in
stdenv.mkDerivation {
pname = "miraclecast";
version = "1.0-unstable-2024-07-13";
src = fetchFromGitHub {
owner = "albfan";
repo = "miraclecast";
rev = "937747fd4de64a33bccf5adb73924c435ceb821b";
hash = "sha256-y37+AOz8xYjtDk9ITxMB7UeWeMpDH+b6HQBczv+x5zo=";
};
nativeBuildInputs = [
makeBinaryWrapper
meson
ninja
pkg-config
];
buildInputs = [
glib
gst_all_1.gstreamer
iproute2
libtool
readline
systemdLibs
udev
wpa_supplicant
];
mesonFlags =
[
"-Dbuild-tests=true"
"-Dip-binary=${iproute2}/bin/ip"
]
++ lib.optionals relyUdev [
"-Drely-udev=true"
];
postPatch = ''
substituteInPlace res/miracle-gst \
--replace-fail "/usr/bin/gst-launch-1.0" "${gst_all_1.gstreamer}/bin/gst-launch-1.0"
'';
postInstall = ''
wrapProgram $out/bin/miracle-gst --set GST_PLUGIN_SYSTEM_PATH_1_0 ${gstreamerPluginPaths}
'';
passthru.tests.version = testers.testVersion {
package = miraclecast;
command = "miracled --version";
version = "Miraclecast 1";
};
meta = with lib; {
description = "Connect external monitors to your system via Wifi-Display specification also known as Miracast";
homepage = "https://github.com/albfan/miraclecast";
license = licenses.lgpl21Plus;
maintainers = [ maintainers.wizardlink ];
platforms = platforms.linux;
};
}

55
shared/README.md Normal file
View file

@ -0,0 +1,55 @@
In this directory you will find the configuration for [NixOS] and [Home Manager] that I share across multiple machines.
## File structure
### ./nixos
- `default.nix`
- _Entry point._
- `common.nix`
- _General configuration and packages._
- `desktop.nix`
- _Desktop specific configuration._
- `gaming.nix`
- _Gaming related configuration._
- `hardware.nix`
- _Hardware specific configuration._
- `system.nix`
- _Configuration pertaining the system._
- `virtualization.nix`
- _Virtualization packages and configuration._
### ./home-manager
- `default.nix`
- _Entry point._
- `common.nix`
- _General and misc. packages alongside uncategorized dotfiles._
- `gaming.nix`
- _Packages and dotfiles pertaining games/gaming._
- `theming.nix`
- _Theming of the system and it's packages._
- `dotfiles/`
- _Program specific user configuration._
- `scripts/`
- _Contains scripts that I may use day to day._
#### Screenshots
Alacritty & Fish:
![image](/assets/screenshots/alacritty-and-fish.png)
Waybar:
![image](/assets/screenshots/waybar.png)
Rofi:
![image](/assets/screenshots/rofi.png)
<!-- REFERENCES -->
[nixos]: https://nixos.org
[home manager]: https://github.com/nix-community/home-manager

View file

@ -1,21 +1,18 @@
{ pkgs, ... }:
{ pkgs, clipboard-sync, ... }:
{
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
home.sessionVariables = {
NIXOS_OZONE_WL = "1";
QT_QPA_PLATFORM = "wayland";
};
home.file = {
# Configuration for gamemode, for running games with optimizations.
".config/gamemode.ini".source = ./programs/gamemode.ini;
# My utility scripts
".local/share/scripts" = {
source = ./scripts;
recursive = true;
};
# Configuration for mako, a notification daemon.
".config/mako".source = ./programs/mako;
".config/mako".source = ./dotfiles/mako;
# Configure pipewire for microphone noise supression.
".config/pipewire/pipewire.conf.d/99-input-denoising.conf".text = ''
@ -53,17 +50,6 @@
}
]
'';
# Configure DXVK
".config/dxvk.conf".text = ''
dxvk.enableGraphicsPipelineLibrary = Auto
'';
# My utility scripts
".local/share/scripts" = {
source = ./scripts;
recursive = true;
};
};
# Configure XDG
@ -77,4 +63,71 @@
"x-scheme-handler/https" = [ "firefox.desktop" ];
"x-scheme-handler/unknown" = [ "firefox.desktop" ];
};
home.packages = with pkgs; [
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
## Tools
# Utilities
fastfetch
firefox
pavucontrol
protonvpn-gui
qbittorrent
qdirstat
speedcrunch
vlc
yt-dlp
zathura
# Personal utilities
anki
ledger
vesktop
# Editing
libreoffice
# Creative work
aseprite
blender
krita
lmms
orca-slicer
shotcut
vcv-rack
vhs
## Entertainment
jellyfin-media-player
## Libraries
libsForQt5.kdegraphics-thumbnailers
libsForQt5.kio-extras
rnnoise-plugin
## Development
beekeeper-studio
godot_4
hoppscotch
lazygit
## Desktop environment
clipboard-sync.packages.${pkgs.stdenv.hostPlatform.system}.default
cliphist
grim
libsForQt5.ark
loupe
mako
slurp
swww
# Mail client
thunderbird
];
}

View file

@ -3,7 +3,8 @@
{
imports = [
./common.nix
./packages.nix
./dotfiles
./gaming.nix
./theming.nix
];
}

View file

@ -4,12 +4,9 @@
imports = [
./alacritty.nix
./direnv
./emacs
./fish
./git.nix
./hyprland
./mangohud.nix
./neovim
./obs-studio.nix
./rofi
./spotify

View file

@ -1,6 +1,11 @@
{ pkgs, ... }:
{ ... }:
{
home.file = {
# Cattpuccin theme for fish shell.
".config/fish/themes/Catppuccin-Frappe.theme".source = ./Catppuccin-Frappe.theme;
};
programs.fish = {
enable = true;

Some files were not shown because too many files have changed in this diff Show more