Compare commits
5 Commits
25ea289fcd
...
c26b837282
Author | SHA1 | Date |
---|---|---|
|
c26b837282 | |
|
8cc5e78e22 | |
|
a63893b566 | |
|
9b2b73e865 | |
|
4ecf1e471f |
235
flake.lock
235
flake.lock
|
@ -8,11 +8,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733743004,
|
||||
"narHash": "sha256-ZgnLrPOLrDTpGpvdMpX9cPPn7GrisnKhEw/x8M6Vf4Y=",
|
||||
"lastModified": 1738087375,
|
||||
"narHash": "sha256-GLyNtU9A2VN22jNRHZ2OXuFfTJLh8uEVVt+ftsKUX0c=",
|
||||
"owner": "Aylur",
|
||||
"repo": "ags",
|
||||
"rev": "ce27d3036f7fbebc3476ccbb5a1c51f0603c2475",
|
||||
"rev": "a6a7a0adb17740f4c34a59902701870d46fbb6a4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -41,11 +41,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731959031,
|
||||
"narHash": "sha256-TGcvIjftziC1CjuiHCzrYDwmOoSFYIhdiKmLetzB5L0=",
|
||||
"lastModified": 1742213273,
|
||||
"narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "4468981c1c50999f315baa1508f0e53c4ee70c52",
|
||||
"rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -62,11 +62,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733520119,
|
||||
"narHash": "sha256-6K07ZJTnFu1xASBCMtVc9cFTbBEauwSc7gGBmjLkLSk=",
|
||||
"lastModified": 1737670815,
|
||||
"narHash": "sha256-ZCxxshGN7XooabArcoGkYSNx5yVunqjKJi2aTv6cznI=",
|
||||
"owner": "aylur",
|
||||
"repo": "astal",
|
||||
"rev": "4c19d8d06fa25cc6389f37abe8839b4d8be5c0d6",
|
||||
"rev": "127e9cdcbf173846a3c40ddc0abfbb038df48042",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -129,6 +129,24 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"grayjay": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743203987,
|
||||
"narHash": "sha256-fA1qhxuaZsQODGXr+gQETYI0ow6ak8Vp1VSKv/+jsPs=",
|
||||
"owner": "rishabh5321",
|
||||
"repo": "grayjay-flake",
|
||||
"rev": "eb64a22457766aeff5935ed72f91249e387520d3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rishabh5321",
|
||||
"repo": "grayjay-flake",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
|
@ -136,11 +154,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733873195,
|
||||
"narHash": "sha256-dTosiZ3sZ/NKoLKQ++v8nZdEHya0eTNEsaizNp+MUPM=",
|
||||
"lastModified": 1743136572,
|
||||
"narHash": "sha256-uwaVrKgi6g1TUq56247j6QvvFtYHloCkjCrEpGBvV54=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "f26aa4b76fb7606127032d33ac73d7d507d82758",
|
||||
"rev": "1efd2503172016a6742c87b47b43ca2c8145607d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -166,11 +184,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1728669738,
|
||||
"narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=",
|
||||
"lastModified": 1742215578,
|
||||
"narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprcursor",
|
||||
"rev": "0264e698149fcb857a66a53018157b41f8d97bb0",
|
||||
"rev": "2fd36421c21aa87e2fe3bee11067540ae612f719",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -195,11 +213,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733248371,
|
||||
"narHash": "sha256-FFLJzFTyNhS7tBEEECx0B8Ye/bpmxhFVEKlECgMLc6c=",
|
||||
"lastModified": 1739049071,
|
||||
"narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"rev": "cc95e5babc6065bc3ab4cd195429a9900836ef13",
|
||||
"rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -218,17 +236,17 @@
|
|||
"hyprlang": "hyprlang",
|
||||
"hyprutils": "hyprutils",
|
||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"pre-commit-hooks": "pre-commit-hooks",
|
||||
"systems": "systems",
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733864105,
|
||||
"narHash": "sha256-WjyOigIoneQijFAHxpu2xHCRdl4PcVctx0c1miPBBIA=",
|
||||
"lastModified": 1743207575,
|
||||
"narHash": "sha256-bNz2WfcZAF6hZkcEcRYFsoh49wNAamphS+NOhSrf5A0=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland",
|
||||
"rev": "4d05677e8d398b6fa144eae7a98ad4f2a54acb92",
|
||||
"rev": "7374a023eff964817c9e5fbe75a661540516f798",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -249,11 +267,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1728345020,
|
||||
"narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=",
|
||||
"lastModified": 1738422629,
|
||||
"narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "a7c183800e74f337753de186522b9017a07a8cee",
|
||||
"rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -262,10 +280,49 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-qt-support": {
|
||||
"inputs": {
|
||||
"hyprlang": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"hyprlang"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1737634706,
|
||||
"narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qt-support",
|
||||
"rev": "8810df502cdee755993cb803eba7b23f189db795",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qt-support",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-qtutils": {
|
||||
"inputs": {
|
||||
"hyprland-qt-support": "hyprland-qt-support",
|
||||
"hyprlang": [
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"hyprland-qtutils",
|
||||
"hyprlang",
|
||||
"hyprutils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
|
@ -278,11 +335,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733472316,
|
||||
"narHash": "sha256-PvXiFLIExJEJj+goLbIuXLTN5CSDSAUsAfiYSdbbWg0=",
|
||||
"lastModified": 1739048983,
|
||||
"narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-qtutils",
|
||||
"rev": "969427419276c7ee170301ef1ebe0f68eb6eb2e2",
|
||||
"rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -307,11 +364,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1728168612,
|
||||
"narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=",
|
||||
"lastModified": 1741191527,
|
||||
"narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e",
|
||||
"rev": "72df3861f1197e41b078faa3e38eedd60e00018d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -332,11 +389,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1732288281,
|
||||
"narHash": "sha256-XTU9B53IjGeJiJ7LstOhuxcRjCOFkQFl01H78sT9Lg4=",
|
||||
"lastModified": 1741534688,
|
||||
"narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "b26f33cc1c8a7fd5076e19e2cce3f062dca6351c",
|
||||
"rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -357,11 +414,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726874836,
|
||||
"narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=",
|
||||
"lastModified": 1739870480,
|
||||
"narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwayland-scanner",
|
||||
"rev": "500c81a9e1a76760371049a8d99e008ea77aa59e",
|
||||
"rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -376,15 +433,15 @@
|
|||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable_2",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733708804,
|
||||
"narHash": "sha256-PiUrztTiR4aVRC2fMdNcOWYWF1ojvqbrSUYmhtp3970=",
|
||||
"lastModified": 1743246566,
|
||||
"narHash": "sha256-arEFUDLjADYIZ7T6PZX1yLOnfMoZ1ByebtmPuvV98+s=",
|
||||
"owner": "lilyinstarlight",
|
||||
"repo": "nixos-cosmic",
|
||||
"rev": "1531210f371ecf966ff67e87975f684553bdbbf7",
|
||||
"rev": "c709db4b95e58f410978bb49c87cb74214d03e78",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -395,11 +452,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1733392399,
|
||||
"narHash": "sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG+cBns=",
|
||||
"lastModified": 1743095683,
|
||||
"narHash": "sha256-gWd4urRoLRe8GLVC/3rYRae1h+xfQzt09xOfb0PaHSk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d0797a04b81caeae77bcff10a9dde78bc17f5661",
|
||||
"rev": "5e5402ecbcb27af32284d4a62553c019a3a49ea6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -411,27 +468,11 @@
|
|||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1730741070,
|
||||
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
|
||||
"lastModified": 1742937945,
|
||||
"narHash": "sha256-lWc+79eZRyvHp/SqMhHTMzZVhpxkRvthsP1Qx6UCq0E=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-24.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable_2": {
|
||||
"locked": {
|
||||
"lastModified": 1733412085,
|
||||
"narHash": "sha256-FillH0qdWDt/nlO6ED7h4cmN+G9uXwGjwmCnHs0QVYM=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4dc2fc4e62dbf62b84132fe526356fbac7b03541",
|
||||
"rev": "d02d88f8de5b882ccdde0465d8fa2db3aa1169f7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -443,11 +484,27 @@
|
|||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1733759999,
|
||||
"narHash": "sha256-463SNPWmz46iLzJKRzO3Q2b0Aurff3U1n0nYItxq7jU=",
|
||||
"lastModified": 1742669843,
|
||||
"narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1e5b653dff12029333a6546c11e108ede13052eb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1743095683,
|
||||
"narHash": "sha256-gWd4urRoLRe8GLVC/3rYRae1h+xfQzt09xOfb0PaHSk=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a73246e2eef4c6ed172979932bc80e1404ba2d56",
|
||||
"rev": "5e5402ecbcb27af32284d4a62553c019a3a49ea6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -457,13 +514,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1735471104,
|
||||
"narHash": "sha256-0q9NGQySwDQc7RhAV2ukfnu7Gxa5/ybJ2ANT8DQrQrs=",
|
||||
"lastModified": 1742288794,
|
||||
"narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4",
|
||||
"rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -492,11 +549,11 @@
|
|||
"plugin-rainbow-delimiters-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1733870816,
|
||||
"narHash": "sha256-40NE1+BFG6OPcHKGejfltuTANB/GTIPn1BfvAB55t9Q=",
|
||||
"lastModified": 1742829650,
|
||||
"narHash": "sha256-sQAVw+9bKmJzX/MHA/vcmvzL+Q5kyWpDfPJ97efxQxE=",
|
||||
"owner": "HiPhish",
|
||||
"repo": "rainbow-delimiters.nvim",
|
||||
"rev": "dc788723f717bdd3041838b8db34cce53c9aa920",
|
||||
"rev": "de39919a57e1a40a4c7dc5bae0de276f9c616ef3",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
|
@ -528,15 +585,14 @@
|
|||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733318908,
|
||||
"narHash": "sha256-SVQVsbafSM1dJ4fpgyBqLZ+Lft+jcQuMtEL3lQWx2Sk=",
|
||||
"lastModified": 1742649964,
|
||||
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "6f4e2a2112050951a314d2733a994fbab94864c6",
|
||||
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -548,10 +604,11 @@
|
|||
"root": {
|
||||
"inputs": {
|
||||
"ags": "ags",
|
||||
"grayjay": "grayjay",
|
||||
"home-manager": "home-manager",
|
||||
"hyprland": "hyprland",
|
||||
"nixos-cosmic": "nixos-cosmic",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"plugin-harpoon1": "plugin-harpoon1",
|
||||
"plugin-rainbow-delimiters-nvim": "plugin-rainbow-delimiters-nvim",
|
||||
"plugin-undotree-nvim": "plugin-undotree-nvim",
|
||||
|
@ -566,11 +623,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733625333,
|
||||
"narHash": "sha256-tIML2axjm4AnlKP29upVJxzBpj4Cy4ak+PKonqQtXmc=",
|
||||
"lastModified": 1743215516,
|
||||
"narHash": "sha256-52qbrkG65U1hyrQWltgHTgH4nm0SJL+9TWv2UDCEPNI=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "430c8b054e45ea44fd2c9521a378306ada507a6c",
|
||||
"rev": "524463199fdee49338006b049bc376b965a2cfed",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -622,11 +679,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733157064,
|
||||
"narHash": "sha256-NetqJHAN4bbZDQADvpep+wXk2AbMZ2bN6tINz8Kpz6M=",
|
||||
"lastModified": 1741934139,
|
||||
"narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "fd85ef39369f95eed67fdf3f025e86916edeea2f",
|
||||
"rev": "150b0b6f52bb422a1b232a53698606fe0320dde0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -637,14 +694,14 @@
|
|||
},
|
||||
"zen-browser": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1737573247,
|
||||
"narHash": "sha256-qYr17CTrtmudrwcDXBZjgZM6E8elQ8O7SfMhmZj7x00=",
|
||||
"lastModified": 1743216975,
|
||||
"narHash": "sha256-29xgm8F3DCcTNrQZ9V3Pwj6BkjalkKvGyjd+sF9/+3k=",
|
||||
"owner": "0xc000022070",
|
||||
"repo": "zen-browser-flake",
|
||||
"rev": "c3ea41c78e72866919a46116a5231c4e92062327",
|
||||
"rev": "165ee672e6b17a8bcc0a3fb51fab3f79715cc1f3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
# Zen browser
|
||||
zen-browser.url = "github:0xc000022070/zen-browser-flake";
|
||||
|
||||
# Grayjay
|
||||
grayjay.url = "github:rishabh5321/grayjay-flake";
|
||||
|
||||
# AGS
|
||||
ags.url = "github:Aylur/ags";
|
||||
ags.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
|
|
@ -47,9 +47,9 @@
|
|||
vesktop
|
||||
chromium
|
||||
httpie
|
||||
kate
|
||||
dolphin
|
||||
ark
|
||||
kdePackages.kate
|
||||
kdePackages.dolphin
|
||||
kdePackages.ark
|
||||
rustup
|
||||
gcc
|
||||
pavucontrol
|
||||
|
|
|
@ -19,8 +19,12 @@
|
|||
../../modules/git.nix
|
||||
../../modules/direnv.nix
|
||||
../../modules/firefox.nix
|
||||
../../modules/zen-browser.nix
|
||||
../../modules/steam.nix
|
||||
../../modules/nvim
|
||||
../../modules/ags
|
||||
../../modules/grayjay.nix
|
||||
../../modules/signal.nix
|
||||
];
|
||||
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
|
@ -84,7 +88,7 @@
|
|||
];
|
||||
|
||||
autoStart = [
|
||||
"${pkgs.ags}/bin/ags"
|
||||
"uwsm-app -- ags run"
|
||||
(mkUwsmApp inputs.zen-browser.packages.x86_64-linux.default "zen")
|
||||
(mkUwsmApp pkgs.discord "discord")
|
||||
];
|
||||
|
@ -134,9 +138,9 @@
|
|||
vesktop
|
||||
chromium
|
||||
httpie
|
||||
kate
|
||||
dolphin
|
||||
ark
|
||||
kdePackages.kate
|
||||
kdePackages.dolphin
|
||||
kdePackages.ark
|
||||
rustup
|
||||
gcc
|
||||
prismlauncher
|
||||
|
@ -147,10 +151,25 @@
|
|||
vlc
|
||||
feishin
|
||||
cachix
|
||||
inputs.zen-browser.packages.x86_64-linux.default
|
||||
];
|
||||
};
|
||||
|
||||
# NOTE: For debugging staging server configs
|
||||
networking.extraHosts = ''
|
||||
192.168.10.99 staging.kallestruik.nl
|
||||
192.168.10.99 service1.staging.kallestruik.nl
|
||||
192.168.10.99 service2.staging.kallestruik.nl
|
||||
192.168.10.99 service3.staging.kallestruik.nl
|
||||
192.168.10.99 service4.staging.kallestruik.nl
|
||||
192.168.10.99 service5.staging.kallestruik.nl
|
||||
192.168.10.99 service6.staging.kallestruik.nl
|
||||
'';
|
||||
|
||||
services.udev.packages = [
|
||||
# Allow flashing android devices and using ADB
|
||||
pkgs.android-udev-rules
|
||||
];
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It's perfectly fine and recommended to leave
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
device = "/dev/disk/by-uuid/0ac05c3f-df12-458e-b145-e912febe1205";
|
||||
fsType = "ext4";
|
||||
};
|
||||
"/mnt/games-nvme" = {
|
||||
device = "/dev/disk/by-uuid/7ae70244-cf8e-491e-b617-5d2d2ea3e4f1";
|
||||
fsType = "ext4";
|
||||
};
|
||||
"/mnt/external" = {
|
||||
device = "/dev/disk/by-uuid/13e2dfc3-7b4d-44ac-9417-51b933a36917";
|
||||
fsType = "ext4";
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
import { App } from "astal/gtk3"
|
||||
import style from "./style.scss"
|
||||
import LeftBar from "./widget/LeftBar"
|
||||
import RightBar from "./widget/RightBar"
|
||||
|
||||
const LEFT_DISPLAY = "HF237"
|
||||
const RIGHT_DISPLAY = "LCDTV16"
|
||||
|
||||
App.start({
|
||||
css: style,
|
||||
main() {
|
||||
App.get_monitors().map(LeftBar)
|
||||
LeftBar(App.get_monitors().find(it => it.get_model() == LEFT_DISPLAY)!);
|
||||
RightBar(App.get_monitors().find(it => it.get_model() == RIGHT_DISPLAY)!);
|
||||
},
|
||||
})
|
||||
|
|
|
@ -1,18 +1,97 @@
|
|||
// https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gtk/theme/Adwaita/_colors-public.scss
|
||||
$fg-color: #{"@theme_fg_color"};
|
||||
$bg-color: #{"@theme_bg_color"};
|
||||
@use 'sass:color';
|
||||
|
||||
@import "themes/catpuccin.scss";
|
||||
|
||||
window.Bar {
|
||||
background: transparent;
|
||||
color: $fg-color;
|
||||
color: $ctp-text;
|
||||
|
||||
>centerbox {
|
||||
background: $bg-color;
|
||||
background: $ctp-base;
|
||||
border-radius: 5px;
|
||||
margin: 8px;
|
||||
|
||||
>box {
|
||||
margin: 4px;
|
||||
}
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.Time {
|
||||
background: $ctp-surface-0;
|
||||
border-radius: 5px;
|
||||
|
||||
>.icon {
|
||||
background: $ctp-red;
|
||||
color: $ctp-surface-0;
|
||||
padding: 6px 8px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
&.icon-left>.icon {
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
&.icon-right>.icon {
|
||||
border-radius: 0 5px 5px 0;
|
||||
}
|
||||
>.label {
|
||||
padding: 0 8px;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.Workspaces {
|
||||
background: $ctp-surface-0;
|
||||
border-radius: 5px;
|
||||
|
||||
>.icon {
|
||||
background: $ctp-blue;
|
||||
color: $ctp-surface-0;
|
||||
padding: 6px 8px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
&.icon-left>.icon {
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
&.icon-right>.icon {
|
||||
border-radius: 0 5px 5px 0;
|
||||
}
|
||||
|
||||
>.labels {
|
||||
padding: 0 8px;
|
||||
font-size: 16px;
|
||||
|
||||
button {
|
||||
all: unset;
|
||||
|
||||
&.add {
|
||||
font-size: 12px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Systray {
|
||||
background: $ctp-surface-0;
|
||||
border-radius: 5px;
|
||||
|
||||
>.icon {
|
||||
background: $ctp-green;
|
||||
color: $ctp-surface-0;
|
||||
padding: 4px 8px 0 8px;
|
||||
font-size: 20px;
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
|
||||
&.icon-left>.icon {
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
&.icon-right>.icon {
|
||||
border-radius: 0 5px 5px 0;
|
||||
}
|
||||
|
||||
>.item {
|
||||
all: unset;
|
||||
padding: 8px 8px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
$ctp-rosewater: #f5e0dc;
|
||||
$ctp-flamingo: #f2cdcd;
|
||||
$ctp-pink: #f5c2e7;
|
||||
$ctp-mauve: #cba6f7;
|
||||
$ctp-red: #f38ba8;
|
||||
$ctp-maroon: #eba0ac;
|
||||
$ctp-peach: #fab387;
|
||||
$ctp-yellow: #f9e2af;
|
||||
$ctp-green: #a6e3a1;
|
||||
$ctp-teal: #94e2d5;
|
||||
$ctp-sky: #89dceb;
|
||||
$ctp-sapphire: #74c7ec;
|
||||
$ctp-blue: #89b4fa;
|
||||
$ctp-lavender: #b4befe;
|
||||
$ctp-text: #cdd6f4;
|
||||
$ctp-subtext-1: #bac2de;
|
||||
$ctp-subtext-0: #a6adc8;
|
||||
$ctp-overlay-2: #9399b2;
|
||||
$ctp-overlay-1: #7f849c;
|
||||
$ctp-overlay-0: #6c7086;
|
||||
$ctp-surface-2: #585b70;
|
||||
$ctp-surface-1: #45475a;
|
||||
$ctp-surface-0: #313244;
|
||||
$ctp-base: #1e1e2e;
|
||||
$ctp-mantle: #181825;
|
||||
$ctp-crust: #11111b;
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
import { GLib, Variable } from "astal"
|
||||
|
||||
const TIME_FORMAT = "%H:%M"
|
||||
|
||||
export default function Clock(props: { iconSide: "left" | "right" }) {
|
||||
const time = Variable<string>("").poll(1000, () =>
|
||||
GLib.DateTime.new_now_local().format(TIME_FORMAT)!)
|
||||
|
||||
return <box className={`Time icon-${props.iconSide}`}>
|
||||
{props.iconSide == "left" && <label className="icon" label="" />}
|
||||
<label
|
||||
className="label"
|
||||
onDestroy={() => time.drop()}
|
||||
label={time()}
|
||||
/>
|
||||
{props.iconSide == "right" && <label className="icon" label="" />}
|
||||
</box>
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
import { App, Astal, Gdk, Gtk } from "astal/gtk3";
|
||||
import Systray from "./Systray";
|
||||
import Clock from "./Clock";
|
||||
import Workspaces from "./Workspaces";
|
||||
|
||||
export default function LeftBar(gdkmonitor: Gdk.Monitor) {
|
||||
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;
|
||||
|
@ -11,25 +12,14 @@ export default function LeftBar(gdkmonitor: Gdk.Monitor) {
|
|||
anchor={TOP | LEFT | RIGHT}
|
||||
application={App}>
|
||||
<centerbox>
|
||||
<Left />
|
||||
<Center />
|
||||
<Right />
|
||||
<box halign={Gtk.Align.START}>
|
||||
</box>
|
||||
<box halign={Gtk.Align.CENTER}>
|
||||
<Workspaces monitor="HDMI-A-2" iconSide="right" />
|
||||
</box>
|
||||
<box halign={Gtk.Align.END}>
|
||||
<Clock iconSide="right" />
|
||||
</box>
|
||||
</centerbox>
|
||||
</window>
|
||||
}
|
||||
|
||||
function Left() {
|
||||
return <box halign={Gtk.Align.START}>
|
||||
</box>
|
||||
}
|
||||
|
||||
function Center() {
|
||||
return <box halign={Gtk.Align.CENTER}>
|
||||
</box>
|
||||
}
|
||||
|
||||
function Right() {
|
||||
return <box halign={Gtk.Align.END}>
|
||||
<Systray />
|
||||
</box>
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
import { App, Astal, Gdk, Gtk } from "astal/gtk3";
|
||||
import Clock from "./Clock";
|
||||
import Workspaces from "./Workspaces";
|
||||
import Systray from "./Systray";
|
||||
|
||||
export default function RightBar(gdkmonitor: Gdk.Monitor) {
|
||||
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;
|
||||
|
||||
return <window
|
||||
className="RightBar Bar"
|
||||
gdkmonitor={gdkmonitor}
|
||||
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
||||
anchor={TOP | LEFT | RIGHT}
|
||||
application={App}>
|
||||
<centerbox>
|
||||
<box halign={Gtk.Align.START}>
|
||||
<Clock iconSide="left" />
|
||||
</box>
|
||||
<box halign={Gtk.Align.CENTER}>
|
||||
<Workspaces monitor="HDMI-A-1" iconSide="left" />
|
||||
</box>
|
||||
<box halign={Gtk.Align.END}>
|
||||
<Systray iconSide="left" />
|
||||
</box>
|
||||
</centerbox>
|
||||
</window>
|
||||
}
|
|
@ -1,23 +1,23 @@
|
|||
import { bind } from "astal"
|
||||
import { Button, Icon } from "astal/gtk3/widget"
|
||||
import Tray from "gi://AstalTray"
|
||||
|
||||
const tray = Tray.get_default()
|
||||
|
||||
export default function Systray() {
|
||||
for (const item of tray.get_items()) {
|
||||
print(item.title)
|
||||
}
|
||||
return <box>
|
||||
{tray.get_items().map(item => <SystrayItem item={item} />)}
|
||||
export default function Systray(props: { iconSide: "left" | "right" }) {
|
||||
return <box className={`Systray icon-${props.iconSide}`}>
|
||||
{props.iconSide == "left" && <label className="icon" label="" />}
|
||||
{bind(tray, "items").as(items => items.map(item => <SystrayItem item={item} />))}
|
||||
{props.iconSide == "right" && <label className="icon" label="" />}
|
||||
</box>
|
||||
}
|
||||
|
||||
function SystrayItem({ item }: { item: Tray.TrayItem }) {
|
||||
return <Button
|
||||
onClick={() => item.activate(0, 0) /* NOTE: Figure out what these numbers do */}
|
||||
tooltipMarkup={bind(item, "tooltip_markup")}
|
||||
>
|
||||
<Icon gicon={bind(item, "gicon")} />
|
||||
</Button>
|
||||
return <menubutton
|
||||
className="item"
|
||||
tooltipMarkup={bind(item, "tooltipMarkup")}
|
||||
usePopover={false}
|
||||
actionGroup={bind(item, "actionGroup").as(ag => ["dbusmenu", ag])}
|
||||
menuModel={bind(item, "menuModel")}>
|
||||
<icon gicon={bind(item, "gicon")} />
|
||||
</menubutton>
|
||||
}
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
import { bind } from "astal"
|
||||
import Hyprland from "gi://AstalHyprland"
|
||||
|
||||
export default function Workspaces(props: { monitor: string, iconSide: "left" | "right" }) {
|
||||
const hyprland = Hyprland.get_default();
|
||||
|
||||
return <box className={`Workspaces icon-${props.iconSide}`}>
|
||||
{props.iconSide == "left" && <label className="icon" label="" />}
|
||||
<box className="labels">
|
||||
{bind(hyprland, "workspaces").as(wss => wss
|
||||
.filter(it => it && it.get_monitor && it.get_monitor().name == props.monitor)
|
||||
.sort((a, b) => a.get_id() - b.get_id())
|
||||
.map(workspace => <Workspace workspace={workspace} />)
|
||||
)}
|
||||
<button
|
||||
className="add"
|
||||
onClick={() => {
|
||||
hyprland.dispatch("workspace", "emptynm");
|
||||
}}
|
||||
>
|
||||
<label label="" />
|
||||
</button>
|
||||
</box>
|
||||
{props.iconSide == "right" && <label className="icon" label="" />}
|
||||
</box>
|
||||
}
|
||||
|
||||
function Workspace(props: { workspace: Hyprland.Workspace }) {
|
||||
const hyprland = Hyprland.get_default();
|
||||
|
||||
return <box>
|
||||
{bind(props.workspace.get_monitor(), "activeWorkspace").as(ws => {
|
||||
if (ws == props.workspace) {
|
||||
return <label
|
||||
label=""
|
||||
/>
|
||||
} else {
|
||||
return <button
|
||||
onClick={() => {
|
||||
const name = props.workspace.name
|
||||
if (name) {
|
||||
hyprland.dispatch("workspace", `name:${name}`);
|
||||
} else {
|
||||
hyprland.dispatch("workspace", `id:${props.workspace.get_id()}`);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<label
|
||||
label=""
|
||||
/>
|
||||
</button>
|
||||
}
|
||||
})}
|
||||
</box>
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
import { GTK_ALIGN_CENTER, GTK_ALIGN_END, GTK_ALIGN_START } from "../constants.js"
|
||||
import { Clock } from "./Clock.js"
|
||||
import { SysTray } from "./Systray.js"
|
||||
|
||||
function BarStart() {
|
||||
return Widget.Box({
|
||||
halign: GTK_ALIGN_START,
|
||||
children: [
|
||||
Widget.Label({ label: "Start" }),
|
||||
Widget.Button({ label: "Button", onClicked: () => App.ToggleWindow("media2") }),
|
||||
],
|
||||
})
|
||||
}
|
||||
function BarCenter() {
|
||||
return Widget.Box({
|
||||
halign: GTK_ALIGN_CENTER,
|
||||
children: [
|
||||
Clock(),
|
||||
],
|
||||
})
|
||||
}
|
||||
function BarEnd() {
|
||||
return Widget.Box({
|
||||
halign: GTK_ALIGN_END,
|
||||
children: [
|
||||
SysTray(),
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
export function Bar(monitor = 0) {
|
||||
return Widget.Window({
|
||||
monitor,
|
||||
exclusivity: "exclusive",
|
||||
className: "bar",
|
||||
margins: [5, 5, 0, 5],
|
||||
name: `bar${monitor}`,
|
||||
anchor: ["left", "top", "right"],
|
||||
child: Widget.CenterBox({
|
||||
vertical: false,
|
||||
startWidget: BarStart(),
|
||||
centerWidget: BarCenter(),
|
||||
endWidget: BarEnd(),
|
||||
})
|
||||
})
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
const time = Variable("", {
|
||||
poll: [1000, 'date "+%H:%M"'],
|
||||
})
|
||||
|
||||
const date = Variable("", {
|
||||
poll: [1000, 'date "+%Y-%m-%d"'],
|
||||
})
|
||||
|
||||
export function Clock() {
|
||||
return Widget.Box({
|
||||
className: "clock",
|
||||
vertical: true,
|
||||
children: [
|
||||
Widget.Label({
|
||||
className: "time",
|
||||
label: time.bind(),
|
||||
}),
|
||||
Widget.Label({
|
||||
className: "date",
|
||||
label: date.bind(),
|
||||
}),
|
||||
],
|
||||
})
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
const systemtray = await Service.import("systemtray")
|
||||
|
||||
export function SysTray() {
|
||||
const items = systemtray.bind("items")
|
||||
.as(items => items.map(item => Widget.Button({
|
||||
child: Widget.Icon({ icon: item.bind("icon") }),
|
||||
on_primary_click: (_, event) => item.activate(event),
|
||||
on_secondary_click: (_, event) => item.openMenu(event),
|
||||
tooltip_markup: item.bind("tooltip_markup"),
|
||||
})))
|
||||
|
||||
return Widget.Box({
|
||||
className: "systray",
|
||||
children: items,
|
||||
})
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
@define-color ctp-rosewater #f5e0dc;
|
||||
@define-color ctp-flamingo #f2cdcd;
|
||||
@define-color ctp-pink #f5c2e7;
|
||||
@define-color ctp-mauve #cba6f7;
|
||||
@define-color ctp-red #f38ba8;
|
||||
@define-color ctp-maroon #eba0ac;
|
||||
@define-color ctp-peach #fab387;
|
||||
@define-color ctp-yellow #f9e2af;
|
||||
@define-color ctp-green #a6e3a1;
|
||||
@define-color ctp-teal #94e2d5;
|
||||
@define-color ctp-sky #89dceb;
|
||||
@define-color ctp-sapphire #74c7ec;
|
||||
@define-color ctp-blue #89b4fa;
|
||||
@define-color ctp-lavender #b4befe;
|
||||
@define-color ctp-text #cdd6f4;
|
||||
@define-color ctp-subtext1 #bac2de;
|
||||
@define-color ctp-subtext0 #a6adc8;
|
||||
@define-color ctp-overlay2 #9399b2;
|
||||
@define-color ctp-overlay1 #7f849c;
|
||||
@define-color ctp-overlay0 #6c7086;
|
||||
@define-color ctp-surface2 #585b70;
|
||||
@define-color ctp-surface1 #45475a;
|
||||
@define-color ctp-surface0 #313244;
|
||||
@define-color ctp-base #1e1e2e;
|
||||
@define-color ctp-mantle #181825;
|
||||
@define-color ctp-crust #11111b;
|
||||
|
||||
button {
|
||||
background: @ctp-surface0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
button:active, button:hover, button:focus {
|
||||
background: @ctp-surface1;
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
import { Media } from "./media/Media.js";
|
||||
import { Bar } from "./bar/Bar.js";
|
||||
import { Notifications } from "./notifications/Notifications.js";
|
||||
|
||||
|
||||
App.config({
|
||||
style: "./style.css",
|
||||
windows: [
|
||||
Bar(2),
|
||||
Media(2),
|
||||
Notifications(2),
|
||||
]
|
||||
})
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
export const GTK_ALIGN_FILL = 0;
|
||||
export const GTK_ALIGN_START = 1;
|
||||
export const GTK_ALIGN_END = 2;
|
||||
export const GTK_ALIGN_CENTER = 3;
|
||||
export const GTK_ALIGN_BASELINE = 4;
|
|
@ -1,160 +0,0 @@
|
|||
import { GTK_ALIGN_CENTER, GTK_ALIGN_FILL } from '../constants.js'
|
||||
|
||||
const mpris = await Service.import("mpris")
|
||||
const players = mpris.bind("players")
|
||||
|
||||
const FALLBACK_ICON = "audio-x-generic-symbolic"
|
||||
const PLAY_ICON = "media-playback-start-symbolic"
|
||||
const PAUSE_ICON = "media-playback-pause-symbolic"
|
||||
const PREV_ICON = "media-skip-backward-symbolic"
|
||||
const NEXT_ICON = "media-skip-forward-symbolic"
|
||||
|
||||
/** @param {number} length */
|
||||
function lengthStr(length) {
|
||||
const min = Math.floor(length / 60)
|
||||
const sec = Math.floor(length % 60)
|
||||
const sec0 = sec < 10 ? "0" : ""
|
||||
return `${min}:${sec0}${sec}`
|
||||
}
|
||||
|
||||
/** @param {import('types/service/mpris').MprisPlayer} player */
|
||||
function Player(player) {
|
||||
const artists = player.bind("track_artists").transform(a => a.join(", "))
|
||||
|
||||
const playPause = Widget.Button({
|
||||
className: "play-pause",
|
||||
onClicked: () => player.playPause(),
|
||||
visible: player.bind("can_play"),
|
||||
child: Widget.Icon({
|
||||
icon: player.bind("play_back_status").transform(s => {
|
||||
switch (s) {
|
||||
case "Playing": return PAUSE_ICON
|
||||
case "Paused":
|
||||
case "Stopped": return PLAY_ICON
|
||||
}
|
||||
}),
|
||||
}),
|
||||
})
|
||||
|
||||
const prev = Widget.Button({
|
||||
onClicked: () => player.previous(),
|
||||
visible: player.bind("can_go_prev"),
|
||||
child: Widget.Icon(PREV_ICON),
|
||||
})
|
||||
|
||||
const next = Widget.Button({
|
||||
onClicked: () => player.next(),
|
||||
visible: player.bind("can_go_next"),
|
||||
child: Widget.Icon(NEXT_ICON),
|
||||
})
|
||||
|
||||
const positionSlider = Widget.Slider({
|
||||
className: "position",
|
||||
drawValue: false,
|
||||
onChange: ({ value }) => player.position = value * player.length,
|
||||
visible: player.bind("length").as(l => l > 0),
|
||||
setup: self => {
|
||||
function update() {
|
||||
const value = player.position / player.length
|
||||
self.value = value > 0 ? value : 0
|
||||
}
|
||||
self.hook(player, update)
|
||||
self.hook(player, update, "position")
|
||||
self.poll(1000, update)
|
||||
},
|
||||
})
|
||||
|
||||
const positionLabel = Widget.Label({
|
||||
className: "position",
|
||||
hpack: "start",
|
||||
setup: self => {
|
||||
const update = (_, time) => {
|
||||
self.label = lengthStr(time || player.position)
|
||||
self.visible = player.length > 0
|
||||
}
|
||||
|
||||
self.hook(player, update, "position")
|
||||
self.poll(1000, update)
|
||||
},
|
||||
})
|
||||
|
||||
const lengthLabel = Widget.Label({
|
||||
className: "length",
|
||||
hpack: "end",
|
||||
visible: player.bind("length").transform(l => l > 0),
|
||||
label: player.bind("length").transform(lengthStr),
|
||||
})
|
||||
|
||||
return Widget.Overlay({
|
||||
className: "player",
|
||||
child: Widget.Box({
|
||||
className: "bg-img",
|
||||
vpack: "start",
|
||||
css: player.bind("cover_path").transform(p => `background-image: url('${p}');`),
|
||||
}),
|
||||
overlays: [
|
||||
Widget.Box({
|
||||
className: "bg-cover"
|
||||
}),
|
||||
Widget.Box({
|
||||
className: "overlay",
|
||||
vertical: true,
|
||||
halign: GTK_ALIGN_CENTER,
|
||||
children: [
|
||||
Widget.Box({
|
||||
className: "info",
|
||||
vertical: true,
|
||||
children: [
|
||||
Widget.Label({ className: "title", label: player.bind("track_title") }),
|
||||
Widget.Label({ className: "album", label: player.bind("track_album") }),
|
||||
Widget.Label({ className: "artist", label: artists }),
|
||||
],
|
||||
}),
|
||||
Widget.Box({
|
||||
vexpand: true,
|
||||
}),
|
||||
Widget.CenterBox({
|
||||
className: "controls",
|
||||
startWidget: positionLabel,
|
||||
centerWidget: Widget.Box({
|
||||
halign: GTK_ALIGN_CENTER,
|
||||
spacing: 20,
|
||||
children: [
|
||||
prev,
|
||||
playPause,
|
||||
next,
|
||||
],
|
||||
}),
|
||||
endWidget: lengthLabel,
|
||||
}),
|
||||
positionSlider,
|
||||
],
|
||||
})
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
function MediaContent() {
|
||||
const currentIdx = Variable(0);
|
||||
const currentPlayer = Utils.merge([currentIdx.bind(), players], (currentIdx, players) => {
|
||||
const idx = Math.min(currentIdx, players.length - 1);
|
||||
return players[idx];
|
||||
})
|
||||
|
||||
return Widget.Box({
|
||||
children: currentPlayer.as(p => [Player(p)]),
|
||||
})
|
||||
}
|
||||
|
||||
export function Media(monitor = 0) {
|
||||
return Widget.Window({
|
||||
monitor,
|
||||
visible: false,
|
||||
exclusivity: "normal",
|
||||
className: "media",
|
||||
margins: [10, 10, 0, 10],
|
||||
name: `media${monitor}`,
|
||||
anchor: ["left", "top"],
|
||||
child: MediaContent(),
|
||||
})
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
.media > box {
|
||||
border-radius: 5px;
|
||||
|
||||
background-color: transparent;
|
||||
color: @ctp-text;
|
||||
}
|
||||
|
||||
.media .player .bg-img {
|
||||
border-radius: 5px;
|
||||
min-width: 400px;
|
||||
min-height: 200px;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.media .player .bg-cover {
|
||||
background: linear-gradient(alpha(@ctp-base, 0.5), @ctp-base);
|
||||
}
|
||||
|
||||
.media .player .overlay {
|
||||
border-radius: 5px;
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
.media .player .info {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.media .player .controls {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.media .player .info .title {
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.media .player scale.position {
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.media .player scale.position trough {
|
||||
min-height: 4px;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background-color: @ctp-overlay0;
|
||||
}
|
||||
|
||||
.media .player scale.position highlight {
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background-color: @ctp-lavender;
|
||||
}
|
||||
|
||||
.media .player scale.position slider {
|
||||
all: unset;
|
||||
}
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
const notifications = await Service.import("notifications")
|
||||
|
||||
/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */
|
||||
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,
|
||||
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 content = Widget.Box({
|
||||
className: "content",
|
||||
children: [
|
||||
icon,
|
||||
Widget.Box({
|
||||
vertical: true,
|
||||
children: [
|
||||
title,
|
||||
body,
|
||||
]
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
const actions = Widget.Box({
|
||||
className: "actions",
|
||||
children: n.actions.map(({ id, label }) => Widget.Button({
|
||||
className: "action",
|
||||
on_clicked: () => {
|
||||
n.invoke(id)
|
||||
n.dismiss()
|
||||
},
|
||||
hexpand: true,
|
||||
child: Widget.Label(label),
|
||||
})),
|
||||
})
|
||||
|
||||
|
||||
return Widget.EventBox({
|
||||
attribute: { id: n.id },
|
||||
onPrimaryClick: n.dismiss,
|
||||
child: Widget.Box({
|
||||
classNames: ["notification", n.urgency],
|
||||
vertical: true,
|
||||
children: [
|
||||
content,
|
||||
actions,
|
||||
],
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
function NotificationList() {
|
||||
const list = Widget.Box({
|
||||
css: "min-width: 2px; min-height: 2px;",
|
||||
vertical: true,
|
||||
spacing: 10,
|
||||
children: notifications.popups.map(Notification),
|
||||
})
|
||||
|
||||
function onNotified(_, /** @type {number} */ id) {
|
||||
const n = notifications.getNotification(id)
|
||||
if (n)
|
||||
list.children = [Notification(n), ...list.children]
|
||||
}
|
||||
|
||||
function onDismissed(_, /** @type {number} */ id) {
|
||||
list.children.find(n => n.attribute.id === id)?.destroy()
|
||||
}
|
||||
|
||||
list.hook(notifications, onNotified, "notified")
|
||||
.hook(notifications, onDismissed, "dismissed")
|
||||
return list
|
||||
}
|
||||
|
||||
export function Notifications(monitor = 0) {
|
||||
return Widget.Window({
|
||||
monitor,
|
||||
exclusivity: "normal",
|
||||
className: "notifications",
|
||||
margins: [10, 10, 10, 10],
|
||||
name: `notifications${monitor}`,
|
||||
anchor: ["left", "top"],
|
||||
child: NotificationList(),
|
||||
})
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
.notification {
|
||||
min-width: 300px;
|
||||
padding: 10px;
|
||||
background-color: alpha(@ctp-base, 0.7);
|
||||
border-radius: 5px;
|
||||
|
||||
border: 1px solid;
|
||||
border-left: 5px solid;
|
||||
border-color: @ctp-overlay1;
|
||||
}
|
||||
|
||||
.notification.low {
|
||||
border-color: @ctp-base;
|
||||
}
|
||||
|
||||
.notification.critical {
|
||||
border-color: @ctp-red;
|
||||
}
|
||||
|
||||
.notification .icon {
|
||||
min-width: 68px;
|
||||
min-height: 68px;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
.notification .icon image {
|
||||
font-size: 58px;
|
||||
/* to center the icon */
|
||||
margin: 5px;
|
||||
color: @ctp-text;
|
||||
}
|
||||
|
||||
.notification .icon box {
|
||||
min-width: 68px;
|
||||
min-height: 68px;
|
||||
border-radius: 7px;
|
||||
}
|
||||
|
||||
.notification .actions .action {
|
||||
margin: 0 .4em;
|
||||
margin-top: .8em;
|
||||
}
|
||||
|
||||
.notification .actions .action:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.notification .actions .action:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.notification .title {
|
||||
color: @ctp-text;
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
.notification .body {
|
||||
color: @ctp-subtext0;
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
@import url("colors.css");
|
||||
@import url("notifications/style.css");
|
||||
@import url("media/style.css");
|
||||
|
||||
|
||||
.bar > box {
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
|
||||
background-color: alpha(@ctp-base, 0.95);
|
||||
color: @ctp-text;
|
||||
}
|
||||
|
||||
.clock .time {
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.clock .date {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ES2022",
|
||||
"lib": [
|
||||
"ES2022"
|
||||
],
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"strict": true,
|
||||
"noImplicitAny": false,
|
||||
"baseUrl": ".",
|
||||
"typeRoots": [
|
||||
"./types"
|
||||
],
|
||||
"skipLibCheck": true
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
/home/kalle/.local/share/com.github.Aylur.ags/types
|
|
@ -1,15 +1,20 @@
|
|||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
|
||||
home-manager.users.kalle = {
|
||||
imports = [ inputs.ags.homeManagerModules.default ];
|
||||
programs.ags = {
|
||||
enable = true;
|
||||
configDir = ./config;
|
||||
extraPackages = with inputs.ags.packages.${pkgs.system}; [
|
||||
tray
|
||||
hyprland
|
||||
mpris
|
||||
wireplumber
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{
|
||||
home-manager.users.kalle.programs.firefox = {
|
||||
enable = true;
|
||||
nativeMessagingHosts = [ pkgs.plasma-browser-integration ];
|
||||
nativeMessagingHosts = [ pkgs.kdePackages.plasma-browser-integration ];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
home-manager.users.kalle.home.packages = [
|
||||
inputs.grayjay.packages.${pkgs.system}.grayjay
|
||||
];
|
||||
}
|
|
@ -85,6 +85,11 @@
|
|||
config = "colorscheme catppuccin-mocha";
|
||||
}
|
||||
|
||||
{
|
||||
plugin = oil-nvim;
|
||||
config = toLua "require('oil').setup()";
|
||||
}
|
||||
|
||||
cmp-nvim-lsp
|
||||
cmp-nvim-lsp-signature-help
|
||||
cmp-buffer
|
||||
|
|
|
@ -112,7 +112,7 @@ require('lspconfig').nixd.setup {
|
|||
},
|
||||
}
|
||||
|
||||
require('lspconfig').tsserver.setup {
|
||||
require('lspconfig').ts_ls.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
init_options = {
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
home-manager.users.kalle.home.packages = [
|
||||
pkgs.signal-desktop
|
||||
];
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
home-manager.users.kalle.home.packages = [
|
||||
inputs.zen-browser.packages.${pkgs.system}.default
|
||||
];
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
{ inputs
|
||||
, ...
|
||||
{
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
|
@ -8,16 +9,25 @@
|
|||
rainbow-delimiters-nvim = prev.vimUtils.buildVimPlugin {
|
||||
name = "raindow-delimiters.nvim";
|
||||
src = inputs.plugin-rainbow-delimiters-nvim;
|
||||
nvimSkipModule = [
|
||||
"rainbow-delimiters.types"
|
||||
"rainbow-delimiters._test.highlight"
|
||||
];
|
||||
};
|
||||
|
||||
undotree-nvim = prev.vimUtils.buildVimPlugin {
|
||||
name = "undotree.nvim";
|
||||
src = inputs.plugin-undotree-nvim;
|
||||
nvimSkipModule = [
|
||||
"undotree"
|
||||
"undotree.collector"
|
||||
];
|
||||
};
|
||||
|
||||
harpoon1 = prev.vimUtils.buildVimPlugin {
|
||||
name = "harpoon";
|
||||
src = inputs.plugin-harpoon1;
|
||||
doCheck = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue