Compare commits

..

1 commit

Author SHA1 Message Date
54c04f9c02
Break juri apart and add scaffolding for system timers 2025-08-06 19:47:17 -07:00
39 changed files with 1613 additions and 900 deletions

1
.gitignore vendored
View file

@ -1 +0,0 @@
result

828
flake.lock generated
View file

@ -1,73 +1,211 @@
{ {
"nodes": { "nodes": {
"easy-hosts": { "aagl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs"
},
"locked": { "locked": {
"lastModified": 1755470564, "lastModified": 1750597689,
"narHash": "sha256-KB1ZryVDoQcbIsItOf4WtxkHhh3ppj+XwMpSnt/2QHc=", "narHash": "sha256-3ComII0BkmdohISrshICQiAB6TU+VHHIRnWK0ckA0/s=",
"owner": "tgirlcloud", "owner": "ezKEa",
"repo": "easy-hosts", "repo": "aagl-gtk-on-nix",
"rev": "d0422bc7b3db26268982aa15d07e60370e76ee1d", "rev": "ec2ec4ec3f908ed9b125ea4afd52627bed60f183",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tgirlcloud", "owner": "ezKEa",
"repo": "easy-hosts", "repo": "aagl-gtk-on-nix",
"type": "github" "type": "github"
} }
}, },
"flake-parts": { "ags": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "astal": "astal",
"gnim": "gnim",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1751930350,
"narHash": "sha256-hBIrzyrwG3XjeNyzVNWKDX+yYVlpwAqf9ovgF7qecug=",
"owner": "Aylur",
"repo": "ags",
"rev": "22f37ccb0db58d9d8a11ad0054ab20ecfad005ad",
"type": "github"
},
"original": {
"owner": "Aylur",
"repo": "ags",
"type": "github"
}
},
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1751740947,
"narHash": "sha256-35040CHH7P3JGmhGVfEb2oJHL/A5mI2IXumhkxrBnao=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "dfc1db15a08c4cd234288f66e1199c653495301f",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"type": "github"
}
},
"astal": {
"inputs": {
"nixpkgs": [
"ags",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1769996383, "lastModified": 1751126708,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "narHash": "sha256-AodIKw7TmI7rHVcOfEsO82stupMYIMVQeLAUQfVxnkU=",
"owner": "hercules-ci", "owner": "aylur",
"repo": "flake-parts", "repo": "astal",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "rev": "ac90f09385a2295da9fdc108aaba4a317aaeacc7",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hercules-ci", "owner": "aylur",
"repo": "flake-parts", "repo": "astal",
"type": "github" "type": "github"
} }
}, },
"flake-parts_2": { "flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "systems": "systems_2"
"nixvim", },
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flakey-profile": {
"locked": {
"lastModified": 1712898590,
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
"owner": "lf-",
"repo": "flakey-profile",
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
"type": "github"
},
"original": {
"owner": "lf-",
"repo": "flakey-profile",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1769996383, "lastModified": 1709087332,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "gitignore.nix",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "gitignore.nix",
"type": "github"
}
},
"gnim": {
"flake": false,
"locked": {
"lastModified": 1751928958,
"narHash": "sha256-vQY2L+Hnp6F1MHFa3UbMft1goGw3iODI5M+96Z7P+9Q=",
"owner": "aylur",
"repo": "gnim",
"rev": "9bffa83f52f711b13e3c139454623a9aea4f5552",
"type": "github"
},
"original": {
"owner": "aylur",
"repo": "gnim",
"type": "github" "type": "github"
} }
}, },
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": "nixpkgs_3"
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1770654520, "lastModified": 1752093218,
"narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", "narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", "rev": "206ed3c71418b52e176f16f58805c96e84555320",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -76,23 +214,331 @@
"type": "github" "type": "github"
} }
}, },
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1749155331,
"narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1751808145,
"narHash": "sha256-OXgL0XaKMmfX2rRQkt9SkJw+QNfv0jExlySt1D6O72g=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "b841473a0bd4a1a74a0b64f1ec2ab199035c349f",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs_4",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1752149340,
"narHash": "sha256-DJc2ROpttbP6FHcXwWpmK7EB2cpVsP/LmXjEr8RWcO8=",
"ref": "refs/heads/main",
"rev": "b5433bb75324a95dd27eb5492141565466c2cdd6",
"revCount": 6265,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
},
"original": {
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
}
},
"hyprland-contrib": {
"inputs": {
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1752069516,
"narHash": "sha256-dyzDJvt8IVgHJVmpnw1mueHHSLYnChW1XMkwz9WUBZ8=",
"owner": "hyprwm",
"repo": "contrib",
"rev": "34d0c01910552b873a07c96921ef70e32bf369a2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "contrib",
"type": "github"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1749046714,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"type": "github"
}
},
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1749154592,
"narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1750371812,
"narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "b13c7481e37856f322177010bdf75fccacd1adc8",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1750371198,
"narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1751888065,
"narHash": "sha256-F2SV9WGqgtRsXIdUrl3sRe0wXlQD+kRRZcSfbepjPJY=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "a8229739cf36d159001cfc203871917b83fdf917",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1751881472,
"narHash": "sha256-meB0SnXbwIe2trD041MLKEv6R7NZ759QwBcVIhlSBfE=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "8fb426b3e5452fd9169453fd6c10f8c14ca37120",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"lix": {
"flake": false,
"locked": {
"lastModified": 1729298361,
"narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=",
"rev": "ad9d06f7838a25beec425ff406fe68721fef73be",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be"
},
"original": {
"type": "tarball",
"url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz"
}
},
"lix-module": {
"inputs": {
"flake-utils": "flake-utils",
"flakey-profile": "flakey-profile",
"lix": "lix",
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1732605668,
"narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=",
"rev": "f19bd752910bbe3a861c9cad269bd078689d50fe",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz"
}
},
"niri": { "niri": {
"inputs": { "inputs": {
"niri-stable": "niri-stable", "niri-stable": "niri-stable",
"niri-unstable": "niri-unstable", "niri-unstable": "niri-unstable",
"nixpkgs": [ "nixpkgs": "nixpkgs_7",
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1770620836, "lastModified": 1752078530,
"narHash": "sha256-HPoMvo/EqIr6xDDRlk6DGZYdu1Hte7lGLZaGZ5017Uc=", "narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "ff1edce403a67cfac7bf1038d348f2ef457ac691", "rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -104,16 +550,16 @@
"niri-stable": { "niri-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1756556321, "lastModified": 1748151941,
"narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "YaLTeR", "owner": "YaLTeR",
"ref": "v25.08", "ref": "v25.05.1",
"repo": "niri", "repo": "niri",
"type": "github" "type": "github"
} }
@ -121,11 +567,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1770394959, "lastModified": 1750791124,
"narHash": "sha256-if7bIsomdceIufOhkFwN74rFY/pLCWPynRxGyol2viQ=", "narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "ab47f5cec4c1c5758afeb91c0c98554ffd3433db", "rev": "37458d94b288945f6cfbd3c5c233f634d59f246c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -136,99 +582,209 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1770537093, "lastModified": 1748460289,
"narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=",
"rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", "owner": "nixos",
"type": "tarball", "repo": "nixpkgs",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102",
"type": "github"
}, },
"original": { "original": {
"type": "tarball", "owner": "nixos",
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
} }
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1770464364, "lastModified": 1751943650,
"narHash": "sha256-z5NJPSBwsLf/OfD8WTmh79tlSU8XgIbwmk6qB1/TFzY=", "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "23d72dabcb3b12469f57b37170fcbc1789bd7457", "rev": "88983d4b665fb491861005137ce2b11a9f89f203",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-25.11", "ref": "nixos-25.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixvim": { "nixpkgs_2": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": { "locked": {
"lastModified": 1770630823, "lastModified": 1751792365,
"narHash": "sha256-5SEmOnJ61vmbap39vzWEsCX5UQ+3Ul8J4mXWKdqSn3w=", "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=",
"owner": "nix-community", "owner": "nixos",
"repo": "nixvim", "repo": "nixpkgs",
"rev": "6acc964664ac916c64fe4e394edd467af4d90790", "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nixos",
"repo": "nixvim", "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1751637120,
"narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1751792365,
"narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1712163089,
"narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fd281bd6b7d3e32ddfa399853946f782553163b5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1729070438,
"narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5785b6bb5eaae44e627d541023034e1601455827",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1751984180,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1751984180,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-unstable",
"type": "indirect"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1744868846,
"narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github" "type": "github"
} }
}, },
"root": { "root": {
"inputs": { "inputs": {
"easy-hosts": "easy-hosts", "aagl": "aagl",
"flake-parts": "flake-parts", "ags": "ags",
"home-manager": "home-manager", "home-manager": "home-manager",
"hyprland": "hyprland",
"hyprland-contrib": "hyprland-contrib",
"lix-module": "lix-module",
"niri": "niri", "niri": "niri",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs_8",
"nixvim": "nixvim",
"silentSDDM": "silentSDDM",
"sops-nix": "sops-nix" "sops-nix": "sops-nix"
} }
}, },
"silentSDDM": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1769900466,
"narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=",
"owner": "uiriansan",
"repo": "SilentSDDM",
"rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2",
"type": "github"
},
"original": {
"owner": "uiriansan",
"repo": "SilentSDDM",
"type": "github"
}
},
"sops-nix": { "sops-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": "nixpkgs_9"
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1770683991, "lastModified": 1751606940,
"narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=", "narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033", "rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -238,6 +794,21 @@
} }
}, },
"systems": { "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"
}
},
"systems_2": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -252,19 +823,60 @@
"type": "github" "type": "github"
} }
}, },
"xdph": {
"inputs": {
"hyprland-protocols": [
"hyprland",
"hyprland-protocols"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1751300244,
"narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
},
"xwayland-satellite-stable": { "xwayland-satellite-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1755491097, "lastModified": 1748488455,
"narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "388d291e82ffbc73be18169d39470f340707edaa", "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "Supreeeme", "owner": "Supreeeme",
"ref": "v0.7", "ref": "v0.6",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"type": "github" "type": "github"
} }
@ -272,11 +884,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1770583271, "lastModified": 1751228685,
"narHash": "sha256-Q75S8cEqJoZ92s1y4zArvk2U1ayAy2E4SaF7gbNXkYQ=", "narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "86f5bd5d867ad6e120935dfe825f6b903ebbeddd", "rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b",
"type": "github" "type": "github"
}, },
"original": { "original": {

174
flake.nix
View file

@ -1,106 +1,94 @@
{ {
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { inputs = {
imports = with inputs; [ nixpkgs.url = "nixpkgs/nixos-unstable";
easy-hosts.flakeModule
home-manager.flakeModules.home-manager
];
systems = [ "x86_64-linux" ]; home-manager.url = "github:nix-community/home-manager";
easy-hosts = {
autoConstruct = true;
path = ./hosts;
onlySystem = "x86_64-nixos";
shared = { lix-module.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz";
modules = [
# inputs.lix-module.nixosModules.default
./nixosModules
];
};
};
flake = { hyprland.url = "git+https://github.com/hyprwm/Hyprland";
homeConfigurations = let hyprland-contrib.url = "github:hyprwm/contrib";
userConfig = system: extraModules:
inputs.home-manager.lib.homeManagerConfiguration { niri.url = "github:sodiboo/niri-flake";
extraSpecialArgs = { inherit inputs; };
pkgs = inputs.nixpkgs.legacyPackages.${system}; sops-nix.url = "github:Mic92/sops-nix";
modules = [ ags.url = "github:Aylur/ags";
./hmModules aagl.url = "github:ezKEa/aagl-gtk-on-nix";
inputs.nixvim.homeModules.nixvim
] ++ extraModules;
};
in {
"pan@juri" = userConfig "x86_64-linux" [ ./users/juri ];
"pan@jibril" = userConfig "x86_64-linux" [ ./users/jibril ];
"pan@onizuka" = userConfig "x86_64-linux" [ ./users/onizuka ];
};
};
}; };
inputs = { outputs = { self, home-manager, nixpkgs, lix-module, ... }@inputs: let
# Save data with this url. Source: system = "x86_64-linux";
# at://did:plc:mojgntlezho4qt7uvcfkdndg/app.bsky.feed.post/3loogwsoqok2w pkgs = nixpkgs.legacyPackages.${system};
# cid: bafyreidhuuxs3cuabneygtxir65hnd7hvy4hwj5rwrylpwmp7jhxciasve fs = pkgs.lib.fileset;
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; st = pkgs.lib.strings;
as = pkgs.lib.attrsets;
home-manager = { hosts = let
type = "github"; hostFilter = { name, ...}: name == "host.nix";
owner = "nix-community"; hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts);
repo = "home-manager"; # Assumes dir structure is start_of_path/hosts/hostname/host.nix
inputs.nixpkgs.follows = "nixpkgs"; extractHostName = path: builtins.unsafeDiscardStringContext (
st.removeSuffix "/host.nix" (
builtins.elemAt (st.splitString "/hosts/" path) 1
)
);
in builtins.listToAttrs (map (path: {
value = path;
name = extractHostName path;
}) hostPaths);
users = let
userFilter = { name, ...}: name == "user.nix";
userPaths = fs.toList (fs.fileFilter userFilter ./hosts);
in builtins.listToAttrs (map (path: let
dirsAndFiles = st.splitString "/" path;
dAFLength = builtins.length dirsAndFiles;
# Assumes dir structure is start_of_path/hosts/hostname/users/username/user.nix
hostname = builtins.unsafeDiscardStringContext (
builtins.elemAt dirsAndFiles (dAFLength - 4));
username = builtins.unsafeDiscardStringContext (
builtins.elemAt dirsAndFiles (dAFLength - 2));
in {
name = username + "@" + hostname;
value = path;
}
) userPaths);
userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {
inherit inputs;
inherit usernameAtHostname;
};
modules = [
./hmModules
userpath
];
}; };
flake-parts = { hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem {
type = "github"; specialArgs = let
owner = "hercules-ci"; hostFilteredUsers = as.filterAttrs (
repo = "flake-parts"; name: value: let
inputs.nixpkgs-lib.follows = "nixpkgs"; userHostname = builtins.elemAt (st.splitString "@" name) 1;
}; in userHostname == hostname
) users;
easy-hosts = { hostUsers = as.mapAttrsToList (
type = "github"; name: value: builtins.elemAt (st.splitString "@" name) 0
owner = "tgirlcloud"; ) hostFilteredUsers;
repo = "easy-hosts"; in {
}; inherit inputs;
inherit hostname;
# lix = { "usernameList" = hostUsers;
# url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; };
# flake = false; modules = [
# }; ./nixosModules
# hostpath
# lix-module = { ];
# url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz";
# inputs.nixpkgs.follows = "nixpkgs";
# inputs.lix.follows = "lix";
# };
niri = {
type = "github";
owner = "sodiboo";
repo = "niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim = {
type = "github";
owner = "nix-community";
repo = "nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
type = "github";
owner = "Mic92";
repo = "sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
silentSDDM = {
type = "github";
owner = "uiriansan";
repo = "SilentSDDM";
inputs.nixpkgs.follows = "nixpkgs";
}; };
in {
nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts;
homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users;
}; };
} }

View file

@ -1,52 +0,0 @@
{ config, pkgs, lib, ... }:
{
options.beets = {
enable = lib.mkEnableOption "Enables beets music";
plugins = {
the.enable = lib.mkOption { default = true; };
ftintitle.enable = lib.mkOption { default = true; };
lyrics.enable = lib.mkOption { default = true; };
fetchart = {
enable = lib.mkOption { default = true; };
embed = lib.mkOption { default = true; };
};
};
};
config = lib.mkIf config.beets.enable {
programs.beets.enable = true;
programs.beets.settings = {
directory = "${config.xdg.userDirs.music}";
library = "${config.xdg.userDirs.music}.db";
paths.default = with config.beets.plugins; let
# raw_artist = if ftintitle.enable
# then "$album_artist_no_feat"
# else "$albumartist";
raw_artist = "$albumartist";
artist = if the.enable
then "%the{${raw_artist}}/"
else raw_artist;
the_rest = "$album%aunique{}/$track $title";
in artist + the_rest;
embedart = with config.beets.plugins.fetchart;
lib.mkIf (enable && embed) {
maxwidth = 500;
};
plugins = with lib; with config.beets.plugins;
optional (the.enable) "the" ++
optional (ftintitle.enable) "ftintitle" ++
optional (lyrics.enable) "lyrics" ++
optional (fetchart.enable) "fetchart" ++
optional (fetchart.embed) "embedart" ++ [
"musicbrainz"
"info"
];
};
};
}

View file

@ -12,12 +12,10 @@
config = lib.mkIf config.git.enable { config = lib.mkIf config.git.enable {
programs.git = { programs.git = {
enable = true; enable = true;
settings = { userName = config.git.username;
user = { userEmail = config.git.email;
name = config.git.username; extraConfig = {
email = config.git.email; user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
};
gpg.format = "ssh"; gpg.format = "ssh";
commit.gpgSign = "true"; commit.gpgSign = "true";
tag.gpgSign = "true"; tag.gpgSign = "true";

View file

@ -1,5 +1,5 @@
{ config, lib, ... }: { config, inputs, pkgs, lib, ... }:
# let rootPath = ./.; in let rootPath = ./.; in
{ {
options.hypr = { options.hypr = {
enable = lib.mkEnableOption "Enables hyprland"; enable = lib.mkEnableOption "Enables hyprland";
@ -34,224 +34,220 @@
polkit.enable = lib.mkEnableOption "Enables polkit agent"; polkit.enable = lib.mkEnableOption "Enables polkit agent";
screenshot.enable = lib.mkEnableOption "Enables Screenshotting"; screenshot.enable = lib.mkEnableOption "Enables Screenshotting";
}; };
config.warnings = lib.mkIf config.hypr.enable [''
hypr.* has been deprecated to allow the removal of hyprland from flake inputs.
''];
# imports = [ inputs.hyprland.homeManagerModules.default ]; imports = [ inputs.hyprland.homeManagerModules.default ];
# config = let config = let
# lopts = lib.lists.optionals; lopts = lib.lists.optionals;
# in { in {
# nix.settings = { nix.settings = {
# substituters = ["https://hyprland.cachix.org"]; substituters = ["https://hyprland.cachix.org"];
# trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="];
# }; };
# } // lib.mkIf config.hypr.enable { } // lib.mkIf config.hypr.enable {
# wayland.windowManager.hyprland = let wayland.windowManager.hyprland = let
# mod = config.hypr.mod_key; mod = config.hypr.mod_key;
# # p-s = let # p-s = let
# # chw = config.hypr.workspace; # chw = config.hypr.workspace;
# # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces)
# # then (builtins.head (builtins.getAttr id chw.workspaces)) # then (builtins.head (builtins.getAttr id chw.workspaces))
# # else ""; # else "";
# # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { # in with config.hypr.workspace; lib.mkIf primary-secondary.enable {
# # primaryWs = findDefaultWs primary-secondary.primary; # primaryWs = findDefaultWs primary-secondary.primary;
# # secondaryWs = findDefaultWs primary-secondary.secondary; # secondaryWs = findDefaultWs primary-secondary.secondary;
# # }; # };
# in { in {
# enable = true; enable = true;
# settings = { settings = {
# monitor = config.hypr.monitor.details; monitor = config.hypr.monitor.details;
# workspace = let workspace = let
# wsMonitor = monitor: wrksps: map (ws: wsMonitor = monitor: wrksps: map (ws:
# if ws == (builtins.head wrksps) if ws == (builtins.head wrksps)
# then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true"
# else "name:"+ws+", monitor:"+monitor+", persistent:true" else "name:"+ws+", monitor:"+monitor+", persistent:true"
# ) wrksps; ) wrksps;
# makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( makeRules = wsAttr: builtins.concatLists (builtins.attrValues (
# builtins.mapAttrs wsMonitor wsAttr builtins.mapAttrs wsMonitor wsAttr
# )); ));
# in makeRules config.hypr.workspace.workspaces in makeRules config.hypr.workspace.workspaces
# ++ [ ++ [
# "w[t1], gapsout:0, gapsin:0" "w[t1], gapsout:0, gapsin:0"
# "w[tg1], gapsout:0, gapsin:0" "w[tg1], gapsout:0, gapsin:0"
# "f[1], gapsout:0, gapsin:0" "f[1], gapsout:0, gapsin:0"
# ] ]
# ++ lopts config.hypr.workspace.scratchpad.enable [ ++ lopts config.hypr.workspace.scratchpad.enable [
# "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}"
# ]; ];
# input = { input = {
# accel_profile = "flat"; accel_profile = "flat";
# sensitivity = config.hypr.mouse.sensitivity; sensitivity = config.hypr.mouse.sensitivity;
# }; };
# general = { general = {
# gaps_in = 3; gaps_in = 3;
# gaps_out = 3; gaps_out = 3;
# border_size = 2; border_size = 2;
# "col.active_border" = "rgb(F5C2E7)"; "col.active_border" = "rgb(F5C2E7)";
# "col.inactive_border" = "rgb(1E1D2F)"; "col.inactive_border" = "rgb(1E1D2F)";
# layout = "master"; layout = "master";
# }; };
# decoration = { decoration = {
# rounding = 2; rounding = 2;
# blur = { blur = {
# enabled = true; enabled = true;
# size = 12; size = 12;
# passes = 2; passes = 2;
# special = true; special = true;
# }; };
# }; };
# animation = [ animation = [
# "windows, 1, 4, default, popin 50%" "windows, 1, 4, default, popin 50%"
# "windowsOut, 1, 4, default, popin 50%" "windowsOut, 1, 4, default, popin 50%"
# "windowsMove, 1, 3, default" "windowsMove, 1, 3, default"
# "border, 1, 3, default" "border, 1, 3, default"
# "fade, 1, 3, default" "fade, 1, 3, default"
# "workspaces, 1, 3, default" "workspaces, 1, 3, default"
# ]; ];
# master = { master = {
# mfact = config.hypr.master.mfact; mfact = config.hypr.master.mfact;
# }; };
# misc = { misc = {
# focus_on_activate = true; focus_on_activate = true;
# }; };
#
# exec-once = lopts config.hypr.polkit.enable [ exec-once = lopts config.hypr.polkit.enable [
# "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1"
# ] ++ lopts config.hypr.background.enable [ ] ++ lopts config.hypr.background.enable [
# "${pkgs.swww}/bin/swww-daemon" "${pkgs.swww}/bin/swww-daemon"
# "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" "${pkgs.swww}/bin/swww img ${config.hypr.background.path}"
# ] ++ lopts config.ags.enable [ ] ++ lopts config.ags.enable [
# "ags" "ags"
# ] ++ lopts config.beeper.enable [ ] ++ lopts config.beeper.enable [
# "[workspace name:chat silent] Beeper" "[workspace name:chat silent] Beeper"
# ]; ];
#
# env = with config.hypr; [ env = with config.hypr; [
# # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}"
# # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}"
# "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db"
# ] ++ lopts cursor.enable [ ] ++ lopts cursor.enable [
# "HYPRCURSOR_THEME,${cursor.theme}" "HYPRCURSOR_THEME,${cursor.theme}"
# "HYPRCURSOR_SIZE,${cursor.size}" "HYPRCURSOR_SIZE,${cursor.size}"
# ] ++ lopts config.nvidia.enable [ ] ++ lopts config.nvidia.enable [
# "LIBVA_DRIVER_NAME,nvidia" "LIBVA_DRIVER_NAME,nvidia"
# "XDG_SESSION_TYPE,wayland" "XDG_SESSION_TYPE,wayland"
# "GBM_BACKEND,nvidia-drm" "GBM_BACKEND,nvidia-drm"
# "__GLX_VENDOR_LIBRARY_NAME,nvidia" "__GLX_VENDOR_LIBRARY_NAME,nvidia"
# "WLR_RENDERER_ALLOW_SOFTWARE,1" "WLR_RENDERER_ALLOW_SOFTWARE,1"
# "WLR_DRM_DEVICES,/dev/dri/card1" "WLR_DRM_DEVICES,/dev/dri/card1"
# ]; ];
#
# windowrulev2 = let windowrulev2 = let
# workspaceDefaults = wsname: applist: map ( workspaceDefaults = wsname: applist: map (
# app: "workspace " + wsname + ", " + app app: "workspace " + wsname + ", " + app
# ) applist; ) applist;
# allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( allDefault = wsAttr: builtins.concatLists (builtins.attrValues (
# builtins.mapAttrs workspaceDefaults wsAttr builtins.mapAttrs workspaceDefaults wsAttr
# )); ));
# in allDefault config.hypr.workspace.defaults in allDefault config.hypr.workspace.defaults
# ++ [ ++ [
# "bordersize 0, floating:0, onworkspace:w[t1]" "bordersize 0, floating:0, onworkspace:w[t1]"
# "rounding 0, floating:0, onworkspace:w[t1]" "rounding 0, floating:0, onworkspace:w[t1]"
# "bordersize 0, floating:0, onworkspace:w[tg1]" "bordersize 0, floating:0, onworkspace:w[tg1]"
# "rounding 0, floating:0, onworkspace:w[tg1]" "rounding 0, floating:0, onworkspace:w[tg1]"
# "bordersize 0, floating:0, onworkspace:f[1]" "bordersize 0, floating:0, onworkspace:f[1]"
# "rounding 0, floating:0, onworkspace:f[1]" "rounding 0, floating:0, onworkspace:f[1]"
# ] ]
# ++ lopts config.hypr.xwayland.videobridge.enable [ ++ lopts config.hypr.xwayland.videobridge.enable [
# "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$"
# "noanim,class:^(xwaylandvideobridge)$" "noanim,class:^(xwaylandvideobridge)$"
# "noinitialfocus,class:^(xwaylandvideobridge)$" "noinitialfocus,class:^(xwaylandvideobridge)$"
# "maxsize 1 1,class:^(xwaylandvideobridge)$" "maxsize 1 1,class:^(xwaylandvideobridge)$"
# "noblur,class:^(xwaylandvideobridge)$" "noblur,class:^(xwaylandvideobridge)$"
# ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque
# ++ [ ++ [
# "opacity 0.94 fullscreen:0" "opacity 0.94 fullscreen:0"
# "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" "opacity 0.79 override, class:^(${config.defaultApps.terminal})$"
# ]; ];
#
# # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home
# # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web
# # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med
# # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game
# # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc
# # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell
# # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh
# # #
# # SHIFT, 1, movetoworkspacesilent, name:home # SHIFT, 1, movetoworkspacesilent, name:home
# # SHIFT, 2, movetoworkspacesilent, name:web # SHIFT, 2, movetoworkspacesilent, name:web
# # SHIFT, 3, movetoworkspacesilent, name:med # SHIFT, 3, movetoworkspacesilent, name:med
# # SHIFT, 4, movetoworkspacesilent, name:game # SHIFT, 4, movetoworkspacesilent, name:game
# # SHIFT, TAB, movetoworkspacesilent, r-1 # SHIFT, TAB, movetoworkspacesilent, r-1
#
# bind = let bind = let
# modPrefix = kb: if (lib.strings.hasPrefix "&" kb) modPrefix = kb: if (lib.strings.hasPrefix "&" kb)
# then ("${mod}" + kb) then ("${mod}" + kb)
# else ("${mod}, " + kb); else ("${mod}, " + kb);
# in map modPrefix ([ in map modPrefix ([
# "Return, exec, ${config.defaultApps.terminal}" "Return, exec, ${config.defaultApps.terminal}"
# "&SHIFT, Q, exit" "&SHIFT, Q, exit"
# "h, focusmonitor, l" "h, focusmonitor, l"
# "l, focusmonitor, r" "l, focusmonitor, r"
# "j, cyclenext," "j, cyclenext,"
# "k, cyclenext, prev" "k, cyclenext, prev"
# "&SHIFT, h, movecurrentworkspacetomonitor, -1" "&SHIFT, h, movecurrentworkspacetomonitor, -1"
# "&SHIFT, l, movecurrentworkspacetomonitor, +1" "&SHIFT, l, movecurrentworkspacetomonitor, +1"
# "&SHIFT, j, swapnext," "&SHIFT, j, swapnext,"
# "&SHIFT, k, swapnext, prev" "&SHIFT, k, swapnext, prev"
# "c, killactive" "c, killactive"
# "f, togglefloating" "f, togglefloating"
# "&SHIFT, f, fullscreen" "&SHIFT, f, fullscreen"
# ] ++ (let ] ++ (let
# workspaces = builtins.concatLists ( workspaces = builtins.concatLists (
# builtins.attrValues config.hypr.workspace.workspaces); builtins.attrValues config.hypr.workspace.workspaces);
# wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) wsBinds = with builtins; wrksps: depth: if depth > (length wrksps)
# then [] then []
# else let ws = builtins.elemAt wrksps (depth -1); in [ else let ws = builtins.elemAt wrksps (depth -1); in [
# "${toString depth}, workspace, name:${ws}" "${toString depth}, workspace, name:${ws}"
# "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}"
# ] ++ wsBinds wrksps (depth + 1); ] ++ wsBinds wrksps (depth + 1);
# in wsBinds workspaces 1) ++ lopts config.rofi.enable [ in wsBinds workspaces 1) ++ lopts config.rofi.enable [
# "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run"
# ] ++ lopts config.hypr.screenshot.enable [ ] ++ lopts config.hypr.screenshot.enable [
# "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area"
# "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area"
# ] ++ lopts config.hypr.workspace.scratchpad.enable [ ] ++ lopts config.hypr.workspace.scratchpad.enable [
# "i, togglespecialworkspace, scratch" "i, togglespecialworkspace, scratch"
# ]); ]);
#
# bindm = map (kb: "${mod}, " + kb) [ bindm = map (kb: "${mod}, " + kb) [
# "mouse:272, movewindow" "mouse:272, movewindow"
# "mouse:273, movewindow" "mouse:273, movewindow"
# ]; ];
# }; };
# }; };
#
# home.packages = with pkgs; [ home.packages = with pkgs; [
# wlr-randr # Xrandr for wayland wlr-randr # Xrandr for wayland
# wl-clipboard # Clipboard manager for wayland wl-clipboard # Clipboard manager for wayland
# ] ++ lopts config.hypr.xwayland.videobridge.enable [ ] ++ lopts config.hypr.xwayland.videobridge.enable [
# kdePackages.xwaylandvideobridge kdePackages.xwaylandvideobridge
# ] ++ lopts config.hypr.cursor.enable [ ] ++ lopts config.hypr.cursor.enable [
# hyprcursor hyprcursor
# ] ++ lopts config.hypr.screenshot.enable [ ] ++ lopts config.hypr.screenshot.enable [
# hyprpicker # Colorpicker, needed for screenshot tool hyprpicker # Colorpicker, needed for screenshot tool
# inputs.hyprland-contrib.packages.${pkgs.system}.grimblast inputs.hyprland-contrib.packages.${pkgs.system}.grimblast
# ]; ];
#
# xdg.configFile."hypr-scripts" = { xdg.configFile."hypr-scripts" = {
# source = rootPath + "/scripts"; source = rootPath + "/scripts";
# target = "hypr/scripts"; target = "hypr/scripts";
# executable = true; executable = true;
# }; };
#
# xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable {
# source = rootPath + "/icons"; source = rootPath + "/icons";
# target = "icons/"; target = "icons/";
# recursive = true; recursive = true;
# }; };
# }; };
} }

View file

@ -33,7 +33,7 @@
relativenumber = true; relativenumber = true;
}; };
commands = { commands = {
dragon-out = ''%${pkgs.dragon-drop}/bin/dragon-drop -a -x "$fx"''; dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"'';
trash = lib.mkIf config.trash.enable '' trash = lib.mkIf config.trash.enable ''
%${pkgs.trash-cli}/bin/trash "$fx" %${pkgs.trash-cli}/bin/trash "$fx"
''; '';

View file

@ -14,182 +14,156 @@
catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme";
}; };
plugins = { plugins = {
comments.enable = lib.mkOption { default = true; }; comments.enable = lib.mkEnableOption "Enables nvim-comment";
fugitive.enable = lib.mkOption { default = true; }; fugitive.enable = lib.mkEnableOption "Enables git-fugitive";
lualine.enable = lib.mkOption { default = true; }; lualine.enable = lib.mkEnableOption "Enables lualine";
luasnip.enable = lib.mkOption { default = false; }; luasnip.enable = lib.mkEnableOption "Enables luasnip snippets";
nvimcmp.enable = lib.mkOption { default = true; }; nvimcmp.enable = lib.mkEnableOption "Enables nvim completion";
telescope = { telescope = {
enable = lib.mkOption { default = true; }; enable = lib.mkEnableOption "Enables telescope";
fzf.enable = lib.mkOption { default = true; }; fzf.enable = lib.mkEnableOption "Enables telescope-fzf";
}; };
treesitter.enable = lib.mkOption { default = true; }; treesitter.enable = lib.mkEnableOption "Enables treesitter";
wiki.enable = lib.mkOption { default = false; }; wiki.enable = lib.mkEnableOption "Enables a wiki";
}; };
}; };
imports = [
./plugin/lsp.nix
./plugin/nvimcmp.nix
./plugin/telescope.nix
./plugin/treesitter.nix
];
config = lib.mkIf config.neovim.enable { config = lib.mkIf config.neovim.enable {
home.sessionVariables = { home.sessionVariables = {
EDITOR = "nvim"; EDITOR = "nvim";
VISUAL = "nvim"; VISUAL = "nvim";
}; };
programs.nixvim = { programs.neovim = {
enable = true; enable = true;
viAlias = true; viAlias = true;
vimAlias = true; vimAlias = true;
vimdiffAlias = true;
globals = { extraLuaConfig = ''
mapleader = " "; ${builtins.readFile ./options.lua}
maplocalleader = " "; '';
rust_recommended_style = 0;
};
opts = { extraPackages = with pkgs; [
list = true; (lib.mkIf config.neovim.languages.c.enable libclang)
updatetime = 750; (lib.mkIf config.neovim.languages.go.enable gopls)
(lib.mkIf config.neovim.languages.nix.enable nil)
tabstop = 2; (lib.mkIf config.neovim.languages.rust.enable rust-analyzer)
softtabstop = 0;
shiftwidth = 2;
smarttab = true;
expandtab = true;
colorcolumn = "81";
showmatch = true;
number = true;
relativenumber = true;
swapfile = false;
backup = false;
undofile = true;
undodir = "${config.xdg.configHome}/nvim/undodir";
smartcase = true;
};
keymaps = with config.lib.nixvim; [
{
key = "<leader>d";
mode = "n";
action = mkRaw "vim.diagnostic.open_float";
}
# -- Easy Split Navigation
# -- nnoremap <C-J> <C-W><C-J>
# -- nnoremap <C-K> <C-W><C-K>
# -- nnoremap <C-L> <C-W><C-L>
# -- nnoremap <C-H> <C-W><C-H>
#
# -- Easy copy and pasting to external programs
# -- map <C-y> "+yy
# -- map <C-p> "+P
]; ];
};
programs.nixvim.colorschemes = with config.neovim.themes; { # Additional packages are added through imports
catppuccin = lib.mkIf catppuccin.enable { plugins = let
enable = true; lopts = lib.lists.optionals;
flavour = "mocha"; cfgp = config.neovim.plugins;
integrations.vimwiki = lib.mkIf wiki.enable true; cfgl = config.neovim.languages;
}; cfgt = config.neovim.themes;
};
programs.nixvim.plugins = with config.neovim.plugins; { comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [
comment.enable = comments.enable;
fugitive.enable = fugitive.enable;
lualine = lib.mkIf lualine.enable {
enable = true;
icons_enabled = true;
};
web-devicons.enable = lualine.enable;
luasnip.enable = luasnip.enable;
friendly-snippets.enable = luasnip.enable;
cmp = {
enable = nvimcmp.enable;
autoEnableSources = true;
settings = {
sources = [
{ name = "nvim_lsp"; }
{ name = "path"; }
{ name = "buffer"; }
] ++ lib.optional luasnip.enable { name = "cmp-luasnip"; };
mapping = with config.lib.nixvim; {
"<C-Space>" = mkRaw "cmp.mapping.abort()";
"<Tab>" = mkRaw
"cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
"<S-Tab>" = mkRaw
"cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
};
};
};
telescope = {
enable = telescope.enable;
keymaps = {
"<leader>ff" = "find_files";
"<leader>fg" = "git_files";
};
extensions = {
fzf = lib.mkIf telescope.fzf.enable {
enable = true;
fuzzy = true;
override_generic_sorter = true;
override_file_sorter = true;
case_mode = "smart_case";
};
};
};
treesitter = {
enable = treesitter.enable;
highlight.enable = true;
indent.enable = true;
folding.enable = false;
};
vimwiki = {
enable = wiki.enable;
list = [
{ {
path = "${config.xdg.userDirs.documents}/wiki"; plugin = comment-nvim;
links_space_char = "_"; type = "lua";
ext = ".md"; config = "require(\"Comment\").setup()";
syntax = "markdown";
} }
]; ]);
};
nvim-lspconfig.enable = true; fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [
nix.enable = config.neovim.languages.nix.enable; vim-fugitive
rustaceanvim.enable = config.neovim.languages.rust.enable; ]);
typsecript-tools.enable = config.neovim.languages.typescript.enable;
};
programs.nixvim.lsp = { luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [
enable = true; luasnip
servers = with config.neovim.languages; { friendly-snippets
clangd.enable = c.enable; (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip)
gopls.enable = go.enable; ]);
nil_ls.enable = nix.enable;
rust_analyzer.enable = rust.enable; lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [
tsserver.enable = typescript.enable; {
}; plugin = lualine-nvim;
keymaps = [ type = "lua";
{ key = "gd"; lspBufAction = "definition"; } config = ''
{ key = "gD"; lspBufAction = "declaration"; } require("lualine").setup {
{ key = "gi"; lspBufAction = "implementation"; } options = {
{ key = "gt"; lspBufAction = "type_definition"; } icons_enabled = true,
{ key = "K"; lspBufAction = "hover"; } '' + lib.strings.optionalString cfgt.catppuccin.enable ''
] ++ lib.optional config.neovim.plugins.telescope.enable { theme = "catppuccin"
key = "gr"; '' + ''
action = config.lib.nixvim.mkRaw }
"require('telescope.builtin').lsp_references"; }
}; '';
}
nvim-web-devicons
]);
nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [
vim-nix
]);
rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [
{
plugin = rustaceanvim;
type = "lua";
config = ''
vim.g.rust_recommended_style = 0
'';
}
]);
go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [
go-nvim
]);
typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [
{
plugin = typescript-tools-nvim;
type = "lua";
config = ''
require("typescript-tools").setup {}
'';
}
]);
catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [
{
plugin = catppuccin-nvim;
type = "lua";
config = ''
vim.cmd.colorscheme "catppuccin-mocha"
require('catppuccin').setup({
integrations = {
'' + lib.strings.optionalString cfgp.wiki.enable ''
vimwiki = true
'' + ''
}
})
'';
}
]);
wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [
{
plugin = vimwiki;
type = "lua";
config = ''
vim.g.vimwiki_list = {
{
path = '${config.xdg.userDirs.documents}/wiki',
links_space_char = '_',
ext = '.md',
syntax = 'markdown',
}
}
'';
}
]);
in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg
++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg;
}; };
}; };
} }

