Compare commits

..

131 Commits

Author SHA1 Message Date
ecaa6dcb83 [flake] update 2025-03-16 15:44:01 -07:00
7729ff7434 [desktop] Fix moonlight package 2025-03-16 15:43:54 -07:00
52c110a505 [boxy] Enhance graphics drivers 2025-03-16 15:43:41 -07:00
d5997575df [boxy] Add sddm config 2025-03-16 14:34:19 -07:00
57bc35101e [kodi] Setup extra groups 2025-03-16 14:34:12 -07:00
6b09b1b0bc [desktop] Add moonlight 2025-03-16 14:33:58 -07:00
1851743a21 [desktop] Finish programs refactor 2025-03-16 14:33:44 -07:00
c6d787f9f5 [boxy] Enable bluetooth 2025-03-16 14:33:00 -07:00
f4a8f9d614 [home] Remove nixpkgs config
Need to find some better way of doing this so that it works across
home-manager-only installations as well as nixos home manager module
installations.
2025-03-08 14:46:47 -08:00
1e01d44f2f wip 2025-03-08 14:46:39 -08:00
39dbe6644c [kodi] Add moonlight-embedded 2025-03-07 14:51:39 -08:00
870e1073dc [home] Switch from gpg-agent to gnome-keyring 2025-03-05 13:30:32 -08:00
c1f132026a [home] Remove some accidental non-working update 2025-03-05 13:25:39 -08:00
5650125d7e Add .goosehints 2025-03-05 13:25:08 -08:00
6536213bd0 [home] Remove autoUpgrade
Flakes make this irrelevant
2025-03-05 13:24:51 -08:00
a0ce3b810e [home] Fix support for non-NixOS systems 2025-03-05 13:24:38 -08:00
abbcfebc97 [doom] Restore 2025-03-05 12:33:45 -08:00
495aba3fef [home] Support standalone home manager 2025-03-05 12:33:32 -08:00
f9bcec74d3 Revert "[audio] Setup squeezelite"
This reverts commit 1d0b3a0367.
2025-03-04 12:50:46 -08:00
97c4d7035c [squeezelite] Disable for now 2025-02-17 12:46:56 -08:00
8abd331619 [home] Add google-cookie-retrieval 2025-02-17 12:44:14 -08:00
aca0afa0dc [flake] Remove z790prors 2025-02-17 12:35:16 -08:00
1d0b3a0367 [audio] Setup squeezelite 2025-02-16 18:41:50 -08:00
50f9defdd5 [wixos] Add audio role 2025-02-16 18:40:07 -08:00
d71d7a1ffb Remove more gaming stuff 2025-02-16 11:21:20 -08:00
ee511f6ab8 [wixos] Get nvidia drivers working I think 2025-02-16 11:21:04 -08:00
e3dd0bdb30 [flake] Update 2025-02-16 11:20:12 -08:00
10300ed10b [desktop] Fix sddm import 2025-02-15 11:54:28 -08:00
8e72ef71d2 [machines] Remove z790prors 2025-02-15 10:24:02 -08:00
d6e031efd0 [desktop] Refactor into multiple components 2025-02-15 10:23:33 -08:00
16fa4a641c Add goosehints 2025-02-15 09:38:14 -08:00
7a5ec23cc5 [home] Add goose (honk) 2025-02-12 19:32:15 -08:00
ff1124fbe6 [doom] Disable unstraightened for now 2025-02-07 07:19:57 -08:00
53088f9536 [wixos] Add desktop role 2025-02-07 07:19:50 -08:00
68c04b43fd [default] Add glances 2025-02-07 07:19:42 -08:00
efbfffbb61 [gaming] Abandon for now 2025-02-07 07:18:09 -08:00
0e1a67b980 [flake] update 2025-02-07 07:17:30 -08:00
7d6e294340 [tmux] Change prefix to M-\ 2025-02-01 12:09:15 -08:00
8690a0289d [tmux] Remove shift+arrow window nav
This was conflicting with operations like manipulating dates in org-mode
2025-02-01 11:29:56 -08:00
e95f56e240 [z790prors] Remove kids accounts 2025-02-01 10:58:49 -08:00
2dffbb0a98 [packages] Use nixpkgs for nextcloud-talk-desktop 2025-02-01 10:58:25 -08:00
2ceaf78825 [default] Disable distributed builds (for now) 2025-01-30 20:37:32 -08:00
e164097f36 Add wixos 2025-01-30 14:17:43 -08:00
d1605e386d [tmux] Update default terminal and keyMode 2025-01-30 14:17:14 -08:00
4a41533ba8 [z790prors] Use local time for hardware clock 2025-01-03 13:50:51 -08:00
9d45449fce [desktop] Add ghostty 2025-01-03 13:40:09 -08:00
877bc2c739 [flake] update 2025-01-03 13:39:29 -08:00
cd6e028142 [z790prors] Support evil partition and OS 2025-01-03 12:24:18 -08:00
421b27f76f [modrinth] Remove modrinth 2025-01-03 12:18:51 -08:00
1f4a72d28c [tmux] Add tmux 2025-01-03 12:13:17 -08:00
a8f19af989 [nix-book] Compress swap 2025-01-03 10:44:51 -08:00
d4b0fe5b9e [emacs] Add org/projects agenda directory 2025-01-01 15:27:35 -08:00
09cff42222 [desktop] Add blender 2024-12-24 12:39:05 -08:00
0183e7c823 [default] Add tree 2024-12-22 08:40:01 -08:00
29cdd1e239 [desktop] Add bambu-studio 2024-12-22 08:39:06 -08:00
7ced8f11ba [hyprland] Remove completely 2024-12-16 12:15:32 -08:00
244b7c0888 [flake] Remove references to chaotic 2024-12-16 11:52:56 -08:00
80744bcbf1 [flake] update 2024-12-16 11:51:54 -08:00
56d03f4228 [desktop] Fix formatting 2024-12-16 11:51:54 -08:00
32d0c7fa5a [home] Set ENABLE_GAMESCOPE_WSI 2024-12-16 11:51:54 -08:00
1c2aae93b7 [desktop] Don't autostart sunshine 2024-12-16 11:51:54 -08:00
0ab6562694 [desktop] Add vulkan HDR layer, disabled 2024-12-16 11:51:49 -08:00
986ee06a46 [z790prors] Use latest kernel and nvidia driver 2024-12-16 11:51:05 -08:00
34abaeeec9 [users] Add video group 2024-12-16 11:51:05 -08:00
11638cfa1b [modrinth-nvidia] Install java versions 2024-12-16 11:51:05 -08:00
1ce431b0e5 [emacs] Use external module for doom config 2024-12-16 11:51:05 -08:00
98ef9b1443 [modrinth-nvidia] Fix build from update 2024-12-16 11:51:05 -08:00
4c779663df [nextcloud-talk-desktop] Update to 0.39.0 2024-12-16 11:51:05 -08:00
e2bb87fcf1 [emacs] Update nerd-fonts usage
This was changed in a new version of nix
2024-12-16 11:51:05 -08:00
ef47c5dc9a [flake] update 2024-12-16 11:51:05 -08:00
7da089daa3 [desktop] Add a waylandOnly option 2024-12-14 15:38:46 -08:00
8134d7cb33 [desktop] modrinth-nvidia for x11 only 2024-12-14 15:29:35 -08:00
24f1a64f3c [desktop] Add custom package modrinth-nvidia 2024-12-05 21:00:42 -08:00
19531074ca [desktop] Add modrinth-app 2024-12-05 19:59:46 -08:00
a30c130f21 [flake] update 2024-11-28 12:04:44 -08:00
e088ee2dc8 [desktop] Add protonup 2024-11-28 12:02:56 -08:00
366a7e2ea3 [plasma-manager] Dark theme 2024-11-28 12:02:37 -08:00
9116e44dfe [plasma-manager] Enable mouse acceleration 2024-11-14 14:43:16 -08:00
e3ef710bdb [default] Add some common utils 2024-11-12 08:01:49 -08:00
e1a804cfed [plasma-manager] Update comments 2024-11-10 10:29:17 -08:00
ec59936012 [defaults] Disable systemd emergency mode 2024-11-09 15:11:45 -08:00
844d17a855 [z790prors] Remove arch mount point
I had to boot into emergency mode and use systemd runtime masking:

```
systemd mask --runtime arch.mount
```

This allowed the system to boot so that I could remove this entry and
run nixos-rebuild
2024-11-09 15:09:04 -08:00
b19dc65c6d [emacs] Upgrade doom 2024-11-09 13:51:25 -08:00
6db2c78e0b [emacs] Disable auto nix lsp
Especially on underpowered devices, my monolithic nixos config grinds
everything to a halt. I'll just manually enable this when the context
makes sense.
2024-11-03 11:11:23 -08:00
475aafa33e [kde] Remove polonium
Polonium has been frustrating to use. I'm unsure how much of this I can
blame polonium vs kde vs plasma-manager vs nix, but
1. keyboard shortcuts aren't working
2. tiling keeps going in and out for various windows
3. seemingly kde startup time takes forever with it installed

