Compare commits

...

92 Commits

Author SHA1 Message Date
2d09cfeea1 openrgb 2025-11-27 02:18:43 -06:00
892ae40180 weird 2025-11-23 17:29:03 -06:00
4a1cd4804d default 2025-11-23 17:27:21 -06:00
31fa6033b0 once more 2025-11-23 16:50:07 -06:00
b88445e529 set graphical 2025-11-23 16:43:30 -06:00
e3597c147a no desktop for server 2025-11-23 16:34:22 -06:00
e1e1b316cf bar 2025-11-13 19:27:26 -06:00
184e939bb6 only use domains you own publicly dummy 2025-11-13 19:26:40 -06:00
103c8e803a quickshell work 2025-11-09 18:02:29 -06:00
160ae56e03 quickshell 2025-11-08 12:24:02 -06:00
d178e340b4 no option 2025-11-08 12:24:02 -06:00
e2ec5cae11 uninclude 2025-11-08 12:24:02 -06:00
d9261385de packages 2025-11-08 12:24:02 -06:00
b0c84b9b27 no option 2025-11-08 12:24:02 -06:00
d036eb2512 include 2025-11-08 12:24:02 -06:00
83f48b3403 fix 2025-11-08 12:22:32 -06:00
9d56a9bd10 change domain name 2025-11-08 12:22:32 -06:00
86272d668d start on quickshell 2025-10-16 17:11:21 -05:00
7f224bd6fc finish later 2025-10-08 17:25:39 -05:00
3d0bd560fb fix bar colors 2025-09-17 10:21:26 -05:00
214c833821 dont include the directory 2025-09-16 12:45:51 -05:00
8e519e9ad1 conflicting binds 2025-09-16 12:10:34 -05:00
a706f7c5cb new Wallpaper 2025-09-16 11:46:39 -05:00
f49edaf975 bind for wallpaper 2025-09-16 11:44:28 -05:00
8545cccd46 tested 2025-09-16 11:42:16 -05:00
6e28e26d5a tested 2025-09-16 10:39:44 -05:00
538b6051e2 no quotes 2025-09-16 10:21:33 -05:00
91f6c637de scripts 2025-09-16 10:08:03 -05:00
0280315031 interpolate 2025-09-16 09:32:03 -05:00
54dd1d2321 escape 2025-09-16 08:50:27 -05:00
7d77da5619 fix 2025-09-16 00:59:15 -05:00
668e6117fd big hyprland changes 2025-09-15 22:35:05 -05:00
9cb4e51316 manage wallpaper without hyprpanel 2025-09-10 12:44:40 -05:00
43fde8741b fix 2025-09-10 12:22:58 -05:00
feec4dd416 try no systemd 2025-09-10 12:08:48 -05:00
9a1a025ec9 no extra desktops 2025-09-10 10:25:41 -05:00
20731b35ca fix 2025-09-10 10:20:05 -05:00
784a783fff no unstable 2025-09-09 09:33:54 -05:00
65f7cad037 use wifi dummy 2025-09-09 09:04:13 -05:00
bd1cfad6f9 try 2025-09-08 18:47:49 -05:00
154dd13425 no unstable server 2025-09-08 18:33:04 -05:00
504ae33109 option 2025-09-08 18:20:44 -05:00
d07fbe229b dont include pihole 2025-09-08 18:18:43 -05:00
632362235b update 2025-09-08 14:14:12 -05:00
9e11e7cb70 hypridle 2025-09-08 14:09:00 -05:00
0829506111 unstable 2025-09-08 14:07:00 -05:00
ee6893038a try unstable 2025-09-08 13:39:49 -05:00
02156b877e no idle 2025-09-08 10:35:07 -05:00
64a2588a11 fix 2025-09-07 21:51:02 -05:00
b9d3b14b23 stuff 2025-09-07 21:34:45 -05:00
f17ac4ce4f user service 2025-09-07 21:09:49 -05:00
bce5fdf68a force no idle 2025-09-07 21:06:00 -05:00
bd1323c2d8 package 2025-09-07 14:45:01 -05:00
5ad050b056 do NOT idle! 2025-09-07 14:39:01 -05:00
d4a11b9ba2 fix 2025-09-06 23:41:07 -05:00
86f16a2394 openwebui 2025-09-06 23:30:14 -05:00
35fa4a55da script better 2025-09-05 12:15:56 -05:00
bb9f3f390f update 2025-09-04 20:44:44 -05:00
e2de1c34e3 function 2025-09-04 20:28:30 -05:00
6f7f078dd9 fix 2025-09-04 20:27:11 -05:00
8e3092fc0f bind 2025-09-03 17:28:42 -05:00
f5ba6bf991 help 2025-09-03 14:42:44 -05:00
2cd6e41686 pkexec 2025-09-03 13:00:26 -05:00
0a87520fe7 not relative to current system 2025-09-03 12:33:23 -05:00
c5f1cb3624 sudo 2025-09-03 10:28:22 -05:00
1520b9872b scratchpad name 2025-09-02 12:47:12 -05:00
6fba3fd698 lf 2025-09-02 12:35:45 -05:00
cf67655b3d only finegrained with offload 2025-09-01 18:54:23 -05:00
e441f92216 fine 2025-09-01 18:51:48 -05:00
bf5df9d23a try 2025-09-01 18:48:38 -05:00
4a79ac63d7 try open nvidia drivers 2025-09-01 18:42:08 -05:00
f7c4059445 specialize 2025-09-01 17:45:31 -05:00
cbd4b177ba try 2025-09-01 07:34:52 -05:00
97a62eaa24 live 2025-08-31 22:01:30 -05:00
eeb29a80f4 fix 2025-08-31 21:42:27 -05:00
6b98345a97 work on live 2025-08-31 14:53:21 -05:00
c3457da03c prepare live 2025-08-31 14:07:21 -05:00
85c96cd78b scripts 2025-08-31 13:27:12 -05:00
9698873c0b fonts please 2025-08-31 10:07:36 -05:00
6be91c5617 shutdown behavior 2025-08-31 09:38:48 -05:00
32d95647f8 this should work 2025-08-30 23:39:52 -05:00
c811e4d4df font 2025-08-30 23:11:03 -05:00
4eeed736ad spellcheck 2025-08-30 21:13:09 -05:00
325e4c63d5 fonts please 2025-08-30 21:09:52 -05:00
6474b10e9f sddm theme 2025-08-30 15:42:34 -05:00
0ce461f34d syntax 2025-08-30 13:32:09 -05:00
bb3d875d77 hyprland config 2025-08-30 13:22:25 -05:00
fcd33c7924 test iso 2025-08-30 10:11:07 -05:00
dc6c5ed8d4 test iso 2025-08-30 09:40:43 -05:00
f850d4ff1a try cosmic 2025-08-29 20:35:43 -05:00
b52c8dff65 pkg 2025-08-28 23:48:07 -05:00
1ca0f169fb more things 2025-08-28 23:44:50 -05:00
71 changed files with 2089 additions and 626 deletions

View File

@@ -15,6 +15,10 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *laptop - *laptop
- path_regex: live/secrets.yaml$
key_groups:
- age:
- *laptop
- path_regex: nathan/secrets.yaml$ - path_regex: nathan/secrets.yaml$
key_groups: key_groups:
- age: - age:

114
flake.lock generated
View File

@@ -20,11 +20,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755632680, "lastModified": 1755946532,
"narHash": "sha256-EjaD8+d7AiAV2fGRN4NTMboWDwk8szDfwbzZ8DL1PhQ=", "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "50637ed23e962f0db294d6b0ef534f37b144644b", "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -40,11 +40,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756115622, "lastModified": 1757255839,
"narHash": "sha256-iv8xVtmLMNLWFcDM/HcAPLRGONyTRpzL9NS09RnryRM=", "narHash": "sha256-XH33B1X888Xc/xEXhF1RPq/kzKElM0D5C9N6YdvOvIc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "bafad29f89e83b2d861b493aa23034ea16595560", "rev": "c8a0e78d86b12ea67be6ed0f7cae7f9bfabae75a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -61,11 +61,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1756181002, "lastModified": 1757304222,
"narHash": "sha256-bPChgpfVqZQxkX0sqFVypO4CFu+swVqqgWySHWK+1wc=", "narHash": "sha256-s070stByAXxeCLgftTXxFxZ2ynJhghne4Y6cTuqGAaw=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "3cb5445c6a575cf7ece61678449bee89eec864d7", "rev": "fa312c0175ffb82bc67da095439b9cb683ac52bd",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@@ -212,11 +212,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755928099, "lastModified": 1756679287,
"narHash": "sha256-OILVkfhRCm8u18IZ2DKR8gz8CVZM2ZcJmQBXmjFLIfk=", "narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "4a44fb9f7555da362af9d499817084f4288a957f", "rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -226,27 +226,6 @@
"type": "github" "type": "github"
} }
}, },
"home-manager-us": {
"inputs": {
"nixpkgs": [
"nixpkgs-us"
]
},
"locked": {
"lastModified": 1756022458,
"narHash": "sha256-J1i35r4HfNDdPpwL0vOBaZopQudAUVtartEerc1Jryc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "9e3a33c0bcbc25619e540b9dfea372282f8a9740",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "home-manager",
"type": "github"
}
},
"hyprcursor": { "hyprcursor": {
"inputs": { "inputs": {
"hyprlang": [ "hyprlang": [
@@ -292,11 +271,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754305013, "lastModified": 1756891319,
"narHash": "sha256-u+M2f0Xf1lVHzIPQ7DsNCDkM1NYxykOSsRr4t3TbSM4=", "narHash": "sha256-/e6OXxzbAj/o97Z1dZgHre4bNaVjapDGscAujSCQSbI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "4c1d63a0f22135db123fc789f174b89544c6ec2d", "rev": "621e2e00f1736aa18c68f7dfbf2b9cff94b8cc4d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -321,11 +300,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1756069181, "lastModified": 1757322502,
"narHash": "sha256-FPur4yuDwzM9uHhPFJW6KD3Xys5fz0xmRmZqFfWQD3Y=", "narHash": "sha256-/91c40cXye2No6YQZcoXaMcIDqGkdE0hmRPC4SSTlRU=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "0ed880f3f7dc2c746bf3590eee266c010d737558", "rev": "b619f39555b96c70330f4a933dedde7e897e0d81",
"revCount": 6393, "revCount": 6413,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -445,11 +424,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753622892, "lastModified": 1756810301,
"narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", "narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", "rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -470,11 +449,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755416120, "lastModified": 1756117388,
"narHash": "sha256-PosTxeL39YrLvCX5MqqPA6NNWQ4T5ea5K55nmN7ju9Q=", "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "e631ea36ddba721eceda69bfee6dd01068416489", "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -571,11 +550,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1756001439, "lastModified": 1757296734,
"narHash": "sha256-IdIgQP6nfHgzn+pRSzm+mHiU0mwbQvOmusv+LrpSBrk=", "narHash": "sha256-NRkbte52DMPcDbWEM823CJSApImXLIzRmWCKMMhYVbA=",
"owner": "Infinidoge", "owner": "Infinidoge",
"repo": "nix-minecraft", "repo": "nix-minecraft",
"rev": "3a015545c12704bdeca89f3e77cacc68acd3ddb1", "rev": "e2915ee5edd4da1fa076ba155f1d539be78340fb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -613,11 +592,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1755186698, "lastModified": 1757068644,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c", "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -676,11 +655,11 @@
}, },
"nixpkgs-us": { "nixpkgs-us": {
"locked": { "locked": {
"lastModified": 1756125398, "lastModified": 1762363567,
"narHash": "sha256-XexyKZpf46cMiO5Vbj+dWSAXOnr285GHsMch8FBoHbc=", "narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3b9f00d7a7bf68acd4c4abb9d43695afb04e03a5", "rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -708,11 +687,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1755922037, "lastModified": 1757244434,
"narHash": "sha256-wY1+2JPH0ZZC4BQefoZw/k+3+DowFyfOxv17CN/idKs=", "narHash": "sha256-AeqTqY0Y95K1Fgs6wuT1LafBNcmKxcOkWnm4alD9pqM=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b1b3291469652d5a2edb0becc4ef0246fff97a7c", "rev": "092c565d333be1e17b4779ac22104338941d913f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -761,17 +740,17 @@
"nixvim": "nixvim_2" "nixvim": "nixvim_2"
}, },
"locked": { "locked": {
"lastModified": 1755754251, "lastModified": 1760575893,
"narHash": "sha256-objBSkdkrn6BpQ1mH1tkvXmipfJ+mONHuydefPhdNSs=", "narHash": "sha256-u6eyhxtlxgG29uI2VCSt5Ir6/BW9hkhglCTfbJ14Hgg=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "3ba1175ea9cdff79caf368460919af740480fe26", "rev": "bcc5185ef433a77b18f5aa585ee79d97f9a8e69c",
"revCount": 33, "revCount": 36,
"type": "git", "type": "git",
"url": "ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/Moirai" "url": "ssh://gitea@gitea.esotericbytes.com/Blunkall-Technologies/Moirai"
}, },
"original": { "original": {
"type": "git", "type": "git",
"url": "ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/Moirai" "url": "ssh://gitea@gitea.esotericbytes.com/Blunkall-Technologies/Moirai"
} }
}, },
"nixvim_2": { "nixvim_2": {
@@ -867,11 +846,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755446520, "lastModified": 1757239681,
"narHash": "sha256-I0Ok1OGDwc1jPd8cs2VvAYZsHriUVFGIUqW+7uSsOUM=", "narHash": "sha256-E9spYi9lxm2f1zWQLQ7xQt8Xs2nWgr1T4QM7ZjLFphM=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "4b04db83821b819bbbe32ed0a025b31e7971f22e", "rev": "ab82ab08d6bf74085bd328de2a8722c12d97bd9d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -885,7 +864,6 @@
"disko": "disko", "disko": "disko",
"firefox-addons": "firefox-addons", "firefox-addons": "firefox-addons",
"home-manager": "home-manager", "home-manager": "home-manager",
"home-manager-us": "home-manager-us",
"hyprland": "hyprland", "hyprland": "hyprland",
"nix-minecraft": "nix-minecraft", "nix-minecraft": "nix-minecraft",
"nix-on-droid": "nix-on-droid", "nix-on-droid": "nix-on-droid",

View File

@@ -3,23 +3,14 @@
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
#nixpkgs.url = "git+ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/nixpkgs?ref=nixos-24.11";
nixpkgs-us.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-us.url = "github:nixos/nixpkgs/nixos-unstable";
#nixpkgs-us.url = "git+ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/nixpkgs?ref=nixos-unstable";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-25.05"; url = "github:nix-community/home-manager/release-25.05";
#url = "git+ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/home-manager?ref=release-24.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
home-manager-us = {
url = "github:nix-community/home-manager/master";
#url = "git+ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/home-manager?ref=release-24.11";
inputs.nixpkgs.follows = "nixpkgs-us";
};
nix-on-droid = { nix-on-droid = {
url = "github:nix-community/nix-on-droid"; url = "github:nix-community/nix-on-droid";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -47,15 +38,15 @@
#simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.05"; #simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.05";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
#hyprland.url = "git+ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/hyprland?submodules=1";
nixvim.url = "git+ssh://gitea@gitea.blunkall.us/Blunkall-Technologies/Moirai"; #nixvim.url = "git+https://gitea.esotericbytes.com/Blunkall-Technologies/Moirai";
#nixvim.url = "git+https://gitea.blunkall.us/Blunkall-Technologies/Moirai"; nixvim.url = "git+ssh://gitea@gitea.esotericbytes.com/Blunkall-Technologies/Moirai";
}; };
outputs = { self, nixpkgs, home-manager, ... } @ inputs: { outputs = { self, nixpkgs, home-manager, ... } @ inputs: {
nixosConfigurations = { nixosConfigurations = {
homebox = nixpkgs.lib.nixosSystem { homebox = nixpkgs.lib.nixosSystem {
@@ -101,7 +92,9 @@
system = "aarch64-linux"; system = "aarch64-linux";
specialArgs = { specialArgs = {
inputs = inputs // { inputs = inputs // {
nathan-home-manager = import ./home-manager/users/nathan; nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
}; };
}; };
modules = [ modules = [
@@ -113,7 +106,9 @@
live = nixpkgs.lib.nixosSystem { live = nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {
inputs = inputs // { inputs = inputs // {
nathan-home-manager = import ./home-manager/users/nathan; nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
}; };
}; };
modules = [ modules = [
@@ -125,11 +120,28 @@
container = nixpkgs.lib.nixosSystem { container = nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {
inputs = inputs // { inputs = inputs // {
nathan-home-manager = import ./home-manager/users/nathan; nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
}; };
}; };
modules = [ modules = [
./system-config/configuration/sandbox-nathan ./system-config/configuration/containers/nathan
./system-config
];
};
iso = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inputs = inputs // {
nathan = import ./home-manager/users/nathan;
home-manager-config = import ./home-manager;
inherit self;
};
};
modules = [
./system-config/configuration/iso
./system-config ./system-config
]; ];
}; };
@@ -176,5 +188,7 @@
}; };
}; };
}; };
iso = self.nixosConfigurations.iso.config.system.build.isoImage;
}; };
} }

