Compare commits
40 Commits
e1b953dbcb
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7bbb5ea812 | |||
| f177f112ce | |||
| fdae46f7a0 | |||
| c23eba7e66 | |||
| 9d2af374c1 | |||
| 50b2993488 | |||
| 8276c65d0f | |||
| 59de16ea4c | |||
| 9261ce133b | |||
| 7fd462a791 | |||
| e936b9da8f | |||
| e078067a5e | |||
| fc1698a5d9 | |||
| 3d2bb28eec | |||
| 2b33bbca32 | |||
| 8d2fa682b3 | |||
| 32393d5ffe | |||
| 07280e20ea | |||
| a357e7a622 | |||
| 78a9638228 | |||
| 8cb79001d3 | |||
| 4714da7d8f | |||
| f89ec7e0c8 | |||
| 81a79d77c8 | |||
| 518ad143e0 | |||
| f72eb29392 | |||
| 6d278d6340 | |||
| 161246c575 | |||
| 2bd3cb15c8 | |||
| d94dd55591 | |||
| 97cd002bf5 | |||
| 209bb054c4 | |||
| 3c0445b179 | |||
| 68b7915ad2 | |||
| 198726894b | |||
| d91ef1c934 | |||
| 82ac893a92 | |||
| 6674ca40fa | |||
| 8fbfb551f5 | |||
| 0f1e73d015 |
14
.sops.yaml
14
.sops.yaml
@@ -1,9 +1,17 @@
|
|||||||
keys:
|
keys:
|
||||||
- &admin_drew age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
- &drew_mcp age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
||||||
|
- &drew_vega age1dstsz5g4qthwt2sssu5wp787ku7rnfqm02mqaefsaueswhvqzpmsyft4p4
|
||||||
- &server_mcp age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
- &server_mcp age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
||||||
|
- &server_sirius age17q5n3pngyf0dvcg23h7ph8fqcraw0phjzgsra5cynzq4mf7hw3wsarmepw
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: secrets/mcp.yaml
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *admin_drew
|
- *drew_vega
|
||||||
|
- *drew_mcp
|
||||||
|
- *server_mcp
|
||||||
|
- path_regex: secrets/sirius.yaml
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *drew_vega
|
||||||
- *server_mcp
|
- *server_mcp
|
||||||
|
|||||||
575
flake.lock
generated
575
flake.lock
generated
@@ -1,5 +1,81 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"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=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "aquamarine",
|
||||||
|
"rev": "be35f75ac305f430f5f9d89b5f5a4af59ca7567e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "aquamarine",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767039857,
|
||||||
|
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"pre-commit-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709087332,
|
||||||
|
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -7,40 +83,453 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775425411,
|
"lastModified": 1779726825,
|
||||||
"narHash": "sha256-KY6HsebJHEe5nHOWP7ur09mb0drGxYSzE3rQxy62rJo=",
|
"narHash": "sha256-RUkMrREjKDQrA+dA9+xZviGAxM5W1aVdyOr/bSYpHrE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "0d02ec1d0a05f88ef9e74b516842900c41f0f2fe",
|
"rev": "b179bde238977f7d4454fc770b1a727eaf55111c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"ref": "release-25.11",
|
"ref": "release-26.05",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"hyprcursor": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprlang": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"hyprlang"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1776511930,
|
||||||
|
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprcursor",
|
||||||
|
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprcursor",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprgraphics": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1776426399,
|
||||||
|
"narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprgraphics",
|
||||||
|
"rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprgraphics",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland": {
|
||||||
|
"inputs": {
|
||||||
|
"aquamarine": "aquamarine",
|
||||||
|
"hyprcursor": "hyprcursor",
|
||||||
|
"hyprgraphics": "hyprgraphics",
|
||||||
|
"hyprland-guiutils": "hyprland-guiutils",
|
||||||
|
"hyprland-protocols": "hyprland-protocols",
|
||||||
|
"hyprlang": "hyprlang",
|
||||||
|
"hyprutils": "hyprutils",
|
||||||
|
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||||
|
"hyprwire": "hyprwire",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"pre-commit-hooks": "pre-commit-hooks",
|
||||||
|
"systems": "systems",
|
||||||
|
"xdph": "xdph"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1779392427,
|
||||||
|
"narHash": "sha256-0SiD8JBx6cU0KL1XjLMsR/nSZB5XY3uhrNnvfxH0CtY=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"rev": "8b7110cc68662a343b6839f292ac0f44a64c3364",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"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=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprlang": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1777320127,
|
||||||
|
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprlang",
|
||||||
|
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprlang",
|
||||||
|
"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=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprutils",
|
||||||
|
"rev": "a2dbd8a4cc51f7cbe4224732668392bb1aa79df2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprutils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprwayland-scanner": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1777159683,
|
||||||
|
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwayland-scanner",
|
||||||
|
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwayland-scanner",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprwire": {
|
||||||
|
"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",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwire",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775811116,
|
"lastModified": 1778443072,
|
||||||
"narHash": "sha256-t+HZK42pB6N+i5RGbuy7Xluez/VvWbembBdvzsc23Ss=",
|
"narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1779971959,
|
||||||
|
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "54170c54449ea4d6725efd30d719c5e505f1c10e",
|
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-25.11",
|
"ref": "nixos-26.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pre-commit-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprsplit",
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1778507602,
|
||||||
|
"narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixpkgs": "nixpkgs",
|
"hyprsplit": "hyprsplit",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
"sops-nix": "sops-nix"
|
"sops-nix": "sops-nix"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -51,11 +540,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775971308,
|
"lastModified": 1777944972,
|
||||||
"narHash": "sha256-VKp9bhVSm0bT6JWctFy06ocqxGGnWHi1NfoE90IgIcY=",
|
"narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "31ac5fe5d015f76b54058c69fcaebb66a55871a4",
|
"rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -63,6 +552,68 @@
|
|||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689347949,
|
||||||
|
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default-linux",
|
||||||
|
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default-linux",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"rev": "813ea5ca9a1702a9a2d1f5836bc00172ef698968",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
11
flake.nix
11
flake.nix
@@ -2,15 +2,19 @@
|
|||||||
description = "System Configuration";
|
description = "System Configuration";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.11";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-26.05";
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager?ref=release-25.11";
|
url = "github:nix-community/home-manager?ref=release-26.05";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
sops-nix = {
|
sops-nix = {
|
||||||
url = "github:Mic92/sops-nix";
|
url = "github:Mic92/sops-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
hyprsplit = {
|
||||||
|
url = "github:shezdy/hyprsplit";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
@@ -59,6 +63,9 @@
|
|||||||
mcp = mkNixosConfig {
|
mcp = mkNixosConfig {
|
||||||
path = ./system/hosts/mcp;
|
path = ./system/hosts/mcp;
|
||||||
};
|
};
|
||||||
|
sirius-a = mkNixosConfig {
|
||||||
|
path = ./system/hosts/sirius-a;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
features = {
|
features = {
|
||||||
development = import ./home-manager/features/development/development.nix;
|
development = import ./home-manager/features/development/development.nix;
|
||||||
|
|||||||
@@ -11,8 +11,4 @@
|
|||||||
exec = "env ELECTRON_OZONE_PLATFORM_HINT= discord --enable-features=UseOzonePlatform --ozone-platform=wayland --disable-gpu";
|
exec = "env ELECTRON_OZONE_PLATFORM_HINT= discord --enable-features=UseOzonePlatform --ozone-platform=wayland --disable-gpu";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
wayland.windowManager.hyprland.settings.bind = [
|
|
||||||
# Pass Mouse4 through to discord
|
|
||||||
# ", mouse:275, pass, class:^discord$"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ in
|
|||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
bambu-studio-wrapped
|
bambu-studio-wrapped
|
||||||
LycheeSlicer
|
lycheeslicer
|
||||||
orca-slicer
|
orca-slicer
|
||||||
|
|
||||||
blender
|
blender
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
vtsls # Language Server
|
vtsls # Language Server
|
||||||
eslint # Linter
|
eslint # Linter
|
||||||
nodePackages.prettier # Formatter
|
prettier # Formatter
|
||||||
tailwindcss-language-server # Language server for tailwind CSS
|
tailwindcss-language-server # Language server for tailwind CSS
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
programs.vscode = {
|
programs.vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
extensions = with pkgs.vscode-extensions; [
|
profiles.default.extensions = with pkgs.vscode-extensions; [
|
||||||
asvetliakov.vscode-neovim # Use embedded neovim editor
|
asvetliakov.vscode-neovim # Use embedded neovim editor
|
||||||
enkia.tokyo-night # Color theme
|
enkia.tokyo-night # Color theme
|
||||||
eamodio.gitlens # Show git info inline
|
eamodio.gitlens # Show git info inline
|
||||||
|
|||||||
23
home-manager/features/email.nix
Normal file
23
home-manager/features/email.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
_: {
|
||||||
|
# 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;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,15 +1,48 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
{
|
||||||
home.packages = with pkgs; [
|
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
|
# For Noto Sans NF
|
||||||
# 25.05
|
|
||||||
nerd-fonts.noto
|
nerd-fonts.noto
|
||||||
# 24.11
|
|
||||||
# (nerdfonts.override { fonts = [ "NotoSans" ]; })
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
file.".config/eww".source = ./config;
|
||||||
|
};
|
||||||
|
|
||||||
programs.eww = {
|
programs.eww = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configDir = ./config;
|
};
|
||||||
|
|
||||||
|
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" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,25 +108,25 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.windowrulev2 = [
|
# TODO: Merge into config
|
||||||
# Set up full-screen games on monitor 1 (since window 0 is the vertical one.)
|
# wayland.windowManager.hyprland.settings.windowrule = [
|
||||||
"monitor 1,class:^steam_app_\d+$"
|
# # Set up full-screen games on monitor 1 (since window 0 is the vertical one.)
|
||||||
"float,class:^steam_app_\d+$"
|
# # "match:class ^steam_app_\d+$, float"
|
||||||
"monitor 1,fullscreen:1"
|
# "match:class ^steam_app_\d+$, fullscreen 1, monitor 1"
|
||||||
"center,class:^steam_app_\d+$"
|
# "match:class ^steam_app_\d+$, center on"
|
||||||
|
#
|
||||||
# Make sure WoW spawns on the right monitor and that Battlenet floats so it renders correctly
|
# # Make sure WoW spawns on the right monitor and that Battlenet floats so it renders correctly
|
||||||
"monitor 1,title:^World of Warcraft$"
|
# "match:title ^World of Warcraft$, monitor 1"
|
||||||
"fullscreen,title:^World of Warcraft$"
|
# "match:title ^World of Warcraft$, fullscreen on"
|
||||||
"monitor 1,title:^Battle.net$"
|
# "match:title ^Battle.net$, monitor 1"
|
||||||
"float,title:^Battle.net$"
|
# "match:title ^Battle.net$, float on"
|
||||||
|
#
|
||||||
# Make Balatro into a regular window.
|
# # Make Balatro into a regular window.
|
||||||
"monitor 1,title:^Balatro$"
|
# "match:title ^Balatro$, monitor 1"
|
||||||
"tile,title:^Balatro$"
|
# "match:title ^Balatro$, tile on"
|
||||||
|
#
|
||||||
# Load Cyberpunk 2077 on the right monitor.
|
# # Load Cyberpunk 2077 on the right monitor.
|
||||||
"monitor 1,class:steam_app_1091500"
|
# "match:class steam_app_1091500, monitor 1"
|
||||||
"fullscreen,class:steam_app_1091500"
|
# "match:class steam_app_1091500, fullscreen on"
|
||||||
];
|
# ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
{
|
{
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
aliases = {
|
settings = {
|
||||||
|
alias = {
|
||||||
"co" = "checkout";
|
"co" = "checkout";
|
||||||
"s" = "status";
|
"s" = "status";
|
||||||
"b" = "branch";
|
"b" = "branch";
|
||||||
@@ -11,6 +12,9 @@
|
|||||||
"c" = "commit -am";
|
"c" = "commit -am";
|
||||||
"l" = "log --oneline";
|
"l" = "log --oneline";
|
||||||
};
|
};
|
||||||
|
init = {
|
||||||
|
defaultBranch = "main";
|
||||||
|
};
|
||||||
extraConfig = {
|
extraConfig = {
|
||||||
pull = {
|
pull = {
|
||||||
rebase = true;
|
rebase = true;
|
||||||
@@ -18,11 +22,9 @@
|
|||||||
log = {
|
log = {
|
||||||
date = "iso";
|
date = "iso";
|
||||||
};
|
};
|
||||||
init = {
|
|
||||||
defaultBranch = "main";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
# Enable the delta diff pager.
|
# Enable the delta diff pager.
|
||||||
delta.enable = true;
|
delta.enable = true;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
7
home-manager/features/hypr/config/.luarc.json
Normal file
7
home-manager/features/hypr/config/.luarc.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"workspace": {
|
||||||
|
"library": [
|
||||||
|
"/nix/store/ndq4688w4wjlip63msnlxld8zwcwr66l-hyprland-0.55.2/share/hypr/stubs"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
124
home-manager/features/hypr/config/animation.lua
Normal file
124
home-manager/features/hypr/config/animation.lua
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
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",
|
||||||
|
})
|
||||||
5
home-manager/features/hypr/config/autostart.lua
Normal file
5
home-manager/features/hypr/config/autostart.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
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)
|
||||||
99
home-manager/features/hypr/config/binds.lua
Normal file
99
home-manager/features/hypr/config/binds.lua
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
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 }
|
||||||
91
home-manager/features/hypr/config/hyprland.lua
Normal file
91
home-manager/features/hypr/config/hyprland.lua
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
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")
|
||||||
20
home-manager/features/hypr/config/windows.lua
Normal file
20
home-manager/features/hypr/config/windows.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
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",
|
||||||
|
})
|
||||||
126
home-manager/features/hypr/hyprland.nix
Normal file
126
home-manager/features/hypr/hyprland.nix
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
{
|
||||||
|
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"
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./swaylock.nix
|
|
||||||
./hypr/hypridle.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
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;
|
|
||||||
plugins = [
|
|
||||||
# https://github.com/outfoxxed/hy3
|
|
||||||
pkgs.hyprlandPlugins.hy3
|
|
||||||
# https://github.com/shezdy/hyprsplit
|
|
||||||
pkgs.hyprlandPlugins.hyprsplit
|
|
||||||
];
|
|
||||||
|
|
||||||
# Disable systemd because it conflicts with UWSM
|
|
||||||
systemd.enable = false;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
monitor = [
|
|
||||||
"DP-2, 3440x1440@164.90, 0x0, 1"
|
|
||||||
"DP-1, 2560x1440, -1440x-510, 1, transform, 1"
|
|
||||||
];
|
|
||||||
|
|
||||||
"$terminal" = "foot";
|
|
||||||
"$menu" = "rofi -show combi -combi-modes drun,ssh,run -theme ~/.config/rofi/launcher/style.rasi";
|
|
||||||
"$browser" = "firefox --new-window";
|
|
||||||
|
|
||||||
exec-once = [
|
|
||||||
"nm-applet"
|
|
||||||
"sleep 2 && hyprpm reload -n"
|
|
||||||
"systemctl --user start hyprpolkitagent"
|
|
||||||
|
|
||||||
"gsettings set org.gnome.desktop.interface color-scheme \"prefer-dark\""
|
|
||||||
"gsettings set org.gnome.desktop.interface gtk-theme \"Adwaita-dark\""
|
|
||||||
# Hyprland doesn't paste into Firefox or Wine apps. This program is a workaround.
|
|
||||||
# See https://github.com/hyprwm/Hyprland/issues/2319
|
|
||||||
# -t text = Only handle text
|
|
||||||
# -w xclip -selection clipboard = Watch for events and invoke xclip
|
|
||||||
"wl-paste -t text -w xclip -selection clipboard"
|
|
||||||
];
|
|
||||||
|
|
||||||
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 = true;
|
|
||||||
|
|
||||||
# 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
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprsplit = {
|
|
||||||
num_workspaces = 10;
|
|
||||||
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 + SHIFT, S, exec, hyprshot -m region --clipboard-only"
|
|
||||||
"$mainMod + CTRL + SHIFT, S, exec, hyprshot -m region -o ~/Pictures"
|
|
||||||
"$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"
|
|
||||||
"$mainMod + CTRL, left, resizeactive, -20 0"
|
|
||||||
"$mainMod + CTRL, right, resizeactive, 20 0"
|
|
||||||
"$mainMod + CTRL, down, resizeactive, 0 20"
|
|
||||||
"$mainMod + CTRL, up, resizeactive, 0 -20"
|
|
||||||
|
|
||||||
# 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, A, hy3:changefocus, raise"
|
|
||||||
"$mainMod, Z, hy3:changefocus, lower"
|
|
||||||
"$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, r, focusmonitor, l"
|
|
||||||
"$mainMod, s, focusmonitor, r"
|
|
||||||
"$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]
|
|
||||||
# Note: using hy3:movetoworkspace instead of split:movetoworkspace.
|
|
||||||
# The plugins are compatible.
|
|
||||||
"$mainMod SHIFT, 1, hy3:movetoworkspace, 1, follow"
|
|
||||||
"$mainMod SHIFT, 2, hy3:movetoworkspace, 2, follow"
|
|
||||||
"$mainMod SHIFT, 3, hy3:movetoworkspace, 3, follow"
|
|
||||||
"$mainMod SHIFT, 4, hy3:movetoworkspace, 4, follow"
|
|
||||||
"$mainMod SHIFT, 5, hy3:movetoworkspace, 5, follow"
|
|
||||||
"$mainMod SHIFT, 6, hy3:movetoworkspace, 6, follow"
|
|
||||||
"$mainMod SHIFT, 7, hy3:movetoworkspace, 7, follow"
|
|
||||||
"$mainMod SHIFT, 8, hy3:movetoworkspace, 8, follow"
|
|
||||||
"$mainMod SHIFT, 9, hy3:movetoworkspace, 9, follow"
|
|
||||||
"$mainMod SHIFT, 0, hy3: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, movewindow, mon:+1"
|
|
||||||
];
|
|
||||||
|
|
||||||
# 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:()"
|
|
||||||
];
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
|
||||||
workspace = [
|
|
||||||
"1, defaultName:L1"
|
|
||||||
"2, defaultName:L2"
|
|
||||||
"3, defaultName:L3"
|
|
||||||
"4, defaultName:L4"
|
|
||||||
"5, defaultName:L5"
|
|
||||||
"6, defaultName:L6"
|
|
||||||
"7, defaultName:L7"
|
|
||||||
"8, defaultName:L8"
|
|
||||||
"9, defaultName:L9"
|
|
||||||
"10, defaultName:L10"
|
|
||||||
"11, defaultName:R1"
|
|
||||||
"12, defaultName:R2"
|
|
||||||
"13, defaultName:R3"
|
|
||||||
"14, defaultName:R4"
|
|
||||||
"15, defaultName:R5"
|
|
||||||
"16, defaultName:R6"
|
|
||||||
"17, defaultName:R7"
|
|
||||||
"18, defaultName:R8"
|
|
||||||
"19, defaultName:R9"
|
|
||||||
"20, defaultName:R10"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
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"
|
|
||||||
'';
|
|
||||||
|
|
||||||
}
|
|
||||||
17
home-manager/features/hyprpaper.nix
Normal file
17
home-manager/features/hyprpaper.nix
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{ 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,19 +1,28 @@
|
|||||||
{ pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
browser = "firefox";
|
||||||
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./audio.nix
|
./audio.nix
|
||||||
./hyprland.nix
|
./hypr/hyprland.nix
|
||||||
./rofi/rofi.nix
|
./rofi/rofi.nix
|
||||||
./sway.nix
|
./sway.nix
|
||||||
../apps/element.nix
|
../apps/element.nix
|
||||||
../apps/discord.nix
|
../apps/discord.nix
|
||||||
./terminal.nix
|
./terminal.nix
|
||||||
|
../options/monitors.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
# Desktop Applications
|
# Desktop Applications
|
||||||
gimp3
|
gimp3
|
||||||
|
vlc
|
||||||
|
|
||||||
# Common utilities
|
# Common utilities
|
||||||
feh
|
feh
|
||||||
@@ -28,14 +37,17 @@
|
|||||||
playerctl # for universal play/pause etc
|
playerctl # for universal play/pause etc
|
||||||
wirelesstools
|
wirelesstools
|
||||||
waypaper # Wallpaper switcher
|
waypaper # Wallpaper switcher
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
pointerCursor = {
|
pointerCursor = {
|
||||||
enable = true;
|
enable = true;
|
||||||
gtk.enable = true;
|
gtk.enable = true;
|
||||||
name = "phinger-cursors";
|
|
||||||
size = 16;
|
size = 16;
|
||||||
package = pkgs.phinger-cursors;
|
package = pkgs.bibata-cursors;
|
||||||
|
name = "Bibata-Modern-Classic";
|
||||||
|
# package = pkgs.phinger-cursors;
|
||||||
|
# name = "phinger-cursors";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Hint for electron apps to use wayland
|
# Hint for electron apps to use wayland
|
||||||
@@ -49,8 +61,10 @@
|
|||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
# browsers
|
# browsers
|
||||||
firefox.enable = true;
|
firefox = {
|
||||||
librewolf.enable = true;
|
enable = true;
|
||||||
|
configPath = "${config.xdg.configHome}/mozilla/firefox";
|
||||||
|
};
|
||||||
chromium.enable = true;
|
chromium.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -64,10 +78,14 @@
|
|||||||
gtk3.extraConfig = {
|
gtk3.extraConfig = {
|
||||||
gtk-application-prefer-dark-theme = true;
|
gtk-application-prefer-dark-theme = true;
|
||||||
};
|
};
|
||||||
gtk4.extraConfig = {
|
gtk4 = {
|
||||||
|
# Don't use GTK4 themes. See https://stopthemingmy.app/
|
||||||
|
theme = null;
|
||||||
|
extraConfig = {
|
||||||
gtk-application-prefer-dark-theme = true;
|
gtk-application-prefer-dark-theme = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# This is where the real magic happens to tell the applications to prefer
|
# This is where the real magic happens to tell the applications to prefer
|
||||||
# dark mode. For example, Element reads from this setting.
|
# dark mode. For example, Element reads from this setting.
|
||||||
@@ -88,13 +106,13 @@
|
|||||||
xdg.mimeApps = {
|
xdg.mimeApps = {
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultApplications = {
|
defaultApplications = {
|
||||||
"text/html" = [ "firefox.desktop" ];
|
"text/html" = [ "${browser}.desktop" ];
|
||||||
"default-web-browser" = [ "firefox.desktop" ];
|
"default-web-browser" = [ "${browser}.desktop" ];
|
||||||
"x-scheme-handler/http" = [ "firefox.desktop" ];
|
"x-scheme-handler/http" = [ "${browser}.desktop" ];
|
||||||
"x-scheme-handler/https" = [ "firefox.desktop" ];
|
"x-scheme-handler/https" = [ "${browser}.desktop" ];
|
||||||
"x-scheme-handler/about" = [ "firefox.desktop" ];
|
"x-scheme-handler/about" = [ "${browser}.desktop" ];
|
||||||
"x-scheme-handler/unknown" = [ "firefox.desktop" ];
|
"x-scheme-handler/unknown" = [ "${browser}.desktop" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
home.sessionVariables.DEFAULT_BROWSER = "${pkgs.firefox}/bin/firefox";
|
home.sessionVariables.DEFAULT_BROWSER = "${pkgs."${browser}"}/bin/${browser}";
|
||||||
}
|
}
|
||||||
|
|||||||
50
home-manager/features/mounts/mcp-archive.nix
Normal file
50
home-manager/features/mounts/mcp-archive.nix
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
{ 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" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,7 +11,8 @@
|
|||||||
"lazyvim.plugins.extras.lang.rust",
|
"lazyvim.plugins.extras.lang.rust",
|
||||||
"lazyvim.plugins.extras.lang.tailwind",
|
"lazyvim.plugins.extras.lang.tailwind",
|
||||||
"lazyvim.plugins.extras.lang.toml",
|
"lazyvim.plugins.extras.lang.toml",
|
||||||
"lazyvim.plugins.extras.lang.typescript"
|
"lazyvim.plugins.extras.lang.typescript",
|
||||||
|
"lazyvim.plugins.extras.ai.sidekick"
|
||||||
],
|
],
|
||||||
"install_version": 8,
|
"install_version": 8,
|
||||||
"version": 8
|
"version": 8
|
||||||
|
|||||||
@@ -4,13 +4,20 @@ return {
|
|||||||
opts = {
|
opts = {
|
||||||
servers = {
|
servers = {
|
||||||
-- Lua
|
-- Lua
|
||||||
lua_ls = {},
|
lua_ls = {
|
||||||
|
root_markers = {
|
||||||
|
".luarc.json",
|
||||||
|
".git",
|
||||||
|
},
|
||||||
|
},
|
||||||
-- Nix
|
-- Nix
|
||||||
nil_ls = {},
|
nil_ls = {},
|
||||||
-- Typescript
|
-- Typescript
|
||||||
vtsls = {},
|
vtsls = {},
|
||||||
-- Haskell
|
-- Haskell
|
||||||
hls = {},
|
hls = {},
|
||||||
|
-- Copilot
|
||||||
|
copilot = { enabled = true },
|
||||||
},
|
},
|
||||||
codelens = {
|
codelens = {
|
||||||
enable = true,
|
enable = true,
|
||||||
|
|||||||
@@ -32,18 +32,13 @@ return {
|
|||||||
time_format = "%H:%M",
|
time_format = "%H:%M",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
checkbox = {
|
||||||
|
order = { " ", "x", "/", ">", "~", "!" },
|
||||||
|
},
|
||||||
|
|
||||||
ui = {
|
ui = {
|
||||||
-- Disable the UI features and let render-markdown.nvim handle it.
|
-- Disable the UI features and let render-markdown.nvim handle it.
|
||||||
enable = false,
|
enable = false,
|
||||||
-- Even with UI disabled, this determines the order of checkbox states for the smart action.
|
|
||||||
checkboxes = {
|
|
||||||
[" "] = { char = "☐", hl_group = "ObsidianTodo" },
|
|
||||||
["x"] = { char = "✔", hl_group = "ObsidianDone" },
|
|
||||||
["/"] = { char = "⧗", hl_group = "ObsidianTodo" },
|
|
||||||
[">"] = { char = "»", hl_group = "ObsidianRightArrow" },
|
|
||||||
["~"] = { char = "»", hl_group = "ObsidianTilde" },
|
|
||||||
["!"] = { char = "⛝", hl_group = "ObsidianDone" },
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Put the note ID in the wiki links
|
-- Put the note ID in the wiki links
|
||||||
|
|||||||
13
home-manager/features/neovim/config/lua/plugins/openscad.lua
Normal file
13
home-manager/features/neovim/config/lua/plugins/openscad.lua
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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",
|
||||||
|
},
|
||||||
|
}
|
||||||
95
home-manager/features/neovim/config/lua/plugins/sidekick.lua
Normal file
95
home-manager/features/neovim/config/lua/plugins/sidekick.lua
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
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",
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -2,6 +2,11 @@ return {
|
|||||||
"folke/snacks.nvim",
|
"folke/snacks.nvim",
|
||||||
opts = function(_, opts)
|
opts = function(_, opts)
|
||||||
vim.tbl_deep_extend("force", opts, {
|
vim.tbl_deep_extend("force", opts, {
|
||||||
|
styles = {
|
||||||
|
notification = {
|
||||||
|
wo = { wrap = true }, -- wrap notifications
|
||||||
|
},
|
||||||
|
},
|
||||||
picker = {
|
picker = {
|
||||||
smart = {
|
smart = {
|
||||||
-- Remove the "recent" picker so we don't get things from other directories.
|
-- Remove the "recent" picker so we don't get things from other directories.
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
withNodeJs = 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; [
|
extraPackages = with pkgs; [
|
||||||
gcc # For treesitter complation
|
gcc # For treesitter complation
|
||||||
@@ -19,6 +21,7 @@
|
|||||||
sqlite # For Snacks
|
sqlite # For Snacks
|
||||||
imagemagick # For image conversion/display
|
imagemagick # For image conversion/display
|
||||||
vscode-langservers-extracted # For language servers (it wants this version of eslint for some reason)
|
vscode-langservers-extracted # For language servers (it wants this version of eslint for some reason)
|
||||||
|
copilot-language-server # Enable the copilot language server
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -66,21 +66,25 @@ run_cmd() {
|
|||||||
amixer set Master mute
|
amixer set Master mute
|
||||||
systemctl suspend
|
systemctl suspend
|
||||||
elif [[ $1 == '--logout' ]]; then
|
elif [[ $1 == '--logout' ]]; then
|
||||||
if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then
|
hyprctl dispatch 'hl.dsp.exec_cmd("uwsm stop")'
|
||||||
openbox --exit
|
# DESKTOP_SESSION appears to be empty right now. I'm not going
|
||||||
elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then
|
# to bother setting it until I'm using more than one manager.
|
||||||
bspc quit
|
#
|
||||||
elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then
|
# if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then
|
||||||
i3-msg exit
|
# openbox --exit
|
||||||
elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
# elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then
|
||||||
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
# bspc quit
|
||||||
elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
# elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then
|
||||||
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
# i3-msg exit
|
||||||
elif [[ "$DESKTOP_SESSION" == 'hyprland-uwsm' ]]; then
|
# elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
||||||
hyprctl dispatch exit
|
# qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
||||||
elif [[ "$DESKTOP_SESSION" == 'hyprland' ]]; then
|
# elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
|
||||||
hyprctl dispatch exit
|
# qdbus org.kde.ksmserver /KSMServer logout 0 0 0
|
||||||
fi
|
# elif [[ "$DESKTOP_SESSION" == 'hyprland-uwsm' ]]; then
|
||||||
|
# hyprctl dispatch 'exec, uwsm stop'
|
||||||
|
# elif [[ "$DESKTOP_SESSION" == 'hyprland' ]]; then
|
||||||
|
# hyprctl dispatch exit
|
||||||
|
# fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -9,9 +9,10 @@
|
|||||||
recursive = true;
|
recursive = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.windowrulev2 = [
|
# TODO: Merge into lua config
|
||||||
# Forces the Rofi window to hold focus so that it gets input even if
|
# wayland.windowManager.hyprland.settings.windowrule = [
|
||||||
# something else opens or the mouse is outside the window.
|
# # Forces the Rofi window to hold focus so that it gets input even if
|
||||||
"stayfocused, class:Rofi"
|
# # something else opens or the mouse is outside the window.
|
||||||
];
|
# "stay_focused on, match:class Rofi"
|
||||||
|
# ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@
|
|||||||
# System
|
# System
|
||||||
htop
|
htop
|
||||||
btop
|
btop
|
||||||
neofetch
|
|
||||||
psmisc # fuser, killal, pstree
|
psmisc # fuser, killal, pstree
|
||||||
|
|
||||||
# Archives
|
# Archives
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
# Automatically add keys to agent when used
|
|
||||||
# Other options are "no" and "confirm"
|
|
||||||
addKeysToAgent = "yes";
|
|
||||||
|
|
||||||
matchBlocks = {
|
matchBlocks = {
|
||||||
"mcp.haven" = {
|
"mcp.haven" = {
|
||||||
user = "drew";
|
user = "drew";
|
||||||
|
|
||||||
|
# Automatically add keys to agent when used
|
||||||
|
# Other options are "no" and "confirm"
|
||||||
|
addKeysToAgent = "yes";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
lines = 5000;
|
lines = 5000;
|
||||||
};
|
};
|
||||||
|
|
||||||
colors = {
|
colors-dark = {
|
||||||
alpha = 0.9;
|
alpha = 0.9;
|
||||||
# Tokionight Night theme
|
# Tokionight Night theme
|
||||||
# From https://codeberg.org/dnkl/foot/src/branch/master/themes/tokyonight-night
|
# From https://codeberg.org/dnkl/foot/src/branch/master/themes/tokyonight-night
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
monitors:
|
{ config }:
|
||||||
{ ... }:
|
|
||||||
{
|
{
|
||||||
wayland.windowManager.hyprland.settings.exec-once = [
|
# NOTE: Wpaperd displays wallpaper upside-down on 90´ ccw rotated
|
||||||
"wpaperd"
|
# monitors as of 26.05
|
||||||
];
|
|
||||||
|
|
||||||
services.wpaperd = {
|
services.wpaperd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings =
|
settings =
|
||||||
@@ -12,10 +9,11 @@ monitors:
|
|||||||
map (mon: {
|
map (mon: {
|
||||||
name = mon;
|
name = mon;
|
||||||
value = {
|
value = {
|
||||||
# Each monitor gets a folder under wallpaper that containes the current images.
|
# Each monitor gets a folder under wallpaper that
|
||||||
|
# containes the current images.
|
||||||
path = "~/Pictures/Wallpaper/${mon}";
|
path = "~/Pictures/Wallpaper/${mon}";
|
||||||
};
|
};
|
||||||
}) monitors
|
}) (builtins.attrNames config.hardware.monitors)
|
||||||
)
|
)
|
||||||
// {
|
// {
|
||||||
default = {
|
default = {
|
||||||
100
home-manager/options/monitors.nix
Normal file
100
home-manager/options/monitors.nix
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
{ 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);
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
}
|
||||||
@@ -29,23 +29,32 @@ immich:
|
|||||||
database: ENC[AES256_GCM,data:1fjOQsLZcq/T+r+AkzomWwCQWw==,iv:c4pn2rC+3xkxLJ7uAdhnTE6zVTRQkfuKK3tjUyDhfAw=,tag:kvk7DOv6X/+RDxfPxVak7w==,type:str]
|
database: ENC[AES256_GCM,data:1fjOQsLZcq/T+r+AkzomWwCQWw==,iv:c4pn2rC+3xkxLJ7uAdhnTE6zVTRQkfuKK3tjUyDhfAw=,tag:kvk7DOv6X/+RDxfPxVak7w==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
|
- recipient: age1dstsz5g4qthwt2sssu5wp787ku7rnfqm02mqaefsaueswhvqzpmsyft4p4
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVZnYrVnR1MlBjdzFpQnVi
|
||||||
|
RXFUcEN2N0Zoc2ZUUnprdXc0aElFaXU5c1VBCkxxcGd4QUhOaTl4K0paOTZ3d2Ez
|
||||||
|
Vks4blZLUVZPaklhQlE3WWhVelRFUEkKLS0tIGs2dU44NFdOVm41QXVJbHNkQTVo
|
||||||
|
b2NVRnVFNmF6a2hjRE9OOUxVMGpjSWcKA6Do+oddwMjc2XNJUCeGXY985gJZ4f2v
|
||||||
|
Dyo0/Oyuwz1jFMrjLmnmnmtyn079mT9wsm28KlaEEvzDIxOBnLjx6A==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
- recipient: age1yvdzvuvu5wqztcx6ll2xk6x547uuyqy735tjjdd7zftkz53jsf9qf5ahue
|
||||||
enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiL3FoUWN1NWlDQTAvRkFM
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKeGhvQWp6WWx6N1JDdm1J
|
||||||
TkdCMWVXYThIYVZFSlVEVmxUb1JuQmpESWtrClFlTVlHdGhndFJjUWxUMVFybGtn
|
UWlWZTV5ellMd2ZIRWpkRnJDT2s4UVZJMEM4Cll2MnVNTnFWYit2bHpCVzcwbysy
|
||||||
bEpJNkFSVnpueXlvR0NkbU90RkZoTzAKLS0tIHdTTnRteWRNbW9MVmdKSVJLeWxB
|
NkxtMUZFcDJnb3Z1TmlTWDJLNVJ4cnMKLS0tIHdqVXB1U2xVdEtlY3BsemFIcXlC
|
||||||
Zkpxc1lLNVFSUFA2NTJUS0UrOXJCWXMKOuZmbFBdjPIcIUUWHHfGl8TD+HIRa9Hj
|
OHlxaytJTWlNSFRCd2dDaFVsUU1CbUkKp7J+mDnGFS9upV6QWi40ptG85+UZ5y1G
|
||||||
Eykvc7Iv5zl61kuJRorE7DWWS1I2C586c+MZtNo6GPQxUasxWRRgJQ==
|
9ic/sQEMHQe9VeAutVz1GPYWbF3Vt5iawXmtVxN+zx/bLAYGglv5yg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
- recipient: age1jrk4h7x4qzhr6z5m4d099mlfyjc4n5n9s52r4gfsdz0slnqlqa9sss735v
|
||||||
enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZck5tK3p6blhxZWp5YkNF
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkM0RRaFhGKytkSjNMU3cy
|
||||||
b3lnMWI1dHBnQzlDOG05c0YyZlZDTzA5V2pvCis3N1BhNXlmamRFci9wWTBuRWFv
|
d1dlcms4TVMzU2xsSHBqcDJWQTdCU1dZcERJCktHRVZiWkZrbzk4QXRNSmpyY25X
|
||||||
cC9kdWV3RnpFWTFVRVEwaTVWQVdnZE0KLS0tIEhOTzExRzRLaGdKOTRwRmNXcW5P
|
ZUdOS2pSOVpITExpVVFyc1A3QTBDTGsKLS0tIDM4NFd1eWtZSnR4d0tLUnRFYmJW
|
||||||
by9aNFY4dXNxaWxnTXFTQS9reHhuQWMKh5rZ93nFtBV9EpFVRp+E+GXZ6xzVy2Jw
|
QlE3cFYxUXNVam1aMlJEVTRGV2xsN1kKXMeSXiEdXyb6c+dcxX3G/Q+s78lfi90g
|
||||||
vFh4deGcAb60q4odSaeWfk1Dr7L9Ua69oK9omjbCNUt+P7Kwlfca7Q==
|
dvKJPDYvGb/8JXSkZNkLlWvHEVnsAJ1mJFb1idenYzeQvJlsX07rYA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2026-02-25T00:28:13Z"
|
lastmodified: "2026-02-25T00:28:13Z"
|
||||||
mac: ENC[AES256_GCM,data:hDmqObrtfoVkQqz8JPkqlyXMbiuyBophjdZNLvTFrZw3pAVNCuzsH4zxFBOaxJttkzLc65DWDHDeEIBY5YZam1GLFFXUQ5E3Dxno7hnyzOoM2ipgDTOacI0gbKJAWgGUF3LNDdqVoREA9LC91LoNUJoNmzpTSFtuLb7ORuwCrH4=,iv:8+W3n1Cr6woEiPU9ECaMYM64HNmFHr2AIw6UohCJi00=,tag:7drkZiPAUHaEx5PagXA9JQ==,type:str]
|
mac: ENC[AES256_GCM,data:hDmqObrtfoVkQqz8JPkqlyXMbiuyBophjdZNLvTFrZw3pAVNCuzsH4zxFBOaxJttkzLc65DWDHDeEIBY5YZam1GLFFXUQ5E3Dxno7hnyzOoM2ipgDTOacI0gbKJAWgGUF3LNDdqVoREA9LC91LoNUJoNmzpTSFtuLb7ORuwCrH4=,iv:8+W3n1Cr6woEiPU9ECaMYM64HNmFHr2AIw6UohCJi00=,tag:7drkZiPAUHaEx5PagXA9JQ==,type:str]
|
||||||
|
|||||||
26
secrets/sirius.yaml
Normal file
26
secrets/sirius.yaml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
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,5 +1,4 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
programs.adb.enable = true;
|
|
||||||
users.users.drew.extraGroups = [ "adbusers" ];
|
users.users.drew.extraGroups = [ "adbusers" ];
|
||||||
}
|
}
|
||||||
|
|||||||
12
system/features/appimage.nix
Normal file
12
system/features/appimage.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.appimage = {
|
||||||
|
enable = true;
|
||||||
|
binfmt = true;
|
||||||
|
package = pkgs.appimage-run.override {
|
||||||
|
extraPkgs = pkgs: [
|
||||||
|
pkgs.icu
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -23,4 +23,7 @@
|
|||||||
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
|
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,11 +1,8 @@
|
|||||||
{ ... }: {
|
{ ... }:
|
||||||
|
{
|
||||||
# Enable the X11 windowing system and a display manager
|
# Enable the X11 windowing system and a display manager
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
displayManager.gdm = {
|
|
||||||
enable = true;
|
|
||||||
wayland = true;
|
|
||||||
};
|
|
||||||
# displayManager.sddm = {
|
# displayManager.sddm = {
|
||||||
# enable = true;
|
# enable = true;
|
||||||
# wayland.enable = true;
|
# wayland.enable = true;
|
||||||
@@ -17,7 +14,19 @@
|
|||||||
variant = "";
|
variant = "";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# services.displayManager.ly.enable = true;
|
# 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
|
# Enable Hyprland so it shows up in the menu
|
||||||
programs.hyprland = {
|
programs.hyprland = {
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
# Enable networking
|
# Enable networking
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
# Disable wpa-supplicant to avoid conflicts with network manager.
|
# Disable wpa-supplicant to avoid conflicts with network manager.
|
||||||
networking.wireless.enable = false;
|
# Appears this is not needed as of 26.05
|
||||||
|
networking.wireless.enable = true;
|
||||||
|
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "America/Los_Angeles";
|
time.timeZone = "America/Los_Angeles";
|
||||||
@@ -70,7 +71,7 @@
|
|||||||
services.gnome.gnome-keyring.enable = true;
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
|
||||||
# Enable sound with pipewire.
|
# Enable sound with pipewire.
|
||||||
hardware.pulseaudio.enable = false;
|
services.pulseaudio.enable = false;
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./qmk.nix
|
./qmk.nix
|
||||||
../../authorized-keys.nix
|
../../authorized-keys.nix
|
||||||
|
../../features/appimage.nix
|
||||||
../../features/audio.nix
|
../../features/audio.nix
|
||||||
../../features/gc.nix
|
../../features/gc.nix
|
||||||
../../features/gui.nix
|
../../features/gui.nix
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
{ ... }:
|
{ pkgs, ... }:
|
||||||
let
|
|
||||||
monitors = [
|
|
||||||
"DP-1"
|
|
||||||
"DP-2"
|
|
||||||
];
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = map (x: ../../../home-manager + x) [
|
||||||
map (x: ../../../home-manager + x) [
|
|
||||||
"/features/astronomy.nix"
|
"/features/astronomy.nix"
|
||||||
"/features/chat.nix"
|
"/features/chat.nix"
|
||||||
"/features/development/development.nix"
|
"/features/development/development.nix"
|
||||||
@@ -17,42 +10,73 @@ in
|
|||||||
"/features/development/typescript.nix"
|
"/features/development/typescript.nix"
|
||||||
"/features/development/vscode.nix"
|
"/features/development/vscode.nix"
|
||||||
"/features/eww"
|
"/features/eww"
|
||||||
|
"/features/email.nix"
|
||||||
"/features/gaming.nix"
|
"/features/gaming.nix"
|
||||||
"/features/image-editing.nix"
|
"/features/image-editing.nix"
|
||||||
"/features/linux-desktop.nix"
|
"/features/linux-desktop.nix"
|
||||||
|
"/features/mounts/mcp-archive.nix"
|
||||||
"/features/notes.nix"
|
"/features/notes.nix"
|
||||||
"/features/3d-printing.nix"
|
"/features/3d-printing.nix"
|
||||||
]
|
"/features/hyprpaper.nix"
|
||||||
++ [
|
|
||||||
(import ../../../home-manager/features/wallpaper.nix monitors)
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
home = {
|
||||||
|
stateVersion = "24.11";
|
||||||
|
username = "drew";
|
||||||
|
homeDirectory = "/home/drew";
|
||||||
|
|
||||||
# This config file is needed for nix shell to allow unfree programs. I'm not
|
# This config file is needed for nix shell to allow unfree programs. I'm not
|
||||||
# sure why this isn't a home-manager option.
|
# sure why this isn't a home-manager option.
|
||||||
home.file.".config/nixpkgs/config.nix".text = ''
|
file.".config/nixpkgs/config.nix".text = ''
|
||||||
{ allowUnfree = true; }
|
{ allowUnfree = true; }
|
||||||
'';
|
'';
|
||||||
|
|
||||||
home.stateVersion = "24.11";
|
|
||||||
|
|
||||||
home.username = "drew";
|
|
||||||
home.homeDirectory = "/home/drew";
|
|
||||||
|
|
||||||
programs.git = {
|
|
||||||
userName = "Drew Haven";
|
|
||||||
userEmail = "drew.haven@gmail.com";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings = {
|
programs.git.settings = {
|
||||||
exec-once = [
|
user = {
|
||||||
# Set up eww here because it's based on the monitor configuration
|
name = "Drew Haven";
|
||||||
"sleep 2 && eww open-many primary-statusbar secondary-statusbar"
|
email = "periodic@blazestar.net";
|
||||||
# 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"
|
|
||||||
];
|
|
||||||
windowrulev2 = [
|
|
||||||
# Rofi doesn't center properly when I have the two asymetric monitors, so we need hyprland to manage it.
|
|
||||||
"center, class:Rofi"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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"
|
||||||
|
];
|
||||||
|
|
||||||
|
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"
|
||||||
|
# # ];
|
||||||
|
# };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
#
|
#
|
||||||
# Current versions can be found in https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/os-specific/linux/nvidia-x11/default.nix
|
# 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.beta;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
|
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
|
|
||||||
|
|||||||
64
system/hosts/altair/hyprland.lua
Normal file
64
system/hosts/altair/hyprland.lua
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
-- 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,3 +1,10 @@
|
|||||||
# mcp
|
# mcp
|
||||||
|
|
||||||
Configuration for the MCP server
|
Configuration for the MCP server.
|
||||||
|
|
||||||
|
## Sops
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix-shell -p sops --run "sops secrets/mcp.yaml"
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -45,12 +45,6 @@
|
|||||||
LC_TIME = "en_US.UTF-8";
|
LC_TIME = "en_US.UTF-8";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Configure keymap in X11
|
|
||||||
services.xserver.xkb = {
|
|
||||||
layout = "us";
|
|
||||||
variant = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
users.users.drew = {
|
users.users.drew = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
@@ -67,11 +61,9 @@
|
|||||||
linger = true;
|
linger = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# List packages installed in system profile. To search, run:
|
# List packages installed in system profile.
|
||||||
# $ nix search wget
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
vim
|
||||||
# wget
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
let
|
let
|
||||||
lib = import ./lib.nix config;
|
lib = import ./lib.nix config;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./shared-postgres.nix
|
./shared-postgres.nix
|
||||||
];
|
];
|
||||||
@@ -41,27 +42,6 @@ in {
|
|||||||
name = "Loki";
|
name = "Loki";
|
||||||
description = "Log Database";
|
description = "Log Database";
|
||||||
};
|
};
|
||||||
environment = {};
|
environment = { };
|
||||||
};
|
|
||||||
|
|
||||||
services.promtail = {
|
|
||||||
enable = true;
|
|
||||||
configuration = {
|
|
||||||
server.http_listen_port = 9080;
|
|
||||||
clients = [
|
|
||||||
{ url = "https://loki.blazestar.net/loki/api/v1/push"; }
|
|
||||||
];
|
|
||||||
scrape_configs = [{
|
|
||||||
job_name = "journal";
|
|
||||||
journal = {
|
|
||||||
max_age = "12h";
|
|
||||||
labels = { job = "systemd-journal"; };
|
|
||||||
};
|
|
||||||
relabel_configs = [{
|
|
||||||
source_labels = ["__journal__systemd_unit"];
|
|
||||||
target_label = "unit";
|
|
||||||
}];
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,9 +10,11 @@
|
|||||||
home.username = "drew";
|
home.username = "drew";
|
||||||
home.homeDirectory = "/home/drew";
|
home.homeDirectory = "/home/drew";
|
||||||
|
|
||||||
programs.git = {
|
programs.git.settings = {
|
||||||
userName = "Drew Haven";
|
user = {
|
||||||
userEmail = "drew.haven@gmail.com";
|
name = "Drew Haven";
|
||||||
|
email = "drew.haven@gmail.com";
|
||||||
|
};
|
||||||
extraConfig = {
|
extraConfig = {
|
||||||
safe = {
|
safe = {
|
||||||
# Marks the web directory as safe even though I don't own it.
|
# Marks the web directory as safe even though I don't own it.
|
||||||
|
|||||||
@@ -1,27 +1,43 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [
|
||||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usb_storage"
|
||||||
|
"usbhid"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{ device = "/dev/disk/by-uuid/123e06ed-d7a4-439b-ae37-7ff8f82ae0a7";
|
device = "/dev/disk/by-uuid/123e06ed-d7a4-439b-ae37-7ff8f82ae0a7";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{ device = "/dev/disk/by-uuid/0AC0-73EA";
|
device = "/dev/disk/by-uuid/0AC0-73EA";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
options = [ "fmask=0022" "dmask=0022" ];
|
options = [
|
||||||
|
"fmask=0022"
|
||||||
|
"dmask=0022"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [ ];
|
||||||
@@ -45,6 +61,10 @@
|
|||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
|
||||||
hardware.nvidia = {
|
hardware.nvidia = {
|
||||||
|
# The GTX 960 GPU in this system needs a legacy driver. It isn't supported
|
||||||
|
# by the current 595 driver that is stable as of 2026-06-04
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.legacy_580;
|
||||||
|
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
|
|
||||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
||||||
|
|||||||
9
system/hosts/sirius-a/README.md
Normal file
9
system/hosts/sirius-a/README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Sirius
|
||||||
|
|
||||||
|
The brightest star in the sky.
|
||||||
|
|
||||||
|
## Sops
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix-shell -p sops --run "sops secrets/sirius.yaml"
|
||||||
|
```
|
||||||
78
system/hosts/sirius-a/configuration.nix
Normal file
78
system/hosts/sirius-a/configuration.nix
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./gandicloud.nix
|
||||||
|
./sops.nix
|
||||||
|
./webhooks.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = "sirius-a"; # Define your hostname.
|
||||||
|
|
||||||
|
# Enable networking
|
||||||
|
networkmanager.enable = true;
|
||||||
|
# Disable wpa-supplicant to avoid conflicts with network manager.
|
||||||
|
wireless.enable = false;
|
||||||
|
|
||||||
|
firewall.allowedTCPPorts = [ 22 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable the OpenSSH daemon.
|
||||||
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
time.timeZone = "America/Los_Angeles";
|
||||||
|
|
||||||
|
# Select internationalisation properties.
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "en_US.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "en_US.UTF-8";
|
||||||
|
LC_MEASUREMENT = "en_US.UTF-8";
|
||||||
|
LC_MONETARY = "en_US.UTF-8";
|
||||||
|
LC_NAME = "en_US.UTF-8";
|
||||||
|
LC_NUMERIC = "en_US.UTF-8";
|
||||||
|
LC_PAPER = "en_US.UTF-8";
|
||||||
|
LC_TELEPHONE = "en_US.UTF-8";
|
||||||
|
LC_TIME = "en_US.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.zsh.enable = true;
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users.drew = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Drew Haven";
|
||||||
|
extraGroups = [
|
||||||
|
"networkmanager"
|
||||||
|
"wheel"
|
||||||
|
"docker-registry"
|
||||||
|
"docker"
|
||||||
|
];
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
# Enable linger so that systemd services run for this user are started and
|
||||||
|
# persist even without an active session.
|
||||||
|
linger = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
security.sudo = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
Defaults:root,%wheel timestamp_timeout=30
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "24.11"; # Did you read the comment?
|
||||||
|
|
||||||
|
# Enable flakes
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
}
|
||||||
19
system/hosts/sirius-a/default.nix
Normal file
19
system/hosts/sirius-a/default.nix
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./configuration.nix
|
||||||
|
../../authorized-keys.nix
|
||||||
|
../../features/gc.nix
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
home-manager.users.drew =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./drew.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
26
system/hosts/sirius-a/drew.nix
Normal file
26
system/hosts/sirius-a/drew.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = map (x: ../../../home-manager + x) [
|
||||||
|
"/features/development/development.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
# This config file is needed for nix shell to allow unfree programs. I'm not
|
||||||
|
# sure why this isn't a home-manager option.
|
||||||
|
home = {
|
||||||
|
file.".config/nixpkgs/config.nix".text = ''
|
||||||
|
{ allowUnfree = true; }
|
||||||
|
'';
|
||||||
|
|
||||||
|
stateVersion = "24.11";
|
||||||
|
|
||||||
|
username = "drew";
|
||||||
|
homeDirectory = "/home/drew";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.git.settings = {
|
||||||
|
user = {
|
||||||
|
name = "Drew Haven";
|
||||||
|
email = "periodic@blazestar.net";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
47
system/hosts/sirius-a/gandicloud.nix
Normal file
47
system/hosts/sirius-a/gandicloud.nix
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# This is the configuration required to run NixOS on GandiCloud.
|
||||||
|
{ lib, modulesPath, ... }:
|
||||||
|
{
|
||||||
|
imports = [ (modulesPath + "/virtualisation/openstack-config.nix") ];
|
||||||
|
config = {
|
||||||
|
boot.initrd.kernelModules = [
|
||||||
|
"xen-blkfront"
|
||||||
|
"xen-tpmfront"
|
||||||
|
"xen-kbdfront"
|
||||||
|
"xen-fbfront"
|
||||||
|
"xen-netfront"
|
||||||
|
"xen-pcifront"
|
||||||
|
"xen-scsifront"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Show debug kernel message on boot then reduce loglevel once booted
|
||||||
|
boot.consoleLogLevel = 7;
|
||||||
|
boot.kernel.sysctl."kernel.printk" = "4 4 1 7";
|
||||||
|
|
||||||
|
# For "openstack console log show"
|
||||||
|
boot.kernelParams = [ "console=ttyS0" ];
|
||||||
|
systemd.services."serial-getty@ttyS0" = {
|
||||||
|
enable = true;
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
serviceConfig.Restart = "always";
|
||||||
|
};
|
||||||
|
|
||||||
|
# The device exposed by Xen
|
||||||
|
boot.loader.grub.device = lib.mkForce "/dev/xvda";
|
||||||
|
|
||||||
|
# This is to get a prompt via the "openstack console url show" command
|
||||||
|
systemd.services."getty@tty1" = {
|
||||||
|
enable = lib.mkForce true;
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
serviceConfig.Restart = "always";
|
||||||
|
};
|
||||||
|
|
||||||
|
# This is required to get an IPv6 address on our infrastructure
|
||||||
|
networking.tempAddresses = "disabled";
|
||||||
|
|
||||||
|
nix.extraOptions = ''
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
'';
|
||||||
|
|
||||||
|
system.stateVersion = "24.11";
|
||||||
|
};
|
||||||
|
}
|
||||||
14
system/hosts/sirius-a/sops.nix
Normal file
14
system/hosts/sirius-a/sops.nix
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
_: {
|
||||||
|
### Secrets
|
||||||
|
sops = {
|
||||||
|
defaultSopsFile = ../../../secrets/sirius.yaml;
|
||||||
|
age = {
|
||||||
|
# Use the host key for sops
|
||||||
|
sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||||
|
# Where to store the key
|
||||||
|
keyFile = "/var/lib/sops-nix/key.txt";
|
||||||
|
# Generate the key if it doesn't exist
|
||||||
|
generateKey = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
92
system/hosts/sirius-a/webhooks.nix
Normal file
92
system/hosts/sirius-a/webhooks.nix
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
gitKnownHosts = pkgs.writeText "known_hosts" ''
|
||||||
|
[git.blazestar.net]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSikNAZDAbdQ5TA6Eg95FBM3sdPfAfghG+n56akCal8XXV/vOnXgqfeDASfXVOu+PZqCHnpGTxsym7hf2naFC0enznhS2sqahdQKKcsHvSfyQxpYFYyB2Zp8YDbnbRNGl2SbnqOajzk1SxJrJ0fFXmfrRIMnGNz+uFtIqc+T52CM051nd5Gj3f9a8xCwg7hedvSCynobsW9IOCmCc9rZ99TRd+m0kO74pUbgVqLv/+aSuW40K1uCkKgyh6PQsmkZd5GY0URwoJvLZauZLSPxl6DEU6lYz8S/hPrTP/e6fOPZsavQBYC+3Q/akoFnY+qlKgWLQy/Om6hz0EfYuuzNPRhf1jaGKjHgEri1f3OMgXcRMvjovRgbbu0JRGANmN8FMe20S4AAvbxmsQdQci+QcXZPDPbcmT3XJv8e8p4HNQyLxHyh0u9dLBE2ccTv5gdf/6iZy6WXlYEf1UAKC2lExRuKBV3lrnuyHhOj+iL09gUMYFuIyHuX2Hsw9yKZbO8J2+STNIVQfAJ0Upa2cJ33a6RlOxGiHXi4UbZTPguNgQaQdM0CuklVTynBfWr1Hfd8c8hVtT+HLz+XOU2Nrmgq90/w7g7mo5JxXHkcfBlqlXKONTkDUG3KHbwKtQNVC6l3bhpvPc32Mys6e7JeWnrb1zXojopnPvoct54qDVlwc5xQ==
|
||||||
|
'';
|
||||||
|
deployNpmApp =
|
||||||
|
with pkgs;
|
||||||
|
writeShellApplication {
|
||||||
|
name = "build-npm-app";
|
||||||
|
runtimeInputs = [
|
||||||
|
openssh
|
||||||
|
gitFull
|
||||||
|
nodejs_22
|
||||||
|
bashNonInteractive
|
||||||
|
rsync
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Deploying in $(pwd) as $(id)"
|
||||||
|
|
||||||
|
OUTPUT_DIR="./$(date --utc --iso-8601=seconds)"
|
||||||
|
|
||||||
|
echo "Deploying into $OUTPUT_DIR"
|
||||||
|
|
||||||
|
export GIT_SSH_COMMAND='ssh -v -o "UserKnownHostsFile ${gitKnownHosts}" -i "${
|
||||||
|
config.sops.secrets."webhook/deploy-key".path
|
||||||
|
}"'
|
||||||
|
|
||||||
|
# Disable astro telemetry otherwise it will try to write to `~/.config/astro/config.json`
|
||||||
|
export ASTRO_TELEMETRY_DISABLED=1
|
||||||
|
|
||||||
|
# Fetch the repository and make sure we are reset to HEAD
|
||||||
|
git fetch origin main
|
||||||
|
git reset --hard
|
||||||
|
git checkout main
|
||||||
|
git reset --hard origin/main
|
||||||
|
|
||||||
|
# Use a local cache with --cache .npm
|
||||||
|
npm ci --cache .npm
|
||||||
|
npm run build -- --outDir "$OUTPUT_DIR"
|
||||||
|
|
||||||
|
echo "Activating $OUTPUT_DIR"
|
||||||
|
# Trailing slash on source to only copy contents, not the directory itself
|
||||||
|
rsync --archive --delete "$OUTPUT_DIR"/ deployed
|
||||||
|
echo "Deployment complete"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
sops.secrets = {
|
||||||
|
"webhook/deploy-key" = {
|
||||||
|
restartUnits = [ "webhook.service" ];
|
||||||
|
owner = config.users.users.webhook.name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.webhook =
|
||||||
|
let
|
||||||
|
trigger-rule = {
|
||||||
|
or = [
|
||||||
|
{
|
||||||
|
match = {
|
||||||
|
type = "payload-hmac-sha1";
|
||||||
|
secret = "mysecret";
|
||||||
|
parameter = {
|
||||||
|
source = "header";
|
||||||
|
name = "X-Hub-Signature";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
verbose = true;
|
||||||
|
port = 9000;
|
||||||
|
openFirewall = true;
|
||||||
|
hooks = {
|
||||||
|
"deploy-blazestar-net" = {
|
||||||
|
id = "deploy-blazestar-net";
|
||||||
|
http-methods = [ "POST" ];
|
||||||
|
command-working-directory = "/web/blazestar.net";
|
||||||
|
include-command-output-in-response-on-error = true;
|
||||||
|
execute-command = "${deployNpmApp}/bin/build-npm-app";
|
||||||
|
trigger-rule-mismatch-http-response-code = 400;
|
||||||
|
inherit trigger-rule;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
system/hosts/vega/cachix.nix
Normal file
13
system/hosts/vega/cachix.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# WARN: `cachix use` will write to /etc/nixos/. You will need to update this file manually.
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
folder = ./cachix;
|
||||||
|
toImport = name: value: folder + ("/" + name);
|
||||||
|
filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key;
|
||||||
|
imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit imports;
|
||||||
|
nix.settings.substituters = [ "https://cache.nixos.org/" ];
|
||||||
|
}
|
||||||
13
system/hosts/vega/cachix/haskell-miso-cachix.nix
Normal file
13
system/hosts/vega/cachix/haskell-miso-cachix.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
{
|
||||||
|
nix = {
|
||||||
|
settings = {
|
||||||
|
substituters = [
|
||||||
|
"https://haskell-miso-cachix.cachix.org"
|
||||||
|
];
|
||||||
|
trusted-public-keys = [
|
||||||
|
"haskell-miso-cachix.cachix.org-1:m8hN1cvFMJtYib4tj+06xkKt5ABMSGfe8W7s40x1kQ0="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -9,7 +9,8 @@
|
|||||||
# Enable networking
|
# Enable networking
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
# Disable wpa-supplicant to avoid conflicts with network manager.
|
# Disable wpa-supplicant to avoid conflicts with network manager.
|
||||||
networking.wireless.enable = false;
|
# Appears this is not needed as of 26.05
|
||||||
|
# networking.wireless.enable = true;
|
||||||
|
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "America/Los_Angeles";
|
time.timeZone = "America/Los_Angeles";
|
||||||
@@ -64,6 +65,7 @@
|
|||||||
# $ nix search wget
|
# $ nix search wget
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim
|
vim
|
||||||
|
cachix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./cachix.nix
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../authorized-keys.nix
|
../../authorized-keys.nix
|
||||||
|
|||||||
@@ -1,57 +1,62 @@
|
|||||||
{ pkgs, ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
imports =
|
imports = map (x: ../../../home-manager + x) [
|
||||||
map (x: ../../../home-manager + x) [
|
|
||||||
"/features/chat.nix"
|
"/features/chat.nix"
|
||||||
"/features/development/development.nix"
|
"/features/development/development.nix"
|
||||||
"/features/development/docker.nix"
|
"/features/development/docker.nix"
|
||||||
"/features/development/haskell.nix"
|
"/features/development/haskell.nix"
|
||||||
"/features/development/markdown.nix"
|
"/features/development/markdown.nix"
|
||||||
"/features/development/typescript.nix"
|
"/features/development/typescript.nix"
|
||||||
"/features/development/vscode.nix"
|
"/features/email.nix"
|
||||||
"/features/eww"
|
"/features/eww"
|
||||||
"/features/image-editing.nix"
|
"/features/image-editing.nix"
|
||||||
"/features/linux-desktop.nix"
|
"/features/linux-desktop.nix"
|
||||||
"/features/notes.nix"
|
"/features/notes.nix"
|
||||||
]
|
"/features/hyprpaper.nix"
|
||||||
++ [
|
|
||||||
(import ../../../home-manager/features/wallpaper.nix [ "HDMI-A-1" ])
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home = {
|
||||||
slack
|
stateVersion = "24.11";
|
||||||
zoom-us
|
|
||||||
chromium
|
|
||||||
];
|
|
||||||
|
|
||||||
home.stateVersion = "24.11";
|
username = "drew";
|
||||||
|
homeDirectory = "/home/drew";
|
||||||
home.username = "drew";
|
|
||||||
home.homeDirectory = "/home/drew";
|
|
||||||
|
|
||||||
programs.git = {
|
|
||||||
userName = "Drew Haven";
|
|
||||||
userEmail = "periodic@blazestar.net";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.git.settings.user = {
|
||||||
|
name = "Drew Haven";
|
||||||
|
email = "periodic@blazestar.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware.monitors = {
|
||||||
|
"HDMI-A-1" = {
|
||||||
|
position = "0x0";
|
||||||
|
mode = "3440x1440@75.05";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.eww.widgets = [
|
||||||
|
"vertical-statusbar"
|
||||||
|
];
|
||||||
|
|
||||||
|
# TODO: Merge into LUA configs
|
||||||
wayland.windowManager.hyprland.settings = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
# Set up eww here because it's based on the monitor configuration
|
# 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
|
# Eww is idempotent, so it's fine to just run it on every reload to make sure things are open
|
||||||
exec-once = [
|
# exec_once = [
|
||||||
"sleep 2 && eww open-many vertical-statusbar"
|
# "sleep 2 && eww open-many vertical-statusbar"
|
||||||
];
|
# ];
|
||||||
# Set up workspaces for this system
|
# Set up workspaces for this system
|
||||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
workspace = [
|
# workspace = [
|
||||||
"1, defaultName:1"
|
# "1, defaultName:1"
|
||||||
"2, defaultName:2"
|
# "2, defaultName:2"
|
||||||
"3, defaultName:3"
|
# "3, defaultName:3"
|
||||||
"4, defaultName:4"
|
# "4, defaultName:4"
|
||||||
"5, defaultName:5"
|
# "5, defaultName:5"
|
||||||
"6, defaultName:6"
|
# "6, defaultName:6"
|
||||||
"7, defaultName:7"
|
# "7, defaultName:7"
|
||||||
"8, defaultName:8"
|
# "8, defaultName:8"
|
||||||
"9, defaultName:9"
|
# "9, defaultName:9"
|
||||||
];
|
# ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,4 +55,5 @@
|
|||||||
# Graphics settings
|
# Graphics settings
|
||||||
# Using the default production drivers.
|
# Using the default production drivers.
|
||||||
graphics.enable = true;
|
graphics.enable = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user