Compare commits

..

No commits in common. "main" and "pre-restructure" have entirely different histories.

131 changed files with 761 additions and 1312 deletions

121
LICENSE
View file

@ -1,121 +0,0 @@
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.

View file

@ -1,67 +0,0 @@
# 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/

View file

@ -1,42 +0,0 @@
## 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.

Before

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

View file

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

View file

@ -8,6 +8,7 @@
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
spicetify-nix = {
url = "github:Gerg-L/spicetify-nix";
inputs.nixpkgs.follows = "nixpkgs";
@ -21,6 +22,8 @@
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 =
@ -39,13 +42,13 @@
let
specialArgs = inputs;
modules = [
./hosts/wizdesk/nixos.nix
./specific/desktop/nixos.nix
home-manager.nixosModules.home-manager
{
home-manager.extraSpecialArgs = inputs;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.wizardlink = import ./hosts/wizdesk/home-manager.nix;
home-manager.users.wizardlink = import ./specific/desktop/home-manager.nix;
}
];
in
@ -55,13 +58,13 @@
let
specialArgs = inputs;
modules = [
./hosts/wizlap/nixos.nix
./specific/laptop/nixos.nix
home-manager.nixosModules.home-manager
{
home-manager.extraSpecialArgs = inputs;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.wizardlink = import ./hosts/wizlap/home-manager.nix;
home-manager.users.wizardlink = import ./specific/laptop/home-manager.nix;
}
];
in
@ -70,26 +73,10 @@
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 = {
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.
'';
emacsConfig = import ./modules/home-manager/programs/emacs;
hyprlandConfig = import ./modules/home-manager/programs/hyprland;
neovim = import ./modules/home-manager/programs/neovim;
};
};
}

View file

@ -1,15 +0,0 @@
## 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

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

View file

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

View file

@ -1,10 +0,0 @@
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._

View file

@ -1,6 +0,0 @@
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,18 +1,21 @@
{ pkgs, clipboard-sync, ... }:
{ pkgs, ... }:
{
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
home.sessionVariables = {
NIXOS_OZONE_WL = "1";
QT_QPA_PLATFORM = "wayland";
};
home.file = {
# My utility scripts
".local/share/scripts" = {
source = ./scripts;
recursive = true;
};
# Configuration for gamemode, for running games with optimizations.
".config/gamemode.ini".source = ./programs/gamemode.ini;
# Configuration for mako, a notification daemon.
".config/mako".source = ./dotfiles/mako;
".config/mako".source = ./programs/mako;
# Configure pipewire for microphone noise supression.
".config/pipewire/pipewire.conf.d/99-input-denoising.conf".text = ''
@ -50,6 +53,17 @@
}
]
'';
# Configure DXVK
".config/dxvk.conf".text = ''
dxvk.enableGraphicsPipelineLibrary = Auto
'';
# My utility scripts
".local/share/scripts" = {
source = ./scripts;
recursive = true;
};
};
# Configure XDG
@ -63,71 +77,4 @@
"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,8 +3,7 @@
{
imports = [
./common.nix
./dotfiles
./gaming.nix
./packages.nix
./theming.nix
];
}

View file