View File

@@ -15,6 +15,18 @@
pyprland pyprland
]; ];
home.activation.extraHyprFile = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ]]; then
touch ${config.home.homeDirectory}/.config/hypr/otf.conf
fi
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
cp ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ${config.home.homeDirectory}/.config/background
chmod 600 ${config.home.homeDirectory}/.config/background
fi
'';
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
@@ -24,9 +36,9 @@
variables = [ "--all" ]; variables = [ "--all" ];
}; };
extraConfig = let extraConfig = (if config.homeconfig.host == "laptop" then ''
monitor = if config.homeconfig.host == "laptop" then '' bind = CTRL SHIFT, XF86Launch2, exec, bash -c 'if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then pkexec --user root /nix/var/nix/profiles/system/bin/switch-to-configuration switch; else pkexec --user root /nix/var/nix/profiles/system/specialisation/docked/bin/switch-to-configuration switch; fi'
monitor=eDP-1,1920x1080@300,0x0,1 bind = ALT, Escape, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi
'' else if config.homeconfig.host == "homebox" then '' '' else if config.homeconfig.host == "homebox" then ''
monitor=HDMI-A-2,1920x1080@60,0x0,1 monitor=HDMI-A-2,1920x1080@60,0x0,1
monitor=HEADLESS-2,1920x1080@60,0x0,1 monitor=HEADLESS-2,1920x1080@60,0x0,1
@@ -37,9 +49,16 @@
monitor=HEADLESS-2,1920x1080@60,0x0,1 monitor=HEADLESS-2,1920x1080@60,0x0,1
exec-once=hyprctl output create headless HEADLESS-2 exec-once=hyprctl output create headless HEADLESS-2
exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2 exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2
'' else ''''; '' else ''
in monitor + '' monitor= , prefered, auto, 1
source = /home/nathan/.config/hypr/main.conf '') + (if config.homeconfig.hyprpanel.enable then ''
bind = , Print, exec, bash -c ${pkgs.hyprpanel}/share/scripts/screenshot.sh"
'' else ''
bind = , Print, exec, grim -g "$(slurp)"
'') + ''
source = ${config.home.homeDirectory}/.config/hypr/main.conf
exec-shutdown = if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid; fi
''; '';
}; };

View File

@@ -13,6 +13,40 @@
services.hypridle = { services.hypridle = {
enable = true; enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl --instance 0 dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
};
listener = [
{
timeout = 150; # 2.5min.
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r"; # monitor backlight restore.
}
{
timeout = 300; # 5min
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
}
{
timeout = 330; # 5.5min
on-timeout = "hyprctl --instance 0 dispatch dpms off"; # screen off when timeout has passed
on-resume = "hyprctl --instance 0 dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
}
{
timeout = 1800; # 30min
on-timeout = "systemctl suspend"; # suspend pc
}
];
};
}; };
}; };
} }

View File

@@ -9,7 +9,6 @@
programs.hyprpanel = { programs.hyprpanel = {
enable = true; enable = true;
}; };
}; };
} }

View File

@@ -5,6 +5,7 @@
./bash ./bash
./eza ./eza
./fzf ./fzf
./lf
./tmux ./tmux
./kitty ./kitty
./zoxide ./zoxide

View File

@@ -0,0 +1,7 @@
{ ... }: {
config = {
programs.lf = {
enable = true;
};
};
}

View File

Before

Width:  |  Height:  |  Size: 1007 KiB

After

Width:  |  Height:  |  Size: 1007 KiB

View File

@@ -1,27 +0,0 @@
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl --instance 0 dispatch dpms on # to avoid having to press a key twice to turn on the display.
}
listener {
timeout = 150 # 2.5min.
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = brightnessctl -r # monitor backlight restore.
}
listener {
timeout = 300 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
listener {
timeout = 330 # 5.5min
on-timeout = hyprctl --instance 0 dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl --instance 0 dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
}
listener {
timeout = 1800 # 30min
on-timeout = systemctl suspend # suspend pc
}

View File

@@ -15,12 +15,12 @@ exec-once=onSystemStart
# Some default env vars. # Some default env vars.
env = XCURSOR_SIZE,16 env = XCURSOR_SIZE,16
source = ~/Projects/Olympus/home-manager/users/nathan/dotfiles/hypr/otf.conf source = ~/.config/hypr/otf.conf
source = ~/.cache/wal/colors-hypr.conf source = ~/.cache/wal/colors-hypr.conf
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ # For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input { input {
kb_layout = us kb_layout = us,jp
kb_variant = kb_variant =
kb_model = kb_model =
kb_options = kb_options =
@@ -48,7 +48,7 @@ general {
col.active_border = $color1 $color5 100deg col.active_border = $color1 $color5 100deg
col.inactive_border = $color0 col.inactive_border = $color0
layout = dwindle layout = master
} }
decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more
@@ -101,12 +101,19 @@ gestures {
misc { misc {
disable_hyprland_logo = false disable_hyprland_logo = false
disable_splash_rendering = true disable_splash_rendering = true
force_default_wallpaper = 2 force_default_wallpaper = 0
}
ecosystem {
no_update_news = true
no_donation_nag = true
} }
# Binds # Binds
$mainMod = ALT $mainMod = ALT
bind = CTRL SHIFT, H, exec, colorPrefix kitty -e 'bash -c "hyprctl binds | less"'
bind = $mainMod SHIFT, E, exec, colorPrefix kitty bind = $mainMod SHIFT, E, exec, colorPrefix kitty
bind = $mainMod, B, exec, firefox bind = $mainMod, B, exec, firefox
@@ -119,28 +126,26 @@ bind = $mainMod, R, exec, colorPrefix kitty -e _systemRebuild
bind = $mainMod SHIFT, R, exec, colorPrefix kitty -e _homeRebuild bind = $mainMod SHIFT, R, exec, colorPrefix kitty -e _homeRebuild
bind = $mainMod, C, exec, colorPrefix kitty -e bash -c "cd ~/Projects/Olympus; nvim ~/Projects/Olympus/"
bind = $mainMod, F, exec, thunar bind = $mainMod, F, exec, thunar
bind = $mainMod SHIFT, F, fullscreen bind = $mainMod SHIFT, F, fullscreen
bind = $mainMod, semicolon, exec, colorPrefix kitty -e nvim ~ bind = $mainMod SHIFT, semicolon, exec, colorPrefix kitty -e lf
bind = $mainMod, Insert, exec, libreoffice & bind = $mainMod, Insert, exec, libreoffice
bind = $mainMod, H, exec, bluetoothctl connect 88:D0:39:F9:83:CE
bind = $mainMod, V, togglefloating, bind = $mainMod, V, togglefloating,
bind = $mainMod SHIFT, V, exec, vlc & bind = $mainMod SHIFT, V, exec, vlc
bind = , Menu, exec, rofi -show drun bind = , Menu, exec, rofi -show drun
bind = $mainMod, Menu, exec, killall .ags-wrapped; ags & bind = $mainMod, Menu, exec, hyprpanel -q; hyprpanel
bind = $mainMod, P, pseudo, # dwindle #bind = $mainMod, P, pseudo, # dwindle
#bind = $mainMod, Z, togglesplit, # dwindle
bind = $mainMod, Z, togglesplit, # dwindle bind = $mainMod, N, layoutmsg, rollnext # master
bind = $mainMod, P, layoutmsg, rollprev # master
bind = $mainMod, M, exec, spotify bind = $mainMod, M, exec, spotify
@@ -158,25 +163,24 @@ bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86Launch2, exec, steam & bind = , XF86Launch2, exec, steam
bind = $mainMod, XF86Launch2, exec, prismlauncher bind = $mainMod, XF86Launch2, exec, prismlauncher
bind = CTRL SHIFT, XF86Launch2, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi
bind = , XF86Calculator, exec, geogebra bind = , XF86Calculator, exec, geogebra
bind = $mainMod SHIFT, Print, exec, firefox localhost:631 bind = $mainMod SHIFT, Print, exec, firefox localhost:631
bind = , Print, exec, grim -g "$(slurp)"
bind = $mainMod, Return, exec, discord --enable-features=UseOzonePlatform --ozone-platform=wayland & bind = $mainMod, Return, exec, discord --enable-features=UseOzonePlatform --ozone-platform=wayland
bind = $mainMod CTRL, Return, exec, firefox https://discord.com/app bind = $mainMod CTRL, Return, exec, firefox https://discord.com/app
bind = , Home, exec, setWallpaper
# Move focus with mainMod + arrow keys # Move focus with mainMod + arrow keys
bind = $mainMod, H, movefocus, l bind = $mainMod, W, movefocus, u
bind = $mainMod, L, movefocus, r bind = $mainMod, A, movefocus, l
bind = $mainMod, J, movefocus, u bind = $mainMod, S, movefocus, d
bind = $mainMod, K, movefocus, d bind = $mainMod, D, movefocus, r
# Switch workspaces with mainMod + [0-9] # Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1 bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2 bind = $mainMod, 2, workspace, 2
@@ -209,6 +213,24 @@ bind = $mainMod SHIFT, Home, movetoworkspace, 11
bind = $mainMod, right, workspace, e+1 bind = $mainMod, right, workspace, e+1
bind = $mainMod, left, workspace, e-1 bind = $mainMod, left, workspace, e-1
bind = $mainMod, H, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod, H, workspace, e-1
bind = $mainMod, J, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod, J, workspace, e+1
bind = $mainMod, K, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod, K, workspace, e-1
bind = $mainMod, L, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod, L, workspace, e+1
bind = $mainMod SHIFT, H, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod SHIFT, H, movetoworkspace, e-1
bind = $mainMod SHIFT, J, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod SHIFT, J, movetoworkspace, e+1
bind = $mainMod SHIFT, K, exec, hyprctl keyword animation workspaces,1,6,default,slidevert
bind = $mainMod SHIFT, K, movetoworkspace, e-1
bind = $mainMod SHIFT, L, exec, hyprctl keyword animation workspaces,1,6,default
bind = $mainMod SHIFT, L, movetoworkspace, e+1
#switch network connections #switch network connections
bind = CTRL SHIFT, Escape, exec, nmcli device down wlo1 bind = CTRL SHIFT, Escape, exec, nmcli device down wlo1
bind = CTRL SHIFT, 0, exec, nmcli connection up Hotspot bind = CTRL SHIFT, 0, exec, nmcli connection up Hotspot
@@ -234,33 +256,34 @@ bind = CTRL ALT, Delete, exec, loginctl kill-session self
# Move/resize windows with mainMod + LMB/RMB and dragging # Move/resize windows with mainMod + LMB/RMB and dragging
bind = $mainMod SHIFT, J, movewindow, u bind = $mainMod SHIFT, W, movewindow, u
bind = $mainMod SHIFT, K, movewindow, d bind = $mainMod SHIFT, A, movewindow, l
bind = $mainMod SHIFT, H, movewindow, l bind = $mainMod SHIFT, S, movewindow, d
bind = $mainMod SHIFT, L, movewindow, r bind = $mainMod SHIFT, D, movewindow, r
bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod SHIFT, mouse:272, resizewindow bindm = $mainMod SHIFT, mouse:272, resizewindow
$scratchpadsize = size 60% 80% $scratchpadsize = size 60% 80%
$scratchpad = class:^(scratchpad)$
windowrulev2 = float, $scratchpad
windowrulev2 = $scratchpadsize, $scratchpad
windowrulev2 = workspace special silent, $scratchpad
$kitty = class:^(scratchpad-kitty)$ $kitty = class:^(scratchpad-kitty)$
windowrulev2 = float, $kitty windowrulev2 = float, $kitty
windowrulev2 = $scratchpadsize, $kitty windowrulev2 = $scratchpadsize, $kitty
windowrulev2 = workspace special silent, $kitty windowrulev2 = workspace special silent, $kitty
$nvim = class:^(scratchpad-nvim)$
windowrulev2 = float, $nvim $lf = class:^(scratchpad-lf)$
windowrulev2 = $scratchpadsize, $nvim windowrulev2 = float, $lf
windowrulev2 = workspace special silent, $nvim windowrulev2 = $scratchpadsize, $lf
windowrulev2 = workspace special silent, $lf
bind = $mainMod, N, exec, colorPrefix pypr toggle nvim $cal = class:^(scratchpad-cal)$
bind = $mainMod, E, exec, colorPrefix pypr toggle free windowrulev2 = float, $cal
windowrulev2 = $scratchpadsize, $cal
windowrulev2 = workspace special silent, $cal
bind = $mainMod, semicolon, exec, colorPrefix pypr toggle lf
bind = $mainMod, E, exec, colorPrefix pypr toggle kitty
bind = $mainMod, C, exec, colorPrefix pypr toggle calendar
bind = CTRL SHIFT, Home, exec, ssh nathan@blunkall.us -fL 5900:localhost:5900 sleep 10; vncviewer localhost:5900 -fullscreen bind = CTRL SHIFT, Home, exec, ssh nathan@blunkall.us -fL 5900:localhost:5900 sleep 10; vncviewer localhost:5900 -fullscreen

View File

@@ -1,21 +1,30 @@
[pyprland] [pyprland]
plugins = [ plugins = [
"scratchpads" "scratchpads"
] ]
[scratchpads.nvim] [scratchpads.lf]
animation = "fromTop" animation = "fromTop"
command = "kitty --class scratchpad-nvim -e nvim ~/Projects" command = "kitty --class scratchpad-lf -e lf ~"
lazy = false lazy = false
class = "scratchpad-nvim" class = "scratchpad-lf"
margin = 100 margin = 100
multi = true multi = true
excludes = "*" excludes = "*"
[scratchpads.free] [scratchpads.kitty]
animation = "fromBottom" animation = "fromBottom"
command = "kitty --class scratchpad -e tmux" command = "kitty --class scratchpad-kitty -e tmux"
class = "scratchpad" class = "scratchpad-kitty"
lazy = false
margin = 100
multi = true
excludes = "*"
[scratchpads.calendar]
animation = "fromTop"
command = "kitty --class scratchpad-cal -e calcurse"
class = "scratchpad-cal"
lazy = false lazy = false
margin = 100 margin = 100
multi = true multi = true

View File

@@ -3,7 +3,7 @@
"theme.font.label": "FiraCode Nerd Font Mono Medium", "theme.font.label": "FiraCode Nerd Font Mono Medium",
"theme.bar.floating": true, "theme.bar.floating": true,
"bar.layouts": { "bar.layouts": {
"0": { "*": {
"left": [ "left": [
"dashboard", "dashboard",
"workspaces", "workspaces",
@@ -28,47 +28,18 @@
"notifications", "notifications",
"power" "power"
] ]
},
"1": {
"left": [
"dashboard",
"workspaces",
"windowtitle"
],
"middle": [
"media"
],
"right": [
"volume",
"clock",
"notifications"
]
},
"2": {
"left": [
"dashboard",
"workspaces",
"windowtitle"
],
"middle": [
"media"
],
"right": [
"volume",
"clock",
"notifications"
]
} }
}, },
"theme.bar.opacity": 50, "theme.bar.opacity": 50,
"wallpaper.image": "/nix/store/ph7zbz3pfc1z3yr8blyp2gvmpd111hnm-hm_Wallpaper/bluescape.jpg", "wallpaper.image": "/tmp/nathan/bg",
"wallpaper.enable": true, "wallpaper.enable": false,
"theme.matugen_settings.scheme_type": "content", "theme.matugen_settings.scheme_type": "content",
"theme.matugen_settings.variation": "standard_2", "theme.matugen_settings.variation": "standard_2",
"theme.matugen": true, "theme.matugen": true,
"bar.launcher.autoDetectIcon": true, "bar.launcher.autoDetectIcon": true,
"bar.network.truncation_size": 10, "bar.network.truncation_size": 10,
"bar.bluetooth.label": false, "bar.bluetooth.label": false,
"bar.clock.showIcon": false,
"bar.clock.format": "%A %H:%M:%S %m/%d/%C%y", "bar.clock.format": "%A %H:%M:%S %m/%d/%C%y",
"bar.notifications.show_total": true, "bar.notifications.show_total": true,
"bar.notifications.hideCountWhenZero": true, "bar.notifications.hideCountWhenZero": true,
@@ -91,4 +62,4 @@
"bar.workspaces.ignored": "-\\d+", "bar.workspaces.ignored": "-\\d+",
"menus.clock.time.military": true, "menus.clock.time.military": true,
"menus.clock.weather.enabled": false "menus.clock.weather.enabled": false
} }

View File

@@ -0,0 +1,37 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell
Item {
implicitWidth: t.contentWidth + 10
implicitHeight: 30
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Text {
id: t
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: {
if(hws.toplevels.values.length > 0) {
return Hyprland.activeToplevel.title
} else {
return " Desktop"
}
}
property HyprlandWorkspace hws: Hyprland.focusedWorkspace
onHwsChanged: {
Hyprland.refreshToplevels()
Hyprland.refreshWorkspaces()
}
font.pointSize: 11
}
}
}

View File

@@ -0,0 +1,170 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Wayland
PanelWindow {
anchors {
top: true
//left: true
//right: true
//bottom: true
}
id: bar
exclusionMode: ExclusionMode.Ignore
WlrLayershell.layer: WlrLayer.Background
color: "#a0706050"
implicitHeight: 40
implicitWidth: 1900
/*RowLayout {
width: bar.width
}*/
RowLayout {
//Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
id: left
x: 0
y: parent.y + (parent.height - height) / 2
//width: center.x
spacing: 0
Launcher {
id: l
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.preferredWidth: width
Layout.margins: 5
}
Workspaces {
id: ws
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
}
/*ActiveWindow {
id: aw
Layout.margins: 5
Layout.maximumWidth: Math.min(implicitWidth, center.x - (parent.x + x + Layout.margins))
}*/
}
RowLayout {
//Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
id: center
x: (parent.width - cl.width) / 2 + parent.x - centerLeft.width
//y: parent.y + (parent.height - height) / 2
y: parent.y + (parent.height - height) / 2
spacing: 0
RowLayout {
id: centerLeft
spacing: 0
Volume {
id: v
window: bar
popupOffset: center.x
Layout.margins: 5
}
Battery {
id: bat
window: bar
popupOffset: center.x
Layout.margins: 5
}
Hyprsunset {
id: hs
Layout.margins: 5
}
}
Clock {
id: cl
Layout.margins: 5
}
IdleInhibitor {
id: ii
Layout.margins: 5
}
Wifi {
id: wifi
window: bar
Layout.margins: 5
}
Bluetooth {
id: bt
window: bar
popupOffset: center.x + center.width
Layout.margins: 5
}
}
RowLayout {
//Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
id: right
//implicitWidth: bar.width - (spacer.x + spacer.width)
x: bar.width - implicitWidth
y: parent.y + (parent.height - height) / 2
//Layout.maximumWidth: bar.width - (center.x + center.width)
//Layout.preferredWidth: 10
spacing: 0
Media {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
id: media
implicitWidth: Math.min(textWidth, bar.width - (righter.width) - (center.x + center.width) - 10)
Layout.margins: 5
}
RowLayout {
id: righter
spacing: 0
Tray {
id: tray
window: bar
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
popupOffset: right.x + righter.x + x
}
Notifications {
id: notif
window: bar
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
}
Power {
id: power
window: bar
popupOffset: bar.width
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
}
}
}
}

View File

@@ -0,0 +1,71 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Services.UPower
ClippingWrapperRectangle {
radius: 5
width: 100; height: 30
color: "red"
Button {
id: button
text: "󰁹 " + Math.floor(UPower.displayDevice.percentage * 100) + "%"
font.pointSize: 12
implicitHeight: parent.height
//icon.color: "red"
//icon.source: "/nix/store/c4dcn4vl0v5njv4d587sazrad1xgyd9h-rose-pine-icon-theme-unstable-2022-09-01/share/icons/rose-pine/symbolic/devices/battery-symbolic.svg"
onClicked: {
menu.visible = true
grab.active = true
}
}
required property var window
required property real popupOffset
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'shutdown'
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,141 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Bluetooth
ClippingWrapperRectangle {
radius: 5
implicitWidth: 30; implicitHeight: 30
Button {
id: button
text: ""
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
required property PanelWindow window
required property real popupOffset
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset - width
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
ClippingWrapperRectangle {
radius: 5
implicitWidth: parent.width - 2 * Layout.margins
implicitHeight: 30
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
color: "#ff3333aa"
RowLayout {
Text {
text: 'Bluetooth'
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
}
Switch {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
//Layout.margins: 5
checked: Bluetooth.defaultAdapter.enabled
onClicked: Bluetooth.defaultAdapter.enabled = checked
}
}
}
ScrollView {
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
implicitWidth: parent.width - 4 * Layout.margins
implicitHeight: menu.height / 2
id: scroll
ColumnLayout {
spacing: 0
Repeater {
id: rep
model: Bluetooth.devices.values
ClippingWrapperRectangle {
radius: 5
color: "#ff3333aa"
implicitWidth: menu.width - 3 * scroll.x
implicitHeight: 40
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
RowLayout {
Text {
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
Layout.margins: 5
text: rep.model[index].name
}
Button {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.rightMargin: 5
text: 'Connect'
onClicked: rep.model[index].connected = !rep.model[index].connected
}
}
}
}
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,27 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell
Item {
implicitWidth: t.contentWidth + 10
implicitHeight: 30
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Text {
id: t
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: Qt.formatDateTime(clock.date, "dddd HH:mm:ss MM/dd/yyyy")
font.pointSize: 11
SystemClock {
id: clock
precision: SystemClock.Seconds
}
}
}
}

View File

@@ -0,0 +1,30 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
ClippingWrapperRectangle {
radius: 5
implicitWidth: 30; height: 30
Button {
id: button
text: "󰛨 "
font.pointSize: 16
Process {
id: idlent
running: false
command: ["hyprsunset", "-t", "4000"]
onExited: {
running = button.text == "󰛨 " ? false : true
}
}
onClicked: {
idlent.running = button.text == "󰛨 " ? true : false
button.text = button.text == "󰛨 " ? "󱩌 " : "󰛨 "
}
implicitHeight: parent.height
}
}

View File

@@ -0,0 +1,34 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
ClippingWrapperRectangle {
property real interval: 100
id: root
radius: 5
implicitWidth: 30; height: 30
Button {
id: button
text: "󰒲 "
font.pointSize: 16
Process {
id: idlent
running: false
command: ["systemd-inhibit", "--what=idle", "sleep", root.interval.toString()]
onExited: {
running = button.text == "󰒲 " ? false : true
}
}
onClicked: {
idlent.running = button.text == "󰒲 " ? true : false
button.text = button.text == "󰒲 " ? "󰒳 " : "󰒲 "
}
implicitHeight: parent.height
}
}

View File

@@ -0,0 +1,22 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Widgets
ClippingWrapperRectangle {
radius: 5
width: 30; height: 30
Button {
id: button
text: " "
font.pointSize: 16
Process {
id: launcher
running: false
command: ["rofi", "-show", "drun"]
}
onClicked: launcher.running = true
implicitHeight: parent.height
}
}

View File

@@ -0,0 +1,48 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Services.Mpris
import Quickshell.Widgets
Item {
id: media
height: 30
readonly property real textWidth: info.contentWidth + 10
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Text {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
id: info
text: {
let s = ''
let players = []
Mpris.players.values.forEach((p) => {
if(p.isPlaying) players.push(p)
})
if(players[0]?.trackTitle) {
s += players[0].trackTitle
}
if(players[0]?.trackAlbum) {
s += ' - ' + players[0].trackAlbum
}
if(players[0]?.trackArtist) {
s += ' - ' + players[0].trackArtist
}
media.visible = players.length > 0
return s
}
font.pointSize: 11
}
}
}

View File

@@ -0,0 +1,183 @@
import Quickshell
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Services.Notifications
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
Item {
width: 50
height: 30
ClippingWrapperRectangle {
id: barbutton
radius: 5
anchors.fill: parent
Button {
id: button
text: "󰂚"
//text: server.trackedNotifications.values.length == 0 ? "󰂚" : '󱅫 ' + server.trackedNotifications.values.length
//icon.source: ''
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
}
NotificationServer {
id: server
persistenceSupported: true
imageSupported: true
actionsSupported: true
bodyImagesSupported: true
bodySupported: true
bodyHyperlinksSupported: true
inlineReplySupported: true
actionIconsSupported: true
onNotification: (n) => {
n.tracked = true
console.log(n?.body)
button.text = '󱅫 ' + (server.trackedNotifications.values.length + 1)
}
}
required property PanelWindow window
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: window.width - width
anchor.rect.y: 50
implicitWidth: 400
implicitHeight: 1080 - anchor.rect.y
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
color: "#ff706050"
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
id: lay
spacing: 10
ClippingWrapperRectangle {
radius: 5
Layout.margins: 5
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
implicitWidth: menu.width - 2 * Layout.margins
RowLayout {
width: parent.width
Text {
Layout.margins: 5
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: 'Notifications'
}
Button {
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
Layout.margins: 5
implicitWidth: 20
implicitHeight: 20
text: 'x'
onClicked: {
while(server.trackedNotifications.values.length > 0) {
server.trackedNotifications.values[0].dismiss()
}
}
}
}
}
Repeater {
id: rep
model: server.trackedNotifications.values
ClippingWrapperRectangle {
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Layout.margins: 5
radius: 10
implicitWidth: parent.width - 2 * Layout.margins
implicitHeight: 100
MouseArea {
anchors.fill: parent
RowLayout {
Image {
//anchors.fill: parent
source: {
let icon = rep.model[index].image
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon
}
Layout.maximumWidth: 100
Layout.maximumHeight: 100
}
ColumnLayout {
Layout.topMargin: 10
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
Text {
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
text: rep.model[index].summary
Layout.leftMargin: 10
font.pointSize: 14
}
Text {
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: rep.model[index].body
Layout.leftMargin: 10
font.pointSize: 12
}
}
}
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: mouse => {
if(mouse.button == Qt.LeftButton) {
button.text = rep.count - 1 <= 0 ? "󰂚" : '󱅫 ' + (rep.count - 1)
rep.model[index].dismiss()
//button.text = server.trackedNotifications.values.length == 0 ? "󰂚" : '󱅫 ' + server.trackedNotifications.values.length
} else if(mouse.button == Qt.RightButton) {
}
}
}
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,96 @@
import Quickshell
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Widgets
Item {
width: 30
height: 30
id: root
required property PanelWindow window
required property real popupOffset
ClippingWrapperRectangle {
radius: 5
width: 30; height: 30
Button {
id: button
text: " "
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
}
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 150
implicitHeight: 250
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'shutdown'
}
Button {
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'reboot'
}
Button {
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'logout'
}
Button {
Layout.bottomMargin: 10
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'sleep'
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,62 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Services.SystemTray
import Quickshell.Widgets
Item {
implicitWidth: 10 + rep.count * (2 * lay.spacing + 20)
height: 30
visible: SystemTray.items.values.length != 0
id: root
required property var window
required property real popupOffset
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
RowLayout {
id: lay
spacing: 4
Repeater {
id: rep
model: SystemTray.items
ClippingWrapperRectangle {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
radius: 10
implicitWidth: 20
implicitHeight: 20
MouseArea {
anchors.fill: parent
Image {
anchors.fill: parent
source: {
let icon = SystemTray.items.values[index].icon
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon
}
}
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: (mouse) => {
if(mouse.button == Qt.LeftButton) {
SystemTray.items.values[index].activate()
} else if(mouse.button == Qt.RightButton) {
SystemTray.items.values[index].display(root.window, popupOffset, 40)
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,97 @@
import Quickshell // for PanelWindow
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Hyprland
import Quickshell.Services.Pipewire
ClippingWrapperRectangle {
radius: 5
width: 100; height: 30
Button {
id: button
text: " " + Math.floor(Pipewire.defaultAudioSink?.audio?.volume * 100) + "%"
font.pointSize: 12
implicitHeight: parent.height
PwObjectTracker {
objects: [ Pipewire.defaultAudioSink ]
}
onClicked: {
menu.visible = true
grab.active = true
}
}
required property var window
required property real popupOffset
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: popupOffset
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ScrollView {
ColumnLayout {
spacing: 0
Text {
text: 'Output Devices'
}
ColumnLayout {
}
Text {
text: 'Input Devices'
}
ColumnLayout {
/*Repeater {
id: in
model: {
set = []
Pipewire.nodes.values.forEach(n => { !n.isSink && !n.isStream ? set.push(n) : return })
return set
}
Text {
text: in.model[index].nickname
}
}*/
}
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,72 @@
import Quickshell
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Widgets
Item {
implicitWidth: 30
implicitHeight: 30
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
Button {
id: button
text: "󰤨 "
font.pointSize: 16
onClicked: {
menu.visible = true
grab.active = true
}
implicitHeight: parent.height
}
}
property var window: null
id: root
PopupWindow {
id: menu
anchor.window: window
anchor.rect.x: root.parent.x + root.parent.width - width
anchor.rect.y: 50
implicitWidth: 250
implicitHeight: 150
visible: false
color: "transparent"
ClippingWrapperRectangle {
radius: 5
implicitHeight: parent.height - 20
implicitWidth: parent.width
ColumnLayout {
spacing: 0
Button {
Layout.topMargin: 5
x: (parent.width - width) / 2
implicitWidth: parent.width - 10
implicitHeight: parent.height / 5 - parent.spacing
text: 'shutdown'
}
}
}
HyprlandFocusGrab {
id: grab
windows: [ menu ]
onCleared: menu.visible = false
}
}
}

View File

@@ -0,0 +1,46 @@
import QtQuick // for Text
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Widgets
Item {
implicitWidth: 10 + rep.count * (2 * lay.spacing + 25)
implicitHeight: 30
Component.onCompleted: Hyprland.refreshWorkspaces()
ClippingWrapperRectangle {
radius: 5
anchors.fill: parent
RowLayout {
id: lay
Repeater {
id: rep
property var ws: {
let arr = [];
Hyprland.workspaces.values.forEach((w) => { if(w.id > 0) arr.push(w) })
return arr;
}
model: ws
ClippingWrapperRectangle {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
radius: 10
implicitWidth: 25
Button {
background: Rectangle {
color: Hyprland.focusedWorkspace.id == rep.model[index].id ? "#ffff00ff" : "#ff7744dd"
anchors.fill: parent
}
text: rep.model[index].id
onClicked: rep.model[index].activate()
}
}
}
}
}
}

View File

@@ -0,0 +1,14 @@
//@ pragma Env QS_NO_RELOAD_POPUP=1
//@ pragma Env QSG_RENDER_LOOP=threaded
//@ pragma Env QT_QUICK_FLICKABLE_WHEEL_DECELERATION=10000
//@ pragma UseQApplication
import Quickshell // for ShellRoot
import qs.modules
ShellRoot {
Bar {
id: bar
}
}

View File

@@ -3,6 +3,7 @@
pkgs-us = import inputs.nixpkgs-us { pkgs-us = import inputs.nixpkgs-us {
inherit system; inherit system;
config.allowUnfree = true;
}; };
in { in {
@@ -23,6 +24,10 @@
}; };
home.packages = with pkgs; ([ home.packages = with pkgs; ([
inputs.disko.packages.${pkgs.system}.disko-install
kjv
openssh openssh
sops sops
killall killall
@@ -32,20 +37,6 @@
rsync rsync
curl curl
wget wget
] ++ (if config.homeconfig.graphical then [
grim
slurp
xfce.thunar
wl-clipboard
blueberry
lxqt.lxqt-policykit
] else []) ++ (if !config.homeconfig.minimal then [
cava
android-tools
neovim-remote
gcc
zulu
(python313.withPackages (ps: with ps; [ (python313.withPackages (ps: with ps; [
gpustat gpustat
numpy numpy
@@ -57,7 +48,19 @@
debugpy debugpy
requests requests
])) ]))
] ++ (if config.homeconfig.graphical then [
grim
slurp
xfce.thunar
wl-clipboard
blueberry
pkgs-us.quickshell
] else []) ++ (if !config.homeconfig.minimal then [
cava
android-tools
neovim-remote
gcc
zulu
fastfetch fastfetch
ncmpcpp ncmpcpp
playerctl playerctl
@@ -76,7 +79,7 @@
#unfree { #unfree {
geogebra geogebra
spotify spotify
discord pkgs-us.discord
#} #}
pkgs-us.rustdesk-flutter pkgs-us.rustdesk-flutter
pkgs-us.mpv pkgs-us.mpv

View File

@@ -12,77 +12,104 @@
#scripts #scripts
(pkgs.writeShellScriptBin "_systemRebuild" '' (pkgs.writeShellScriptBin "_systemRebuild" ''
${pkgs.nh}/bin/nh os switch --ask /home/nathan/Projects/Olympus ${pkgs.nh}/bin/nh os switch --ask
echo //////Enter to close////// echo //////Enter to close//////
read read
'') '')
(pkgs.writeShellScriptBin "randWallpaper" '' (pkgs.writeShellScriptBin "randWallpaper" ''
file=$(ls /home/nathan/Pictures/Wallpaper/ | shuf -n 1) file=''$(ls ${config.home.homeDirectory}/Pictures/Wallpaper/ | shuf -n 1)
setWallpaper /home/nathan/Pictures/Wallpaper/$file setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/''$file
'') '')
(pkgs.writeShellScriptBin "setWallpaper" '' (pkgs.writeShellScriptBin "setWallpaper" ''
img=''$(realpath ''${1:-~/.config/background})
chmod 600 ~/.config/background if [[ ! -d /tmp/nathan ]]; then
${pkgs.hyprpanel}/bin/hyprpanel sw ''$img mkdir /tmp/nathan
changeColors ''$img ''$2 fi
img=''$(realpath "''${1:-$(find ~/Pictures/Wallpaper/* | rofi -dmenu)}")
n=''$(basename "''$img")
ext="''${n''\#''\#*.}"
if [[ ''$ext == "gif" || ''$ext == "mp4" ]]; then
yes | ${pkgs.ffmpeg}/bin/ffmpeg -i "''$img" -vframes 1 /tmp/nathan/tmp.jpg
cp /tmp/nathan/tmp.jpg /tmp/nathan/tmp2.jpg
pidof mpvpaper && pkill mpvpaper
${pkgs.swww}/bin/swww img /tmp/nathan/tmp.jpg -t wipe
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp2.jpg
sleep 0.3
hyprctl dispatch exec "${pkgs.mpvpaper}/bin/mpvpaper ALL ''$img -o loop"
${pkgs.hyprpanel}/bin/hyprpanel sw /tmp/nathan/tmp.jpg
rm /tmp/nathan/tmp2.jpg
else
pidof mpvpaper && pkill mpvpaper
hyprctl dispatch exec "${pkgs.swww}/bin/swww img ''$img -t wipe"
${pkgs.hyprpanel}/bin/hyprpanel sw "''$img"
fi
changeColors "''$img" "''$2"
'') '')
(pkgs.writeShellScriptBin "changeColors" '' (pkgs.writeShellScriptBin "changeColors" ''
if [[ $(ls ~/.config/ | grep bga) != bga ]]; then img=''$(realpath "''$1")
echo 100 > ~/.config/bga alpha=''${2:-70}
fi
alpha=''${2:-`cat ~/.config/bga`} if [[ ''$alpha -lt 0 ]]; then
alpha=0
elif [[ ''$alpha -gt 100 ]]; then
alpha=100
fi
img=''$(realpath ''${1:-~/.config/background}) if [[ -f ~/.config/wal/colorschemes/dark/''$(basename "''$img")-''$alpha.json ]]; then
${pkgs.pywal16}/bin/wal -n -f "''$(basename "''$img")-''$alpha"
if [[ $alpha -lt 0 ]]; then else
$alpha=0 ${pkgs.pywal16}/bin/wal -n -i "''$img" -a "''$alpha" --cols16 -p "''$(basename "''$img")-''$alpha"
fi fi
if [[ $alpha -gt 100 ]]; then colorPrefix
$alpha=100
fi
wal -i $img -a $alpha --cols16 -n
echo $alpha > ~/.config/bga
sleep 0.4
pywalfox update &
[[ $(pidof cava) != "" ]] && pkill -USR1 cava &
for i in $(ls /run/user/1000 | grep nvim); do nvr -s --servername /run/user/1000/$i --remote-send '<cmd>colorscheme pywal<CR>'; done
pkill -USR1 kitty
'') '')
(pkgs.writeShellScriptBin "onSystemStart" '' (pkgs.writeShellScriptBin "colorPrefix" ''
${pkgs.hyprpanel}/bin/hyprpanel &
randWallpaper &
pypr &
lxqt-policykit-agent &
hyprctl setcursor Bibata-Modern-Classic 16 &
sleep 3
hyprctl reload &
#tmux new-session -s hyprland
'')
(pkgs.writeShellScriptBin "colorPrefix" ''
exec -a "$0" "$@" & exec -a "$0" "$@" &
sleep 0.4 && changeColors & sleep 0.4
${pkgs.pywalfox-native}/bin/pywalfox update &
pkill -USR1 kitty
pidof cava && pkill -USR1 cava
for i in ''$(ls /run/user/1000 | grep nvim); do
${pkgs.neovim-remote}/bin/nvr -s --servername /run/user/1000/''$i --remote-send '<cmd>colorscheme pywal<CR>';
done
'')
(pkgs.writeShellScriptBin "onSystemStart" ''
if [[ ! -d /tmp/nathan ]]; then
mkdir /tmp/nathan
fi
if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then
rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid
fi
hyprctl --batch "\
dispatch exec ${pkgs.swww}/bin/swww-daemon ;\
dispatch exec setWallpaper ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ;\
dispatch exec ${pkgs.pyprland}/bin/pypr ;\
dispatch exec ${pkgs.netbird-ui}/bin/netbird-ui ;\
dispatch exec ${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent ;\
setcursor Bibata-Modern-Classic 16"
sleep 3
hyprctl reload
hyprctl dispatch exec ${pkgs.pyprland}/bin/pypr toggle calendar
#tmux new-session -s hyprland
'') '')
] ++ (if config.homeconfig.standalone.enable then [ ] ++ (if config.homeconfig.standalone.enable then [
(pkgs.writeShellScriptBin "_homeRebuild" '' (pkgs.writeShellScriptBin "_homeRebuild" ''
${pkgs.nh}/bin/nh home switch --ask /home/nathan/Projects/Olympus ${pkgs.nh}/bin/nh home switch --ask
echo //////Enter to close////// echo //////Enter to close//////
read read
'') '')

View File

@@ -1,19 +1,19 @@
{ config, lib, pkgs, inputs, ... }: { { config, lib, pkgs, inputs, ... }: {
imports = [ imports = [
./ags
./git ./git
./nh ./nh
./hyprland ./hyprland
./hyprpanel
./terminal ./terminal
./rofi ./rofi
./pywal ./pywal
./swaylock ./hyprlock
./calcurse ./calcurse
./firefox ./firefox
]; ];
config = { config = lib.mkIf (config.homeconfig.host != "android") {
home.packages = lib.mkIf (!config.homeconfig.wal.enable) [ home.packages = lib.mkIf (!config.homeconfig.wal.enable) [
inputs.nixvim.packages.${pkgs.system}.default inputs.nixvim.packages.${pkgs.system}.default

View File

@@ -31,6 +31,7 @@
search = { search = {
default = "ddg"; default = "ddg";
privateDefault = "ddg"; privateDefault = "ddg";
force = true;
}; };
bookmarks = { bookmarks = {
force = true; force = true;

View File

@@ -15,6 +15,18 @@
pyprland pyprland
]; ];
home.activation.extraHyprFile = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [[ ! -f ${config.home.homeDirectory}/.config/hypr/otf.conf ]]; then
touch ${config.home.homeDirectory}/.config/hypr/otf.conf
fi
if [[ ! -f ${config.home.homeDirectory}/.config/background ]]; then
cp ${config.home.homeDirectory}/Pictures/Wallpaper/bluescape.jpg ${config.home.homeDirectory}/.config/background
chmod 600 ${config.home.homeDirectory}/.config/background
fi
'';
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
@@ -24,18 +36,29 @@
variables = [ "--all" ]; variables = [ "--all" ];
}; };
extraConfig = let extraConfig = (if config.homeconfig.host == "laptop" then ''
monitor = if config.homeconfig.host == "laptop" then '' monitor=eDP-1,1920x1080@300,0x0,1
monitor=eDP-1,1920x1080@60,0x0,1 bind = CTRL SHIFT, XF86Launch2, exec, if [[ $(hyprctl monitors | grep 0x0 | sed -n -e "s/\t*1920x1080@//" -e "s/.[1234567890]* at 0x0//p") == 300 ]]; then hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1; else hyprctl keyword monitor eDP-1,1920x1080@300,0x0,1; fi
'' else if config.homeconfig.host == "homebox" then '' '' else if config.homeconfig.host == "homebox" then ''
monitor=HDMI-A-2,1920x1080@60,0x0,1 monitor=HDMI-A-2,1920x1080@60,0x0,1
monitor=HEADLESS-2,1920x1080@60,0x0,1 monitor=HEADLESS-2,1920x1080@60,0x0,1
exec-once=hyprctl output create headless HEADLESS-2 exec-once=hyprctl output create headless HEADLESS-2
exec-once=hyprctl keyword monitor HDMI-A-2,disable exec-once=hyprctl keyword monitor HDMI-A-2,disable
exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2 exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2
'' else ''''; '' else if config.homeconfig.host == "container" then ''
in monitor + '' monitor=HEADLESS-2,1920x1080@60,0x0,1
source = /home/nathan/.config/hypr/main.conf exec-once=hyprctl output create headless HEADLESS-2
exec-once=${pkgs.wayvnc}/bin/wayvnc 0.0.0.0 -o HEADLESS-2
'' else ''
monitor= , prefered, auto, 1
'') + (if config.homeconfig.hyprpanel.enable then ''
bind = , Print, exec, bash -c ${pkgs.hyprpanel}/share/scripts/screenshot.sh"
'' else ''
bind = , Print, exec, grim -g "$(slurp)"
'') + ''
source = ${config.home.homeDirectory}/.config/hypr/main.conf
exec-shutdown = if [[ -f ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid ]]; then rm ${config.home.homeDirectory}/.local/share/calcurse/.calcurse.pid; fi
''; '';
}; };

View File

@@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }: {
options.homeconfig.hyprlock.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
config = lib.mkIf config.homeconfig.hyprlock.enable {
programs.hyprlock = {
enable = true;
};
services.hypridle = {
enable = true;
};
};
}

View File

@@ -0,0 +1,15 @@
{ config, lib, ... }: {
options.homeconfig.hyprpanel.enable = with lib; mkOption {
type = with types; bool;
default = false;
};
config = lib.mkIf config.homeconfig.hyprpanel.enable {
programs.hyprpanel = {
enable = true;
systemd.enable = false;
};
};
}

View File

@@ -8,7 +8,6 @@
config = lib.mkIf config.homeconfig.wal.enable { config = lib.mkIf config.homeconfig.wal.enable {
home.packages = with pkgs; [ home.packages = with pkgs; [
inputs.nixvim.packages.${pkgs.system}.pywal inputs.nixvim.packages.${pkgs.system}.pywal
pywal16 pywal16

View File

@@ -1,12 +0,0 @@
{ config, lib, pkgs, ... }: {
options.homeconfig.swaylock.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
config = lib.mkIf config.homeconfig.swaylock.enable {
home.packages = with pkgs; [ swaylock-effects ];
};
}

View File

@@ -5,7 +5,6 @@
programs.bash = { programs.bash = {
enable = true; enable = true;
enableCompletion = true; enableCompletion = true;
blesh.enable = true;
shellAliases = { shellAliases = {
ls = "eza"; ls = "eza";
@@ -18,7 +17,11 @@
}; };
initContent = if config.homeconfig.wal.enable then (lib.mkBefore '' bashrcExtra = ''
source ${pkgs.blesh}/share/blesh/ble.sh
'';
initExtra = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)" eval "$(oh-my-posh init bash --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore '' '') else (lib.mkBefore ''

View File

@@ -2,11 +2,14 @@
imports = [ imports = [
./bat ./bat
./bash
./eza ./eza
./fzf ./fzf
./tmux ./tmux
./kitty ./kitty
./zoxide ./zoxide
./zsh ./zsh
./ssh
./ohmyposh
]; ];
} }

View File

@@ -0,0 +1,132 @@
{ config, lib, pkgs, ... }: {
home.packages = with pkgs; [
oh-my-posh
];
programs.zsh = {
initContent = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
'');
};
home.file.".config/wal/templates/ohmyposh.toml".text = ''
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
version = 2
final_space = true
console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'os'
style = 'diamond'
trailing_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
template = ' {{{{ .Icon }}}} '
[[blocks.segments]]
type = 'session'
style = 'diamond'
trailing_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}'
[[blocks.segments]]
type = 'path'
style = 'diamond'
trailing_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .Path }}}}'
[blocks.segments.properties]
style = 'full'
[[blocks]]
type = 'prompt'
overflow = 'hidden'
alignment = 'right'
[[blocks.segments]]
type = 'executiontime'
style = 'diamond'
leading_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .FormattedMs }}}}'
[[blocks.segments]]
type = 'time'
style = 'diamond'
leading_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
[[blocks.segments]]
type = 'shell'
style = 'diamond'
leading_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'text'
style = 'plain'
background = 'transparent'
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[transient_prompt]
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
background = 'transparent'
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[secondary_prompt]
background = 'transparent'
forground = 'p:c14'
template = " "
[palette]
c0 = "{color0}"
c1 = "{color1}"
c2 = "{color2}"
c3 = "{color3}"
c4 = "{color4}"
c5 = "{color5}"
c6 = "{color6}"
c7 = "{color7}"
c8 = "{color8}"
c9 = "{color9}"
c10 = "{color10}"
c11 = "{color11}"
c12 = "{color12}"
c13 = "{color13}"
c14 = "{color14}"
c15 = "{color15}"
'';
}

