Compare commits
1 Commits
main
...
b07b34b66a
| Author | SHA1 | Date | |
|---|---|---|---|
| b07b34b66a |
14
.sops.yaml
14
.sops.yaml
@@ -1,17 +1,9 @@
|
||||
keys:
|
||||
- &drew_mcp age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
||||
- &drew_vega age1dstsz5g4qthwt2sssu5wp787ku7rnfqm02mqaefsaueswhvqzpmsyft4p4
|
||||
- &admin_drew age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
||||
- &server_mcp age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
||||
- &server_sirius age17q5n3pngyf0dvcg23h7ph8fqcraw0phjzgsra5cynzq4mf7hw3wsarmepw
|
||||
creation_rules:
|
||||
- path_regex: secrets/mcp.yaml
|
||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||
key_groups:
|
||||
- age:
|
||||
- *drew_vega
|
||||
- *drew_mcp
|
||||
- *server_mcp
|
||||
- path_regex: secrets/sirius.yaml
|
||||
key_groups:
|
||||
- age:
|
||||
- *drew_vega
|
||||
- *admin_drew
|
||||
- *server_mcp
|
||||
|
||||
439
flake.lock
generated
439
flake.lock
generated
@@ -3,32 +3,28 @@
|
||||
"aquamarine": {
|
||||
"inputs": {
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"hyprwayland-scanner": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprwayland-scanner"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778620495,
|
||||
"narHash": "sha256-Gu7UhWjwKCgSiVC3Qz/Rc7cYi9DNuDTBxYzg3kfLvfM=",
|
||||
"lastModified": 1743265529,
|
||||
"narHash": "sha256-QbjP15/2N+VJl0b5jxrrTc+VOt39aU4XrDvtP0Lz5ik=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "be35f75ac305f430f5f9d89b5f5a4af59ca7567e",
|
||||
"rev": "1d2dbd72c2bbaceab031c592d4810f744741d203",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -40,15 +36,15 @@
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1767039857,
|
||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||
"owner": "NixOS",
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -56,7 +52,6 @@
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"pre-commit-hooks",
|
||||
"nixpkgs"
|
||||
@@ -83,44 +78,61 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779726825,
|
||||
"narHash": "sha256-RUkMrREjKDQrA+dA9+xZviGAxM5W1aVdyOr/bSYpHrE=",
|
||||
"lastModified": 1743788974,
|
||||
"narHash": "sha256-2LeVyQZI2wTkSzMLvnN/kJjXVWp4HCVUoq17Bv8TNTk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "b179bde238977f7d4454fc770b1a727eaf55111c",
|
||||
"rev": "0f5908daf890c3d7e7052bef1d6deb0f2710aaa1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-26.05",
|
||||
"ref": "master",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hy3": {
|
||||
"inputs": {
|
||||
"hyprland": [
|
||||
"hyprland"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743128724,
|
||||
"narHash": "sha256-CUlxc2u1Y8gpeAl7NKrZxxpeZjyU2DBxOYb8b0haM2M=",
|
||||
"owner": "outfoxxed",
|
||||
"repo": "hy3",
|
||||
"rev": "4014433d1c3d1bf36c6684cff14c23d538337070",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "outfoxxed",
|
||||
"repo": "hy3",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprcursor": {
|
||||
"inputs": {
|
||||
"hyprlang": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776511930,
|
||||
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
||||
"lastModified": 1742215578,
|
||||
"narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprcursor",
|
||||
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
||||
"rev": "2fd36421c21aa87e2fe3bee11067540ae612f719",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -132,27 +144,24 @@
|
||||
"hyprgraphics": {
|
||||
"inputs": {
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776426399,
|
||||
"narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=",
|
||||
"lastModified": 1739049071,
|
||||
"narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84",
|
||||
"rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -166,23 +175,24 @@
|
||||
"aquamarine": "aquamarine",
|
||||
"hyprcursor": "hyprcursor",
|
||||
"hyprgraphics": "hyprgraphics",
|
||||
"hyprland-guiutils": "hyprland-guiutils",
|
||||
"hyprland-protocols": "hyprland-protocols",
|
||||
"hyprland-qtutils": "hyprland-qtutils",
|
||||
"hyprlang": "hyprlang",
|
||||
"hyprutils": "hyprutils",
|
||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||
"hyprwire": "hyprwire",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"pre-commit-hooks": "pre-commit-hooks",
|
||||
"systems": "systems",
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779392427,
|
||||
"narHash": "sha256-0SiD8JBx6cU0KL1XjLMsR/nSZB5XY3uhrNnvfxH0CtY=",
|
||||
"lastModified": 1743809433,
|
||||
"narHash": "sha256-tCOlE2zMXfd+KNG5ETr2VxhbniDMD7jBbD0JQhYBrlc=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"rev": "8b7110cc68662a343b6839f292ac0f44a64c3364",
|
||||
"rev": "8ba20fcae124591718bddadd94c5e8c381d02097",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -191,78 +201,23 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-guiutils": {
|
||||
"inputs": {
|
||||
"aquamarine": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"aquamarine"
|
||||
],
|
||||
"hyprgraphics": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprgraphics"
|
||||
],
|
||||
"hyprlang": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprtoolkit": "hyprtoolkit",
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"hyprwayland-scanner": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprwayland-scanner"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776426575,
|
||||
"narHash": "sha256-KI6nIfVihn/DPaeB5Et46Xg3dkNHrrEtUd5LBBVomB0=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-guiutils",
|
||||
"rev": "a968d211048e3ed538e47b84cb3649299578f19d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-guiutils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-protocols": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772460177,
|
||||
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
|
||||
"lastModified": 1743549251,
|
||||
"narHash": "sha256-yf+AXt0RkAkCyF6iSnJt6EJAnNG/l6qv70CVzhRP6Bg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
|
||||
"rev": "4ab17ccac08456cb5e00e8bd323de2efd30612be",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -271,30 +226,95 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-qt-support": {
|
||||
"inputs": {
|
||||
"hyprlang": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"hyprlang"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1737634706,
|
||||
"narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qt-support",
|
||||
"rev": "8810df502cdee755993cb803eba7b23f189db795",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qt-support",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-qtutils": {
|
||||
"inputs": {
|
||||
"hyprland-qt-support": "hyprland-qt-support",
|
||||
"hyprlang": [
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"hyprlang",
|
||||
"hyprutils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1739048983,
|
||||
"narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qtutils",
|
||||
"rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qtutils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprlang": {
|
||||
"inputs": {
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777320127,
|
||||
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
|
||||
"lastModified": 1741191527,
|
||||
"narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
|
||||
"rev": "72df3861f1197e41b078faa3e38eedd60e00018d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -303,105 +323,23 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprsplit": {
|
||||
"inputs": {
|
||||
"hyprland": "hyprland",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779414137,
|
||||
"narHash": "sha256-XpwuFhwnfwPbzImZeUWWns///UEpoKNkpl1hN90C3Ag=",
|
||||
"owner": "shezdy",
|
||||
"repo": "hyprsplit",
|
||||
"rev": "0fc01e7930625ecb3e069f5dc8e1d61eab929f3b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "shezdy",
|
||||
"repo": "hyprsplit",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprtoolkit": {
|
||||
"inputs": {
|
||||
"aquamarine": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"aquamarine"
|
||||
],
|
||||
"hyprgraphics": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprgraphics"
|
||||
],
|
||||
"hyprlang": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprutils"
|
||||
],
|
||||
"hyprwayland-scanner": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprwayland-scanner"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772462885,
|
||||
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprtoolkit",
|
||||
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprtoolkit",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprutils": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778234770,
|
||||
"narHash": "sha256-jAcsogZwWMfXT9MfXxZzkwliAqIuZUV0p71h6Ba9ReE=",
|
||||
"lastModified": 1742984269,
|
||||
"narHash": "sha256-uz9FaCIbga/gQ5ZG1Hb4HVVjTWT1qjjCAFlCXiaefxg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "a2dbd8a4cc51f7cbe4224732668392bb1aa79df2",
|
||||
"rev": "7248194a2ce0106ae647b70d0526a96dc9d6ad60",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -413,22 +351,20 @@
|
||||
"hyprwayland-scanner": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777159683,
|
||||
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
|
||||
"lastModified": 1739870480,
|
||||
"narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwayland-scanner",
|
||||
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
|
||||
"rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -437,86 +373,73 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprwire": {
|
||||
"nix-darwin": {
|
||||
"inputs": {
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778410714,
|
||||
"narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwire",
|
||||
"rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc",
|
||||
"lastModified": 1743496612,
|
||||
"narHash": "sha256-emPWa5lmKbnyuj8c1mSJUkzJNT+iJoU9GMcXwjp2oVM=",
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "73d59580d01e9b9f957ba749f336a272869c42dd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwire",
|
||||
"owner": "LnL7",
|
||||
"ref": "master",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-filter": {
|
||||
"locked": {
|
||||
"lastModified": 1693833173,
|
||||
"narHash": "sha256-hlMABKrGbEiJD5dwUSfnw1CQ3bG7KKwDV+Nx3bEZd7U=",
|
||||
"owner": "numtide",
|
||||
"repo": "nix-filter",
|
||||
"rev": "ac030bd9ba98e318e1f4c4328d60766ade8ebe8b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "nix-filter",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1778443072,
|
||||
"narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
|
||||
"owner": "NixOS",
|
||||
"lastModified": 1743583204,
|
||||
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
|
||||
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1779971959,
|
||||
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-26.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778507602,
|
||||
"narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=",
|
||||
"lastModified": 1742649964,
|
||||
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
|
||||
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -528,9 +451,12 @@
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"hyprsplit": "hyprsplit",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"sops-nix": "sops-nix"
|
||||
"hy3": "hy3",
|
||||
"hyprland": "hyprland",
|
||||
"nix-darwin": "nix-darwin",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"sops-nix": "sops-nix",
|
||||
"split-monitor-workspaces": "split-monitor-workspaces"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
@@ -540,11 +466,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777944972,
|
||||
"narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
|
||||
"lastModified": 1743756170,
|
||||
"narHash": "sha256-2b11EYa08oqDmF3zEBLkG1AoNn9rB1k39ew/T/mSvbU=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
|
||||
"rev": "cff8437c5fe8c68fc3a840a21bf1f4dc801da40d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -553,6 +479,27 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"split-monitor-workspaces": {
|
||||
"inputs": {
|
||||
"hyprland": [
|
||||
"hyprland"
|
||||
],
|
||||
"nix-filter": "nix-filter"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743247927,
|
||||
"narHash": "sha256-za6nKSilGOUpTDLho1LK8elyImLNNIUGixDLW/n6f84=",
|
||||
"owner": "Duckonaut",
|
||||
"repo": "split-monitor-workspaces",
|
||||
"rev": "a8e39ff10dfb5ff451416a791a30388a8517e038",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Duckonaut",
|
||||
"repo": "split-monitor-workspaces",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1689347949,
|
||||
@@ -571,42 +518,36 @@
|
||||
"xdph": {
|
||||
"inputs": {
|
||||
"hyprland-protocols": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprland-protocols"
|
||||
],
|
||||
"hyprlang": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"hyprwayland-scanner": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"hyprwayland-scanner"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprsplit",
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778265244,
|
||||
"narHash": "sha256-8jlPtGSsv/CQY6tVVyLF4Jjd0gnS+Zbn9yk/V13A9nM=",
|
||||
"lastModified": 1741934139,
|
||||
"narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "813ea5ca9a1702a9a2d1f5836bc00172ef698968",
|
||||
"rev": "150b0b6f52bb422a1b232a53698606fe0320dde0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
86
flake.nix
86
flake.nix
@@ -2,73 +2,61 @@
|
||||
description = "System Configuration";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-26.05";
|
||||
nixpkgs = {
|
||||
url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
};
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager?ref=release-26.05";
|
||||
url = "github:nix-community/home-manager/master";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
hyprland = {
|
||||
url = "github:hyprwm/Hyprland";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
hy3 = {
|
||||
url = "github:outfoxxed/hy3";
|
||||
inputs.hyprland.follows = "hyprland";
|
||||
};
|
||||
split-monitor-workspaces = {
|
||||
url = "github:Duckonaut/split-monitor-workspaces";
|
||||
inputs.hyprland.follows = "hyprland";
|
||||
};
|
||||
nix-darwin = {
|
||||
url = "github:LnL7/nix-darwin/master";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
sops-nix = {
|
||||
url = "github:Mic92/sops-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
hyprsplit = {
|
||||
url = "github:shezdy/hyprsplit";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
...
|
||||
}@inputs:
|
||||
let
|
||||
local = import ./lib;
|
||||
mkNixosConfig =
|
||||
{
|
||||
path,
|
||||
system ? "x86_64-linux",
|
||||
nixpkgs ? inputs.nixpkgs,
|
||||
home-manager ? inputs.home-manager,
|
||||
}:
|
||||
nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
modules = [
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs local;
|
||||
};
|
||||
};
|
||||
}
|
||||
path
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs local;
|
||||
};
|
||||
};
|
||||
in
|
||||
{ self, nixpkgs, ... }@inputs:
|
||||
{
|
||||
nixosConfigurations = {
|
||||
altair = mkNixosConfig {
|
||||
path = ./system/hosts/altair;
|
||||
altair = (import ./system/hosts/altair) {
|
||||
inherit inputs;
|
||||
inherit self;
|
||||
inherit nixpkgs;
|
||||
};
|
||||
vega = mkNixosConfig {
|
||||
path = ./system/hosts/vega;
|
||||
mcp = (import ./system/hosts/mcp) {
|
||||
inherit inputs;
|
||||
inherit self;
|
||||
inherit nixpkgs;
|
||||
};
|
||||
mcp = mkNixosConfig {
|
||||
path = ./system/hosts/mcp;
|
||||
vega = (import ./system/hosts/vega) {
|
||||
inherit inputs;
|
||||
inherit self;
|
||||
inherit nixpkgs;
|
||||
};
|
||||
sirius-a = mkNixosConfig {
|
||||
path = ./system/hosts/sirius-a;
|
||||
};
|
||||
darwinConfigurations = {
|
||||
# Removed. See 133a3f82073f03e62cb3e7902c85fb3fc6292fe2 for when the
|
||||
# last one was removed.
|
||||
};
|
||||
features = {
|
||||
development = import ./home-manager/features/development/development.nix;
|
||||
development = (import ./home-manager/features/development/development.nix);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
discord
|
||||
];
|
||||
|
||||
xdg.desktopEntries = {
|
||||
discord = {
|
||||
name = "Discord";
|
||||
# Custom options to reduce flickering under wayland.
|
||||
exec = "env ELECTRON_OZONE_PLATFORM_HINT= discord --enable-features=UseOzonePlatform --ozone-platform=wayland --disable-gpu";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
freecad-wrapped = pkgs.symlinkJoin {
|
||||
name = "freecad-wrapped";
|
||||
paths = [ pkgs.freecad ];
|
||||
buildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/freecad \
|
||||
--prefix MESA_LOADER_DRIVER_OVERRIDE : zink \
|
||||
--prefix __EGL_VENDOR_LIBRARY_FILENAMES : ${pkgs.mesa}/share/glvnd/egl_vendor.d/50_mesa.json
|
||||
'';
|
||||
};
|
||||
|
||||
bambu-studio-wrapped = pkgs.symlinkJoin {
|
||||
name = "bambu-studio-wrapped";
|
||||
paths = [ pkgs.bambu-studio ];
|
||||
buildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/bambu-studio \
|
||||
--prefix MESA_LOADER_DRIVER_OVERRIDE : zink \
|
||||
--prefix __EGL_VENDOR_LIBRARY_FILENAMES : ${pkgs.mesa}/share/glvnd/egl_vendor.d/50_mesa.json
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
|
||||
home.packages = with pkgs; [
|
||||
bambu-studio-wrapped
|
||||
lycheeslicer
|
||||
orca-slicer
|
||||
|
||||
blender
|
||||
|
||||
freecad-wrapped
|
||||
openscad
|
||||
];
|
||||
|
||||
xdg.desktopEntries.orynt3d =
|
||||
let
|
||||
orynt3d-appimage = pkgs.fetchurl {
|
||||
name = "orynt3d-appimage";
|
||||
url = "https://files.orynt3d.com/client/Orynt3D-0.15.3.AppImage";
|
||||
sha256 = "0j10myj06ff4frsd4yv7z3lb3qgw3ha70hc5hdc9idbryica801y";
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "Orynt3D";
|
||||
exec = "env __EGL_VENDOR_LIBRARY_FILENAMES=/run/opengl-driver/share/glvnd/egl_vendor.d/10_nvidia.json ${pkgs.appimage-run}/bin/appimage-run ${orynt3d-appimage}";
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
# icon = "";
|
||||
comment = "3D model viewer and organizer";
|
||||
categories = [
|
||||
"Science"
|
||||
"Development"
|
||||
];
|
||||
};
|
||||
|
||||
# Options to get Bambu Studio to run:
|
||||
# __GLX_VENDOR_LIBRARY_NAME=mesa __EGL_VENDOR_LIBRARY_FILENAMES=/nix/store/js9cfbjvlsls14nddk39fw74vyvlhz4l-mesa-25.0.7/share/glvnd/egl_vendor.d/50_mesa.json MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink WEBKIT_DISABLE_DMABUF_RENDERER=1 bambu-studio
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
stellarium
|
||||
kstars
|
||||
celestia
|
||||
];
|
||||
}
|
||||
@@ -1,41 +1,7 @@
|
||||
{ pkgs, ... }:
|
||||
with pkgs;
|
||||
let
|
||||
# A script that runs as long as media is playing.
|
||||
isMediaPlaying = writeShellApplication {
|
||||
name = "isMediaPlaying";
|
||||
runtimeInputs = [
|
||||
playerctl
|
||||
];
|
||||
text = ''
|
||||
set -e
|
||||
|
||||
while [ "$(playerctl status)" = "Playing" ]; do
|
||||
echo -n "."
|
||||
sleep 1
|
||||
done
|
||||
'';
|
||||
};
|
||||
# A script that prevents the system from going to sleep while media is playing
|
||||
mediaCaffeine = writeShellApplication {
|
||||
name = "media-caffeine";
|
||||
runtimeInputs = [
|
||||
isMediaPlaying
|
||||
systemd
|
||||
];
|
||||
text = ''
|
||||
set -e
|
||||
|
||||
systemd-inhibit --what=sleep --why="Media is playing" --mode=block isMediaPlaying
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
pulseaudio # for pactl and other tools
|
||||
pavucontrol # GUI volume control with lots of options
|
||||
|
||||
mediaCaffeine
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
../apps/element.nix
|
||||
../apps/discord.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
signal-desktop
|
||||
];
|
||||
}
|
||||
@@ -1,64 +1,7 @@
|
||||
include "%L"
|
||||
|
||||
<Multi_key> <m> <u> : "μ"
|
||||
<Multi_key> <p> <i> : "π"
|
||||
<Multi_key> <minus> <comma> : "¬"
|
||||
<Multi_key> <asciicircum> <asciicircum> : "∧"
|
||||
<Multi_key> <v> <v> : "∨"
|
||||
|
||||
# GREEK CAPITAL LETTERS
|
||||
<Multi_key> <G> <A> : "Α" U0391 # GREEK CAPITAL LETTER ALPHA
|
||||
<Multi_key> <G> <B> : "Β" U0392 # GREEK CAPITAL LETTER BETA
|
||||
<Multi_key> <G> <G> : "Γ" U0393 # GREEK CAPITAL LETTER GAMMA
|
||||
<Multi_key> <G> <D> : "Δ" U0394 # GREEK CAPITAL LETTER DELTA
|
||||
<Multi_key> <G> <E> : "Ε" U0395 # GREEK CAPITAL LETTER EPSILON
|
||||
<Multi_key> <G> <Z> : "Ζ" U0396 # GREEK CAPITAL LETTER ZETA
|
||||
<Multi_key> <G> <H> : "Η" U0397 # GREEK CAPITAL LETTER ETA
|
||||
<Multi_key> <G> <I> : "Ι" U0399 # GREEK CAPITAL LETTER IOTA
|
||||
<Multi_key> <G> <K> : "Κ" U039A # GREEK CAPITAL LETTER KAPPA
|
||||
<Multi_key> <G> <L> : "Λ" U039B # GREEK CAPITAL LETTER LAMDA
|
||||
<Multi_key> <G> <M> : "Μ" U039C # GREEK CAPITAL LETTER MU
|
||||
<Multi_key> <G> <N> : "Ν" U039D # GREEK CAPITAL LETTER NU
|
||||
<Multi_key> <G> <P> : "Π" U03A0 # GREEK CAPITAL LETTER PI
|
||||
<Multi_key> <G> <R> : "Ρ" U03A1 # GREEK CAPITAL LETTER RHO
|
||||
<Multi_key> <G> <S> : "Σ" U03A3 # GREEK CAPITAL LETTER SIGMA
|
||||
<Multi_key> <G> <T> : "Τ" U03A4 # GREEK CAPITAL LETTER TAU
|
||||
<Multi_key> <G> <U> : "Υ" U03A5 # GREEK CAPITAL LETTER UPSILON
|
||||
<Multi_key> <G> <F> : "Φ" U03A6 # GREEK CAPITAL LETTER PHI
|
||||
<Multi_key> <G> <X> : "Χ" U03A7 # GREEK CAPITAL LETTER CHI
|
||||
<Multi_key> <G> <O> : "Ω" U03A9 # GREEK CAPITAL LETTER OMEGA
|
||||
|
||||
# DOUBLES (additional stroke <Q>)
|
||||
<Multi_key> <G> <Q> <T> : "Θ" U0398 # GREEK CAPITAL LETTER THETA
|
||||
<Multi_key> <G> <Q> <O> : "Ο" U039F # GREEK CAPITAL LETTER OMICRON
|
||||
<Multi_key> <G> <Q> <X> : "Ξ" U039E # GREEK CAPITAL LETTER XI
|
||||
<Multi_key> <G> <Q> <P> : "Ψ" U03A8 # GREEK CAPITAL LETTER PSI
|
||||
|
||||
# greek small letters
|
||||
<Multi_key> <g> <a> : "α" U03B1 # GREEK SMALL LETTER ALPHA
|
||||
<Multi_key> <g> <b> : "β" U03B2 # GREEK SMALL LETTER BETA
|
||||
<Multi_key> <g> <g> : "γ" U03B3 # GREEK SMALL LETTER GAMMA
|
||||
<Multi_key> <g> <d> : "δ" U03B4 # GREEK SMALL LETTER DELTA
|
||||
<Multi_key> <g> <e> : "ε" U03B5 # GREEK SMALL LETTER EPSILON
|
||||
<Multi_key> <g> <z> : "ζ" U03B6 # GREEK SMALL LETTER ZETA
|
||||
<Multi_key> <g> <h> : "η" U03B7 # GREEK SMALL LETTER ETA
|
||||
<Multi_key> <g> <i> : "ι" U03B9 # GREEK SMALL LETTER IOTA
|
||||
<Multi_key> <g> <k> : "κ" U03BA # GREEK SMALL LETTER KAPPA
|
||||
<Multi_key> <g> <l> : "λ" U03BB # GREEK SMALL LETTER LAMDA
|
||||
<Multi_key> <g> <m> : "μ" U03BC # GREEK SMALL LETTER MU
|
||||
<Multi_key> <g> <n> : "ν" U03BD # GREEK SMALL LETTER NU
|
||||
<Multi_key> <g> <p> : "π" U03C0 # GREEK SMALL LETTER PI
|
||||
<Multi_key> <g> <r> : "ρ" U03C1 # GREEK SMALL LETTER RHO
|
||||
<Multi_key> <g> <s> : "σ" U03C3 # GREEK SMALL LETTER SIGMA
|
||||
<Multi_key> <g> <t> : "τ" U03C4 # GREEK SMALL LETTER TAU
|
||||
<Multi_key> <g> <u> : "υ" U03C5 # GREEK SMALL LETTER UPSILON
|
||||
<Multi_key> <g> <f> : "φ" U03C6 # GREEK SMALL LETTER PHI
|
||||
<Multi_key> <g> <x> : "χ" U03C7 # GREEK SMALL LETTER CHI
|
||||
<Multi_key> <g> <o> : "ω" U03C9 # GREEK SMALL LETTER OMEGA
|
||||
|
||||
# doubles (additional stroke <q>)
|
||||
<Multi_key> <g> <q> <t> : "θ" U03B8 # GREEK SMALL LETTER THETA
|
||||
<Multi_key> <g> <q> <o> : "ο" U03BF # GREEK SMALL LETTER OMICRON
|
||||
<Multi_key> <g> <q> <p> : "ψ" U03C8 # GREEK SMALL LETTER PSI
|
||||
<Multi_key> <g> <q> <s> : "ς" U03C2 # GREEK SMALL LETTER FINAL SIGMA
|
||||
<Multi_key> <g> <q> <x> : "ξ" U03BE # GREEK SMALL LETTER X
|
||||
|
||||
@@ -10,17 +10,10 @@
|
||||
# Base languages that should always be available
|
||||
./nix.nix
|
||||
./lua.nix
|
||||
./sh.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
hyperfine # Benchmarking tool
|
||||
# Dev helpers
|
||||
direnv
|
||||
];
|
||||
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
docker-compose
|
||||
];
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
markdownlint-cli2 # linter
|
||||
marksman # language server
|
||||
];
|
||||
}
|
||||
@@ -6,7 +6,6 @@
|
||||
|
||||
nixfmt-rfc-style # Formatter
|
||||
nil # Language Server
|
||||
statix # Lints and suggestions for Nix
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
@@ -15,3 +14,4 @@
|
||||
rebuild-boot = "sudo nixos-rebuild boot --flake ~/system-config --show-trace --print-build-logs --verbose";
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
shfmt # Formatter
|
||||
];
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
vtsls # Language Server
|
||||
eslint # Linter
|
||||
prettier # Formatter
|
||||
tailwindcss-language-server # Language server for tailwind CSS
|
||||
];
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
|
||||
profiles.default.extensions = with pkgs.vscode-extensions; [
|
||||
asvetliakov.vscode-neovim # Use embedded neovim editor
|
||||
enkia.tokyo-night # Color theme
|
||||
eamodio.gitlens # Show git info inline
|
||||
mechatroner.rainbow-csv # Make it easier to read CSV files
|
||||
aaron-bond.better-comments # Provides some highlighting in comments
|
||||
|
||||
# Typescript
|
||||
esbenp.prettier-vscode # Auto-formatting
|
||||
|
||||
# AI Agents
|
||||
github.copilot
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
_: {
|
||||
# Proton Mail is fully encrypted on the servers so it doesn't support POP3 or
|
||||
# IMAP. In order to connect we need to set up a bridge that will download
|
||||
# the mail and decrypt it locally.
|
||||
services.protonmail-bridge.enable = true;
|
||||
|
||||
programs.thunderbird = {
|
||||
enable = true;
|
||||
|
||||
profiles.drew = {
|
||||
isDefault = true;
|
||||
accountsOrder = [ "proton" ];
|
||||
};
|
||||
};
|
||||
|
||||
accounts.email.accounts.proton = {
|
||||
enable = true;
|
||||
primary = true;
|
||||
address = "drew@blazestar.net";
|
||||
realName = "Drew Haven";
|
||||
thunderbird.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -33,16 +33,6 @@ $color-standout-dark: darker($color-standout);
|
||||
font-family: 'Noto Sans Nerd Font', sans-serif;
|
||||
}
|
||||
|
||||
window.vertical-statusbar {
|
||||
background-color: $color-background;
|
||||
// background-image: linear-gradient(160deg, rgba(255,00,00,0.5), $color-background);
|
||||
color: $color-foreground;
|
||||
padding: 16px;
|
||||
font-size: 14px;
|
||||
border-right: 3px solid $color-border;
|
||||
font-family: 'Noto Sans Nerd Font', sans-serif;
|
||||
}
|
||||
|
||||
.system-monitor {
|
||||
padding-top: 8px;
|
||||
padding-right: 8px;
|
||||
|
||||
@@ -3,4 +3,5 @@
|
||||
(include "./primary-statusbar.yuck")
|
||||
(include "./secondary-statusbar.yuck")
|
||||
(include "./system-monitor.yuck")
|
||||
(include "./launcher.yuck")
|
||||
(include "./vertical-statusbar.yuck")
|
||||
|
||||
82
home-manager/features/eww/config/launcher.yuck
Normal file
82
home-manager/features/eww/config/launcher.yuck
Normal file
@@ -0,0 +1,82 @@
|
||||
(defwindow launcher
|
||||
:monitor '[ "<primary>", "DP-2", 0 ]'
|
||||
:geometry (geometry
|
||||
:x "100px"
|
||||
:y "100px"
|
||||
:anchor "top left"
|
||||
)
|
||||
:stacking "bottom"
|
||||
:exclusive false
|
||||
:focusable false
|
||||
(box
|
||||
:class "launcher-window stand-alone"
|
||||
:orientation "v"
|
||||
:spacing 4
|
||||
:visible { arraylength(jq(workspaces-json-dp2, "map(select(.active and (.has_windows | not)))")) > 0 }
|
||||
(box
|
||||
:orientation "v"
|
||||
:halign "start"
|
||||
:spacing 4
|
||||
:space-evenly false
|
||||
(label
|
||||
:text "Apps"
|
||||
:halign "start"
|
||||
)
|
||||
(box
|
||||
:orientation "h"
|
||||
:halign "start"
|
||||
:spacing 4
|
||||
:space-evenly false
|
||||
(button
|
||||
:onclick "firefox"
|
||||
(image
|
||||
:class "launcher-icon"
|
||||
:icon "firefox"
|
||||
:icon-size "dialog"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(box
|
||||
:orientation "v"
|
||||
:halign "start"
|
||||
:spacing 4
|
||||
:space-evenly false
|
||||
(label
|
||||
:text "Games"
|
||||
:halign "start"
|
||||
)
|
||||
(box
|
||||
:orientation "h"
|
||||
:halign "start"
|
||||
:spacing 4
|
||||
:space-evenly false
|
||||
(button
|
||||
;; :onclick "env LUTRIS_SKIP_INIT=1 lutris lutris:rungameid/1"
|
||||
:onclick "/home/drew/.local/bin/wow.sh >/tmp/wow.log 2>&1"
|
||||
(image
|
||||
:class "launcher-icon"
|
||||
:image-width 48
|
||||
:path "/home/drew/.local/share/icons/hicolor/128x128/apps/lutris_battlenet.png"
|
||||
)
|
||||
)
|
||||
(button
|
||||
:onclick "steam steam://rungameid/1091500"
|
||||
(image
|
||||
:class "launcher-icon"
|
||||
:icon "steam_icon_1091500"
|
||||
:icon-size "dialog"
|
||||
)
|
||||
)
|
||||
;; (button
|
||||
;; :onclick "steam steam://rungameid/1145350"
|
||||
;; (image
|
||||
;; :class "launcher-icon"
|
||||
;; :icon "steam_icon_1145350"
|
||||
;; :icon-size "dialog"
|
||||
;; )
|
||||
;;)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -30,7 +30,7 @@
|
||||
)
|
||||
|
||||
(defwindow primary-statusbar
|
||||
:monitor '[ "<primary>", "DP-2", 1 ]'
|
||||
:monitor '[ "<primary>", "DP-2", 0 ]'
|
||||
:geometry (geometry
|
||||
:x "0%"
|
||||
:y "0%"
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
)
|
||||
|
||||
(defwindow secondary-statusbar
|
||||
:monitor '[ "<secondary>", "DP-1", "0" ]'
|
||||
:monitor '[ "<secondary>", "DP-1" ]'
|
||||
:geometry (geometry
|
||||
:x "0px"
|
||||
:y "0px"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
:spacing 8
|
||||
(system-monitor-perf)
|
||||
(system-monitor-disks)
|
||||
(system-monitor-net :interface "wlo1")
|
||||
(system-monitor-net)
|
||||
)
|
||||
(box
|
||||
:orientation "h"
|
||||
@@ -145,13 +145,13 @@
|
||||
:name "Disks"
|
||||
(system-monitor-gauge
|
||||
:name "Root"
|
||||
:text-value {EWW_DISK['/'].free / 1000000000}
|
||||
:text-value {EWW_DISK['/'].free / powi(2, 30)}
|
||||
:gauge-pct {EWW_DISK['/'].used_perc}
|
||||
:units " GB"
|
||||
)
|
||||
(system-monitor-gauge
|
||||
:name "Home"
|
||||
:text-value {EWW_DISK['/home'].free / 1000000000}
|
||||
:text-value {EWW_DISK['/home'].free / powi(2, 30)}
|
||||
:gauge-pct {EWW_DISK['/home'].used_perc}
|
||||
:units " GB"
|
||||
)
|
||||
@@ -164,7 +164,7 @@
|
||||
`iwgetid -r`
|
||||
)
|
||||
|
||||
(defwidget system-monitor-net [ interface ]
|
||||
(defwidget system-monitor-net []
|
||||
(system-monitor-group
|
||||
:name "Network"
|
||||
:orientation "v"
|
||||
@@ -174,12 +174,12 @@
|
||||
)
|
||||
(system-monitor-sparkgraph
|
||||
:name "Down"
|
||||
:value {EWW_NET[interface]["NET_DOWN"] / 1000000}
|
||||
:value {EWW_NET["wlo1"]["NET_DOWN"] / 1000000}
|
||||
:units " MB/s"
|
||||
)
|
||||
(system-monitor-sparkgraph
|
||||
:name "Up"
|
||||
:value {EWW_NET[interface]["NET_UP"] / 1000000}
|
||||
:value {EWW_NET["wlo1"]["NET_UP"] / 1000000}
|
||||
:units " MB/s"
|
||||
)
|
||||
)
|
||||
|
||||
@@ -8,35 +8,14 @@
|
||||
)
|
||||
)
|
||||
|
||||
(deflisten workspaces-json-hdmi-a-1
|
||||
:initial "[]"
|
||||
`~/.config/eww/scripts/workspaces.sh HDMI-A-1`
|
||||
)
|
||||
|
||||
(defwidget workspaces-vega []
|
||||
(workspaces :workspaces-json workspaces-json-hdmi-a-1)
|
||||
)
|
||||
|
||||
(defwidget disks-vega []
|
||||
(system-monitor-group
|
||||
:name "Disks"
|
||||
(system-monitor-gauge
|
||||
:name "Root"
|
||||
:text-value {EWW_DISK['/'].free / 1000000000}
|
||||
:gauge-pct {EWW_DISK['/'].used_perc}
|
||||
:units " GB"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget vertical-statusbar []
|
||||
(box
|
||||
:class "statusbar"
|
||||
:orientation "v"
|
||||
:halign "fill"
|
||||
:halign "center"
|
||||
:spacing 8
|
||||
:space-evenly false
|
||||
(clock-large)
|
||||
(workspaces-vega)
|
||||
(vertical-statusbar-systray)
|
||||
(system-monitor-group
|
||||
:name "Performance"
|
||||
@@ -44,8 +23,8 @@
|
||||
(system-monitor-perf-cpu)
|
||||
(system-monitor-perf-gpu)
|
||||
)
|
||||
(disks-vega)
|
||||
(system-monitor-net :interface "wlp5s0")
|
||||
(system-monitor-disks)
|
||||
(system-monitor-net)
|
||||
(system-monitor-audio)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,48 +1,7 @@
|
||||
{ ... }:
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options = {
|
||||
programs.eww.widgets = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
# For Noto Sans NF
|
||||
nerd-fonts.noto
|
||||
];
|
||||
|
||||
file.".config/eww".source = ./config;
|
||||
};
|
||||
|
||||
programs.eww = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
systemd.user.services.eww = lib.mkIf (config.programs.eww.widgets != [ ]) {
|
||||
Unit = {
|
||||
Description = "Eww widgets";
|
||||
After = [ "hyprland-session.target" ]; # Start only after hyprland
|
||||
PartOf = [ "hyprland-session.target" ]; # Force it to exit if hyprland does
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
ExecStart = "${pkgs.eww}/bin/eww open-many ${lib.concatStringsSep " " config.programs.eww.widgets}";
|
||||
ExecStop = "${pkgs.eww}/bin/eww kill";
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "hyprland-session.target" ];
|
||||
};
|
||||
};
|
||||
configDir = ./config;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,45 +1,4 @@
|
||||
{ pkgs, local, ... }:
|
||||
let
|
||||
# TODO: This is an attempt to patch the desktop file by actually using the old
|
||||
# one so I don't have to put in all the options like below. This will generate
|
||||
# the correct file, however, xdg.dataFile."applications/wowup-cf.desktop"
|
||||
# doesn't seem to actually overrwite it, even with force = true.
|
||||
# patched-desktop =
|
||||
# pkgs.runCommand "patched-wowup-cf-desktop"
|
||||
# {
|
||||
# desktop = "${pkgs.wowup-cf}/share/applications/wowup-cf.desktop";
|
||||
# }
|
||||
# ''
|
||||
# mkdir -p $out
|
||||
# substitute "$desktop" "$out/wowup-cf.desktop" \
|
||||
# --replace-fail 'Exec=wowup-cf' 'Exec=wowup-cf --enable-features=UseOzonePlatform --ozone-platform=wayland --disable-gpu'
|
||||
# '';
|
||||
warcraftLogsUploader = pkgs.fetchurl {
|
||||
name = "warcraftlogs-client";
|
||||
url = "https://github.com/RPGLogs/Uploaders-warcraftlogs/releases/download/v8.17.47/warcraftlogs-v8.17.47.AppImage";
|
||||
sha256 = "1aypr3ffy6lq0qj64d48c7n54nfs72404xb2kpxsw5slqh66imw6";
|
||||
};
|
||||
warcraftLogsIcon = pkgs.fetchurl {
|
||||
name = "warcraftlogs-icon";
|
||||
url = "https://assets.rpglogs.com/img/warcraft/favicon.png";
|
||||
sha256 = "0hil7rj7a0bmls0h4w3xmfzcp1gm5yfagbziv1967lmy70ri0bc9";
|
||||
};
|
||||
raiderioClient = pkgs.fetchurl {
|
||||
name = "raiderio-client";
|
||||
url = "https://raider.io/client/download/linux";
|
||||
sha256 = "0wcw53bgr9dr02x1ci2jlnc5irpiqxqxgs2hpbrsnj67q50nvlm9";
|
||||
};
|
||||
raiderioIcon = pkgs.fetchurl {
|
||||
name = "raiderio-icon";
|
||||
url = "https://cdn.raiderio.net/images/brand/Mark_2ColorWhite.png";
|
||||
sha256 = "13311vi04lv6bp7jvnhinbcfah4ghn9h85cl3wzysz3aaxs73988";
|
||||
};
|
||||
curseForgeClient = pkgs.fetchurl {
|
||||
name = "curseforge-client";
|
||||
url = "https://curseforge.overwolf.com/downloads/curseforge-latest-linux.AppImage";
|
||||
sha256 = "0w4snj0f0lpdc2z0iq8r10add49jaa3z10xz2cpmfh1dmm57yvlf";
|
||||
};
|
||||
in
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
# Gaming
|
||||
@@ -51,82 +10,9 @@ in
|
||||
];
|
||||
})
|
||||
protonup-ng
|
||||
protonplus
|
||||
protontricks
|
||||
vulkan-tools # useful for debugging Vulkan issues
|
||||
|
||||
# WoW addon updater
|
||||
wowup-cf
|
||||
];
|
||||
|
||||
# xdg.dataFile."applications/wowup-cf.desktop" = {
|
||||
# force = true;
|
||||
# source = "${patched-desktop}/wowup-cf.desktop";
|
||||
# };
|
||||
|
||||
# wowup needs options to work under wayland.
|
||||
xdg.desktopEntries = {
|
||||
wowup-cf = local.electronDesktopEntry {
|
||||
name = "WowUp";
|
||||
exec = "wowup-cf --no-sandbox";
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
icon = "wowup-cf";
|
||||
comment = "World of Warcraft addon updater";
|
||||
categories = [
|
||||
"Game"
|
||||
];
|
||||
};
|
||||
|
||||
warcraftLogs = {
|
||||
name = "WarcraftLogs";
|
||||
exec = "${pkgs.appimage-run}/bin/appimage-run ${warcraftLogsUploader}";
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
icon = "${warcraftLogsIcon}";
|
||||
comment = "WarcraftLogs uploader";
|
||||
categories = [ "Game" ];
|
||||
};
|
||||
|
||||
raiderio = {
|
||||
name = "Raider.io";
|
||||
exec = "${pkgs.appimage-run}/bin/appimage-run ${raiderioClient}";
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
icon = "${raiderioIcon}";
|
||||
comment = "Raider.io Client";
|
||||
categories = [ "Game" ];
|
||||
};
|
||||
|
||||
curseforge = {
|
||||
name = "Curseforge";
|
||||
exec = "${pkgs.appimage-run}/bin/appimage-run ${curseForgeClient}";
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
comment = "Curseforge Client";
|
||||
categories = [ "Game" ];
|
||||
};
|
||||
};
|
||||
|
||||
# TODO: Merge into config
|
||||
# wayland.windowManager.hyprland.settings.windowrule = [
|
||||
# # Set up full-screen games on monitor 1 (since window 0 is the vertical one.)
|
||||
# # "match:class ^steam_app_\d+$, float"
|
||||
# "match:class ^steam_app_\d+$, fullscreen 1, monitor 1"
|
||||
# "match:class ^steam_app_\d+$, center on"
|
||||
#
|
||||
# # Make sure WoW spawns on the right monitor and that Battlenet floats so it renders correctly
|
||||
# "match:title ^World of Warcraft$, monitor 1"
|
||||
# "match:title ^World of Warcraft$, fullscreen on"
|
||||
# "match:title ^Battle.net$, monitor 1"
|
||||
# "match:title ^Battle.net$, float on"
|
||||
#
|
||||
# # Make Balatro into a regular window.
|
||||
# "match:title ^Balatro$, monitor 1"
|
||||
# "match:title ^Balatro$, tile on"
|
||||
#
|
||||
# # Load Cyberpunk 2077 on the right monitor.
|
||||
# "match:class steam_app_1091500, monitor 1"
|
||||
# "match:class steam_app_1091500, fullscreen on"
|
||||
# ];
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
alias = {
|
||||
aliases = {
|
||||
"co" = "checkout";
|
||||
"s" = "status";
|
||||
"b" = "branch";
|
||||
@@ -12,10 +11,10 @@
|
||||
"c" = "commit -am";
|
||||
"l" = "log --oneline";
|
||||
};
|
||||
init = {
|
||||
defaultBranch = "main";
|
||||
};
|
||||
extraConfig = {
|
||||
core = {
|
||||
pager = "";
|
||||
};
|
||||
pull = {
|
||||
rebase = true;
|
||||
};
|
||||
@@ -23,8 +22,5 @@
|
||||
date = "iso";
|
||||
};
|
||||
};
|
||||
# Enable the delta diff pager.
|
||||
delta.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"workspace": {
|
||||
"library": [
|
||||
"/nix/store/ndq4688w4wjlip63msnlxld8zwcwr66l-hyprland-0.55.2/share/hypr/stubs"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
hl.curve("easeOutQuint", {
|
||||
type = "bezier",
|
||||
points = { { 0.23, 1.0 }, { 0.32, 1.0 } },
|
||||
})
|
||||
hl.curve("easeInOutCubic", {
|
||||
type = "bezier",
|
||||
points = { { 0.65, 0.05 }, { 0.36, 1.0 } },
|
||||
})
|
||||
hl.curve("linear", {
|
||||
type = "bezier",
|
||||
points = { { 0.0, 0.0 }, { 1.0, 1.0 } },
|
||||
})
|
||||
hl.curve("almostLinear", {
|
||||
type = "bezier",
|
||||
points = { { 0.5, 0.5 }, { 0.75, 1.0 } },
|
||||
})
|
||||
hl.curve("quick", {
|
||||
type = "bezier",
|
||||
points = { { 0.15, 0.0 }, { 0.1, 1.0 } },
|
||||
})
|
||||
|
||||
hl.animation({
|
||||
leaf = "global",
|
||||
enabled = true,
|
||||
speed = 10.0,
|
||||
bezier = "default",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "border",
|
||||
enabled = true,
|
||||
speed = 5.39,
|
||||
bezier = "easeOutQuint",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "windows",
|
||||
enabled = true,
|
||||
speed = 4.79,
|
||||
bezier = "easeOutQuint",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "windowsIn",
|
||||
enabled = true,
|
||||
speed = 4.1,
|
||||
bezier = "easeOutQuint",
|
||||
style = "popin 87%",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "windowsOut",
|
||||
enabled = true,
|
||||
speed = 1.49,
|
||||
bezier = "linear",
|
||||
style = "popin 87%",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "fadeIn",
|
||||
enabled = true,
|
||||
speed = 1.73,
|
||||
bezier = "almostLinear",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "fadeOut",
|
||||
enabled = true,
|
||||
speed = 1.46,
|
||||
bezier = "almostLinear",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "fade",
|
||||
enabled = true,
|
||||
speed = 3.03,
|
||||
bezier = "quick",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "layers",
|
||||
enabled = true,
|
||||
speed = 3.81,
|
||||
bezier = "easeOutQuint",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "layersIn",
|
||||
enabled = true,
|
||||
speed = 4.0,
|
||||
bezier = "easeOutQuint",
|
||||
style = "fade",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "layersOut",
|
||||
enabled = true,
|
||||
speed = 1.5,
|
||||
bezier = "linear",
|
||||
style = "fade",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "fadeLayersIn",
|
||||
enabled = true,
|
||||
speed = 1.79,
|
||||
bezier = "almostLinear",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "fadeLayersOut",
|
||||
enabled = true,
|
||||
speed = 1.39,
|
||||
bezier = "almostLinear",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "workspaces",
|
||||
enabled = true,
|
||||
speed = 1.94,
|
||||
bezier = "almostLinear",
|
||||
style = "fade",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "workspacesIn",
|
||||
enabled = true,
|
||||
speed = 1.21,
|
||||
bezier = "almostLinear",
|
||||
style = "fade",
|
||||
})
|
||||
hl.animation({
|
||||
leaf = "workspacesOut",
|
||||
enabled = true,
|
||||
speed = 1.94,
|
||||
bezier = "almostLinear",
|
||||
style = "fade",
|
||||
})
|
||||
@@ -1,5 +0,0 @@
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("nm-applet")
|
||||
hl.exec_cmd("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'")
|
||||
hl.exec_cmd("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'")
|
||||
end)
|
||||
@@ -1,99 +0,0 @@
|
||||
local browser = "firefox --new-window"
|
||||
local mainMod = "SUPER + ALT"
|
||||
local menu = "rofi -show combi -combi-modes drun,ssh,run -theme ~/.config/rofi/launcher/style.rasi"
|
||||
local terminal = "foot"
|
||||
|
||||
local split = require("hyprsplit")
|
||||
|
||||
hl.bind("SUPER + ALT + T", function()
|
||||
hl.exec_cmd(terminal)
|
||||
end)
|
||||
hl.bind("SUPER + ALT + B", function()
|
||||
hl.exec_cmd(browser)
|
||||
end)
|
||||
hl.bind("SUPER + ALT + D", function()
|
||||
hl.exec_cmd(menu)
|
||||
end)
|
||||
hl.bind("SUPER + ALT + SHIFT + S", function()
|
||||
hl.exec_cmd("hyprshot -m region --clipboard-only")
|
||||
end)
|
||||
hl.bind("SUPER + ALT + CTRL + SHIFT + S", function()
|
||||
hl.exec_cmd("hyprshot -m region -o ~/Pictures")
|
||||
end)
|
||||
hl.bind("SUPER + ALT + C", function()
|
||||
hl.exec_cmd("swaync-client -t")
|
||||
end)
|
||||
hl.bind("SUPER + ALT + CTRL + Q", function()
|
||||
hl.exec_cmd("/home/drew/.config/rofi/powermenu/powermenu.sh")
|
||||
end)
|
||||
hl.bind("SUPER + ALT + X", function()
|
||||
hl.exec_cmd("/home/drew/.config/rofi/powermenu/powermenu.sh")
|
||||
end)
|
||||
hl.bind("SUPER + ALT + F", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind("SUPER + ALT + SHIFT + F", hl.dsp.window.fullscreen({ action = "toggle" }))
|
||||
hl.bind("SUPER + ALT + CTRL + left", hl.dsp.window.resize({ x = -20, y = 0 }))
|
||||
hl.bind("SUPER + ALT + CTRL + right", hl.dsp.window.resize({ x = 20, y = 0 }))
|
||||
hl.bind("SUPER + ALT + CTRL + down", hl.dsp.window.resize({ x = 0, y = 20 }))
|
||||
hl.bind("SUPER + ALT + CTRL + up", hl.dsp.window.resize({ x = 0, y = -20 }))
|
||||
hl.bind("SUPER + ALT + R", hl.dsp.focus({ monitor = "next" }))
|
||||
--
|
||||
hl.bind("SUPER + ALT + r", hl.dsp.focus({ monitor = "l" }))
|
||||
hl.bind("SUPER + ALT + s", hl.dsp.focus({ monitor = "r" }))
|
||||
|
||||
local hy3 = hl.plugin.hy3
|
||||
|
||||
hl.bind("SUPER + ALT + Q", hy3.kill_active())
|
||||
hl.bind("SUPER + ALT + G", hy3.make_group("opposite"))
|
||||
hl.bind("SUPER + ALT + W", hy3.make_group("tab", { toggle = true }))
|
||||
hl.bind("SUPER + ALT + A", hy3.change_focus("raise"))
|
||||
hl.bind("SUPER + ALT + Z", hy3.change_focus("lower"))
|
||||
hl.bind("SUPER + ALT + O", hy3.change_group("opposite"))
|
||||
hl.bind("SUPER + ALT + left", hy3.move_focus("left"))
|
||||
hl.bind("SUPER + ALT + right", hy3.move_focus("right"))
|
||||
hl.bind("SUPER + ALT + up", hy3.move_focus("up"))
|
||||
hl.bind("SUPER + ALT + down", hy3.move_focus("down"))
|
||||
hl.bind("SUPER + ALT + SHIFT + left", hy3.move_window("left"))
|
||||
hl.bind("SUPER + ALT + SHIFT + right", hy3.move_window("right"))
|
||||
hl.bind("SUPER + ALT + SHIFT + up", hy3.move_window("up"))
|
||||
hl.bind("SUPER + ALT + SHIFT + down", hy3.move_window("down"))
|
||||
|
||||
-- Workspace binds
|
||||
for i = 1, 10 do
|
||||
hl.bind("SUPER + ALT + " .. (i % 10), split.dsp.focus({ workspace = tostring(i) }))
|
||||
hl.bind("SUPER + ALT + SHIFT + " .. (i % 10), split.dsp.window.move({ workspace = tostring(i) }))
|
||||
end
|
||||
|
||||
hl.bind("SUPER + ALT + SHIFT + r", hl.dsp.window.move({ monitor = "+1" }))
|
||||
hl.bind(" + XF86AudioRaiseVolume", function()
|
||||
hl.exec_cmd("swayosd-client --output-volume raise")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioLowerVolume", function()
|
||||
hl.exec_cmd("swayosd-client --output-volume lower")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioMute", function()
|
||||
hl.exec_cmd("swayosd-client --output-volume mute-toggle")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioMicMute", function()
|
||||
hl.exec_cmd("swayosd-client --input-volume mute-toggle")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86MonBrightnessUp", function()
|
||||
hl.exec_cmd("brightnessctl s 10%+")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86MonBrightnessDown", function()
|
||||
hl.exec_cmd("brightnessctl s 10%-")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioNext", function()
|
||||
hl.exec_cmd("playerctl next")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioPause", function()
|
||||
hl.exec_cmd("playerctl play-pause")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioPlay", function()
|
||||
hl.exec_cmd("playerctl play-pause")
|
||||
end, { locked = true })
|
||||
hl.bind(" + XF86AudioPrev", function()
|
||||
hl.exec_cmd("playerctl previous")
|
||||
end, { locked = true })
|
||||
hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouce = true })
|
||||
-- hl.bind(" + mouse:272", hl.dsp.hy3:focustab({ mouse })) --, { non_consuming = true }
|
||||
@@ -1,91 +0,0 @@
|
||||
local split = require("hyprsplit")
|
||||
|
||||
split.config({
|
||||
num_workspaces = 10,
|
||||
persistent_workspaces = true,
|
||||
})
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
allow_tearing = false,
|
||||
border_size = 2,
|
||||
col = {
|
||||
active_border = {
|
||||
colors = { "rgba(ff00ffee)", "rgba(ff9900ee)" },
|
||||
angle = 45,
|
||||
},
|
||||
inactive_border = {
|
||||
colors = { "rgba(00ffff99)", "rgba(0000cc99)" },
|
||||
angle = 45,
|
||||
},
|
||||
},
|
||||
gaps_in = 5,
|
||||
gaps_out = 10,
|
||||
layout = "hy3",
|
||||
resize_on_border = true,
|
||||
},
|
||||
decoration = {
|
||||
active_opacity = 1.000000,
|
||||
blur = {
|
||||
enabled = true,
|
||||
passes = 1,
|
||||
size = 3,
|
||||
vibrancy = 0.169600,
|
||||
},
|
||||
inactive_opacity = 1.000000,
|
||||
rounding = 5,
|
||||
shadow = {
|
||||
color = "rgba(1a1a1aee)",
|
||||
enabled = true,
|
||||
range = 5,
|
||||
render_power = 3,
|
||||
},
|
||||
},
|
||||
input = {
|
||||
follow_mouse = 1,
|
||||
kb_layout = "us",
|
||||
kb_options = "compose:ralt",
|
||||
sensitivity = 0,
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
misc = {
|
||||
disable_hyprland_logo = true,
|
||||
force_default_wallpaper = 0,
|
||||
vrr = 1,
|
||||
},
|
||||
debug = {
|
||||
disable_logs = false,
|
||||
},
|
||||
cursor = {
|
||||
no_hardware_cursors = true,
|
||||
},
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
-- plugin = {
|
||||
-- hy3 = {
|
||||
-- group_inset = 10,
|
||||
-- no_gaps_when_only = 0,
|
||||
-- node_collapse_policy = 2,
|
||||
-- tab_first_window = false,
|
||||
-- tabs = {
|
||||
-- height = 20,
|
||||
-- rounding = 2,
|
||||
-- text_height = 10,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
|
||||
hl.device({
|
||||
name = "logitech-g502-1",
|
||||
sensitivity = -0.200000,
|
||||
})
|
||||
|
||||
-- Additional configs
|
||||
require("config.autostart")
|
||||
require("config.binds")
|
||||
require("config.animation")
|
||||
require("config.windows")
|
||||
@@ -1,20 +0,0 @@
|
||||
hl.window_rule({
|
||||
match = {
|
||||
class = "Rofi",
|
||||
},
|
||||
stay_focused = true,
|
||||
})
|
||||
|
||||
-- Set border color to red if window is fullscreen
|
||||
hl.window_rule({
|
||||
match = { fullscreen = true },
|
||||
border_color = "rgb(FF0000) rgb(880808)",
|
||||
})
|
||||
|
||||
-- Suppress maximize events
|
||||
hl.window_rule({
|
||||
match = {
|
||||
class = ".*",
|
||||
},
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
@@ -1,34 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
services.hypridle = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
lock_cmd = "pidof swaylock || ~/.config/swaylock/swaylock.sh"; # avoid starting multiple lock instances.
|
||||
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
||||
};
|
||||
|
||||
listener = [
|
||||
{
|
||||
timeout = 300; # 5min
|
||||
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||
}
|
||||
{
|
||||
timeout = 330; # 5.5 min
|
||||
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
|
||||
}
|
||||
{
|
||||
timeout = 600; # 10 min
|
||||
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||
on-resume = "hyprctl dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
|
||||
}
|
||||
{
|
||||
timeout = 1800; # 30min
|
||||
on-timeout = "systemctl suspend"; # suspend pc
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
../swaylock.nix
|
||||
./hypridle.nix
|
||||
../../options/monitors.nix
|
||||
];
|
||||
|
||||
xdg.configFile = {
|
||||
"hypr/hyprsplit" = {
|
||||
source = "${inputs.hyprsplit}";
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
"hypr/config" = {
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
swayosd # volume pop-up
|
||||
swaynotificationcenter # notifications
|
||||
hyprpolkitagent # Privilege managent
|
||||
hyprshot # Screenshot utility
|
||||
|
||||
# For clipboard management. See below.
|
||||
wl-clipboard
|
||||
xclip
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
|
||||
# TODO: Switch to the newer LUA config?
|
||||
configType = "lua";
|
||||
|
||||
plugins = [
|
||||
# https://github.com/outfoxxed/hy3
|
||||
pkgs.hyprlandPlugins.hy3
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
require("config.hyprland")
|
||||
'';
|
||||
|
||||
# Disable systemd because it conflicts with UWSM
|
||||
systemd.enable = false;
|
||||
};
|
||||
|
||||
programs.hyprlock = {
|
||||
enable = false;
|
||||
settings = {
|
||||
general = {
|
||||
disable_loading_bar = true;
|
||||
hide_cursor = true;
|
||||
};
|
||||
|
||||
background = {
|
||||
monitor = "";
|
||||
color = "rgb(000000)";
|
||||
};
|
||||
|
||||
# Time
|
||||
label = {
|
||||
monitor = "";
|
||||
text = ''
|
||||
cmd[update:1000] echo "$(date '+%F %T')"
|
||||
'';
|
||||
font_size = 96;
|
||||
font_family = "NotoSans Nerd Font";
|
||||
color = "rgb(990000)";
|
||||
position = "0, 0";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
};
|
||||
|
||||
input-field = {
|
||||
monitor = "";
|
||||
size = "300, 40";
|
||||
fade_on_empty = true;
|
||||
outline_thickness = 2;
|
||||
outer_color = "rgb(cc2222) rgb(661111)";
|
||||
inner_color = "rgb(221111)";
|
||||
|
||||
font_color = "rgb(cc2222)";
|
||||
dots_size = 0.2;
|
||||
dots_spacing = 0.1;
|
||||
placeholder_text = "";
|
||||
|
||||
fail_color = "rgb(cc3333)";
|
||||
capslock_color = "rgb(cccc33)";
|
||||
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
position = "0, -300px";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# UWSM sessions should not use Hyprland's variables but instead use UWSM's variable management.
|
||||
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||
home.file.".config/uwsm/env".text = ''
|
||||
export XCURSOR_SIZE="32"
|
||||
export HYPRCURSOR_SIZE="32"
|
||||
export HYPRCURSOR_THEME="phinger"
|
||||
|
||||
# Nvidia config
|
||||
export LIBVA_DRIVER_NAME="nvidia"
|
||||
export __GLX_VENDOR_LIBRARY_NAME="nvidia"
|
||||
|
||||
# For window theming
|
||||
export QT_QPA_PLATFORMTHEME="qt6ct # for Qt apps"
|
||||
export GTK_THEME="Adwaita-dark"
|
||||
|
||||
# Tell electron apps they should use OZone for Wayland
|
||||
export ELECTRON_OZONE_PLATFORM_HINT="auto"
|
||||
'';
|
||||
|
||||
}
|
||||
418
home-manager/features/hyprland.nix
Normal file
418
home-manager/features/hyprland.nix
Normal file
@@ -0,0 +1,418 @@
|
||||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
plugins = [
|
||||
inputs.hy3.packages.${pkgs.system}.hy3
|
||||
inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
|
||||
];
|
||||
|
||||
# Disable systemd because it conflicts with UWSM
|
||||
systemd.enable = false;
|
||||
|
||||
settings = {
|
||||
monitor = [
|
||||
"DP-2, 3440x1440, 0x0, 1"
|
||||
"DP-1, 2560x1440, -1440x-510, 1, transform, 1"
|
||||
];
|
||||
|
||||
"$terminal" = "wezterm";
|
||||
"$fileManager" = "dolphin";
|
||||
"$menu" = "rofi -show combi -combi-modes drun,ssh,run -theme ~/.config/rofi/launcher/style.rasi";
|
||||
"$browser" = "firefox";
|
||||
|
||||
exec-once = [
|
||||
"nm-applet"
|
||||
"sleep 2 && hyprpm reload -n"
|
||||
"swayidle -w before-sleep hyprlock"
|
||||
"swayosd-server"
|
||||
"systemctl --user start hyprpolkitagent"
|
||||
|
||||
"gsettings set org.gnome.desktop.interface color-scheme \"prefer-dark\""
|
||||
"gsettings set org.gnome.desktop.interface gtk-theme \"Adwaita-dark\""
|
||||
];
|
||||
|
||||
env = [
|
||||
"XCURSOR_SIZE,32"
|
||||
"HYPRCURSOR_SIZE,32"
|
||||
"HYPRCURSOR_THEME,phinger"
|
||||
|
||||
# Nvidia config
|
||||
"LIBVA_DRIVER_NAME,nvidia"
|
||||
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
|
||||
|
||||
# For window theming
|
||||
"QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps"
|
||||
"GTK_THEME,Adwaita-dark"
|
||||
];
|
||||
|
||||
general = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 10;
|
||||
|
||||
border_size = 2;
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||
"col.active_border" = "rgba(eeeeffee) rgba(3366ffee) 45deg";
|
||||
"col.inactive_border" = "rgba(595959aa)";
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false;
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false;
|
||||
|
||||
layout = "hy3";
|
||||
};
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||
decoration = {
|
||||
rounding = 5;
|
||||
|
||||
# Change transparency of focused and unfocused windows
|
||||
active_opacity = 1.0;
|
||||
inactive_opacity = 1.0;
|
||||
|
||||
shadow = {
|
||||
enabled = true;
|
||||
range = 5;
|
||||
render_power = 3;
|
||||
color = "rgba(1a1a1aee)";
|
||||
};
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||
blur = {
|
||||
enabled = true;
|
||||
size = 3;
|
||||
passes = 1;
|
||||
vibrancy = 0.1696;
|
||||
};
|
||||
};
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||
animations = {
|
||||
enabled = "yes";
|
||||
|
||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = [
|
||||
"easeOutQuint,0.23,1,0.32,1"
|
||||
"easeInOutCubic,0.65,0.05,0.36,1"
|
||||
"linear,0,0,1,1"
|
||||
"almostLinear,0.5,0.5,0.75,1.0"
|
||||
"quick,0.15,0,0.1,1"
|
||||
];
|
||||
|
||||
animation = [
|
||||
"global, 1, 10, default"
|
||||
"border, 1, 5.39, easeOutQuint"
|
||||
"windows, 1, 4.79, easeOutQuint"
|
||||
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
|
||||
"windowsOut, 1, 1.49, linear, popin 87%"
|
||||
"fadeIn, 1, 1.73, almostLinear"
|
||||
"fadeOut, 1, 1.46, almostLinear"
|
||||
"fade, 1, 3.03, quick"
|
||||
"layers, 1, 3.81, easeOutQuint"
|
||||
"layersIn, 1, 4, easeOutQuint, fade"
|
||||
"layersOut, 1, 1.5, linear, fade"
|
||||
"fadeLayersIn, 1, 1.79, almostLinear"
|
||||
"fadeLayersOut, 1, 1.39, almostLinear"
|
||||
"workspaces, 1, 1.94, almostLinear, fade"
|
||||
"workspacesIn, 1, 1.21, almostLinear, fade"
|
||||
"workspacesOut, 1, 1.94, almostLinear, fade"
|
||||
];
|
||||
};
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||
misc = {
|
||||
force_default_wallpaper = 0; # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = true; # If true disables the random hyprland logo / anime girl background. :(
|
||||
vrr = 1; # Enable variable refresh rate
|
||||
};
|
||||
|
||||
cursor = {
|
||||
no_hardware_cursors = true;
|
||||
};
|
||||
|
||||
###############
|
||||
### PLUGINS ###
|
||||
###############
|
||||
|
||||
plugin = {
|
||||
hy3 = {
|
||||
# disable gaps when only one window is onscreen
|
||||
# 0 - always show gaps
|
||||
# 1 - hide gaps with a single window onscreen
|
||||
# 2 - 1 but also show the window border
|
||||
no_gaps_when_only = 0; # default: 0
|
||||
|
||||
# policy controlling what happens when a node is removed from a group,
|
||||
# leaving only a group
|
||||
# 0 = remove the nested group
|
||||
# 1 = keep the nested group
|
||||
# 2 = keep the nested group only if its parent is a tab group
|
||||
node_collapse_policy = 2; # default: 2
|
||||
|
||||
# offset from group split direction when only one window is in a group
|
||||
group_inset = 10; # default: 10
|
||||
|
||||
# if a tab group will automatically be created for the first window spawned in a workspace
|
||||
tab_first_window = false;
|
||||
|
||||
# tab group settings
|
||||
tabs = {
|
||||
# height of the tab bar
|
||||
height = 20; # default: 15
|
||||
|
||||
# padding between the tab bar and its focused node
|
||||
# padding = <int> # default: 5
|
||||
|
||||
# the tab bar should animate in/out from the top instead of below the window
|
||||
# from_top = <bool> # default: false
|
||||
|
||||
# rounding of tab bar corners
|
||||
rounding = 2; # default: 3
|
||||
|
||||
# render the window title on the bar
|
||||
# render_text = <bool> # default: true
|
||||
|
||||
# center the window title
|
||||
# text_center = <bool> # default: false
|
||||
|
||||
# font to render the window title with
|
||||
# text_font = <string> # default: Sans
|
||||
|
||||
# height of the window title
|
||||
text_height = 10; # default: 8
|
||||
|
||||
# left padding of the window title
|
||||
# text_padding = <int> # default: 3
|
||||
|
||||
# active tab bar segment color
|
||||
# col.active = <color> # default: 0xff32b4ff
|
||||
|
||||
# urgent tab bar segment color
|
||||
# col.urgent = <color> # default: 0xffff4f4f
|
||||
|
||||
# inactive tab bar segment color
|
||||
# col.inactive = <color> # default: 0x80808080
|
||||
|
||||
# active tab bar text color
|
||||
# col.text.active = <color> # default: 0xff000000
|
||||
|
||||
# urgent tab bar text color
|
||||
# col.text.urgent = <color> # default: 0xff000000
|
||||
|
||||
# inactive tab bar text color
|
||||
# col.text.inactive = <color> # default: 0xff000000
|
||||
};
|
||||
|
||||
# autotiling settings
|
||||
autotile = {
|
||||
# enable autotile
|
||||
# enable = <bool> # default: false
|
||||
|
||||
# make autotile-created groups ephemeral
|
||||
# ephemeral_groups = <bool> # default: true
|
||||
|
||||
# if a window would be squished smaller than this width, a vertical split will be created
|
||||
# -1 = never automatically split vertically
|
||||
# 0 = always automatically split vertically
|
||||
# <number> = pixel width to split at
|
||||
# trigger_width = <int> # default: 0
|
||||
|
||||
# if a window would be squished smaller than this height, a horizontal split will be created
|
||||
# -1 = never automatically split horizontally
|
||||
# 0 = always automatically split horizontally
|
||||
# <number> = pixel height to split at
|
||||
# trigger_height = <int> # default: 0
|
||||
|
||||
# a space or comma separated list of workspace ids where autotile should be enabled
|
||||
# it's possible to create an exception rule by prefixing the definition with "not:"
|
||||
# workspaces = 1,2 # autotiling will only be enabled on workspaces 1 and 2
|
||||
# workspaces = not:1,2 # autotiling will be enabled on all workspaces except 1 and 2
|
||||
# workspaces = <string> # default: all
|
||||
};
|
||||
};
|
||||
|
||||
split-monitor-workspaces = {
|
||||
# Keep the focus when reloading.
|
||||
keep_focused = true;
|
||||
# Allocate persistent workspaces. If this is off there are some bugs
|
||||
# when trying to move to a new workspace if it doesn't already exist.
|
||||
enable_persistent_workspaces = true;
|
||||
};
|
||||
};
|
||||
|
||||
#############
|
||||
### INPUT ###
|
||||
#############
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||
input = {
|
||||
kb_layout = "us";
|
||||
# kb_variant =
|
||||
# kb_model =
|
||||
kb_options = "compose:ralt";
|
||||
# kb_rules =
|
||||
|
||||
follow_mouse = 1;
|
||||
|
||||
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false;
|
||||
};
|
||||
};
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||
device = {
|
||||
name = "logitech-g502-1";
|
||||
sensitivity = -0.2;
|
||||
};
|
||||
|
||||
###################
|
||||
### KEYBINDINGS ###
|
||||
###################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||
"$mainMod" = "SUPER + ALT";
|
||||
|
||||
bind = [
|
||||
"$mainMod, T, exec, $terminal"
|
||||
"$mainMod, B, exec, $browser"
|
||||
"$mainMod, D, exec, $menu"
|
||||
"$mainMod, E, exec, $fileManager"
|
||||
"$mainMod + SHIFT, S, exec, hyprshot -m region --clipboard-only"
|
||||
"$mainMod, C, exec, swaync-client -t"
|
||||
|
||||
"$mainMod + L_CONTROL, Q, exec, /home/drew/.config/rofi/powermenu/powermenu.sh"
|
||||
"$mainMod, X, exec, /home/drew/.config/rofi/powermenu/powermenu.sh"
|
||||
# "$mainMod, X, exec, hyprlock"
|
||||
# "$mainMod + SHIFT, X, exec, systemctl suspend"
|
||||
|
||||
"$mainMod, F, togglefloating,"
|
||||
"$mainMod + SHIFT, F, fullscreen, 1"
|
||||
|
||||
# Monitors
|
||||
"$mainMod, R, focusmonitor, next"
|
||||
"$mainMod + CTRL, R, movecurrentworkspacetomonitor, l"
|
||||
"$mainMod + CTRL, S, movecurrentworkspacetomonitor, r"
|
||||
|
||||
# Hy3 Stuff
|
||||
"$mainMod, Q, hy3:killactive,"
|
||||
"$mainMod, G, hy3:makegroup, opposite, ephemeral"
|
||||
"$mainMod, W, hy3:makegroup, tab, ephemeral"
|
||||
"$mainMod + SHIFT, W, hy3:changegroup, toggletab"
|
||||
"$mainMod, O, hy3:changegroup, opposite"
|
||||
"$mainMod, left, hy3:movefocus, l"
|
||||
"$mainMod, right, hy3:movefocus, r"
|
||||
"$mainMod, up, hy3:movefocus, u"
|
||||
"$mainMod, down, hy3:movefocus, d"
|
||||
"$mainMod, A, hy3:changefocus, raise"
|
||||
"$mainMod, Z, hy3:changefocus, lower"
|
||||
"$mainMod + SHIFT, left, hy3:movewindow, l"
|
||||
"$mainMod + SHIFT, right, hy3:movewindow, r"
|
||||
"$mainMod + SHIFT, up, hy3:movewindow, u"
|
||||
"$mainMod + SHIFT, down, hy3:movewindow, d"
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
"$mainMod, 1, split-workspace, 1"
|
||||
"$mainMod, 2, split-workspace, 2"
|
||||
"$mainMod, 3, split-workspace, 3"
|
||||
"$mainMod, 4, split-workspace, 4"
|
||||
"$mainMod, 5, split-workspace, 5"
|
||||
"$mainMod, 6, split-workspace, 6"
|
||||
"$mainMod, 7, split-workspace, 7"
|
||||
"$mainMod, 8, split-workspace, 8"
|
||||
"$mainMod, 9, split-workspace, 9"
|
||||
"$mainMod, 0, split-workspace, 10"
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
"$mainMod SHIFT, 1, split-movetoworkspace, 1, follow"
|
||||
"$mainMod SHIFT, 2, split-movetoworkspace, 2, follow"
|
||||
"$mainMod SHIFT, 3, split-movetoworkspace, 3, follow"
|
||||
"$mainMod SHIFT, 4, split-movetoworkspace, 4, follow"
|
||||
"$mainMod SHIFT, 5, split-movetoworkspace, 5, follow"
|
||||
"$mainMod SHIFT, 6, split-movetoworkspace, 6, follow"
|
||||
"$mainMod SHIFT, 7, split-movetoworkspace, 7, follow"
|
||||
"$mainMod SHIFT, 8, split-movetoworkspace, 8, follow"
|
||||
"$mainMod SHIFT, 9, split-movetoworkspace, 9, follow"
|
||||
"$mainMod SHIFT, 0, split-movetoworkspace, 10, follow"
|
||||
# These don't take monitor numbers, but rather differences. It's next/prev but
|
||||
# it'll always just move it to the other monitor
|
||||
"$mainMod SHIFT, r, split-changemonitor, prev"
|
||||
];
|
||||
|
||||
# m = mouse bindings
|
||||
# These use just SUPER so I can hit them with my left hand
|
||||
bindm = [
|
||||
"SUPER, mouse:272, movewindow"
|
||||
"SUPER, mouse:273, resizewindow"
|
||||
];
|
||||
|
||||
# n = non-consuming
|
||||
bindn = [
|
||||
", mouse:272, hy3:focustab, mouse"
|
||||
];
|
||||
|
||||
# l = available when locked
|
||||
bindl = [
|
||||
# Laptop multimedia keys for volume and LCD brightness
|
||||
",XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise"
|
||||
",XF86AudioLowerVolume, exec, swayosd-client --output-volume lower"
|
||||
",XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
||||
",XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle"
|
||||
",XF86MonBrightnessUp, exec, brightnessctl s 10%+"
|
||||
",XF86MonBrightnessDown, exec, brightnessctl s 10%-"
|
||||
# Requires playerctl
|
||||
", XF86AudioNext, exec, playerctl next"
|
||||
", XF86AudioPause, exec, playerctl play-pause"
|
||||
", XF86AudioPlay, exec, playerctl play-pause"
|
||||
", XF86AudioPrev, exec, playerctl previous"
|
||||
];
|
||||
|
||||
##############################
|
||||
### WINDOWS AND WORKSPACES ###
|
||||
##############################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
|
||||
windowrulev2 = [
|
||||
# Ignore maximize requests from apps. You'll probably like this.
|
||||
"suppressevent maximize, class:.*"
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
"nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0"
|
||||
|
||||
# Make right-click backgrounds not transparent. The menus have no class or title.
|
||||
"opaque,class:(),title:()"
|
||||
"noshadow,class:(),title:()"
|
||||
"noblur,class:(),title:()"
|
||||
|
||||
# Set up full-screen games on monitor 1
|
||||
"monitor 1,class:^steam_app_\d+$"
|
||||
"float,class:^steam_app_\d+$"
|
||||
"monitor 1,fullscreen:1"
|
||||
"center,class:^steam_app_\d+$"
|
||||
|
||||
"monitor 1,title:^World of Warcraft$"
|
||||
"monitor 1,title:^Battle.net$"
|
||||
"float,title:^Battle.net$"
|
||||
];
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||
workspace = [
|
||||
"11, defaultName:1"
|
||||
"12, defaultName:2"
|
||||
"13, defaultName:3"
|
||||
"14, defaultName:4"
|
||||
"15, defaultName:5"
|
||||
"16, defaultName:6"
|
||||
"17, defaultName:7"
|
||||
"18, defaultName:8"
|
||||
"19, defaultName:9"
|
||||
"20, defaultName:10"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
services.hyprpaper = {
|
||||
enable = true;
|
||||
settings = {
|
||||
splash = false; # Disable the little quotes they put on there
|
||||
wallpaper = map (mon: {
|
||||
monitor = mon;
|
||||
# Each monitor gets a folder under wallpaper that containes the current images.
|
||||
path = "~/Pictures/Wallpaper/${mon}";
|
||||
timeout = 3600;
|
||||
recursive = true;
|
||||
fit_mode = "cover";
|
||||
}) (builtins.attrNames config.hardware.monitors);
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
gimp3
|
||||
inkscape
|
||||
];
|
||||
}
|
||||
@@ -1,72 +1,43 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
browser = "firefox";
|
||||
in
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hyprland.nix
|
||||
./audio.nix
|
||||
./hypr/hyprland.nix
|
||||
./nix.nix
|
||||
./rofi/rofi.nix
|
||||
./sway.nix
|
||||
../apps/element.nix
|
||||
../apps/discord.nix
|
||||
./terminal.nix
|
||||
../options/monitors.nix
|
||||
];
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
# Desktop Applications
|
||||
gimp3
|
||||
vlc
|
||||
|
||||
# Common utilities
|
||||
home.packages = with pkgs; [
|
||||
feh
|
||||
networkmanagerapplet # network control
|
||||
hyprlock # lock screen
|
||||
swayidle # lock on idle
|
||||
swayosd # volume pop-up
|
||||
swaynotificationcenter # notifications
|
||||
hyprpolkitagent # Privilege managent
|
||||
gnome-keyring # Secret management
|
||||
glib # for Gnome/GTK settings
|
||||
gsettings-desktop-schemas # So that we can access gnome settings
|
||||
xdg-desktop-portal-hyprland
|
||||
xdg-desktop-portal-gtk # GTK backend for XDG components like pickers
|
||||
grim # Screenshot provider
|
||||
hyprshot # Screenshot utility
|
||||
nwg-look # GTK settings editor
|
||||
playerctl # for universal play/pause etc
|
||||
wirelesstools
|
||||
waypaper # Wallpaper switcher
|
||||
|
||||
phinger-cursors # Mouse cursors
|
||||
];
|
||||
|
||||
pointerCursor = {
|
||||
enable = true;
|
||||
gtk.enable = true;
|
||||
size = 16;
|
||||
package = pkgs.bibata-cursors;
|
||||
name = "Bibata-Modern-Classic";
|
||||
# package = pkgs.phinger-cursors;
|
||||
# name = "phinger-cursors";
|
||||
};
|
||||
|
||||
# Hint for electron apps to use wayland
|
||||
sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
|
||||
# Miscelaneous config files
|
||||
file = {
|
||||
# Micelaneious config files
|
||||
home.file = {
|
||||
".XCompose".source = ./config/XCompose;
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
# browsers
|
||||
firefox = {
|
||||
enable = true;
|
||||
configPath = "${config.xdg.configHome}/mozilla/firefox";
|
||||
};
|
||||
chromium.enable = true;
|
||||
};
|
||||
|
||||
# GTK settings
|
||||
gtk = {
|
||||
@@ -78,14 +49,10 @@ in
|
||||
gtk3.extraConfig = {
|
||||
gtk-application-prefer-dark-theme = true;
|
||||
};
|
||||
gtk4 = {
|
||||
# Don't use GTK4 themes. See https://stopthemingmy.app/
|
||||
theme = null;
|
||||
extraConfig = {
|
||||
gtk4.extraConfig = {
|
||||
gtk-application-prefer-dark-theme = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# This is where the real magic happens to tell the applications to prefer
|
||||
# dark mode. For example, Element reads from this setting.
|
||||
@@ -101,18 +68,4 @@ in
|
||||
platformTheme.name = "adwaita";
|
||||
style.name = "adwaita-dark";
|
||||
};
|
||||
|
||||
# Default apps
|
||||
xdg.mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = {
|
||||
"text/html" = [ "${browser}.desktop" ];
|
||||
"default-web-browser" = [ "${browser}.desktop" ];
|
||||
"x-scheme-handler/http" = [ "${browser}.desktop" ];
|
||||
"x-scheme-handler/https" = [ "${browser}.desktop" ];
|
||||
"x-scheme-handler/about" = [ "${browser}.desktop" ];
|
||||
"x-scheme-handler/unknown" = [ "${browser}.desktop" ];
|
||||
};
|
||||
};
|
||||
home.sessionVariables.DEFAULT_BROWSER = "${pkgs."${browser}"}/bin/${browser}";
|
||||
}
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [ sshfs ];
|
||||
|
||||
systemd.user.services =
|
||||
let
|
||||
mountArchive = ''
|
||||
${pkgs.sshfs}/bin/sshfs \
|
||||
-f \
|
||||
-o reconnect \
|
||||
-o compression=yes \
|
||||
-o ServerAliveInterval=15 \
|
||||
-o ServerAliveCountMax=3 \
|
||||
-o IdentityFile=%h/.ssh/id_ed25519 \
|
||||
-o StrictHostKeyChecking=yes \
|
||||
drew@mcp:/tank/archive/drew \
|
||||
%h/archive
|
||||
'';
|
||||
# unmountArchive = "/run/wrappers/bin/fusermount -u %h/archive";
|
||||
in
|
||||
{
|
||||
# Mounts the archive when the system is online.
|
||||
mcp-archive = {
|
||||
Unit = {
|
||||
Description = "SSHFS mount for remote archive";
|
||||
|
||||
# Start only after the network is online
|
||||
After = [ "network-online.target" ];
|
||||
|
||||
# Stop this service if the network stops
|
||||
StopPropagatedFrom = [ "network-online.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "simple";
|
||||
ExecStartPre = "/run/current-system/sw/bin/mkdir -p %h/archive";
|
||||
ExecStart = mountArchive;
|
||||
|
||||
Restart = "on-failure";
|
||||
RestartSec = "10s";
|
||||
};
|
||||
|
||||
Install = {
|
||||
# It doesn't like to disconnect on sleep, so not making it automount at all
|
||||
# WantedBy = [ "default.target" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"extras": [
|
||||
"lazyvim.plugins.extras.coding.mini-comment",
|
||||
"lazyvim.plugins.extras.coding.mini-surround",
|
||||
"lazyvim.plugins.extras.editor.snacks_picker",
|
||||
"lazyvim.plugins.extras.lang.astro",
|
||||
"lazyvim.plugins.extras.lang.haskell",
|
||||
"lazyvim.plugins.extras.lang.json",
|
||||
"lazyvim.plugins.extras.lang.markdown",
|
||||
"lazyvim.plugins.extras.lang.nix",
|
||||
"lazyvim.plugins.extras.lang.rust",
|
||||
"lazyvim.plugins.extras.lang.tailwind",
|
||||
"lazyvim.plugins.extras.lang.toml",
|
||||
"lazyvim.plugins.extras.lang.typescript",
|
||||
"lazyvim.plugins.extras.ai.sidekick"
|
||||
],
|
||||
"install_version": 8,
|
||||
"version": 8
|
||||
}
|
||||
@@ -10,8 +10,8 @@
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "markdown" },
|
||||
callback = function()
|
||||
vim.o.shiftwidth = 2
|
||||
vim.o.tabstop = 2
|
||||
vim.o.softtabstop = 2
|
||||
vim.bo.shiftwidth = 4
|
||||
vim.bo.tabstop = 4
|
||||
vim.bo.softtabstop = 4
|
||||
end,
|
||||
})
|
||||
|
||||
@@ -18,10 +18,6 @@ require("lazy").setup({
|
||||
spec = {
|
||||
-- add LazyVim and import its plugins
|
||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||
-- Integrate ESlint for fixes and prettier for formatting
|
||||
-- See: https://www.lazyvim.org/configuration/recipes
|
||||
{ import = "lazyvim.plugins.extras.linting.eslint" },
|
||||
{ import = "lazyvim.plugins.extras.formatting.prettier" },
|
||||
-- import/override with your plugins
|
||||
{ import = "plugins" },
|
||||
},
|
||||
|
||||
@@ -4,6 +4,3 @@
|
||||
|
||||
-- Creates a shortcut for adding the directory of the current buffer when specifying a file
|
||||
vim.cmd("cnoreabbrev %. %:h<Tab>")
|
||||
|
||||
-- Set snacks as the preferred picker.
|
||||
vim.g.lazyvim_picker = "snacks"
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
return {
|
||||
"saghen/blink.cmp",
|
||||
dependencies = {
|
||||
"moyiz/blink-emoji.nvim",
|
||||
},
|
||||
opts = {
|
||||
sources = {
|
||||
default = { "lsp", "buffer", "snippets", "path", "emoji" },
|
||||
providers = {
|
||||
-- https://github.com/moyiz/blink-emoji.nvim
|
||||
emoji = {
|
||||
module = "blink-emoji",
|
||||
name = "Emoji",
|
||||
score_offset = 15, -- Tune by preference
|
||||
opts = { insert = true }, -- Insert emoji (default) or complete its name
|
||||
should_show_items = function()
|
||||
return vim.tbl_contains(
|
||||
-- Enable emoji completion only for git commits and markdown.
|
||||
-- By default, enabled for all file-types.
|
||||
{ "gitcommit", "markdown" },
|
||||
vim.o.filetype
|
||||
)
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
keymap = {
|
||||
preset = "default",
|
||||
["<C-space>"] = {
|
||||
function(cmp)
|
||||
cmp.show()
|
||||
end,
|
||||
},
|
||||
["<Tab>"] = { "select_and_accept", "snippet_forward", "fallback" },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
return {
|
||||
"stevearc/conform.nvim",
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
nix = { "nixfmt" },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
"zbirenbaum/copilot.lua",
|
||||
opts = {
|
||||
filetypes = {
|
||||
markdown = false,
|
||||
help = false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
return {
|
||||
-- Maeson installs it's own binaries that are incompatible with NixOS.
|
||||
{ "mason-org/mason.nvim", enabled = false },
|
||||
{ "mason-org/mason-lspconfig.nvim", enabled = false },
|
||||
{ "williamboman/mason.nvim", enabled = false },
|
||||
{ "williamboman/mason-lspconfig.nvim", enabled = false },
|
||||
}
|
||||
|
||||
11
home-manager/features/neovim/config/lua/plugins/fzf.lua
Normal file
11
home-manager/features/neovim/config/lua/plugins/fzf.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
return {
|
||||
-- https://www.lazyvim.org/extras/editor/fzf
|
||||
"ibhagwan/fzf-lua",
|
||||
keys = {
|
||||
{
|
||||
"<leader><space>",
|
||||
"<cmd>FzfLua buffers sort_mru=true sort_lastused=true<cr>",
|
||||
desc = "Switch Buffer",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -3,24 +3,8 @@ return {
|
||||
"neovim/nvim-lspconfig",
|
||||
opts = {
|
||||
servers = {
|
||||
-- Lua
|
||||
lua_ls = {
|
||||
root_markers = {
|
||||
".luarc.json",
|
||||
".git",
|
||||
},
|
||||
},
|
||||
-- Nix
|
||||
lua_ls = {},
|
||||
nil_ls = {},
|
||||
-- Typescript
|
||||
vtsls = {},
|
||||
-- Haskell
|
||||
hls = {},
|
||||
-- Copilot
|
||||
copilot = { enabled = true },
|
||||
},
|
||||
codelens = {
|
||||
enable = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
-- https://github.com/MeanderingProgrammer/render-markdown.nvim?tab=readme-ov-file#setup
|
||||
return {
|
||||
"MeanderingProgrammer/render-markdown.nvim",
|
||||
opts = {
|
||||
checkbox = {
|
||||
enabled = true,
|
||||
render_modes = true,
|
||||
unchecked = {
|
||||
icon = " ",
|
||||
highlight = "RenderMarkdownUnchecked",
|
||||
scope_highlight = nil,
|
||||
},
|
||||
checked = {
|
||||
-- Replaces '[x]' of 'task_list_marker_checked'.
|
||||
icon = " ",
|
||||
-- Highlight for the checked icon.
|
||||
highlight = "RenderMarkdownChecked",
|
||||
-- Highlight for item associated with checked checkbox.
|
||||
scope_highlight = nil,
|
||||
},
|
||||
-- Define custom checkbox states, more involved, not part of the markdown grammar.
|
||||
-- As a result this requires neovim >= 0.10.0 since it relies on 'inline' extmarks.
|
||||
-- The key is for healthcheck and to allow users to change its values, value type below.
|
||||
-- | raw | matched against the raw text of a 'shortcut_link' |
|
||||
-- | rendered | replaces the 'raw' value when rendering |
|
||||
-- | highlight | highlight for the 'rendered' icon |
|
||||
-- | scope_highlight | optional highlight for item associated with custom checkbox |
|
||||
-- stylua: ignore
|
||||
custom = {
|
||||
partial = {
|
||||
raw = '[/]',
|
||||
rendered = '⛋ ',
|
||||
highlight = 'RenderMarkdownTodo',
|
||||
scope_highlight = nil
|
||||
},
|
||||
deferred = {
|
||||
raw = '[>]',
|
||||
rendered = '⛝ ',
|
||||
highlight = 'RenderMarkdownWarn',
|
||||
scope_highlight = nil
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,38 +1,10 @@
|
||||
return {
|
||||
{
|
||||
"nvim-mini/mini.surround",
|
||||
"echasnovski/mini.surround",
|
||||
enable = true,
|
||||
keys = function(_, keys)
|
||||
-- Populate the keys based on the user's options
|
||||
local opts = LazyVim.opts("mini.surround")
|
||||
local mappings = {
|
||||
{ opts.mappings.add, desc = "Add Surrounding", mode = { "n", "v" } },
|
||||
{ opts.mappings.delete, desc = "Delete Surrounding" },
|
||||
{ opts.mappings.find, desc = "Find Right Surrounding" },
|
||||
{ opts.mappings.find_left, desc = "Find Left Surrounding" },
|
||||
{ opts.mappings.highlight, desc = "Highlight Surrounding" },
|
||||
{ opts.mappings.replace, desc = "Replace Surrounding" },
|
||||
{ opts.mappings.update_n_lines, desc = "Update `MiniSurround.config.n_lines`" },
|
||||
}
|
||||
mappings = vim.tbl_filter(function(m)
|
||||
return m[1] and #m[1] > 0
|
||||
end, mappings)
|
||||
return vim.list_extend(mappings, keys)
|
||||
end,
|
||||
opts = {
|
||||
mappings = {
|
||||
add = "gsa", -- Add surrounding in Normal and Visual modes
|
||||
delete = "gsd", -- Delete surrounding
|
||||
find = "gsf", -- Find surrounding (to the right)
|
||||
find_left = "gsF", -- Find surrounding (to the left)
|
||||
highlight = "gsh", -- Highlight surrounding
|
||||
replace = "gsr", -- Replace surrounding
|
||||
update_n_lines = "gsn", -- Update `n_lines`
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"nvim-mini/mini.comment",
|
||||
"echasnovski/mini.comment",
|
||||
enable = true,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,7 +1,20 @@
|
||||
return {
|
||||
"obsidian-nvim/obsidian.nvim",
|
||||
"epwalsh/obsidian.nvim",
|
||||
version = "*", -- recommended, use latest release instead of latest commit
|
||||
lazy = true,
|
||||
ft = "markdown",
|
||||
-- Replace the above line with this if you only want to load obsidian.nvim for markdown files in your vault:
|
||||
-- event = {
|
||||
-- -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand'.
|
||||
-- -- E.g. "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/*.md"
|
||||
-- -- refer to `:h file-pattern` for more examples
|
||||
-- "BufReadPre path/to/my-vault/*.md",
|
||||
-- "BufNewFile path/to/my-vault/*.md",
|
||||
-- },
|
||||
dependencies = {
|
||||
-- Required.
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
opts = {
|
||||
workspaces = {
|
||||
{
|
||||
@@ -9,60 +22,18 @@ return {
|
||||
path = "~/Documents/Notes",
|
||||
},
|
||||
},
|
||||
|
||||
-- Can I enable this somehow? I'm using blink.cmp but this is triggering
|
||||
-- it to look for nvim-cmp directly.
|
||||
-- completion = {
|
||||
-- nvim_cmp = true,
|
||||
-- min_chars = 2,
|
||||
-- },
|
||||
|
||||
daily_notes = {
|
||||
-- Optional, if you keep daily notes in a separate directory.
|
||||
folder = "Daily Notes",
|
||||
-- Optional, if you want to change the date format for the ID of daily notes.
|
||||
date_format = "%Y-%m-%d",
|
||||
-- Optional, if you want to automatically insert a template from your template directory like ''
|
||||
template = "Daily Note",
|
||||
template = nil,
|
||||
},
|
||||
|
||||
templates = {
|
||||
folder = "Templates",
|
||||
date_format = "%Y-%m-%d",
|
||||
time_format = "%H:%M",
|
||||
},
|
||||
|
||||
checkbox = {
|
||||
order = { " ", "x", "/", ">", "~", "!" },
|
||||
},
|
||||
|
||||
ui = {
|
||||
-- Disable the UI features and let render-markdown.nvim handle it.
|
||||
enable = false,
|
||||
},
|
||||
|
||||
-- Put the note ID in the wiki links
|
||||
wiki_link_func = "prepend_note_id",
|
||||
preferred_link_style = "wiki",
|
||||
|
||||
-- Customize how note IDs are generated given an optional title.
|
||||
---@param title string|?
|
||||
---@return string
|
||||
note_id_func = function(title)
|
||||
if title ~= nil then
|
||||
-- If title is given, transform it into valid file name by removing most special characters
|
||||
-- Note that parens are not supported because they interfere with markdown links.
|
||||
return title:gsub("[^A-Za-z0-9-_]", ""):lower()
|
||||
else
|
||||
-- If title is nil, just put the date and four random characters
|
||||
for _ = 1, 4 do
|
||||
return os.date("%Y-%m-%d ") .. string.char(math.random(65, 90))
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
follow_url_func = function(url)
|
||||
vim.ui.open(url) -- Use the built-in open, need Neovim 0.10.0+
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
return {
|
||||
"salkin-mada/openscad.nvim",
|
||||
config = function()
|
||||
vim.g.openscad_load_snippets = true
|
||||
vim.g.openscad_default_mappings = true
|
||||
vim.g.openscad_fuzzy_finder = "snacks"
|
||||
require("openscad")
|
||||
end,
|
||||
dependencies = {
|
||||
-- Can fall back to Snacks instead.
|
||||
-- "ibhagwan/fzf-lua",
|
||||
},
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
return {
|
||||
-- https://github.com/folke/sidekick.nvim
|
||||
"folke/sidekick.nvim",
|
||||
opts = {
|
||||
cli = {
|
||||
mux = {
|
||||
enabled = false, -- I haven't bothered to include tmux yet
|
||||
backend = "tmux",
|
||||
},
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<tab>",
|
||||
function()
|
||||
-- if there is a next edit, jump to it, otherwise apply it if any
|
||||
if not require("sidekick").nes_jump_or_apply() then
|
||||
return "<Tab>" -- fallback to normal tab
|
||||
end
|
||||
end,
|
||||
expr = true,
|
||||
desc = "Goto/Apply Next Edit Suggestion",
|
||||
},
|
||||
{
|
||||
"<c-.>",
|
||||
function()
|
||||
require("sidekick.cli").focus()
|
||||
end,
|
||||
desc = "Sidekick Focus",
|
||||
mode = { "n", "t", "i", "x" },
|
||||
},
|
||||
{
|
||||
"<leader>aa",
|
||||
function()
|
||||
require("sidekick.cli").toggle()
|
||||
end,
|
||||
desc = "Sidekick Toggle CLI",
|
||||
},
|
||||
{
|
||||
"<leader>as",
|
||||
function()
|
||||
require("sidekick.cli").select()
|
||||
end,
|
||||
-- Or to select only installed tools:
|
||||
-- require("sidekick.cli").select({ filter = { installed = true } })
|
||||
desc = "Select CLI",
|
||||
},
|
||||
{
|
||||
"<leader>ad",
|
||||
function()
|
||||
require("sidekick.cli").close()
|
||||
end,
|
||||
desc = "Detach a CLI Session",
|
||||
},
|
||||
{
|
||||
"<leader>at",
|
||||
function()
|
||||
require("sidekick.cli").send({ msg = "{this}" })
|
||||
end,
|
||||
mode = { "x", "n" },
|
||||
desc = "Send This",
|
||||
},
|
||||
{
|
||||
"<leader>af",
|
||||
function()
|
||||
require("sidekick.cli").send({ msg = "{file}" })
|
||||
end,
|
||||
desc = "Send File",
|
||||
},
|
||||
{
|
||||
"<leader>av",
|
||||
function()
|
||||
require("sidekick.cli").send({ msg = "{selection}" })
|
||||
end,
|
||||
mode = { "x" },
|
||||
desc = "Send Visual Selection",
|
||||
},
|
||||
{
|
||||
"<leader>ap",
|
||||
function()
|
||||
require("sidekick.cli").prompt()
|
||||
end,
|
||||
mode = { "n", "x" },
|
||||
desc = "Sidekick Select Prompt",
|
||||
},
|
||||
-- Example of a keybinding to open Claude directly
|
||||
-- {
|
||||
-- "<leader>ac",
|
||||
-- function()
|
||||
-- require("sidekick.cli").toggle({ name = "claude", focus = true })
|
||||
-- end,
|
||||
-- desc = "Sidekick Toggle Claude",
|
||||
-- },
|
||||
},
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
return {
|
||||
"folke/snacks.nvim",
|
||||
opts = function(_, opts)
|
||||
vim.tbl_deep_extend("force", opts, {
|
||||
styles = {
|
||||
notification = {
|
||||
wo = { wrap = true }, -- wrap notifications
|
||||
},
|
||||
},
|
||||
picker = {
|
||||
smart = {
|
||||
-- Remove the "recent" picker so we don't get things from other directories.
|
||||
multi = { "buffers", "files" },
|
||||
matcher = {
|
||||
-- sort even when the search string is empty
|
||||
sort_empty = true,
|
||||
-- Enable frecensy for matchers. This puts more common files near the top
|
||||
frecency = false,
|
||||
-- Make sure files in the current directory are prioritized
|
||||
cwd_bonus = true,
|
||||
-- Give more weight to files that are more recent
|
||||
history_bonus = true,
|
||||
-- Give more weight to places where the filename is part of the match
|
||||
filename_bonus = true,
|
||||
},
|
||||
},
|
||||
sources = {
|
||||
explorer = {
|
||||
layout = { layout = { position = "right" } },
|
||||
},
|
||||
},
|
||||
-- This only supports the Kitty graphics protocol.
|
||||
-- See
|
||||
-- https://github.com/folke/snacks.nvim/blob/main/docs/image.md
|
||||
-- https://github.com/obsidian-nvim/obsidian.nvim/wiki/Images
|
||||
-- image = {
|
||||
-- resolve = function(path, src)
|
||||
-- if require("obsidian.api").path_is_note(path) then
|
||||
-- return require("obsidian.api").resolve_image_path(src)
|
||||
-- end
|
||||
-- end,
|
||||
-- },
|
||||
},
|
||||
})
|
||||
Snacks.toggle({
|
||||
name = "Color Column",
|
||||
get = function()
|
||||
return vim.o.colorcolumn == "80"
|
||||
end,
|
||||
set = function(state)
|
||||
if state then
|
||||
vim.o.colorcolumn = "80"
|
||||
vim.cmd([[highlight ColorColumn guibg=#202020]])
|
||||
else
|
||||
vim.o.colorcolumn = ""
|
||||
vim.cmd([[highlight ColorColumn guibg=None]])
|
||||
end
|
||||
end,
|
||||
}):map("<leader>ut", { desc = "Toggle Color Column" })
|
||||
end,
|
||||
keys = {
|
||||
{
|
||||
"<leader><space>",
|
||||
function()
|
||||
Snacks.picker.smart()
|
||||
end,
|
||||
desc = "Smart Find Files",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
return {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
enabled = false,
|
||||
keys = {
|
||||
-- Switch the default keybind to switch buffers instead of find files
|
||||
{
|
||||
"<leader><space>",
|
||||
"<cmd>Telescope buffers sort_mru=true sort_lastused=true<cr>",
|
||||
desc = "Open Files",
|
||||
},
|
||||
-- Disable the <leader><comma> since it's so hard to type and redundant with the above.
|
||||
{ "<leader><comma>", false },
|
||||
},
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
return {
|
||||
"folke/tokyonight.nvim",
|
||||
opts = {
|
||||
transparent = true,
|
||||
styles = {
|
||||
sidebars = "transparent",
|
||||
-- floats = "transparent",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
return {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"astro",
|
||||
"bash",
|
||||
"html",
|
||||
"css",
|
||||
"javascript",
|
||||
"json",
|
||||
"lua",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"python",
|
||||
"query",
|
||||
"regex",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"vim",
|
||||
"yaml",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -6,12 +6,9 @@
|
||||
vimAlias = true;
|
||||
defaultEditor = true;
|
||||
withNodeJs = true;
|
||||
withRuby = false; # New default as of 26.05, needs explicit change since original config is old.
|
||||
withPython3 = false; # New default as of 26.05, needs explicit change since original config is old.
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
gcc # For treesitter complation
|
||||
tree-sitter # For treesitter binaries
|
||||
ripgrep # Search support
|
||||
wayclip # Clipboard support
|
||||
fd # finder for telescope
|
||||
@@ -20,8 +17,6 @@
|
||||
wget # LazyVim dep?
|
||||
sqlite # For Snacks
|
||||
imagemagick # For image conversion/display
|
||||
vscode-langservers-extracted # For language servers (it wants this version of eslint for some reason)
|
||||
copilot-language-server # Enable the copilot language server
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
10
home-manager/features/nix.nix
Normal file
10
home-manager/features/nix.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# Enable flakes and nix-commnands.
|
||||
nix.settings.experimental-features = ["flakes" "nix-command"];
|
||||
|
||||
# Allow unfree code
|
||||
nixpkgs.config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
}
|
||||
@@ -1,13 +1,5 @@
|
||||
{ lib, pkgs, ... }:
|
||||
{ lib, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
obsidian
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
"notes" = "(cd ~/Documents/Notes && nvim)";
|
||||
};
|
||||
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
tray = {
|
||||
@@ -25,7 +17,6 @@
|
||||
"altair"
|
||||
"mcp"
|
||||
"vega"
|
||||
"proxima"
|
||||
];
|
||||
};
|
||||
};
|
||||
@@ -57,14 +48,6 @@
|
||||
];
|
||||
compression = "always";
|
||||
};
|
||||
proxima = {
|
||||
id = "NWZL6LY-ULJQMZE-EWY3MQU-XPDAFQB-LTIBZV7-GPKIABJ-WBJE36F-SK6LVAY";
|
||||
name = "Proxima";
|
||||
addresses = [
|
||||
"relay://syncthing.blazestar.net:22067"
|
||||
];
|
||||
compression = "always";
|
||||
};
|
||||
};
|
||||
options = {
|
||||
localAnnounceEnabled = false;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
**/
|
||||
|
||||
* {
|
||||
background: #15161ECC;
|
||||
background: #15161EFF;
|
||||
background-alt: #1A1B26FF;
|
||||
foreground: #C0CAF5FF;
|
||||
selected: #33467CFF;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
configuration {
|
||||
ssh-command: "foot ssh {host}";
|
||||
ssh-command: "wezterm ssh {host}";
|
||||
}
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
|
||||
/* Import color-scheme from `colors` directory */
|
||||
|
||||
@import "~/.config/rofi/colors/tokyonight.rasi"
|
||||
@import "~/.config/rofi/colors/onedark.rasi"
|
||||
|
||||
@@ -32,8 +32,8 @@ window {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 2px solid;
|
||||
border-radius: 5px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
background-color: @background;
|
||||
cursor: "default";
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
|
||||
/* Import color-scheme from `colors` directory */
|
||||
|
||||
@import "~/.config/rofi/colors/tokyonight.rasi"
|
||||
@import "~/.config/rofi/colors/onedark.rasi"
|
||||
|
||||
@@ -11,7 +11,7 @@ dir="${HOME}/.config/rofi/powermenu"
|
||||
|
||||
# CMDs
|
||||
uptime="$(uptime | awk -F ' ' '{print $2}' | sed -e 's/,//g')"
|
||||
host=$(hostname)
|
||||
host=`hostname`
|
||||
|
||||
# Options
|
||||
shutdown=''
|
||||
@@ -66,25 +66,19 @@ run_cmd() {
|
||||
amixer set Master mute
|
||||
systemctl suspend
|
||||
elif [[ $1 == '--logout' ]]; then
|
||||
hyprctl dispatch 'hl.dsp.exec_cmd("uwsm stop")'
|
||||
# DESKTOP_SESSION appears to be empty right now. I'm not going
|
||||
# to bother setting it until I'm using more than one manager.
|
||||
#
|
||||
# if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then
|
||||
# openbox --exit
|
||||
# elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then
|
||||
# bspc quit
|
||||
# elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then
|
||||
# i3-msg exit
|
||||
# elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
||||
# qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
||||
# elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
||||
# qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
||||
# elif [[ "$DESKTOP_SESSION" == 'hyprland-uwsm' ]]; then
|
||||
# hyprctl dispatch 'exec, uwsm stop'
|
||||
# elif [[ "$DESKTOP_SESSION" == 'hyprland' ]]; then
|
||||
# hyprctl dispatch exit
|
||||
# fi
|
||||
if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then
|
||||
openbox --exit
|
||||
elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then
|
||||
bspc quit
|
||||
elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then
|
||||
i3-msg exit
|
||||
elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
||||
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
||||
elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
||||
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
||||
elif command -v hyprctl &>/dev/null; then
|
||||
hyprctl dispatch exit
|
||||
fi
|
||||
fi
|
||||
else
|
||||
exit 0
|
||||
@@ -94,28 +88,25 @@ run_cmd() {
|
||||
# Actions
|
||||
chosen="$(run_rofi)"
|
||||
case ${chosen} in
|
||||
$shutdown)
|
||||
$shutdown)
|
||||
run_cmd --shutdown
|
||||
;;
|
||||
$reboot)
|
||||
$reboot)
|
||||
run_cmd --reboot
|
||||
;;
|
||||
$lock)
|
||||
loginctl lock-session
|
||||
# if [[ -x '/usr/bin/betterlockscreen' ]]; then
|
||||
# betterlockscreen -l
|
||||
# elif [[ -x '/usr/bin/i3lock' ]]; then
|
||||
# i3lock
|
||||
# elif command -v hyprlock &>/dev/null; then
|
||||
# hyprlock
|
||||
# elif command -v swaylock &>/dev/null; then
|
||||
# swaylock
|
||||
# fi
|
||||
$lock)
|
||||
if [[ -x '/usr/bin/betterlockscreen' ]]; then
|
||||
betterlockscreen -l
|
||||
elif [[ -x '/usr/bin/i3lock' ]]; then
|
||||
i3lock
|
||||
elif command -v hyprlock &>/dev/null; then
|
||||
hyprlock
|
||||
fi
|
||||
;;
|
||||
$suspend)
|
||||
$suspend)
|
||||
run_cmd --suspend
|
||||
;;
|
||||
$logout)
|
||||
$logout)
|
||||
run_cmd --logout
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -35,8 +35,8 @@ window {
|
||||
enabled: true;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 2px solid;
|
||||
border-radius: 5px;
|
||||
border: 0px solid;
|
||||
border-radius: 0px;
|
||||
border-color: @selected;
|
||||
cursor: "default";
|
||||
background-color: @background;
|
||||
|
||||
@@ -8,11 +8,4 @@
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# TODO: Merge into lua config
|
||||
# wayland.windowManager.hyprland.settings.windowrule = [
|
||||
# # Forces the Rofi window to hold focus so that it gets input even if
|
||||
# # something else opens or the mouse is outside the window.
|
||||
# "stay_focused on, match:class Rofi"
|
||||
# ];
|
||||
}
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
|
||||
imports = [
|
||||
./uutils.nix
|
||||
];
|
||||
|
||||
# These are all the sort of shell commands that we want available whereever
|
||||
# there is shell. These include just a lot of useful utilities for managing
|
||||
# a system or working with other shell commands. Packages more specific to
|
||||
@@ -14,53 +10,36 @@
|
||||
# System
|
||||
htop
|
||||
btop
|
||||
psmisc # fuser, killal, pstree
|
||||
neofetch
|
||||
killall
|
||||
|
||||
# Archives
|
||||
# Files
|
||||
zip
|
||||
xz
|
||||
unzip
|
||||
p7zip
|
||||
unrar-wrapper
|
||||
|
||||
# File manipulation
|
||||
file
|
||||
tree
|
||||
yazi # File manager
|
||||
ranger
|
||||
ueberzugpp # for image previews
|
||||
w3m # terminal browser for image previews
|
||||
dysk # better disk info
|
||||
ripgrep # better grep
|
||||
fd # Better find
|
||||
bat # cat with wings
|
||||
eza # Modern replacement for ls
|
||||
dust # More intuitive du
|
||||
dua # Interactive disk usage analyzer
|
||||
|
||||
# Networking
|
||||
dnsutils
|
||||
inetutils
|
||||
socat
|
||||
xh
|
||||
httpie
|
||||
|
||||
# devices
|
||||
usbutils
|
||||
|
||||
# Other
|
||||
jq
|
||||
mprocs # Manage multiple long-running processes
|
||||
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
"p?" = "ps ax | rg";
|
||||
# Dysk is basically just better.
|
||||
"df" = "echo 'Do you mean: dysk?'";
|
||||
"grep" = "echo 'Do you mean: rg?'";
|
||||
"find" = "echo 'Do you mean: fd'";
|
||||
"cat" = "bat";
|
||||
"ls" = "eza";
|
||||
"http" = "echo 'Do you mean: xh'";
|
||||
"du" = "echo 'Do you mean: dust or dua?'";
|
||||
"ranger" = "echo 'Do you mean: yazi'";
|
||||
"p?" = "ps ax | grep";
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
@@ -69,7 +48,7 @@
|
||||
PATH=$PATH:$HOME/.local/bin
|
||||
GITHUB_USERNAME=periodic
|
||||
'';
|
||||
initContent = ''
|
||||
initExtra = ''
|
||||
# Make ^U work like it does in Bash
|
||||
bindkey "^U" backward-kill-line
|
||||
|
||||
@@ -115,12 +94,6 @@
|
||||
];
|
||||
};
|
||||
|
||||
programs.zoxide = {
|
||||
# TODO: Learn all the capabilities of zoxide and use them.
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
|
||||
matchBlocks = {
|
||||
"mcp.haven" = {
|
||||
user = "drew";
|
||||
|
||||
# Automatically add keys to agent when used
|
||||
# Other options are "no" and "confirm"
|
||||
addKeysToAgent = "yes";
|
||||
|
||||
matchBlocks = {
|
||||
"mcp.haven" = {
|
||||
user = "drew";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
./swaync.nix
|
||||
./swaylock.nix
|
||||
];
|
||||
|
||||
services.swayosd = {
|
||||
enable = true;
|
||||
topMargin = 0.7;
|
||||
};
|
||||
|
||||
# Enable sway config generation for home.pointerCursor
|
||||
home.pointerCursor.sway.enable = true;
|
||||
|
||||
wayland.windowManager.sway = {
|
||||
enable = true;
|
||||
extraOptions = [
|
||||
# Required for NVIDIA GPUs
|
||||
"--unsupported-gpu"
|
||||
];
|
||||
checkConfig = true;
|
||||
systemd = {
|
||||
enable = true;
|
||||
xdgAutostart = true;
|
||||
};
|
||||
config = {
|
||||
# Workspace assignments
|
||||
# Example:
|
||||
# {
|
||||
# "1: web" = [{ class = "^Firefox$"; }];
|
||||
# "0: extra" = [{ class = "^Firefox$"; window_role = "About"; }];
|
||||
# }
|
||||
assigns = { };
|
||||
colors = {
|
||||
background = "#333333";
|
||||
focused = {
|
||||
background = "#285577";
|
||||
border = "#4c7899";
|
||||
childBorder = "#285577";
|
||||
indicator = "#2e9ef4";
|
||||
text = "#ffffff";
|
||||
};
|
||||
focusedInactive = {
|
||||
background = "#5f676a";
|
||||
border = "#333333";
|
||||
childBorder = "#5f676a";
|
||||
indicator = "#484e50";
|
||||
text = "#ffffff";
|
||||
};
|
||||
placeholder = {
|
||||
background = "#0c0c0c";
|
||||
border = "#000000";
|
||||
childBorder = "#0c0c0c";
|
||||
indicator = "#000000";
|
||||
text = "#ffffff";
|
||||
};
|
||||
unfocused = {
|
||||
background = "#222222";
|
||||
border = "#333333";
|
||||
childBorder = "#222222";
|
||||
indicator = "#292d2e";
|
||||
text = "#888888";
|
||||
};
|
||||
urgent = {
|
||||
background = "#900000";
|
||||
border = "#2f343a";
|
||||
childBorder = "#900000";
|
||||
indicator = "#900000";
|
||||
text = "#ffffff";
|
||||
};
|
||||
};
|
||||
modifier = "Mod4"; # Super key
|
||||
keybindings =
|
||||
let
|
||||
modifier = config.wayland.windowManager.sway.config.modifier;
|
||||
terminal = "foot";
|
||||
browser = "firefox";
|
||||
menu = "rofi -show drun";
|
||||
in
|
||||
lib.mkOptionDefault {
|
||||
"${modifier}+t" = "exec ${terminal}";
|
||||
"${modifier}+b" = "exec ${browser}";
|
||||
"${modifier}+d" = "exec ${menu}";
|
||||
"${modifier}+Shift+s" = "exec hyprshot -m region --clipboard-only";
|
||||
"${modifier}+c" = "exec swaync-client -t";
|
||||
"${modifier}+Control+q" = "exec /home/drew/.config/rofi/powermenu/powermenu.sh";
|
||||
"${modifier}+x" = "exec /home/drew/.config/rofi/powermenu/powermenu.sh";
|
||||
|
||||
"${modifier}+f" = "floating toggle";
|
||||
"${modifier}+Shift+f" = "fullscreen toggle";
|
||||
|
||||
"${modifier}+r" = "focus output right"; # sway does not have `focusmonitor next`
|
||||
"${modifier}+Control+r" = "move workspace to output left";
|
||||
"${modifier}+Control+s" = "move workspace to output right";
|
||||
|
||||
"${modifier}+q" = "kill";
|
||||
|
||||
"${modifier}+Left" = "focus left";
|
||||
"${modifier}+Right" = "focus right";
|
||||
"${modifier}+Up" = "focus up";
|
||||
"${modifier}+Down" = "focus down";
|
||||
|
||||
"${modifier}+Shift+Left" = "move left";
|
||||
"${modifier}+Shift+Right" = "move right";
|
||||
"${modifier}+Shift+Up" = "move up";
|
||||
"${modifier}+Shift+Down" = "move down";
|
||||
|
||||
# Workspace switching
|
||||
"${modifier}+1" = "workspace number 1";
|
||||
"${modifier}+2" = "workspace number 2";
|
||||
"${modifier}+3" = "workspace number 3";
|
||||
"${modifier}+4" = "workspace number 4";
|
||||
"${modifier}+5" = "workspace number 5";
|
||||
"${modifier}+6" = "workspace number 6";
|
||||
"${modifier}+7" = "workspace number 7";
|
||||
"${modifier}+8" = "workspace number 8";
|
||||
"${modifier}+9" = "workspace number 9";
|
||||
"${modifier}+0" = "workspace number 10";
|
||||
|
||||
"${modifier}+Shift+1" = "move container to workspace number 1; workspace number 1";
|
||||
"${modifier}+Shift+2" = "move container to workspace number 2; workspace number 2";
|
||||
"${modifier}+Shift+3" = "move container to workspace number 3; workspace number 3";
|
||||
"${modifier}+Shift+4" = "move container to workspace number 4; workspace number 4";
|
||||
"${modifier}+Shift+5" = "move container to workspace number 5; workspace number 5";
|
||||
"${modifier}+Shift+6" = "move container to workspace number 6; workspace number 6";
|
||||
"${modifier}+Shift+7" = "move container to workspace number 7; workspace number 7";
|
||||
"${modifier}+Shift+8" = "move container to workspace number 8; workspace number 8";
|
||||
"${modifier}+Shift+9" = "move container to workspace number 9; workspace number 9";
|
||||
"${modifier}+Shift+0" = "move container to workspace number 10; workspace number 10";
|
||||
|
||||
"${modifier}+Shift+r" = "move container to output left"; # approximating hyprland\u2019s split-changemonitor
|
||||
|
||||
"${modifier}+button1" = "move";
|
||||
"${modifier}+button2" = "resize";
|
||||
|
||||
"XF86AudioRaiseVolume" = "exec swayosd-client --output-volume raise";
|
||||
"XF86AudioLowerVolume" = "exec swayosd-client --output-volume lower";
|
||||
"XF86AudioMute" = "exec swayosd-client --output-volume mute-toggle";
|
||||
"XF86AudioMicMute" = "exec swayosd-client --input-volume mute-toggle";
|
||||
|
||||
"XF86AudioNext" = "exec playerctl next";
|
||||
"XF86AudioPause" = "exec playerctl play-pause";
|
||||
"XF86AudioPlay" = "exec playerctl play-pause";
|
||||
"XF86AudioPrev" = "exec playerctl previous";
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
package = pkgs.swaylock-effects;
|
||||
settings = {
|
||||
clock = true;
|
||||
indicator = true;
|
||||
effect-pixelate = 20;
|
||||
};
|
||||
};
|
||||
|
||||
home.file.".config/swaylock/swaylock.sh" = {
|
||||
executable = true;
|
||||
# A script that will take the wallpaper folder for each monitor (see
|
||||
# wallpaper.nix) and use a random image as the background on each monitor.
|
||||
text = ''
|
||||
#!/usr/bin/env sh
|
||||
|
||||
wallpaper_dir="$HOME/Pictures/Wallpaper"
|
||||
cmd="swaylock"
|
||||
|
||||
for monitor in $(hyprctl monitors | awk '/^Monitor/ { print $2 }'); do
|
||||
dir="$wallpaper_dir/$monitor"
|
||||
if [ -d "$dir" ]; then
|
||||
image=$(find "$dir" -type f | shuf -n 1)
|
||||
if [ -n "$image" ]; then
|
||||
cmd="$cmd --image \"$monitor:$image\""
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Eval to handle the quoted image paths correctly
|
||||
eval $cmd
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
|
||||
services.swaync = {
|
||||
enable = true;
|
||||
settings = {
|
||||
"positionX" = "right";
|
||||
"positionY" = "top";
|
||||
"layer" = "overlay";
|
||||
"control-center-layer" = "top";
|
||||
"layer-shell" = true;
|
||||
"cssPriority" = "application";
|
||||
"control-center-margin-top" = 0;
|
||||
"control-center-margin-bottom" = 0;
|
||||
"control-center-margin-right" = 0;
|
||||
"control-center-margin-left" = 0;
|
||||
"notification-2fa-action" = true;
|
||||
"notification-inline-replies" = false;
|
||||
"notification-icon-size" = 64;
|
||||
"notification-body-image-height" = 100;
|
||||
"notification-body-image-width" = 200;
|
||||
"timeout" = 10;
|
||||
"timeout-low" = 5;
|
||||
"timeout-critical" = 0;
|
||||
"fit-to-screen" = true;
|
||||
"relative-timestamps" = true;
|
||||
"control-center-width" = 500;
|
||||
"control-center-height" = 600;
|
||||
"notification-window-width" = 500;
|
||||
"keyboard-shortcuts" = true;
|
||||
"image-visibility" = "when-available";
|
||||
"transition-time" = 200;
|
||||
"hide-on-clear" = false;
|
||||
"hide-on-action" = true;
|
||||
"script-fail-notify" = true;
|
||||
"scripts" = {
|
||||
"example-script" = {
|
||||
"exec" = "echo 'Do something...'";
|
||||
"urgency" = "Normal";
|
||||
};
|
||||
"example-action-script" = {
|
||||
"exec" = "echo 'Do something actionable!'";
|
||||
"urgency" = "Normal";
|
||||
"run-on" = "action";
|
||||
};
|
||||
};
|
||||
"notification-visibility" = {
|
||||
"example-name" = {
|
||||
"state" = "muted";
|
||||
"urgency" = "Low";
|
||||
"app-name" = "Spotify";
|
||||
};
|
||||
};
|
||||
"widgets" = [
|
||||
"inhibitors"
|
||||
"title"
|
||||
"dnd"
|
||||
"notifications"
|
||||
];
|
||||
"widget-config" = {
|
||||
"inhibitors" = {
|
||||
"text" = "Inhibitors";
|
||||
"button-text" = "Clear All";
|
||||
"clear-all-button" = true;
|
||||
};
|
||||
"title" = {
|
||||
"text" = "Notifications";
|
||||
"clear-all-button" = true;
|
||||
"button-text" = "Clear All";
|
||||
};
|
||||
"dnd" = {
|
||||
"text" = "Do Not Disturb";
|
||||
};
|
||||
"label" = {
|
||||
"max-lines" = 5;
|
||||
"text" = "Label Text";
|
||||
};
|
||||
"mpris" = {
|
||||
"image-size" = 96;
|
||||
"image-radius" = 12;
|
||||
};
|
||||
"buttons-grid" = {
|
||||
"actions" = [
|
||||
{
|
||||
"label" = "直";
|
||||
"type" = "toggle";
|
||||
"active" = true;
|
||||
"command" =
|
||||
"sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'";
|
||||
"update_command" = "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
@@ -4,16 +4,9 @@
|
||||
|
||||
home.packages = with pkgs; [
|
||||
# Font
|
||||
# 24.11
|
||||
# inconsolata-nerdfont
|
||||
# fira-code-nerdfont
|
||||
# 25.05
|
||||
nerd-fonts.inconsolata
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.jetbrains-mono
|
||||
|
||||
libsixel # For working with images in terminals
|
||||
ueberzugpp # for image previews
|
||||
];
|
||||
|
||||
# Allow Home Manager to set fonts.
|
||||
@@ -44,45 +37,6 @@
|
||||
};
|
||||
|
||||
home.shellAliases = {
|
||||
"imgcat" = "img2sixel";
|
||||
};
|
||||
|
||||
programs.foot = {
|
||||
enable = true;
|
||||
settings = {
|
||||
main = {
|
||||
font = "FiraCode Nerd Font:size=12";
|
||||
selection-target = "primary";
|
||||
pad = "8x8";
|
||||
};
|
||||
|
||||
scrollback = {
|
||||
lines = 5000;
|
||||
};
|
||||
|
||||
colors-dark = {
|
||||
alpha = 0.9;
|
||||
# Tokionight Night theme
|
||||
# From https://codeberg.org/dnkl/foot/src/branch/master/themes/tokyonight-night
|
||||
background = "1a1b26";
|
||||
foreground = "c0caf5";
|
||||
regular0 = "15161E";
|
||||
regular1 = "f7768e";
|
||||
regular2 = "9ece6a";
|
||||
regular3 = "e0af68";
|
||||
regular4 = "7aa2f7";
|
||||
regular5 = "bb9af7";
|
||||
regular6 = "7dcfff";
|
||||
regular7 = "a9b1d6";
|
||||
bright0 = "414868";
|
||||
bright1 = "f7768e";
|
||||
bright2 = "9ece6a";
|
||||
bright3 = "e0af68";
|
||||
bright4 = "7aa2f7";
|
||||
bright5 = "bb9af7";
|
||||
bright6 = "7dcfff";
|
||||
bright7 = "c0caf5";
|
||||
};
|
||||
};
|
||||
"imgcat" = "wezterm imgcat";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
# Use uutils core-utils with no prefix so they override the GNU coreutils
|
||||
(lib.hiPrio uutils-coreutils-noprefix)
|
||||
];
|
||||
}
|
||||
15
home-manager/features/wallpaper.nix
Normal file
15
home-manager/features/wallpaper.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
monitors:
|
||||
{ ... }:
|
||||
{
|
||||
wayland.windowManager.hyprland.settings.exec-once = [
|
||||
"wpaperd"
|
||||
];
|
||||
|
||||
programs.wpaperd = {
|
||||
enable = true;
|
||||
settings = builtins.listToAttrs (map (mon: {
|
||||
name = mon;
|
||||
value = { path = "~/Pictures/Wallpaper/${mon}"; };
|
||||
}) monitors);
|
||||
};
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{ config }:
|
||||
{
|
||||
# NOTE: Wpaperd displays wallpaper upside-down on 90´ ccw rotated
|
||||
# monitors as of 26.05
|
||||
services.wpaperd = {
|
||||
enable = true;
|
||||
settings =
|
||||
builtins.listToAttrs (
|
||||
map (mon: {
|
||||
name = mon;
|
||||
value = {
|
||||
# Each monitor gets a folder under wallpaper that
|
||||
# containes the current images.
|
||||
path = "~/Pictures/Wallpaper/${mon}";
|
||||
};
|
||||
}) (builtins.attrNames config.hardware.monitors)
|
||||
)
|
||||
// {
|
||||
default = {
|
||||
duration = "1h";
|
||||
mode = "center";
|
||||
sorting = "random";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
{ lib, config, ... }:
|
||||
{
|
||||
options =
|
||||
with lib;
|
||||
with types;
|
||||
{
|
||||
hardware.monitors = mkOption {
|
||||
type = lazyAttrsOf (submodule {
|
||||
options = {
|
||||
mode = mkOption {
|
||||
type = str;
|
||||
default = "auto";
|
||||
};
|
||||
position = mkOption {
|
||||
type = str;
|
||||
default = "auto";
|
||||
};
|
||||
rotation = mkOption {
|
||||
type = enum [
|
||||
"none"
|
||||
"90"
|
||||
"180"
|
||||
"270"
|
||||
];
|
||||
default = "none";
|
||||
};
|
||||
flipped = mkOption {
|
||||
type = bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
});
|
||||
default = { };
|
||||
description = "Monitor configuration";
|
||||
};
|
||||
};
|
||||
|
||||
# config = {
|
||||
# xdg.configFile."hypr/monitors.lua" = lib.mkIf config.wayland.windowManager.hyprland.enable {
|
||||
# text =
|
||||
# let
|
||||
# workspaceSettings = (
|
||||
# lib.imap0 (
|
||||
# idx:
|
||||
# { name, value }:
|
||||
# let
|
||||
# offset = idx * 10;
|
||||
# in
|
||||
# lib.concatMapStrings (
|
||||
# i:
|
||||
# let
|
||||
# ws = offset + i;
|
||||
# in
|
||||
# ''
|
||||
# hl.workspace_rule({ workspace = ${toString ws}, monitor = "${name}", default_name = "${toString i}" })
|
||||
# ''
|
||||
# ) (lib.range 1 10)
|
||||
# ) (lib.attrsToList config.hardware.monitors)
|
||||
# );
|
||||
# transformMap = {
|
||||
# "none" = {
|
||||
# normal = 0;
|
||||
# flipped = 4;
|
||||
# };
|
||||
# "90" = {
|
||||
# normal = 1;
|
||||
# flipped = 5;
|
||||
# };
|
||||
# "180" = {
|
||||
# normal = 2;
|
||||
# flipped = 6;
|
||||
# };
|
||||
# "270" = {
|
||||
# normal = 3;
|
||||
# flipped = 7;
|
||||
# };
|
||||
# };
|
||||
#
|
||||
# monitorTransform =
|
||||
# m:
|
||||
# let
|
||||
# t = transformMap.${m.rotation};
|
||||
# in
|
||||
# if m.flipped then t.flipped else t.normal;
|
||||
#
|
||||
# monitorString = name: m: ''
|
||||
# hl.monitor({
|
||||
# output = "${name}",
|
||||
# mode = "${m.mode}",
|
||||
# position = "${m.position}",
|
||||
# transform = ${toString (monitorTransform m)},
|
||||
# })
|
||||
# '';
|
||||
#
|
||||
# monitorSettings = lib.mapAttrsToList monitorString config.hardware.monitors;
|
||||
# in
|
||||
# lib.concatStringsSep "\n" (workspaceSettings ++ monitorSettings);
|
||||
# };
|
||||
# };
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
inherit (import ./electron.nix) electronDesktopEntry;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
# Adds extra arguments to avoid flickering under wayland.
|
||||
electronDesktopEntry =
|
||||
desktop:
|
||||
desktop
|
||||
// {
|
||||
exec = "${desktop.exec} --enable-features=UseOzonePlatform --ozone-platform=wayland --disable-gpu";
|
||||
};
|
||||
}
|
||||
@@ -1,62 +1,35 @@
|
||||
gitea:
|
||||
db_password: ENC[AES256_GCM,data:12FYMsc8HdTMdPegoPLCidaHMMU=,iv:Uat0g7Nvota1yvj6InIAo7Dzv3cBtVVzlRa1d09gx1s=,tag:sFavpAHW0k/Fv1uzPVuGcA==,type:str]
|
||||
registration_token: ENC[AES256_GCM,data:zYfFATOuqACrGUyt6xPhiisz293uomKc6BLPKz8I+MFFBrBdzT9FqA==,iv:gyp2WsUHMMrNBmssWGPLSJmZqlAtopc6HeAtX9+oCXs=,tag:mLEPTapn7OM3bm5c9TKB0A==,type:str]
|
||||
gitea_db_password: ENC[AES256_GCM,data:G2YqiDk0msBRjUJkoPxWmayQ9dI=,iv:FsojIJIi61K7rD2VULDgIx6uSYX3iDiA6W744HlgHl0=,tag:BlmsM7LZHnBCKtfuqlhoKA==,type:str]
|
||||
bookstack_app_key: ENC[AES256_GCM,data:N79JVlQSoVCXOsIHCxd19HFm6LkrYyXQu/xWenEdUlQWqwZEi3PuHXG7fQgvzQY4KI7S,iv:cd2l2eOv+wAJ5sih3YhHgQTdy1qrvaIsoHcywOnHuYM=,tag:5QvCHlQX8wUz3tI2NXl+8A==,type:str]
|
||||
bookstack_db: ENC[AES256_GCM,data:m8fGgAfmJu1rEaxmTVH4FfBhyiU=,iv:OnBT/6sp9zmcJ1+kBmdmvaE630hifxBpvKnu3XrVXcE=,tag:SSVQcYkAymlbFOnf0MB6KA==,type:str]
|
||||
mariadb_root_password: ENC[AES256_GCM,data:p965ZhFQqqX+Ub1yhgklVYlBH6A=,iv:qC5WwTvZGvlbAkYiv35xHizMYAnP0V0Vw79EkvL32wQ=,tag:gOJQvHeOC9turFKOMQ9DNg==,type:str]
|
||||
openproject:
|
||||
secret-key-base: ENC[AES256_GCM,data:luTuUtxL/SGx6O10y9cRiAzJHw==,iv:8qVJm+obsHr9eV0h+jdpsreeFGxEM+UFZHHiIUUPs6w=,tag:+zpjhKoIiNNSSYxe1QkQ7Q==,type:str]
|
||||
focalboard:
|
||||
database: ENC[AES256_GCM,data:GDxYdkVV+tl3qHxWMMoetmMnLnY=,iv:JujgNPyUEHCmD/yW3UKCTj9GTk9a7EkvUiyFLF4sF8A=,tag:46YZ7AthpiiaX69aN9a3Bg==,type:str]
|
||||
offen:
|
||||
secret: ENC[AES256_GCM,data:sH2siPc/QH1O2M7ZlJwqhqlHRIeLIG9r,iv:eD29ALx2ji0rm1t9j6RulTZT3f6VLK7dxpPOze3qDKA=,tag:zqJTgT2UeA/ecBS4VremUw==,type:str]
|
||||
smtp-token: ENC[AES256_GCM,data:ZTfe65g3JykPvG2l0AN8UQ==,iv:GTruGo/vcP+imfJyqB3NX9ic8dz5jvTEh6SF+OeqMDM=,tag:kgwd59pG/WUt8OAaVzi39Q==,type:str]
|
||||
traefik:
|
||||
oauth2-client-secret: ENC[AES256_GCM,data:p7/6OsN2ytBj8mQiK0YL7J6NYLtMHOXIIs/6+bIDpsU=,iv:k6jLZifJEFLYKSFMkyn/kA7iBE+EFB8O/3/3fyTh1SY=,tag:6s49O2+tdlZoXyAGEamuMQ==,type:str]
|
||||
oauth2-plugin-secret: ENC[AES256_GCM,data:sArqwKHAdW35o5kD7DGfXSYCXFUXqvKQdoVnXutsNLw=,iv:qWf597QS3BqkVQkeAb99HbpDB0kUhdD+qKdpUPZEB0o=,tag:vXnb93npaklItWkMZ+/M9Q==,type:str]
|
||||
protonvpn:
|
||||
private_key: ENC[AES256_GCM,data:41pfbR1klj1F24v3HlCCA4ofW2sCEnyE5TH8iX4Ug8D+kmwstTaj5RG2Zz8=,iv:P6XyQnDVoOmdkP8ilBR9DyfqPZA6GsQ6VUwY/tSGhx4=,tag:Bzgdv29lbk/gYlADPZMGVA==,type:str]
|
||||
deploy-key:
|
||||
mcp: ENC[AES256_GCM,data:eQcX8xdz5qZ6nU8ISOvZo+ZtP4Z/ePd+/ZZReX1BKvTUqGQPPFxConbLMwFzvzpD6xAUbA1MLkcR/bT98QbNx6LJYlhbofuDUg2DI79RB0fcrAcj/wUV0YPhmgofUdYYDaimH5A2PSvtmKfB3CtKKuA5HNeLymoXeLEpFzbckkGhzPee/CHiUmxayogp6za6btsDJsiT8hdHbrzyD2S6fhMJrzX+PlRzT32M/6eaFuFWE8EUO1gbkRlNfKPXw/EM2GXWJfR4qXfN2YKIKigqrtlAAoxnrUbp5EBrn/hGHS2ZYZXeRUFr3avFjcI0bLX423PWRHAylfQCPxgYVEtbcRv11CAFmq4rfFl0ZdvnAKbTLNmWcrQNijBATZPaAdQzgKPDHs8pwPUFR9Tcg8pZNbzw0mK9kPolniAOL2PBKUHv6LP/uEkB1E6Pxc7yms0kGpeJyo7hrFVOiVAckCey+SI9dpbJMSB3md070I1xk6Ik7PywrWh2QDeUtOU1U28UkYgnJ/9MJelWsNlUX9SR,iv:oCNeanaV/7UZ3dhmq4ZmJUZ5hb61AnHpHCfskM2Jsm8=,tag:F2uJKN5beM/rfiBMSyUP7w==,type:str]
|
||||
matrix:
|
||||
syncv3:
|
||||
db-password: ENC[AES256_GCM,data:N/IO0k/2BZpmaDTbKZmSgZNzmdk=,iv:p0jGjJ9mTCh5FPM/Oe1vxusYvlyg14UeggE5ynpDVL8=,tag:tZbddwxJf6wSH6L1QRUQVg==,type:str]
|
||||
secret: ENC[AES256_GCM,data:KZjYxjUxGgkY1I5jGF7XMEhkHK+khDaQzxugoKxpLsROmVs722tFfbUAxhp71llam55gy9+eUWGxIPlmvOySlw==,iv:OoThGcT08Z11kpnAMQ7w59wj5JheNFGEk1jfFENsmy0=,tag:8EeKT7dh2/a52Amf6LsL1w==,type:str]
|
||||
blazestar-registration-token: ENC[AES256_GCM,data:TB3bR+E4H4c2l9pRcEOAZr35+vBVaJUcuCs9K0Pjd0aW+M35x5LgZ8+F99Y=,iv:e28sie6LSI5UX41BPb+yN+3n+Yw9Ssfsqe4zppwbPkU=,tag:cQPgZcRFbYSiZnmPVtZxHg==,type:str]
|
||||
tandoor:
|
||||
secret_key: ENC[AES256_GCM,data:nl7S2fS1wENrT5k2iZfLEAGc99lCUktgwR5L5KklF69BNVKQkW1rUgb3aIv50VpXZa+3OxV/vdPmG9NhKMy96I5+Dno=,iv:FFyGQBARz0B5zrONZELzUMsOIn8TWrDNTKGsAHPlS7w=,tag:/c4MnDfLXQpBZDqVxZ0DTg==,type:str]
|
||||
immich:
|
||||
database: ENC[AES256_GCM,data:1fjOQsLZcq/T+r+AkzomWwCQWw==,iv:c4pn2rC+3xkxLJ7uAdhnTE6zVTRQkfuKK3tjUyDhfAw=,tag:kvk7DOv6X/+RDxfPxVak7w==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1dstsz5g4qthwt2sssu5wp787ku7rnfqm02mqaefsaueswhvqzpmsyft4p4
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVZnYrVnR1MlBjdzFpQnVi
|
||||
RXFUcEN2N0Zoc2ZUUnprdXc0aElFaXU5c1VBCkxxcGd4QUhOaTl4K0paOTZ3d2Ez
|
||||
Vks4blZLUVZPaklhQlE3WWhVelRFUEkKLS0tIGs2dU44NFdOVm41QXVJbHNkQTVo
|
||||
b2NVRnVFNmF6a2hjRE9OOUxVMGpjSWcKA6Do+oddwMjc2XNJUCeGXY985gJZ4f2v
|
||||
Dyo0/Oyuwz1jFMrjLmnmnmtyn079mT9wsm28KlaEEvzDIxOBnLjx6A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKeGhvQWp6WWx6N1JDdm1J
|
||||
UWlWZTV5ellMd2ZIRWpkRnJDT2s4UVZJMEM4Cll2MnVNTnFWYit2bHpCVzcwbysy
|
||||
NkxtMUZFcDJnb3Z1TmlTWDJLNVJ4cnMKLS0tIHdqVXB1U2xVdEtlY3BsemFIcXlC
|
||||
OHlxaytJTWlNSFRCd2dDaFVsUU1CbUkKp7J+mDnGFS9upV6QWi40ptG85+UZ5y1G
|
||||
9ic/sQEMHQe9VeAutVz1GPYWbF3Vt5iawXmtVxN+zx/bLAYGglv5yg==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiL3FoUWN1NWlDQTAvRkFM
|
||||
TkdCMWVXYThIYVZFSlVEVmxUb1JuQmpESWtrClFlTVlHdGhndFJjUWxUMVFybGtn
|
||||
bEpJNkFSVnpueXlvR0NkbU90RkZoTzAKLS0tIHdTTnRteWRNbW9MVmdKSVJLeWxB
|
||||
Zkpxc1lLNVFSUFA2NTJUS0UrOXJCWXMKOuZmbFBdjPIcIUUWHHfGl8TD+HIRa9Hj
|
||||
Eykvc7Iv5zl61kuJRorE7DWWS1I2C586c+MZtNo6GPQxUasxWRRgJQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkM0RRaFhGKytkSjNMU3cy
|
||||
d1dlcms4TVMzU2xsSHBqcDJWQTdCU1dZcERJCktHRVZiWkZrbzk4QXRNSmpyY25X
|
||||
ZUdOS2pSOVpITExpVVFyc1A3QTBDTGsKLS0tIDM4NFd1eWtZSnR4d0tLUnRFYmJW
|
||||
QlE3cFYxUXNVam1aMlJEVTRGV2xsN1kKXMeSXiEdXyb6c+dcxX3G/Q+s78lfi90g
|
||||
dvKJPDYvGb/8JXSkZNkLlWvHEVnsAJ1mJFb1idenYzeQvJlsX07rYA==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZck5tK3p6blhxZWp5YkNF
|
||||
b3lnMWI1dHBnQzlDOG05c0YyZlZDTzA5V2pvCis3N1BhNXlmamRFci9wWTBuRWFv
|
||||
cC9kdWV3RnpFWTFVRVEwaTVWQVdnZE0KLS0tIEhOTzExRzRLaGdKOTRwRmNXcW5P
|
||||
by9aNFY4dXNxaWxnTXFTQS9reHhuQWMKh5rZ93nFtBV9EpFVRp+E+GXZ6xzVy2Jw
|
||||
vFh4deGcAb60q4odSaeWfk1Dr7L9Ua69oK9omjbCNUt+P7Kwlfca7Q==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-02-25T00:28:13Z"
|
||||
mac: ENC[AES256_GCM,data:hDmqObrtfoVkQqz8JPkqlyXMbiuyBophjdZNLvTFrZw3pAVNCuzsH4zxFBOaxJttkzLc65DWDHDeEIBY5YZam1GLFFXUQ5E3Dxno7hnyzOoM2ipgDTOacI0gbKJAWgGUF3LNDdqVoREA9LC91LoNUJoNmzpTSFtuLb7ORuwCrH4=,iv:8+W3n1Cr6woEiPU9ECaMYM64HNmFHr2AIw6UohCJi00=,tag:7drkZiPAUHaEx5PagXA9JQ==,type:str]
|
||||
lastmodified: "2025-04-03T19:04:17Z"
|
||||
mac: ENC[AES256_GCM,data:DEUuXrCl3OXJ9NbfLoxHIND5+m7enHNDbuLE2jS8nvZCpKm83YoXwp0RhIFA725wJnBej26HLkovCi7V/4s5NrrfT9sPHGNBMSHB0AAcwu3Dmo6G2PBKvAWZTxXmiIXGx8vSvWNbLrp3vTV8jjTpfbuMvOiuxayKfn6esKI9T2o=,iv:zUfbL753Uvzg6WW4kwI8swmpWHIQ/IpCyYSsLptVDG4=,tag:XZy8jNZYYcqspd6zptH3pQ==,type:str]
|
||||
pgp: []
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
version: 3.9.4
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
webhook:
|
||||
deploy-key: ENC[AES256_GCM,data:Gd+cCNmWI/SCab8dnXnWxXFTT7EBAi9LTJVLVF/+ouCn7dI5LE0Ndwq8KVadNEbDPE3LFXAgylpzRIJawWd5saAXPAw5HtrcBgGZDN9ehebAPWNzrGpy4pVgwak6ByQ04Y13PaBK9vG8OR3wG8yQqcZLrdk5TWdYPZ8Q2mdcl3hgItEJMBuOeYMBFiMyBdvbYPQixi9dF21owBjHQr5oZjWzDAS3V+X46Qgq5LYLr74BSYpBQzs/yEOi9CV4H39hdYmFyyPzgSiJljnH2E56iahScQfuQuwqHHdtHGmLYz9CxnHnUGvdzqC8PCu8T8zUuq8qwtbF6+UVISYwhjWmNLq7zUTabLhFjafqQcqdd9PcMMoNhSNQsTVfM0vYrpdfiot3u5AD7HGrORY1WWE71i8CQ7ETO28gsfJB8fWX7s+/FNFNau6fcMw1TCkt+qhnon5zS/OwmFG4596vCTyQ0CVCnHeQDiaqdexJVrVS7w1gROrI266fBPLH0yaSri/ps72A,iv:itchCa14rgALz5Gurm9dh+nWvz0pGi0EFtUlF+Jh3pU=,tag:ucrpJbZmPf9z5x5bHUXnRQ==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1dstsz5g4qthwt2sssu5wp787ku7rnfqm02mqaefsaueswhvqzpmsyft4p4
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2ellCLzVCdmFtN0grU3FO
|
||||
Y3BEOW53ejVZZjlYWFNmOG4yUHB5MUV2UUhzCnZ6UTQ2VXVXZFp4MzgzRE1xdGJk
|
||||
Z0VrTytJeXdQYzFCbkFHUWFVSXA5ZjAKLS0tIEo4UjJvMGlxcjdEcFBhYXNlMEli
|
||||
MysyWkdHZ09lV29mMnJoUnRTNVU4bXMKSkL3VBnBTqrLpG3fuiDTCPNZTFWZbJEW
|
||||
VLwB6g/K3b573MgfXGCCPs9nwdDurqpz0zxB4pEBl0N6fU2CwqAxqQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwWDJZQ2ZESkltQjFHRHpI
|
||||
cXU0WFo1aFJrT2VTNlFTY2s5T0gxSWRoa0F3Ck9tVnFtZ3c4T0tWQTNhYXRrU3Ri
|
||||
dFRrcWp3VnRPRDc5Y3JZZ1U1SDNSbXMKLS0tIFFqMUdNU3VFODhMdmJZN0ZuZGgz
|
||||
Z2JFS25iM3YvaVh0L3JkRk5DODZwZzgKg8C2kboc7EojVva+8KWW+pVhSbovwHp9
|
||||
noZ68vZ8NxsBP3CNFBBN1xKT7gQduShUcmSQUQizZ6fxtxO+GLy4Pg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-05-18T22:16:11Z"
|
||||
mac: ENC[AES256_GCM,data:+/cn2b06HsQ23UL4YyTa51eepBelypcfBCVrG9a6HWhuX0KMpi9bn55IuZ6VbyN2uGc5+yCJcQBtAPm4+Mdi9UdGAWoePYIvQwu6ct12xIOLBF4P7eDRwjlWykANF9/jWFoPfd/hu+LiM2Ow09RTZTnExgAjYiCrq7YJRTrjIfU=,iv:ODluo/RXmSu7PzzXS/ZnFNMzUOjcrCpkzHoAviCNDUU=,tag:2LW9hIP6dq23/coQbTLOww==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.12.1
|
||||
@@ -1,4 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
users.users.drew.extraGroups = [ "adbusers" ];
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.appimage = {
|
||||
enable = true;
|
||||
binfmt = true;
|
||||
package = pkgs.appimage-run.override {
|
||||
extraPkgs = pkgs: [
|
||||
pkgs.icu
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
# RealtimeKit hands out realtime scheduling priority to user processes on
|
||||
# demand, e.g. audio
|
||||
security.rtkit.enable = true;
|
||||
|
||||
# Enable sound with pipewire.
|
||||
services.pulseaudio = {
|
||||
enable = false;
|
||||
daemon.config = {
|
||||
exit-idle-time = -1;
|
||||
};
|
||||
};
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
# If you want to use JACK applications, uncomment this
|
||||
#jack.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation = {
|
||||
docker = {
|
||||
enable = true;
|
||||
# rootless = {
|
||||
# enable = true;
|
||||
# setSocketVariable = true;
|
||||
# };
|
||||
};
|
||||
|
||||
# Do not use Podman in Wayland/Hyperland. It will crash the session. Very annoying.
|
||||
# podman.enable = true;
|
||||
};
|
||||
|
||||
hardware.nvidia-container-toolkit.enable = true;
|
||||
|
||||
home-manager.users.drew =
|
||||
{ ... }:
|
||||
{
|
||||
# Add the path to the docker socket to the environment.
|
||||
programs.zsh.envExtra = ''
|
||||
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
|
||||
'';
|
||||
};
|
||||
|
||||
# add me to the docker group so I can access it.
|
||||
users.users.drew.extraGroups = [ "docker" ];
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.flatpak.enable = true;
|
||||
|
||||
systemd.services.flatpak-repo = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.flatpak ];
|
||||
script = ''
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
_: {
|
||||
# Automatic
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
{ config, lib, ... }:
|
||||
{
|
||||
options =
|
||||
with lib;
|
||||
with types;
|
||||
{
|
||||
graphics = {
|
||||
enable = mkEnableOption "graphics support";
|
||||
driverChannel = mkOption {
|
||||
type = str;
|
||||
# Default to production because I often want new features, but I don't want bleeding edge.
|
||||
default = "production";
|
||||
description = "Driver channel to use (in order of oldest to newest): stable, beta, latest";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.graphics.enable {
|
||||
# Graphics settings
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware.nvidia = {
|
||||
package = config.boot.kernelPackages.nvidiaPackages."${config.graphics.driverChannel}";
|
||||
|
||||
modesetting.enable = true;
|
||||
|
||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
||||
# Enable this if you have graphical corruption issues or application crashes after waking
|
||||
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
||||
# of just the bare essentials.
|
||||
powerManagement.enable = true;
|
||||
|
||||
# Fine-grained power management for PRIME. Turns off GPU when not in use.
|
||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||
# Requires offload to be enabled.
|
||||
# powerManagement.finegrained = false;
|
||||
|
||||
# Use the open-source driver?
|
||||
open = false;
|
||||
|
||||
# Enable the nvidia-settings menu?
|
||||
nvidiaSettings = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
{ ... }:
|
||||
{
|
||||
# Enable the X11 windowing system and a display manager
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
# displayManager.sddm = {
|
||||
# enable = true;
|
||||
# wayland.enable = true;
|
||||
# };
|
||||
|
||||
# Configure keymap in X11
|
||||
xkb = {
|
||||
layout = "us";
|
||||
variant = "";
|
||||
};
|
||||
};
|
||||
# services.displayManager.gdm = {
|
||||
# enable = true;
|
||||
# };
|
||||
services.displayManager.ly = {
|
||||
enable = true;
|
||||
# See https://github.com/S41G0N/ly/blob/master/res/config.ini
|
||||
settings = {
|
||||
animation = "matrix"; # matrix|doom|none
|
||||
bigclock = "en";
|
||||
clear_password = true; # erase the password on failure
|
||||
clock = "%c"; # Show the clock
|
||||
};
|
||||
};
|
||||
|
||||
# Enable Hyprland so it shows up in the menu
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
withUWSM = true;
|
||||
xwayland.enable = true;
|
||||
};
|
||||
|
||||
programs.sway = {
|
||||
enable = true;
|
||||
xwayland.enable = true;
|
||||
wrapperFeatures = {
|
||||
gtk = true;
|
||||
base = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.printing = {
|
||||
enable = true;
|
||||
drivers = [ pkgs.brlaser ];
|
||||
};
|
||||
hardware.printers = {
|
||||
ensurePrinters = [
|
||||
{
|
||||
name = "Brother_HL-L2370DW_series";
|
||||
location = "Home";
|
||||
deviceUri = "dnssd://Brother%20HL-L2370DW%20series._ipp._tcp.local/?uuid=e3248000-80ce-11db-8000-3c2af4f28c38";
|
||||
model = "drv:///brlaser.drv/brl2370d.ppd";
|
||||
ppdOptions = {
|
||||
PageSize = "Letter";
|
||||
};
|
||||
}
|
||||
];
|
||||
ensureDefaultPrinter = "Brother_HL-L2370DW_series";
|
||||
};
|
||||
}
|
||||
@@ -1,127 +0,0 @@
|
||||
{ config, lib, ... }:
|
||||
{
|
||||
options =
|
||||
with lib;
|
||||
with types;
|
||||
{
|
||||
virtualisation.web-containers = {
|
||||
enable = mkEnableOption "web containers";
|
||||
containers = mkOption {
|
||||
type = lazyAttrsOf (submodule {
|
||||
options =
|
||||
let
|
||||
strOpt = mkOption { type = str; };
|
||||
intOpt = mkOption { type = int; };
|
||||
boolOpt = mkOption {
|
||||
type = bool;
|
||||
default = false;
|
||||
};
|
||||
strList = mkOption {
|
||||
type = listOf str;
|
||||
default = [ ];
|
||||
};
|
||||
attrOpt = mkOption {
|
||||
type = attrsOf str;
|
||||
default = { };
|
||||
};
|
||||
in
|
||||
{
|
||||
image = strOpt;
|
||||
hostname = strOpt;
|
||||
port = intOpt;
|
||||
homepageOpts = attrOpt;
|
||||
dependsOn = strList;
|
||||
domain = strOpt;
|
||||
volumes = strList;
|
||||
environment = attrOpt;
|
||||
environmentFiles = strList;
|
||||
public = boolOpt;
|
||||
user = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
};
|
||||
extraOptions = strList;
|
||||
oauthProxy = boolOpt;
|
||||
extraLabels = attrOpt;
|
||||
};
|
||||
});
|
||||
default = { };
|
||||
description = "";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
virtualisation.oci-containers.containers = lib.mkIf config.virtualisation.web-containers.enable (
|
||||
let
|
||||
hostRule = host: domain: "Host(`${host}.${domain}`)";
|
||||
localNet = "192.168.0.0/16";
|
||||
dockerNet = "10.88.0.0/16";
|
||||
localNetRule = "(ClientIP(`${localNet}`) || ClientIP(`${dockerNet}`))";
|
||||
localHostRule = host: domain: "${localNetRule} && ${hostRule host domain}";
|
||||
mkContainer =
|
||||
key:
|
||||
{
|
||||
image,
|
||||
hostname,
|
||||
port,
|
||||
homepageOpts,
|
||||
dependsOn,
|
||||
domain,
|
||||
volumes,
|
||||
environment,
|
||||
environmentFiles,
|
||||
public,
|
||||
user,
|
||||
extraOptions,
|
||||
oauthProxy,
|
||||
extraLabels,
|
||||
}:
|
||||
let
|
||||
fqn = "${hostname}.${domain}";
|
||||
serviceName = builtins.replaceStrings [ "." ] [ "-" ] fqn;
|
||||
routerRule = if public then hostRule hostname domain else localHostRule hostname domain;
|
||||
homepageLabels =
|
||||
if homepageOpts == { } then
|
||||
{ }
|
||||
else
|
||||
{
|
||||
"homepage.group" = "${homepageOpts.group}";
|
||||
"homepage.name" = "${homepageOpts.name}";
|
||||
"homepage.icon" = "${homepageOpts.icon}";
|
||||
"homepage.href" = "https://${fqn}";
|
||||
"homepage.description" = "${homepageOpts.description}";
|
||||
};
|
||||
oauthLabels =
|
||||
if oauthProxy then
|
||||
{ "traefik.http.routers.${serviceName}.middlewares" = "oidc-auth@file"; }
|
||||
else
|
||||
{ };
|
||||
in
|
||||
{
|
||||
inherit
|
||||
image
|
||||
dependsOn
|
||||
volumes
|
||||
environment
|
||||
environmentFiles
|
||||
user
|
||||
extraOptions
|
||||
;
|
||||
autoStart = true;
|
||||
labels = {
|
||||
"traefik.enable" = "true";
|
||||
"traefik.http.routers.${serviceName}.rule" = "${routerRule}";
|
||||
"traefik.http.routers.${serviceName}.service" = "${serviceName}";
|
||||
"traefik.http.routers.${serviceName}.entrypoints" = "web,websecure";
|
||||
"traefik.http.services.${serviceName}.loadbalancer.server.port" = "${toString port}";
|
||||
}
|
||||
// oauthLabels
|
||||
// homepageLabels
|
||||
// extraLabels;
|
||||
};
|
||||
in
|
||||
builtins.mapAttrs mkContainer config.virtualisation.web-containers.containers
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -4,10 +4,15 @@
|
||||
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./qmk.nix
|
||||
];
|
||||
|
||||
networking.hostName = "altair"; # Define your hostname.
|
||||
|
||||
# Configure network proxy if necessary
|
||||
@@ -17,8 +22,7 @@
|
||||
# Enable networking
|
||||
networking.networkmanager.enable = true;
|
||||
# Disable wpa-supplicant to avoid conflicts with network manager.
|
||||
# Appears this is not needed as of 26.05
|
||||
networking.wireless.enable = true;
|
||||
networking.wireless.enable = false;
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "America/Los_Angeles";
|
||||
@@ -38,9 +42,15 @@
|
||||
LC_TIME = "en_US.UTF-8";
|
||||
};
|
||||
|
||||
# Enable Ozone Wayland support in chromium and electron apps.
|
||||
# https://nixos.wiki/wiki/Wayland
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
# Enable the X11 windowing system.
|
||||
# You can disable this if you're only using the Wayland session.
|
||||
services.xserver.enable = true;
|
||||
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
|
||||
theme = "sddm-astronaut-theme";
|
||||
};
|
||||
|
||||
# Unlock the default keyring on login to hyprland
|
||||
security.pam.services.hyprland.enableGnomeKeyring = true;
|
||||
@@ -53,6 +63,21 @@
|
||||
'';
|
||||
};
|
||||
|
||||
# Enable Hyprland so it shows up in the menu
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
withUWSM = true;
|
||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||
portalPackage =
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.xkb = {
|
||||
layout = "us";
|
||||
variant = "";
|
||||
};
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.printing = {
|
||||
enable = true;
|
||||
@@ -89,10 +114,16 @@
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
# services.xserver.libinput.enable = true;
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim
|
||||
sddm-astronaut
|
||||
];
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
|
||||
@@ -1,21 +1,13 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
{ nixpkgs, inputs, ... }:
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
./qmk.nix
|
||||
../../authorized-keys.nix
|
||||
../../features/appimage.nix
|
||||
../../features/audio.nix
|
||||
../../features/gc.nix
|
||||
../../features/gui.nix
|
||||
../../features/container-dev.nix
|
||||
../../features/android-dev.nix
|
||||
../../features/flatpak.nix
|
||||
];
|
||||
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
home-manager.users.drew =
|
||||
{ ... }:
|
||||
{
|
||||
@@ -23,4 +15,14 @@
|
||||
./drew.nix
|
||||
];
|
||||
};
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,82 +1,45 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
monitors = [
|
||||
"DP-1"
|
||||
"DP-2"
|
||||
];
|
||||
in
|
||||
{
|
||||
imports = map (x: ../../../home-manager + x) [
|
||||
"/features/astronomy.nix"
|
||||
"/features/chat.nix"
|
||||
imports =
|
||||
map (x: ../../../home-manager + x) [
|
||||
"/features/development/development.nix"
|
||||
"/features/development/docker.nix"
|
||||
"/features/development/haskell.nix"
|
||||
"/features/development/markdown.nix"
|
||||
"/features/development/typescript.nix"
|
||||
"/features/development/vscode.nix"
|
||||
"/features/eww"
|
||||
"/features/email.nix"
|
||||
"/features/gaming.nix"
|
||||
"/features/image-editing.nix"
|
||||
"/features/linux-desktop.nix"
|
||||
"/features/mounts/mcp-archive.nix"
|
||||
"/features/notes.nix"
|
||||
"/features/3d-printing.nix"
|
||||
"/features/hyprpaper.nix"
|
||||
"/features/eww"
|
||||
]
|
||||
++ [
|
||||
(import ../../../home-manager/features/wallpaper.nix monitors)
|
||||
];
|
||||
|
||||
home = {
|
||||
stateVersion = "24.11";
|
||||
username = "drew";
|
||||
homeDirectory = "/home/drew";
|
||||
home.stateVersion = "24.11";
|
||||
|
||||
# This config file is needed for nix shell to allow unfree programs. I'm not
|
||||
# sure why this isn't a home-manager option.
|
||||
file.".config/nixpkgs/config.nix".text = ''
|
||||
{ allowUnfree = true; }
|
||||
'';
|
||||
home.username = "drew";
|
||||
home.homeDirectory = "/home/drew";
|
||||
|
||||
programs.git = {
|
||||
userName = "Drew Haven";
|
||||
userEmail = "drew.haven@gmail.com";
|
||||
};
|
||||
|
||||
programs.git.settings = {
|
||||
user = {
|
||||
name = "Drew Haven";
|
||||
email = "periodic@blazestar.net";
|
||||
};
|
||||
};
|
||||
|
||||
hardware.monitors = {
|
||||
"DP-2" = {
|
||||
position = "0x0";
|
||||
mode = "3440x1440@164";
|
||||
};
|
||||
"DP-1" = {
|
||||
mode = "2560x1440";
|
||||
position = "-1440x-510";
|
||||
rotation = "90";
|
||||
};
|
||||
};
|
||||
|
||||
programs.eww.widgets = [
|
||||
"primary-statusbar"
|
||||
"secondary-statusbar"
|
||||
home.packages = with pkgs; [
|
||||
# Applications
|
||||
discord
|
||||
signal-desktop
|
||||
obsidian
|
||||
firefox
|
||||
];
|
||||
|
||||
xdg.configFile = {
|
||||
"hypr/altair.lua" = {
|
||||
source = ./hyprland.lua;
|
||||
};
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland.extraConfig = ''
|
||||
require("altair")
|
||||
'';
|
||||
|
||||
# TODO: Still merging these into the LUA config
|
||||
# wayland.windowManager.hyprland.settings = {
|
||||
# exec_once = [
|
||||
# # Set up eww here because it's based on the monitor configuration
|
||||
# "sleep 2 && eww open-many primary-statusbar secondary-statusbar"
|
||||
# # Set DP-2 as the primary monitor, otherwise it defaults to DP-1 because it's first in the list.
|
||||
# "xrandr --output DP-2 --primary"
|
||||
# ];
|
||||
# # windowrule = [
|
||||
# # # Rofi doesn't center properly when I have the two asymetric monitors, so we need hyprland to manage it.
|
||||
# # "match:class Rofi, center on"
|
||||
# # ];
|
||||
# };
|
||||
# Set up eww here because it's based on the monitor configuration
|
||||
# Eww is idempotent, so it's fine to just run it on every reload to make sure things are open
|
||||
wayland.windowManager.hyprland.settings.execr-once = [
|
||||
"eww open-many primary-statusbar secondary-statusbar launcher"
|
||||
];
|
||||
}
|
||||
|
||||
@@ -13,14 +13,10 @@
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
# Bootloader.
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = true;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
initrd = {
|
||||
availableKernelModules = [
|
||||
boot.initrd.availableKernelModules = [
|
||||
"xhci_pci"
|
||||
"ahci"
|
||||
"nvme"
|
||||
@@ -28,19 +24,16 @@
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
kernelModules = [ ];
|
||||
};
|
||||
kernelModules = [ "kvm-intel" ];
|
||||
extraModulePackages = [ ];
|
||||
};
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems = {
|
||||
"/" = {
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/343c0ac5-3973-49b3-964a-6ad90c36b89c";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
"/boot" = {
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/5F99-043D";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
@@ -49,11 +42,10 @@
|
||||
];
|
||||
};
|
||||
|
||||
"/home" = {
|
||||
fileSystems."/home" = {
|
||||
device = "/dev/disk/by-uuid/28f4fb41-9414-4504-a767-c2e8bf5eb2c8";
|
||||
fsType = "ext4";
|
||||
};
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
@@ -66,27 +58,18 @@
|
||||
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware = {
|
||||
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
graphics = {
|
||||
# Graphics settings
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
nvidia = {
|
||||
# Other options include:
|
||||
# stable - Current stable
|
||||
# production - Same as stable
|
||||
# latest - Bleeding edge
|
||||
# beta - latest beta
|
||||
#
|
||||
# See https://nixos.wiki/wiki/Nvidia
|
||||
#
|
||||
# Current versions can be found in https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/os-specific/linux/nvidia-x11/default.nix
|
||||
#
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware.nvidia = {
|
||||
package = config.boot.kernelPackages.nvidiaPackages.beta;
|
||||
|
||||
modesetting.enable = true;
|
||||
|
||||
@@ -107,7 +90,6 @@
|
||||
# Enable the nvidia-settings menu?
|
||||
nvidiaSettings = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Add a udev rule to prevent the mouse from waking the system. Note that it
|
||||
# has two entries depending on whether it's plugged in or not.
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
-- These configs are specifically for Altair
|
||||
-----------------------------------------------------------
|
||||
|
||||
for i = 1, 10 do
|
||||
hl.workspace_rule({ workspace = i, monitor = "DP-1", default_name = tostring(i) })
|
||||
hl.workspace_rule({ workspace = i + 10, monitor = "DP-2", default_name = tostring(i) })
|
||||
end
|
||||
|
||||
hl.monitor({
|
||||
output = "DP-1",
|
||||
mode = "2560x1440",
|
||||
position = "-1440x-510",
|
||||
transform = 1,
|
||||
})
|
||||
|
||||
hl.monitor({
|
||||
output = "DP-2",
|
||||
mode = "3440x1440@164",
|
||||
position = "0x0",
|
||||
transform = 0,
|
||||
})
|
||||
|
||||
local fullscreen_windows = { "^steam_app_\\d+$" }
|
||||
|
||||
for _, class in ipairs(fullscreen_windows) do
|
||||
hl.window_rule({
|
||||
name = "Fullscreen " .. class,
|
||||
match = {
|
||||
class = class,
|
||||
},
|
||||
fullscreen = true,
|
||||
monitor = "DP-2",
|
||||
center = true,
|
||||
})
|
||||
end
|
||||
|
||||
local maximized_windows = { "Slay the Spire" }
|
||||
|
||||
for _, class in ipairs(maximized_windows) do
|
||||
hl.window_rule({
|
||||
name = "Maximize " .. class,
|
||||
match = {
|
||||
class = class,
|
||||
},
|
||||
maximize = true,
|
||||
monitor = "DP-2",
|
||||
center = true,
|
||||
})
|
||||
end
|
||||
-- MIGRATION_WARNING: Window rule conflict for 'monitor 1': 'match:title ^World of Warcraft$' (line 200) vs 'match:title ^Battle.net$' (line 202)
|
||||
-- MIGRATION_WARNING: Window rule conflict for 'monitor 1': 'match:title ^World of Warcraft$' (line 200) vs 'match:title ^Balatro$' (line 204)
|
||||
-- MIGRATION_WARNING: Window rule conflict for 'monitor 1': 'match:title ^World of Warcraft$' (line 200) vs 'match:class steam_app_1091500' (line 206)
|
||||
-- hl.window_rule({
|
||||
-- match = { class = "monitor 1" },
|
||||
-- match:title = "^World of Warcraft$",
|
||||
-- match:title = "^Battle.net$",
|
||||
-- match:title = "^Balatro$",
|
||||
-- match:class = "steam_app_1091500",
|
||||
-- })
|
||||
-- PATTERN: MERGED with line 207
|
||||
-- MIGRATION_WARNING: Window rule conflict for 'fullscreen on': 'match:title ^World of Warcraft$' (line 201) vs 'match:class steam_app_1091500' (line 207)
|
||||
-- hl.window_rule({ match = { class = "fullscreen on" }, match:title = "^World of Warcraft$", match:class = "steam_app_1091500" })
|
||||
-- hl.window_rule({ match = { class = "float on" }, match:title = "^Battle.net$" })
|
||||
-- hl.window_rule({ match = { class = "tile on" }, match:title = "^Balatro$" })
|
||||
@@ -1,10 +1,3 @@
|
||||
# mcp
|
||||
|
||||
Configuration for the MCP server.
|
||||
|
||||
## Sops
|
||||
|
||||
```bash
|
||||
nix-shell -p sops --run "sops secrets/mcp.yaml"
|
||||
```
|
||||
|
||||
Configuration for the MCP server
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user