@ -0,0 +1,92 @@
{ 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

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

View file

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

View file

@ -21,18 +21,6 @@ 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";
@ -40,18 +28,13 @@ 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 = lib.mkIf cfg.hypridle.enable {
services.hypridle = {
enable = true;
settings = {
general = {
@ -60,24 +43,21 @@ in
lock_cmd = "hyprlock";
};
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";
}
];
listener = [
{
timeout = 120;
on-timeout = "hyprlock";
}
{
timeout = 180;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
programs.hyprlock = lib.mkIf cfg.hyprlock.enable {
programs.hyprlock = {
enable = true;
extraConfig = # hyprlang
''
@ -96,7 +76,7 @@ in
# BACKGROUND
background {
monitor =
path = ${cfg.hyprlock.background}
path = $HOME/internal/personal/wallpapers/wallhaven-2em8y6.jpg
blur_passes = 0
color = $base
}
@ -303,7 +283,7 @@ in
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
@ -381,38 +361,37 @@ in
bind = SHIFT CTRL, F12, pass, ^(com.obsproject.Studio)$
# Window rules for xwaylandvideobridge
windowrule = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$
windowrule = noanim,class:^(xwaylandvideobridge)$
windowrule = nofocus,class:^(xwaylandvideobridge)$
windowrule = noinitialfocus,class:^(xwaylandvideobridge)$
windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$
windowrulev2 = noanim,class:^(xwaylandvideobridge)$
windowrulev2 = nofocus,class:^(xwaylandvideobridge)$
windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$
# Rules for windowkill
windowrule = tag +windowkill, class:^(steam_app_2726450)$
windowrule = noborder, tag:windowkill
windowrule = pin, tag:windowkill
windowrule = opacity 0.9, tag:windowkill
windowrule = noborder, ^(steam_app_2726450)$
windowrule = pin, ^(steam_app_2726450)$
windowrule = opacity 0.9, ^(steam_app_2726450)$
# Rules for Awakened PoE
windowrule = tag +poe, class:^(steam_app_238960)$
windowrule = allowsinput, tag:poe
windowrulev2 = tag +poe, class:^(steam_app_238960)$
windowrulev2 = allowsinput, tag:poe
windowrule = tag +apt, class:^(awakened-poe-trade)$
windowrule = float, tag:apt
windowrule = noblur, tag:apt
windowrule = noborder, tag:apt
windowrule = noshadow, tag:apt
windowrulev2 = tag +apt, class:^(awakened-poe-trade)$
windowrulev2 = float, tag:apt
windowrulev2 = noblur, tag:apt
windowrulev2 = noborder, tag:apt
windowrulev2 = noshadow, tag:apt
# Rules for anki
windowrule = float, class:^(anki)$
windowrulev2 = float, class:^(anki)$
windowrule = tag +gw2, class:^(steam_app_1284210)$
windowrule = noblur, tag:gw2
windowrule = noborder, tag:gw2
windowrulev2 = tag +gw2, class:^(steam_app_1284210)$
windowrulev2 = noblur, tag:gw2
windowrulev2 = noborder, tag:gw2
# Rules for godot
windowrule = tag +godot, class:^(Godot)$, title:^(.+)$
windowrule = center, tag:godot
windowrule = size 50% 50%, tag:godot
windowrulev2 = tag +godot, class:^(Godot)$, title:^(.+)$
windowrulev2 = center, tag:godot
windowrulev2 = size 50% 50%, tag:godot
'';
};
}

View file

@ -0,0 +1,73 @@
# 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

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

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

View file

@ -28,4 +28,11 @@ 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 {
"wizardlink/nvim-ufo",
"kevinhwang91/nvim-ufo",
opts = {
provider_selector = function(_, filetype, _)
---@type table<string, UfoProviderEnum | UfoProviderEnum[]>

View file

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

View file

@ -12,6 +12,9 @@
];
home.file = {
# Cattpuccin theme for fish shell.
".config/fish/themes/Catppuccin-Frappe.theme".source = ./theming/Catppuccin-Frappe.theme;
## Kvantum's theme configuration.
".config/Kvantum/catppuccin-frappe-lavender" = {
source = "${
@ -28,10 +31,10 @@
'';
##
## Theming configuration for qt5 and qt6
".config/qt5ct/colors".source = ./dotfiles/qt5ct;
## Themeing configuration for qt5 and qt6
".config/qt5ct/colors".source = ./theming/qt5ct;
".config/qt6ct/colors".source = ./dotfiles/qt5ct; # We use the qt5ct because it's the SAME spec
".config/qt6ct/colors".source = ./theming/qt5ct; # We use the qt5ct because it's the SAME spec
##
".local/share/SpeedCrunch/color-schemes/catppuccin-frappe.json" = {

View file

@ -1,60 +0,0 @@
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

@ -1,26 +0,0 @@
{ 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;
};
}

View file

@ -1,44 +0,0 @@
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

@ -1,4 +1,4 @@
{ pkgs, nixpkgs, ... }:
{ nixpkgs, ... }:
{
# Enable experimental features
@ -7,18 +7,6 @@
"flakes"
];
# Optimize storage
nix.optimise.automatic = true;
nix.settings.auto-optimise-store = true;
# Pin the nix registry
nix.registry = {
nixpkgs.flake = nixpkgs;
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# Enable nh, a bundle of CLI utilities for NixOS
programs.nh = {
enable = true;
@ -31,40 +19,21 @@
flake = "/home/wizardlink/.system";
};
# Enable flatpak to all users.
services.flatpak.enable = true;
# Optimize storage
nix.optimise.automatic = true;
nix.settings.auto-optimise-store = true;
environment.systemPackages = with pkgs; [
## Tools
# Utilities
bat
duf
fuseiso
lm_sensors
p7zip
tree
unrar
unzip
wget
zip
# File managing
sshfs
yazi
# Networking
gping
nmap
# Processes
(btop.override {
# AMD GPU support
rocmSupport = true;
})
killall
# Filter
fzf
ripgrep
# Enable Hyprland's cachix
nix.settings.substituters = [ "https://hyprland.cachix.org" ];
nix.settings.trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
# Pin the nix registry
nix.registry = {
nixpkgs.flake = nixpkgs;
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
}

View file

@ -4,9 +4,11 @@
imports = [
./common.nix
./desktop.nix
./gaming.nix
./hardware.nix
./packages.nix
./services.nix
./sound.nix
./system.nix
./virtualization.nix
./theming.nix
];
}

View file

@ -1,9 +1,18 @@
{
pkgs,
hyprland,
...
}:
let
hyprland-pkgs = hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in
{
environment.sessionVariables = {
# Set env for Fcitx5
QMODIFIERS = "@im=fcitx5";
};
# Enable SDDM.
services.displayManager.sddm = {
enable = true;
@ -12,6 +21,14 @@
package = pkgs.kdePackages.sddm;
};
# 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;
};
# Enable XDG Desktop Portals.
xdg.portal = {
enable = true;
@ -34,20 +51,14 @@
enable = true;
enable32Bit = true;
package = hyprland-pkgs.mesa.drivers;
package32 = hyprland-pkgs.pkgsi686Linux.mesa.drivers;
extraPackages = with pkgs; [
rocmPackages.clr.icd # OpenGL hwa
];
};
# Set the default fonts for the system.
fonts.fontconfig = {
defaultFonts = {
serif = [ "IBM Plex Serif" ];
sansSerif = [ "IBM Plex Sans" ];
monospace = [ "IBM Plex Mono" ];
};
};
# Enable Thunar and it's dependencies
programs.thunar = {
enable = true;
@ -57,12 +68,6 @@
services.gvfs.enable = true; # For mounting drives, trash, etc.
services.tumbler.enable = true; # Thumbnail support
# Enable KDEConnect
programs.kdeconnect = {
enable = true;
package = pkgs.kdePackages.kdeconnect-kde;
};
# Enable the Fcitx5 IME
i18n.inputMethod = {
enable = true;
@ -82,28 +87,4 @@
waylandFrontend = true;
};
};
environment.sessionVariables = {
# Set env for Fcitx5
QMODIFIERS = "@im=fcitx5";
};
environment.systemPackages = with pkgs; [
wl-clipboard
xclip
zoxide
(catppuccin-sddm.override # So SDDM finds the theme files.
{
flavor = "frappe";
font = "IBM Plex Sans";
fontSize = "11";
background = "${../../assets/sddm/Background.jpg}";
loginBackground = true;
}
)
## Libraries
libsForQt5.qt5.qtgraphicaleffects
libsForQt5.qt5.qtquickcontrols2
];
}

View file

@ -1,11 +1,6 @@
{ ... }:
{
# Add AMD drivers
boot.initrd.kernelModules = [
"amdgpu"
];
# Enable Bluetooth
hardware.bluetooth = {
enable = true;

111
modules/nixos/packages.nix Normal file
View file

@ -0,0 +1,111 @@
{ 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

@ -0,0 +1,41 @@
{
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
''
);
};
}

15
modules/nixos/sound.nix Normal file
View file

@ -0,0 +1,15 @@
{ ... }:
{
# 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

@ -4,17 +4,16 @@
# Kernel
boot.kernelPackages = pkgs.linuxPackages_zen;
# Add AMD drivers.
boot.initrd.kernelModules = [
"amdgpu"
"v4l2loopback"
"zenergy"
];
boot.extraModulePackages = [
config.boot.kernelPackages.v4l2loopback
config.boot.kernelPackages.zenergy # Allows fetching power draw information on AMD CPUs
];
# Configure v4l2loopback
boot.extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="Virtual camera" exclusive_caps=1
'';
@ -35,35 +34,12 @@
# Enable networking
networking.networkmanager.enable = true;
# Enable sound with pipewire.
services.pulseaudio.enable = false;
services.pipewire = {
enable = true;
audio.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# Enable fish system-wide to integrate with nixpkgs.
programs.fish.enable = true;
# Set fish as the default shell for all users.
users.defaultUserShell = pkgs.fish;
# Enable CUPS to print documents.
services.printing.enable = true;
# And the service that enables IPP Everywhere
services.avahi = {
enable = true;
nssmdns4 = true;
nssmdns6 = true;
openFirewall = true;
};
# Enable the OpenSSH daemon.
services.openssh = {
enable = true;
@ -74,19 +50,4 @@
StreamLocalBindUnlink = "yes";
};
};
# Enable GPG.
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# 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;
}

12
modules/nixos/theming.nix Normal file
View file

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

View file

Before

Width:  |  Height:  |  Size: 4.8 MiB

After

Width:  |  Height:  |  Size: 4.8 MiB

View file

@ -1,18 +0,0 @@
# 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

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

View file

@ -1,48 +0,0 @@
{
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; };
};
}

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