View File

@@ -0,0 +1,8 @@
{ config, lib, pkgs, ... }: {
programs.ssh = {
enable = true;
};
}

View File

@@ -1,9 +1,5 @@
{ config, lib, pkgs, ... }: { { config, lib, pkgs, ... }: {
home.packages = with pkgs; [
oh-my-posh
];
programs.zsh = { programs.zsh = {
enable = true; enable = true;
@@ -23,6 +19,8 @@
vi = "nvim"; vi = "nvim";
vim = "nvim"; vim = "nvim";
python = "python3.13";
python3 = "python3.13";
}; };
history = { history = {
@@ -31,128 +29,5 @@
ignoreSpace = true; ignoreSpace = true;
share = true; share = true;
}; };
initContent = if config.homeconfig.wal.enable then (lib.mkBefore ''
cat ${config.home.homeDirectory}/.cache/wal/sequences
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.cache/wal/ohmyposh.toml)"
'') else (lib.mkBefore ''
eval "$(oh-my-posh init zsh --config ${config.home.homeDirectory}/.config/ohmyposh/ohmyposh.toml)"
'');
}; };
home.file.".config/wal/templates/ohmyposh.toml".text = ''
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
version = 2
final_space = true
console_title_template = '{{{{ .Shell }}}} in {{{{ .Folder }}}}'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'os'
style = 'diamond'
trailing_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
template = ' {{{{ .Icon }}}} '
[[blocks.segments]]
type = 'session'
style = 'diamond'
trailing_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
template = '{{{{ .UserName }}}}@{{{{ .HostName }}}}'
[[blocks.segments]]
type = 'path'
style = 'diamond'
trailing_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .Path }}}}'
[blocks.segments.properties]
style = 'full'
[[blocks]]
type = 'prompt'
overflow = 'hidden'
alignment = 'right'
[[blocks.segments]]
type = 'executiontime'
style = 'diamond'
leading_diamond = ''
background = 'p:c4'
foreground = 'p:c13'
template = '{{{{ .FormattedMs }}}}'
[[blocks.segments]]
type = 'time'
style = 'diamond'
leading_diamond = ''
background = 'p:c2'
foreground = 'p:c14'
[[blocks.segments]]
type = 'shell'
style = 'diamond'
leading_diamond = ''
background = 'p:c1'
foreground = 'p:c12'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'text'
style = 'plain'
background = 'transparent'
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[transient_prompt]
foreground_templates = [
"{{{{ if gt .Code 0 }}}}p:c13{{{{end}}}}",
"{{{{ if eq .Code 0 }}}}p:c14{{{{end}}}}",
]
background = 'transparent'
template = "{{{{ if gt .Code 0 }}}}! {{{{else}}}} {{{{end}}}}"
[secondary_prompt]
background = 'transparent'
forground = 'p:c14'
template = " "
[palette]
c0 = "{color0}"
c1 = "{color1}"
c2 = "{color2}"
c3 = "{color3}"
c4 = "{color4}"
c5 = "{color5}"
c6 = "{color6}"
c7 = "{color7}"
c8 = "{color8}"
c9 = "{color9}"
c10 = "{color10}"
c11 = "{color11}"
c12 = "{color12}"
c13 = "{color13}"
c14 = "{color14}"
c15 = "{color15}"
'';
} }

