Compare commits
41 Commits
872d29c688
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
e3c54e352c
|
|||
|
ac862dfc1f
|
|||
|
4f6c1e337d
|
|||
|
c5209b0d90
|
|||
|
bbdb6339b0
|
|||
|
0466a882db
|
|||
|
2de46453f3
|
|||
|
4b566d5cea
|
|||
|
16d77233a8
|
|||
|
c6645d3fc9
|
|||
|
6c1d2f501b
|
|||
|
1ba5ec2357
|
|||
|
0788960a9d
|
|||
|
d9e8d23f7d
|
|||
|
03f8271567
|
|||
|
e61cf08607
|
|||
|
1a2796a159
|
|||
|
ff8f8d7e39
|
|||
|
746d6c525e
|
|||
|
13944b3b0b
|
|||
|
dff4d5762d
|
|||
|
066334b880
|
|||
|
e923c84902
|
|||
|
b1c21ee77d
|
|||
|
12bd99e84c
|
|||
| a502f58756 | |||
| c6c55abde2 | |||
|
10074b37d1
|
|||
| bd8b826097 | |||
|
970bfc604c
|
|||
|
8af8dd17e8
|
|||
|
169d4e29e6
|
|||
| a1a6190cd2 | |||
|
f427905748
|
|||
|
a2b98c3ba2
|
|||
|
6420ec0d30
|
|||
|
dbec0bc44a
|
|||
|
488f7e08ef
|
|||
|
b887f7ad65
|
|||
|
f4572eaaad
|
|||
|
03c2d57c67
|
@@ -1,7 +1,29 @@
|
||||
{ ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./system.nix
|
||||
programs.hyprland.enable = true;
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [ pkgs.xdg-desktop-portal-hyprland ];
|
||||
};
|
||||
|
||||
services.displayManager.sddm.enable = true;
|
||||
services.displayManager.sddm.wayland.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
hyprpolkitagent
|
||||
hyprlock
|
||||
hyprshot
|
||||
rofi
|
||||
networkmanagerapplet
|
||||
kdePackages.dolphin
|
||||
wayvnc
|
||||
awww
|
||||
mpvpaper
|
||||
waybar
|
||||
quickshell
|
||||
qt6.qtdeclarative
|
||||
wlogout
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.hyprland.enable = true;
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [ pkgs.xdg-desktop-portal-hyprland ];
|
||||
};
|
||||
|
||||
services.displayManager.sddm.enable = true;
|
||||
services.displayManager.sddm.wayland.enable = true;
|
||||
}
|
||||
@@ -1,9 +1,27 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
xdgOpenUsePortal = true; # Recommended to fix xdg-open issues
|
||||
extraPortals = with pkgs; [
|
||||
xdg-desktop-portal-gtk # For file choosers in GTK apps
|
||||
xdg-desktop-portal-hyprland # For Hyprland (or wlr for other wlroots)
|
||||
];
|
||||
config = {
|
||||
common.default = [ "gtk" ]; # Default fallback
|
||||
hyprland = {
|
||||
default = [
|
||||
"hyprland"
|
||||
"gtk"
|
||||
];
|
||||
"org.freedesktop.impl.portal.ScreenCast" = [ "hyprland" ];
|
||||
"org.freedesktop.impl.portal.Screenshot" = [ "hyprland" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
services.displayManager.sddm.wayland.enable = true;
|
||||
|
||||
xdg.portal.enable = true;
|
||||
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-kde ];
|
||||
}
|
||||
|
||||
Generated
+857
-7
@@ -1,5 +1,195 @@
|
||||
{
|
||||
"nodes": {
|
||||
"cachix": {
|
||||
"inputs": {
|
||||
"devenv": [
|
||||
"clonee",
|
||||
"devenv"
|
||||
],
|
||||
"flake-compat": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"git-hooks": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"git-hooks"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777487137,
|
||||
"narHash": "sha256-TuvKVBX60mqyMT6OB5JqVEh1YIWtFMR/igLCaCdC9tw=",
|
||||
"owner": "cachix",
|
||||
"repo": "cachix",
|
||||
"rev": "a66a440c321d35f7193472c317f42a55ccd1cb93",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"ref": "latest",
|
||||
"repo": "cachix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"cachix_2": {
|
||||
"inputs": {
|
||||
"devenv": [
|
||||
"silicate",
|
||||
"devenv"
|
||||
],
|
||||
"flake-compat": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"git-hooks": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"git-hooks"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777487137,
|
||||
"narHash": "sha256-TuvKVBX60mqyMT6OB5JqVEh1YIWtFMR/igLCaCdC9tw=",
|
||||
"owner": "cachix",
|
||||
"repo": "cachix",
|
||||
"rev": "a66a440c321d35f7193472c317f42a55ccd1cb93",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"ref": "latest",
|
||||
"repo": "cachix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"clonee": {
|
||||
"inputs": {
|
||||
"devenv": "devenv",
|
||||
"naersk": "naersk",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783739292,
|
||||
"narHash": "sha256-4Q15SKZFttcCqnD1MC/qQCqA/L/QqqtN7d9iyMz+ld0=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "378c1f7c0d1c004d504ad8496d136ec381688f10",
|
||||
"revCount": 9,
|
||||
"type": "git",
|
||||
"url": "https://gitea.maariz.org/pure_sagacity/clonee"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://gitea.maariz.org/pure_sagacity/clonee"
|
||||
}
|
||||
},
|
||||
"crate2nix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1772186516,
|
||||
"narHash": "sha256-8s28pzmQ6TOIUzznwFibtW1CMieMUl1rYJIxoQYor58=",
|
||||
"owner": "rossng",
|
||||
"repo": "crate2nix",
|
||||
"rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rossng",
|
||||
"repo": "crate2nix",
|
||||
"rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"crate2nix_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1772186516,
|
||||
"narHash": "sha256-8s28pzmQ6TOIUzznwFibtW1CMieMUl1rYJIxoQYor58=",
|
||||
"owner": "rossng",
|
||||
"repo": "crate2nix",
|
||||
"rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rossng",
|
||||
"repo": "crate2nix",
|
||||
"rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"devenv": {
|
||||
"inputs": {
|
||||
"cachix": "cachix",
|
||||
"crate2nix": "crate2nix",
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-parts": "flake-parts",
|
||||
"ghostty": "ghostty",
|
||||
"git-hooks": "git-hooks",
|
||||
"nix": "nix",
|
||||
"nixd": "nixd",
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782860656,
|
||||
"narHash": "sha256-HiSNP0/eEhKGZBWC6kLZVN8I6j6AwVnI4gjeH25+/5k=",
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"rev": "3f6df48c00d8aa408f0440f2707662aa91a1f033",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"devenv_2": {
|
||||
"inputs": {
|
||||
"cachix": "cachix_2",
|
||||
"crate2nix": "crate2nix_2",
|
||||
"flake-compat": "flake-compat_2",
|
||||
"flake-parts": "flake-parts_2",
|
||||
"ghostty": "ghostty_2",
|
||||
"git-hooks": "git-hooks_2",
|
||||
"nix": "nix_2",
|
||||
"nixd": "nixd_2",
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-overlay": "rust-overlay_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783109842,
|
||||
"narHash": "sha256-Fi7lW+sg1ChduOOQRBCK5JeA1cw4x5wSjIJcppRGGqQ=",
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"rev": "e30eb49258bee68353bd9c619823f635f4afa86c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -20,6 +210,297 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fast": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783830645,
|
||||
"narHash": "sha256-lEx9RLAYwpUS/SpIlRUiIoThQKwjGOj+jXIlmi6CWxg=",
|
||||
"owner": "GitanElyon",
|
||||
"repo": "fast",
|
||||
"rev": "60fb5b7e1f6343bc1fc9a1e168845b71b142810f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "GitanElyon",
|
||||
"repo": "fast",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fenix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"naersk",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752475459,
|
||||
"narHash": "sha256-z6QEu4ZFuHiqdOPbYss4/Q8B0BFhacR8ts6jO/F/aOU=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "bf0d6f70f4c9a9cf8845f992105652173f4b617f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fenix_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"naersk",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-analyzer-src": "rust-analyzer-src_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752475459,
|
||||
"narHash": "sha256-z6QEu4ZFuHiqdOPbYss4/Q8B0BFhacR8ts6jO/F/aOU=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "bf0d6f70f4c9a9cf8845f992105652173f4b617f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1767039857,
|
||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1767039857,
|
||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778716662,
|
||||
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_2": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778716662,
|
||||
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"ghostty": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1779069789,
|
||||
"narHash": "sha256-ojo+gso45/6CVSuqfSVnlWpQ4d0QeLgwok+v/g3yu0E=",
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"rev": "4b7bf0b20e3baf9c1ba10c63f2ad1fd853faea8f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"ghostty_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1782866021,
|
||||
"narHash": "sha256-BOLtzL5iAHmtCOg9/DXtcfw+K86QWol088K72chJB04=",
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"rev": "e1d31deaaed21aa9225afca78d778fb373c95852",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778507602,
|
||||
"narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks_2": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782908218,
|
||||
"narHash": "sha256-wLMOrPgVyeF3XmP+qfYcLqnVdTxikdcSvbIY7rA9jTA=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "9f7e99119ece7705299595299f3b031f39356de1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"git-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1709087332,
|
||||
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"herdr": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783468284,
|
||||
"narHash": "sha256-no8aODMs+tYEnEShJPHKap2imToiA++joPFL+o/ZAmg=",
|
||||
"owner": "ogulcancelik",
|
||||
"repo": "herdr",
|
||||
"rev": "77f0339c3cd387c4ca3f4f240ff8b88065d66a22",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ogulcancelik",
|
||||
"repo": "herdr",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -27,11 +508,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782051614,
|
||||
"narHash": "sha256-xBRAhYLEXcjp8hM2tkkTTLb6PWU7VDxDoogl25g7Ezs=",
|
||||
"lastModified": 1783458499,
|
||||
"narHash": "sha256-a8whUXG4ThsZNjL92cH4wbl+/dt8CbT/F0zJsfhzFbM=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "d1ccd0721ec599866622665f3651e19e6e2d4c6a",
|
||||
"rev": "53ebbdc405acc04acd9bb73ccca462b51ddb8c6d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -40,15 +521,219 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"naersk": {
|
||||
"inputs": {
|
||||
"fenix": "fenix",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782220280,
|
||||
"narHash": "sha256-thLTFbp9D5Qknmh8q/v4FRpLGphUSijT3E86cbLYTXo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"rev": "9aa07bb0256d300219b30622d2454e85f7f3667e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"naersk_2": {
|
||||
"inputs": {
|
||||
"fenix": "fenix_2",
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782220280,
|
||||
"narHash": "sha256-thLTFbp9D5Qknmh8q/v4FRpLGphUSijT3E86cbLYTXo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"rev": "9aa07bb0256d300219b30622d2454e85f7f3667e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"flake-parts": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"flake-parts"
|
||||
],
|
||||
"git-hooks-nix": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"git-hooks"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-23-11": [
|
||||
"clonee",
|
||||
"devenv"
|
||||
],
|
||||
"nixpkgs-regression": [
|
||||
"clonee",
|
||||
"devenv"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779748925,
|
||||
"narHash": "sha256-meIhqGC04O5VXbKSFXSQoOKp+XCq5RMnwAk1Guo0VQo=",
|
||||
"owner": "cachix",
|
||||
"repo": "nix",
|
||||
"rev": "0bc443c8ff235c3547d09327b48aaa2ab98b15f2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"ref": "devenv-2.34",
|
||||
"repo": "nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix_2": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"flake-parts": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"flake-parts"
|
||||
],
|
||||
"git-hooks-nix": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"git-hooks"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-23-11": [
|
||||
"silicate",
|
||||
"devenv"
|
||||
],
|
||||
"nixpkgs-regression": [
|
||||
"silicate",
|
||||
"devenv"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782407171,
|
||||
"narHash": "sha256-xem+4ncdQCTFJsQ4PrVuyVmi3j4w/Yqg298hBUzVejA=",
|
||||
"owner": "cachix",
|
||||
"repo": "nix",
|
||||
"rev": "782ac1b155679b065ec945ae50d0fa1d495883b7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"ref": "devenv-2.34",
|
||||
"repo": "nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixd": {
|
||||
"inputs": {
|
||||
"flake-parts": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"flake-parts"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778381404,
|
||||
"narHash": "sha256-FqhdOTA8vyoIpkHhbs2cCT7h6EWM7nsLeOYJc1ifQLE=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixd",
|
||||
"rev": "e3e45eb76663f522e196b7f0cf34cab201db7779",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixd",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixd_2": {
|
||||
"inputs": {
|
||||
"flake-parts": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"flake-parts"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"treefmt-nix": "treefmt-nix_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780381423,
|
||||
"narHash": "sha256-S1BIJiQF4lRtJUKak0e97JwNvbe69/LW78YJJuB18Qk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixd",
|
||||
"rev": "0e07c08c448a2995e7793d1098437b29bbe80b02",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixd",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1781577229,
|
||||
"narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=",
|
||||
"lastModified": 1752077645,
|
||||
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "567a49d1913ce81ac6e9582e3553dd90a955875f",
|
||||
"rev": "be9e214982e20b8310878ac2baa063a961c1bdf6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1783224372,
|
||||
"narHash": "sha256-FGQ8TfSm9WviNE/fQAWsKs+y4GkX8fU4EScewpw54Y8=",
|
||||
"rev": "d407951447dcd00442e97087bf374aad70c04cea",
|
||||
"type": "tarball",
|
||||
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1027867.d407951447dc/nixexprs.tar.xz"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
@@ -57,9 +742,174 @@
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"clonee": "clonee",
|
||||
"disko": "disko",
|
||||
"fast": "fast",
|
||||
"herdr": "herdr",
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs"
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"silicate": "silicate"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1752428706,
|
||||
"narHash": "sha256-EJcdxw3aXfP8Ex1Nm3s0awyH9egQvB2Gu+QEnJn2Sfg=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "591e3b7624be97e4443ea7b5542c191311aa141d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rust-lang",
|
||||
"ref": "nightly",
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1752428706,
|
||||
"narHash": "sha256-EJcdxw3aXfP8Ex1Nm3s0awyH9egQvB2Gu+QEnJn2Sfg=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "591e3b7624be97e4443ea7b5542c191311aa141d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rust-lang",
|
||||
"ref": "nightly",
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779074409,
|
||||
"narHash": "sha256-6aXy8Ga41iLVM8ibddFU1O5+wYWcBGNEfZzZuL91eIc=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "2a77b5b1dc952f214e8102acdef1622b68515560",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782875958,
|
||||
"narHash": "sha256-5eqDcnBjb1424HRQdnhuhNOBZguq1Z2tqSa2OMF/m2c=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "13139aefa973f3d96c60c0fbab801de058ae25ca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"silicate": {
|
||||
"inputs": {
|
||||
"devenv": "devenv_2",
|
||||
"naersk": "naersk_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783234406,
|
||||
"narHash": "sha256-mtP+W1DYWrzf29HqjsgWECcdxRf6zGtXVvyeyqLhl9E=",
|
||||
"owner": "pure-sagacity",
|
||||
"repo": "silicate",
|
||||
"rev": "63e8d8e8efdb523442b29243cb456ffafd519c18",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pure-sagacity",
|
||||
"repo": "silicate",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"clonee",
|
||||
"devenv",
|
||||
"nixd",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775636079,
|
||||
"narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"treefmt-nix_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"silicate",
|
||||
"devenv",
|
||||
"nixd",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780220602,
|
||||
"narHash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "db947814a175b7ca6ded66e21383d938df01c227",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -11,40 +11,57 @@
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
herdr = {
|
||||
url = "github:ogulcancelik/herdr";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
fast = {
|
||||
url = "github:GitanElyon/fast";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
silicate = {
|
||||
url = "github:pure-sagacity/silicate";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
clonee = {
|
||||
url = "git+https://gitea.maariz.org/pure_sagacity/clonee";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
disko,
|
||||
home-manager,
|
||||
...
|
||||
}:
|
||||
}@inputs:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
in
|
||||
{
|
||||
nixosConfigurations.laptop = nixpkgs.lib.nixosSystem {
|
||||
nixosConfigurations.pc = nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
|
||||
specialArgs = {
|
||||
disk = "/dev/disk/by-id/nvme-SAMSUNG_MZVLB256HBHQ-000H1_S4GNNX2RC66163";
|
||||
};
|
||||
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
disko.nixosModules.disko
|
||||
|
||||
./hosts/laptop/disko.nix
|
||||
./hosts/laptop/configuration.nix
|
||||
|
||||
home-manager.nixosModules.home-manager
|
||||
./hosts/pc/configuration.nix
|
||||
|
||||
home-manager.nixosModules.default
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
|
||||
home-manager.users.river = import ./home/river;
|
||||
backupFileExtension = "backup";
|
||||
|
||||
users = {
|
||||
river = import ./home/river;
|
||||
aariz = import ./home/aariz;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
home.username = "aariz";
|
||||
|
||||
home.homeDirectory = "/home/aariz";
|
||||
|
||||
home.stateVersion = "26.05";
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
# This is terribly complicated
|
||||
# It's because:
|
||||
# 1. bun run has to have dynamic completions
|
||||
# 2. there are global options
|
||||
# 3. bun {install add remove} gets special options
|
||||
# 4. I don't know how to write fish completions well
|
||||
# Contributions very welcome!!
|
||||
|
||||
function __fish__get_bun_bins
|
||||
string split ' ' (bun getcompletes b)
|
||||
end
|
||||
|
||||
function __fish__get_bun_scripts
|
||||
set -lx SHELL bash
|
||||
set -lx MAX_DESCRIPTION_LEN 40
|
||||
string trim (string split '\n' (string split '\t' (bun getcompletes z)))
|
||||
end
|
||||
|
||||
function __fish__get_bun_packages
|
||||
if test (commandline -ct) != ""
|
||||
set -lx SHELL fish
|
||||
string split ' ' (bun getcompletes a (commandline -ct))
|
||||
end
|
||||
end
|
||||
|
||||
function __history_completions
|
||||
set -l tokens (commandline --current-process --tokenize)
|
||||
history --prefix (commandline) | string replace -r \^$tokens[1]\\s\* "" | string replace -r \^$tokens[2]\\s\* "" | string split ' '
|
||||
end
|
||||
|
||||
function __fish__get_bun_bun_js_files
|
||||
string split ' ' (bun getcompletes j)
|
||||
end
|
||||
|
||||
set -l bun_install_boolean_flags yarn production optional development no-save dry-run force no-cache silent verbose global
|
||||
set -l bun_install_boolean_flags_descriptions "Write a yarn.lock file (yarn v1)" "Don't install devDependencies" "Add dependency to optionalDependencies" "Add dependency to devDependencies" "Don't update package.json or save a lockfile" "Don't install anything" "Always request the latest versions from the registry & reinstall all dependencies" "Ignore manifest cache entirely" "Don't output anything" "Excessively verbose logging" "Use global folder"
|
||||
|
||||
set -l bun_builtin_cmds_without_run dev create help bun upgrade discord install remove add update init pm x repl
|
||||
set -l bun_builtin_cmds_accepting_flags create help bun upgrade discord run init link unlink pm x update
|
||||
|
||||
function __bun_complete_bins_scripts --inherit-variable bun_builtin_cmds_without_run -d "Emit bun completions for bins and scripts"
|
||||
# Do nothing if we already have a builtin subcommand,
|
||||
# or any subcommand other than "run".
|
||||
if __fish_seen_subcommand_from $bun_builtin_cmds_without_run
|
||||
or not __fish_use_subcommand && not __fish_seen_subcommand_from run
|
||||
return
|
||||
end
|
||||
# Do we already have a bin or script subcommand?
|
||||
set -l bins (__fish__get_bun_bins)
|
||||
if __fish_seen_subcommand_from $bins
|
||||
return
|
||||
end
|
||||
# Scripts have descriptions appended with a tab separator.
|
||||
# Strip off descriptions for the purposes of subcommand testing.
|
||||
set -l scripts (__fish__get_bun_scripts)
|
||||
if __fish_seen_subcommand_from (string split \t -f 1 -- $scripts)
|
||||
return
|
||||
end
|
||||
# Emit scripts.
|
||||
for script in $scripts
|
||||
echo $script
|
||||
end
|
||||
# Emit binaries and JS files (but only if we're doing `bun run`).
|
||||
if __fish_seen_subcommand_from run
|
||||
for bin in $bins
|
||||
echo "$bin"\t"package bin"
|
||||
end
|
||||
for file in (__fish__get_bun_bun_js_files)
|
||||
echo "$file"\t"Bun.js"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Clear existing completions
|
||||
complete -e -c bun
|
||||
|
||||
# Dynamically emit scripts and binaries
|
||||
complete -c bun -f -a "(__bun_complete_bins_scripts)"
|
||||
|
||||
# Complete flags if we have no subcommand or a flag-friendly one.
|
||||
set -l flag_applies "__fish_use_subcommand; or __fish_seen_subcommand_from $bun_builtin_cmds_accepting_flags"
|
||||
complete -c bun \
|
||||
-n $flag_applies --no-files -s 'u' -l 'origin' -r -d 'Server URL. Rewrites import paths'
|
||||
complete -c bun \
|
||||
-n $flag_applies --no-files -s 'p' -l 'port' -r -d 'Port number to start server from'
|
||||
complete -c bun \
|
||||
-n $flag_applies --no-files -s 'd' -l 'define' -r -d 'Substitute K:V while parsing, e.g. --define process.env.NODE_ENV:\"development\"'
|
||||
complete -c bun \
|
||||
-n $flag_applies --no-files -s 'e' -l 'external' -r -d 'Exclude module from transpilation (can use * wildcards). ex: -e react'
|
||||
complete -c bun \
|
||||
-n $flag_applies --no-files -l 'use' -r -d 'Use a framework (ex: next)'
|
||||
complete -c bun \
|
||||
-n $flag_applies --no-files -l 'hot' -r -d 'Enable hot reloading in Bun\'s JavaScript runtime'
|
||||
|
||||
# Complete dev and create as first subcommand.
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'dev' -d 'Start dev server'
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'create' -f -d 'Create a new project from a template'
|
||||
|
||||
# Complete "next" and "react" if we've seen "create".
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from create" -a 'next' -d 'new Next.js project'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from create" -a 'react' -d 'new React project'
|
||||
|
||||
# Complete "upgrade" as first subcommand.
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'upgrade' -d 'Upgrade bun to the latest version' -x
|
||||
# Complete "-h/--help" unconditionally.
|
||||
complete -c bun \
|
||||
-s "h" -l "help" -d 'See all commands and flags' -x
|
||||
|
||||
# Complete "-v/--version" if we have no subcommand.
|
||||
complete -c bun \
|
||||
-n "not __fish_use_subcommand" -l "version" -s "v" -d 'Bun\'s version' -x
|
||||
|
||||
# Complete additional subcommands.
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'discord' -d 'Open bun\'s Discord server' -x
|
||||
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'bun' -d 'Generate a new bundle'
|
||||
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from bun" -F -d 'Bundle this'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from create; and __fish_seen_subcommand_from react next" -F -d "Create in directory"
|
||||
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'init' -F -d 'Start an empty Bun project'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'install' -f -d 'Install packages from package.json'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'add' -F -d 'Add a package to package.json'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_use_subcommand" -a 'remove' -F -d 'Remove a package from package.json'
|
||||
|
||||
|
||||
for i in (seq (count $bun_install_boolean_flags))
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from install add remove update" -l "$bun_install_boolean_flags[$i]" -d "$bun_install_boolean_flags_descriptions[$i]"
|
||||
end
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from install add remove update" -l 'cwd' -d 'Change working directory'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from install add remove update" -l 'cache-dir' -d 'Choose a cache directory (default: $HOME/.bun/install/cache)'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from add" -d 'Popular' -a '(__fish__get_bun_packages)'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from add" -d 'History' -a '(__history_completions)'
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from pm; and not __fish_seen_subcommand_from (__fish__get_bun_bins) (__fish__get_bun_scripts) cache;" -a 'bin ls cache hash hash-print hash-string' -f
|
||||
|
||||
complete -c bun \
|
||||
-n "__fish_seen_subcommand_from pm; and __fish_seen_subcommand_from cache; and not __fish_seen_subcommand_from (__fish__get_bun_bins) (__fish__get_bun_scripts);" -a 'rm' -f
|
||||
|
||||
# Add built-in subcommands with descriptions.
|
||||
complete -c bun -n "__fish_use_subcommand" -a "create" -f -d "Create a new project from a template"
|
||||
complete -c bun -n "__fish_use_subcommand" -a "build bun" --require-parameter -F -d "Transpile and bundle one or more files"
|
||||
complete -c bun -n "__fish_use_subcommand" -a "upgrade" -d "Upgrade Bun"
|
||||
complete -c bun -n "__fish_use_subcommand" -a "run" -d "Run a script or package binary"
|
||||
complete -c bun -n "__fish_use_subcommand" -a "install" -d "Install dependencies from package.json" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "remove" -d "Remove a dependency from package.json" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "add" -d "Add a dependency to package.json" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "init" -d "Initialize a Bun project in this directory" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "link" -d "Register or link a local npm package" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "unlink" -d "Unregister a local npm package" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "pm" -d "Additional package management utilities" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "x" -d "Execute a package binary, installing if needed" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "outdated" -d "Display the latest versions of outdated dependencies" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "update" -d "Update dependencies to their latest versions" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "publish" -d "Publish your package from local to npm" -f
|
||||
complete -c bun -n "__fish_use_subcommand" -a "repl" -d "Start a REPL session with Bun" -f
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -s "e" -l "eval" -r -d "Evaluate argument as a script, then exit" -f
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -s "p" -l "print" -r -d "Evaluate argument as a script, print the result, then exit" -f
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -s "r" -l "preload" -r -d "Import a module before other modules are loaded"
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -l "smol" -d "Use less memory, but run garbage collection more often" -f
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -s "c" -l "config" -r -d "Specify path to Bun config file"
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -l "cwd" -r -d "Absolute path to resolve files & entry points from"
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -l "env-file" -r -d "Load environment variables from the specified file(s)"
|
||||
complete -c bun -n "__fish_seen_subcommand_from repl" -l "no-env-file" -d "Disable automatic loading of .env files" -f
|
||||
@@ -0,0 +1,98 @@
|
||||
# fish completion for copilot
|
||||
# Generated by `copilot completion fish`. Do not edit by hand.
|
||||
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'login' -d 'Authenticate with Copilot'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'help' -d 'Display help information'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'init' -d 'Initialize Copilot instructions'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'update' -d 'Download the latest version'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'version' -d 'Display version information'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'plugin' -d 'Manage plugins'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'mcp' -d 'Manage MCP servers'
|
||||
complete -c copilot -n '__fish_use_subcommand' -f -a 'completion' -d 'Generate a shell completion script'
|
||||
complete -c copilot -l version -s v -f -d 'show version information'
|
||||
complete -c copilot -l interactive -s i -r -d 'Start interactive mode and automatically execute this prompt'
|
||||
complete -c copilot -l prompt -s p -r -d 'Execute a prompt in non-interactive mode (exits after completion)'
|
||||
complete -c copilot -l silent -s s -f -d 'Output only the agent response (no stats), useful for scripting with -p'
|
||||
complete -c copilot -l model -r -d 'Set the AI model to use'
|
||||
complete -c copilot -l effort -l reasoning-effort -r -d 'Set the reasoning effort level' -a 'low medium high xhigh'
|
||||
complete -c copilot -l enable-reasoning-summaries -f -d 'Request reasoning summaries for OpenAI models'
|
||||
complete -c copilot -l agent -r -d 'Specify a custom agent to use'
|
||||
complete -c copilot -l resume -r -d 'Resume from a previous session (optionally specify session ID, task ID, or name; name matching is exact, case-insensitive)'
|
||||
complete -c copilot -l continue -f -d 'Resume the most recent session'
|
||||
complete -c copilot -l name -s n -r -d 'Set a name for the new session'
|
||||
complete -c copilot -l connect -r -d 'Connect directly to a remote session (optionally specify session ID or task ID)'
|
||||
complete -c copilot -l allow-all-tools -f -d 'Allow all tools to run automatically without confirmation; required for non-interactive mode'
|
||||
complete -c copilot -l allow-all-paths -f -d 'Disable file path verification and allow access to any path'
|
||||
complete -c copilot -l disallow-temp-dir -f -d 'Prevent automatic access to the system temporary directory'
|
||||
complete -c copilot -l no-custom-instructions -f -d 'Disable loading of custom instructions from AGENTS.md and related files'
|
||||
complete -c copilot -l no-auto-update -f -d 'Disable downloading CLI update automatically (disabled by default in CI environments)'
|
||||
complete -c copilot -l no-ask-user -f -d 'Disable the ask_user tool (agent works autonomously without asking questions)'
|
||||
complete -c copilot -l banner -f -d 'Show the startup banner'
|
||||
complete -c copilot -l no-color -f -d 'Disable all color output'
|
||||
complete -c copilot -l screen-reader -f -d 'Enable screen reader optimizations'
|
||||
complete -c copilot -l plain-diff -f -d 'Disable rich diff rendering (syntax highlighting via diff tool specified by git config)'
|
||||
complete -c copilot -s C -r -d 'Change working directory before doing anything else'
|
||||
complete -c copilot -l log-dir -r -d 'Set log file directory (default: ~/.copilot/logs/)'
|
||||
complete -c copilot -l log-level -r -d 'Set the log level' -a 'none error warning info debug all default'
|
||||
complete -c copilot -l stream -r -d 'Enable or disable streaming mode' -a 'on off'
|
||||
complete -c copilot -l output-format -r -d 'Output format: \'text\' (default) or \'json\' (JSONL, one JSON object per line)' -a 'text json'
|
||||
complete -c copilot -l share -r -d 'Share session to markdown file after completion in non-interactive mode (default: ./copilot-session-<id>.md)'
|
||||
complete -c copilot -l share-gist -f -d 'Share session to a secret GitHub gist after completion in non-interactive mode'
|
||||
complete -c copilot -l add-dir -r -d 'Add a directory to the allowed list for file access (can be used multiple times)'
|
||||
complete -c copilot -l attachment -r -d 'Attach a file (image or native document) to the initial prompt; only valid in non-interactive mode (can be used multiple times)'
|
||||
complete -c copilot -l disable-mcp-server -r -d 'Disable a specific MCP server (can be used multiple times)'
|
||||
complete -c copilot -l disable-builtin-mcps -f -d 'Disable all built-in MCP servers (currently: github-mcp-server)'
|
||||
complete -c copilot -l enable-all-github-mcp-tools -f -d 'Enable all GitHub MCP server tools instead of the default CLI subset. Overrides --add-github-mcp-toolset and --add-github-mcp-tool options.'
|
||||
complete -c copilot -l add-github-mcp-toolset -r -d 'Add a toolset to enable for the GitHub MCP server instead of the default CLI subset (can be used multiple times). Use "all" for all toolsets.'
|
||||
complete -c copilot -l add-github-mcp-tool -r -d 'Add a tool to enable for the GitHub MCP server instead of the default CLI subset (can be used multiple times). Use "*" for all tools.'
|
||||
complete -c copilot -l plugin-dir -r -d 'Load a plugin from a local directory (can be used multiple times)'
|
||||
complete -c copilot -l additional-mcp-config -r -d 'Additional MCP servers configuration as JSON string or file path (prefix with @) (can be used multiple times; augments config from ~/.copilot/mcp-config.json for this session)'
|
||||
complete -c copilot -l allow-tool -r -d 'Tools the CLI has permission to use; will not prompt for permission'
|
||||
complete -c copilot -l deny-tool -r -d 'Tools the CLI does not have permission to use; will not prompt for permission'
|
||||
complete -c copilot -l available-tools -r -d 'Only these tools will be available to the model'
|
||||
complete -c copilot -l excluded-tools -r -d 'These tools will not be available to the model'
|
||||
complete -c copilot -l secret-env-vars -r -d 'Environment variable names whose values are stripped from shell and MCP server environments and redacted from output (e.g., --secret-env-vars=MY_KEY,OTHER_KEY)'
|
||||
complete -c copilot -l allow-url -r -d 'Allow access to specific URLs or domains'
|
||||
complete -c copilot -l deny-url -r -d 'Deny access to specific URLs or domains, takes precedence over --allow-url'
|
||||
complete -c copilot -l allow-all-urls -f -d 'Allow access to all URLs without confirmation'
|
||||
complete -c copilot -l allow-all -f -d 'Enable all permissions (equivalent to --allow-all-tools --allow-all-paths --allow-all-urls)'
|
||||
complete -c copilot -l yolo -f -d 'Enable all permissions (equivalent to --allow-all-tools --allow-all-paths --allow-all-urls)'
|
||||
complete -c copilot -l max-autopilot-continues -r -d 'Maximum number of continuation messages in autopilot mode'
|
||||
complete -c copilot -l mode -r -d 'Set the initial agent mode' -a 'interactive plan autopilot'
|
||||
complete -c copilot -l autopilot -f -d 'Start in autopilot mode'
|
||||
complete -c copilot -l plan -f -d 'Start in plan mode'
|
||||
complete -c copilot -l experimental -f -d 'Enable experimental features'
|
||||
complete -c copilot -l no-experimental -f -d 'Disable experimental features'
|
||||
complete -c copilot -l bash-env -r -d 'Enable BASH_ENV support for bash shells (on|off)'
|
||||
complete -c copilot -l no-bash-env -f -d 'Disable BASH_ENV support for bash shells'
|
||||
complete -c copilot -l mouse -r -d 'Enable mouse support in alt screen mode (on|off)'
|
||||
complete -c copilot -l no-mouse -f -d 'Disable mouse support in alt screen mode'
|
||||
complete -c copilot -l acp -f -d 'Start as Agent Client Protocol server'
|
||||
complete -c copilot -l remote -f -d 'Enable remote control of your session from GitHub web and mobile'
|
||||
complete -c copilot -l no-remote -f -d 'Disable remote control of your session from GitHub web and mobile'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from login' -l host -r -d 'GitHub host URL (default: https://github.com)'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin' -f -a 'install' -d 'Install a plugin'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin' -f -a 'uninstall' -d 'Uninstall a plugin'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin' -f -a 'update' -d 'Update a plugin'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin' -f -a 'list' -d 'List installed plugins'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin' -f -a 'marketplace' -d 'Manage plugin marketplaces'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin; and __fish_seen_subcommand_from marketplace' -f -a 'add' -d 'Add a marketplace'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin; and __fish_seen_subcommand_from marketplace' -f -a 'remove' -d 'Remove a marketplace'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin; and __fish_seen_subcommand_from marketplace' -f -a 'list' -d 'List registered marketplaces'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin; and __fish_seen_subcommand_from marketplace' -f -a 'browse' -d 'Browse plugins in a marketplace'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin; and __fish_seen_subcommand_from marketplace' -f -a 'update' -d 'Update marketplace plugin catalogs'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from plugin; and __fish_seen_subcommand_from marketplace; and __fish_seen_subcommand_from remove' -l force -s f -f -d 'Force removal even if plugins are installed'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp' -f -a 'list' -d 'List configured MCP servers'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp' -f -a 'get' -d 'Show server details'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp' -f -a 'add' -d 'Add an MCP server'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp' -f -a 'remove' -d 'Remove an MCP server'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from list' -l json -f -d 'Output as JSON'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from get' -l json -f -d 'Output as JSON'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from get' -l show-secrets -f -d 'Show full environment variable and header values (masked by default)'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l transport -r -d 'Server transport' -a 'stdio http sse'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l env -r -d 'Environment variable (KEY=VALUE, can be repeated)'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l header -r -d 'HTTP header for remote servers, can be repeated'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l tools -r -d 'Tool filter: "*" for all, comma-separated list, or "" for none'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l timeout -r -d 'Timeout in milliseconds'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l json -f -d 'Output added config as JSON'
|
||||
complete -c copilot -n '__fish_seen_subcommand_from mcp; and __fish_seen_subcommand_from add' -l show-secrets -f -d 'Show full environment variable and header values in output, masked by default'
|
||||
@@ -0,0 +1,14 @@
|
||||
# This file was created by fish when upgrading to version 4.3, to migrate
|
||||
# the 'fish_key_bindings' variable from its old default scope (universal)
|
||||
# to its new default scope (global). We recommend you delete this file
|
||||
# and configure key bindings in ~/.config/fish/config.fish if needed.
|
||||
|
||||
# set --global fish_key_bindings fish_default_key_bindings
|
||||
|
||||
# Prior to version 4.3, fish shipped an event handler that runs
|
||||
# `set --universal fish_key_bindings fish_default_key_bindings`
|
||||
# whenever the fish_key_bindings variable is erased.
|
||||
# This means that as long as any fish < 4.3 is still running on this system,
|
||||
# we cannot complete the migration.
|
||||
# As a workaround, erase the universal variable at every shell startup.
|
||||
set --erase --universal fish_key_bindings
|
||||
@@ -0,0 +1,42 @@
|
||||
if status is-interactive
|
||||
starship init fish | source
|
||||
zoxide init fish | source
|
||||
glow completion fish | source
|
||||
|
||||
alias cd=z
|
||||
alias docker=podman
|
||||
alias ls='/etc/profiles/per-user/river/bin/eza --icons'
|
||||
alias cat="/etc/profiles/per-user/river/bin/bat"
|
||||
alias grep="/etc/profiles/per-user/river/bin/rg"
|
||||
alias idea="v ~/.idea/idea.md"
|
||||
|
||||
export PATH="$HOME/.npm-global/bin:$PATH"
|
||||
|
||||
alias kubectx='kubectl config use-context'
|
||||
alias nrs="sudo nixos-rebuild switch --flake /home/river/nixos-dotfiles#pc"
|
||||
alias config="nvim /home/river/nixos-dotfiles/hosts/pc/configuration.nix"
|
||||
alias v=nvim
|
||||
alias y=yazi
|
||||
alias k=kubectl
|
||||
alias j=jj
|
||||
end
|
||||
|
||||
function fish_greeting
|
||||
|
||||
end
|
||||
|
||||
# bun
|
||||
set --export BUN_INSTALL "$HOME/.bun"
|
||||
set --export PATH $BUN_INSTALL/bin $PATH
|
||||
|
||||
alias cea="bunx create-expo-app --no-install"
|
||||
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
set -gx GPG_TTY (tty)
|
||||
gpg-connect-agent updatestartuptty /bye >/dev/null
|
||||
|
||||
# OpenClaw Completion
|
||||
test -f "/home/river/.openclaw/completions/openclaw.fish"; and source "/home/river/.openclaw/completions/openclaw.fish"
|
||||
|
||||
set -gx CLAUDE_CODE_MAX_OUTPUT_TOKENS 64000
|
||||
@@ -0,0 +1,4 @@
|
||||
# This file contains fish universal variable definitions.
|
||||
# VERSION: 3.0
|
||||
SETUVAR __fish_initialized:4300
|
||||
SETUVAR fish_user_paths:/opt/homebrew/opt/llvm/bin
|
||||
@@ -0,0 +1,19 @@
|
||||
function clone-starter
|
||||
if test (count $argv) -eq 0
|
||||
echo "Usage: clone-starter <project-name>"
|
||||
return 1
|
||||
end
|
||||
|
||||
set project_name $argv[1]
|
||||
|
||||
git clone https://github.com/pure-sagacity/turborepo-starter-project.git $project_name
|
||||
|
||||
if test $status -ne 0
|
||||
echo "Error: git clone failed"
|
||||
return 1
|
||||
end
|
||||
|
||||
rm -rf $project_name/.git
|
||||
|
||||
echo "✓ Created $project_name (git history removed)"
|
||||
end
|
||||
@@ -0,0 +1,20 @@
|
||||
function copy
|
||||
if test (count $argv) -eq 0
|
||||
echo "Usage: copy <file>"
|
||||
return 1
|
||||
end
|
||||
|
||||
if not test -f $argv[1]
|
||||
echo "Error: File '$argv[1]' not found"
|
||||
return 1
|
||||
end
|
||||
|
||||
cat $argv[1] | wl-copy
|
||||
|
||||
if test $status -eq 0
|
||||
echo "Copied contents of '$argv[1]' to clipboard"
|
||||
else
|
||||
echo "Error: Failed to copy to clipboard"
|
||||
return 1
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
function generateSecret
|
||||
openssl rand -base64 32 | pbcopy
|
||||
|
||||
echo "Copied secret to clipboard!"
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
function wipedns
|
||||
sudo dscacheutil -flushcache
|
||||
sudo killall -HUP mDNSResponder
|
||||
end
|
||||
@@ -2,9 +2,7 @@ window-padding-x = 2
|
||||
|
||||
font-family = "JetBrains Mono NL"
|
||||
|
||||
macos-icon = custom
|
||||
macos-custom-icon = /Users/Maaz/.config/ghostty/Ghostty.icns
|
||||
|
||||
theme = Catppuccin Mocha
|
||||
#theme = Catppuccin Mocha
|
||||
theme = Argonaut
|
||||
|
||||
font-size = 16
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
local config = require("variables.lua")
|
||||
local config = require("variables")
|
||||
|
||||
hl.on("hyprland.start", function ()
|
||||
hl.exec_cmd(config.terminal)
|
||||
hl.exec_cmd("wayvnc 0.0.0.0 5900")
|
||||
hl.exec_cmd("nm-applet")
|
||||
hl.exec_cmd(config.terminal)
|
||||
hl.exec_cmd(config.wallpaper_cmd)
|
||||
hl.exec_cmd(config.bar_cmd)
|
||||
end)
|
||||
@@ -1,21 +1,21 @@
|
||||
hl.config({
|
||||
decoration = {
|
||||
rounding = 0,
|
||||
rounding_power = 0,
|
||||
decoration = {
|
||||
rounding = 0,
|
||||
rounding_power = 0,
|
||||
|
||||
-- Change transparency of focused and unfocused windows
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 0.9,
|
||||
-- Change transparency of focused and unfocused windows
|
||||
active_opacity = 0.9,
|
||||
inactive_opacity = 0.8,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
}
|
||||
})
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
local theme = require("themes.lua")
|
||||
local theme = require("themes")
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 2,
|
||||
gaps_out = 10,
|
||||
|
||||
border_size = 1,
|
||||
border_size = 2,
|
||||
|
||||
col = {
|
||||
active_border = theme.primary,
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
require("autostart.lua")
|
||||
require("keybinds.lua")
|
||||
require("monitor.lua")
|
||||
require("decoration.lua")
|
||||
require("general.lua")
|
||||
require("smart-gaps.lua")
|
||||
require("inputs.lua")
|
||||
require("autostart")
|
||||
require("keybinds")
|
||||
require("monitor")
|
||||
require("decoration")
|
||||
require("general")
|
||||
--require("smart-gaps")
|
||||
require("inputs")
|
||||
|
||||
|
||||
@@ -1,45 +1,69 @@
|
||||
local config = require("variables.lua")
|
||||
|
||||
local config = require("variables")
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
|
||||
-- Application Binds
|
||||
hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(config.terminal))
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(config.file_manager))
|
||||
hl.bind("ALT + SPACE", hl.dsp.exec_cmd(config.menu))
|
||||
|
||||
hl.bind(mainMod .. " + B", hl.dsp.exec_cmd(config.browser))
|
||||
|
||||
hl.bind(mainMod .. " + Q", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + Escape", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(
|
||||
mainMod .. " + SHIFT + Escape",
|
||||
hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'")
|
||||
)
|
||||
hl.bind("CTRL + ALT + DELETE", hl.dsp.exec_cmd("wlogout"))
|
||||
hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit"))
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + I", hl.dsp.exec_cmd('ghostty -e bash -c "ollama"'))
|
||||
hl.bind(mainMod .. " + N", hl.dsp.exec_cmd('ghostty -e bash -c "nmtui"'))
|
||||
|
||||
-- Window Binds
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
hl.bind(mainMod .. " + SHIFT + LEFT", hl.dsp.move({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + SHIFT + RIGHT", hl.dsp.move({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + SHIFT + UP", hl.dsp.move({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + SHIFT + DOWN", hl.dsp.move({ direction = "down" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
hl.bind(mainMod .. " + SHIFT + LEFT", hl.dsp.window.move({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + SHIFT + RIGHT", hl.dsp.window.move({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + SHIFT + UP", hl.dsp.window.move({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + SHIFT + DOWN", hl.dsp.window.move({ direction = "down" }))
|
||||
|
||||
-- Workspace Binds
|
||||
for i = 1, 10 do
|
||||
local key = i % 10
|
||||
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i}))
|
||||
hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||
local key = i % 10
|
||||
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i }))
|
||||
hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||
end
|
||||
|
||||
-- Resize Windows
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Screenshot
|
||||
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.exec_cmd(config.screen_shot_cmd))
|
||||
|
||||
-- Laptop Multimedia Keys
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||
hl.bind(
|
||||
"XF86AudioRaiseVolume",
|
||||
hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind(
|
||||
"XF86AudioLowerVolume",
|
||||
hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind(
|
||||
"XF86AudioMute",
|
||||
hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind(
|
||||
"XF86AudioMicMute",
|
||||
hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
hl.monitor({
|
||||
output = "eDP-1",
|
||||
mode = "1920x1080@60",
|
||||
output = "DP-2",
|
||||
mode = "2560x1440@165",
|
||||
position = "0x0",
|
||||
scale = 1,
|
||||
})
|
||||
@@ -1,25 +1,19 @@
|
||||
local function wallpaper_util(wallpaper_path)
|
||||
local ext = wallpaper_path:lower():match("^.+%.([a-z0-9]+)$")
|
||||
|
||||
if ext == "mp4" or ext == "mkv" or ext == "webm" or ext == "mov" then
|
||||
return string.format(
|
||||
'mpvpaper ALL "%s" --mpv-options="loop-file=inf no-audio"',
|
||||
wallpaper_path
|
||||
)
|
||||
end
|
||||
|
||||
return string.format(
|
||||
'mpvpaper '*' "%s"',
|
||||
wallpaper_path
|
||||
)
|
||||
end
|
||||
local ext = wallpaper_path:lower():match("^.+%.([a-z0-9]+)$")
|
||||
|
||||
if ext == "mp4" or ext == "mkv" or ext == "webm" or ext == "mov" then
|
||||
return string.format('mpvpaper ALL "%s" --mpv-options="loop-file=inf no-audio"', wallpaper_path)
|
||||
end
|
||||
|
||||
return string.format('awww-daemon & awww img "%s"', wallpaper_path)
|
||||
end
|
||||
|
||||
return {
|
||||
terminal = "ghostty",
|
||||
file_manager = "dolphin",
|
||||
screen_shot_cmd = "hyprshot -m region -o ~/Pictures/Screenshots",
|
||||
menu = "rofi -show drun",
|
||||
wallpaper_cmd = wallpaper_util("/home/river/Videos/Wallpapers/Wallpaper.mp4"),
|
||||
browser = "brave",
|
||||
bar_cmd = "qs"
|
||||
}
|
||||
terminal = "ghostty",
|
||||
file_manager = "dolphin",
|
||||
screen_shot_cmd = "hyprshot -m region -o ~/Pictures/Screenshots",
|
||||
menu = "rofi -show drun",
|
||||
wallpaper_cmd = wallpaper_util("/home/river/Pictures/Wallpapers/bg.png"),
|
||||
browser = "brave",
|
||||
bar_cmd = "waybar",
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ return {
|
||||
name = "catppuccin",
|
||||
priority = 1000,
|
||||
opts = {
|
||||
flavour = "mocha", -- Choose "latte", "frappe", "macchiato", or "mocha"
|
||||
flavour = "frappe", -- Choose "latte", "frappe", "macchiato", or "mocha"
|
||||
transparent_background = true,
|
||||
custom_highlights = function(colors)
|
||||
return {
|
||||
|
||||
@@ -11,6 +11,21 @@ return {
|
||||
},
|
||||
},
|
||||
},
|
||||
gopls = {},
|
||||
nixd = {},
|
||||
},
|
||||
},
|
||||
setup = {
|
||||
cmd = { "nixd" },
|
||||
settings = {
|
||||
nixd = {
|
||||
nixpkgs = {
|
||||
expr = "import <nixpkgs> { }",
|
||||
},
|
||||
formatting = {
|
||||
command = { "nixfmt" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
+35
-11
@@ -1,20 +1,44 @@
|
||||
{ config, pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
./programs/bash.nix
|
||||
./programs/git.nix
|
||||
./programs/gpg.nix
|
||||
./programs/fish.nix
|
||||
./programs/vesktop.nix
|
||||
./programs/java.nix
|
||||
./programs/jujutsu.nix
|
||||
];
|
||||
|
||||
home.file = {
|
||||
".config/hypr".source = ./config/hypr;
|
||||
".config/tmux".source = ./config/tmux;
|
||||
".config/ghostty".source = ./config/ghostty;
|
||||
".config/nvim".source = ./config/nvim;
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
bash
|
||||
fish
|
||||
vesktop
|
||||
neovim
|
||||
tmux
|
||||
jujutsu
|
||||
];
|
||||
|
||||
file = {
|
||||
".config/hypr".source = ./config/hypr;
|
||||
".config/tmux".source = ./config/tmux;
|
||||
".config/ghostty".source = ./config/ghostty;
|
||||
".config/nvim".source = ./config/nvim;
|
||||
".config/fish".source = ./config/fish;
|
||||
};
|
||||
|
||||
sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
};
|
||||
|
||||
username = "river";
|
||||
homeDirectory = "/home/river";
|
||||
|
||||
stateVersion = "26.05";
|
||||
};
|
||||
|
||||
home.username = "river";
|
||||
home.homeDirectory = "/home/river";
|
||||
|
||||
home.stateVersion = "26.05";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./eza.nix
|
||||
./starship.nix
|
||||
./zoxide.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
fish
|
||||
bat
|
||||
fzf
|
||||
fd
|
||||
zoxide
|
||||
ripgrep
|
||||
neovim
|
||||
];
|
||||
|
||||
home.file.".config/fish".source = ../config/fish;
|
||||
|
||||
programs.fish.enable = true;
|
||||
}
|
||||
@@ -1,9 +1,29 @@
|
||||
{ ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
package = pkgs.gitFull;
|
||||
settings = {
|
||||
user = {
|
||||
name = "Maaz Khokhar";
|
||||
email = "khokharmaaz@gmail.com";
|
||||
};
|
||||
commit.gpgSign = true;
|
||||
tag.gpgSign = true;
|
||||
gpg.program = "${pkgs.gnupg}/bin/gpg";
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = true;
|
||||
credential.helper = "libsecret";
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
|
||||
signing = {
|
||||
key = "0xA8D1AEA9C92D6867";
|
||||
signByDefault = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.delta = {
|
||||
enable = true;
|
||||
options = {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
defaultCacheTtl = 1800;
|
||||
maxCacheTtl = 1800;
|
||||
pinentry.package = pkgs.pinentry-qt;
|
||||
};
|
||||
|
||||
services.gpg-agent.extraConfig = ''
|
||||
pinentry-program ${pkgs.pinentry-qt}/bin/pinentry
|
||||
'';
|
||||
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
settings = {
|
||||
auto-key-locate = "local,wkd,keyserver";
|
||||
keyserver = "hkps://keys.openpgp.org";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".java/jdk-17".source = pkgs.jdk17;
|
||||
home.file.".java/jdk-25".source = pkgs.jdk25;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.jujutsu = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
email = "khokharmaaz@gmail.com";
|
||||
name = "Maaz Khokhar";
|
||||
};
|
||||
|
||||
signing = {
|
||||
behavior = "own";
|
||||
backend = "gpg";
|
||||
key = "A8D1AEA9C92D6867";
|
||||
};
|
||||
|
||||
ui.color = "always";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
vesktop
|
||||
];
|
||||
}
|
||||
@@ -4,5 +4,6 @@
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./disko.nix
|
||||
|
||||
# Modules
|
||||
../../modules/core
|
||||
../../modules/development
|
||||
../../modules/networking
|
||||
../../modules/virtualization
|
||||
|
||||
## Desktop Environment
|
||||
../../desktops/hyprland
|
||||
];
|
||||
|
||||
boot = {
|
||||
zfs.forceImportRoot = false;
|
||||
supportedFilesystems = [ "zfs" ];
|
||||
|
||||
initrd = {
|
||||
availableKernelModules = [
|
||||
"tpm_tis"
|
||||
"tpm_crb"
|
||||
];
|
||||
};
|
||||
|
||||
loader = {
|
||||
efi = {
|
||||
canTouchEfiVariables = true;
|
||||
efiSysMountPoint = "/boot";
|
||||
};
|
||||
grub = {
|
||||
enable = true;
|
||||
device = "nodev";
|
||||
efiSupport = true;
|
||||
useOSProber = true;
|
||||
};
|
||||
};
|
||||
|
||||
kernelModules = [
|
||||
"tpm_tis"
|
||||
"tpm_crb"
|
||||
];
|
||||
};
|
||||
|
||||
security = {
|
||||
tpm2.enable = true;
|
||||
sudo.wheelNeedsPassword = false;
|
||||
};
|
||||
|
||||
services.zfs.autoScrub.enable = true;
|
||||
services.zfs.autoSnapshot.enable = true;
|
||||
|
||||
networking.hostId = "8425e349";
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
tpm2-tools
|
||||
brave
|
||||
fprintd # Fingerprint
|
||||
];
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
{ disk, ... }:
|
||||
|
||||
{
|
||||
disko.devices = {
|
||||
disk.main = {
|
||||
type = "disk";
|
||||
device = disk;
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
size = "1G";
|
||||
type = "EF00";
|
||||
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
|
||||
luks = {
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "cryptroot";
|
||||
# important: allow TPM-based unlocking
|
||||
settings = {
|
||||
allowDiscards = true;
|
||||
};
|
||||
|
||||
# this is key for TPM workflows
|
||||
initrdUnlock = true;
|
||||
content = {
|
||||
type = "zfs";
|
||||
pool = "rpool";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Moved inside disko.devices
|
||||
zpool.rpool = {
|
||||
type = "zpool";
|
||||
rootFsOptions = {
|
||||
compression = "zstd";
|
||||
"com.sun:auto-snapshot" = "true";
|
||||
};
|
||||
datasets = {
|
||||
root = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/";
|
||||
};
|
||||
|
||||
nix = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/nix";
|
||||
};
|
||||
|
||||
home = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/home";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Executable
+161
@@ -0,0 +1,161 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
|
||||
# Modules
|
||||
../../modules/core
|
||||
../../modules/networking
|
||||
../../modules/bluetooth
|
||||
../../modules/gaming
|
||||
../../modules/virtualization
|
||||
../../modules/ollama
|
||||
../../modules/development
|
||||
../../modules/development/claude.nix
|
||||
../../modules/development/go.nix
|
||||
../../modules/additionalUsers/aariz.nix
|
||||
../../modules/obs
|
||||
|
||||
# Desktop
|
||||
../../desktops/plasma
|
||||
../../desktops/hyprland
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
libsecret
|
||||
tree
|
||||
libxtst
|
||||
usbutils
|
||||
brave
|
||||
pciutils
|
||||
stow
|
||||
termius
|
||||
kdePackages.partitionmanager
|
||||
python3
|
||||
fastfetch
|
||||
localsend
|
||||
nvtopPackages.amd
|
||||
pass
|
||||
pinentry-curses
|
||||
github-copilot-cli
|
||||
xautoclick
|
||||
tsx
|
||||
slack
|
||||
mosh
|
||||
code-cursor
|
||||
kdePackages.kdenlive
|
||||
kdePackages.kwallet
|
||||
kdePackages.kwallet-pam
|
||||
element-desktop
|
||||
cmatrix
|
||||
rustdesk
|
||||
];
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
|
||||
services.keyd = {
|
||||
enable = false;
|
||||
keyboards.default = {
|
||||
ids = [ "*" ];
|
||||
settings.main = {
|
||||
capslock = "up";
|
||||
up = "w";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
workstation = {
|
||||
core = {
|
||||
kernel = "latest";
|
||||
allowUnfree = true;
|
||||
ssh.permitRootLogin = true;
|
||||
|
||||
user = {
|
||||
name = "river";
|
||||
fullName = "Maaz Khokhar";
|
||||
shell = "fish";
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
core = {
|
||||
firewall = {
|
||||
allowPing = true;
|
||||
ports.tcp = [
|
||||
22
|
||||
80
|
||||
5900
|
||||
16570
|
||||
18789
|
||||
];
|
||||
};
|
||||
extraHosts = [
|
||||
{
|
||||
ip_address = "192.168.1.60";
|
||||
hostname = "laptop";
|
||||
}
|
||||
];
|
||||
nameservers = [
|
||||
"192.168.1.193"
|
||||
"1.1.1.1"
|
||||
"1.0.0.1"
|
||||
];
|
||||
};
|
||||
tailscale.enable = true;
|
||||
};
|
||||
|
||||
virtualization = {
|
||||
user = "river";
|
||||
|
||||
qemu = {
|
||||
enable = true;
|
||||
containers = true;
|
||||
spiceUSBRedirection = true;
|
||||
virtManager = true;
|
||||
bootModules = [
|
||||
"kvm-amd"
|
||||
];
|
||||
};
|
||||
|
||||
podman = {
|
||||
enable = true;
|
||||
packages.enable = true;
|
||||
};
|
||||
|
||||
lima.enable = true;
|
||||
};
|
||||
|
||||
development = {
|
||||
enable = true;
|
||||
rust.enable = true;
|
||||
typescript.enable = true;
|
||||
go.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.nix-ld.libraries = with pkgs; [
|
||||
brotli
|
||||
stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
systemd.network.wait-online.enable = false;
|
||||
boot.initrd.systemd.network.wait-online.enable = false;
|
||||
services.flatpak.enable = true;
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
5900
|
||||
16570
|
||||
18789
|
||||
];
|
||||
|
||||
hardware = {
|
||||
enableAllFirmware = true;
|
||||
enableRedistributableFirmware = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "nvme" "ahci" "xhci_pci" "usbhid" "uas" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/b290de04-28e6-477f-a23e-6d146c1e36e2";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/8750-9317";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
users.users.aariz = {
|
||||
isNormalUser = true;
|
||||
description = "Aariz Khokhar";
|
||||
packages = with pkgs; [ google-chrome ];
|
||||
shell = pkgs.bash;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
settings = {
|
||||
General = {
|
||||
Experimental = true;
|
||||
};
|
||||
Policy = {
|
||||
AutoEnable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
bluez
|
||||
bluez-tools
|
||||
blueman
|
||||
];
|
||||
|
||||
services.blueman.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
pkgs,
|
||||
shared,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.core;
|
||||
system = pkgs.stdenv.hostPlatform.system;
|
||||
allowRootSSH = if cfg.ssh.permitRootLogin then "yes" else "no";
|
||||
in
|
||||
{
|
||||
config = {
|
||||
networking.hostName = cfg.hostname;
|
||||
|
||||
boot = {
|
||||
kernelPackages = shared.kernelOptions.${cfg.kernel};
|
||||
loader = {
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
editor = true;
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
};
|
||||
|
||||
time.timeZone = "America/Chicago";
|
||||
|
||||
programs.${cfg.user.shell}.enable = true;
|
||||
|
||||
users.users.${cfg.user.name} = with cfg.user; {
|
||||
isNormalUser = true;
|
||||
description = fullName;
|
||||
extraGroups = [
|
||||
"wheel"
|
||||
"networkmanager"
|
||||
"input"
|
||||
];
|
||||
|
||||
shell = pkgs.${shell};
|
||||
};
|
||||
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
gitFull
|
||||
neovim
|
||||
btop
|
||||
unzip
|
||||
mpv
|
||||
wl-clipboard
|
||||
wireplumber
|
||||
brightnessctl
|
||||
pulseaudio
|
||||
pavucontrol
|
||||
ghostty
|
||||
git-credential-manager
|
||||
gnupg
|
||||
yazi
|
||||
jujutsu
|
||||
glow
|
||||
|
||||
inputs.silicate.packages.${system}.default
|
||||
inputs.herdr.packages.${system}.default
|
||||
inputs.fast.packages.${system}.default
|
||||
inputs.clonee.packages.${system}.default
|
||||
];
|
||||
|
||||
nix = {
|
||||
gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 7d";
|
||||
};
|
||||
settings = {
|
||||
trusted-users = [
|
||||
"root"
|
||||
cfg.user.name
|
||||
];
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
auto-optimise-store = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
|
||||
i18n = {
|
||||
defaultLocale = "en_US.UTF-8";
|
||||
|
||||
extraLocaleSettings = {
|
||||
LC_ADDRESS = "en_US.UTF-8";
|
||||
LC_IDENTIFICATION = "en_US.UTF-8";
|
||||
LC_MEASUREMENT = "en_US.UTF-8";
|
||||
LC_MONETARY = "en_US.UTF-8";
|
||||
LC_NAME = "en_US.UTF-8";
|
||||
LC_NUMERIC = "en_US.UTF-8";
|
||||
LC_PAPER = "en_US.UTF-8";
|
||||
LC_TELEPHONE = "en_US.UTF-8";
|
||||
LC_TIME = "en_US.UTF-8";
|
||||
};
|
||||
};
|
||||
|
||||
security.rtkit.enable = true;
|
||||
|
||||
services = {
|
||||
xserver.xkb = {
|
||||
layout = "us";
|
||||
variant = "";
|
||||
};
|
||||
|
||||
openssh = {
|
||||
enable = true;
|
||||
settings.PermitRootLogin = allowRootSSH;
|
||||
};
|
||||
};
|
||||
system.stateVersion = "26.11";
|
||||
};
|
||||
}
|
||||
@@ -1,44 +1,13 @@
|
||||
{ config, pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
shared = import ./shared.nix { inherit pkgs; };
|
||||
in
|
||||
{
|
||||
time.timeZone = "America/Chicago";
|
||||
|
||||
users.users.river = {
|
||||
isNormalUser = true;
|
||||
extraGroups = [
|
||||
"wheel"
|
||||
"networkmanager"
|
||||
];
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
git
|
||||
neovim
|
||||
btop
|
||||
unzip
|
||||
mpv
|
||||
wl-clipboard
|
||||
ghostty
|
||||
wireplumber
|
||||
brightnessctl
|
||||
imports = [
|
||||
./options.nix
|
||||
./config.nix
|
||||
];
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 7d";
|
||||
};
|
||||
|
||||
nix.settings.auto-optimise-store = true;
|
||||
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
alsa.enable = true;
|
||||
};
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
settings.PermitRootLogin = "no";
|
||||
};
|
||||
_module.args.shared = shared;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
lib,
|
||||
shared,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options.workstation.core = {
|
||||
hostname = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "nixos";
|
||||
description = "Hostname of the machine";
|
||||
};
|
||||
|
||||
kernel = lib.mkOption {
|
||||
type = with lib.types; enum (builtins.attrNames shared.kernelOptions);
|
||||
default = "lts";
|
||||
description = "The kernel of the machine";
|
||||
};
|
||||
|
||||
user = {
|
||||
name = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "river";
|
||||
description = "The username of the primary user";
|
||||
};
|
||||
|
||||
fullName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "Maaz Khokhar";
|
||||
description = "The full name of the user";
|
||||
};
|
||||
|
||||
shell = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "fish";
|
||||
description = "The shell the primary user uses";
|
||||
};
|
||||
};
|
||||
|
||||
allowUnfree = lib.mkEnableOption "unfree packages" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
ssh = {
|
||||
permitRootLogin = lib.mkEnableOption "root SSH login";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
kernelOptions = {
|
||||
stable = pkgs.linuxPackages;
|
||||
lts = pkgs.linuxPackages_6_12;
|
||||
latest = pkgs.linuxPackages_latest;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
gitFull
|
||||
neovim
|
||||
nixfmt
|
||||
nixd
|
||||
kubectl
|
||||
jq
|
||||
tmux
|
||||
vscode
|
||||
devenv
|
||||
xh
|
||||
nodejs
|
||||
obsidian
|
||||
];
|
||||
|
||||
# Nix LSP
|
||||
nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.jetbrains-mono
|
||||
];
|
||||
|
||||
};
|
||||
}
|
||||
@@ -1,9 +1,18 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
gcc
|
||||
cmake
|
||||
clang
|
||||
];
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development.clang;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
gcc
|
||||
cmake
|
||||
clang
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development.claude;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
claude-code
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,14 +1,15 @@
|
||||
{ config, pkgs, ... }:
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./basic.nix
|
||||
./rust.nix
|
||||
./clang.nix
|
||||
./claude.nix
|
||||
./go.nix
|
||||
./options.nix
|
||||
./python.nix
|
||||
./typescript.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
# General
|
||||
git
|
||||
neovim
|
||||
nixfmt
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development.go;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
go
|
||||
|
||||
# Language server
|
||||
gopls
|
||||
|
||||
# Formatter with automatic import management
|
||||
gotools
|
||||
|
||||
# Linting
|
||||
golangci-lint
|
||||
|
||||
# Debugger
|
||||
delve
|
||||
|
||||
# Useful extras
|
||||
air # Live reload for web apps
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
options.workstation.development = {
|
||||
enable = lib.mkEnableOption "the basic development toolkit";
|
||||
|
||||
clang = {
|
||||
enable = lib.mkEnableOption "the clang toolkit";
|
||||
};
|
||||
|
||||
claude = {
|
||||
enable = lib.mkEnableOption "the AI harness";
|
||||
};
|
||||
|
||||
go = {
|
||||
enable = lib.mkEnableOption "the go toolkit";
|
||||
};
|
||||
|
||||
python = {
|
||||
enable = lib.mkEnableOption "the python toolkit";
|
||||
};
|
||||
|
||||
rust = {
|
||||
enable = lib.mkEnableOption "the rust toolkit";
|
||||
};
|
||||
|
||||
typescript = {
|
||||
enable = lib.mkEnableOption "the typescript toolkit";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,20 +1,29 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
python313
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development.python;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
python313
|
||||
|
||||
# package tooling
|
||||
python313Packages.uv
|
||||
python313Packages.virtualenv
|
||||
# package tooling
|
||||
python313Packages.uv
|
||||
python313Packages.virtualenv
|
||||
|
||||
# dev tools
|
||||
ruff
|
||||
black
|
||||
mypy
|
||||
# dev tools
|
||||
ruff
|
||||
black
|
||||
mypy
|
||||
|
||||
# optional data science base tools
|
||||
python313Packages.numpy
|
||||
python313Packages.pandas
|
||||
];
|
||||
# optional data science base tools
|
||||
python313Packages.numpy
|
||||
python313Packages.pandas
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
cargo
|
||||
rustc
|
||||
rustfmt
|
||||
clippy
|
||||
];
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development.rust;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
cargo
|
||||
rustc
|
||||
rustfmt
|
||||
clippy
|
||||
];
|
||||
|
||||
environment.variables = {
|
||||
RUST_BACKTRACE = "1";
|
||||
environment.variables = {
|
||||
RUST_BACKTRACE = "1";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,17 +1,29 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
bun
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.development.typescript;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
bun
|
||||
prettier
|
||||
eslint
|
||||
typescript-language-server
|
||||
|
||||
# TS tooling (optional but common)
|
||||
typescript
|
||||
nodePackages.typescript-language-server
|
||||
nodePackages.eslint
|
||||
nodePackages.prettier
|
||||
];
|
||||
# TS tooling (optional but common)
|
||||
typescript
|
||||
|
||||
environment.variables = {
|
||||
NODE_OPTIONS = "--max-old-space-size=4096";
|
||||
# API Client
|
||||
bruno
|
||||
];
|
||||
|
||||
environment.variables = {
|
||||
NODE_OPTIONS = "--max-old-space-size=4096";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
osu-lazer-bin # if you want
|
||||
steam
|
||||
prismlauncher
|
||||
nvtopPackages.amd
|
||||
];
|
||||
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true;
|
||||
};
|
||||
|
||||
programs.gamemode.enable = true;
|
||||
|
||||
# GPU Driver
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
extraPackages = with pkgs; [
|
||||
mesa
|
||||
vulkan-loader
|
||||
vulkan-validation-layers
|
||||
];
|
||||
};
|
||||
|
||||
services.xserver.videoDrivers = [ "amdgpu" ];
|
||||
}
|
||||
@@ -1,30 +1,38 @@
|
||||
{ ... }:
|
||||
|
||||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.workstation.networking.core;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./firewall.nix
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = "laptop";
|
||||
networkmanager.enable = true;
|
||||
};
|
||||
config = {
|
||||
networking = {
|
||||
networkmanager = {
|
||||
enable = true;
|
||||
dns = "systemd-resolved";
|
||||
};
|
||||
|
||||
services.resolved = {
|
||||
enable = true;
|
||||
extraHosts = lib.concatMapStringsSep "\n" (
|
||||
host: "${host.ip_address} ${host.hostname}"
|
||||
) cfg.extraHosts;
|
||||
|
||||
settings.Resolve = {
|
||||
dnssec = "true";
|
||||
DNSOverTLS = "true";
|
||||
domains = [ "~." ];
|
||||
fallbackDns = [
|
||||
"192.168.1.193" # Pi-hole
|
||||
"1.1.1.1" # Cloudflare
|
||||
"1.0.0.1" # Cloudflare (Secondary)
|
||||
];
|
||||
nftables.enable = true;
|
||||
|
||||
nameservers = cfg.nameservers;
|
||||
};
|
||||
|
||||
};
|
||||
services.resolved = {
|
||||
enable = true;
|
||||
|
||||
networking.nftables.enable = true;
|
||||
settings.Resolve = {
|
||||
dnssec = "true";
|
||||
DNSOverTLS = "true";
|
||||
domains = [ "~." ];
|
||||
fallbackDns = cfg.nameservers;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,17 +1,14 @@
|
||||
{ ... }:
|
||||
|
||||
{ config, ... }:
|
||||
let
|
||||
cfg = config.workstation.networking.core.firewall;
|
||||
in
|
||||
{
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
|
||||
allowPing = true;
|
||||
allowPing = cfg.allowPing;
|
||||
|
||||
allowedTCPPorts = [
|
||||
22
|
||||
80
|
||||
];
|
||||
allowedUDPPorts = [
|
||||
53
|
||||
];
|
||||
allowedTCPPorts = cfg.ports.tcp;
|
||||
allowedUDPPorts = cfg.ports.udp;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./options.nix
|
||||
./core
|
||||
./wireguard.nix
|
||||
./tailscale.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options.workstation.networking = {
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "river";
|
||||
description = "The user to run tailscale's services as.";
|
||||
};
|
||||
|
||||
# core
|
||||
core = {
|
||||
firewall = {
|
||||
allowPing = lib.mkEnableOption "ICMP pinging" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
ports = {
|
||||
tcp = lib.mkOption {
|
||||
type = with lib.types; listOf number;
|
||||
default = [
|
||||
22
|
||||
80
|
||||
];
|
||||
};
|
||||
udp = lib.mkOption {
|
||||
type = with lib.types; listOf number;
|
||||
default = [ 53 ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
extraHosts = lib.mkOption {
|
||||
type =
|
||||
with lib.types;
|
||||
listOf (
|
||||
submodule (
|
||||
{ ... }: {
|
||||
options = {
|
||||
ip_address = lib.mkOption {
|
||||
type = str;
|
||||
};
|
||||
|
||||
hostname = lib.mkOption {
|
||||
type = str;
|
||||
};
|
||||
};
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
default = [ ];
|
||||
description = "Additional hosts to add.";
|
||||
};
|
||||
|
||||
nameservers = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
|
||||
default = [
|
||||
"192.168.1.193"
|
||||
"1.1.1.1"
|
||||
"1.0.0.1"
|
||||
];
|
||||
description = "DNS Resolvers for System";
|
||||
};
|
||||
};
|
||||
|
||||
# wireguard
|
||||
wireguard = {
|
||||
enable = lib.mkEnableOption "Wireguard support";
|
||||
|
||||
interfaces = lib.mkOption {
|
||||
type = lib.types.attrsOf (
|
||||
lib.types.submodule {
|
||||
options = {
|
||||
enable = lib.mkEnableOption "Enable this WG interface";
|
||||
|
||||
address = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
privateKeyFile = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
};
|
||||
|
||||
peers = lib.mkOption {
|
||||
type = lib.types.listOf (
|
||||
lib.types.submodule {
|
||||
options = {
|
||||
publicKey = lib.mkOption { type = lib.types.str; };
|
||||
allowedIPs = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
};
|
||||
endpoint = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
};
|
||||
persistentKeepalive = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.int;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
default = [ ];
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
# tailscale
|
||||
tailscale = {
|
||||
enable = lib.mkEnableOption "Tailscale mesh VPN";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,16 +1,30 @@
|
||||
{ config, ... }:
|
||||
|
||||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.workstation.networking.tailscale;
|
||||
user = config.workstation.networking.user;
|
||||
in
|
||||
{
|
||||
services.tailscale.enable = true;
|
||||
networking.firewall = {
|
||||
trustedInterfaces = [ config.services.tailscale.interfaceName ];
|
||||
allowedUDPPorts = [ config.services.tailscale.port ];
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
extraSetFlags = [ "--operator=${user}" ];
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
trustedInterfaces = [ config.services.tailscale.interfaceName ];
|
||||
allowedUDPPorts = [ config.services.tailscale.port ];
|
||||
};
|
||||
|
||||
systemd.services.tailscaled.serviceConfig.Environment = [
|
||||
"TS_DEBUG_FIREWALL_MODE=nftables"
|
||||
];
|
||||
|
||||
systemd.network.wait-online.enable = false;
|
||||
boot.initrd.systemd.network.wait-online.enable = false;
|
||||
|
||||
users.users.${user}.extraGroups = [
|
||||
"tailscale"
|
||||
];
|
||||
};
|
||||
|
||||
systemd.services.tailscaled.serviceConfig.Environment = [
|
||||
"TS_DEBUG_FIREWALL_MODE=nftables"
|
||||
];
|
||||
|
||||
systemd.network.wait-online.enable = false;
|
||||
boot.initrd.systemd.network.wait-online.enable = false;
|
||||
}
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
{ ... }:
|
||||
|
||||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.workstation.networking.wireguard;
|
||||
in
|
||||
{
|
||||
networking.wireguard.interfaces = {
|
||||
wg0 = {
|
||||
ips = [ "10.0.0.2/24" ];
|
||||
privateKeyFile = "/etc/wireguard/private.key"; # Keep secrets out of the nix store!
|
||||
config = lib.mkIf cfg.enable {
|
||||
networking.wg-quick.interfaces = lib.mapAttrs (name: iface: {
|
||||
address = iface.address;
|
||||
privateKeyFile = iface.privateKeyFile;
|
||||
peers = map (p: {
|
||||
publicKey = p.publicKey;
|
||||
allowedIPs = p.allowedIPs;
|
||||
endpoint = p.endpoint;
|
||||
|
||||
peers = [
|
||||
{
|
||||
publicKey = "vUUL4CD+1Sa2U2SZYa2P9IoFC2HxEr+PYNmYfRE8wwY=";
|
||||
allowedIPs = [ "0.0.0.0/0" ];
|
||||
endpoint = "server.maariz.org:51820";
|
||||
persistentKeepalive = 25;
|
||||
}
|
||||
];
|
||||
};
|
||||
persistentKeepalive = if p.persistentKeepalive != null then p.persistentKeepalive else null;
|
||||
}) iface.peers;
|
||||
}) (lib.filterAttrs (_: v: v.enable) cfg.interfaces);
|
||||
|
||||
networking.firewall.allowedUDPPorts = [ 51820 ];
|
||||
};
|
||||
|
||||
# Ensure the Wireguard UDP port is open if you are hosting the server
|
||||
networking.firewall.allowedUDPPorts = [ 51820 ];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
gimp
|
||||
google-fonts
|
||||
pinta
|
||||
];
|
||||
|
||||
programs.obs-studio = {
|
||||
enable = true;
|
||||
plugins = with pkgs.obs-studio-plugins; [
|
||||
wlrobs
|
||||
obs-backgroundremoval
|
||||
obs-pipewire-audio-capture
|
||||
obs-vaapi
|
||||
obs-gstreamer
|
||||
obs-vkcapture
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
services.ollama = {
|
||||
enable = true;
|
||||
host = "0.0.0.0";
|
||||
port = 11434;
|
||||
package = pkgs.ollama-rocm;
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 11434 ];
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
services.sunshine = {
|
||||
enable = true;
|
||||
autoStart = true;
|
||||
capSysAdmin = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [
|
||||
47984
|
||||
47989
|
||||
47990
|
||||
48010
|
||||
];
|
||||
allowedUDPPortRanges = [
|
||||
{
|
||||
from = 47998;
|
||||
to = 48000;
|
||||
}
|
||||
{
|
||||
from = 8000;
|
||||
to = 8010;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -3,5 +3,6 @@
|
||||
imports = [
|
||||
./podman.nix
|
||||
./qemu.nix
|
||||
./options.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.virtualization.lima;
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
lima
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options.workstation.virtualization = {
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "river";
|
||||
description = "The user to run virtualization services as.";
|
||||
};
|
||||
|
||||
# podman
|
||||
podman = {
|
||||
enable = lib.mkEnableOption "Podman support";
|
||||
|
||||
packages = {
|
||||
enable = lib.mkEnableOption "relevant Podman packages";
|
||||
};
|
||||
};
|
||||
|
||||
# qemu
|
||||
qemu = {
|
||||
enable = lib.mkEnableOption "QEMU support";
|
||||
|
||||
containers = lib.mkEnableOption "container support for QEMU";
|
||||
|
||||
spiceUSBRedirection = lib.mkEnableOption "spice USB redirection support for QEMU";
|
||||
|
||||
virtManager = lib.mkEnableOption "virt-manager support for QEMU";
|
||||
|
||||
bootModules = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [
|
||||
"kvm-intel"
|
||||
"kvm-amd"
|
||||
];
|
||||
description = "The kernel modules to load for QEMU support.";
|
||||
};
|
||||
};
|
||||
|
||||
lima = {
|
||||
enable = lib.mkEnableOption "Lima lite VM";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,37 +1,55 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
virtualisation.podman = {
|
||||
enable = true;
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.virtualization;
|
||||
in
|
||||
{
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf cfg.podman.enable {
|
||||
virtualisation = {
|
||||
oci-containers.backend = "podman";
|
||||
podman = {
|
||||
|
||||
dockerCompat = true;
|
||||
defaultNetwork.settings.dns_enabled = true;
|
||||
};
|
||||
enable = true;
|
||||
|
||||
# For rootless containers
|
||||
security.unprivilegedUsernsClone = true;
|
||||
dockerCompat = true;
|
||||
defaultNetwork.settings.dns_enabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
users.users.river = {
|
||||
subUidRanges = [
|
||||
{
|
||||
startUid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
subGidRanges = [
|
||||
{
|
||||
startGid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
# For rootless containers
|
||||
security.unprivilegedUsernsClone = true;
|
||||
|
||||
extraGroups = [
|
||||
"podman"
|
||||
];
|
||||
};
|
||||
users.users.${cfg.user} = {
|
||||
subUidRanges = [
|
||||
{
|
||||
startUid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
subGidRanges = [
|
||||
{
|
||||
startGid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
podman
|
||||
podman-compose
|
||||
extraGroups = [
|
||||
"podman"
|
||||
];
|
||||
};
|
||||
})
|
||||
|
||||
(lib.mkIf cfg.podman.packages.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
podman
|
||||
podman-compose
|
||||
podman-desktop
|
||||
];
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,24 +1,44 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
virtualisation.spiceUSBRedirection.enable = true;
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.workstation.virtualization;
|
||||
in
|
||||
{
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf cfg.qemu.enable {
|
||||
virtualisation = {
|
||||
libvirtd = {
|
||||
enable = true;
|
||||
qemu = {
|
||||
package = pkgs.qemu_kvm;
|
||||
swtpm.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
users.users.${cfg.user}.extraGroups = [
|
||||
"libvirtd"
|
||||
"kvm"
|
||||
];
|
||||
})
|
||||
|
||||
virtualisation.libvirtd = {
|
||||
enable = true;
|
||||
qemu = {
|
||||
swtpm.enable = true;
|
||||
};
|
||||
};
|
||||
(lib.mkIf cfg.qemu.spiceUSBRedirection {
|
||||
virtualisation.spiceUSBRedirection.enable = true;
|
||||
})
|
||||
|
||||
programs.virt-manager.enable = true;
|
||||
(lib.mkIf cfg.qemu.virtManager {
|
||||
programs.virt-manager.enable = true;
|
||||
})
|
||||
|
||||
users.users.river.extraGroups = [
|
||||
"libvirtd"
|
||||
"kvm"
|
||||
];
|
||||
(lib.mkIf (cfg.qemu.enable && cfg.qemu.containers) {
|
||||
virtualisation.containers.enable = true;
|
||||
})
|
||||
|
||||
boot.kernelModules = [
|
||||
"kvm-intel"
|
||||
"kvm-amd"
|
||||
(lib.mkIf cfg.qemu.enable {
|
||||
boot.kernelModules = cfg.qemu.bootModules;
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user