View file

@ -0,0 +1,60 @@
-- Globals
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
vim.opt.list = true
vim.bo.filetype = "on"
vim.opt.updatetime = 300
-- Indentations
vim.opt.tabstop = 2
vim.opt.softtabstop = 0
vim.opt.shiftwidth = 2
vim.opt.smarttab = true
vim.opt.expandtab = true
-- Style
vim.opt.colorcolumn = "80"
vim.opt.showmatch = true
vim.opt.number = true
vim.opt.relativenumber = true
-- Easy Split Navigation
-- nnoremap <C-J> <C-W><C-J>
-- nnoremap <C-K> <C-W><C-K>
-- nnoremap <C-L> <C-W><C-L>
-- nnoremap <C-H> <C-W><C-H>
-- Searching
vim.opt.smartcase = true
-- Backups
vim.opt.swapfile = false
vim.opt.backup = false
vim.opt.undofile = true
vim.opt.undodir = '/home/pan/.config/nvim/undodir'
-- Error viewing
vim.keymap.set('n', '<Leader>d', function() vim.diagnostic.open_float() end)
-- Easy copy and pasting to external programs
-- map <C-y> "+yy
-- map <C-p> "+P
-- autocmd BufRead,BufNewFile *.md call WritingMode()
-- autocmd BufRead,BufNewFile *.tex call WritingMode()
-- autocmd BufRead,BufNewFile *.svx call WritingMode()
-- autocmd BufRead,BufNewFile *.py call PythonMode()
-- function! WritingMode()
-- setlocal textwidth=80
-- setlocal wrap linebreak nolist
-- setlocal whichwrap+=<,>,h,l
-- nnoremap j gj
-- nnoremap k gk
-- setlocal spell spelllang=en_us
-- endfunction
-- function! PythonMode()
-- setlocal foldmethod=indent
-- setlocal foldlevel=99
-- endfunction