View File

@@ -1,6 +1,5 @@
{ ... }: { { ... }: {
imports = [ imports = [
./mpd ./mpd
./wayvnc
]; ];
} }

View File

@@ -1,36 +0,0 @@
{ config, lib, pkgs, inputs, ... }: {
options.homeconfig.wayvnc.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
disabledModules = [
];
imports = [
(import "${inputs.home-manager-us}/modules/services/wayvnc.nix" {
inherit config;
inherit lib;
pkgs = (import inputs.nixpkgs-us { system = "x86_64-linux"; });
})
];
config = lib.mkIf config.homeconfig.wayvnc.enable {
home.packages = with pkgs; [
novnc
];
services.wayvnc = {
enable = true;
autoStart = true;
settings = {
address = "0.0.0.0";
port = 5900;
};
};
};
}

View File

@@ -0,0 +1 @@
{ ... }: { config = {}; }

View File

@@ -27,8 +27,6 @@
hardware = { hardware = {
graphics.enable = true;
nvidia = { nvidia = {
modesetting.enable = true; modesetting.enable = true;
open = false; open = false;
@@ -42,11 +40,11 @@
services = { services = {
xserver = { xserver = {
#enable = true; enable = false;
videoDrivers = ["nvidia"]; videoDrivers = ["nvidia"];
}; };
displayManager = { displayManager = {
enable = true; enable = false;
defaultSession = "hyprland"; defaultSession = "hyprland";
autoLogin = { autoLogin = {
enable = true; enable = true;
@@ -54,6 +52,11 @@
}; };
}; };
pulseaudio.enable = false; pulseaudio.enable = false;
hardware.openrgb = {
enable = true;
motherboard = "amd";
};
}; };
systemd.extraConfig = "DefaultLimitNOFILE=2048"; systemd.extraConfig = "DefaultLimitNOFILE=2048";
@@ -85,7 +88,7 @@
nat = { nat = {
enable = true; enable = true;
internalInterfaces = [ "ve-+" ]; internalInterfaces = [ "ve-+" ];
externalInterface = "enp6s0"; externalInterface = "wlp7s0";
}; };
}; };
@@ -118,7 +121,7 @@
sysconfig = { sysconfig = {
remoteBuildHost = true; remoteBuildHost = true;
host = "homebox"; host = "homebox";
graphical = true; graphical = false;
users = { users = {
nathan = { nathan = {
extraGroups = [ "wheel" "networkmanager" ]; extraGroups = [ "wheel" "networkmanager" ];
@@ -133,20 +136,23 @@
{ {
homeconfig = { homeconfig = {
minimal = false; minimal = false;
hyprland.enable = true; hyprland.enable = false;
hyprlock.enable = true; hyprlock.enable = false;
wal.enable = true; wal.enable = true;
mpd.enable = true; mpd.enable = true;
hyprpanel.enable = true; hyprpanel.enable = false;
calcurse.enable = true; calcurse.enable = true;
rofi.enable = true; rofi.enable = false;
firefox.enable = true; firefox.enable = false;
git.enable = true; git.enable = true;
nh.enable = true; nh.enable = true;
}; };
home.packages = [ services.hypridle.enable = lib.mkForce false;
pkgs.wayvnc
home.packages = with pkgs; [
wayvnc
openrgb
]; ];
} }
]; ];
@@ -163,15 +169,15 @@
}; };
programs = { programs = {
hyprland.enable = true; hyprland.enable = false;
hyprpanel.enable = true; hyprpanel.enable = false;
steam.enable = false; steam.enable = false;
}; };
virtualization = { virtualization = {
traefik.enable = true; traefik.enable = true;
jellyfin.enable = true; jellyfin.enable = true;
"blunkall.us".enable = true; "esotericbytes.com".enable = true;
nextcloud.enable = true; nextcloud.enable = true;
ntfy.enable = false; ntfy.enable = false;
gitea.enable = true; gitea.enable = true;
@@ -179,6 +185,7 @@
keycloak.enable = true; keycloak.enable = true;
netbird.enable = true; netbird.enable = true;
ollama.enable = true; ollama.enable = true;
openwebui.enable = true;
homeassistant.enable = true; homeassistant.enable = true;
wyoming = { wyoming = {
enable = true; enable = true;
@@ -187,9 +194,9 @@
faster-whisper = true; faster-whisper = true;
}; };
rustdesk.enable = false; #broken rustdesk.enable = false; #broken
pihole.enable = false; #broken #pihole.enable = false; #broken
code-server.enable = false; code-server.enable = false;
novnc.enable = true; novnc.enable = false;
minecraft.enable = true; minecraft.enable = true;
sandbox.enable = false; sandbox.enable = false;

View File

@@ -0,0 +1,106 @@
{ lib, pkgs, inputs, modulesPath, ... }: {
imports = with inputs; [
(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")
home-manager.nixosModules.default
];
config = {
fonts.fontconfig.enable = lib.mkForce true;
fonts.packages = with pkgs; [ nerd-fonts.fira-code ];
environment.systemPackages = with pkgs; [ nerd-fonts.fira-code ];
system.stateVersion = "25.05";
nixpkgs.hostPlatform = "x86_64-linux";
users.users."nathan" = {
hashedPassword = "$y$j9T$F0pn6l4C45lz4a0FTZLqE0$Fc48Ptbmz/3MJCk/Jsaqop4ff.bY3J3GcjhmJx5R7k6";
packages = with pkgs; [
git
nerd-fonts.fira-code
];
};
users.users.nixos.enable = lib.mkForce false;
services.getty.autologinUser = lib.mkForce null;
networking = {
nameservers = [ "1.1.1.1" "1.0.0.1" ];
networkmanager.enable = true;
};
programs.zsh.enable = true;
environment.shells = with pkgs; [ zsh bashInteractive ];
sysconfig = {
host = "iso";
graphical = true;
users = {
nathan = {
extraGroups = [ "wheel" "networkmanager" ];
shell = pkgs.zsh;
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAsU69CxfQk58CvItPN426h5Alnpb60SH37wet97Vb57 nathan@laptop"
];
home-manager = {
enable = true;
standalone = false;
extraModules = [
{
homeconfig = {
minimal = false;
hyprland.enable = true;
hyprlock.enable = true;
wal.enable = true;
mpd.enable = true;
hyprpanel.enable = true;
rofi.enable = true;
firefox.enable = true;
git.enable = false;
nh.enable = true;
};
}
];
};
};
};
services = {
sddm.enable = true;
openssh.enable = true;
pipewire.enable = true;
#kdePlasma6.enable = true;
netbird.enable = true;
#ollama.enable = true;
};
programs = {
#steam.enable = true;
hyprpanel.enable = true;
hyprland.enable = true;
};
virtualization = {
wyoming = {
enable = false;
};
homeassistant = {
enable = false;
};
};
};
};
}

View File

@@ -22,12 +22,26 @@
loader = { loader = {
systemd-boot.enable = true; systemd-boot.enable = true;
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
timeout = null;
}; };
kernelParams = [ "snd-intel-dspcfg.dsp_driver=1" ]; kernelParams = [ "snd-intel-dspcfg.dsp_driver=1" ];
}; };
systemd.extraConfig = "DefaultLimitNOFILE=2048"; systemd.extraConfig = "DefaultLimitNOFILE=2048";
specialisation = {
docked.configuration = {
home-manager.users.nathan.wayland.windowManager.hyprland.extraConfig = ''
monitor=eDP-1,1920x1080@300,0x0,1
'';
};
};
home-manager.users.nathan.wayland.windowManager.hyprland.extraConfig = lib.mkIf (config.specialisation != {}) ''
monitor=eDP-1,1920x1080@60,0x0,1
monitor=eDP-1, addreserved, 40,0,0,0
'';
hardware = { hardware = {
graphics.enable = true; graphics.enable = true;
@@ -38,7 +52,7 @@
nvidia = { nvidia = {
modesetting.enable = true; modesetting.enable = true;
powerManagement.enable = true; powerManagement.enable = true;
powerManagement.finegrained = false; powerManagement.finegrained = true;
open = false; open = false;
nvidiaSettings = true; nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable; package = config.boot.kernelPackages.nvidiaPackages.stable;
@@ -104,7 +118,6 @@
sddm.enable = true; sddm.enable = true;
openssh.enable = false; openssh.enable = false;
pipewire.enable = true; pipewire.enable = true;
kdePlasma6.enable = true;
netbird.enable = true; netbird.enable = true;
ollama.enable = true; ollama.enable = true;
}; };

View File

@@ -1,4 +1,4 @@
{ config, pkgs, inputs, modulesPath, ... }: { { pkgs, inputs, ... }: {
imports = with inputs; [ imports = with inputs; [
@@ -6,8 +6,6 @@
(import ./disko.nix { device = "/dev/mmcblk0"; }) (import ./disko.nix { device = "/dev/mmcblk0"; })
(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")
sops-nix.nixosModules.sops sops-nix.nixosModules.sops
home-manager.nixosModules.default home-manager.nixosModules.default
@@ -16,6 +14,18 @@
config = { config = {
hardware.enableRedistributableFirmware = true;
hardware.enableAllHardware = true;
programs.zsh.enable = true;
environment.shells = with pkgs; [ zsh bashInteractive ];
networking = {
nameservers = [ "1.1.1.1" "1.0.0.1" ];
networkmanager.enable = true;
};
nixpkgs.hostPlatform = "x86_64-linux"; nixpkgs.hostPlatform = "x86_64-linux";
boot = { boot = {
@@ -25,15 +35,33 @@
}; };
}; };
users.users."nathan" = {
hashedPassword = "$y$j9T$F0pn6l4C45lz4a0FTZLqE0$Fc48Ptbmz/3MJCk/Jsaqop4ff.bY3J3GcjhmJx5R7k6";
packages = with pkgs; [
git
nerd-fonts.fira-code
];
};
sops = {
age.keyFile = "/var/lib/sops/age/keys.txt";
defaultSopsFile = ./secrets.yaml;
defaultSopsFormat = "yaml";
#secrets."nathan/pass".neededForUsers = true;
};
sysconfig = { sysconfig = {
remoteBuildClient = true; #remoteBuildClient = true;
host = "live"; host = "live";
graphical = true; graphical = true;
users = { users = {
nathan = { nathan = {
extraGroups = [ "wheel" "networkmanager" ]; extraGroups = [ "wheel" "networkmanager" ];
hashedPasswordFile = config.sops.secrets."nathan/pass".path; #hashedPasswordFile = config.sops.secrets."nathan/pass".path;
shell = pkgs.zsh; shell = pkgs.zsh;
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAsU69CxfQk58CvItPN426h5Alnpb60SH37wet97Vb57 nathan@laptop"
];
home-manager = { home-manager = {
enable = true; enable = true;
standalone = false; standalone = false;
@@ -49,7 +77,7 @@
calcurse.enable = true; calcurse.enable = true;
rofi.enable = true; rofi.enable = true;
firefox.enable = true; firefox.enable = true;
git.enable = true; #git.enable = true;
nh.enable = true; nh.enable = true;
}; };
} }
@@ -60,7 +88,7 @@
services = { services = {
sddm.enable = true; sddm.enable = true;
#openssh.enable = false; openssh.enable = true;
pipewire.enable = true; pipewire.enable = true;
#kdePlasma6.enable = true; #kdePlasma6.enable = true;
netbird.enable = true; netbird.enable = true;

View File

@@ -0,0 +1,17 @@
nathan:
pass: ENC[AES256_GCM,data:0hmcbyTLbmadTAMoSeOgBmpqgtCKtfrY1EIxIUoxgo+3297+jZqcsSmhPlFKtbornezm+7uPRzaVRHyp2G0Ee6mG4FbzUfGYFg==,iv:F2aTS/BPPxTemu4vEy9H0FY0HUEBWaRFeaoMr8TJbmA=,tag:Ai90KJluCimR6OG5BtCnVQ==,type:str]
sops:
age:
- recipient: age1yqgyp2uxz4lzrc9f9ka0mfjl5fr6ahf8nf24nlmran2wulg6fpvq9hyp9q
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5cUF3YWY2STgwc1pzREJP
QndUajV6WUJFZEdtOGNOQ05Ua1hGM25IbzJJCjF3Z24rc0JwMSt5bnpIVDZ0ZGJG
ZE9LdEU3bXhsMUxEL0hlMTNTc0VkR0kKLS0tIHhWOGJocS94eWJUSXdtaldJSG50
TjZCN3RneGtJa0hLNU1yTUlLMDJpcEUKNvpcKkNXeRyFsn0CRjSKNb89l1864I6A
Yzijw0c0BVfivhn2wAyq0fYuw2rT+vIJdFUHvIgxkpkZFl4n/RucOQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-08-31T19:51:15Z"
mac: ENC[AES256_GCM,data:L4SK7iaPX3dPJTyl2RgSuqMcoFRm8q9k64TsroV3tT1uWn0J9XRBj9KXgGj/qLloQkgmZsmtct8w2x5tYYosh5k1+056/DeTD8l/Nw5339qKJppRjg6jYNtw02ZGPSNFQdmGNQU9NOOuT8Q94sl0mphwlYhFV1Tf1r/AoSg1ja8=,iv:/qEVdxOR8CDJ2plE8Ez9ML+u+lKPmsNfV0GyXgBbQRk=,tag:EyjdJzvuHXn+0+5hOk0dVg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.10.2

View File

@@ -1,75 +0,0 @@
{ config, lib, pkgs, inputs, modulesPath, ... }: {
imports = with inputs; [
disko.nixosModules.default
(import ./disko.nix { device = "/dev/sda"; })
(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")
sops-nix.nixosModules.sops
home-manager.nixosModules.default
system.nixosModule
];
config = {
nixpkgs.hostPlatform = "x86_64-linux";
sysconfig.opts = {
sddm.enable = true;
openssh.enable = false;
pipewire.enable = true;
ags.enable = true;
hyprland.enable = true;
git.enable = true;
nh.enable = true;
};
users.users."nathan" = {
isNormalUser = true;
initialPassword = "7567";
extraGroups = [ "wheel" ];
};
home-manager = {
backupFileExtension = "backup";
extraSpecialArgs = { inherit inputs; };
users = {
"nathan" = lib.mkMerge [
inputs.nathan.homeManagerModule
{
config.homeconfig = {
impermanence.enable = false;
hyprland.enable = true;
swaylock.enable = true;
wal.enable = true;
wayvnc.enable = false;
mpd.enable = true;
ags.enable = true;
calcurse.enable = true;
rofi.enable = true;
firefox.enable = true;
};
}
];
};
};
system.stateVersion = "24.11";
nix = {
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
settings = {
experimental-features = [ "nix-command" "flakes" ];
};
};
networking.hostName = "live";
fonts.packages = with pkgs; [ fira-code-nerdfont ];
};
}

View File

@@ -0,0 +1,75 @@
{ config, lib, inputs, ... }: {
options.sysconfig.virtualization.authentik.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
imports = [
inputs.sops-nix.nixosModules.sops
];
config = lib.mkIf config.sysconfig.virtualization.authentik.enable {
sops.secrets."authentik/dbpass" = {};
networking = {
nat.internalInterfaces = [ "ve-authentik" ];
};
containers.authentik = {
autoStart = true;
privateNetwork = true;
hostAddress = "192.168.100.10";
localAddress = "192.168.100.35";
extraFlags = [
"--load-credential=dbpass:${config.sops.secrets."authentik/dbpass".path}"
];
bindMounts = {
"/etc/authentik" = {
hostPath = "/ssd1/Authentik";
isReadOnly = false;
};
};
config = {
networking.firewall.allowedTCPPorts = [ 9001 ];
systemd.services.secrets_setup = {
wantedBy = [ "authentik.service" ];
serviceConfig = {
LoadCredential = [
"dbpass"
];
};
script = ''
cat ''${CREDENTIALS_DIRECTORY}/dbpass > /etc/authentik/dbpass
chown postgres:postgres /etc/authentik/dbpass
'';
};
services.authentik = {
enable = true;
environmentFile = "/etc/authentik/authentik.env";
settings = {
disable_startup_analytics = true;
avatars = "initials";
};
worker.listenHTTP = "0.0.0.0:9001";
};
system.stateVersion = "25.05";
};
};
};
}

View File

@@ -14,6 +14,7 @@
./netbird ./netbird
./keycloak ./keycloak
./ollama ./ollama
./openwebui
./n8n ./n8n
./wyoming ./wyoming
./code-server ./code-server

View File

@@ -8,7 +8,7 @@
config = lib.mkIf config.sysconfig.virtualization.gitea.enable { config = lib.mkIf config.sysconfig.virtualization.gitea.enable {
networking = { networking = {
hosts."192.168.100.20" = [ "gitea.blunkall.us" ]; hosts."192.168.100.20" = [ "gitea.esotericbytes.com" ];
nat.internalInterfaces = [ "ve-gitea" ]; nat.internalInterfaces = [ "ve-gitea" ];
}; };
@@ -77,9 +77,9 @@
settings = { settings = {
server = { server = {
DOMAIN = "gitea.blunkall.us"; DOMAIN = "gitea.esotericbytes.com";
HTTP_PORT = 3000; HTTP_PORT = 3000;
ROOT_URL = "https://gitea.blunkall.us/"; ROOT_URL = "https://gitea.esotericbytes.com/";
}; };
service = { service = {
DISABLE_REGISTRATION = false; DISABLE_REGISTRATION = false;

View File

@@ -62,7 +62,7 @@
database.passwordFile = "/etc/keycloak/dbpass"; database.passwordFile = "/etc/keycloak/dbpass";
settings = { settings = {
hostname = "auth.blunkall.us"; hostname = "auth.esotericbytes.com";
http-enabled = true; http-enabled = true;

View File

@@ -28,14 +28,21 @@
enable = true; enable = true;
openFirewall = true; openFirewall = true;
environment = {
N8N_DIAGNOSTICS_ENABLED = "false";
N8N_VERSION_NOTIFICATIONS_ENABLED = "false";
N8N_TEMPLATES_ENABLED = "false";
settings = { EXTERNAL_FRONTEND_HOOKS_URLS = "";
N8N_DIAGNOSTICS_CONFIG_FRONTEND = "";
N8N_DIAGNOSTICS_CONFIG_BACKEND = "";
N8N_SECURE_COOKIE = "false";
}; };
#webhookUrl = "https://n8n.blunkall.us/"; #webhookUrl = "https://n8n.blunkall.us/";
}; };
/*
systemd.services.n8n = { systemd.services.n8n = {
environment = { environment = {
N8N_DIAGNOSTICS_ENABLED = "false"; N8N_DIAGNOSTICS_ENABLED = "false";
@@ -49,7 +56,7 @@
N8N_SECURE_COOKIE = "false"; N8N_SECURE_COOKIE = "false";
}; };
}; };
*/
system.stateVersion = "25.05"; system.stateVersion = "25.05";
}; };
}; };

View File

@@ -15,17 +15,20 @@
}; };
}; };
config = { config = let
pkgs-com = import inputs.nixpkgs-us {
system = "x86_64-linux";
config.allowUnfree = true;
};
in {
services.netbird = { services.netbird = {
enable = config.sysconfig.services.netbird.enable; enable = config.sysconfig.services.netbird.enable;
ui.enable = true; ui = {
/*package = let enable = true;
pkgs-us = import inputs.nixpkgs-us { #package = pkgs-com.netbird-ui;
system = "x86_64-linux"; };
config.allowUnfree = true; #package = pkgs-com.netbird;
};
in pkgs-us.netbird;*/
}; };
networking = { networking = {
@@ -64,7 +67,7 @@
config = { config = {
services.nginx.virtualHosts."vpn.blunkall.us" = { services.nginx.virtualHosts."vpn.esotericbytes.com" = {
listen = [ listen = [
{ {
addr = "0.0.0.0"; addr = "0.0.0.0";
@@ -79,13 +82,13 @@
server = { server = {
enable = true; enable = true;
enableNginx = true; enableNginx = true;
domain = "vpn.blunkall.us"; domain = "vpn.esotericbytes.com";
dashboard = { dashboard = {
enable = true; enable = true;
enableNginx = true; enableNginx = true;
settings = { settings = {
AUTH_AUTHORITY = "https://auth.blunkall.us/realms/General"; AUTH_AUTHORITY = "https://auth.esotericbytes.com/realms/General";
AUTH_CLIENT_ID = "netbird"; AUTH_CLIENT_ID = "netbird";
AUTH_SUPPORTED_SCOPES = "openid profile email offline_access api"; AUTH_SUPPORTED_SCOPES = "openid profile email offline_access api";
AUTH_AUDIENCE = "netbird"; AUTH_AUDIENCE = "netbird";
@@ -93,35 +96,30 @@
NETBIRD_TOKEN_SOURCE = "accessToken"; NETBIRD_TOKEN_SOURCE = "accessToken";
}; };
package = let package = pkgs-com.netbird-dashboard;
pkgs-us = import inputs.nixpkgs-us {
system = "x86_64-linux";
config.allowUnfree = true;
};
in pkgs-us.netbird-dashboard;
}; };
management = { management = {
enable = true; enable = true;
enableNginx = true; enableNginx = true;
disableAnonymousMetrics = true; disableAnonymousMetrics = true;
dnsDomain = "vpn"; dnsDomain = "vpn";
turnDomain = "vpn.blunkall.us"; turnDomain = "vpn.esotericbytes.com";
turnPort = 3478; turnPort = 3478;
logLevel = "DEBUG"; logLevel = "DEBUG";
oidcConfigEndpoint = "https://auth.blunkall.us/realms/General/.well-known/openid-configuration"; oidcConfigEndpoint = "https://auth.esotericbytes.com/realms/General/.well-known/openid-configuration";
settings = { settings = {
"TURNConfig" = { "TURNConfig" = {
"Turns" = [ "Turns" = [
{ {
"Proto" = "udp"; "Proto" = "udp";
"URI" = "turn:vpn.blunkall.us:3478"; "URI" = "turn:vpn.esotericbytes.com:3478";
"Username" = "netbird"; "Username" = "netbird";
"Password"._secret = "/etc/netbird/coturnPass"; "Password"._secret = "/etc/netbird/coturnPass";
} }
@@ -134,14 +132,14 @@
"HttpConfig" = { "HttpConfig" = {
"Address" = "0.0.0.0:443"; "Address" = "0.0.0.0:443";
"AuthIssuer" = "https://auth.blunkall.us/realms/General"; "AuthIssuer" = "https://auth.esotericbytes.com/realms/General";
"AuthAudience" = "netbird"; "AuthAudience" = "netbird";
"AuthKeysLocation" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/certs"; "AuthKeysLocation" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/certs";
"AuthUserIDClaim" = ""; "AuthUserIDClaim" = "";
"CertFile" = ""; "CertFile" = "";
"CertKey" = ""; "CertKey" = "";
"IdpSignKeyRefreshEnabled" = false; "IdpSignKeyRefreshEnabled" = false;
"OIDCConfigEndpoint" = "https://auth.blunkall.us/realms/General/.well-known/openid-configuration"; "OIDCConfigEndpoint" = "https://auth.esotericbytes.com/realms/General/.well-known/openid-configuration";
}; };
"DeviceAuthorizationFlow" = { "DeviceAuthorizationFlow" = {
@@ -152,8 +150,8 @@
"Domain" = ""; "Domain" = "";
"ClientID" = ""; "ClientID" = "";
"ClientSecret" = ""; "ClientSecret" = "";
"TokenEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/token"; "TokenEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/token";
"DeviceAuthEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/auth/device"; "DeviceAuthEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/auth/device";
"Scope" = "openid"; "Scope" = "openid";
"UseIDToken" = false; "UseIDToken" = false;
"RedirectURLs" = null; "RedirectURLs" = null;
@@ -163,15 +161,15 @@
"IdpManagerConfig" = { "IdpManagerConfig" = {
"ManagerType" = "keycloak"; "ManagerType" = "keycloak";
"ClientConfig" = { "ClientConfig" = {
"Issuer" = "https://auth.blunkall.us/realms/General"; "Issuer" = "https://auth.esotericbytes.com/realms/General";
"TokenEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/token"; "TokenEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/token";
"ClientID" = "netbird-backend"; "ClientID" = "netbird-backend";
"ClientSecret" = "QuqjTOAHKE6N6jJqkB1F1RGo3kqUhEdg"; "ClientSecret" = "QuqjTOAHKE6N6jJqkB1F1RGo3kqUhEdg";
"GrantType" = "client_credentials"; "GrantType" = "client_credentials";
}; };
"ExtraConfig" = { "ExtraConfig" = {
"AdminEndpoint" = "https://auth.blunkall.us/admin/realms/General"; "AdminEndpoint" = "https://auth.esotericbytes.com/admin/realms/General";
}; };
"Auth0ClientCredentials" = null; "Auth0ClientCredentials" = null;
"AzureClientCredentials" = null; "AzureClientCredentials" = null;
@@ -185,8 +183,8 @@
"ClientID" = "netbird"; "ClientID" = "netbird";
"ClientSecret" = ""; "ClientSecret" = "";
"Domain" = ""; "Domain" = "";
"AuthorizationEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/auth"; "AuthorizationEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/auth";
"TokenEndpoint" = "https://auth.blunkall.us/realms/General/protocol/openid-connect/token"; "TokenEndpoint" = "https://auth.esotericbytes.com/realms/General/protocol/openid-connect/token";
"Scope" = "openid profile email offline_access api"; "Scope" = "openid profile email offline_access api";
"RedirectURLs" = [ "RedirectURLs" = [
"http://localhost:53000" "http://localhost:53000"

View File

@@ -67,7 +67,7 @@
extraAppsEnable = true; extraAppsEnable = true;
settings = { settings = {
overwriteprotocol = "https"; overwriteprotocol = "https";
trusted_domains = [ "nextcloud.blunkall.us" ]; trusted_domains = [ "nextcloud.esotericbytes.com" ];
trusted_proxies = [ "192.168.100.11" ]; trusted_proxies = [ "192.168.100.11" ];
default_phone_region = "US"; default_phone_region = "US";
}; };

View File

@@ -1,13 +1,13 @@
{ config, lib, ... }: { { config, lib, ... }: {
options.sysconfig.virtualization."blunkall.us".enable = lib.mkOption { options.sysconfig.virtualization."esotericbytes.com".enable = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = false; default = false;
}; };
config = lib.mkIf config.sysconfig.virtualization."blunkall.us".enable { config = lib.mkIf config.sysconfig.virtualization."esotericbytes.com".enable {
containers.blunkall-us = { containers.esotericbytes-com = {
autoStart = true; autoStart = true;
privateNetwork = true; privateNetwork = true;
@@ -16,7 +16,7 @@
bindMounts = { bindMounts = {
"/var/www/data" = { "/var/www/data" = {
hostPath = "/ssd1/blunkall_us/data"; hostPath = "/ssd1/esotericbytes-com/data";
isReadOnly = false; isReadOnly = false;
}; };
}; };
@@ -26,12 +26,12 @@
services.nginx = { services.nginx = {
enable = true; enable = true;
virtualHosts = { virtualHosts = {
"blunkall.us" = { "esotericbytes.com" = {
enableACME = false; enableACME = false;
forceSSL = false; forceSSL = false;
root = "/var/www/data"; root = "/var/www/data";
}; };
"homebox.vpn/blunkall" = { "homebox.vpn/esotericbytes" = {
enableACME = false; enableACME = false;
forceSSL = false; forceSSL = false;
root = "/var/www/data"; root = "/var/www/data";

View File

@@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }: {
options = {
sysconfig.virtualization.openwebui.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
};
config = lib.mkIf config.sysconfig.virtualization.openwebui.enable {
containers.openwebui = {
autoStart = true;
privateNetwork = true;
hostAddress = "192.168.100.10";
localAddress = "192.168.100.33";
config = {
services.open-webui = {
enable = true;
package = pkgs.open-webui;
openFirewall = true;
host = "0.0.0.0";
};
system.stateVersion = "25.05";
};
};
};
}

View File

@@ -8,7 +8,7 @@
config = lib.mkIf config.sysconfig.virtualization.traefik.enable { config = lib.mkIf config.sysconfig.virtualization.traefik.enable {
networking = { networking = {
hosts."192.168.100.11" = [ "blunkall.us" "*.blunkall.us" "traefik.local" ]; hosts."192.168.100.11" = [ "esotericbytes.com" "*.esotericbytes.com" "traefik.local" ];
firewall.allowedTCPPorts = [ 22 80 443]; firewall.allowedTCPPorts = [ 22 80 443];
nat.internalInterfaces = [ "ve-traefik" ]; nat.internalInterfaces = [ "ve-traefik" ];
@@ -74,8 +74,8 @@
http.tls = { http.tls = {
certResolver = "cloudflare"; certResolver = "cloudflare";
domains = { domains = {
main = "blunkall.us"; main = "esotericbytes.com";
sans = [ "*.blunkall.us" "blunkall.us" ]; sans = [ "*.esotericbytes.com" ];
}; };
}; };
}; };
@@ -105,88 +105,88 @@
routers = { routers = {
homepageSecure = { homepageSecure = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`blunkall.us`) || Host(`www.blunkall.us`) || (Host(`homebox.vpn`) && PathPrefix(`/blunkall`))"; rule = "Host(`esotericbytes.com`) || Host(`www.esotericbytes.com`)";
service = "homepage"; service = "homepage";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
}; };
/*remote = { /*remote = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`remote.blunkall.us`)"; rule = "Host(`remote.esotericbytes.com`)";
service = "novnc"; service = "novnc";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
#middlewares = [ "authentik" ]; #middlewares = [ "authentik" ];
};*/ };*/
/*homeassistant = { /*homeassistant = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`hass.blunkall.us`)"; rule = "Host(`hass.esotericbytes.com`)";
service = "homeassistant"; service = "homeassistant";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
};*/ };*/
jellyfin = { jellyfin = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`jellyfin.blunkall.us`)"; rule = "Host(`jellyfin.esotericbytes.com`)";
service = "jellyfin"; service = "jellyfin";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
}; };
auth = { auth = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`auth.blunkall.us`)"; rule = "Host(`auth.esotericbytes.com`)";
service = "keycloak"; service = "keycloak";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
}; };
/*gitlab = { /*gitlab = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`gitlab.blunkall.us`)"; rule = "Host(`gitlab.esotericbytes.com`)";
service = "gitlab"; service = "gitlab";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
};*/ };*/
gitea = { gitea = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`gitea.blunkall.us`)"; rule = "Host(`gitea.esotericbytes.com`)";
service = "gitea"; service = "gitea";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
}; };
nextcloud = { nextcloud = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`nextcloud.blunkall.us`)"; rule = "Host(`nextcloud.esotericbytes.com`)";
service = "nextcloud"; service = "nextcloud";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
middlewares = [ middlewares = [
"nextcloud_redirectregex" "nextcloud_redirectregex"
]; ];
}; };
traefik = { /*traefik = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`192.168.100.11`) || Host(`homebox.vpn`)"; rule = "Host(`192.168.100.11`) || Host(`homebox.vpn`)";
service = "api@internal"; service = "api@internal";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
#middlewares = [ "authentik" ]; #middlewares = [ "authentik" ];
}; };*/
/*ntfy = { /*ntfy = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`ntfy.blunkall.us`)"; rule = "Host(`ntfy.esotericbytes.com`)";
service = "ntfy"; service = "ntfy";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
};*/ };*/
/*pihole = { /*pihole = {
entryPoints = [ "localsecure" ]; entryPoints = [ "localsecure" ];
rule = "Host(`pihole.blunkall.us`)"; rule = "Host(`pihole.esotericbytes.com`)";
service = "pihole"; service = "pihole";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
};*/ };*/
netbird = { netbird = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`vpn.blunkall.us`)"; rule = "Host(`vpn.esotericbytes.com`)";
service = "netbird"; service = "netbird";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
}; };
/*n8n = { /*n8n = {
entryPoints = [ "websecure" ]; entryPoints = [ "websecure" ];
rule = "Host(`n8n.blunkall.us`)"; rule = "Host(`n8n.esotericbytes.com`)";
service = "n8n"; service = "n8n";
tls.certResolver = "cloudflare"; tls.certResolver = "cloudflare";
};*/ };*/
@@ -197,8 +197,8 @@
nextcloud_redirectregex.redirectregex = { nextcloud_redirectregex.redirectregex = {
permanent = true; permanent = true;
regex = "https://nextcloud.blunkall.us/.well-known/(?:card|cal)dav"; regex = "https://nextcloud.esotericbytes.com/.well-known/(?:card|cal)dav";
replacement = "https://nextcloud.blunkall.us/remote.php/dav"; replacement = "https://nextcloud.esotericbytes.com/remote.php/dav";
}; };
}; };

View File

@@ -98,11 +98,7 @@
openwakeword = lib.mkIf config.sysconfig.virtualization.wyoming.openwakeword { openwakeword = lib.mkIf config.sysconfig.virtualization.wyoming.openwakeword {
enable = true; enable = true;
uri = "tcp://0.0.0.0:11432"; uri = "tcp://0.0.0.0:11432";
preloadModels = [
"alexa"
"hey_jarvis"
"ok_nabu"
];
threshold = 0.5; threshold = 0.5;
customModelsDirectories = [ customModelsDirectories = [
#./wake_words #./wake_words

View File

@@ -1,4 +1,4 @@
{ config, lib, pkgs, inputs, ... }: { { config, lib, pkgs, ... }: {
options.sysconfig.services.sddm.enable = lib.mkOption { options.sysconfig.services.sddm.enable = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
@@ -9,7 +9,7 @@
qt.enable = true; qt.enable = true;
environment.systemPackages = with pkgs; [ (sddm-astronaut.override { embeddedTheme = "cyberpunk"; }) ]; environment.systemPackages = with pkgs; [ (sddm-astronaut.override { embeddedTheme = "pixel_sakura"; }) ];
services.displayManager.sddm = { services.displayManager.sddm = {
enable = true; enable = true;

View File

@@ -0,0 +1,17 @@
{ config, lib, ... }: {
options = {
sysconfig.wireguard.enable = lib.options.mkOption {
type = lib.types.bool;
default = false;
};
};
config = lib.mkIf config.sysconfig.wireguard.enable {
networking.wireguard = {
enable = true;
interfaces.wg0 = {
};
};
};
}

View File

@@ -94,7 +94,7 @@
homeconfig = { homeconfig = {
host = config.sysconfig.host; host = config.sysconfig.host;
name = x; name = x;
graphical = config.sysconfig.graphical; graphical = lib.mkDefault config.sysconfig.graphical;
}; };
} }
] ++ (if inputs ? ${x} then [ (inputs.${x} /*{ config = config.home-manager.users.${x}; inherit lib pkgs inputs; }*/) ] else []) ] ++ (if inputs ? ${x} then [ (inputs.${x} /*{ config = config.home-manager.users.${x}; inherit lib pkgs inputs; }*/) ] else [])