Compare commits
No commits in common. "main" and "pc/latest" have entirely different histories.
61 changed files with 1214 additions and 1259 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -1,7 +1,5 @@
|
|||
hidden/
|
||||
ISSUES/
|
||||
secrets/
|
||||
|
||||
result
|
||||
rebuild*.log
|
||||
|
||||
secrets/
|
||||
!/secrets
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@ keys:
|
|||
creation_rules:
|
||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||
key_groups:
|
||||
- pgp:
|
||||
- age:
|
||||
- *cry
|
||||
- *idk
|
||||
|
|
|
|||
23
TODO.md
23
TODO.md
|
|
@ -1,26 +1,9 @@
|
|||
- [ ] get kanshi working with hyprland
|
||||
|
||||
- [ ] Update the README.md
|
||||
- [ ] switch ssh keys to ECC (fuck RSA)
|
||||
- [ ] forgejo not post-quantum (fix that)
|
||||
|
||||
- [X] migrate forge.dobutterfliescry.net -> tearforge.net
|
||||
- [X] rename forgejo user to git
|
||||
- [ ] setup my own VPN
|
||||
- [ ] connect matcha to my VPN
|
||||
- [ ] use matcha to build stuff instead of using my laptop
|
||||
|
||||
- [ ] switch to zsh? or maybe elvish?
|
||||
- [ ] switch to neovim
|
||||
- [ ] switch to mangowc
|
||||
|
||||
- [ ] fix my fuck ass emojis
|
||||
|
||||
# add sddm profile pic
|
||||
systemd.tmpfiles.rules = let
|
||||
imagePath = /${root}/homes/aurora/profile.png;
|
||||
in
|
||||
lib.mkIf (builtins.pathExists imagePath) [
|
||||
"L /var/lib/AccountsService/icons/${config.home.username} - - - - ${imagePath}"
|
||||
];
|
||||
|
||||
|
||||
# Cerulean should automatically add set home-managers `home.username` and `home.homeDirectory`
|
||||
# (this can be done by using .extendModule from the nixos module system :3)
|
||||
|
|
|
|||
20
colors.rasi
Normal file
20
colors.rasi
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
* {
|
||||
background: rgba(51,37,65,0.9);
|
||||
foreground: rgba(198,186,227,0.9);
|
||||
color00: rgba(78,66,70,0.9);
|
||||
color01: rgba(111,91,159,0.9);
|
||||
color02: rgba(120,98,164,0.9);
|
||||
color03: rgba(131,128,181,0.9);
|
||||
color04: rgba(154,127,183,0.9);
|
||||
color05: rgba(157,129,185,0.9);
|
||||
color06: rgba(123,153,183,0.9);
|
||||
color07: rgba(165,148,207,0.9);
|
||||
color08: rgba(115,103,145,0.9);
|
||||
color09: rgba(129,102,193,0.9);
|
||||
color10: rgba(140,112,199,0.9);
|
||||
color11: rgba(145,141,218,0.9);
|
||||
color12: rgba(170,126,217,0.9);
|
||||
color13: rgba(174,130,220,0.9);
|
||||
color14: rgba(135,181,228,0.9);
|
||||
color15: rgba(165,148,207,0.9);
|
||||
}
|
||||
183
flake.lock
generated
183
flake.lock
generated
|
|
@ -37,11 +37,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773436376,
|
||||
"narHash": "sha256-OUPRrprbgN27BXHuWkMAPSCfLLQ/uwpWghEfKYN2iAg=",
|
||||
"lastModified": 1772292445,
|
||||
"narHash": "sha256-4F1Q7U313TKUDDovCC96m/Za4wZcJ3yqtu4eSrj8lk8=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "43f10d24391692bba3d762931ee35e7f17f8e8b8",
|
||||
"rev": "1dbbba659c1cef0b0202ce92cadfe13bae550e8f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -273,11 +273,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772408722,
|
||||
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
|
||||
"lastModified": 1769996383,
|
||||
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
|
||||
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -291,11 +291,11 @@
|
|||
"nixpkgs-lib": "nixpkgs-lib_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772408722,
|
||||
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
|
||||
"lastModified": 1769996383,
|
||||
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
|
||||
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -392,11 +392,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772985280,
|
||||
"narHash": "sha256-FdrNykOoY9VStevU4zjSUdvsL9SzJTcXt4omdEDZDLk=",
|
||||
"lastModified": 1770260404,
|
||||
"narHash": "sha256-3iVX1+7YUIt23hBx1WZsUllhbmP2EnXrV8tCRbLxHc8=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "8f736f007139d7f70752657dff6a401a585d6cbc",
|
||||
"rev": "0d782ee42c86b196acff08acfbf41bb7d13eed5b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -422,11 +422,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772461003,
|
||||
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
|
||||
"lastModified": 1753964049,
|
||||
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprcursor",
|
||||
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
|
||||
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -451,11 +451,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772461523,
|
||||
"narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=",
|
||||
"lastModified": 1770511807,
|
||||
"narHash": "sha256-suKmSbSk34uPOJDTg/GbPrKEJutzK08vj0VoTvAFBCA=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804",
|
||||
"rev": "7c75487edd43a71b61adb01cae8326d277aab683",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -476,7 +476,7 @@
|
|||
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||
"hyprwire": "hyprwire",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable"
|
||||
"nixpkgs"
|
||||
],
|
||||
"pre-commit-hooks": "pre-commit-hooks",
|
||||
"systems": [
|
||||
|
|
@ -485,17 +485,17 @@
|
|||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774136452,
|
||||
"narHash": "sha256-pSwj8WNWXMuZaDqCyhQwlngRD3JyNmZwldSe6UqWAos=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"rev": "bf31f642b08a8d8ca796a1b713285f2580805c2f",
|
||||
"type": "github"
|
||||
"lastModified": 1772862346,
|
||||
"narHash": "sha256-cfzHdBAkACrE2kuFlVPub2W7qZwobsrHcmYhoKVLtdY=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "b41882c169f589848f0efb10c88c1dad383af04b",
|
||||
"revCount": 6999,
|
||||
"type": "git",
|
||||
"url": "https://tearforge.net/cry/Hyprland"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"type": "github"
|
||||
"type": "git",
|
||||
"url": "https://tearforge.net/cry/Hyprland"
|
||||
}
|
||||
},
|
||||
"hyprland-guiutils": {
|
||||
|
|
@ -531,11 +531,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772467975,
|
||||
"narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=",
|
||||
"lastModified": 1767023960,
|
||||
"narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-guiutils",
|
||||
"rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507",
|
||||
"rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -556,11 +556,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772460177,
|
||||
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
|
||||
"lastModified": 1765214753,
|
||||
"narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
|
||||
"rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -585,11 +585,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772459629,
|
||||
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
|
||||
"lastModified": 1771866172,
|
||||
"narHash": "sha256-fYFoXhQLrm1rD8vSFKQBOEX4OGCuJdLt1amKfHd5GAw=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
|
||||
"rev": "0b219224910e7642eb0ed49f0db5ec3d008e3e41",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -637,11 +637,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772462885,
|
||||
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
|
||||
"lastModified": 1764592794,
|
||||
"narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprtoolkit",
|
||||
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
|
||||
"rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -662,11 +662,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773948364,
|
||||
"narHash": "sha256-S76omfIVQ1TpGiXFbqih6o6XcH3sA5+5QI+SXB4HvlY=",
|
||||
"lastModified": 1771271487,
|
||||
"narHash": "sha256-41gEiUS0Pyw3L/ge1l8MXn61cK14VAhgWB/JV8s/oNI=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "b85b779e3e3a1adcd9b098e3447cf48f9e780b35",
|
||||
"rev": "340a792e3b3d482c4ae5f66d27a9096bdee6d76d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -687,11 +687,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772459835,
|
||||
"narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
|
||||
"lastModified": 1770501770,
|
||||
"narHash": "sha256-NWRM6+YxTRv+bT9yvlhhJ2iLae1B1pNH3mAL5wi2rlQ=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwayland-scanner",
|
||||
"rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
|
||||
"rev": "0bd8b6cde9ec27d48aad9e5b4deefb3746909d40",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -716,11 +716,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773074819,
|
||||
"narHash": "sha256-qRqYnXiKoJLRTcfaRukn7EifmST2IVBUMZOeZMAc5UA=",
|
||||
"lastModified": 1771606233,
|
||||
"narHash": "sha256-F3PLUqQ/TwgR70U+UeOqJnihJZ2EuunzojYC4g5xHr0=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwire",
|
||||
"rev": "f68afd0e73687598cc2774804fedad76693046f0",
|
||||
"rev": "06c7f1f8c4194786c8400653c4efc49dc14c0f3a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -823,11 +823,11 @@
|
|||
"scenefx": "scenefx"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773034081,
|
||||
"narHash": "sha256-tH1yy1LQYtmGWnCU7whsdX0iGpc2dvaJ+7p6rvuKkHg=",
|
||||
"lastModified": 1771732288,
|
||||
"narHash": "sha256-N1H7LMWXYNn7zN9ghp4vHlBs4O/Rw/+ZEoPUpm9ozw4=",
|
||||
"owner": "DreamMaoMao",
|
||||
"repo": "mango",
|
||||
"rev": "db30977196b91cfe2e5db8e9829faafe13417bd9",
|
||||
"rev": "6b2d694b234cae9876eb81e27991439eb51860f1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -901,11 +901,11 @@
|
|||
},
|
||||
"locked": {
|
||||
"dir": "packages/nix",
|
||||
"lastModified": 1774360398,
|
||||
"narHash": "sha256-IvuZMTxTe5osTszZp4r27X/F0R7FVhLWkP7g6pYMgTs=",
|
||||
"lastModified": 1772390578,
|
||||
"narHash": "sha256-3yQlDZz9JZqPFiYYj8fQkpCXUzjlAw4s7zaZ2n0wFmE=",
|
||||
"owner": "SteamClientHomebrew",
|
||||
"repo": "millennium",
|
||||
"rev": "4378aac79283a11912dd1a7adf89f79ab3736a87",
|
||||
"rev": "41d8c701e1f1ed4362e8378d12bbe5cb0cb811d6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1066,15 +1066,14 @@
|
|||
"flake-parts": "flake-parts_3",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-nixcord": "nixpkgs-nixcord"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774312874,
|
||||
"narHash": "sha256-mFc7Iy+Oqwr7Vwb7CmNIWilSYiTw2857imf6Rb75ITg=",
|
||||
"lastModified": 1771375681,
|
||||
"narHash": "sha256-qDDw0ruBZ1kt63j4uVP5Xrd1OxGKIYrSFnig0z6ozSw=",
|
||||
"owner": "FlameFlag",
|
||||
"repo": "nixcord",
|
||||
"rev": "71f4b3f92ca534c3665deb63e229195955d96cf9",
|
||||
"rev": "d030dbb48ab020092681a39c878c1d48a553ffc1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1085,11 +1084,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1772822230,
|
||||
"narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=",
|
||||
"lastModified": 1771903837,
|
||||
"narHash": "sha256-sdaqdnsQCv3iifzxwB22tUwN/fSHoN7j2myFW5EIkGk=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "71caefce12ba78d84fe618cf61644dce01cf3a96",
|
||||
"rev": "e764fc9a405871f1f6ca3d1394fb422e0a0c3951",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1116,11 +1115,11 @@
|
|||
},
|
||||
"nixpkgs-lib_2": {
|
||||
"locked": {
|
||||
"lastModified": 1772328832,
|
||||
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
|
||||
"lastModified": 1769909678,
|
||||
"narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
|
||||
"rev": "72716169fe93074c333e8d0173151350670b824c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1131,11 +1130,11 @@
|
|||
},
|
||||
"nixpkgs-master": {
|
||||
"locked": {
|
||||
"lastModified": 1773068446,
|
||||
"narHash": "sha256-MCEmktH6AFJH8Pg1rBGB2Q0FhS5z5K87IsMbUU8uzHI=",
|
||||
"lastModified": 1772170669,
|
||||
"narHash": "sha256-ClBvX0YzaJOaGZInNi0e3mFknzr/rAdwKbWrjO1j1sg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "70b7278e2c0acc26ad3360551bf9c15c5ccc0acd",
|
||||
"rev": "ee234284495a7ff3ecffb062595102fdc4fbe617",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1145,29 +1144,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-nixcord": {
|
||||
"locked": {
|
||||
"lastModified": 1773222311,
|
||||
"narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0590cd39f728e129122770c029970378a79d076a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1772773019,
|
||||
"narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
|
||||
"lastModified": 1771008912,
|
||||
"narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
|
||||
"rev": "a82ccc39b39b621151d6732718e3e250109076fa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1223,11 +1206,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772893680,
|
||||
"narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=",
|
||||
"lastModified": 1772024342,
|
||||
"narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "8baab586afc9c9b57645a734c820e4ac0a604af9",
|
||||
"rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1326,11 +1309,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1771956684,
|
||||
"narHash": "sha256-+EtzmEzGA2xqwIvKrP0euYaOzrmTQWEWAiWV+k2WBEM=",
|
||||
"lastModified": 1769900466,
|
||||
"narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=",
|
||||
"owner": "uiriansan",
|
||||
"repo": "SilentSDDM",
|
||||
"rev": "34f82e1fb8412fff78b82a0dcce763492b36054c",
|
||||
"rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1386,11 +1369,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773007504,
|
||||
"narHash": "sha256-4NtiCDH3RunKbrlWvPCB6dyTjCwqdrHaBDeMCzG6gIA=",
|
||||
"lastModified": 1772494187,
|
||||
"narHash": "sha256-6ksgNAFXVK+Cg/6ww7bB2nJUPZlnS75UwZC7G+L03EE=",
|
||||
"owner": "Gerg-L",
|
||||
"repo": "spicetify-nix",
|
||||
"rev": "434e63b851f9139aaeddc3b8de44d47992828b3b",
|
||||
"rev": "915ab06b046d05613041780c575c62a32fe67cea",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1529,11 +1512,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772669058,
|
||||
"narHash": "sha256-XhnY0aRuDo5LT8pmJVPofPOgO2hAR7T+XRoaQxtNPzQ=",
|
||||
"lastModified": 1761431178,
|
||||
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "906d0ac159803a7df2dc1f948df9327670380f69",
|
||||
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@
|
|||
nt.url = "git+https://tearforge.net/cry/nt";
|
||||
|
||||
cerulean = {
|
||||
# url = "github:cry128/cerulean/v0.2.5-alpha";
|
||||
url = "github:cry128/cerulean/refactor/snowflake";
|
||||
# url = "/home/me/cry/mk/cerulean";
|
||||
inputs = {
|
||||
nt.follows = "nt";
|
||||
systems.follows = "systems";
|
||||
|
|
@ -40,10 +42,12 @@
|
|||
};
|
||||
|
||||
hyprland = {
|
||||
url = "github:hyprwm/Hyprland";
|
||||
# FUCK HYPRLAND
|
||||
# url = "github:hyprwm/Hyprland/4152ac76d0813d9d0f67d2f04653a13fa6e17433";
|
||||
url = "git+https://tearforge.net/cry/Hyprland";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.follows = "nixpkgs-unstable";
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
systems.follows = "systems";
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
# Games
|
||||
upkgs.olympus # celeste
|
||||
discord
|
||||
discordo
|
||||
upkgs.ekphos
|
||||
|
||||
prismlauncher # minecraft
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
{...}: {
|
||||
{lib, ...}: {
|
||||
imports = [
|
||||
./programs.nix
|
||||
./keybinds.nix
|
||||
];
|
||||
|
||||
boot.loader = {
|
||||
|
|
@ -84,20 +83,10 @@
|
|||
alsa.support32Bit = true;
|
||||
# pulse.enable = true;
|
||||
# jack.enable = true;
|
||||
|
||||
# disable X11 bell module, which plays a sound on urgency hint
|
||||
extraConfig = {
|
||||
pipewire."99-silent-bell.conf" = {
|
||||
"context.properties" = {
|
||||
"module.x11.bell" = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# allows pipewire to use the realtime scheduler for increased performance
|
||||
security.rtkit.enable = true;
|
||||
security.rtkit.enable = true; # I *think* this is for pipewire
|
||||
|
||||
# ---- ENVIRONMENT VARIABLES ----
|
||||
environment = {
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
{...}: {
|
||||
services.keyd = {
|
||||
enable = true;
|
||||
keyboards.default = {
|
||||
ids = ["*"];
|
||||
settings = {
|
||||
main = {
|
||||
capslock = "meta";
|
||||
|
||||
# NOTE: unsure whether or not i like oneshot...
|
||||
# shift = "oneshot(shift)";
|
||||
# control = "oneshot(control)";
|
||||
# leftalt = "oneshot(alt)";
|
||||
# rightalt = "oneshot(rightalt)";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -45,7 +45,6 @@
|
|||
nix-prefetch-git
|
||||
nix-index
|
||||
nix-unit
|
||||
ns # nix-search-tv overlay
|
||||
|
||||
# Python
|
||||
python312 # I use 3.12 since it's in a pretty stable state now
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
# accept Lets Encrypt's security policy
|
||||
acme = {
|
||||
acceptTerms = true;
|
||||
defaults.email = "them@dobutterfliescry.net";
|
||||
defaults.email = "eclarkboman@gmail.com";
|
||||
};
|
||||
|
||||
# allow SSH keys for passwordless auth
|
||||
|
|
|
|||
|
|
@ -1,50 +1,36 @@
|
|||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./modules/cli/git.nix
|
||||
./modules/cli/ssh.nix
|
||||
|
||||
../modules/fish.nix
|
||||
../modules/btop.nix
|
||||
../modules/tmux.nix
|
||||
../modules/git.nix
|
||||
../modules/bat.nix
|
||||
../modules/term/foot.nix
|
||||
../modules/shell/zsh.nix
|
||||
../modules/shell/zsh.nix
|
||||
../modules/shell/fish.nix
|
||||
../modules/shell/elvish.nix
|
||||
|
||||
../modules/editor/helix.nix
|
||||
../modules/editor/neovim
|
||||
|
||||
../modules/cli/bat.nix
|
||||
../modules/cli/btop.nix
|
||||
../modules/cli/hyfetch.nix
|
||||
../modules/cli/tmux.nix
|
||||
|
||||
../modules/apps/firefox.nix
|
||||
../modules/apps/zen-browser.nix
|
||||
../modules/apps/thunderbird.nix
|
||||
../modules/apps/nixcord.nix
|
||||
../modules/apps/spicetify.nix
|
||||
|
||||
../modules/wm/hyprland
|
||||
../modules/wm/mango
|
||||
../modules/de/mako.nix
|
||||
../modules/de/waybar
|
||||
# ../modules/wm
|
||||
../modules/wm/mangowc.nix
|
||||
# ../modules/wm/hypr/hyprland.nix
|
||||
# ../modules/wm/hypr/hyprlock.nix
|
||||
../modules/kanshi.nix
|
||||
../modules/mako.nix
|
||||
];
|
||||
|
||||
programs.elvish.enable = true;
|
||||
|
||||
home = {
|
||||
shellAliases = {
|
||||
# nix
|
||||
nd = "nix develop";
|
||||
ntv = "nix-search-tv";
|
||||
rebuild = "nh os switch ~/flake";
|
||||
trybuild = "nh os test ~/flake";
|
||||
|
||||
# shell utilities
|
||||
ls = "eza --color=auto";
|
||||
l = "eza -Alh --color=auto --icons=auto";
|
||||
ll = "eza -lh --color=auto --icons=auto";
|
||||
li = "eza --color=auto --git-ignore";
|
||||
rgf = "rg --files | rg";
|
||||
watch = "viddy";
|
||||
brip = "batgrep"; # bat + ripgrep
|
||||
man = "batman"; # bat + man
|
||||
};
|
||||
|
||||
pointerCursor = {
|
||||
|
|
@ -57,13 +43,14 @@
|
|||
|
||||
packages = with pkgs; [
|
||||
# for services.gnome-keyring
|
||||
gcr # provides org.gnome.keyring.SystemPrompter
|
||||
pkgs.gcr # provides org.gnome.keyring.SystemPrompter
|
||||
seahorse # gui
|
||||
|
||||
krita
|
||||
|
||||
tor-browser
|
||||
|
||||
fuzzel
|
||||
|
||||
speedtest-cli
|
||||
];
|
||||
};
|
||||
|
|
@ -94,9 +81,98 @@
|
|||
style.name = "gtk2";
|
||||
};
|
||||
|
||||
programs = {
|
||||
hyfetch = {
|
||||
enable = true;
|
||||
settings = {
|
||||
backend = "neofetch";
|
||||
args = null;
|
||||
distro = null;
|
||||
|
||||
preset = "transfeminine"; # "nonbinary";
|
||||
pride_month_disable = false;
|
||||
custom_ascii_path = null;
|
||||
|
||||
mode = "rgb";
|
||||
light_dark = "dark";
|
||||
auto_detect_light_dark = true;
|
||||
lightness = 0.65;
|
||||
color_align = {
|
||||
mode = "horizontal";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autosuggestion.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
|
||||
history = {
|
||||
size = 10000;
|
||||
ignoreAllDups = true;
|
||||
path = "$HOME/.zsh_history";
|
||||
ignorePatterns = [
|
||||
"rm *"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# set ssh profiles
|
||||
# WARNING: this DOES NOT start the ssh-agent
|
||||
# WARNING: for that you need to use `services.ssh-agent.enable`
|
||||
ssh = {
|
||||
enable = true;
|
||||
forwardAgent = false;
|
||||
addKeysToAgent = "yes";
|
||||
|
||||
matchBlocks = {
|
||||
butterfly = {
|
||||
hostname = "dobutterfliescry.net";
|
||||
user = "cry";
|
||||
port = 42069;
|
||||
identityFile = "~/keys/butterfly";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
hyrule = {
|
||||
hostname = "hyrule.dobutterfliescry.net";
|
||||
user = "cry";
|
||||
port = 42069;
|
||||
identityFile = "~/keys/hyrule";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
matcha = {
|
||||
hostname = "192.168.88.250";
|
||||
user = "emile";
|
||||
port = 22;
|
||||
identityFile = "~/keys/matcha";
|
||||
};
|
||||
youcue = {
|
||||
hostname = "moss.labs.eait.uq.edu.au";
|
||||
user = "s4740056";
|
||||
port = 22;
|
||||
identityFile = "~/keys/other/youcue";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
# enable OpenSSH private key agent
|
||||
# ssh-agent.enable = true;
|
||||
|
||||
gnome-keyring.enable = true;
|
||||
};
|
||||
# the ssh-agent won't set this for itself...
|
||||
# systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
|
||||
|
||||
home.stateVersion = "24.05"; # don't change this
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,46 +0,0 @@
|
|||
{...}: {
|
||||
# set ssh profiles
|
||||
# WARNING: this DOES NOT start the ssh-agent
|
||||
# WARNING: for that you need to use `services.ssh-agent.enable`
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
forwardAgent = false;
|
||||
addKeysToAgent = "yes";
|
||||
|
||||
matchBlocks = {
|
||||
butterfly = {
|
||||
hostname = "dobutterfliescry.net";
|
||||
user = "cry";
|
||||
port = 42069;
|
||||
identityFile = "~/keys/butterfly";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
hyrule = {
|
||||
hostname = "hyrule.dobutterfliescry.net";
|
||||
user = "cry";
|
||||
port = 42069;
|
||||
identityFile = "~/keys/hyrule";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
matcha = {
|
||||
hostname = "192.168.88.250";
|
||||
user = "cry";
|
||||
port = 22;
|
||||
identityFile = "~/keys/matcha";
|
||||
};
|
||||
youcue = {
|
||||
hostname = "moss.labs.eait.uq.edu.au";
|
||||
user = "s4740056";
|
||||
port = 22;
|
||||
identityFile = "~/keys/other/youcue";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
30
homes/modules/ags/config.js
Executable file
30
homes/modules/ags/config.js
Executable file
|
|
@ -0,0 +1,30 @@
|
|||
import { AppLauncher } from "./widgets/applauncher.js"
|
||||
//import { Notifications } from "./widgets/notifications.js"
|
||||
|
||||
/*
|
||||
const date = Variable('', {
|
||||
poll: [1000, 'date'],
|
||||
})
|
||||
*/
|
||||
|
||||
/*
|
||||
const Bar = (monitor = 0) => Widget.Window({
|
||||
monitor,
|
||||
name: 'bar${monitor}',
|
||||
anchor: ['top', 'left', 'right'],
|
||||
child: Widget.Label({ label: date.bind() }),
|
||||
})
|
||||
*/
|
||||
|
||||
App.config({
|
||||
style: "./style.css",
|
||||
// icons: "./assets",
|
||||
windows: [
|
||||
//Bar(),
|
||||
AppLauncher,
|
||||
//Notifications()
|
||||
]
|
||||
// gtkTheme: "Adwaita-dark",
|
||||
// cursorTheme: "Qogir",
|
||||
// iconTheme: "MoreWaita",[]
|
||||
})
|
||||
12
homes/modules/ags/default.nix
Normal file
12
homes/modules/ags/default.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{pkgs, ...}: {
|
||||
programs.ags = {
|
||||
enable = true;
|
||||
configDir = ./.;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
gtksourceview
|
||||
webkitgtk
|
||||
accountsservice
|
||||
];
|
||||
};
|
||||
}
|
||||
0
homes/modules/ags/style.css
Executable file
0
homes/modules/ags/style.css
Executable file
125
homes/modules/ags/widgets/applauncher.js
Executable file
125
homes/modules/ags/widgets/applauncher.js
Executable file
|
|
@ -0,0 +1,125 @@
|
|||
const { query } = await Service.import("applications");
|
||||
const WINDOW_NAME = "applauncher";
|
||||
|
||||
const AppItem = app => Widget.Button({
|
||||
on_clicked: () => {
|
||||
App.closeWindow(WINDOW_NAME)
|
||||
app.launch()
|
||||
},
|
||||
attribute: { app },
|
||||
child: Widget.Box({
|
||||
children: [
|
||||
Widget.Icon({
|
||||
icon: app.icon_name || "",
|
||||
size: 42,
|
||||
}),
|
||||
Widget.Label({
|
||||
class_name: "title",
|
||||
label: app.name,
|
||||
xalign: 0,
|
||||
vpack: "center",
|
||||
truncate: "end",
|
||||
css: "margin-left: 10px;"
|
||||
}),
|
||||
],
|
||||
}),
|
||||
})
|
||||
|
||||
const AppLauncherWidget = ({ width = 500, height = 500, spacing = 12 }) => {
|
||||
let applications = query("").map(AppItem)
|
||||
|
||||
const list = Widget.Box({
|
||||
vertical: true,
|
||||
children: applications,
|
||||
spacing,
|
||||
})
|
||||
|
||||
function refresh() {
|
||||
applications = query("").map(AppItem)
|
||||
list.children = applications
|
||||
}
|
||||
|
||||
const entry = Widget.Entry({
|
||||
placeholder_text: "Search",
|
||||
hexpand: true,
|
||||
css: "min-height: 50px;",
|
||||
|
||||
// launch first item when Enter is pressed
|
||||
on_accept: () => {
|
||||
// only consider applications that are visible in the list
|
||||
const results = applications.filter((item) => item.visible);
|
||||
if (results[0]) {
|
||||
App.toggleWindow(WINDOW_NAME);
|
||||
results[0].attribute.app.launch()
|
||||
}
|
||||
},
|
||||
|
||||
// filter the applications based on search term
|
||||
on_change: ({ text }) => applications.forEach(item => {
|
||||
item.visible = item.attribute.app.match(text ?? "")
|
||||
}),
|
||||
})
|
||||
|
||||
return Widget.Box({
|
||||
vertical: false,
|
||||
children: [
|
||||
// LEFT
|
||||
Widget.Box({
|
||||
vertical: true,
|
||||
css: `min-width: ${width}px;`
|
||||
+ `min-height: ${height}px;`
|
||||
+ "background-image: url('https://images2.alphacoders.com/135/1351579.png');"
|
||||
+ "background-size: cover;"
|
||||
+ "background-position: center;"
|
||||
+ "background-repeat: no-repeat;",
|
||||
children: [
|
||||
// align the entry field with the app list
|
||||
Widget.Box({
|
||||
css: `margin: ${spacing * 2}px;`,
|
||||
child: entry,
|
||||
}),
|
||||
],
|
||||
}),
|
||||
|
||||
// RIGHT
|
||||
Widget.Box({
|
||||
vertical: true,
|
||||
css: `margin: ${spacing * 2}px;`,
|
||||
child:
|
||||
// make scrollable
|
||||
Widget.Scrollable({
|
||||
hscroll: "never",
|
||||
css: `min-width: ${width}px; min-height: ${height}px;`,
|
||||
child: list,
|
||||
}),
|
||||
|
||||
setup: self => self.hook(App, (_, windowName, visible) => {
|
||||
if (windowName !== WINDOW_NAME)
|
||||
return
|
||||
|
||||
// when the launcher becomes visible
|
||||
if (visible) {
|
||||
refresh()
|
||||
entry.text = ""
|
||||
entry.grab_focus()
|
||||
}
|
||||
}),
|
||||
}),
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
// the app launcher should be a singleton
|
||||
export const AppLauncher = Widget.Window({
|
||||
name: WINDOW_NAME,
|
||||
setup: self => self.keybind("Escape", () => {
|
||||
App.closeWindow(WINDOW_NAME)
|
||||
}),
|
||||
visible: false,
|
||||
keymode: "exclusive",
|
||||
child: AppLauncherWidget({
|
||||
width: 500,
|
||||
height: 500,
|
||||
spacing: 12,
|
||||
}),
|
||||
})
|
||||
38
homes/modules/ags/widgets/bar.ts
Executable file
38
homes/modules/ags/widgets/bar.ts
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
import options from "options"p
|
||||
|
||||
const { start, center, end } = options.bar.layout
|
||||
|
||||
// place all your bar widgets in here
|
||||
const widgets = {
|
||||
expander: () => Widget.Box({ expand: true}),
|
||||
}
|
||||
|
||||
|
||||
//export type BarWidget = keyof typeof widget;
|
||||
|
||||
export default (monitor: number) => Widget.Window({
|
||||
monitor,
|
||||
class_name: "bar",
|
||||
name: "bar-${monitor}",
|
||||
// anchor: position.bind().as(pos => [pos, "left", "right"]),
|
||||
anchor: ["top", "left", "right"],
|
||||
child: Widget.CenterBox({
|
||||
// ensure bar is shown
|
||||
css: "min-width: 2px; min-height: 2px;"
|
||||
startWidget: Widget.Box({
|
||||
hexpand: true,
|
||||
// map all start widgets to be childen
|
||||
childen: start.bind().as(s => s.map(w => widgets[w]()))
|
||||
}),
|
||||
centerWidget: Widget.Box({
|
||||
hpack: "center",
|
||||
// map all center widgets to be childen
|
||||
childen: center.bind().as(c => c.map(w => widgets[w]()))
|
||||
}),
|
||||
endWidget: Widget.Box({
|
||||
hexpand: true
|
||||
// map all end widgets to be childen
|
||||
childen: end.bind().as(e => e.map(w => widgets[w]()))
|
||||
}),
|
||||
})
|
||||
})
|
||||
23
homes/modules/ags/widgets/fullscreen.js
Executable file
23
homes/modules/ags/widgets/fullscreen.js
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
const WINDOW_NAME = "fullscreen";
|
||||
|
||||
const Fullscreen = (children) => Widget.Box({
|
||||
vertical: true,
|
||||
css: "background-image: url('~/downloads/wallpaper/kill-my-firstborn/astronaut-pink-blue.png');",
|
||||
//+ "background-size: cover;"
|
||||
//+ "background-position: center;"
|
||||
//+ "background-repeat: no-repeat;",
|
||||
children: children,
|
||||
})
|
||||
|
||||
export const fullscreen = Widget.Window({
|
||||
name: WINDOW_NAME,
|
||||
setup: self => self.keybind("Escape", () => {
|
||||
App.closeWindow(WINDOW_NAME)
|
||||
}),
|
||||
anchor: ["top", "bottom", "left", "right"],
|
||||
visible: false,
|
||||
keymode: "exclusive",
|
||||
child: Fullscreen(
|
||||
Widget.Label({"Hello World"});
|
||||
)
|
||||
})
|
||||
122
homes/modules/ags/widgets/notifications.js
Normal file
122
homes/modules/ags/widgets/notifications.js
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
const notifications = await Service.import("notifications");
|
||||
|
||||
function NotificationIcon({ app_entry, app_icon, image}) {
|
||||
if (image) {
|
||||
return Widget.Box({
|
||||
css: `background-image: url("${image}");`
|
||||
+ "background-size: contain;"
|
||||
+ "background-repeat: no-repeat;"
|
||||
+ "background-position: center;"
|
||||
})
|
||||
}
|
||||
|
||||
let icon = "dialog-information-symbolic"
|
||||
if (Utils.lookUpIcon(app_icon))
|
||||
icon = app_icon
|
||||
|
||||
if (app_entry && Utils.lookUpIcon(app_entry))
|
||||
icon = app_entry
|
||||
|
||||
return Widget.Box({
|
||||
child: Widget.Icon(icon),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function Notification(n) {
|
||||
const icon = Widget.Box({
|
||||
vpack: "start",
|
||||
class_name: "icon",
|
||||
child: NotificationIcon(n),
|
||||
})
|
||||
|
||||
const title = Widget.Label({
|
||||
class_name: "title",
|
||||
xalign: 0,
|
||||
justification: "left",
|
||||
hexpand: true,
|
||||
max_width_chars: 24,
|
||||
truncate: "end",
|
||||
wrap: true,
|
||||
label: n.summary,
|
||||
use_markup: true,
|
||||
})
|
||||
|
||||
const body = Widget.Label({
|
||||
class_name: "body",
|
||||
hexpand: true,
|
||||
use_markup: true,
|
||||
xalign: 0,
|
||||
justification: "left",
|
||||
label: n.body,
|
||||
wrap: true,
|
||||
})
|
||||
|
||||
const actions = Widget.Box({
|
||||
class_name: "actions",
|
||||
children: n.actions.map(({ id, label}) => Widget.Button({
|
||||
class_name: "action-button",
|
||||
on_clicked: () => {
|
||||
n.invoke(id),
|
||||
n.dismiss()
|
||||
},
|
||||
hexpand: true,
|
||||
child: Widget.Label(label),
|
||||
})),
|
||||
})
|
||||
|
||||
return Widget.EventBox(
|
||||
{
|
||||
attribute: {id: n.id},
|
||||
on_primary_click: n.dismiss,
|
||||
},
|
||||
Widget.Box(
|
||||
{
|
||||
class_name: `notification ${n.urgency}`,
|
||||
vertical: true,
|
||||
},
|
||||
Widget.Box([
|
||||
icon,
|
||||
Widget.Box(
|
||||
{ vertical: true },
|
||||
title,
|
||||
body,
|
||||
),
|
||||
]),
|
||||
actions,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
export function Notifications(monitor = 0) {
|
||||
const list = Widget.Box({
|
||||
vertical: true,
|
||||
children: notifications.popups.map(Notification),
|
||||
})
|
||||
|
||||
function onNotified(_, id) {
|
||||
const n = notifications.getNotification(id)
|
||||
if (n)
|
||||
list.children = [Notification(n), ...list.children]
|
||||
}
|
||||
|
||||
function onDismissed(_, id) {
|
||||
list.children.find(n => n.attribute.id === id)?.destroy()
|
||||
}
|
||||
|
||||
list.hook(notifications, onNotified, "notified")
|
||||
.hook(notifications, onDismissed, "dismissed")
|
||||
|
||||
return Widget.Window({
|
||||
monitor,
|
||||
class_name: "notifications-widget",
|
||||
name: `notifications-${monitor}`,
|
||||
anchor: ["top", "left"],
|
||||
child: Widget.Box({
|
||||
css: "min-width: 2px; min-height: 2px;",
|
||||
class_name: "notifications",
|
||||
vertical: true,
|
||||
child: list,
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
|
@ -1,16 +1,8 @@
|
|||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
{inputs, ...}: {
|
||||
imports = [
|
||||
inputs.nixcord.homeModules.nixcord
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
discordo
|
||||
];
|
||||
|
||||
programs.nixcord = {
|
||||
enable = true;
|
||||
equibop.enable = true;
|
||||
|
|
@ -26,7 +18,6 @@
|
|||
"base16-colors.css"
|
||||
];
|
||||
plugins = {
|
||||
invisibleChat.enable = true;
|
||||
anonymiseFileNames = {
|
||||
enable = true;
|
||||
anonymiseByDefault = true;
|
||||
|
|
@ -58,7 +49,7 @@
|
|||
separatedDiffs = false;
|
||||
};
|
||||
fakeNitro.enable = true;
|
||||
ghosted.enable = false;
|
||||
ghosted.enable = true;
|
||||
noF1.enable = true;
|
||||
noMaskedUrlPaste.enable = true;
|
||||
messageLatency = {
|
||||
|
|
@ -77,6 +68,7 @@
|
|||
forwardAnywhere.enable = true;
|
||||
spotifyCrack.enable = true;
|
||||
spotifyShareCommands.enable = true;
|
||||
spotifyControls.enable = true;
|
||||
fullUserInChatbox.enable = true;
|
||||
gifPaste.enable = true;
|
||||
ignoreActivities = {
|
||||
|
|
@ -104,11 +96,6 @@
|
|||
revealAllSpoilers.enable = true;
|
||||
serverInfo.enable = true;
|
||||
serverListIndicators.enable = true;
|
||||
musicControls = {
|
||||
enable = true;
|
||||
showSpotifyControls = true;
|
||||
showSpotifyLyrics = true;
|
||||
};
|
||||
showHiddenChannels.enable = true;
|
||||
showHiddenThings.enable = true;
|
||||
showTimeoutDuration = {
|
||||
|
|
@ -146,6 +133,7 @@
|
|||
whoReacted.enable = true;
|
||||
whosWatching.enable = true;
|
||||
quickReply.enable = true;
|
||||
questCompleter.enable = true;
|
||||
shikiCodeblocks = {
|
||||
enable = true;
|
||||
useDevIcon = "COLOR";
|
||||
|
|
|
|||
24
homes/modules/bat.nix
Executable file
24
homes/modules/bat.nix
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# like `/bin/cat` but with syntax highlighting
|
||||
# TODO: change the pager (maybe use Github:sachaos/viddy instead)
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
config = {
|
||||
pager = "less -FR";
|
||||
theme = "Dracula";
|
||||
};
|
||||
};
|
||||
|
||||
# other commands that make normal utils prettier
|
||||
home.packages = with pkgs.bat-extras; [
|
||||
batdiff
|
||||
batgrep
|
||||
batman
|
||||
batwatch
|
||||
prettybat
|
||||
];
|
||||
}
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
let
|
||||
# Module Meta Configuration
|
||||
setShellAliases = true;
|
||||
supportBash = true;
|
||||
supportZsh = true;
|
||||
supportFish = true;
|
||||
in
|
||||
{
|
||||
osConfig,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(builtins)
|
||||
elemAt
|
||||
;
|
||||
|
||||
inherit
|
||||
(lib)
|
||||
flip
|
||||
mkIf
|
||||
optional
|
||||
splitString
|
||||
;
|
||||
|
||||
cfg = config.programs.bat;
|
||||
|
||||
# NOTE: `<derivation>.pname` can be used instead of `<derivation>.meta.mainProgram`
|
||||
# NOTE: but then `pkgs.bash` would return `"bash-interactive"` which is annoying...
|
||||
shellPkg = osConfig.users.users.${username}.shell;
|
||||
shell = shellPkg.meta.mainProgram;
|
||||
|
||||
pager =
|
||||
cfg.config.pager
|
||||
|> splitString " "
|
||||
|> flip elemAt 0;
|
||||
in {
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
config = {
|
||||
# WARNING: pager must be set for this module to function
|
||||
# NOTE: not sure whether to use ov/moor/viddy as my pager?
|
||||
pager = "less -FR";
|
||||
# theme = "Dracula";
|
||||
};
|
||||
};
|
||||
|
||||
home = {
|
||||
shellAliases = mkIf setShellAliases {
|
||||
bat = "prettybat";
|
||||
cat = "prettybat";
|
||||
diff = "batdiff";
|
||||
brg = "batgrep";
|
||||
man = "batman";
|
||||
# watch = "batwatch"; # NOTE: using viddy instead atm
|
||||
};
|
||||
|
||||
sessionVariables = {
|
||||
PAGER = pager;
|
||||
|
||||
# REF: https://github.com/eth-p/bat-extras/blob/master/doc/batpipe.md
|
||||
BATPIPE_ENABLE_COLOR = "true";
|
||||
BATPIPE_INSIDE_LESS = "true";
|
||||
BATPIPE_TERM_WIDTH = "-"; # hyphone -> auto detect
|
||||
};
|
||||
|
||||
packages = with pkgs.bat-extras;
|
||||
[
|
||||
batdiff
|
||||
batgrep
|
||||
batman
|
||||
batpipe
|
||||
batwatch
|
||||
prettybat
|
||||
]
|
||||
++ (with pkgs; [
|
||||
bat
|
||||
entr # required by pkgs.bat-extras.batwatch
|
||||
ripgrep # required by pkgs.bat-extras.batgrep
|
||||
delta # required by pkgs.bat-extras.batdiff
|
||||
])
|
||||
++ optional (pkgs?${pager}) pkgs.${pager};
|
||||
};
|
||||
|
||||
# Configure the user's shell to source batpipe
|
||||
# WARNING: only currently supports bash, zsh, & fish
|
||||
programs = {
|
||||
bash = mkIf (supportBash || shell == "bash") {
|
||||
initExtra = ''
|
||||
eval "$(batpipe)"
|
||||
'';
|
||||
};
|
||||
|
||||
zsh = mkIf (supportZsh || shell == "zsh") {
|
||||
initContent = ''
|
||||
eval "$(batpipe)"
|
||||
'';
|
||||
};
|
||||
|
||||
fish = mkIf (supportFish || shell == "fish") {
|
||||
interactiveShellInit = ''
|
||||
eval (batpipe)
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
{...}: {
|
||||
programs.hyfetch = {
|
||||
enable = true;
|
||||
settings = {
|
||||
backend = "neofetch";
|
||||
args = null;
|
||||
distro = null;
|
||||
|
||||
preset = "transfeminine"; # "nonbinary";
|
||||
pride_month_disable = false;
|
||||
custom_ascii_path = null;
|
||||
|
||||
mode = "rgb";
|
||||
light_dark = "dark";
|
||||
auto_detect_light_dark = true;
|
||||
lightness = 0.65;
|
||||
color_align = {
|
||||
mode = "horizontal";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
@define-color colorbg #26233a;
|
||||
@define-color colorfg #eb6f92;
|
||||
|
||||
@define-color color00 #26233a; /* black (Overlay) */
|
||||
@define-color color01 #eb6f92; /* red (Love) */
|
||||
@define-color color02 #9ccfd8; /* green (Foam) */
|
||||
@define-color color03 #f6c177; /* yellow (Gold) */
|
||||
@define-color color04 #31748f; /* blue (Pine) */
|
||||
@define-color color05 #c4a7e7; /* magenta (Iris) */
|
||||
@define-color color06 #ebbcba; /* cyan (Rose) */
|
||||
@define-color color07 #e0def4; /* white (Text) */
|
||||
@define-color color08 #47435d; /* bright black (lighter Overlay) */
|
||||
@define-color color09 #ff98ba; /* bright red (lighter Love) */
|
||||
@define-color color10 #c5f9ff; /* bright green (lighter Foam) */
|
||||
@define-color color11 #ffeb9e; /* bright yellow (lighter Gold) */
|
||||
@define-color color12 #5b9ab7; /* bright blue (lighter Pine) */
|
||||
@define-color color13 #eed0ff; /* bright magenta (lighter Iris) */
|
||||
@define-color color14 #ffe5e3; /* bright cyan (lighter Rose) */
|
||||
@define-color color15 #fefcff; /* bright white (lighter Text) */
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
{...}: {
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
settings = {
|
||||
mainBar = {
|
||||
layer = "top";
|
||||
position = "top";
|
||||
height = 30;
|
||||
|
||||
modules-left = ["hyprland/workspaces"];
|
||||
modules-center = ["clock"];
|
||||
modules-right = ["cpu" "memory" "network" "pulseaudio" "privacy" "tray"];
|
||||
|
||||
# left
|
||||
"hyprland/workspaces" = {
|
||||
format = "{id}";
|
||||
};
|
||||
"ext/workspaces" = {
|
||||
# not enabled yet, hyprland and mango need two different configs ;-;
|
||||
format = "{id}";
|
||||
ignore-hidden = true;
|
||||
on-click = "activate";
|
||||
};
|
||||
|
||||
# center
|
||||
"clock" = {
|
||||
format = "{:%b %a | %d %r}";
|
||||
interval = 1;
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
# right
|
||||
"cpu" = {
|
||||
format = " {usage}%";
|
||||
interval = 1;
|
||||
};
|
||||
"memory" = {
|
||||
format = " {used:0.1f} / {total:0.1f} GiB";
|
||||
interval = 1;
|
||||
};
|
||||
"network" = {
|
||||
format = "{bandwidthUpBits} {bandwidthDownBits} {ifname}";
|
||||
format-wifi = " {bandwidthUpBits} {bandwidthDownBits} {ifname}";
|
||||
format-ethernet = " {bandwidthUpBits} {bandwidthDownBits} {ifname}";
|
||||
format-disconnected = "no internet ~ rawr! ~ ;w;"; # empty format hides module
|
||||
interval = 1;
|
||||
max-length = 32;
|
||||
};
|
||||
"pulseaudio" = {
|
||||
format = "{icon} {volume}%";
|
||||
format-muted = " {volume}%";
|
||||
format-icons = {
|
||||
default = [
|
||||
""
|
||||
""
|
||||
""
|
||||
];
|
||||
};
|
||||
"scroll-step" = 5;
|
||||
};
|
||||
"privacy" = {
|
||||
icon-size = 12;
|
||||
icon-spacing = 5;
|
||||
transition-duration = 200;
|
||||
modules = [
|
||||
{
|
||||
type = "screenshare";
|
||||
tooltip = true;
|
||||
tooltip-icon-size = 12;
|
||||
}
|
||||
{
|
||||
type = "audio-in";
|
||||
tooltip = true;
|
||||
tooltip-icon-size = 12;
|
||||
}
|
||||
];
|
||||
};
|
||||
"tray" = {
|
||||
icon-size = 12;
|
||||
spacing = 10;
|
||||
# fixes spotify not showing up when "close button should minimize the Spotify window" is false
|
||||
show-passive-items = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
style =
|
||||
builtins.readFile ./colors.css
|
||||
+ builtins.readFile ./style.css;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,165 +0,0 @@
|
|||
* {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
font-family: 'GeistMono Nerd Font';
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
min-height: 10px;
|
||||
}
|
||||
window#waybar {
|
||||
background: rgba(0, 0, 0, 0);
|
||||
}
|
||||
/*
|
||||
adds a margin around the edge of the taskbar, surrounding the modules,
|
||||
spacing it out from the edge of the screen and windows below
|
||||
*/
|
||||
window#waybar > box {
|
||||
margin: 0px 12px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background: @colorbg;
|
||||
color: @colorfg;
|
||||
opacity: 0.9;
|
||||
padding: 4px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid @color01;
|
||||
}
|
||||
tooltip label {
|
||||
background: rgba(0, 0, 0, 0);
|
||||
color: @colorfg;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#memory,
|
||||
#network,
|
||||
#workspaces,
|
||||
#taskbar,
|
||||
#cpu,
|
||||
#pulseaudio,
|
||||
#privacy,
|
||||
#tray,
|
||||
#custom-media {
|
||||
background: @colorbg;
|
||||
color: @colorfg;
|
||||
opacity: 0.9;
|
||||
padding: 4px 16px;
|
||||
border-radius: 32px;
|
||||
border: 1px solid @color01;
|
||||
}
|
||||
|
||||
/*
|
||||
left-side modules
|
||||
*/
|
||||
#workspaces,
|
||||
#taskbar,
|
||||
#custom-media {
|
||||
margin: 4px 4px 4px 0px;
|
||||
}
|
||||
|
||||
/*
|
||||
center modules
|
||||
*/
|
||||
#clock {
|
||||
margin: 4px 0px 4px 0px;
|
||||
}
|
||||
|
||||
/*
|
||||
right-side modules
|
||||
*/
|
||||
#memory,
|
||||
#network,
|
||||
#cpu,
|
||||
#pulseaudio,
|
||||
#tray,
|
||||
#privacy {
|
||||
margin: 4px 0px 4px 4px;
|
||||
}
|
||||
|
||||
#workspaces,
|
||||
#taskbar {
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#taskbar.empty {
|
||||
opacity: 0;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
border: none;
|
||||
}
|
||||
#tray.empty {
|
||||
opacity: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/*
|
||||
connects the workspace and taskbar together :3
|
||||
*/
|
||||
/*
|
||||
#workspaces {
|
||||
margin: 4px 0px 4px 12px;
|
||||
padding: 0px 8px 0px 0px;
|
||||
border-radius: 100px 0px 0px 100px;
|
||||
border-width: 1px 0px 1px 1px;
|
||||
}
|
||||
#taskbar {
|
||||
margin: 4px 0px 4px 0px;
|
||||
padding: 0px 0px 0px 8px;
|
||||
border-radius: 0px 100px 100px 0px;
|
||||
}
|
||||
*/
|
||||
|
||||
#cpu {
|
||||
margin: 4px 0 4px 0;
|
||||
border-radius: 32px 0px 0px 32px;
|
||||
}
|
||||
#memory {
|
||||
margin: 4px 0 4px 0;
|
||||
border-radius: 0px;
|
||||
border-width: 1px 0px 1px 0px;
|
||||
}
|
||||
#network {
|
||||
margin: 4px 0 4px 0;
|
||||
border-radius: 0px 32px 32px 0px;
|
||||
min-width: 100px; /* surely there's a better way to fix the size? */
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 2px 4px;
|
||||
border-radius: 32px;
|
||||
color: @colorfg;
|
||||
}
|
||||
#workspaces button:hover {
|
||||
background: @colorfg;
|
||||
color: @colorbg;
|
||||
opacity: 0.8;
|
||||
}
|
||||
#workspaces button.active {
|
||||
background: @colorfg;
|
||||
color: @colorbg;
|
||||
}
|
||||
|
||||
#taskbar button {
|
||||
padding: 2px 4px;
|
||||
border-radius: 32px;
|
||||
color: @colorfg;
|
||||
}
|
||||
#taskbar button:hover {
|
||||
background: @colorfg;
|
||||
color: @colorbg;
|
||||
opacity: 0.8;
|
||||
}
|
||||
#taskbar button.active {
|
||||
background: @colorfg;
|
||||
color: @colorbg;
|
||||
}
|
||||
/*
|
||||
icons in each button on the taskbar to correct
|
||||
for them not being properly centred sometimes :3
|
||||
*/
|
||||
#taskbar button box image {
|
||||
padding-left: 2px;
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
vscodium ? false,
|
||||
|
|
@ -19,7 +20,7 @@
|
|||
homepage ? null,
|
||||
changelog ? null,
|
||||
license ? null,
|
||||
maintainers ? [],
|
||||
maintainers ? [lib.maintainers.emileclarkb],
|
||||
}:
|
||||
with pkgs.vscode-utils.buildVscodeMarketplaceExtension; {
|
||||
${publisher}.${name} = buildVscodeMarketplaceExtension {
|
||||
|
|
|
|||
90
homes/modules/fish.nix
Executable file
90
homes/modules/fish.nix
Executable file
|
|
@ -0,0 +1,90 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
options = {
|
||||
morphBashToFish = lib.mkEnableOption "morphBashToFish";
|
||||
};
|
||||
|
||||
# TODO: make the greeting controllable (ie so my VPS can be different)
|
||||
config = {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
generateCompletions = true;
|
||||
|
||||
# vendor = {
|
||||
# config.enable = true;
|
||||
# functions.enable = true;
|
||||
# completions.enable = true;
|
||||
# };
|
||||
|
||||
interactiveShellInit = let
|
||||
greetings =
|
||||
[
|
||||
"Welcome weary traveller to my shop"
|
||||
"It's dangerous to go alone! Take this."
|
||||
"Do butterflies cry when they're sad?"
|
||||
"I hope they do"
|
||||
"I think Alice is lost..."
|
||||
"I once again retreat to the sanctuary of my virtual realm"
|
||||
|
||||
"Something wicked this way comes"
|
||||
"May your L's be many... and your bitches few"
|
||||
|
||||
"What a horrible night to have a curse."
|
||||
"The ancient spirits of light and dark have been released."
|
||||
"The god of the stars rejects your offering. The ritual can only be performed at night."
|
||||
"You should have just died..."
|
||||
"Supreme Witch, Calamitas has killed every player!"
|
||||
|
||||
"A broken heart beats in fractals" # Key Fairy
|
||||
|
||||
"Remember our promise" # Signalis
|
||||
]
|
||||
|> map (x: "\"${x}\"")
|
||||
|> builtins.concatStringsSep " ";
|
||||
in ''
|
||||
# add dotnet completions if it exists (ie we're in a virtual environment)
|
||||
if type -q dotnet
|
||||
complete -f -c dotnet -a "(dotnet complete (commandline -cp))"
|
||||
end
|
||||
|
||||
function rand_greet
|
||||
set greetings ${greetings}
|
||||
echo -n $greetings[(random 1 (count $greetings))]
|
||||
end
|
||||
|
||||
function gitignore -a type
|
||||
curl -sL "https://www.gitignore.io/api/$type"
|
||||
end
|
||||
|
||||
# ripgrep on files
|
||||
function rgf
|
||||
rg --files | rg $args
|
||||
end
|
||||
|
||||
set -g fish_greeting (rand_greet)
|
||||
|
||||
|
||||
'';
|
||||
|
||||
shellAliases = {
|
||||
brip = "batgrep"; # bat + ripgrep
|
||||
man = "batman"; # bat + man
|
||||
ls = "eza --color=auto";
|
||||
l = "eza -Alh --color=auto --icons=auto";
|
||||
ll = "eza -lh --color=auto --icons=auto";
|
||||
li = "eza --color=auto --git-ignore";
|
||||
};
|
||||
|
||||
plugins = [
|
||||
{
|
||||
name = "grc";
|
||||
src = pkgs.fishPlugins.grc.src;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
{...}: {
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Change monitor positions
|
||||
# TODO: find a way to make this modular (ie put something different for my laptop)
|
||||
# my idea is to have a "monitors" module and use kanshi for wayland
|
||||
services.kanshi = {
|
||||
enable = false;
|
||||
enable = true;
|
||||
systemdTarget = "hyprland-session.target";
|
||||
# You can find your monitors in hyprland by using `hyprctl monitors all`
|
||||
settings = [
|
||||
|
|
@ -1,8 +1,4 @@
|
|||
{
|
||||
lib,
|
||||
hostname,
|
||||
...
|
||||
}: let
|
||||
{...}: let
|
||||
dracula = rec {
|
||||
background = "#282A36";
|
||||
border = cyan;
|
||||
|
|
@ -19,7 +15,6 @@ in {
|
|||
enable = true;
|
||||
settings = {
|
||||
actions = true;
|
||||
output = lib.optionalString (hostname == "myputer") "DP-2";
|
||||
anchor = "top-right";
|
||||
layer = "overlay";
|
||||
sort = "-time";
|
||||
|
|
@ -41,7 +36,7 @@ in {
|
|||
ignore-timeout = false;
|
||||
|
||||
"actionable=true" = {
|
||||
anchor = "top-right";
|
||||
anchor = "top-left";
|
||||
};
|
||||
|
||||
"urgency=low" = {
|
||||
13
homes/modules/rofi.nix
Executable file
13
homes/modules/rofi.nix
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
programs.rofi = {
|
||||
enable = true;
|
||||
package = pkgs.rofi-wayland;
|
||||
font = "JetBrains Mono Nerd Font 10";
|
||||
location = "center";
|
||||
terminal = "${pkgs.rio}/bin/rio";
|
||||
};
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
{osConfig, ...}: {
|
||||
assertions = [
|
||||
{
|
||||
assertion = !osConfig.services.gnupg.agent.enable;
|
||||
message = ''
|
||||
It is not recommended to enable both `homeConfig.services.ssh-agent.enable` and `osConfig.services.gnupg.agent.enable`!
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
# enable OpenSSH private key agent
|
||||
services.ssh-agent.enable = true;
|
||||
|
||||
# WARNING: the ssh-agent won't set this for itself...
|
||||
systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.programs.elvish;
|
||||
in {
|
||||
options.programs.elvish = {
|
||||
enable = lib.mkEnableOption "elvish";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home = {
|
||||
packages = with pkgs; [elvish];
|
||||
|
||||
file.".elvish/nix.elv".source = let
|
||||
elvish-modules = pkgs.fetchFromGitHub {
|
||||
owner = "zzamboni";
|
||||
repo = "elvish-modules";
|
||||
rev = "9005c970346ab06214b3cd3ed3e70f04f3c632ba";
|
||||
hash = "sha256-/Dwtl12QzPvMoMMGoj+v3dwX2ZwFT8t/bohVy1zDE0c=";
|
||||
};
|
||||
in
|
||||
builtins.toPath "${elvish-modules}/nix.elv";
|
||||
# /${builtins.toPath elvish-modules.outPath}/nix.elv;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
generateCompletions = true;
|
||||
|
||||
interactiveShellInit = let
|
||||
greetings =
|
||||
[
|
||||
# Official _cry64 quotes
|
||||
"Do butterflies cry when they're sad?"
|
||||
"I hope they do"
|
||||
"I think Alice is lost..."
|
||||
"I once again retreat to the sanctuary of my virtual realm"
|
||||
|
||||
# Unknown
|
||||
"Welcome weary traveler to my shop"
|
||||
|
||||
# Legend of Zelda
|
||||
"It's dangerous to go alone! Take this."
|
||||
|
||||
# ULTRAKILL
|
||||
"Something wicked this way comes"
|
||||
"May your L's be many... and your bitches few"
|
||||
|
||||
# Terraria
|
||||
"What a horrible night to have a curse."
|
||||
"The ancient spirits of light and dark have been released."
|
||||
|
||||
# Calamity
|
||||
"The god of the stars rejects your offering. The ritual can only be performed at night."
|
||||
"You should have just died..."
|
||||
"Supreme Witch, Calamitas has killed every player!"
|
||||
|
||||
# Key Fairy
|
||||
"A broken heart beats in fractals"
|
||||
|
||||
# Signalis
|
||||
"Remember our promise"
|
||||
]
|
||||
|> map (x: "\"${x}\"")
|
||||
|> builtins.concatStringsSep " ";
|
||||
in ''
|
||||
# add dotnet completions if it exists (ie we're in a virtual environment)
|
||||
if type -q dotnet
|
||||
complete -f -c dotnet -a "(dotnet complete (commandline -cp))"
|
||||
end
|
||||
|
||||
function rand_greet
|
||||
set greetings ${greetings}
|
||||
echo -n $greetings[(random 1 (count $greetings))]
|
||||
end
|
||||
|
||||
function gitignore -a type
|
||||
curl -sL "https://www.gitignore.io/api/$type"
|
||||
end
|
||||
|
||||
function decompile
|
||||
objdump --disassemble --demangle --debugging --debugging-tags $argv | bat --language asm
|
||||
end
|
||||
|
||||
set -g fish_greeting (rand_greet)
|
||||
'';
|
||||
|
||||
plugins = [
|
||||
{
|
||||
name = "grc";
|
||||
src = pkgs.fishPlugins.grc.src;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{...}: {
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autosuggestion.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
|
||||
history = {
|
||||
size = 10000;
|
||||
ignoreAllDups = true;
|
||||
path = "$HOME/.zsh_history";
|
||||
ignorePatterns = [
|
||||
"rm *"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
9
homes/modules/term/default.nix
Normal file
9
homes/modules/term/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options = {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,8 @@
|
|||
{pkgs, ...}: {
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home = {
|
||||
packages = [
|
||||
pkgs.rio
|
||||
|
|
|
|||
209
homes/modules/theme.rasi
Executable file
209
homes/modules/theme.rasi
Executable file
|
|
@ -0,0 +1,209 @@
|
|||
/**
|
||||
*
|
||||
* Author : Aditya Shakya (adi1090x)
|
||||
* Github : @adi1090x
|
||||
*
|
||||
* Rofi Theme File
|
||||
* Rofi Version: 1.7.3
|
||||
**/
|
||||
|
||||
/*****----- Configuration -----*****/
|
||||
configuration {
|
||||
modi: "drun,run,filebrowser,window";
|
||||
show-icons: true;
|
||||
display-drun: "APPS";
|
||||
display-run: "RUN";
|
||||
display-filebrowser: "FILES";
|
||||
display-window: "WINDOW";
|
||||
drun-display-format: "{name}";
|
||||
window-format: "{w} · {c} · {t}";
|
||||
}
|
||||
|
||||
/*****----- Global Properties -----*****/
|
||||
* {
|
||||
font: "JetBrains Mono Nerd Font 10";
|
||||
background: #11092D;
|
||||
background-alt: #281657;
|
||||
foreground: #FFFFFF;
|
||||
selected: #DF5296;
|
||||
active: #6E77FF;
|
||||
urgent: #8E3596;
|
||||
}
|
||||
|
||||
/*****----- Main Window -----*****/
|
||||
window {
|
||||
/* properties for window widget */
|
||||
transparency: "real";
|
||||
location: center;
|
||||
anchor: center;
|
||||
fullscreen: false;
|
||||
width: 1000px;
|
||||
x-offset: 0px;
|
||||
y-offset: 0px;
|
||||
|
||||
/* properties for all widgets */
|
||||
enabled: true;
|
||||
border-radius: 15px;
|
||||
cursor: "default";
|
||||
background-color: @background;
|
||||
}
|
||||
|
||||
/*****----- Main Box -----*****/
|
||||
mainbox {
|
||||
enabled: true;
|
||||
spacing: 0px;
|
||||
background-color: transparent;
|
||||
orientation: horizontal;
|
||||
children: [ "imagebox", "listbox" ];
|
||||
}
|
||||
|
||||
imagebox {
|
||||
padding: 20px;
|
||||
background-color: transparent;
|
||||
background-image: url("~/.config/rofi/images/j.jpg", height);
|
||||
orientation: vertical;
|
||||
children: [ "inputbar", "dummy", "mode-switcher" ];
|
||||
}
|
||||
|
||||
listbox {
|
||||
spacing: 20px;
|
||||
padding: 20px;
|
||||
background-color: transparent;
|
||||
orientation: vertical;
|
||||
children: [ "message", "listview" ];
|
||||
}
|
||||
|
||||
dummy {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/*****----- Inputbar -----*****/
|
||||
inputbar {
|
||||
enabled: true;
|
||||
spacing: 10px;
|
||||
padding: 15px;
|
||||
border-radius: 10px;
|
||||
background-color: @background-alt;
|
||||
text-color: @foreground;
|
||||
children: [ "textbox-prompt-colon", "entry" ];
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
enabled: true;
|
||||
expand: false;
|
||||
str: "";
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
entry {
|
||||
enabled: true;
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
cursor: text;
|
||||
placeholder: "Search";
|
||||
placeholder-color: inherit;
|
||||
}
|
||||
|
||||
/*****----- Mode Switcher -----*****/
|
||||
mode-switcher{
|
||||
enabled: true;
|
||||
spacing: 20px;
|
||||
background-color: transparent;
|
||||
text-color: @foreground;
|
||||
}
|
||||
button {
|
||||
padding: 15px;
|
||||
border-radius: 10px;
|
||||
background-color: @background-alt;
|
||||
text-color: inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
button selected {
|
||||
background-color: @selected;
|
||||
text-color: @foreground;
|
||||
}
|
||||
|
||||
/*****----- Listview -----*****/
|
||||
listview {
|
||||
enabled: true;
|
||||
columns: 1;
|
||||
lines: 8;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
scrollbar: false;
|
||||
layout: vertical;
|
||||
reverse: false;
|
||||
fixed-height: true;
|
||||
fixed-columns: true;
|
||||
|
||||
spacing: 10px;
|
||||
background-color: transparent;
|
||||
text-color: @foreground;
|
||||
cursor: "default";
|
||||
}
|
||||
|
||||
/*****----- Elements -----*****/
|
||||
element {
|
||||
enabled: true;
|
||||
spacing: 15px;
|
||||
padding: 8px;
|
||||
border-radius: 10px;
|
||||
background-color: transparent;
|
||||
text-color: @foreground;
|
||||
cursor: pointer;
|
||||
}
|
||||
element normal.normal {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
element normal.urgent {
|
||||
background-color: @urgent;
|
||||
text-color: @foreground;
|
||||
}
|
||||
element normal.active {
|
||||
background-color: @active;
|
||||
text-color: @foreground;
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: @selected;
|
||||
text-color: @foreground;
|
||||
}
|
||||
element selected.urgent {
|
||||
background-color: @urgent;
|
||||
text-color: @foreground;
|
||||
}
|
||||
element selected.active {
|
||||
background-color: @urgent;
|
||||
text-color: @foreground;
|
||||
}
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 32px;
|
||||
cursor: inherit;
|
||||
}
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
cursor: inherit;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.0;
|
||||
}
|
||||
|
||||
/*****----- Message -----*****/
|
||||
message {
|
||||
background-color: transparent;
|
||||
}
|
||||
textbox {
|
||||
padding: 15px;
|
||||
border-radius: 10px;
|
||||
background-color: @background-alt;
|
||||
text-color: @foreground;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.0;
|
||||
}
|
||||
error-message {
|
||||
padding: 15px;
|
||||
border-radius: 20px;
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
39
homes/modules/wm/default.nix
Normal file
39
homes/modules/wm/default.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(lib)
|
||||
mkEnableOption
|
||||
mkOption
|
||||
types
|
||||
;
|
||||
in {
|
||||
imports = [
|
||||
./hypr/hyprland.nix
|
||||
./mangowc.nix
|
||||
];
|
||||
|
||||
options.cryos = {
|
||||
wm = {
|
||||
default = mkOption {
|
||||
type = types.enum ["mangowc" "hyprland"];
|
||||
default = "mangowc";
|
||||
example = "hyprland";
|
||||
description = "Window manager to boot by default.";
|
||||
};
|
||||
hyprland.enabled = mkEnableOption "hyprland";
|
||||
mangowc.enabled = mkEnableOption "mangowc";
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = with pkgs; [
|
||||
# xdg-desktop-portal-gtk
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
homes/modules/wm/hypr/hyprland.nix
Executable file
29
homes/modules/wm/hypr/hyprland.nix
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland)
|
||||
# NOTE: and your home-manager config (for managing hyprland's config files)
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
config = {
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
# package = pkgs.hyprland;
|
||||
package = null;
|
||||
portalPackage = null;
|
||||
|
||||
xwayland.enable = true;
|
||||
|
||||
# systemd = {
|
||||
# enable = true;
|
||||
# # enable autostart of applications
|
||||
# # REF: `man 8 systemd-xdg-autostart-generator`
|
||||
# enableXdgAutostart = true;
|
||||
# };
|
||||
|
||||
# plugins = with inputs; [
|
||||
# split-monitor-workspaces.packages.${pkgs.system}.split
|
||||
# ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,379 +0,0 @@
|
|||
# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland)
|
||||
# NOTE: and your home-manager config (for managing hyprland's config files)
|
||||
{
|
||||
hostname,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./kanshi.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
playerctl
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
package = null;
|
||||
portalPackage = null;
|
||||
|
||||
xwayland.enable = true;
|
||||
|
||||
# systemd= {
|
||||
# enable = true;
|
||||
# # enable autostart of applications
|
||||
# # REF: `man 8 systemd-xdg-autostart-generator`
|
||||
# enableXdgAutostart = true;
|
||||
# };
|
||||
|
||||
settings = {
|
||||
"$MOD" =
|
||||
if hostname == "myputer"
|
||||
then "ALT" # my SUPER key broke ;w;
|
||||
else "SUPER";
|
||||
|
||||
# applications
|
||||
"$editor" = "hx";
|
||||
"$terminal" = "foot";
|
||||
"$menu" = "fuzzel";
|
||||
"$colorpicker" = "hyprpicker | head -c 7 | wl-copy";
|
||||
"$screenshot_region" = "hyprshot -m region --clipboard-only";
|
||||
"$screenshot_window" = "hyprshot -m window --clipboard-only";
|
||||
"$cursorLock" = "~/scripts/bin/hyprland-cursor-lock";
|
||||
|
||||
# startup programs
|
||||
exec-once = [
|
||||
# TODO: make these independent of hyprland, add these to the
|
||||
"mako &"
|
||||
"awww-daemon &"
|
||||
"waybar &"
|
||||
|
||||
# "wl-paste --type text --watch cliphist store"
|
||||
# "wl-paste --type image --watch cliphist store"
|
||||
# "wl-clip-persist --clipboard regular"
|
||||
# "playerctld daemon"
|
||||
];
|
||||
|
||||
# monitor configuration
|
||||
monitor =
|
||||
if hostname == "lolcathost"
|
||||
then [
|
||||
"eDP-1, highres@highrr, 0x0, 1.0" # Programming
|
||||
# "eDP-1, highres@highrr, 0x0, 1.5" # Comfy
|
||||
]
|
||||
else if hostname == "myputer"
|
||||
then [
|
||||
"DP-2, 3840x2160@60.00Hz, 0x0, 1.0"
|
||||
"HDMI-A-1, 1920x1080@119.98Hz, 3840x0, 1.0"
|
||||
]
|
||||
else [];
|
||||
|
||||
# .__. .___ __..___. . . .___ .___. ._. __ __.
|
||||
# [__] [__ (__ | |__| [__ | | / ` (__
|
||||
# | | [___ .__) | | | [___ | _|_ \__. .__)
|
||||
general = {
|
||||
gaps_in = 12; # margin between windows
|
||||
gaps_out = 25; # margin from windows to monitor edge
|
||||
gaps_workspaces = 0; # margin between workspaces (stacks with gaps_out)
|
||||
# float_gaps = 0; # gaps_out but for floating windows
|
||||
|
||||
border_size = 4;
|
||||
|
||||
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
|
||||
"col.inactive_border" = "rgba(00000000)";
|
||||
|
||||
# Enable resizing windows by clicking and dragging the border
|
||||
resize_on_border = true;
|
||||
|
||||
# REF: https://wiki.hyprland.org/Configuring/Tearing/
|
||||
allow_tearing = false;
|
||||
|
||||
layout = "dwindle";
|
||||
|
||||
snap = {
|
||||
enabled = false;
|
||||
window_gap = 10;
|
||||
monitor_gap = 10;
|
||||
border_overlap = false;
|
||||
# respect_gaps = false;
|
||||
};
|
||||
};
|
||||
|
||||
decoration = {
|
||||
rounding = 20;
|
||||
rounding_power = 4.0; # Lp norm
|
||||
border_part_of_window = true; # consider border as part of its window
|
||||
# screen_shader = ...; # path to custom GLSL fragment shader
|
||||
|
||||
# window Transparency
|
||||
active_opacity = 1.0;
|
||||
inactive_opacity = 0.95;
|
||||
fullscreen_opacity = 1.0; # fullscreened windows
|
||||
# inactive Window Dimming
|
||||
dim_inactive = false;
|
||||
dim_strength = 0.5;
|
||||
dim_special = 0.2;
|
||||
dim_around = 0.4;
|
||||
|
||||
blur = {
|
||||
enabled = true;
|
||||
new_optimizations = true;
|
||||
xray = false; # floating windows xray through tiling windows
|
||||
ignore_opacity = true;
|
||||
|
||||
# blur Parameters
|
||||
size = 8;
|
||||
passes = 1;
|
||||
noise = 0.0117; # default
|
||||
contrast = 0.8916; # default
|
||||
brightness = 0.8172; # default
|
||||
vibrancy = 0.1696; # default
|
||||
vibrancy_darkness = 0.0; # default
|
||||
|
||||
# blurring For Specific Window Types
|
||||
special = false; # blur special windows
|
||||
popups = false; # blur popups
|
||||
popups_ignorealpha = 0.2;
|
||||
input_methods = false;
|
||||
input_methods_ignorealpha = 0.2;
|
||||
};
|
||||
|
||||
shadow = {
|
||||
enabled = true;
|
||||
ignore_window = true; # only render at edges (not behind)
|
||||
|
||||
range = 3;
|
||||
render_power = 1; # falloff rate
|
||||
sharp = false; # aka infinite shadow.render_power
|
||||
offset = "0 0"; # vec2
|
||||
scale = 1.0;
|
||||
|
||||
color = "rgba(00000000)";
|
||||
color_inactive = "rgba(000000ff)"; # defaults to shadow.color if unset
|
||||
};
|
||||
};
|
||||
|
||||
# REF: https://cubic-bezier.com
|
||||
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"
|
||||
];
|
||||
|
||||
# REF: https://wiki.hyprland.org/Configuring/Animations
|
||||
# Animation Declaration Format:
|
||||
# "animation = NAME, ENABLE, SPEED, BEZIER [,STYLE]"
|
||||
# NOTE: SPEED is in ds (where 1ds = 100ms)
|
||||
animations = [
|
||||
"global, 1, 10, default"
|
||||
"border, 1, 5.39, easeOutQuint"
|
||||
|
||||
"windowsIn, 1, 4, linear, slide bottom"
|
||||
"windowsOut, 1, 10, linear, popin"
|
||||
|
||||
"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"
|
||||
];
|
||||
|
||||
# REF: https://wiki.hyprland.org/Configuring/Dwindle-Layout
|
||||
dwindle = {
|
||||
# master switch for pseudotiling. enabling is bound to MOD + P in the keybinds section below
|
||||
pseudotile = true;
|
||||
preserve_split = true; # You probably want this
|
||||
};
|
||||
|
||||
# REF: https://wiki.hyprland.org/Configuring/Master-Layout
|
||||
master = {
|
||||
new_status = "master";
|
||||
};
|
||||
|
||||
misc = {
|
||||
#force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = true;
|
||||
disable_splash_rendering = true;
|
||||
|
||||
enable_anr_dialog = false;
|
||||
font_family = "Geist Mono";
|
||||
};
|
||||
|
||||
input = {
|
||||
# kb_layout = "us";
|
||||
# kb_variant =
|
||||
# kb_model =
|
||||
# kb_options =
|
||||
# kb_rules =
|
||||
|
||||
follow_mouse = 1;
|
||||
|
||||
sensitivity = 0; # -1.0 - 1.0, 0 means no modification
|
||||
accel_profile = "flat";
|
||||
force_no_accel = false; # not recommended to turn on
|
||||
|
||||
repeat_rate = 50;
|
||||
repeat_delay = 300;
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = hostname == "lolcathost";
|
||||
};
|
||||
};
|
||||
|
||||
cursor.no_hardware_cursors = true;
|
||||
|
||||
# standard keypress bindings
|
||||
bind = [
|
||||
# terminal commands
|
||||
"$MOD, RETURN, exec, $terminal"
|
||||
"$MOD SHIFT, RETURN, exec, $terminal -D `[ -f ~/cry/.projdir ] && cat ~/cry/.projdir || echo ~`"
|
||||
|
||||
# btop
|
||||
"$MOD, P, exec, bash -c \"{ hyprctl clients | rg '^\w*title: btop' &>/dev/null; } && hyprctl dispatch closewindow title:btop || $terminal -T btop btop & disown\""
|
||||
|
||||
"$MOD, R, exec, $menu"
|
||||
|
||||
# lock mouse to window (mostly, for gaming)
|
||||
"$MOD, F1, exec, pkill hyprland-cursor || $cursorLock"
|
||||
"$MOD, F2, exec, $colorpicker"
|
||||
|
||||
# screenshots
|
||||
"$MOD, S, exec, $screenshot_region"
|
||||
"$MOD SHIFT, S, exec, $screenshot_window"
|
||||
|
||||
"$MOD, F, fullscreen"
|
||||
"$MOD SHIFT, F, fullscreenstate, 0 3" # fakefullscreen
|
||||
"$MOD, C, killactive"
|
||||
"$MOD SHIFT, Delete, exit"
|
||||
|
||||
# switch window
|
||||
"$MOD, left, movefocus, l"
|
||||
"$MOD, right, movefocus, r"
|
||||
"$MOD, up, movefocus, u"
|
||||
"$MOD, down, movefocus, d"
|
||||
"$MOD, H, movefocus, l"
|
||||
"$MOD, J, movefocus, d"
|
||||
"$MOD, K, movefocus, u"
|
||||
"$MOD, L, movefocus, r"
|
||||
|
||||
# switch workspaces
|
||||
"$MOD, 1, workspace, 1"
|
||||
"$MOD, 2, workspace, 2"
|
||||
"$MOD, 3, workspace, 3"
|
||||
"$MOD, 4, workspace, 4"
|
||||
"$MOD, 5, workspace, 5"
|
||||
"$MOD, 6, workspace, 6"
|
||||
"$MOD, 7, workspace, 7"
|
||||
"$MOD, 8, workspace, 8"
|
||||
"$MOD, 9, workspace, 9"
|
||||
"$MOD, 0, workspace, 10"
|
||||
"$MOD SHIFT, left, workspace, e-1"
|
||||
"$MOD SHIFT, right, workspace, e+1"
|
||||
|
||||
# move window to workspace
|
||||
"$MOD SHIFT, 1, movetoworkspace, 1"
|
||||
"$MOD SHIFT, 2, movetoworkspace, 2"
|
||||
"$MOD SHIFT, 3, movetoworkspace, 3"
|
||||
"$MOD SHIFT, 4, movetoworkspace, 4"
|
||||
"$MOD SHIFT, 5, movetoworkspace, 5"
|
||||
"$MOD SHIFT, 6, movetoworkspace, 6"
|
||||
"$MOD SHIFT, 7, movetoworkspace, 7"
|
||||
"$MOD SHIFT, 8, movetoworkspace, 8"
|
||||
"$MOD SHIFT, 9, movetoworkspace, 9"
|
||||
"$MOD SHIFT, 0, movetoworkspace, 10"
|
||||
|
||||
# move workspace to monitor
|
||||
"$MOD TAB, 1, movecurrentworkspacetomonitor, DP-2"
|
||||
"$MOD TAB, 2, movecurrentworkspacetomonitor, HDMA-A-1"
|
||||
];
|
||||
|
||||
# bindings for mouse
|
||||
bindm = [
|
||||
"$MOD, mouse:272, movewindow"
|
||||
"$MOD, mouse:273, resizewindow"
|
||||
];
|
||||
|
||||
# bindings that work even while screen is locked
|
||||
bindl = [
|
||||
# WARNING: requires `pkgs.playerctl`
|
||||
", XF86AudioNext, exec, playerctl next"
|
||||
", XF86AudioPause, exec, playerctl play-pause"
|
||||
", XF86AudioPlay, exec, playerctl play-pause"
|
||||
", XF86AudioPrev, exec, playerctl previous"
|
||||
];
|
||||
|
||||
# bindings that work even while screen is locked
|
||||
# and also repeat when the key is held
|
||||
bindel = [
|
||||
",XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||
",XF86MonBrightnessUp, exec, brightnessctl s 10%+"
|
||||
",XF86MonBrightnessDown, exec, brightnessctl s 10%-"
|
||||
];
|
||||
|
||||
windowrule = [
|
||||
# btop process manager
|
||||
{
|
||||
name = "terminal-manager";
|
||||
"match:class" = "^(foot)$";
|
||||
"match:title" = "^(btop)$";
|
||||
float = true;
|
||||
center = true;
|
||||
size = "(monitor_w*0.65) (monitor_h*0.65)";
|
||||
}
|
||||
|
||||
# ignore maximize requests from apps
|
||||
{
|
||||
name = "suppress-maximize";
|
||||
suppress_event = "maximize";
|
||||
"match:class" = ".*";
|
||||
}
|
||||
|
||||
# fix some dragging issues with XWayland
|
||||
{
|
||||
name = "no-focus";
|
||||
no_focus = "on";
|
||||
"match:class" = "^$";
|
||||
"match:title" = "^$";
|
||||
"match:xwayland" = true;
|
||||
"match:float" = true;
|
||||
"match:fullscreen" = false;
|
||||
"match:pin" = false;
|
||||
}
|
||||
|
||||
# TODO: style fakefullscreen windows to clearly indicate their difference
|
||||
# {
|
||||
# name = "fake-fullscreen";
|
||||
# }
|
||||
];
|
||||
|
||||
# █▀▀ █▄░█ █░█ █░█ ▄▀█ █▀█
|
||||
# ██▄ █░▀█ ▀▄▀ ▀▄▀ █▀█ █▀▄
|
||||
env = [
|
||||
"XCURSOR_THEME,Bibata-Modern-Ice"
|
||||
"XCURSOR_SIZE,16"
|
||||
"HYPRCURSOR_THEME,Bibata-Modern-Ice"
|
||||
"HYPRCURSOR_SIZE,16"
|
||||
|
||||
"QT_QPA_PLATFORM,wayland"
|
||||
"QT_QPA_PLATFORMTHEME,xdgdesktopportal" # makes portals work correctly
|
||||
"XDG_MENU_PREFIX,arch-"
|
||||
"XDG_CURRENT_DESKTOP,Hyprland"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
183
homes/modules/wofi.nix
Executable file
183
homes/modules/wofi.nix
Executable file
|
|
@ -0,0 +1,183 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
programs.wofi = {
|
||||
enable = true;
|
||||
settings = {
|
||||
location = "center";
|
||||
allow_markup = true;
|
||||
width = 250;
|
||||
};
|
||||
# Force the style to stop Stylix being a bitch and overwriting it
|
||||
style = lib.mkForce ''
|
||||
@define-color rosewater #f2d5cf;
|
||||
@define-color rosewater-rgb rgb(242, 213, 207);
|
||||
@define-color flamingo #eebebe;
|
||||
@define-color flamingo-rgb rgb(238, 190, 190);
|
||||
@define-color pink #f4b8e4;
|
||||
@define-color pink-rgb rgb(244, 184, 228);
|
||||
@define-color mauve #ca9ee6;
|
||||
@define-color mauve-rgb rgb(202, 158, 230);
|
||||
@define-color red #e78284;
|
||||
@define-color red-rgb rgb(231, 130, 132);
|
||||
@define-color maroon #ea999c;
|
||||
@define-color maroon-rgb rgb(234, 153, 156);
|
||||
@define-color peach #ef9f76;
|
||||
@define-color peach-rgb rgb(239, 159, 118);
|
||||
@define-color yellow #e5c890;
|
||||
@define-color yellow-rgb rgb(229, 200, 144);
|
||||
@define-color green #a6d189;
|
||||
@define-color green-rgb rgb(166, 209, 137);
|
||||
@define-color teal #81c8be;
|
||||
@define-color teal-rgb rgb(129, 200, 190);
|
||||
@define-color sky #99d1db;
|
||||
@define-color sky-rgb rgb(153, 209, 219);
|
||||
@define-color sapphire #85c1dc;
|
||||
@define-color sapphire-rgb rgb(133, 193, 220);
|
||||
@define-color blue #8caaee;
|
||||
@define-color blue-rgb rgb(140, 170, 238);
|
||||
@define-color lavender #babbf1;
|
||||
@define-color lavender-rgb rgb(186, 187, 241);
|
||||
@define-color text #c6d0f5;
|
||||
@define-color text-rgb rgb(198, 208, 245);
|
||||
@define-color subtext1 #b5bfe2;
|
||||
@define-color subtext1-rgb rgb(181, 191, 226);
|
||||
@define-color subtext0 #a5adce;
|
||||
@define-color subtext0-rgb rgb(165, 173, 206);
|
||||
@define-color overlay2 #949cbb;
|
||||
@define-color overlay2-rgb rgb(148, 156, 187);
|
||||
@define-color overlay1 #838ba7;
|
||||
@define-color overlay1-rgb rgb(131, 139, 167);
|
||||
@define-color overlay0 #737994;
|
||||
@define-color overlay0-rgb rgb(115, 121, 148);
|
||||
@define-color surface2 #626880;
|
||||
@define-color surface2-rgb rgb(98, 104, 128);
|
||||
@define-color surface1 #51576d;
|
||||
@define-color surface1-rgb rgb(81, 87, 109);
|
||||
@define-color surface0 #414559;
|
||||
@define-color surface0-rgb rgb(65, 69, 89);
|
||||
@define-color base #303446;
|
||||
@define-color base-rgb rgb(48, 52, 70);
|
||||
@define-color mantle #292c3c;
|
||||
@define-color mantle-rgb rgb(41, 44, 60);
|
||||
@define-color crust #232634;
|
||||
@define-color crust-rgb rgb(35, 38, 52);
|
||||
|
||||
* {
|
||||
font-family: 'FiraCode Nerd Font';
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
/* Window */
|
||||
window {
|
||||
margin: 0px;
|
||||
padding: 10px;
|
||||
border: 0.16em solid @teal;
|
||||
border-radius: 0.5em;
|
||||
background-color: @base;
|
||||
animation: slideIn 0.25s ease-in-out both;
|
||||
}
|
||||
|
||||
/* Slide In */
|
||||
@keyframes slideIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Inner Box */
|
||||
#inner-box {
|
||||
margin: 5px;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
background-color: @base;
|
||||
/*animation: fadeIn 0.5s ease-in-out both;*/
|
||||
}
|
||||
|
||||
/* Fade In */
|
||||
@keyframes fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Outer Box */
|
||||
#outer-box {
|
||||
margin: 5px;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
background-color: @base;
|
||||
}
|
||||
|
||||
/* Scroll */
|
||||
#scroll {
|
||||
margin: 0px;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
background-color: @base;
|
||||
}
|
||||
|
||||
/* Input */
|
||||
#input {
|
||||
margin: 5px 20px;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
border-radius: 0.25em;
|
||||
color: @text;
|
||||
background-color: @base;
|
||||
animation: fadeIn 0.25s ease-in-out both;
|
||||
}
|
||||
|
||||
#input image {
|
||||
border: none;
|
||||
color: @red;
|
||||
}
|
||||
|
||||
#input * {
|
||||
outline: 4px solid @red!important;
|
||||
}
|
||||
|
||||
/* Text */
|
||||
#text {
|
||||
margin: 5px;
|
||||
border: none;
|
||||
color: @text;
|
||||
animation: fadeIn 0.5s ease-in-out both;
|
||||
}
|
||||
|
||||
#entry {
|
||||
background-color: @base;
|
||||
}
|
||||
|
||||
#entry arrow {
|
||||
border: none;
|
||||
color: @teal;
|
||||
}
|
||||
|
||||
/* Selected Entry */
|
||||
#entry:selected {
|
||||
border: 0.10em solid @teal;
|
||||
border-radius: 0.25em;
|
||||
}
|
||||
|
||||
#entry:selected #text {
|
||||
color: @teal;
|
||||
}
|
||||
|
||||
#entry:drop(active) {
|
||||
background-color: @lavender!important;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
@ -97,9 +97,9 @@ in {
|
|||
THEMES = "forgejo-auto,forgejo-light,forgejo-dark";
|
||||
};
|
||||
"ui.meta" = {
|
||||
AUTHOR = "_cry64";
|
||||
AUTHOR = "Emile Clark-Boman - emileclarkb";
|
||||
DESCRIPTION = "This is my personal self-hosted git forge, where I keep and maintain personal projects! PS do butterflies cry when they're sad?";
|
||||
KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,cry,_cry64,cry64,dobutterfliescry,butterfly,butterflies,git,forge,forgejo,self-hosted,tearforge";
|
||||
KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,git,forge,forgejo,self-hosted,dobutterfliescry,butterfly,butterflies,cry,tearforge";
|
||||
};
|
||||
|
||||
markdown = {
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@
|
|||
|
||||
# NOTE: generate hashes with `mkpasswd -sm bcrypt`
|
||||
loginAccounts = {
|
||||
"them@dobutterfliescry.net" = {
|
||||
aliases = ["cry@dobutterfliescry.net"];
|
||||
"me@imbored.dev" = {
|
||||
aliases = ["emile@imbored.dev"];
|
||||
hashedPasswordFile = let
|
||||
CWD = builtins.getEnv "PWD";
|
||||
# XXX: TODO: use a secrets manager!
|
||||
|
|
|
|||
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
root,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
{...}: {
|
||||
imports = [
|
||||
./hardware.nix
|
||||
];
|
||||
|
|
@ -22,38 +17,6 @@
|
|||
libinput.enable = true;
|
||||
};
|
||||
|
||||
# users = {
|
||||
# users = {
|
||||
# # literally me fr (personal account)
|
||||
# ilovecry = {
|
||||
# isNormalUser = true;
|
||||
# extraGroups = ["wheel"];
|
||||
# shell = pkgs.bash;
|
||||
# # hashedPasswordFile = config.sops.secrets.ilovecryPassword.path;
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
|
||||
# sops = {
|
||||
# defaultSopsFile = /${root}/secrets/user.yaml;
|
||||
# # age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
|
||||
# secrets = {
|
||||
# "hashedPassword" = {
|
||||
# neededForUsers = true;
|
||||
# };
|
||||
# "ilovecryPassword" = {
|
||||
# neededForUsers = true;
|
||||
# };
|
||||
# # "gitlab/oauth_token" = {};
|
||||
# # "tailscale/authkey" = {};
|
||||
# # "guest_accounts.json" = {};
|
||||
# # "npmrc" = {
|
||||
# # owner = "youruser";
|
||||
# # path = "/home/youruser/.npmrc";
|
||||
# # };
|
||||
# };
|
||||
# };
|
||||
|
||||
# DO NOT MODIFY
|
||||
system.stateVersion = "24.05"; # Did you read the comment?
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
users.users.cry = {
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDYwbPjW26fHivB+UpxRArY7nFI09VLAD9xxOiPk/u+YPAOVR8SYTpsHj3L8kI3ENRtt3PRJb97ZfLpPaAJ0LJiZv4qzisDjbfck12FxSDseQlF2JaJZ4wrJ9llcqJbRLKd5wV4KotrDm8Ct2JSBFOdTBQBGJqtNrLOcAtDqVmDPXsWyONINegtcYHumTbJcQU1ksCABdjW5R1dhJesOuMOM8EvrUtDyftvD7sgnBlXTzybP9c1AphUuBMSR5yEz/cDl+iPtQq7tgB+iepCCuNMGQu1wZFPBCMrZtMoxq6gzmZ4oV+W6tfmGEbtdkY+ix+2j960Zngcw7Gj+aYyMY2TyVJuJmIvlzfcrlsbr1TH35Y/5oYhJA+X6aFpgomUsurJ6/QdI1wQ+ceUCnZEeg/8z+WNaq/Bp2hPzT9Y7SPWolpaotDhh9wiuyVqn5VQqwL2lELfvZM4Lu8l6vRPDeMZTemI1nc5jg3aVpJqZTPqFVcCWrWXfdCFwnfy/SdU0JAprCzVvoqkwDHsJwkxY/NcxlNGNha+8oYZgSH1CZhEp3Z7CDJCTDd5PxxCQHs90ENCWFsoGQIV01dAgwD63460En9q2kGr6gO2aRewMD5Vr8AzeGV87vsR3ARpPQVzEWLX08B076Idjwrz8aebdRYBEg7WCxRe5UVI1i/V8j/zQw== emile@deadlyserver.com"
|
||||
"ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAGEvtRs3C4hjSuvVm2lukqOvObCz5gVlFthcvpGHAqlBgZo47CNJM78WoviEQWceqtu9ZzJdRJ7qEK9ZGvTM0XTSgExkOs6YdS3J7M3i3YS1vcj9KVPinLhiE90aED/319pbYKFrRs/lRzl8XLeaPNqenNMNJBqeary8+r5u9JC6zYCeQ== me@lolcathost"
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
meta = {
|
||||
homepage = "https://github.com/unoplatform/uno.check";
|
||||
license = licenses.mit;
|
||||
maintainers = [maintainers.emileclarkb];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -10,20 +10,6 @@
|
|||
lib
|
||||
;
|
||||
in {
|
||||
ns = pkgs.writeShellApplication {
|
||||
name = "ns";
|
||||
runtimeInputs = with pkgs; [
|
||||
fzf
|
||||
nix-search-tv
|
||||
];
|
||||
text = builtins.readFile "${pkgs.nix-search-tv.src}/nixpkgs.sh";
|
||||
|
||||
excludeShellChecks = [
|
||||
# SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.
|
||||
"SC2016"
|
||||
];
|
||||
};
|
||||
|
||||
angry-oxide = import ../packages/angryoxide {
|
||||
inherit pkgs lib;
|
||||
};
|
||||
|
|
@ -66,7 +52,7 @@
|
|||
lib.mkIf (inputs?hyprland)
|
||||
(inputs.hyprland.packages.${system}.hyprland.overrideAttrs (final: prev: {
|
||||
patches = let
|
||||
glaze_version = inputs.hyprland.inputs.nixpkgs.legacyPackages.glaze.version;
|
||||
glaze_version = pkgs.glaze.version;
|
||||
in
|
||||
prev.patches
|
||||
++ [
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
angryoxide-meta = {
|
||||
homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}";
|
||||
license = lib.licenses.gpl3;
|
||||
maintainers = [lib.maintainers.emileclarkb];
|
||||
};
|
||||
|
||||
# "Vendored LibWifi used in AngryOxide"
|
||||
|
|
@ -65,7 +66,7 @@
|
|||
|
||||
meta =
|
||||
{
|
||||
description = "AngryOxide's source files isolated by @_cry64 into a separate Nix derivation.";
|
||||
description = "AngryOxide's source files isolated by (@emileclarkb) into a separate Nix derivation.";
|
||||
}
|
||||
// angryoxide-meta;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -463,6 +463,7 @@ rec {
|
|||
description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform";
|
||||
homepage = "https://github.com/GameTec-live/ChameleonUltraGUI";
|
||||
license = licenses.gpl3;
|
||||
maintainers = [maintainers.emileclarkb];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,5 +20,6 @@ in
|
|||
description = "A lightweight, fast, terminal-based markdown research tool inspired by Obsidian";
|
||||
homepage = "https://github.com/hanebox/ekphos";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [lib.maintainers.emileclarkb];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
11
patches
Normal file
11
patches
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# add sddm profile pic
|
||||
systemd.tmpfiles.rules = let
|
||||
imagePath = /${root}/homes/aurora/profile.png;
|
||||
in
|
||||
lib.mkIf (builtins.pathExists imagePath) [
|
||||
"L /var/lib/AccountsService/icons/${config.home.username} - - - - ${imagePath}"
|
||||
];
|
||||
|
||||
|
||||
# Cerulean should automatically add set home-managers `home.username` and `home.homeDirectory`
|
||||
# (this can be done by using .extendModule from the nixos module system :3)
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
hashedPassword: ENC[AES256_GCM,data:yUPHY0xg91BNSOkF5PcBkZyacJO7W6OvTE4o8X83i/386D1V/jnRfOpgNZ5FvAwdyA2SNPaeW1gIyLmYbbQGXVLvOPNeRL1Aog==,iv:fz177ve/GlW27NR1CzPGlhWGSM3yaIvN8daEF9xLsM0=,tag:Qv9lXYhj/I6jVzhi7WtuLg==,type:str]
|
||||
ilovecryPassword: ENC[AES256_GCM,data:3c1ljqAdtiCz8csYW4GJjJUsFpxwh+mjBBWRS7RUg81SC0bdmuSYjKfBFuTu6ML0ZL1p8DXk2elUwV3fMa4RuBami5tIXh7bpw==,iv:eJokDF2GYazbHtlFUjjnK4wsdM1vbn629xkZNSaTdFA=,tag:5mWfg/HoSsnQ+9gX8p26rw==,type:str]
|
||||
sops:
|
||||
lastmodified: "2026-03-08T01:44:57Z"
|
||||
mac: ENC[AES256_GCM,data:geIyLVMcLvGp0/9Yz23/ijZy3oVq1FXVJHobovomCj1oFxSqdsds/w+w/TBmXJ30fvfdXpLULnr6AwwNxSYuNTfm3tXR+EBq0tg1bagbpk6SABOq0TNFRkdfJVyyeVTl/mxBaeHVnPcrV3O50LGGVKdcHkeUFlhuaAqXmYxsq+U=,iv:SvR4yTi1UoSMJldS4NuhGbkNHjdKOo5dw9XhfSsItF8=,tag:AHWXHFVUQkqgJ+KhIuqZEg==,type:str]
|
||||
pgp:
|
||||
- created_at: "2026-03-08T01:32:54Z"
|
||||
enc: |-
|
||||
-----BEGIN PGP MESSAGE-----
|
||||
|
||||
hF4DuHhvXXGIWHkSAQdAh2Khre0KhjaZPgN4PxO2zm31TkUguTW9OdmCDHyQvAww
|
||||
dON+Q1s0jOh2hEMmEOF5MJcJnAXHXix8WiSsNTpqnZSS0or3QNH8fUUBCgR3t73r
|
||||
0l4BTv46Cj7+PrpUG4l8BbhYWfiu7N0vex4NbpCfyHKTMDLiFSEf9U4BOzkmNkGs
|
||||
mB+Hw58WwIaru5JueFztwvflE5ysxb9Wk/1PZ6zTpmiq6Rm+WgYydb5vq699DEKC
|
||||
=oQCe
|
||||
-----END PGP MESSAGE-----
|
||||
fp: 9D052B0EEB1CC3283E3E320FF68745A836CA0412
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
Loading…
Add table
Add a link
Reference in a new issue