The more I'm starting to understand KDE's native window management
functions, the more I'm thinking that's the right way to go. I'm going
to abandom polonium for now, perhaps with some future return.
2024-11-03 11:08:03 -08:00
09562f0af9 [flake] update 2024-11-03 11:01:07 -08:00
ae543d9628 Revert "[spotifyd] Update to lean in on pulseaudio"
This reverts commit b9097e91d5.
2024-11-03 09:50:08 -08:00
c7716d2bca Revert "[audio] Switch to pulseaudio"
This reverts commit abf8fe9ad2.
2024-11-03 09:49:09 -08:00
54cf339d52 [plasma-manager] Update desktop switching shortcuts 2024-11-03 09:41:04 -08:00
b9097e91d5 [spotifyd] Update to lean in on pulseaudio 2024-10-21 12:31:36 -07:00
abf8fe9ad2 [audio] Switch to pulseaudio
This is an attempt to get spotifyd running as a system user working
2024-10-21 12:31:36 -07:00
926b47f07f [flake] update 2024-10-21 08:43:05 -07:00
749ef988f1 [z790prors] Enable HDR in plasma 6.2 2024-10-21 08:42:46 -07:00
dfa91d327f [nix] Enable automatic gc 2024-10-21 08:42:26 -07:00
37c455d75e [plasma-manager] Some shortcut improvements 2024-10-21 08:42:02 -07:00
c0d7d934f3 [plasma-manager] Merge config from z790prors 2024-10-15 18:34:04 -07:00
cb91f69c49 [desktop] Add polonium 2024-10-15 18:25:12 -07:00
bc6378cb22 Setup kde wayland gamescope + nvidia settings 2024-10-15 18:25:12 -07:00
a13676311a [plasma-manager] Initial setup 2024-10-15 08:32:20 -07:00
ec57592715 [nixbook] Enable spotifyd 2024-10-15 08:17:07 -07:00
051c223eb7 [i3+sway] Add touchpad config 2024-10-10 17:15:26 -07:00
6030f6ea42 [z790prors] Enable BEES 2024-10-08 08:37:53 -07:00
df77fd5c74 [i3+sway] Fix terminal reference 2024-10-05 19:49:17 -07:00
458bcb4cdf [roles] Remove unused trusted public key 2024-10-05 19:12:49 -07:00
40e10bab34 [roles] Remove unused config option 2024-10-05 19:12:38 -07:00
3477a3480f [boxy] Fix wayland and user setup 2024-10-05 19:10:15 -07:00
d2ae7f8e11 [roles] Also make desktop opt-in 2024-10-05 19:09:58 -07:00
ff3a0a4738 [roles] No config change unless enabled 2024-10-05 18:17:42 -07:00
1a857399a6 [spotifyd] Setup system-wide spotifyd 2024-10-05 17:21:08 -07:00
4620288747 [z790prors] Update default refresh rate 2024-10-05 08:37:33 -07:00
b5f2e1738f [secrets] Setup initial example secrets 2024-10-05 08:21:28 -07:00
8e27017aa4 [boxy] Force things to work, but on X11 for now 2024-10-04 17:16:30 -07:00
4ca9804db8 [i3+sway] Fix resize and exit bindings 2024-09-21 08:21:31 -07:00
6417540b51 [desktop] Setup brightness controls 2024-09-20 21:08:30 -07:00
3f1bdc7af0 [audio] Add an audio role 2024-09-19 20:47:19 -07:00
4d39f8a635 [bluetooth] Add bluetooth role 2024-09-19 20:26:10 -07:00
736194b8b4 [printing] Setup dynamic printer config 2024-09-18 21:14:00 -07:00
4096dc75b9 Bump doom emacs 2024-09-11 07:34:47 -07:00
18afc61e33 [emacs] Modularize more and better pkg
Attempts to select the right emacs package based on whether the machine
is x11 only or not.
2024-09-10 17:03:04 -07:00
9ba6006fca [i3] Use home row navigation 2024-09-10 11:26:01 -07:00
000db04502 [i3+sway] Set default extra config options 2024-09-10 11:25:35 -07:00
42a34a6c40 [nix-book] Update sway scale factor 2024-09-10 11:09:44 -07:00
5e029720ef [i3+sway] Add optionality to configs 2024-09-10 11:09:37 -07:00
5289d8847b [sway] Fix/add caps:escape option 2024-09-10 10:50:31 -07:00
d9e5fdb0df Merge i3+sway configs 2024-09-10 10:50:31 -07:00
fb8431da2d Flatten home modules 2024-09-10 10:50:31 -07:00
e9d14167aa [z790prors] Add back kids accounts 2024-09-08 14:22:07 -07:00
3a9348730b Update all machines to use new roles format 2024-09-08 14:16:17 -07:00
1da9e92a24 Switch back to sddm 2024-09-08 14:13:13 -07:00
75baf55d5b Setup sway config 2024-09-08 14:06:07 -07:00
692cebc839 Setup roles as modules and switch to sway 2024-09-08 13:49:28 -07:00
53 changed files with 1335 additions and 931 deletions

22
.goosehints Normal file
View File

@@ -0,0 +1,22 @@
NixOS Configurations Repository
================================
Overview:
---------
This repository hosts modular and reproducible NixOS configurations managed via Nix flakes. It is structured to separate concerns across machine-specific setups, common roles, and custom packages.
Directory Structure:
----------------------
• secrets/ - Confidential data (passwords, keys, etc.) required for system configuration.
• packages/ - Custom Nix packages leveraged across various configurations.
• roles/ - Role-based configurations (e.g., kodi, bluetooth) each with its own module (default.nix) for inclusion in machine setups.
• machines/ - Machine-specific configurations (e.g., nix-book, z790prors, boxy, wixos) including configuration.nix and hardware-configuration.nix tailored for each hardware.
• home/ - Home-manager configurations for personal environments and application settings (e.g., home-nix-book.nix, home-z790prors.nix).
Design Principles:
------------------
• Modularity: Clear separation between roles, machines, and packages allows for flexible and reusable configurations.
• Declarative & Reproducible: Using Nix flakes guarantees a fully declarative setup that can be effortlessly reproduced across systems.
• Scalability: The structure is designed to accommodate adding new roles or machines with minimal disruption to existing configurations.
This file serves as a concise guide for navigating and understanding the repository from an advanced Nix perspective. Further documentation can be found within the respective directories or individual README files where applicable.

11
.sops.yaml Normal file
View File

@@ -0,0 +1,11 @@
keys:
- &admin_johno age1ls6a033d4p4u8h4rwazjwt8w4c4xg73wq0mdnm64jajxzcz4k9asvjnks3
- &host_z790prors age12l5u7sw59u5pkwp83qm8t3ff7uv0ld2c9k3zh5j4ame9k2szcynqu7ftqe
- &host_nixbook age1fa3zqavfmqk4ssa22yne9td90gyqv9q5a8y0s8jp3xak8q7p3yjqyn7rkg
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- age:
- *admin_johno
- *host_z790prors
- *host_nixbook

399
flake.lock generated
View File

@@ -1,38 +1,80 @@
{
"nodes": {
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"doomemacs": {
"flake": false,
"locked": {
"lastModified": 1725199881,
"narHash": "sha256-jsmipf/u1GFZE5tBUkr56CHMN6VpUWCAjfLIhvQijU0=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "f8a687dd29ff019657498f1bd14da2fbbf0e604b",
"lastModified": 1742013576,
"narHash": "sha256-wgzv3IFBxJkAYfLG0vCp1jbajHKrrpFzKZ2BssWVSlo=",
"owner": "doomemacs",
"repo": "doomemacs",
"rev": "466490c252d06f42a9c165f361de74a6e6abad8d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"owner": "doomemacs",
"repo": "doomemacs",
"type": "github"
}
},
"emacs-overlay": {
"inputs": {
"nixpkgs": [
"nix-doom-emacs-unstraightened"
],
"nixpkgs-stable": [
"nix-doom-emacs-unstraightened"
]
},
"locked": {
"lastModified": 1742113225,
"narHash": "sha256-tUor57FbLwwy+duUbjq8Ff0TyayK1i50rUbXBfdgfuM=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "7e13aa507d714371e6ff70a91d76dcb339311773",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "emacs-overlay",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"google-cookie-retrieval": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1739823862,
"narHash": "sha256-h08hlS0ImlONZfeemVMzo29PUC3/abdSb9muYO9E048=",
"ref": "refs/heads/main",
"rev": "675f98b0145f908897c4d899836bcb3dad9da79a",
"revCount": 9,
"type": "git",
"url": "https://git.johnogle.info/johno/google-cookie-retrieval.git"
},
"original": {
"type": "git",
"url": "https://git.johnogle.info/johno/google-cookie-retrieval.git"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -40,11 +82,11 @@
]
},
"locked": {
"lastModified": 1725694918,
"narHash": "sha256-+HsjshXpqNiJHLaJaK0JnIicJ/a1NquKcfn4YZ3ILgg=",
"lastModified": 1741955947,
"narHash": "sha256-2lbURKclgKqBNm7hVRtWh0A7NrdsibD0EaWhahUVhhY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "aaebdea769a5c10f1c6e50ebdf5924c1a13f0cda",
"rev": "4e12151c9e014e2449e0beca2c0e9534b96a26b4",
"type": "github"
},
"original": {
@@ -53,197 +95,72 @@
"type": "github"
}
},
"hy3": {
"nix-doom-emacs-unstraightened": {
"inputs": {
"hyprland": [
"hyprland"
]
},
"locked": {
"lastModified": 1725573970,
"narHash": "sha256-KJKO4b5Gl+7t3hF+X56Y0W/Lxf2OxWl/aLgzbiN3+hI=",
"owner": "outfoxxed",
"repo": "hy3",
"rev": "e91460d63627cdad417cac2c09897be58094e2e0",
"type": "github"
},
"original": {
"owner": "outfoxxed",
"repo": "hy3",
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1722623071,
"narHash": "sha256-sLADpVgebpCBFXkA1FlCXtvEPu1tdEsTfqK1hfeHySE=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "912d56025f03d41b1ad29510c423757b4379eb1c",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor",
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"doomemacs": "doomemacs",
"emacs-overlay": "emacs-overlay",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems",
"xdph": "xdph"
"systems": "systems"
},
"locked": {
"lastModified": 1725738873,
"narHash": "sha256-8OT3XRoPoAhiYHMT/hQ6uKE4o7Z99a1Y+711oEPV+dg=",
"ref": "refs/heads/main",
"rev": "70add904c40924a761059e4009a8c0f1e43d76a3",
"revCount": 5194,
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
},
"original": {
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"xdph",
"nixpkgs"
],
"systems": [
"hyprland",
"xdph",
"systems"
]
},
"locked": {
"lastModified": 1721326555,
"narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84",
"lastModified": 1742122199,
"narHash": "sha256-vEdsZd9MmjRYXutcSVnOoR15ikI9yU8Oc9f1UCNvUwI=",
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"rev": "366d3b516d4878e1f93158708015be3dac09a72f",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"type": "github"
}
},
"hyprlang": {
"nixos-wsl": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1725188252,
"narHash": "sha256-yBH8c4GDaEAtBrh+BqIlrx5vp6gG/Gu8fQQK63KAQgs=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "c12ab785ce1982f82594aff03b3104c598186ddd",
"lastModified": 1741870048,
"narHash": "sha256-odXRdNZGdXg1LmwlAeWL85kgy/FVHsgKlDwrvbR2BsU=",
"owner": "nix-community",
"repo": "NixOS-WSL",
"rev": "5d76001e33ee19644a598ad80e7318ab0957b122",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1724966483,
"narHash": "sha256-WXDgKIbzjYKczxSZOsJplCS1i1yrTUpsDPuJV/xpYLo=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "8976e3f6a5357da953a09511d0c7f6a890fb6ec2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1721324119,
"narHash": "sha256-SOOqIT27/X792+vsLSeFdrNTF+OSRp5qXv6Te+fb2Qg=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "a048a6cb015340bd82f97c1f40a4b595ca85cc30",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"owner": "nix-community",
"ref": "main",
"repo": "NixOS-WSL",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1725634671,
"narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=",
"lastModified": 1740865531,
"narHash": "sha256-h00vGIh/jxcGl8aWdfnVRD74KuLpyY3mZgMFMy7iKIc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5ef6c425980847c78a80d759abc476e941a9bf42",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1742069588,
"narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c",
"rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5",
"type": "github"
},
"original": {
@@ -253,56 +170,72 @@
"type": "github"
}
},
"plasma-manager": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1740569341,
"narHash": "sha256-WV8nY2IOfWdzBF5syVgCcgOchg/qQtpYh6LECYS9XkY=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "5eeb0172fb74392053b66a8149e61b5e191b2845",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "plasma-manager",
"type": "github"
}
},
"root": {
"inputs": {
"google-cookie-retrieval": "google-cookie-retrieval",
"home-manager": "home-manager",
"hy3": "hy3",
"hyprland": "hyprland",
"nixpkgs": "nixpkgs"
"nix-doom-emacs-unstraightened": "nix-doom-emacs-unstraightened",
"nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs_2",
"plasma-manager": "plasma-manager",
"sops-nix": "sops-nix"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1741861888,
"narHash": "sha256-ynOgXAyToeE1UdLNfrUn/hL7MN0OpIS2BtNdLjpjPf0=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "d016ce0365b87d848a57c12ffcfdc71da7a2b55f",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "sops-nix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": "hyprland-protocols",
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1725203932,
"narHash": "sha256-VLULC/OnI+6R9KEP2OIGk+uLJJsfRlaLouZ5gyFd2+Y=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "2425e8f541525fa7409d9f26a8ffaf92a3767251",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"repo": "default",
"type": "github"
}
}

106
flake.nix
View File

@@ -3,68 +3,100 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland = {
type = "git";
url = "https://github.com/hyprwm/Hyprland";
submodules = true;
plasma-manager = {
url = "github:nix-community/plasma-manager";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
nix-doom-emacs-unstraightened = {
url = "github:marienz/nix-doom-emacs-unstraightened";
inputs.nixpkgs.follows = "nixpkgs";
};
hy3 = {
url = "github:outfoxxed/hy3";
inputs.hyprland.follows = "hyprland";
google-cookie-retrieval = {
url = "git+https://git.johnogle.info/johno/google-cookie-retrieval.git";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, ... } @ inputs: {
nixosConfigurations.z790prors-nix = nixpkgs.lib.nixosSystem {
outputs = { self, nixpkgs, nixos-wsl, ... } @ inputs: let
baseModules = [
./roles
inputs.sops-nix.nixosModules.sops
inputs.home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.plasma-manager.homeManagerModules.plasma-manager
inputs.nix-doom-emacs-unstraightened.hmModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
}
];
in {
nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./machines/z790prors/configuration.nix
inputs.home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.johno = import ./home/home-z790prors.nix;
}
];
};
nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
modules = baseModules ++ [
./machines/nix-book/configuration.nix
inputs.home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.johno = import ./home/home-nix-book.nix;
home-manager.extraSpecialArgs = { inherit system; };
}
];
};
nixosConfigurations.boxy= nixpkgs.lib.nixosSystem {
nixosConfigurations.boxy = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
modules = baseModules ++ [
./machines/boxy/configuration.nix
inputs.home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.johno = import ./home/home-default.nix;
home-manager.users.johno = import ./home/home.nix;
home-manager.extraSpecialArgs = { inherit system; };
}
];
};
nixosConfigurations.wixos = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = baseModules ++ [
nixos-wsl.nixosModules.default
./machines/wixos/configuration.nix
inputs.home-manager.nixosModules.home-manager
{
home-manager.users.johno = import ./home/home.nix;
home-manager.extraSpecialArgs = { inherit system; };
}
];
};
homeConfigurations."johno" = inputs.home-manager.lib.homeManagerConfiguration {
pkgs = inputs.nixpkgs.legacyPackages."x86_64-linux";
modules = [
inputs.plasma-manager.homeManagerModules.plasma-manager
inputs.nix-doom-emacs-unstraightened.hmModule
./home/home.nix
];
extraSpecialArgs = {
system = "x86_64-linux";
globalInputs = inputs;
};
};
};
}

View File

@@ -2,7 +2,10 @@
{
imports = [
./home-default.nix
./modules/window_managers/hyprland/nix-book.nix
./home.nix
];
home.i3_sway.extraSwayConfig = {
output.eDP-1.scale = "1.75";
};
}

View File

@@ -1,8 +0,0 @@
{ config, lib, pkgs, ... }:
{
imports = [
./home-default.nix
./modules/window_managers/hyprland/z790prors.nix
];
}

View File

@@ -1,8 +1,7 @@
{ config, pkgs, lib, ... }:
{ pkgs, customPkgs, globalInputs, system, ... }:
with import <nixpkgs> {};
let
nextcloudTalkDesktop = pkgs.callPackage ./modules/applications/nextcloud-talk-desktop/package.nix {};
customPkgs = pkgs.callPackage ../packages {};
in
{
# Home Manager needs a bit of information about you and the paths it should
@@ -44,6 +43,7 @@ in
pkgs.element-desktop
pkgs.fd
#pkgs.fluffychat # security vulnerability in current version
pkgs.goose-cli
pkgs.gzip
pkgs.htop
pkgs.jellyfin-media-player
@@ -53,8 +53,9 @@ in
pkgs.less
pkgs.moonlight-qt
pkgs.ncdu
pkgs.nextcloud-talk-desktop
pkgs.pandoc
pkgs.pinentry-qt
#pkgs.pinentry-qt
#pkgs.pytest
pkgs.shellcheck
pkgs.solaar # Logitech management software
@@ -63,7 +64,7 @@ in
pkgs.wofi
pkgs.vlc
nextcloudTalkDesktop
globalInputs.google-cookie-retrieval.packages.${system}.default
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
@@ -79,9 +80,10 @@ in
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
targets.genericLinux.enable = true;
# 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
@@ -104,23 +106,15 @@ in
home.sessionPath = [
];
nixpkgs.config.allowUnfree = true;
imports = [
./modules/applications/emacs/default.nix
./modules/games/lutris/default.nix
./modules/window_managers/hyprland/default.nix
./modules/window_managers/i3/default.nix
./modules/emacs
./modules/i3+sway
./modules/plasma-manager
./modules/tmux
];
programs.bash.enable = true;
nix = {
gc = {
automatic = true;
};
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
@@ -139,15 +133,6 @@ in
};
};
programs.gpg.enable = true;
services.gpg-agent = {
enable = true;
enableSshSupport = true;
defaultCacheTtl = 1800;
pinentryPackage = pkgs.pinentry-qt;
};
programs.jq.enable = true;
programs.k9s.enable = true;
@@ -180,24 +165,14 @@ in
};
};
services.home-manager.autoUpgrade = {
enable = true;
frequency = "weekly";
};
services.kdeconnect = {
enable = true;
indicator = true;
package = pkgs.kdePackages.kdeconnect-kde;
};
services.spotifyd = {
services.gnome-keyring = {
enable = true;
settings = {
global = {
username = "johnogle222";
};
};
};
services.syncthing = {

View File

@@ -1,69 +0,0 @@
{ config, lib, pkgs, ... }:
let
emacs = pkgs.emacs29;
doomSync = (let
git = pkgs.git;
in ''
export PATH=${emacs}/bin:${git}/bin:$PATH
${config.xdg.configHome}/emacs/bin/doom sync -u -j $((`nproc`/4*3))
'');
in {
home.packages = [
pkgs.emacs-all-the-icons-fonts
pkgs.fontconfig
pkgs.graphviz
pkgs.isort
pkgs.nerdfonts
pkgs.nil # nix lsp language server
pkgs.nixfmt-rfc-style
(pkgs.ripgrep.override {withPCRE2 = true;})
pkgs.pipenv
pkgs.poetry
pkgs.python3
];
fonts.fontconfig.enable = true;
home.file = {
".config/emacs" = {
source = fetchGit {
url = "https://github.com/doomemacs/doomemacs.git";
# When updating me, remember to run `doom sync`
rev = "ac1122ae67d762e09fc6684945b52adff96cf1dc";
};
# We need to use recursive mode here or else doom fails to sync for
# some reason related to the permissions on the synced path. I'm not
# quite sure of everything that's going on here.
recursive = true;
# Because `recursive = true` will cause this to sync every single
# activation, we turn this off here.
#
# There's probably a way we could do better detection of this within
# our onChange shell?
#
# onChange = doomSync;
};
};
home.sessionVariables = {
DOOMLOCALDIR = "${config.xdg.dataHome}/doom";
EDITOR = "emacs -nw";
};
home.sessionPath = [
"${config.xdg.configHome}/emacs/bin"
];
programs.emacs = {
enable = true;
package = emacs;
};
xdg.configFile."doom" = {
source = ./doom;
# Sync doom if we updated the config
onChange = doomSync;
};
}

View File

@@ -1,79 +0,0 @@
{ lib
, stdenv
, fetchzip
, autoPatchelfHook
, nss
, cairo
, xorg
, libxkbcommon
, alsa-lib
, at-spi2-core
, mesa
, pango
, libdrm
, vivaldi-ffmpeg-codecs
, gtk3
, libGL
, libglvnd
, systemd
}:
stdenv.mkDerivation (finalAttrs: {
pname = "nextcloud-talk-desktop";
version = "0.29.0";
# Building from source would require building also building Server and Talk components
# See https://github.com/nextcloud/talk-desktop?tab=readme-ov-file#%EF%B8%8F-prerequisites
src = fetchzip {
url = "https://github.com/nextcloud-releases/talk-desktop/releases/download/v${finalAttrs.version}/Nextcloud.Talk-linux-x64-${finalAttrs.version}.zip";
hash = "sha256-fBIeNv8tfrVTFExLQDBPhIazvbsJ7a76+W9G0cuQDlw=";
stripRoot = false;
};
nativeBuildInputs = [ autoPatchelfHook ];
buildInputs = [
nss
cairo
alsa-lib
at-spi2-core
pango
libdrm
libxkbcommon
gtk3
vivaldi-ffmpeg-codecs
mesa
libGL
libglvnd
] ++ (with xorg; [libX11 libXcomposite libXdamage libXrandr libXfixes libXcursor]);
# Required to launch the application and proceed past the zygote_linux fork() process
# Fixes `Zygote could not fork`
runtimeDependencies = [ systemd ];
preInstall = ''
mkdir -p $out/bin
mkdir -p $out/opt
cp -r $src/* $out/opt/
'';
installPhase = ''
runHook preInstall
# Link the application in $out/bin away from contents of `preInstall`
ln -s "$out/opt/Nextcloud Talk-linux-x64/Nextcloud Talk" $out/bin/${finalAttrs.pname}
runHook postInstall
'';
meta = with lib; {
description = "Nextcloud Talk Desktop Client Preview";
homepage = "https://github.com/nextcloud/talk-desktop";
changelog = "https://github.com/nextcloud/talk-desktop/blob/${finalAttrs.version}/CHANGELOG.md";
license = licenses.agpl3Only;
maintainers = with maintainers; [ kashw2 ];
mainProgram = finalAttrs.pname;
};
})

View File

@@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
with lib;
{
config = {
home.packages = [
pkgs.emacs-all-the-icons-fonts
pkgs.fontconfig
pkgs.graphviz
pkgs.isort
pkgs.nerd-fonts.fira-code
pkgs.nerd-fonts.droid-sans-mono
pkgs.nil # nix lsp language server
pkgs.nixfmt-rfc-style
(pkgs.ripgrep.override {withPCRE2 = true;})
pkgs.pipenv
pkgs.poetry
pkgs.python3
];
programs.doom-emacs = {
enable = true;
doomDir = ./doom;
};
fonts.fontconfig.enable = true;
home.sessionVariables = {
EDITOR = "emacs -nw";
};
};
}

View File

@@ -28,6 +28,7 @@
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
(setq doom-font (font-spec :family "Fira Code"))
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
@@ -43,7 +44,11 @@
(setq org-directory "~/org/")
(after! org
(setq org-agenda-span 'week
org-agenda-files `(,org-directory ,(concat org-directory "roam/"))
my-agenda-dirs '("projects" "roam")
org-agenda-files (cons org-directory (mapcan (lambda (x) (directory-files-recursively
(expand-file-name x org-directory)
"\.org$"))
my-agenda-dirs))
org-log-done 'time
org-agenda-custom-commands '(("n" "Agenda"
((agenda "")

View File

@@ -149,7 +149,7 @@
;;lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
(nix +tree-sitter +lsp) ; I hereby declare "nix geht mehr!"
(nix +tree-sitter) ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org +roam2) ; organize your plain life in plain text
;;php ; perl's insecure younger brother

View File

@@ -1,9 +0,0 @@
{ config, lib, pkgs, ... }:
{
home.packages = [
pkgs.gamescope
pkgs.lutris
pkgs.mangohud
];
}

View File

@@ -0,0 +1,146 @@
{ config, lib, ... }:
with lib;
let
cfg = config.home.i3_sway;
i3_cfg = config.xsession.windowManager.i3.config;
shared_config = recursiveUpdate rec {
modifier = "Mod4";
terminal = "kitty";
defaultWorkspace = "workspace number 1";
keybindings = {
"${shared_config.modifier}+Return" = "exec ${terminal}";
"${shared_config.modifier}+Shift+q" = "kill";
"${shared_config.modifier}+d" = "exec ${i3_cfg.menu}";
"${shared_config.modifier}+h" = "focus left";
"${shared_config.modifier}+j" = "focus down";
"${shared_config.modifier}+k" = "focus up";
"${shared_config.modifier}+l" = "focus right";
"${shared_config.modifier}+Shift+h" = "move left";
"${shared_config.modifier}+Shift+j" = "move down";
"${shared_config.modifier}+Shift+k" = "move up";
"${shared_config.modifier}+Shift+l" = "move right";
"${shared_config.modifier}+Left" = "focus left";
"${shared_config.modifier}+Down" = "focus down";
"${shared_config.modifier}+Up" = "focus up";
"${shared_config.modifier}+Right" = "focus right";
"${shared_config.modifier}+Shift+Left" = "move left";
"${shared_config.modifier}+Shift+Down" = "move down";
"${shared_config.modifier}+Shift+Up" = "move up";
"${shared_config.modifier}+Shift+Right" = "move right";
#"${shared_config.modifier}+h" = "split h";
"${shared_config.modifier}+v" = "split v";
"${shared_config.modifier}+f" = "fullscreen toggle";
"${shared_config.modifier}+s" = "layout stacking";
"${shared_config.modifier}+w" = "layout tabbed";
"${shared_config.modifier}+e" = "layout toggle split";
"${shared_config.modifier}+Shift+space" = "floating toggle";
"${shared_config.modifier}+space" = "focus mode_toggle";
"${shared_config.modifier}+a" = "focus parent";
"${shared_config.modifier}+Shift+minus" = "move scratchpad";
"${shared_config.modifier}+minus" = "scratchpad show";
"${shared_config.modifier}+1" = "workspace number 1";
"${shared_config.modifier}+2" = "workspace number 2";
"${shared_config.modifier}+3" = "workspace number 3";
"${shared_config.modifier}+4" = "workspace number 4";
"${shared_config.modifier}+5" = "workspace number 5";
"${shared_config.modifier}+6" = "workspace number 6";
"${shared_config.modifier}+7" = "workspace number 7";
"${shared_config.modifier}+8" = "workspace number 8";
"${shared_config.modifier}+9" = "workspace number 9";
"${shared_config.modifier}+0" = "workspace number 10";
"${shared_config.modifier}+Shift+1" =
"move container to workspace number 1";
"${shared_config.modifier}+Shift+2" =
"move container to workspace number 2";
"${shared_config.modifier}+Shift+3" =
"move container to workspace number 3";
"${shared_config.modifier}+Shift+4" =
"move container to workspace number 4";
"${shared_config.modifier}+Shift+5" =
"move container to workspace number 5";
"${shared_config.modifier}+Shift+6" =
"move container to workspace number 6";
"${shared_config.modifier}+Shift+7" =
"move container to workspace number 7";
"${shared_config.modifier}+Shift+8" =
"move container to workspace number 8";
"${shared_config.modifier}+Shift+9" =
"move container to workspace number 9";
"${shared_config.modifier}+Shift+0" =
"move container to workspace number 10";
"${shared_config.modifier}+Shift+c" = "reload";
"${shared_config.modifier}+Shift+r" = "restart";
"${shared_config.modifier}+r" = "mode resize";
"XF86MonBrightnessUp" = "exec brightnessctl s +5%";
"XF86MonBrightnessDown" = "exec brightnessctl s 5%-";
};
} cfg.extraSharedConfig;
in {
options.home.i3_sway = {
extraSharedConfig = mkOption {
default = {};
};
extraI3Config = mkOption {
default = {};
};
extraSwayConfig = mkOption {
default = {};
};
};
config = {
xsession.windowManager.i3 = let
base_i3_config = recursiveUpdate shared_config {
keybindings = {
"${shared_config.modifier}+Shift+e" =
"exec i3-nagbar -t warning -m 'Do you want to exit i3?' -b 'Yes' 'i3-msg exit'";
};
};
in {
enable = true;
config = recursiveUpdate base_i3_config cfg.extraI3Config;
};
wayland.windowManager.sway = let
base_sway_config = recursiveUpdate shared_config {
keybindings = {
"${shared_config.modifier}+Shift+e" =
"exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
};
input = {
"type:keyboard" = {
xkb_options = "caps:escape";
};
"type:touchpad" = {
tap = "enabled";
tap_button_map = "lrm";
drag = "enabled";
natural_scroll = "disabled";
dwt = "enabled";
};
};
};
in {
enable = true;
config = recursiveUpdate base_sway_config cfg.extraSwayConfig;
};
};
}

View File

@@ -0,0 +1,127 @@
{ config, lib, pkgs, ... }:
# The current KDE config can be output with the command:
# nix run github:nix-community/plasma-manager
#
# Plasma-manager options documentation
# https://nix-community.github.io/plasma-manager/options.xhtml
#
# TODO: (ambitious) Add Kmail support to plasma-manager
{
programs.plasma = {
enable = true;
overrideConfig = true;
hotkeys.commands."launch-konsole" = {
name = "Launch Konsole";
key = "Meta+Return";
command = "konsole";
};
shortcuts = {
kmix = {
"decrease_microphone_volume" = "Microphone Volume Down";
"decrease_volume" = "Volume Down";
"decrease_volume_small" = "Shift+Volume Down";
"increase_microphone_volume" = "Microphone Volume Up";
"increase_volume" = "Volume Up";
"increase_volume_small" = "Shift+Volume Up";
"mic_mute" = ["Microphone Mute" "Meta+Volume Mute,Microphone Mute" "Meta+Volume Mute,Mute Microphone"];
"mute" = "Volume Mute";
};
mediacontrol = {
"mediavolumedown" = "none,,Media volume down";
"mediavolumeup" = "none,,Media volume up";
"nextmedia" = "Media Next";
"pausemedia" = "Media Pause";
"playmedia" = "none,,Play media playback";
"playpausemedia" = "Media Play";
"previousmedia" = "Media Previous";
"stopmedia" = "Media Stop";
};
ksmserver = {
"Lock Session" = ["Meta+Ctrl+Q" "Screensaver" "Screensaver,Lock Session"];
};
kwin = {
"Window Close" = "Meta+Shift+Q";
"Kill Window" = "Meta+Ctrl+Esc";
"Window Operations Menu" = "Alt+F3";
"Window Resize" = "Meta+R,,Resize Window";
"Overview" = "Meta+W";
"Grid View" = "Meta+G";
"Edit Tiles" = "Meta+T";
"Activate Window Demanding Attention" = "Meta+Ctrl+A";
"Show Desktop" = "Meta+D";
"Walk Through Windows" = "Alt+Tab";
"Walk Through Windows (Reverse)" = "Alt+Shift+Tab";
"Walk Through Windows of Current Application" = "Alt+`";
"Walk Through Windows of Current Application (Reverse)" = "Alt+~";
"Window Fullscreen" = "Meta+Shift+F,,Make Window Fullscreen";
"Window Quick Tile Bottom" = "Meta+Down";
"Window Quick Tile Left" = "Meta+Left";
"Window Quick Tile Right" = "Meta+Right";
"Window Quick Tile Top" = "Meta+Up";
"view_actual_size" = "Meta+0";
"view_zoom_in" = ["Meta++" "Meta+=,Meta++" "Meta+=,Zoom In"];
"view_zoom_out" = "Meta+-";
};
"org_kde_powerdevil"."Decrease Keyboard Brightness" = "Keyboard Brightness Down";
"org_kde_powerdevil"."Decrease Screen Brightness" = "Monitor Brightness Down";
"org_kde_powerdevil"."Decrease Screen Brightness Small" = "Shift+Monitor Brightness Down";
"org_kde_powerdevil"."Hibernate" = "Hibernate";
"org_kde_powerdevil"."Increase Keyboard Brightness" = "Keyboard Brightness Up";
"org_kde_powerdevil"."Increase Screen Brightness" = "Monitor Brightness Up";
"org_kde_powerdevil"."Increase Screen Brightness Small" = "Shift+Monitor Brightness Up";
"org_kde_powerdevil"."PowerDown" = "Power Down";
"org_kde_powerdevil"."PowerOff" = "Power Off";
"org_kde_powerdevil"."Sleep" = "Sleep";
"org_kde_powerdevil"."Toggle Keyboard Backlight" = "Keyboard Light On/Off";
"org_kde_powerdevil"."Turn Off Screen" = [ ];
"org_kde_powerdevil"."powerProfile" = ["Battery" "Meta+B,Battery" "Meta+B,Switch Power Profile"];
plasmashell = {
"activate application launcher" = ["Meta" "Alt+F1,Meta" "Alt+F1,Activate Application Launcher"];
"activate task manager entry 1" = "none,,";
"activate task manager entry 2" = "none,,";
"activate task manager entry 3" = "none,,";
"activate task manager entry 4" = "none,,";
"activate task manager entry 5" = "none,,";
"activate task manager entry 6" = "none,,";
"activate task manager entry 7" = "none,,";
"activate task manager entry 8" = "none,,";
"activate task manager entry 9" = "none,,";
"activate task manager entry 10" = "none,,";
"show activity switcher" = "none,,";
};
};
configFile = {
kwinrc.Desktops.Number = {
value = 10;
immutable = true;
};
kcminputrc.Libinput = {
AccelerationProfile = "adaptive";
PointerAcceleration = 0.5;
};
kcminputrc.Mouse = {
X11LibInputXAccelProfileFlat = false;
XLbInptAccelProfileFlat = false;
};
kdeglobals.KDE.LookAndFeelPackage = "org.kde.breezedark.desktop";
};
};
}

View File

@@ -0,0 +1,52 @@
{ config, lib, pkgs, ... }:
let
tokyo-night = pkgs.tmuxPlugins.mkTmuxPlugin {
pluginName = "tokyo-night";
rtpFilePath = "tokyo-night.tmux";
version = "1.6.1";
src = pkgs.fetchFromGitHub {
owner = "janoamaral";
repo = "tokyo-night-tmux";
rev = "d610ced20d5f602a7995854931440e4a1e0ab780";
sha256 = "sha256-17vEgkL7C51p/l5gpT9dkOy0bY9n8l0/LV51mR1k+V8=";
};
};
in
{
programs.tmux.enable = true;
programs.tmux.terminal = "tmux-direct";
programs.tmux.keyMode = "vi";
programs.tmux.escapeTime = 0;
programs.tmux.mouse = true;
programs.tmux.newSession = true;
programs.tmux.historyLimit = 50000;
programs.tmux.clock24 = true;
programs.tmux.baseIndex = 1;
programs.tmux.prefix = "M-\\\\";
programs.tmux.plugins = with pkgs; [
tmuxPlugins.cpu
tmuxPlugins.battery
tmuxPlugins.better-mouse-mode
tmuxPlugins.net-speed
tmuxPlugins.online-status
tmuxPlugins.pain-control
tmuxPlugins.tilish
tmuxPlugins.yank
{
plugin = tmuxPlugins.resurrect;
extraConfig = "set -g @resurrect-strategy-nvim 'session'";
}
{
plugin = tmuxPlugins.continuum;
extraConfig = ''
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15' # minutes
'';
}
tokyo-night
];
}

View File

@@ -1,94 +0,0 @@
{ inputs, ... }:
{
imports = [
./hyprpaper.nix
];
wayland.windowManager.hyprland = {
enable = true;
plugins = [ inputs.hy3.packages.x86_64-linux.hy3 ];
settings = {
"$mod" = "SUPER";
"$terminal" = "kitty";
"$fileManager" = "dolphin";
"$menu" = "wofi --show drun";
exec-once = [
"waybar"
"dunst"
];
xwayland = {
force_zero_scaling = true;
};
input = {
kb_layout = "us";
kb_options = "caps:escape";
follow_mouse = 1;
touchpad.natural_scroll = false;
};
windowrulev2 = [
# I can guess, but I should figure out what this actually does
"suppressevent maximize, class:.*"
];
general.layout = "hy3";
bind =
[
"SHIFT_$mod, Q, killactive"
"SHIFT_$mod, M, exit"
"$mod, D, exec, $menu"
"$mod, Return, exec, $terminal"
"$mod, H, hy3:movefocus, l"
"$mod, L, hy3:movefocus, r"
"$mod, K, hy3:movefocus, u"
"$mod, J, hy3:movefocus, d"
"SHIFT_$mod, H, hy3:movewindow, l"
"SHIFT_$mod, L, hy3:movewindow, r"
"SHIFT_$mod, K, hy3:movewindow, u"
"SHIFT_$mod, J, hy3:movewindow, d"
"$mod, V, hy3:makegroup, opposite"
"$mod, W, hy3:changegroup, toggletab"
"$mod, A, hy3:changefocus, raise"
"SHIFT_$mod, A, hy3:changefocus, lower"
"$mod, M, fullscreen, 0"
"$mod, E, hy3:expand, expand"
"SHIFT_$mod, E, hy3:expand, base"
"$mod, Q, hy3:warpcursor"
]
++ (
# workspaces
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
builtins.concatLists (builtins.genList (
x: let
ws = let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in [
"$mod, ${ws}, workspace, ${toString (x + 1)}"
"$mod SHIFT, ${ws}, hy3:movetoworkspace, ${toString (x + 1)}"
]
)
10)
);
bindm =
[
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
};
};
}

View File

@@ -1,21 +0,0 @@
{ config, lib, pkgs, ... }:
{
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
splash = false;
preload = [
"${config.xdg.dataHome}/wallpaper.jpg"
];
wallpaper = [
",${config.xdg.dataHome}/wallpaper.jpg"
];
};
};
xdg.dataFile."wallpaper.jpg" = {
source = ./wallpaper.jpg;
};
}

View File

@@ -1,5 +0,0 @@
{ config, lib, pkgs, ... }:
{
wayland.windowManager.hyprland.settings.monitor = ",preferred,2880x1800@90.00Hz,1.33333";
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 842 KiB

View File

@@ -1,16 +0,0 @@
{ config, lib, pkgs, ... }:
{
wayland.windowManager.hyprland.settings.monitor = "DP-1,3440x1440@164.90,0x0,1.33333,vrr,1";
wayland.windowManager.hyprland.settings.env = [
"LIBVA_DRIVER_NAME,nvidia"
"XDG_SESSION_TYPE,wayland"
"GBM_BACKEND,nvidia-drm"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
"NVD_BACKEND,direct"
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"NIXOS_OZONE_WL,1"
];
wayland.windowManager.hyprland.settings.cursor.no_hardware_cursors = true;
}

View File

@@ -1,10 +0,0 @@
{ config, lib, pkgs, ... }:
{
xsession.windowManager.i3 = {
enable = true;
config = {
modifier = "Mod4";
};
};
}

View File

@@ -2,25 +2,49 @@
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, ... }:
{ lib, pkgs, ... }:
with lib;
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
../../roles/common/default.nix
../../roles/nix/default.nix
(import ../../roles/kodi/default.nix { autologin = true; wayland = true; inherit lib; inherit pkgs; })
(import ../../roles/users/default.nix { extraGroups = []; })
];
roles = {
audio.enable = true;
bluetooth.enable = true;
desktop = {
enable = true;
gaming = true;
kde = true;
sddm = true;
wayland = true;
};
kodi = {
enable = true;
autologin = false;
wayland = true;
};
users.enable = true;
};
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "boxy"; # Define your hostname.
services.xserver.videoDrivers = [ "amdgpu" ];
hardware.graphics.enable = true;
hardware.graphics.enable32Bit = true;
hardware.graphics.extraPackages = with pkgs; [
amdvlk
];
hardware.graphics.extraPackages32 = with pkgs; [
driversi686Linux.amdvlk
];
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.

View File

@@ -9,7 +9,7 @@
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "thunderbolt" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.initrd.kernelModules = [ "amdgpu" ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];

View File

@@ -2,21 +2,33 @@
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, inputs, ... }:
{ pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
../../roles/common/default.nix
(import ../../roles/desktop/default.nix { x11Only = false; inherit inputs; inherit pkgs; })
../../roles/nfs-mounts/default.nix
../../roles/nix/default.nix
../../roles/printing/default.nix
(import ../../roles/users/default.nix { extraGroups = []; })
../../roles/virtualisation/default.nix
];
roles = {
audio.enable = true;
bluetooth.enable = true;
desktop = {
enable = true;
wayland = true;
gaming = true;
kde = true;
sddm = true;
};
nfs-mounts.enable = true;
printing.enable = true;
spotifyd.enable = true;
users = {
enable = true;
extraGroups = [ "video" ];
};
virtualisation.enable = true;
};
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;

View File

@@ -29,6 +29,7 @@
swapDevices =
[ { device = "/dev/disk/by-uuid/ec1f70ea-27b6-4646-ad3b-eac41bd83e3e"; }
];
zramSwap.enable = true;
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View File

@@ -0,0 +1,61 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
# NixOS-WSL specific options are documented on the NixOS-WSL repository:
# https://github.com/nix-community/NixOS-WSL
{ config, lib, pkgs, ... }:
{
imports = [
];
roles = {
audio.enable = true;
desktop = {
enable = true;
wayland = true;
};
};
networking.hostName = "wixos";
wsl.enable = true;
wsl.defaultUser = "johno";
wsl.startMenuLaunchers = true;
wsl.useWindowsDriver = true;
wsl.wslConf.network.hostname = "wixos";
wsl.wslConf.user.default = "johno";
services.xserver.videoDrivers = [ "nvidia" ];
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
mesa.drivers
libvdpau-va-gl
vaapiVdpau
];
};
environment.sessionVariables = {
LD_LIBRARY_PATH = [
"/usr/lib/wsl/lib"
"/run/opengl-driver/lib"
];
};
hardware.nvidia = {
modesetting.enable = true;
nvidiaSettings = true;
open = true;
package = config.boot.kernelPackages.nvidiaPackages.latest;
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?
}

View File

@@ -1,54 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ inputs, lib, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
../../roles/common/default.nix
(import ../../roles/desktop/default.nix { x11Only = true; inherit inputs; inherit pkgs; })
../../roles/kids/default.nix
(import ../../roles/kodi/default.nix { autologin = false; wayland = false; inherit lib; inherit pkgs; })
../../roles/nfs-mounts/default.nix
../../roles/nix/default.nix
../../roles/printing/default.nix
(import ../../roles/users/default.nix { extraGroups = ["input" "libvirtd"]; })
../../roles/virtualisation/default.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub.useOSProber = true;
networking = {
hostName = "z790prors-nix"; # Define your hostname.
domain = "oglehome";
defaultGateway = "10.0.0.1";
nameservers = [ "10.0.0.1" ];
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
# Per-interface useDHCP will be mandatory in the future, so this generated config
# replicates the default behaviour.
useDHCP = false;
interfaces.enp3s0.ipv4.addresses = [{
address = "10.0.0.37";
prefixLength = 24;
}];
};
# TODO: Figure out something with this
nix.settings.secret-key-files = /root/cache-priv-key.pem;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "21.11"; # Did you read the comment?
}

View File

@@ -1,51 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [
"nvidia"
"nvidia_modeset"
"nvidia_uvm"
"nvidia_drm"
];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
hardware.graphics.enable = true;
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.production;
};
fileSystems."/" =
{ device = "/dev/disk/by-uuid/8d996d13-6d55-4524-83a2-6f6fb47a09ea";
fsType = "btrfs";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/7445-C336";
fsType = "vfat";
};
fileSystems."/arch" =
{ device = "/dev/disk/by-label/endeavouros";
fsType = "btrfs";
};
swapDevices = [ ];
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

4
packages/default.nix Normal file
View File

@@ -0,0 +1,4 @@
{ pkgs, ... }:
{
vulkanHDRLayer = pkgs.callPackage ./vulkan-hdr-layer {};
}

View File

@@ -0,0 +1,34 @@
{ lib, stdenv, fetchFromGitHub, meson, pkg-config, vulkan-loader, ninja, writeText, vulkan-headers, vulkan-utility-libraries, jq, libX11, libXrandr, libxcb, wayland, wayland-scanner }:
stdenv.mkDerivation rec {
pname = "vulkan-hdr-layer";
version = "63d2eec";
src = (fetchFromGitHub {
owner = "Zamundaaa";
repo = "VK_hdr_layer";
rev = "869199cd2746e7f69cf19955153080842b6dacfc";
fetchSubmodules = true;
hash = "sha256-xfVYI+Aajmnf3BTaY2Ysg5fyDO6SwDFGyU0L+F+E3is=";
}).overrideAttrs (_: {
GIT_CONFIG_COUNT = 1;
GIT_CONFIG_KEY_0 = "url.https://github.com/.insteadOf";
GIT_CONFIG_VALUE_0 = "git@github.com:";
});
nativeBuildInputs = [ vulkan-headers meson ninja pkg-config jq ];
buildInputs = [ vulkan-headers vulkan-loader vulkan-utility-libraries libX11 libXrandr libxcb wayland wayland-scanner ];
# Help vulkan-loader find the validation layers
setupHook = writeText "setup-hook" ''
addToSearchPath XDG_DATA_DIRS @out@/share
'';
meta = with lib; {
description = "Layers providing Vulkan HDR";
homepage = "https://github.com/Zamundaaa/VK_hdr_layer";
platforms = platforms.linux;
license = licenses.mit;
};
}

40
roles/audio/default.nix Normal file
View File

@@ -0,0 +1,40 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.audio;
in
{
options.roles.audio = {
enable = mkEnableOption "Enable the audio role";
};
config = mkIf cfg.enable
{
environment.systemPackages = with pkgs; [
paprefs
pavucontrol
pulsemixer
];
services.pipewire = {
enable = true;
pulse.enable = true;
};
services.pulseaudio = {
package = pkgs.pulseaudioFull;
extraConfig = ''
load-module module-combine-sink
load-module module-switch-on-connect
'';
};
services.squeezelite = {
#enable = true;
pulseAudio = true;
};
};
}

View File

@@ -0,0 +1,26 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.bluetooth;
in
{
options.roles.bluetooth = {
enable = mkEnableOption "Enable the bluetooth role";
};
config = mkIf cfg.enable
{
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
hardware.bluetooth.settings = {
General = {
Enable = "Source,Sink,Media,Socket";
};
};
services.blueman.enable = true;
};
}

View File

@@ -1,29 +0,0 @@
{ pkgs, ... }:
{
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
time.timeZone = "America/Los_Angeles";
# Enable the OpenSSH daemon.
services.openssh.enable = true;
services.pipewire = {
enable = true;
pulse.enable = true;
};
environment.systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
git
];
}

88
roles/default.nix Normal file
View File

@@ -0,0 +1,88 @@
{ lib, pkgs, ... }:
with lib;
{
imports = [
./audio
./bluetooth
./desktop
./kodi
./nfs-mounts
./printing
./secrets
./spotifyd
./users
./virtualisation
];
config = {
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
time.timeZone = "America/Los_Angeles";
services.xserver.xkb = {
layout = "us";
variant = "";
options = "caps:escape";
};
# Don't go to emergency mode if we aren't able to mount filesystems.
# This is silly if you have multiple hard drives or partitions
# configured on a machine and then one goes away intentionally or
# unintentionally. If the system is already booting, let it continue
# to try and boot.
systemd.enableEmergencyMode = false;
# Enable the OpenSSH daemon.
services.openssh.enable = true;
environment.systemPackages = with pkgs; [
git
glances
pciutils
tree
usbutils
vim
];
nix = {
package = pkgs.nix;
# distributedBuilds = true;
# buildMachines = [{
# hostName = "z790prors.oglehome";
# system = "x86_64-linux";
# protocol = "ssh-ng";
# sshUser = "johno";
# sshKey = "/root/.ssh/id_ed25519";
# maxJobs = 3;
# speedFactor = 2;
# }];
settings = {
experimental-features = [ "nix-command" "flakes" ];
max-jobs = "auto";
trusted-users = [ "johno" ];
substituters = [
];
};
gc = {
automatic = true;
randomizedDelaySec = "14m";
options = "--delete-older-than 10d";
};
};
nixpkgs.config.allowUnfree = true;
};
}

View File

@@ -1,50 +1,24 @@
{ inputs, x11Only ? false, pkgs, ... }:
{ lib, config, pkgs, ... }:
with lib;
{
services.xserver.xkb = {
layout = "us";
variant = "";
options = "caps:escape";
};
services.xserver.enable = true;
services.xserver.displayManager = {
lightdm.enable = true;
};
services.desktopManager.plasma6.enable = true;
programs.hyprland = {
enable = !x11Only;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
};
services.xserver.windowManager.i3 = {
enable = true;
extraPackages = with pkgs; [
dmenu
i3status
i3lock
];
};
# Helps with i3. Not sure what dconf is though honestly
programs.dconf.enable = true;
options.roles.desktop = {
enable = mkEnableOption "Enable the desktop role.";
programs.kdeconnect.enable = true;
programs.java.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
#package = pkgs.steam.override {
#withJava = true;
#withPrimus = true;
#extraPkgs = pkgs: [ bumblebee glxinfo ];
#};
};
services.sunshine = {
enable = true;
autoStart = true;
capSysAdmin = true;
openFirewall = true;
x11 = mkOption { type = types.bool; default = false; description = "Enable X11 support."; };
wayland = mkOption { type = types.bool; default = false; description = "Enable Wayland support."; };
kde = mkOption { type = types.bool; default = false; description = "Enable KDE."; };
gaming = mkOption { type = types.bool; default = false; description = "Enable gaming support."; };
sddm = mkOption { type = types.bool; default = false; description = "Enable SDDM greeter."; };
};
virtualisation.docker.enable = true;
users.extraGroups.docker.members = [ "johno" ];
imports = [
./x11.nix
./wayland.nix
./gaming.nix
./kde.nix
./programs.nix
./sddm.nix
];
}

18
roles/desktop/gaming.nix Normal file
View File

@@ -0,0 +1,18 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.desktop;
in
{
config = mkIf (cfg.enable && cfg.gaming) {
environment.systemPackages = with pkgs; [
steam
lutris
moonlight
];
# Possibly other gaming specific services or settings
};
}

12
roles/desktop/kde.nix Normal file
View File

@@ -0,0 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.roles.desktop;
in
{
config = mkIf (cfg.enable && cfg.kde) {
services.desktopManager.plasma6.enable = true;
};
}

View File

@@ -0,0 +1,20 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.desktop;
in
{
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
brightnessctl
emacs-nox
moonlight-qt
];
programs.dconf.enable = true;
services.gnome.gnome-keyring.enable = true;
programs.kdeconnect.enable = true;
};
}

15
roles/desktop/sddm.nix Normal file
View File

@@ -0,0 +1,15 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.desktop;
in
{
config = mkIf (cfg.enable && cfg.sddm) {
services.displayManager.sddm = {
enable = true;
wayland.enable = (!cfg.x11 && cfg.wayland);
};
};
}

23
roles/desktop/wayland.nix Normal file
View File

@@ -0,0 +1,23 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.desktop;
in
{
config = mkIf (cfg.enable && cfg.wayland) {
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
};
programs.light.enable = true;
environment.systemPackages = with pkgs; [
grim
slurp
wl-clipboard
mako
];
};
}

19
roles/desktop/x11.nix Normal file
View File

@@ -0,0 +1,19 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.roles.desktop;
in
{
config = mkIf (cfg.enable && cfg.x11) {
services.xserver = {
enable = true;
windowManager.i3 = {
enable = true;
extraPackages = with pkgs; [ dmenu i3status i3lock ];
};
};
};
}

View File

@@ -1,29 +0,0 @@
{ pkgs, ... }:
let
kidsPackages = with pkgs; [
firefox
];
in
{
users.users.eli = {
isNormalUser = true;
description = "Eli";
home = "/home/eli";
packages = kidsPackages;
};
users.users.andrew = {
isNormalUser = true;
description = "Andrew";
home = "/home/andrew";
packages = kidsPackages;
};
users.users.jules = {
isNormalUser = true;
description = "Jules";
home = "/home/jules";
packages = kidsPackages;
};
}

View File

@@ -1,47 +1,54 @@
{ autologin ? false, wayland ? false, lib, pkgs, ... }:
{ config, lib, pkgs, ... }:
with lib;
let
kodiBasePkg = if wayland then pkgs.kodi-wayland else pkgs.kodi;
kodiPkg = kodiBasePkg.withPackages (pkgs: with pkgs; [
jellyfin
steam-launcher
steam-library
youtube
]);
cfg = config.roles.kodi;
in
{
users.extraUsers.kodi.isNormalUser = true;
networking.firewall = {
allowedTCPPorts = [ 8080 ];
allowedUDPPorts = [ 8080 ];
};
services = mkIf autologin {
cage = mkIf wayland {
user = "kodi";
program = "${kodiPkg}/bin/kodi-standalone";
enable = true;
options.roles.kodi = {
enable = mkEnableOption "Enable Kodi";
autologin = mkOption {
default = false;
};
xserver = mkIf (!wayland) {
enable = true;
desktopManager.kodi = {
enable = true;
package = kodiPkg;
};
displayManager.lightdm = {
enable = true;
greeter.enable = false;
};
};
displayManager = mkIf (!wayland) {
autoLogin.enable = true;
autoLogin.user = "kodi";
defaultSession = "kodi";
sessionData.autologinSession = "kodi";
wayland = mkOption {
default = true;
};
};
config = let
kodiBasePkg = if cfg.wayland then pkgs.kodi-wayland else pkgs.kodi;
kodiPkg = kodiBasePkg.withPackages (pkgs: with pkgs; [
jellyfin
steam-launcher
steam-library
youtube
]);
in mkIf cfg.enable
{
users.extraUsers.kodi = {
isNormalUser = true;
extraGroups = [ "wheel" "networkmanager" "audio" "video" ];
};
networking.firewall = {
allowedTCPPorts = [ 8080 ];
allowedUDPPorts = [ 8080 ];
};
environment.systemPackages = with pkgs; [
kodiPkg
wget
];
services = if cfg.autologin then {
displayManager = {
autoLogin.enable = true;
autoLogin.user = "kodi";
defaultSession = "kodi";
sessionData.autologinSession = "plasma";
};
} else {};
};
}

View File

@@ -1,14 +1,31 @@
# TODO: implement requireMount
{ requireMount ? false, ... }:
{ config, lib, ... }:
with lib;
let
cfg = config.roles.nfs-mounts;
in
{
fileSystems."/media" = {
device = "10.0.0.43:/media";
fsType = "nfs";
options = [
"defaults"
"nofail"
"softreval"
];
options.roles.nfs-mounts = {
enable = mkEnableOption "Enable default NFS mounts";
# TODO: implement requireMount
requireMount = mkOption {
type = types.bool;
description = "Hard fail if the NFS mounts are not available";
default = false;
};
};
config = mkIf cfg.enable
{
fileSystems."/media" = {
device = "10.0.0.43:/media";
fsType = "nfs";
options = [
"defaults"
"nofail"
"softreval"
];
};
};
}

View File

@@ -1,29 +0,0 @@
{ config, pkgs, ... }:
{
nix = {
package = pkgs.nixFlakes;
distributedBuilds = true;
buildMachines = [{
hostName = "z790prors.oglehome";
system = "x86_64-linux";
protocol = "ssh-ng";
sshUser = "johno";
sshKey = "/root/.ssh/id_ed25519";
maxJobs = 3;
speedFactor = 2;
}];
settings = {
experimental-features = [ "nix-command" "flakes" ];
max-jobs = "auto";
trusted-users = [ "johno" ];
substituters = [
"https://hyprland.cachix.org"
];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
};
};
nixpkgs.config.allowUnfree = true;
}

View File

@@ -1,4 +1,23 @@
{ ... }:
{ config, lib, ... }:
with lib;
let
cfg = config.roles.printing;
in
{
services.printing.enable = true;
options.roles.printing = {
enable = mkEnableOption "Enable default printing setup";
};
config = mkIf cfg.enable
{
services.printing.enable = true;
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
}

View File

@@ -0,0 +1,8 @@
{ config, lib, pkgs, inputs, ... }:
{
sops.defaultSopsFile = ../../secrets/secrets.yaml;
sops.defaultSopsFormat = "yaml";
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" "/home/johno/.ssh/id_ed25519" ];
sops.secrets.example_key = {};
}

View File

@@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.roles.spotifyd;
in
{
options.roles.spotifyd = {
enable = mkEnableOption "Enable the spotifyd role";
};
config = mkIf cfg.enable
{
roles.audio.enable = true;
services.spotifyd = {
enable = true;
settings = {
global = {
use_mpris = false;
backend = "alsa";
device = "sysdefault";
bitrate = 320;
cache_path = "";
zeroconf_port = 1234;
autoplay = false;
};
};
};
networking.firewall.allowedTCPPorts = [
1234
57621
];
networking.firewall.allowedUDPPorts = [
5353
];
};
}

View File

@@ -1,8 +1,52 @@
{ extraGroups ? [], ... }:
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.roles.users;
in
{
users.users.johno = {
isNormalUser = true;
description = "John Ogle";
extraGroups = [ "wheel" "networkmanager" "audio" ] ++ extraGroups;
options.roles.users = {
enable = mkEnableOption "Enable default users";
extraGroups = mkOption {
default = [];
};
kids = mkOption {
type = types.bool;
default = false;
};
};
config = let
kidsPackages = with pkgs; [
firefox
];
in mkIf cfg.enable {
users.users.johno = {
isNormalUser = true;
description = "John Ogle";
extraGroups = [ "wheel" "networkmanager" "audio" "video" ] ++ cfg.extraGroups;
};
users.users.eli = mkIf cfg.kids {
isNormalUser = true;
description = "Eli";
home = "/home/eli";
packages = kidsPackages;
};
users.users.andrew = mkIf cfg.kids {
isNormalUser = true;
description = "Andrew";
home = "/home/andrew";
packages = kidsPackages;
};
users.users.jules = mkIf cfg.kids {
isNormalUser = true;
description = "Jules";
home = "/home/jules";
packages = kidsPackages;
};
};
}

View File

@@ -1,6 +1,20 @@
{ config, ... }:
{ config, lib, ... }:
with lib;
let
cfg = config.roles.virtualisation;
in
{
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
options.roles.virtualisation = {
enable = mkEnableOption "Enable virtualisation";
};
config = mkIf cfg.enable
{
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
virtualisation.docker.enable = true;
users.extraGroups.docker.members = [ "johno" ];
};
}

48
secrets/secrets.yaml Normal file
View File

@@ -0,0 +1,48 @@
hello: ENC[AES256_GCM,data:5ZpbPx3D8gQc1fOhViUqiCr0zLWYotB+vIBixqTbqP9XLS52y6tr5DXus0aV9mTgka5deqc=,iv:yPJaCqDD9WD56swfBjSm7A62ZTTIQDqyAKOgP1ese+U=,tag:bo8+7Ne2f9aEZSvpkt1fzA==,type:str]
example_key: ENC[AES256_GCM,data:v15bEcb0H3vaj13blg==,iv:9P3IA7ChBamo41VE8G8tj46sZqeijsO1LcvwLtEPVPA=,tag:o/lAyAYYGNLP9EjQNa/K8Q==,type:str]
example_array:
- ENC[AES256_GCM,data:3Vwa7dfNfKzRc/xpk6I=,iv:IevBgxwWdaBvZY1ywteWcfWwDIA8lK3FTWs67lLBKxw=,tag:Mx5lzUeNZ/3wJBWAl5XSBw==,type:str]
- ENC[AES256_GCM,data:epkT6WPGW5Oe/S+4HtU=,iv:N0yoDuieAaEi+NuCoCL4zrkhaDDdkttboI89m+UccjQ=,tag:OoERRByb0OM4un9oGLJQgA==,type:str]
#ENC[AES256_GCM,data:YzMFXxn3sbbHpGB4jPRtRw==,iv:TN6ogQuH7c6xtDoWt0Ew9B2f7wuaipJynvscZmaJYoU=,tag:No0UwEktEyMNBg/46P+Zmg==,type:comment]
example_number: ENC[AES256_GCM,data:jmLoVC+8YIlB2A==,iv:u9GztD/aE9UN5zWq3Am2nhYwmYt3sf8sy65MHbhVoD0=,tag:wKuf1mMr5XBJveJrz0uHPA==,type:float]
example_booleans:
- ENC[AES256_GCM,data:ZacILA==,iv:xo+7aFFQXzbJzKDY0mYTeFLf10AlnHkywDRAMHeprEM=,tag:F/OnJdqjrZP02sTLWLmnbg==,type:bool]
- ENC[AES256_GCM,data:NaFrvrs=,iv:kKDmGs9u/w5qrZ/379Jlx8AotUVADvH+eHwHCqykmkE=,tag:nD9TsmkXUm4ABaT1ABWmcg==,type:bool]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1ls6a033d4p4u8h4rwazjwt8w4c4xg73wq0mdnm64jajxzcz4k9asvjnks3
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjak9vRVJtVmJoanhEZ0hQ
MFJwMEE4UDcrRkdPRmZ6R09FSDY1aTk3Y1dNClZJYXRLNU5senR3Qzh6VmZGMlhu
bnl6VjlaUEFISnBtSTVrcEd0ZjI5Q2MKLS0tIFl1b3A5ZWVqc1gvWVZnZis0ZHFk
bWhnNVB2TUJ4YzY4NHdSVXhPc3dReTgKWRYBbBE3+oGsRNw1CROhFY+btENbShfv
gw3IdW7OoZV6JpJBOcI82eOuOkIxrmgSGDGeyy10/a5MA/cB1umm+w==
-----END AGE ENCRYPTED FILE-----
- recipient: age12l5u7sw59u5pkwp83qm8t3ff7uv0ld2c9k3zh5j4ame9k2szcynqu7ftqe
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGcmV3TDlNL2Zxb0h5QTYx
QkVmczA0MDc2ZnpNNU1YeFVzSXJwc3RWUmk4CjF4bHIrVU9VM3htTUxGZ2FUR256
UEovdVV2cmNIbkloS1VobTNFSDVyRG8KLS0tIEFhUk5kL3hCNGs4MGJBTmNJaVFm
b2ZBUGJ1K0lKTitKYTRUMWszQzhBU0UKBaM6t6JmWfiG+wPorGea1gqvV5RSIPyw
6yb2PcH2oZ0HrjJM5sjfu7XOWY3KneiZZikR1BpD5KvevfagWTSR/w==
-----END AGE ENCRYPTED FILE-----
- recipient: age1fa3zqavfmqk4ssa22yne9td90gyqv9q5a8y0s8jp3xak8q7p3yjqyn7rkg
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaMFJiNjVOb0lTcmJ3VnhH
WlRKZERRZFM3TFZBZGNSZC9GdHlHakMza21zClJ3SDdFUkVRc3oyVVU3WEtDQzBu
OEFqS3NwbHZFUlpCYlN6RW84N0F1amcKLS0tIHFZK21aTHdwZ2dWbVRrWEZDWFZj
aU1IQzdTMVhnbHhsNENwMG05dXhOU2MK8fEJea9sL5JLgltVlTI6mRDb+Tl83Iz7
4wPYvo68cn8vimXqSk45ldHRrNa3zhYai3CalQaGtDT3fkWGvSq0zQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-09-28T15:44:39Z"
mac: ENC[AES256_GCM,data:YUi+AbS6DQTmrSyOXsbkZWfWaMyKGR8fYm/MHcxmqChi8hng+UWHBZjsLBe6ef/FLH3rnP6bhfwK8KYnVS6fHvHahoqIq/BHydTsqrclnSgRAGl8Lh0yuhwISNRvP1AuW5pd50sdQaS0uGOtzOCharI/pZ9H+cmt2SB5WOCdeLs=,iv:2nBG6it3tNSLSia8hGzCcesuK9QwzB9EzfjWegjQ2kw=,tag:RGGPAPw/rQKhWA2OqLjTJw==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.0