View file

@ -0,0 +1,53 @@
{ config, pkgs, lib, ... }:
{
config = lib.mkIf config.neovim.enable {
programs.neovim.plugins = let
cfgp = config.neovim.plugins;
cfgl = config.neovim.languages;
configText = ''
local on_attach = function(_, bufnr)
local bufmap = function(keys, func)
vim.keymap.set('n', keys, func, { buffer = bufnr })
end
bufmap('<leader>r', vim.lsp.buf.rename)
bufmap('<leader>a', vim.lsp.buf.code_action)
bufmap('gd', vim.lsp.buf.definition)
bufmap('gD', vim.lsp.buf.declaration)
bufmap('gI', vim.lsp.buf.implementation)
bufmap('<leader>D', vim.lsp.buf.type_definition)
'' + lib.strings.optionalString cfgp.telescope.enable ''
bufmap('gr', require('telescope.builtin').lsp_references)
bufmap('<leader>s', require('telescope.builtin').lsp_document_symbols)
bufmap('<leader>S', require('telescope.builtin').lsp_dynamic_workspace_symbols)
'' + ''
bufmap('K', vim.lsp.buf.hover)
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
vim.lsp.buf.format()
end, {})
end
local capabilities = vim.lsp.protocol.make_client_capabilities()
'' + lib.strings.optionalString cfgl.c.enable ''
require('lspconfig').clangd.setup {}
'' + lib.strings.optionalString cfgl.go.enable ''
require('lspconfig').gopls.setup {}
'' + lib.strings.optionalString cfgl.nix.enable ''
require('lspconfig').nil_ls.setup {}
'';
in with pkgs.vimPlugins; [
{
plugin = nvim-lspconfig;
type = "lua";
config = configText;
}
];
};
}

View file

@ -0,0 +1,72 @@
{ config, pkgs, lib, ... }:
let
cfgp = config.neovim.plugins;
in {
config = lib.mkIf (config.neovim.enable && cfgp.nvimcmp.enable) {
programs.neovim.plugins = let
configText = ''
local cmp = require('cmp')
'' + lib.strings.optionalString cfgp.luasnip.enable ''
local luasnip = require('luasnip')
require('luasnip.loaders.from_vscode').lazy_load()
luasnip.config.setup {}
'' + ''
cmp.setup {
mapping = cmp.mapping.preset.insert {
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete {},
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
'' + lib.strings.optionalString cfgp.luasnip.enable ''
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
'' + ''
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
'' + lib.strings.optionalString cfgp.luasnip.enable ''
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
'' + ''
else
fallback()
end
end, { 'i', 's' }),
},
'' + lib.strings.optionalString cfgp.luasnip.enable ''
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
sources = {
{ name = 'luasnip' },
},
'' + ''
}
'';
in with pkgs.vimPlugins; [
{
plugin = nvim-cmp;
type = "lua";
config = configText;
}
];
};
}

View file

@ -0,0 +1,43 @@
{ config, pkgs, lib, ... }:
let
cfgp = config.neovim.plugins;
in {
config = lib.mkIf (config.neovim.enable && cfgp.telescope.enable) {
programs.neovim.plugins = let
configText = ''
require('telescope').setup({
extensions = {
'' + lib.strings.optionalString cfgp.telescope.fzf.enable ''
fzf = {
fuzzy = true, -- false will only do exact matching
override_generic_sorter = true, -- override the generic sorter
override_file_sorter = true, -- override the file sorter
case_mode = "smart_case", -- or "ignore_case" or "respect_case"
-- the default case_mode is "smart_case"
}
'' + ''
}
})
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
vim.keymap.set('n', '<leader>fg', builtin.git_files, {})
'' + lib.strings.optionalString cfgp.telescope.fzf.enable ''
require('telescope').load_extension('fzf')
'';
in with pkgs.vimPlugins; [
{
plugin = telescope-nvim;
type = "lua";
config = configText;
}
(lib.mkIf cfgp.nvimcmp.enable telescope-fzf-native-nvim)
];
home.packages = with pkgs; [
(lib.mkIf cfgp.telescope.fzf.enable fzf)
];
};
}

View file

@ -0,0 +1,38 @@
{ config, pkgs, lib, ... }:
let
cfgp = config.neovim.plugins;
cfgl = config.neovim.languages;
in {
config = lib.mkIf (config.neovim.enable && cfgp.treesitter.enable) {
programs.neovim.plugins = let
configText = ''
require('nvim-treesitter.configs').setup {
ensure_installed = {},
auto_install = false,
highlight = { enable = true },
indent = { enable = true },
}
'';
# I've tried many things, and can't get treesitter plugins changing
# dynamically. For not just have them always loaded regardless of config
treeplugs = p: [
p.tree-sitter-c
p.tree-sitter-go
p.tree-sitter-nix
p.tree-sitter-rust
p.tree-sitter-typescript
];
in with pkgs.vimPlugins; [
{
plugin = (nvim-treesitter.withPlugins treeplugs);
type = "lua";
config = configText;
}
];
};
}

View file

@ -53,8 +53,8 @@
binds = with config.lib.niri.actions; { binds = with config.lib.niri.actions; {
"Mod+Return".action= spawn "${config.defaultApps.terminal}"; "Mod+Return".action= spawn "${config.defaultApps.terminal}";
"Mod+Shift+Return".action = spawn "${pkgs.fuzzel}/bin/fuzzel"; "Mod+Shift+Return".action = spawn "${pkgs.fuzzel}/bin/fuzzel";
"Mod+P".action.screenshot = []; "Mod+P".action = screenshot;
"Mod+Shift+P".action.screenshot-window = []; "Mod+Shift+P".action = screenshot-window;
"Mod+Tab".action = switch-preset-column-width; "Mod+Tab".action = switch-preset-column-width;
"Mod+Shift+Q".action = quit; "Mod+Shift+Q".action = quit;

View file

@ -1,4 +1,4 @@
{ config, lib, ... }: { config, lib, usernameAtHostname, ... }:
{ {
options = { options = {
@ -9,15 +9,17 @@
browser = lib.mkOption { default = ""; }; browser = lib.mkOption { default = ""; };
}; };
}; };
config = { config = let
st = lib.strings;
in {
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
home.stateVersion = "23.05"; home.stateVersion = "23.05";
home = { home = {
username = "pan"; username = builtins.elemAt (st.splitString "@" usernameAtHostname) 0;
homeDirectory = "/home/pan"; homeDirectory = "/home/" + config.home.username;
packages = config.extraPkgs; packages = config.extraPkgs;
}; };

View file

@ -6,10 +6,7 @@
}; };
config = lib.mkIf config.ssh.enable { config = lib.mkIf config.ssh.enable {
programs.ssh = { programs.ssh.enable = true;
enable = true;
enableDefaultConfig = false;
};
home.packages = with pkgs; [ home.packages = with pkgs; [
sshfs # SSH File system sshfs # SSH File system
]; ];

View file

@ -1,30 +1,25 @@
{ config, lib, ... }: { config, inputs, pkgs, lib, ... }:
{ {
options.ags = { options.ags = {
enable = lib.mkEnableOption "Enable ags"; enable = lib.mkEnableOption "Enable ags";
}; };
config.warnings = lib.mkIf config.ags.enable [''
ags.enable has been deprecated to allow the removal of ags from flake
inputs.
''];
# imports = [ inputs.ags.homeManagerModules.default ]; imports = [ inputs.ags.homeManagerModules.default ];
# config = lib.mkIf config.ags.enable { config = lib.mkIf config.ags.enable {
# home.packages = with pkgs; [ home.packages = with pkgs; [
# libnotify # Notifications through ags libnotify # Notifications through ags
# ]; ];
# programs.ags = { programs.ags = {
# enable = true; enable = true;
# configDir = ./config; configDir = ./config;
#
# extraPackages = with pkgs; [ extraPackages = with pkgs; [
# gtksourceview gtksourceview
# webkitgtk webkitgtk
# accountsservice accountsservice
# ]; ];
# }; };
# }; };
} }

View file

@ -27,8 +27,7 @@
tuigreet.enable = true; tuigreet.enable = true;
niri.enable = true; niri.enable = true;
tailscale.enable = true;
postgres.enable = true; postgres.enable = true;
shell.enabledShells = [ "fish" ]; shell.enabledShells = [ "fish" ];

View file

@ -1,4 +1,4 @@
[Kabal] ["TheKabal2.4"]
["DropboxGuest3.0"] ["DropboxGuest3.0"]

View file

@ -1,5 +1,9 @@
wireless: ENC[AES256_GCM,data:VU8tpeCgEFSUC490q1hGgBrdFFscL2QybywlpiFG3suofj2Q2VVXKLK4EpF2ebpf/nBf/ggHv/uoSFxuQYYvIsMIo1bYOKvM5QNMi9HO2KmfFbmQYYzmt5CNNh9tno9wmiekeDOnKjQDGK5CoGLD4+y+VW1IVrN9XL+xRxAszgYM4qdSim7CJ1hgU89OgzVL9poVsmqxbiuWY88+ZErIspSHO0QwGOJ5Pc4OixEK2N3EtcYDhV5fBvlFv7t4b8P6BJZIn2NVXCVaW4UcEsefcxHqohd5AuYXJH7wt9aPwJRJehxd9GhVJeQ6QtPXuqZaEspd+dSvlYrvdO8pFTrIklrty30CJg3WberWmI111T8ZNFlNBghSu6nXzO9YkKfDuAYUEPVERL9jG9xF8tGb1JxhOmg33Kg6fg==,iv:07Reckni7LSfDL3qVUv4v80IOVQSbFpz49UsyiIDGWk=,tag:iMgCspLUWNCjjYT0pkMwDw==,type:str] wireless: ENC[AES256_GCM,data:pQv+gdAW8W9nSEJkbXWex47iuuqgJMEELldFsmgk2Y08MDZ1ytXqlphTK/jbewD3tpz4v29fSuWamv1uZpxM2+c2zCuMVTdrhAf0i/Sjqd9CWP8NQvTDI3v8ps9REFzR7n7hywnkfOkDNwRkmavSfCxK5k9SQLNC7De6P811/Fundb9r6oeIH2OEDBkZEHw8gYndjy6cLDUE2SY/cmxRsKWhATsCLcWKOpQa86zlT9dr9nMtYVF1AN5T4JR/7QKqJ8UT4mvhAA0OEfKv0Cf3euH24vtBrv5YxwDT6tQpOABOyOy9mWLc+bXDID/HX4akeU1O6+eBSpNeRgpAcMfD6b/eqKAvDvnixHubu9GemVspmeoA/91i5B70u3kjm0EKup7KLXCp5RutLnLRczDPdfbCB7bEipeRyF8P+UCuhQ==,iv:WN7mGyHpaMDdLRpFGyDUQ2D9a0t/rucfyKroJYqaHPs=,tag:7KTzBEt30nqCJclDgiWuKg==,type:str]
sops: sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: age:
- recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68
enc: | enc: |
@ -19,7 +23,8 @@ sops:
Ky83VFhiVE9wK01UMDlSbnIrd2d2SHcKp6mF8PaR0ItrvLHpEgMe6fwuboyrrs9y Ky83VFhiVE9wK01UMDlSbnIrd2d2SHcKp6mF8PaR0ItrvLHpEgMe6fwuboyrrs9y
7Ct6qZ1SN/4f/xJpDP2qiaQ4KTZzY1BlC3isT3CWeajOQhL/y5JCOw== 7Ct6qZ1SN/4f/xJpDP2qiaQ4KTZzY1BlC3isT3CWeajOQhL/y5JCOw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-08-27T05:30:04Z" lastmodified: "2024-11-07T21:12:36Z"
mac: ENC[AES256_GCM,data:hoSykxuHPAofdbXNJCyozeQYYhg3yXLOVx+K9PsSctUMrIc9ii76SDGY2h+6gFNy1rGkPxmYHueqHEJHvvoxLHcwkwoN8AddOVrnXNoIpOvwcn0GfpPIPf5rCvxSxvcsZwPW+affMMVRyRR8aJ3llj7ojuuuyTnm+HL9H9vY1PQ=,iv:pUXl49AqRerTlGoOzoWt0NrEo8rqPmBF7yiB4ZufC3M=,tag:1mP3jsP2O6yKlJVmaA7EMQ==,type:str] mac: ENC[AES256_GCM,data:z0ePEvsEKvcMca2x2qjTsSBwk+qI3jd8h2uAnSsGtJL5UI1OdBL8oVIGKty0pGaCvtrF01UN1ncKBGe5y12Vij2yuyv7LK4ANArxQ4+O583NdYHYeD+T75yGu4SAYjcoM23RD1h+W0SLQpCen2J3WYmJaOjtqMBv/gaFYl/DV7I=,iv:VJjZTd1g4oJCDLEp8+jH15Y2svTNtQUE1vc3WQoJJZU=,tag:4U7uh6U5PwHJ2r6/WFUbnw==,type:str]
pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.10.2 version: 3.9.1

View file

@ -0,0 +1,23 @@
{ pkgs, ... }:
{
systemd.timers."bsky-announcements" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "20s";
# OnCalendar = "Thu *-*-* 8:00:00 America/Los_Angeles";
# Persistent = true;
Unit = "bsky-announcements.service";
};
};
systemd.services."bsky-announcements" = {
script = ''
set -eu
${pkgs.coreutils}/bin/echo "Hello World"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
}

31
hosts/juri/host.nix Normal file
View file

@ -0,0 +1,31 @@
{ ... }:
{
imports = [
./hardware.nix
./webservices.nix
./bskyannouncements.nix
];
system.stateVersion = "24.11";
system.timezone = "America/Los_Angeles";
system.users.bigWheels = [ "pan" ];
sops-nix = {
enable = true;
keyFile = "/etc/sops/age/keys.txt";
sopsFile = ./secrets.yaml;
secrets = {
pdsEnv = {};
forgejoPassword = {
owner = "forgejo";
};
};
};
postgres.enable = true;
shell.enabledShells = [ "fish" ];
shell.defaultShell = "fish";
tailscale.enable = true;
sshd.enable = true;
}

View file

@ -1,7 +1,10 @@
pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str]
forgejoPassword: ENC[AES256_GCM,data:cQJJbf07v4HngeSYE2TwTcAx8WY=,iv:533TO2MfJVop93U4T7yIIiu6i4swDtduFuu79ZzFYFU=,tag:Pz5u/NqOSTKz2zFNzNLY5w==,type:str] forgejoPassword: ENC[AES256_GCM,data:cQJJbf07v4HngeSYE2TwTcAx8WY=,iv:533TO2MfJVop93U4T7yIIiu6i4swDtduFuu79ZzFYFU=,tag:Pz5u/NqOSTKz2zFNzNLY5w==,type:str]
caddyApi: ENC[AES256_GCM,data:mWb/pMr1cxbz6K2ZQkV3AF93/GtIPZyYrJfDDbisK3GhMlWOVZNWDzw7cC/e+1w5aSxeGmOAE13eETVpV9q8W2Bjg8IADn/4j8Su90LxAr+U77pVoF0gUvv1CagEXM8myx+GgaAG80xIeSUNUMOMsgUhJTBoaMrVpHDEPREsa9XyRzEB4X3uQnKx4tUNcUqGSUu5wvMfXDF7rNzJhkVEfE6i,iv:h5QLei1PcZUc4djaqbId9VFv8Rr2dTa7CNowxZVlRUA=,tag:nBfyFVU/fBboswcVsGKL4A==,type:str]
sops: sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: age:
- recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68
enc: | enc: |
@ -30,7 +33,8 @@ sops:
N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu
vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-09-17T01:49:06Z" lastmodified: "2025-03-24T19:31:53Z"
mac: ENC[AES256_GCM,data:THEyH3KP9VVFiP7NAPn693dolWIWByb3wSjwC9QLSTe3cgdJbFqa5GvVzFa6xM1ue/GYStMwYIZt0+3LP5Wz5B2KWNy2ljvgFXjzlDHxSOzkWi3/yP9fnuRyf0vujW2Q0ltkXMleyKSisZCD87FjuUz1J9LBYQP64e0mhyB5jL4=,iv:WUDt4AusjrQVhDFk/XSohBlmxjp6Dp6EoMe08yQ0RYg=,tag:LC2j1Bvgo7h29O9mmgIFCw==,type:str] mac: ENC[AES256_GCM,data:5FVSw5wMXRl4qZQmD4yS7g/9qztaveDiU7mgifiOhOBqQrtvv5I/V7rkb5nKew+N3vKmg4vpWBL4kFxsQvWekAPT+ToNED4XhB5H5wZ/RyXga0CU0PMKWtGdEKdyjs4cIZjfScclW0ONgaSkv6XtCLj1V+ukPY3WBI3/2jnf6dA=,iv:7p1qEG1+E7SNLv64/aqjm1ppF4jQ/5h+Z5iHzd8sGDA=,tag:hG59vDcqha1MQf+kN1jguw==,type:str]
pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.10.2 version: 3.9.4

View file

@ -0,0 +1,10 @@
{ config, pkgs, ... }:
{
fish.enable = true;
git = {
enable = true;
username = "Badtz";
email = "may@badtz.dev";
};
}

View file

@ -2,29 +2,9 @@
let let
email = "admin@woach.me"; email = "admin@woach.me";
in { in {
imports = [
./hardware.nix ];
system.stateVersion = "24.11";
system.timezone = "America/Los_Angeles";
system.users.bigWheels = [ "pan" ];
sops-nix = {
enable = true;
keyFile = "/etc/sops/age/keys.txt";
sopsFile = ./secrets.yaml;
secrets = {
pdsEnv = {};
forgejoPassword = {
owner = "forgejo";
};
caddyApi = {};
};
};
caddy = { caddy = {
enable = true; enable = true;
adminEmail = email; adminEmail = email;
environmentFile = config.sops.secrets.caddyApi.path;
vhosts = { vhosts = {
"juri.woach.me" = { "juri.woach.me" = {
extraConfig = '' extraConfig = ''
@ -41,12 +21,6 @@ in {
extraConfig = '' extraConfig = ''
reverse_proxy :${builtins.toString config.headscale.server.port} reverse_proxy :${builtins.toString config.headscale.server.port}
''; '';
serverAliases = [ "*.dns.ginko.woach.me" ];
};
"juri.${config.services.headscale.settings.dns.base_domain}" = {
extraConfig = ''
reverse_proxy :${builtins.toString config.fava.port}
'';
}; };
}; };
}; };
@ -73,34 +47,20 @@ in {
server.domain = "ginko.woach.me"; server.domain = "ginko.woach.me";
}; };
fava = {
enable = true;
port = 5128;
};
syncthing = { syncthing = {
enable = true; enable = true;
devices = { devices = {
"homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU";
"onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC";
"kobayashi".id = "4JPJHO4-RZHZZYE-ZUDFCZ4-KLBTMLJ-CNZBWWB-NTESYNA-X3EDAZ6-OMKHQAT";
"jibril".id = "EWGTILX-AJPLRZ7-UNGM3DJ-5EXGBTB-SHEZKMB-7A6QSER-H6O73FH-JSXCZQL";
}; };
folders = { folders = {
"wiki" = { "wiki" = {
path = "/var/lib/wiki"; path = "/var/lib/wiki";
devices = [ "homura" "onizuka" "kobayashi" "jibril" ]; devices = [ "homura" "onizuka" ];
}; };
}; };
}; };
systemd.tmpfiles.rules = [ "d /var/lib/wiki 0755 syncthing syncthing -" ]; systemd.tmpfiles.rules = [ "d /var/lib/wiki 0755 syncthing syncthing -" ];
postgres.enable = true;
shell.enabledShells = [ "fish" ];
shell.defaultShell = "fish";
tailscale.enable = true;
sshd.enable = true;
} }

View file

@ -4,10 +4,7 @@
imports = [ imports = [
./hardware.nix ./hardware.nix
]; ];
nvidia = { nvidia.enable = true;
enable = true;
stable = true;
};
pipewire.enable = true; pipewire.enable = true;
polkit.enable = true; polkit.enable = true;
tablet.enable = true; tablet.enable = true;
@ -18,11 +15,13 @@
sshd.enable = true; sshd.enable = true;
tailscale.enable = true; tailscale.enable = true;
sddm.enable = true; tuigreet.enable = true;
niri.enable = true; niri.enable = true;
steam.enable = true; steam.enable = true;
steam.gamemode = true; steam.gamemode = true;
aagl.enable = true;
aagl.honkai-rail = true;
input-remapper.enable = true; input-remapper.enable = true;
postgres.enable = true; postgres.enable = true;

View file

@ -1,4 +1,4 @@
{ config, ... }: { config, pkgs, ... }:
{ {
# "DP-2" = [ # "DP-2" = [
@ -27,14 +27,8 @@
enable = true; enable = true;
mouse.accel = -0.53; mouse.accel = -0.53;
outputs = { outputs = {
"DP-1" = { "DP-1".mode = { width = 2560; height = 1440; refresh = 144.000; };
position = { x = 2560; y = 0; }; "DP-2".mode = { width = 2560; height = 1440; refresh = 144.000; };
mode = { width = 2560; height = 1440; refresh = 144.000; };
};
"DP-2" = {
position = { x = 0; y = 0; };
mode = { width = 2560; height = 1440; refresh = 144.000; };
};
}; };
}; };
@ -66,18 +60,28 @@
mpv.enable = true; mpv.enable = true;
zathura.enable = true; zathura.enable = true;
feh.enable = true; feh.enable = true;
beets.enable = true;
neovim = { neovim.enable = true;
enable = true; neovim.languages = {
languages = { c.enable = true;
c.enable = true; nix.enable = true;
nix.enable = true; rust.enable = true;
rust.enable = true; typescript.enable = true;
typescript.enable = true;
};
themes.catppuccin.enable = true;
}; };
neovim.plugins = {
comments.enable = true;
fugitive.enable = true;
lualine.enable = true;
luasnip.enable = true;
nvimcmp.enable = true;
telescope = {
enable = true;
fzf.enable = true;
};
treesitter.enable = true;
wiki.enable = true;
};
neovim.themes.catppuccin.enable = true;
lf.enable = true; lf.enable = true;
lf.hiddenfiles = [ lf.hiddenfiles = [
@ -93,7 +97,16 @@
gimp.enable = true; gimp.enable = true;
beeper.enable = true;
discord.enable = true; discord.enable = true;
lutris.enable = true; lutris.enable = true;
extraPkgs = with pkgs; [
# Applications
ani-cli # Easy anime player
lutgen # LUT generator
prismlauncher # Minecraft launcher
jdk8 # For playing older minecraft
];
} }

View file

@ -1,4 +1,4 @@
{ config, lib, ... }: { config, inputs, lib, ... }:
{ {
options.aagl = { options.aagl = {
@ -12,21 +12,16 @@
"Enables honkai 3rd impact"; "Enables honkai 3rd impact";
}; };
# imports = [ inputs.aagl.nixosModules.default ]; imports = [ inputs.aagl.nixosModules.default ];
config.warnings = lib.mkIf (config.aagl.enable || config.aagl.honkai-rail || config = lib.mkIf config.aagl.enable {
config.aagl.genshin || config.aagl.honkai-3rd) ['' nix.settings = inputs.aagl.nixConfig;
aagl.* has been deprecated to allow the removal of aagl from flake inputs.
''];
# config = lib.mkIf config.aagl.enable { programs.honkers-railway-launcher.enable =
# nix.settings = inputs.aagl.nixConfig; lib.mkIf config.aagl.honkai-rail true;
# programs.anime-game-launcher.enable =
# programs.honkers-railway-launcher.enable = lib.mkIf config.aagl.genshin true;
# lib.mkIf config.aagl.honkai-rail true; programs.honkers-launcher.enable =
# programs.anime-game-launcher.enable = lib.mkIf config.aagl.honkai-3rd true;
# lib.mkIf config.aagl.genshin true; };
# programs.honkers-launcher.enable =
# lib.mkIf config.aagl.honkai-3rd true;
# };
} }

View file

@ -1,15 +1,14 @@
{ config, pkgs, lib, inputs, ... }: { config, pkgs, lib, hostname, usernameList, ... }:
{ {
options.system = { options = {
timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.timezone = lib.mkOption { default = "America/Los_Angeles"; };
extraFonts = lib.mkOption { default = []; }; system.extraFonts = lib.mkOption { default = []; };
extraPkgs = lib.mkOption { default = []; }; system.isNonEFI = lib.mkEnableOption
isNonEFI = lib.mkEnableOption
"Enable if you are running a non-EFI system"; "Enable if you are running a non-EFI system";
users.bigWheels = lib.mkOption { default = []; }; system.users.bigWheels = lib.mkOption { default = []; };
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.system.isNonEFI { (lib.mkIf config.system.isNonEFI {
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
@ -22,6 +21,7 @@
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
}) })
{ {
networking.hostName = hostname;
system.stateVersion = lib.mkDefault "23.05"; system.stateVersion = lib.mkDefault "23.05";
time.timeZone = config.system.timezone; time.timeZone = config.system.timezone;
@ -29,25 +29,14 @@
# Packages & Default Packages # Packages & Default Packages
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
nix = {
registry.nixpkgs.flake = inputs.nixpkgs;
gc = { automatic = true; options = "--delete-older-than 5d"; };
channel.enable = false;
settings = {
auto-optimise-store = true;
keep-going = true;
use-xdg-base-directories = true;
experimental-features = [
"flakes"
"nix-command"
];
};
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
git git
neovim neovim
xdg-user-dirs xdg-user-dirs
] ++ config.system.extraPkgs; ];
# XDG Compliance
nix.settings.use-xdg-base-directories = true;
users = { users = {
users = builtins.listToAttrs (map ( users = builtins.listToAttrs (map (
@ -59,7 +48,7 @@
extraGroups = [ "network" ]; extraGroups = [ "network" ];
}; };
} }
) [ "pan" ]); ) usernameList);
groups = { groups = {
wheel = { wheel = {
members = config.system.users.bigWheels; members = config.system.users.bigWheels;

View file

@ -5,28 +5,14 @@
enable = lib.mkEnableOption "Enables caddy webserver"; enable = lib.mkEnableOption "Enables caddy webserver";
vhosts = lib.mkOption {}; vhosts = lib.mkOption {};
adminEmail = lib.mkOption { type = lib.types.str; }; adminEmail = lib.mkOption { type = lib.types.str; };
environmentFile = lib.mkOption {};
}; };
config = lib.mkIf config.caddy.enable { config = lib.mkIf config.caddy.enable {
networking.firewall.allowedTCPPorts = [ 80 443 ]; networking.firewall.allowedTCPPorts = [ 80 443 ];
services.caddy = { services.caddy = {
enable = true; enable = true;
globalConfig = ''
acme_dns porkbun {
api_key {$APIKEY}
api_secret_key {$APISECRETKEY}
}
'';
package = pkgs.caddy.withPlugins {
plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ];
hash = "sha256-NlZY/EEY9TbqrMAkSHK2aGm5AjFTvpvBXV1GW1PnXCc=";
};
virtualHosts = config.caddy.vhosts; virtualHosts = config.caddy.vhosts;
email = config.caddy.adminEmail; email = config.caddy.adminEmail;
}; };
systemd.services.caddy.serviceConfig.EnvironmentFile = [
config.caddy.environmentFile
];
}; };
} }

View file

@ -12,10 +12,13 @@
else (if config.niri.enable then "niri" else null); else (if config.niri.enable then "niri" else null);
in { in {
enable = true; enable = true;
package = pkgs.tuigreet; package = pkgs.greetd.tuigreet;
settings = { settings = {
terminal = {
vt = 2;
};
default_session = lib.mkIf (wm != null) { default_session = lib.mkIf (wm != null) {
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd ${wm}"; command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd ${wm}";
user = "greeter"; user = "greeter";
}; };
}; };

View file

@ -1,56 +0,0 @@
{ config, pkgs, lib, ... }:
{
options.fava = {
enable = lib.mkEnableOption "Enables fava double entry accounting";
ledgerFiles = lib.mkOption {
default = ["/var/lib/fava/ledger.beancount"];
};
port = lib.mkOption { default = 5000; };
host = lib.mkOption { default = "localhost"; };
favaHome = lib.mkOption { default = "/var/lib/fava"; };
};
config = lib.mkIf config.fava.enable {
systemd.services.fava = {
description = "Fava";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = with config.fava; let
command = lib.concatStringsSep " " ([
"${pkgs.fava}/bin/fava"
"--port ${builtins.toString port}"
"--host ${host}"
] ++ ["--"] ++ ledgerFiles);
in command;
Type = "simple";
User = "fava";
Group = "fava";
Restart = "on-failure";
RestartSec = "5s";
NoNewPrivileges = true;
PrivateTmp = true;
PrivateDevices = true;
ProtectHome = true;
ProtectSystem = "full";
ReadWriteDirectories = config.fava.favaHome;
};
};
networking.firewall.allowedTCPPorts = [ config.fava.port ];
users.users.fava = {
home = config.fava.favaHome;
createHome = true;
isSystemUser = true;
group = "fava";
};
users.groups.fava = {};
system.extraPkgs = [
pkgs.beancount
];
};
}

View file

@ -17,7 +17,7 @@
settings = { settings = {
server_url = "https://${config.headscale.server.domain}"; server_url = "https://${config.headscale.server.domain}";
dns = { dns = {
base_domain = "dns.${config.headscale.server.domain}"; base_domain = "connect.claris";
override_local_dns = false; override_local_dns = false;
}; };
}; };

View file

@ -1,4 +1,4 @@
{ config, lib, ... }: { inputs, config, lib, ... }:
{ {
@ -6,14 +6,18 @@
enable = lib.mkEnableOption "Enables hyprland"; enable = lib.mkEnableOption "Enables hyprland";
}; };
# imports = [ imports = [
# inputs.hyprland.nixosModules.default inputs.hyprland.nixosModules.default
# ]; ];
config.warnings = lib.mkIf config.hyprland.enable ['' config = {
hyprland.enable has been deprecated to allow the removal of hyprland from nix.settings = {
flake inputs. substituters = [ "https://hyprland.cachix.org" ];
'']; trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
# config.programs.hyprland.enable = lib.mkIf config.hyprland.enable true; ];
experimental-features = [ "nix-command" "flakes" ];
};
programs.hyprland.enable = lib.mkIf config.hyprland.enable true;
};
} }

View file

@ -2,22 +2,22 @@
{ {
options.nvidia = { options.nvidia = {
enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; enable = lib.mkEnableOption
"Enables nvidia with proprietary drivers";
open = lib.mkEnableOption "Use open nvidia option for newer cards"; open = lib.mkEnableOption "Use open nvidia option for newer cards";
stable = lib.mkEnableOption "Use stable instead of beta";
}; };
config = lib.mkIf config.nvidia.enable { config = lib.mkIf config.nvidia.enable {
hardware.graphics.enable = true; hardware.graphics = {
enable = true;
};
services.xserver.videoDrivers = ["nvidia"]; services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = { hardware.nvidia = {
open = if config.nvidia.open then true else false; open = if config.nvidia.open then true else false;
modesetting.enable = true; modesetting.enable = true;
package = if config.nvidia.stable package = config.boot.kernelPackages.nvidiaPackages.beta;
then config.boot.kernelPackages.nvidiaPackages.stable
else config.boot.kernelPackages.nvidiaPackages.beta;
}; };
boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; boot.kernelParams = [ "nvidia_drm.fbdev=1" ];

View file

@ -2,14 +2,14 @@
{ {
options.pds = { options.pds = {
enable = lib.mkEnableOption "Enables atproto (blueksy) Personal Data Server"; enable = lib.mkEnableOption "Enables atproto Personal Data Server";
hostname = lib.mkOption { type = lib.types.str; }; hostname = lib.mkOption { type = lib.types.str; };
adminEmail = lib.mkOption { type = lib.types.str; }; adminEmail = lib.mkOption { type = lib.types.str; };
environmentFile = lib.mkOption { type = lib.types.path; }; environmentFile = lib.mkOption { type = lib.types.path; };
}; };
config = lib.mkIf config.pds.enable { config = lib.mkIf config.pds.enable {
services.bluesky-pds = { services.pds = {
enable = true; enable = true;
environmentFiles = [ config.pds.environmentFile ]; environmentFiles = [ config.pds.environmentFile ];
settings = { settings = {

View file

@ -1,27 +0,0 @@
{ config, pkgs, lib, inputs', ... }:
{
options.sddm = {
enable = lib.mkEnableOption "enables sddm";
};
config = lib.mkIf config.sddm.enable (let
sddm-theme = inputs'.silentSDDM.packages.default.override {
theme = "catppuccin-macchiato";
};
in {
qt.enable = true;
environment.systemPackages = [ sddm-theme sddm-theme.test ];
services.displayManager.sddm = {
wayland.enable = true;
package = pkgs.kdePackages.sddm;
enable = true;
theme = sddm-theme.pname;
extraPackages = sddm-theme.propagatedBuildInputs;
settings.General = {
GreeterEnvironment = "QML2_IMPORT_PATH=${sddm-theme}/share/sddm/themes/${sddm-theme.pname}/components/,QT_IM_MODULE=qtvirtualkeyboard";
InputMethod = "qtvirtualkeyboard";
};
};
});
}