Compare commits
13 Commits
master
..
d189ca4dbf
| Author | SHA1 | Date | |
|---|---|---|---|
|
d189ca4dbf
|
|||
|
70a4ac4370
|
|||
|
d4b24ba000
|
|||
|
f78513db44
|
|||
|
aa3fb4b2ce
|
|||
|
ec6558a6ee
|
|||
|
1a89460348
|
|||
|
79574a4238
|
|||
|
7fc241affc
|
|||
|
37fc953d3a
|
|||
|
f189ff1d40
|
|||
|
258a155c00
|
|||
|
efc3a7fbc8
|
Generated
+138
-104
@@ -7,11 +7,11 @@
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780372639,
|
||||
"narHash": "sha256-VFzXYHlIGwO4h4ovtnpZj9sX/Qu6+dlI00sXjHdwi2w=",
|
||||
"lastModified": 1774186997,
|
||||
"narHash": "sha256-hyNVlhAqmwcBPl7XRkxbGcMt1BfCOdvuEfBDUf0k8Oo=",
|
||||
"owner": "ezKEa",
|
||||
"repo": "aagl-gtk-on-nix",
|
||||
"rev": "1ee1e8864a1fcfcc21a5fb5af4bd328b3c829f42",
|
||||
"rev": "546e95f7ec74892a31f883a10b1723c35f2c2edd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -23,7 +23,7 @@
|
||||
"ags": {
|
||||
"inputs": {
|
||||
"astal": "astal",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1744557573,
|
||||
@@ -132,11 +132,11 @@
|
||||
"base16-helix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1776754714,
|
||||
"narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
|
||||
"lastModified": 1760703920,
|
||||
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-helix",
|
||||
"rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
|
||||
"rev": "d646af9b7d14bff08824538164af99d0c521b185",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -165,11 +165,11 @@
|
||||
"firefox-gnome-theme": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1779670703,
|
||||
"narHash": "sha256-UdfMivNMwCCqQsYDg5pSz8X2IOaOrIZLIIy+Bg3CO2o=",
|
||||
"lastModified": 1764873433,
|
||||
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
|
||||
"owner": "rafaelmardojai",
|
||||
"repo": "firefox-gnome-theme",
|
||||
"rev": "942159e73e40bf785816f7f1f5feed9ef3d7c8f9",
|
||||
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -218,11 +218,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778716662,
|
||||
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||
"lastModified": 1767609335,
|
||||
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
||||
"rev": "250481aafeb741edfe23d29195671c19b36b6dca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -290,18 +290,20 @@
|
||||
"gnome-shell": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"host": "gitlab.gnome.org",
|
||||
"lastModified": 1767737596,
|
||||
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
|
||||
"owner": "GNOME",
|
||||
"repo": "gnome-shell",
|
||||
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
|
||||
"type": "github"
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"host": "gitlab.gnome.org",
|
||||
"owner": "GNOME",
|
||||
"ref": "gnome-49",
|
||||
"repo": "gnome-shell",
|
||||
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
|
||||
"type": "github"
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
@@ -311,11 +313,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780679734,
|
||||
"narHash": "sha256-KmRNvpNOb7QEORa06bVgjW9kITcx0VhsI7w0vhmZyD8=",
|
||||
"lastModified": 1775143651,
|
||||
"narHash": "sha256-S0RqAyDPMTcv9vASMaE8eY1QexFysAOdnxUxFHIPOyE=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "b2b7db486e06e098711dc291bb25db82850e1d16",
|
||||
"rev": "d166a078541982a76f14d3e06e9665fa5c9ed85e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -393,7 +395,7 @@
|
||||
"hyprutils": "hyprutils",
|
||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||
"hyprwire": "hyprwire",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"nixpkgs": "nixpkgs_4",
|
||||
"pre-commit-hooks": "pre-commit-hooks",
|
||||
"systems": "systems",
|
||||
"xdph": "xdph"
|
||||
@@ -476,11 +478,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779209205,
|
||||
"narHash": "sha256-asc7NpeB8vD66gvZeYcQkaWOs2X6Jgd29vBtP17vjxo=",
|
||||
"lastModified": 1771865848,
|
||||
"narHash": "sha256-xwNa+1D8WPsDnJtUofDrtyDCZKZotbUymzV/R5s+M0I=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-plugins",
|
||||
"rev": "1cb37fad68dff5f5840010c314fed5809b4ee66f",
|
||||
"rev": "b85a56b9531013c79f2f3846fd6ee2ff014b8960",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -676,11 +678,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1779560665,
|
||||
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
|
||||
"lastModified": 1770841267,
|
||||
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
|
||||
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -692,37 +694,53 @@
|
||||
},
|
||||
"nixpkgs-pinned": {
|
||||
"locked": {
|
||||
"lastModified": 1779971959,
|
||||
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
|
||||
"lastModified": 1764517877,
|
||||
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
|
||||
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
|
||||
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1780453794,
|
||||
"narHash": "sha256-bXMRa9VTsHSPXL4Cw8R6JJLQeY3Y/IP4+YJCYVmQ7FY=",
|
||||
"lastModified": 1775002709,
|
||||
"narHash": "sha256-d3Yx83vSrN+2z/loBh4mJpyRqr9aAJqlke4TkpFmRJA=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "6b316287bae2ee04c9b93c8c858d930fd07d7338",
|
||||
"rev": "bcd464ccd2a1a7cd09aa2f8d4ffba83b761b1d0e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-26.05",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1744536153,
|
||||
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1743583204,
|
||||
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
|
||||
@@ -738,7 +756,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1772542754,
|
||||
"narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=",
|
||||
@@ -754,13 +772,13 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1780243769,
|
||||
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
|
||||
"lastModified": 1775036866,
|
||||
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
|
||||
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -770,13 +788,13 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1775888245,
|
||||
"narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
|
||||
"lastModified": 1774610258,
|
||||
"narHash": "sha256-HaThtroVD9wRdx7KQk0B75JmFcXlMUoEdDFNOMOlsOs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "13043924aaa7375ce482ebe2494338e058282925",
|
||||
"rev": "832efc09b4caf6b4569fbf9dc01bec3082a00611",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -786,13 +804,13 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1780243769,
|
||||
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
|
||||
"lastModified": 1767767207,
|
||||
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
|
||||
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -802,13 +820,13 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1779877693,
|
||||
"narHash": "sha256-NOF9NAREhxr50bbBfVcVOq+ArCMSoe8dP79Pk2uyARk=",
|
||||
"lastModified": 1772419343,
|
||||
"narHash": "sha256-QU3Cd5DJH7dHyMnGEFfPcZDaCAsJQ6tUD+JuUsYqnKU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4100e830e085863741bc69b156ec4ccd53ab5be0",
|
||||
"rev": "93178f6a00c22fcdee1c6f5f9ab92f2072072ea9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -830,11 +848,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780281641,
|
||||
"narHash": "sha256-M/+hUKoKbHXpV0xGVfELbN1Ds1aoe3pL5p5/t46YhVo=",
|
||||
"lastModified": 1767810917,
|
||||
"narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "30f9ae2f04174de63ba8bcf3580ca90843b28a01",
|
||||
"rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -873,28 +891,42 @@
|
||||
"home-manager": "home-manager",
|
||||
"hyprland": "hyprland",
|
||||
"hyprland-plugins": "hyprland-plugins",
|
||||
"nixpkgs": "nixpkgs_4",
|
||||
"nixpkgs": "nixpkgs_5",
|
||||
"nixpkgs-pinned": "nixpkgs-pinned",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"russia-blocked-geoip": "russia-blocked-geoip",
|
||||
"sops-nix": "sops-nix",
|
||||
"stylix": "stylix",
|
||||
"yazi": "yazi",
|
||||
"yazi-plugins": "yazi-plugins"
|
||||
"yazi": "yazi"
|
||||
}
|
||||
},
|
||||
"russia-blocked-geoip": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1775124359,
|
||||
"narHash": "sha256-ugEIvbUh2CnuJyk9lOjcaB0mhim6+rKFAGkBCgEO3Pw=",
|
||||
"owner": "runetfreedom",
|
||||
"repo": "russia-blocked-geoip",
|
||||
"rev": "c0b877f47cba48779d06b5f82871dbb627ad8e26",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "runetfreedom",
|
||||
"ref": "release",
|
||||
"repo": "russia-blocked-geoip",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"aagl",
|
||||
"nixpkgs"
|
||||
]
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780197589,
|
||||
"narHash": "sha256-FVCr2Ij/jKf59a4LW481eeOF6rJRreOBrVgW/aUBTrw=",
|
||||
"lastModified": 1770952264,
|
||||
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "21632e942d89bf1cce4e5a63d7e58a215a0cbfcc",
|
||||
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -911,11 +943,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779851998,
|
||||
"narHash": "sha256-UkkMh3bX9QW4Luqkm98nUaOqKWrU6i65mUnph3WeSSw=",
|
||||
"lastModified": 1772420823,
|
||||
"narHash": "sha256-q3oVwz1Rx41D1D+F6vg41kpOkk3Zi3KwnkHEZp7DCGs=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "6cddd512fa2bf7231f098d3a2f92f6e4cff71e0a",
|
||||
"rev": "458eea8d905c609e9d889423e6b8a1c7bc2f792c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -926,14 +958,14 @@
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780547341,
|
||||
"narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=",
|
||||
"lastModified": 1774910634,
|
||||
"narHash": "sha256-B+rZDPyktGEjOMt8PcHKYmgmKoF+GaNAFJhguktXAo0=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a",
|
||||
"rev": "19bf3d8678fbbfbc173beaa0b5b37d37938db301",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -951,20 +983,21 @@
|
||||
"firefox-gnome-theme": "firefox-gnome-theme",
|
||||
"flake-parts": "flake-parts",
|
||||
"gnome-shell": "gnome-shell",
|
||||
"nixpkgs": "nixpkgs_6",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nur": "nur",
|
||||
"systems": "systems_2",
|
||||
"tinted-foot": "tinted-foot",
|
||||
"tinted-kitty": "tinted-kitty",
|
||||
"tinted-schemes": "tinted-schemes",
|
||||
"tinted-tmux": "tinted-tmux",
|
||||
"tinted-zed": "tinted-zed"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780684162,
|
||||
"narHash": "sha256-7HslPhFlg9tD5t+E8c5nL9v85TehwSWvwSmk+tarBnI=",
|
||||
"lastModified": 1774897726,
|
||||
"narHash": "sha256-k/H2/oyex6GEC6uYXYetrboFQeTmX1Ouwv/zaW7b/Z0=",
|
||||
"owner": "danth",
|
||||
"repo": "stylix",
|
||||
"rev": "e14dbcb3e8ed94de5e85ed9ad133b6017480f86c",
|
||||
"rev": "9b4a5eb409ceac2dd6ad495c7988e189a418cd30",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1018,6 +1051,23 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"tinted-foot": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1726913040,
|
||||
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "tinted-foot",
|
||||
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tinted-theming",
|
||||
"repo": "tinted-foot",
|
||||
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"tinted-kitty": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@@ -1037,11 +1087,11 @@
|
||||
"tinted-schemes": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1777806186,
|
||||
"narHash": "sha256-PDF0/wObw4nIsSBeXVYLsloXOiphXCgIdsrNcVXguKs=",
|
||||
"lastModified": 1767710407,
|
||||
"narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "schemes",
|
||||
"rev": "0c94645546f4f3ddac77a1a5fce54eb95bf50795",
|
||||
"rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1053,11 +1103,11 @@
|
||||
"tinted-tmux": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1778379944,
|
||||
"narHash": "sha256-wPDFzMGSlARlw0Sfsn48Q2+jPSfk6N0Ng6BC/d+7Q24=",
|
||||
"lastModified": 1767489635,
|
||||
"narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "tinted-tmux",
|
||||
"rev": "fe0203a198690e71a5ff11e08812a4673de3678d",
|
||||
"rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1069,11 +1119,11 @@
|
||||
"tinted-zed": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1778378178,
|
||||
"narHash": "sha256-OXPXRIQgGwV77HjYRryOHguh4ALX96jkg+tseLkGgHA=",
|
||||
"lastModified": 1767488740,
|
||||
"narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-zed",
|
||||
"rev": "9cd816033ff969415b190722cddf134e78a5665f",
|
||||
"rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1126,15 +1176,15 @@
|
||||
"yazi": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nixpkgs": "nixpkgs_8",
|
||||
"rust-overlay": "rust-overlay_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780290961,
|
||||
"narHash": "sha256-XPSfzLmyGeGMU5o1gaRp8XVVFFLxri93TXpzTr38Ti8=",
|
||||
"lastModified": 1775132067,
|
||||
"narHash": "sha256-JFcGvXwV9O55bUDY9MilD2+/qUPqYg9IHsdH6oJzCGw=",
|
||||
"owner": "sxyazi",
|
||||
"repo": "yazi",
|
||||
"rev": "8e80798984864799cd72b3625b21edc33b1ba1e5",
|
||||
"rev": "86b8f0779ca5406fb6fead8c248d3ab23c9b1db0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1142,22 +1192,6 @@
|
||||
"repo": "yazi",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"yazi-plugins": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1780203849,
|
||||
"narHash": "sha256-bqGN6JxbU+/o7TlM/Cm9Qj/s1McA4pB5QWArGZPcme4=",
|
||||
"owner": "yazi-rs",
|
||||
"repo": "plugins",
|
||||
"rev": "598cdb671401574ac27aeee257e2f3b0c80610a1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "yazi-rs",
|
||||
"repo": "plugins",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
||||
@@ -21,17 +21,12 @@
|
||||
inputs = {
|
||||
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
|
||||
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||
nixpkgs-pinned.url = "github:nixos/nixpkgs/2d293cbfa5a793b4c50d17c05ef9e385b90edf6c";
|
||||
sops-nix.url = "github:Mic92/sops-nix";
|
||||
stylix.url = "github:danth/stylix";
|
||||
ags.url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
|
||||
|
||||
yazi.url = "github:sxyazi/yazi";
|
||||
yazi-plugins = {
|
||||
url = "github:yazi-rs/plugins";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
hyprland.url = "github:hyprwm/Hyprland/v0.54.2-b";
|
||||
hyprland-plugins = {
|
||||
@@ -43,6 +38,11 @@
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
russia-blocked-geoip = {
|
||||
url = "github:runetfreedom/russia-blocked-geoip/release";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-pinned, home-manager, ... }@inputs: let
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
exec-once = [
|
||||
"hyprctl dispatch workspace 1"
|
||||
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
|
||||
"${lib.getExe pkgs.awww} img -o HDMI-A-1 ${wallpaper}"
|
||||
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
|
||||
];
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,15 +0,0 @@
|
||||
{ pkgs, lib, ... }: {
|
||||
wayland.windowManager.hyprland = let
|
||||
wallpaper = pkgs.fetchurl {
|
||||
name = "miku_wallpaper.jpg";
|
||||
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
|
||||
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
|
||||
};
|
||||
in {
|
||||
settings = {
|
||||
exec-once = [
|
||||
"${lib.getExe pkgs.swww} img -o eDP-1 ${wallpaper}"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
fileSystems."/mnt/D" = {
|
||||
device = "/dev/disk/by-label/Data";
|
||||
fsType = "ntfs3";
|
||||
fsType = "ntfs";
|
||||
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
|
||||
};
|
||||
|
||||
|
||||
@@ -39,6 +39,11 @@
|
||||
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
|
||||
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
|
||||
];
|
||||
|
||||
workspace = [
|
||||
"2, layout:scrolling"
|
||||
"4, layout:monocle"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -24,7 +24,6 @@
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
host.laptop = true;
|
||||
host.nvidia.prime.enable = true;
|
||||
|
||||
environment.systemPackages = [ pkgs.dbgate ];
|
||||
}
|
||||
|
||||
+2
-18
@@ -7,23 +7,7 @@
|
||||
];
|
||||
|
||||
options = {
|
||||
host = {
|
||||
laptop = lib.mkEnableOption "laptop mode";
|
||||
|
||||
nvidia.prime = {
|
||||
enable = lib.mkEnableOption "NVIDIA PRIME offload for hybrid graphics";
|
||||
intelBusId = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "PCI:0:2:0";
|
||||
description = "Intel/iGPU Bus ID used by NVIDIA PRIME.";
|
||||
};
|
||||
nvidiaBusId = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "PCI:1:0:0";
|
||||
description = "NVIDIA dGPU Bus ID used by NVIDIA PRIME.";
|
||||
};
|
||||
};
|
||||
};
|
||||
host.laptop = lib.mkEnableOption "laptop mode";
|
||||
};
|
||||
|
||||
config = {
|
||||
@@ -38,4 +22,4 @@
|
||||
i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8";
|
||||
system.stateVersion = "23.05";
|
||||
};
|
||||
}
|
||||
}
|
||||
+10
-27
@@ -1,16 +1,6 @@
|
||||
{ config, pkgs-stable, lib, ... }: let
|
||||
primeCfg = config.host.nvidia.prime;
|
||||
isPrimeOffload = primeCfg.enable;
|
||||
in {
|
||||
boot = {
|
||||
kernelParams = [ "nvidia-drm.modeset=1" ];
|
||||
initrd.kernelModules = lib.optionals isPrimeOffload [ "i915" ];
|
||||
};
|
||||
|
||||
services.xserver.videoDrivers =
|
||||
if isPrimeOffload
|
||||
then [ "modesetting" "nvidia" ]
|
||||
else [ "nvidia" ];
|
||||
{ config, pkgs-stable, lib, ... }: {
|
||||
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware = {
|
||||
graphics = {
|
||||
@@ -21,7 +11,7 @@ in {
|
||||
intel-media-driver
|
||||
libvdpau-va-gl
|
||||
];
|
||||
extraPackages32 = with pkgs-stable.pkgsi686Linux; [ nvidia-vaapi-driver intel-media-driver ];
|
||||
extraPackages32 = with pkgs-stable.pkgsi686Linux; [nvidia-vaapi-driver intel-media-driver];
|
||||
};
|
||||
|
||||
nvidia = {
|
||||
@@ -34,28 +24,21 @@ in {
|
||||
nvidiaSettings = true;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
|
||||
prime = lib.optionalAttrs isPrimeOffload {
|
||||
offload = {
|
||||
enable = true;
|
||||
enableOffloadCmd = true;
|
||||
};
|
||||
intelBusId = primeCfg.intelBusId;
|
||||
nvidiaBusId = primeCfg.nvidiaBusId;
|
||||
prime = lib.optionalAttrs config.host.laptop {
|
||||
intelBusId = "PCI:0:2:0";
|
||||
nvidiaBusId = "PCI:1:0:0";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
environment.sessionVariables = {
|
||||
__GL_VRR_ALLOWED = 1;
|
||||
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
||||
NIXOS_OZONE_WL = 1;
|
||||
} // lib.optionalAttrs isPrimeOffload {
|
||||
LIBVA_DRIVER_NAME = "iHD";
|
||||
} // lib.optionalAttrs (!isPrimeOffload) {
|
||||
WLR_NO_HARDWARE_CURSORS = 1;
|
||||
WLR_DRM_NO_ATOMIC = 1;
|
||||
GBM_BACKEND = "nvidia-drm";
|
||||
LIBVA_DRIVER_NAME = "nvidia";
|
||||
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
|
||||
__GL_VRR_ALLOWED = 1;
|
||||
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
||||
NIXOS_OZONE_WL = 1;
|
||||
};
|
||||
}
|
||||
|
||||
+2
-31
@@ -1,4 +1,4 @@
|
||||
{ pkgs, ... }: {
|
||||
{
|
||||
imports = [
|
||||
./host/bluetooth.nix
|
||||
./host/bootloader.nix
|
||||
@@ -17,36 +17,7 @@
|
||||
./host/yggdrasil.nix
|
||||
];
|
||||
|
||||
programs = {
|
||||
dconf.enable = true;
|
||||
hyprland.enable = true;
|
||||
};
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
xdgOpenUsePortal = true;
|
||||
|
||||
extraPortals = with pkgs; [
|
||||
xdg-desktop-portal-hyprland
|
||||
xdg-desktop-portal-gtk
|
||||
xdg-desktop-portal-termfilechooser
|
||||
];
|
||||
|
||||
config = {
|
||||
common = {
|
||||
default = [ "hyprland" "gtk" ];
|
||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
||||
};
|
||||
|
||||
hyprland = {
|
||||
default = [ "hyprland" "gtk" ];
|
||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
programs.hyprland.enable = true;
|
||||
services = {
|
||||
udisks2.enable = true;
|
||||
fstrim.enable = true;
|
||||
|
||||
+3
-10
@@ -1,15 +1,8 @@
|
||||
{ lib, ... }: {
|
||||
{
|
||||
environment.variables = {
|
||||
EDITOR = "hx";
|
||||
RANGER_LOAD_DEFAULT_RC = "FALSE";
|
||||
# GTK/Electron apps do not consistently use the portal picker unless this
|
||||
# variable is present in the graphical session environment.
|
||||
GTK_USE_PORTAL = "1";
|
||||
|
||||
# Qt/Telegram-like apps otherwise keep using their own picker. This makes
|
||||
# them ask xdg-desktop-portal for file/folder selection.
|
||||
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
|
||||
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
|
||||
|
||||
QT_QPA_PLATFORMTHEME = "qt5ct";
|
||||
GSETTINGS_BACKEND = "keyfile";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ lib.mkIf config.programs.gamemode.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
mangohud
|
||||
protonup-ng
|
||||
pkgs-stable.bottles
|
||||
bottles
|
||||
pkgs-stable.heroic
|
||||
prismlauncher
|
||||
];
|
||||
|
||||
+20
-5
@@ -1,8 +1,23 @@
|
||||
{
|
||||
programs.clash-verge = {
|
||||
{ inputs, pkgs, config, ... }: {
|
||||
systemd.services.v2raya = {
|
||||
enable = true;
|
||||
serviceMode = true;
|
||||
tunMode = true;
|
||||
autoStart = true;
|
||||
description = "v2rayA gui client";
|
||||
after = [ "network.target" ];
|
||||
serviceConfig = {
|
||||
Restart = "always";
|
||||
ExecStart = "${pkgs.v2raya}/bin/v2rayA";
|
||||
};
|
||||
path = with pkgs; [ iptables bash iproute2 ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
V2RAYA_LOG_FILE = "/var/log/v2raya/v2raya.log";
|
||||
V2RAY_LOCATION_ASSET = "/etc/v2raya";
|
||||
XRAY_LOCATION_ASSET = "/etc/v2raya";
|
||||
};
|
||||
};
|
||||
|
||||
environment.etc = {
|
||||
"v2raya/ru_geoip.dat".source = "${inputs.russia-blocked-geoip}/geoip.dat";
|
||||
"v2raya/bolt.db".source = config.sops.secrets.vpn_bolt.path;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
{ pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
# Важно: портал должен быть собран под тот же Hyprland, что и сам Hyprland
|
||||
# (есть отдельная опция именно для этого).
|
||||
programs.hyprland = {
|
||||
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
|
||||
# Делает так, что xdg-open идёт через портал (часто полезно для sandbox/FHS/wrappers).
|
||||
# Опция есть в NixOS как xdg.portal.xdgOpenUsePortal :contentReference[oaicite:2]{index=2}
|
||||
xdgOpenUsePortal = true;
|
||||
|
||||
# Два бэкенда: Hyprland (композитор-специфичное) + GTK (интеграция/диалоги/OpenURI)
|
||||
extraPortals = [
|
||||
inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland
|
||||
pkgs.xdg-desktop-portal-gtk
|
||||
];
|
||||
|
||||
# Роутинг интерфейсов по portals.conf(5):
|
||||
# xdg-desktop-portal выбирает конфиг по XDG_CURRENT_DESKTOP (с lower-case) :contentReference[oaicite:3]{index=3}
|
||||
config = {
|
||||
common = {
|
||||
default = [ "gtk" ];
|
||||
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
||||
"org.freedesktop.impl.portal.ScreenCast" = [ "hyprland" ];
|
||||
"org.freedesktop.impl.portal.Screenshot" = [ "hyprland" ];
|
||||
"org.freedesktop.impl.portal.GlobalShortcuts" = [ "hyprland" ];
|
||||
};
|
||||
|
||||
# Если XDG_CURRENT_DESKTOP=Hyprland присутствует — предпочитаем Hyprland,
|
||||
# но оставляем gtk как fallback для интерфейсов, которых нет у hyprland-портала.
|
||||
hyprland.default = [ "hyprland" "gtk" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
persistentKeys = true;
|
||||
settings = {
|
||||
Peers = [
|
||||
"tls://ip4.01.ekb.ru.dioni.su:9003"
|
||||
"tcp://lair.moe:5001"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
+2
-4
@@ -1,6 +1,7 @@
|
||||
{ config, lib, ... }: {
|
||||
imports = [
|
||||
./user/btop.nix
|
||||
./user/fuzzel.nix
|
||||
./user/ghostty.nix
|
||||
./user/helix.nix
|
||||
./user/hyprland.nix
|
||||
@@ -8,12 +9,9 @@
|
||||
./user/mako.nix
|
||||
./user/neofetch.nix
|
||||
./user/qt.nix
|
||||
./user/quickshell.nix
|
||||
./user/stylix.nix
|
||||
./user/sops.nix
|
||||
./user/ssh.nix
|
||||
./user/walker.nix
|
||||
./user/wob.nix
|
||||
./user/waybar.nix
|
||||
./user/yazi.nix
|
||||
./user/zsh.nix
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
{ config, inputs, pkgs, username, ... }: {
|
||||
imports = [ inputs.ags.homeManagerModules.default ];
|
||||
|
||||
programs.ags = {
|
||||
enable = true;
|
||||
|
||||
configDir = null;
|
||||
|
||||
extraPackages = with inputs.ags.packages.${pkgs.system}; [
|
||||
battery
|
||||
mpris
|
||||
hyprland
|
||||
network
|
||||
tray
|
||||
wireplumber
|
||||
];
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
pulsemixer
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland.settings.exec-once = [ "ags run" ];
|
||||
|
||||
xdg.configFile."ags".source = (pkgs.callPackage ./packages/drvs/ags.nix { inherit username; colors = config.lib.stylix.colors; });
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
programs.fuzzel = {
|
||||
enable = true;
|
||||
settings = {
|
||||
main = {
|
||||
width = 40;
|
||||
line-height = 25;
|
||||
fields = "name,generic,comment,categories,filename,keywords";
|
||||
prompt = ''"❯ "'';
|
||||
show-actions = "no";
|
||||
filter-desktop = "yes";
|
||||
match-counter = "yes";
|
||||
};
|
||||
|
||||
border = {
|
||||
radius = "20";
|
||||
};
|
||||
|
||||
dmenu = {
|
||||
exit-immediately-if-empty = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,23 +1,11 @@
|
||||
{ config, pkgs, ... }: let
|
||||
ghosttyWithGL = (config.lib.nixGL.wrap pkgs.ghostty);
|
||||
shaders = pkgs.fetchFromGitHub {
|
||||
owner = "sahaj-b";
|
||||
repo = "ghostty-cursor-shaders";
|
||||
rev = "06d4e90fb5410e9c4d0b3131584060adddf89406";
|
||||
hash = "sha256-G/UIr1bKnxn1AcHl/4FL/jou6b7M2VeREslYVELxdmw=";
|
||||
};
|
||||
in {
|
||||
{
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
package = ghosttyWithGL;
|
||||
|
||||
settings = {
|
||||
confirm-close-surface = false;
|
||||
copy-on-select = false;
|
||||
title-report = true;
|
||||
|
||||
custom-shader = "${shaders}/cursor_warp.glsl";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -15,18 +15,16 @@ in {
|
||||
wl-clipboard
|
||||
wl-clip-persist
|
||||
xclip
|
||||
awww
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland = let
|
||||
colors = config.lib.stylix.colors;
|
||||
in {
|
||||
enable = true;
|
||||
configType = "hyprlang";
|
||||
xwayland.enable = true;
|
||||
|
||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
|
||||
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
|
||||
# hyprbars # Version mismatch
|
||||
];
|
||||
|
||||
@@ -41,11 +39,6 @@ in {
|
||||
env = [
|
||||
"XDG_SESSION_TYPE,wayland"
|
||||
"QT_QPA_PLATFORM,wayland"
|
||||
"QT_QPA_PLATFORMTHEME,xdgdesktopportal"
|
||||
"GTK_USE_PORTAL,1"
|
||||
"TDESKTOP_USE_GTK_FILE_DIALOG,1"
|
||||
"NIXOS_OZONE_WL,1"
|
||||
"ELECTRON_OZONE_PLATFORM_HINT,auto"
|
||||
|
||||
"XDG_CURRENT_DESKTOP,Hyprland"
|
||||
"XDG_SESSION_DESKTOP,Hyprland"
|
||||
@@ -120,9 +113,7 @@ in {
|
||||
|
||||
exec-once = lib.mkBefore [
|
||||
"systemctl --user start plasma-polkit-agent"
|
||||
"${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all"
|
||||
"systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WAYLAND_DISPLAY DISPLAY GTK_USE_PORTAL QT_QPA_PLATFORMTHEME TDESKTOP_USE_GTK_FILE_DIALOG NIXOS_OZONE_WL ELECTRON_OZONE_PLATFORM_HINT"
|
||||
"awww-daemon"
|
||||
"${lib.getExe' pkgs.awww "awww-daemon"}"
|
||||
"wl-clip-persist --clipboard both"
|
||||
"clipse -listen"
|
||||
"${lib.getExe' pkgs.udiskie "udiskie"}"
|
||||
@@ -136,6 +127,7 @@ in {
|
||||
"$mainMod, M, exit,"
|
||||
"$mainMod, E, exec, ghostty -e sh -c yazi"
|
||||
"$mainMod, F, togglefloating,"
|
||||
"$mainMod, D, exec, fuzzel"
|
||||
"$mainMod, P, pseudo, # dwindle"
|
||||
"$mainMod, J, layoutmsg, togglesplit"
|
||||
"$mainMod, K, layoutmsg, swapsplit"
|
||||
@@ -234,21 +226,11 @@ in {
|
||||
|
||||
extraPortals = [
|
||||
pkgs.xdg-desktop-portal-gtk
|
||||
pkgs.xdg-desktop-portal-termfilechooser
|
||||
];
|
||||
|
||||
config = {
|
||||
common = {
|
||||
default = [ "hyprland" "gtk" ];
|
||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
||||
};
|
||||
|
||||
hyprland = {
|
||||
default = [ "hyprland" "gtk" ];
|
||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
||||
};
|
||||
config.common = {
|
||||
default = [ "hyprland" "gtk" ];
|
||||
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
+20
-12
@@ -1,13 +1,21 @@
|
||||
{ config, lib, ... }: let
|
||||
colors = config.lib.stylix.colors.withHashtag;
|
||||
accent = colors.${config.stylix.accent};
|
||||
in {
|
||||
services.mako = {
|
||||
enable = true;
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
colors = config.lib.stylix.colors;
|
||||
in {
|
||||
home.packages = [ pkgs.mako ];
|
||||
xdg.configFile."mako/config".text = ''
|
||||
background-color=#${colors.base00}
|
||||
text-color=#${colors.base05}
|
||||
border-color=#${colors.base0B}
|
||||
border-radius=10
|
||||
margin=16
|
||||
progress-color=over #${colors.base0A}
|
||||
default-timeout=5000
|
||||
|
||||
settings = {
|
||||
border-color = lib.mkForce accent;
|
||||
default-timeout = 5000;
|
||||
};
|
||||
};
|
||||
}
|
||||
[urgency=high]
|
||||
border-color=#${colors.base09}
|
||||
|
||||
[urgency=low]
|
||||
border-color=#${colors.base04}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
{ pkgs, pkgs-stable, ... }: {
|
||||
{ pkgs, pkgs-pinned, inputs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
ayugram-desktop
|
||||
pkgs-pinned.ayugram-desktop
|
||||
vesktop
|
||||
obs-studio
|
||||
mpv
|
||||
imhex
|
||||
obsidian
|
||||
pkgs-stable.qbittorrent
|
||||
qbittorrent
|
||||
thunderbird
|
||||
libreoffice
|
||||
pear-desktop
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
{ stdenv, colors, accent ? colors.base0B, ... }:
|
||||
{ stdenv, lib, config, colors, username, ... }:
|
||||
stdenv.mkDerivation {
|
||||
name = "AGS theme";
|
||||
|
||||
src = ./ags;
|
||||
dontUnpack = true;
|
||||
|
||||
patchPhase = ''
|
||||
patchPhase = let
|
||||
accent = if username == "chest"
|
||||
then colors.base0E
|
||||
else colors.base0B;
|
||||
in ''
|
||||
echo \$bg: \#${colors.base00}\; > colors.scss
|
||||
echo \$surface0: \#${colors.base02}\; >> colors.scss
|
||||
echo \$fg: \#${colors.base05}\; >> colors.scss
|
||||
|
||||
+1
-11
@@ -1,14 +1,4 @@
|
||||
{ lib, ... }: {
|
||||
# Keep qtct/Kvantum for styling, but tell qtct to delegate standard file
|
||||
# dialogs to xdg-desktop-portal. This is what makes AyuGram/Telegram-like Qt
|
||||
# apps use the Yazi picker instead of Qt's built-in dialog.
|
||||
stylix.targets.qt.standardDialogs = "xdgdesktopportal";
|
||||
|
||||
home.sessionVariables = {
|
||||
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
|
||||
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
|
||||
};
|
||||
|
||||
{
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme.name = "qtct";
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
{ pkgs, config, ... }: let
|
||||
c = config.lib.stylix.colors.withHashtag;
|
||||
font = config.stylix.fonts.sansSerif.name;
|
||||
in {
|
||||
programs.quickshell = {
|
||||
enable = true;
|
||||
activeConfig = "control-center";
|
||||
|
||||
configs = {
|
||||
control-center = pkgs.writeTextDir "shell.qml" ''
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
right: true
|
||||
}
|
||||
|
||||
implicitWidth: 360
|
||||
implicitHeight: wrapper.implicitHeight
|
||||
|
||||
color: "transparent"
|
||||
|
||||
margins {
|
||||
top: -12
|
||||
right: 0
|
||||
}
|
||||
|
||||
exclusionMode: ExclusionMode.Normal
|
||||
exclusiveZone: 0
|
||||
|
||||
WlrLayershell.namespace: "qs-control-center"
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
|
||||
|
||||
Item {
|
||||
id: wrapper
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
readonly property int outerMargin: 12
|
||||
readonly property int innerMargin: 18
|
||||
readonly property int buttonHeight: 48
|
||||
readonly property int spacingSize: 14
|
||||
|
||||
implicitWidth: 360
|
||||
implicitHeight: panel.implicitHeight + outerMargin * 2
|
||||
|
||||
Rectangle {
|
||||
id: panel
|
||||
|
||||
x: wrapper.outerMargin
|
||||
y: wrapper.outerMargin
|
||||
width: parent.width - wrapper.outerMargin * 2
|
||||
height: implicitHeight
|
||||
|
||||
implicitHeight: content.implicitHeight + wrapper.innerMargin * 2
|
||||
|
||||
radius: 20
|
||||
color: "${c.base00}"
|
||||
border.color: "${c.base03}"
|
||||
border.width: 1
|
||||
|
||||
ColumnLayout {
|
||||
id: content
|
||||
|
||||
x: wrapper.innerMargin
|
||||
y: wrapper.innerMargin
|
||||
width: parent.width - wrapper.innerMargin * 2
|
||||
|
||||
spacing: wrapper.spacingSize
|
||||
|
||||
Text {
|
||||
text: "Control Center"
|
||||
color: "${c.base05}"
|
||||
font.family: "${font}"
|
||||
font.pixelSize: 22
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
height: wrapper.buttonHeight
|
||||
radius: 12
|
||||
color: audioMouse.containsMouse ? "${c.base02}" : "${c.base01}"
|
||||
border.color: "${c.base03}"
|
||||
border.width: 1
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: "Audio settings"
|
||||
color: "${c.base05}"
|
||||
font.family: "${font}"
|
||||
font.pixelSize: 15
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: audioMouse
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: Hyprland.dispatch("exec pavucontrol")
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
height: wrapper.buttonHeight
|
||||
radius: 12
|
||||
color: networkMouse.containsMouse ? "${c.base02}" : "${c.base01}"
|
||||
border.color: "${c.base03}"
|
||||
border.width: 1
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: "Network settings"
|
||||
color: "${c.base05}"
|
||||
font.family: "${font}"
|
||||
font.pixelSize: 15
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: networkMouse
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: Hyprland.dispatch("exec nm-connection-editor")
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
height: wrapper.buttonHeight
|
||||
radius: 12
|
||||
color: bluetoothMouse.containsMouse ? "${c.base02}" : "${c.base01}"
|
||||
border.color: "${c.base03}"
|
||||
border.width: 1
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: "Bluetooth"
|
||||
color: "${c.base05}"
|
||||
font.family: "${font}"
|
||||
font.pixelSize: 15
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: bluetoothMouse
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: Hyprland.dispatch("exec blueman-manager")
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
height: 1
|
||||
color: "${c.base03}"
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "Quickshell + Hyprland"
|
||||
color: "${c.base04}"
|
||||
font.family: "${font}"
|
||||
font.pixelSize: 13
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
enableDefaultConfig = false;
|
||||
settings = {
|
||||
matchBlocks = {
|
||||
"*" = {
|
||||
serverAliveInterval = 30;
|
||||
serverAliveCountMax = 5;
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{ config, lib, ... }: let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
base16Names = [
|
||||
"base00"
|
||||
"base01"
|
||||
"base02"
|
||||
"base03"
|
||||
"base04"
|
||||
"base05"
|
||||
"base06"
|
||||
"base07"
|
||||
"base08"
|
||||
"base09"
|
||||
"base0A"
|
||||
"base0B"
|
||||
"base0C"
|
||||
"base0D"
|
||||
"base0E"
|
||||
"base0F"
|
||||
];
|
||||
in {
|
||||
options.stylix.accent = mkOption {
|
||||
type = types.enum base16Names;
|
||||
default = "base0B";
|
||||
description = ''
|
||||
Base16 colour used as the user accent.
|
||||
|
||||
Use it as:
|
||||
|
||||
config.lib.stylix.colors.${config.stylix.accent}
|
||||
config.lib.stylix.colors.withHashtag.${config.stylix.accent}
|
||||
|
||||
This module deliberately does not extend config.lib.stylix.colors: Stylix
|
||||
exports that value as a generated base16 attrset/functor, and replacing or
|
||||
partially extending it can break Stylix targets which expect metadata such
|
||||
as `scheme` to be present.
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
services = {
|
||||
walker = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
};
|
||||
|
||||
elephant.enable = true;
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland.settings.bind = [
|
||||
"$mainMod, D, exec, walker"
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
{ osConfig, config, pkgs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
font-awesome
|
||||
nerd-fonts.symbols-only
|
||||
playerctl
|
||||
cava
|
||||
];
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
|
||||
settings.mainBar = {
|
||||
modules-left = [
|
||||
"hyprland/workspaces"
|
||||
"hyprland/language"
|
||||
"keyboard-state"
|
||||
"cava"
|
||||
];
|
||||
|
||||
modules-center = [
|
||||
"mpris"
|
||||
];
|
||||
|
||||
modules-right = [
|
||||
"tray"
|
||||
"group/system"
|
||||
"pulseaudio"
|
||||
"battery"
|
||||
"clock"
|
||||
];
|
||||
|
||||
cava = {
|
||||
bars = 14;
|
||||
sleep_timer = 5;
|
||||
hide_on_silence = true;
|
||||
# method = "pulse";
|
||||
stereo = true;
|
||||
reverse = false;
|
||||
bar_delimiter = 0;
|
||||
monstercat = false;
|
||||
waves = false;
|
||||
input_delay = 2;
|
||||
# data_format = "binary";
|
||||
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
|
||||
# format_silent = "no audio";
|
||||
};
|
||||
|
||||
clock = {
|
||||
tooltip = false;
|
||||
interval = 5;
|
||||
format = "{:L%d %b - %H:%M %a}";
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "{icon} {volume}%";
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
hands-free = "";
|
||||
headset = "";
|
||||
phone = "";
|
||||
phone-muted = "";
|
||||
portable = "";
|
||||
car = "";
|
||||
default = ["" ""];
|
||||
};
|
||||
on-click = "ghostty --title=pulsemixer -e pulsemixer";
|
||||
};
|
||||
|
||||
mpris = {
|
||||
format = "{dynamic}";
|
||||
dynamic-len = if osConfig.host.laptop then 32 else 64;
|
||||
dynamic-order = [ "title" "artist" "album" ];
|
||||
};
|
||||
|
||||
battery = {
|
||||
interval = 5;
|
||||
states = {
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
format = "{icon} {capacity}%";
|
||||
format-icons = {
|
||||
default = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||
charging = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||
};
|
||||
};
|
||||
|
||||
"keyboard-state" = {
|
||||
capslock = true;
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
locked = "CAPS";
|
||||
unlocked = "";
|
||||
};
|
||||
};
|
||||
|
||||
"hyprland/language" = {
|
||||
format-en = "en";
|
||||
format-ru = "ru";
|
||||
};
|
||||
|
||||
|
||||
"group/system" = {
|
||||
orientation = "inherit";
|
||||
drawer = {
|
||||
transition-duration = 500;
|
||||
transition-left-to-right = false;
|
||||
};
|
||||
modules = [
|
||||
"network"
|
||||
"custom/mem"
|
||||
"cpu"
|
||||
"temperature"
|
||||
];
|
||||
};
|
||||
|
||||
network = {
|
||||
format = "{ifname}";
|
||||
format-wifi = " {essid} ({signalStrength}%)";
|
||||
format-ethernet = "{ifname}";
|
||||
format-disconnected = "";
|
||||
tooltip-format = "{ipaddr}";
|
||||
max-length = 50;
|
||||
on-click = "ghostty --title=nmtui -e nmtui";
|
||||
};
|
||||
|
||||
"custom/weather" = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 1800;
|
||||
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
|
||||
return-type = "json";
|
||||
};
|
||||
|
||||
"custom/mem" = {
|
||||
format = "{} ";
|
||||
interval = 3;
|
||||
exec = "free -h | awk '/Mem:/{printf $3}'";
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
cpu = {
|
||||
interval = 2;
|
||||
format = "{usage}% ";
|
||||
min-length = 6;
|
||||
};
|
||||
|
||||
temperature = {
|
||||
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
||||
critical-threshold = 80;
|
||||
format = "{temperatureC}°C {icon}";
|
||||
format-icons = ["" "" "" "" ""];
|
||||
tooltip = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
{ config, pkgs, lib, ... }: let
|
||||
c = config.lib.stylix.colors;
|
||||
|
||||
wobSocket = ''"''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/wob.sock"'';
|
||||
|
||||
volumeStep = pkgs.writeShellScriptBin "volume-step" /*bash*/ ''
|
||||
volume="$(${lib.getExe' pkgs.wireplumber "wpctl"} get-volume @DEFAULT_AUDIO_SINK@)"
|
||||
percent="$(printf '%s\n' "$volume" | ${pkgs.gawk}/bin/awk '{print int($2 * 100)}')"
|
||||
|
||||
if printf '%s\n' "$volume" | ${pkgs.gnugrep}/bin/grep -q MUTED; then
|
||||
printf '%s muted\n' "$percent" > ${wobSocket}
|
||||
else
|
||||
printf '%s volume\n' "$percent" > ${wobSocket}
|
||||
fi
|
||||
'';
|
||||
|
||||
brightnessStep = pkgs.writeShellScriptBin "brightness-step" /*bash*/ ''
|
||||
percent="$(${lib.getExe pkgs.brightnessctl} -m | ${lib.getExe' pkgs.coreutils "cut"} -d, -f4 | ${lib.getExe' pkgs.coreutils "tr"} -d '%')"
|
||||
printf '%s brightness\n' "$percent" > ${wobSocket}
|
||||
'';
|
||||
in {
|
||||
systemd.user = {
|
||||
services.wob.Install.WantedBy = lib.mkForce [ ];
|
||||
sockets.wob.Install.WantedBy = lib.mkForce [ "sockets.target" ];
|
||||
};
|
||||
|
||||
services.wob = {
|
||||
enable = true;
|
||||
systemd = true;
|
||||
|
||||
settings = {
|
||||
"" = {
|
||||
timeout = 2000;
|
||||
max = 100;
|
||||
|
||||
width = 280;
|
||||
height = 32;
|
||||
|
||||
border_offset = 0;
|
||||
border_size = 2;
|
||||
bar_padding = 4;
|
||||
|
||||
anchor = "top center";
|
||||
margin = "0 0 0 0";
|
||||
|
||||
overflow_mode = "nowrap";
|
||||
orientation = "horizontal";
|
||||
};
|
||||
|
||||
"style.volume" = { bar_color = c.base0D; };
|
||||
"style.brightness" = { bar_color = c.base0A; };
|
||||
"style.muted" = { bar_color = c.base04; };
|
||||
};
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
bindel = [
|
||||
", XF86AudioRaiseVolume, exec, ${lib.getExe volumeStep} up"
|
||||
", XF86AudioLowerVolume, exec, ${lib.getExe volumeStep} down"
|
||||
", XF86MonBrightnessUp, exec, ${lib.getExe brightnessStep} up"
|
||||
", XF86MonBrightnessDown, exec, ${lib.getExe brightnessStep} down"
|
||||
];
|
||||
|
||||
bind = [
|
||||
", XF86AudioMute, exec, ${lib.getExe volumeStep} mute"
|
||||
];
|
||||
};
|
||||
}
|
||||
+100
-308
@@ -1,319 +1,111 @@
|
||||
{ pkgs, lib, inputs, ... }: let
|
||||
hostSystem = pkgs.stdenv.hostPlatform.system;
|
||||
{ pkgs, lib, inputs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
( ouch.override { enableUnfree = true; } )
|
||||
];
|
||||
|
||||
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override {
|
||||
_7zz = pkgs._7zz-rar;
|
||||
};
|
||||
wayland.windowManager.hyprland.settings.windowrule = [
|
||||
"match:class dragon-drop, move cursor_x-window_w/2 cursor_y-window_h/2"
|
||||
];
|
||||
|
||||
yaziOpen = pkgs.writeShellScriptBin "yazi-open" ''
|
||||
set -efu
|
||||
programs.yazi = {
|
||||
package = inputs.yazi.packages
|
||||
.${pkgs.stdenv.hostPlatform.system}.default
|
||||
.override { _7zz = pkgs._7zz-rar; };
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
shellWrapperName = "y";
|
||||
|
||||
target="''${1:-$HOME}"
|
||||
settings = {
|
||||
mgr = {
|
||||
show_hidden = true;
|
||||
};
|
||||
preview = {
|
||||
max_width = 1000;
|
||||
max_height = 1000;
|
||||
};
|
||||
plugin = {
|
||||
preloaders = [
|
||||
{ name = "*.crdownload"; run = "noop"; }
|
||||
];
|
||||
|
||||
case "$target" in
|
||||
file://*)
|
||||
target="$(${lib.getExe pkgs.python3} -c 'import sys, urllib.parse; print(urllib.parse.unquote(urllib.parse.urlparse(sys.argv[1]).path))' "$target")"
|
||||
;;
|
||||
esac
|
||||
prepend_previewers = [
|
||||
{ mime = "application/xz"; run = "ouch"; }
|
||||
{ mime = "application/zip"; run = "ouch"; }
|
||||
{ mime = "application/rar"; run = "ouch"; }
|
||||
{ mime = "application/gzip"; run = "ouch"; }
|
||||
{ mime = "application/7z-compressed"; run = "ouch"; }
|
||||
];
|
||||
|
||||
if [ -f "$target" ]; then
|
||||
target="$(dirname "$target")"
|
||||
fi
|
||||
prepend_fetchers = [
|
||||
{ id = "git"; mime = "*"; run = "git"; }
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
if [ ! -e "$target" ]; then
|
||||
target="$HOME"
|
||||
fi
|
||||
plugins = with pkgs.yaziPlugins; {
|
||||
inherit
|
||||
chmod
|
||||
ouch
|
||||
full-border
|
||||
starship
|
||||
mount
|
||||
git
|
||||
toggle-pane
|
||||
;
|
||||
};
|
||||
|
||||
exec ${lib.getExe pkgs.ghostty} --title="Yazi" -e ${lib.getExe yaziPkg} "$target"
|
||||
'';
|
||||
initLua = ''
|
||||
require("git"):setup()
|
||||
require("full-border"):setup()
|
||||
require("starship"):setup()
|
||||
|
||||
yaziFileChooser = pkgs.writeShellScriptBin "yazi-file-chooser" ''
|
||||
set -efu
|
||||
Status:children_add(function()
|
||||
local h = cx.active.current.hovered
|
||||
if not h or ya.target_family() ~= "unix" then
|
||||
return ""
|
||||
end
|
||||
|
||||
directory="''${2:-0}"
|
||||
save="''${3:-0}"
|
||||
path="''${4:-}"
|
||||
out="''${5:?missing termfilechooser output path}"
|
||||
return ui.Line {
|
||||
ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
|
||||
":",
|
||||
ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
|
||||
" ",
|
||||
}
|
||||
end, 500, Status.RIGHT)
|
||||
'';
|
||||
|
||||
state_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/xdg-desktop-portal-termfilechooser"
|
||||
last_selected_path="$state_dir/last-selected"
|
||||
${lib.getExe' pkgs.coreutils "mkdir"} -p "$state_dir"
|
||||
|
||||
if [ -s "$last_selected_path" ]; then
|
||||
IFS= read -r last_selected < "$last_selected_path" || true
|
||||
if [ -d "$last_selected" ]; then
|
||||
if [ "$save" = "1" ] && [ -n "$path" ]; then
|
||||
path="$last_selected/''${path##*/}"
|
||||
else
|
||||
path="$last_selected"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$path" ]; then
|
||||
path="$HOME"
|
||||
fi
|
||||
|
||||
created_placeholder=0
|
||||
if [ "$save" = "1" ] && [ ! -e "$path" ]; then
|
||||
placeholder_dir="''${path%/*}"
|
||||
if [ "$placeholder_dir" != "$path" ]; then
|
||||
${lib.getExe' pkgs.coreutils "mkdir"} -p "$placeholder_dir"
|
||||
fi
|
||||
|
||||
{
|
||||
printf '%s\n' 'This file was created by xdg-desktop-portal-termfilechooser.'
|
||||
printf '%s\n' 'Move/rename it in Yazi, then open/select it to choose the save path.'
|
||||
} > "$path"
|
||||
created_placeholder=1
|
||||
fi
|
||||
|
||||
${lib.getExe pkgs.ghostty} --title="Yazi File Picker" -e ${lib.getExe yaziPkg} --chooser-file="$out" --cwd-file="$last_selected_path" "$path"
|
||||
|
||||
if [ "$directory" = "1" ] && [ ! -s "$out" ] && [ -s "$last_selected_path" ]; then
|
||||
IFS= read -r cwd < "$last_selected_path" || true
|
||||
if [ -n "''${cwd:-}" ] && [ -d "$cwd" ]; then
|
||||
printf '%s\n' "$cwd" > "$out"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$created_placeholder" = "1" ] && [ ! -s "$out" ]; then
|
||||
${lib.getExe' pkgs.coreutils "rm"} -f "$path"
|
||||
fi
|
||||
'';
|
||||
|
||||
fileManager1 = pkgs.writeShellScriptBin "yazi-filemanager1" ''
|
||||
exec ${pkgs.python3.withPackages (ps: [ ps.dbus-next ])}/bin/python ${pkgs.writeText "yazi-filemanager1.py" ''
|
||||
import asyncio
|
||||
import os
|
||||
import subprocess
|
||||
import urllib.parse
|
||||
|
||||
from dbus_next.aio import MessageBus
|
||||
from dbus_next.constants import BusType
|
||||
from dbus_next.service import ServiceInterface, method
|
||||
|
||||
YAZI_OPEN = ${builtins.toJSON (lib.getExe yaziOpen)}
|
||||
|
||||
|
||||
def uri_to_path(uri: str) -> str | None:
|
||||
parsed = urllib.parse.urlparse(uri)
|
||||
if parsed.scheme != "file":
|
||||
return None
|
||||
return urllib.parse.unquote(parsed.path)
|
||||
|
||||
|
||||
def open_paths(uris: list[str], reveal_items: bool = False) -> None:
|
||||
for uri in uris:
|
||||
path = uri_to_path(uri)
|
||||
if not path:
|
||||
continue
|
||||
|
||||
if reveal_items and os.path.isfile(path):
|
||||
path = os.path.dirname(path)
|
||||
|
||||
subprocess.Popen(
|
||||
[YAZI_OPEN, path],
|
||||
start_new_session=True,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
)
|
||||
|
||||
|
||||
class FileManager1(ServiceInterface):
|
||||
def __init__(self) -> None:
|
||||
super().__init__("org.freedesktop.FileManager1")
|
||||
|
||||
@method()
|
||||
def ShowFolders(self, uris: "as", startup_id: "s") -> "":
|
||||
open_paths(uris)
|
||||
|
||||
@method()
|
||||
def ShowItems(self, uris: "as", startup_id: "s") -> "":
|
||||
open_paths(uris, reveal_items=True)
|
||||
|
||||
@method()
|
||||
def ShowItemProperties(self, uris: "as", startup_id: "s") -> "":
|
||||
open_paths(uris, reveal_items=True)
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
bus = await MessageBus(bus_type=BusType.SESSION).connect()
|
||||
bus.export("/org/freedesktop/FileManager1", FileManager1())
|
||||
await bus.request_name("org.freedesktop.FileManager1")
|
||||
await asyncio.Event().wait()
|
||||
|
||||
asyncio.run(main())
|
||||
''}
|
||||
'';
|
||||
in {
|
||||
home.packages = with pkgs; [
|
||||
( ouch.override { enableUnfree = true; } )
|
||||
yaziOpen
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
GTK_USE_PORTAL = "1";
|
||||
};
|
||||
|
||||
xdg.configFile."xdg-desktop-portal-termfilechooser/config".text = ''
|
||||
[filechooser]
|
||||
cmd=${lib.getExe yaziFileChooser}
|
||||
default_dir=$HOME
|
||||
open_mode=suggested
|
||||
save_mode=last
|
||||
'';
|
||||
|
||||
xdg.desktopEntries.yazi = {
|
||||
name = "Yazi";
|
||||
genericName = "File Manager";
|
||||
exec = "${lib.getExe yaziOpen} %U";
|
||||
terminal = false;
|
||||
mimeType = [ "inode/directory" ];
|
||||
categories = [ "System" "FileTools" "FileManager" ];
|
||||
startupNotify = false;
|
||||
};
|
||||
|
||||
xdg.mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = {
|
||||
"inode/directory" = "yazi.desktop";
|
||||
"application/x-gnome-saved-search" = "yazi.desktop";
|
||||
};
|
||||
};
|
||||
|
||||
xdg.dataFile."dbus-1/services/org.freedesktop.FileManager1.service".text = ''
|
||||
[D-BUS Service]
|
||||
Name=org.freedesktop.FileManager1
|
||||
Exec=${lib.getExe fileManager1}
|
||||
'';
|
||||
|
||||
wayland.windowManager.hyprland.settings.windowrule = [
|
||||
"match:class dragon-drop, move cursor_x-window_w/2 cursor_y-window_h/2"
|
||||
"match:title Yazi File Picker, float 1"
|
||||
"match:title Yazi File Picker, size 1200 800"
|
||||
];
|
||||
|
||||
programs.yazi = {
|
||||
package = yaziPkg;
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
shellWrapperName = "y";
|
||||
|
||||
settings = {
|
||||
mgr = {
|
||||
show_hidden = true;
|
||||
};
|
||||
preview = {
|
||||
max_width = 1000;
|
||||
max_height = 1000;
|
||||
};
|
||||
plugin = {
|
||||
preloaders = [
|
||||
{ url = "*.crdownload"; run = "noop"; }
|
||||
];
|
||||
|
||||
prepend_previewers = [
|
||||
{ mime = "application/xz"; run = "ouch"; }
|
||||
{ mime = "application/zip"; run = "ouch"; }
|
||||
{ mime = "application/rar"; run = "ouch"; }
|
||||
{ mime = "application/gzip"; run = "ouch"; }
|
||||
{ mime = "application/7z-compressed"; run = "ouch"; }
|
||||
];
|
||||
|
||||
prepend_fetchers = [
|
||||
{ group = "git"; url = "*"; run = "git"; }
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
plugins = let
|
||||
yaziPlugin = name: pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "${name}.yazi";
|
||||
version = "unstable";
|
||||
src = inputs.yazi-plugins;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out
|
||||
cp -r ${name}.yazi/* $out/
|
||||
rm -f $out/LICENSE
|
||||
cp LICENSE $out/LICENSE
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
in with pkgs.yaziPlugins; {
|
||||
inherit
|
||||
chmod
|
||||
ouch
|
||||
mount
|
||||
toggle-pane
|
||||
;
|
||||
|
||||
full-border = {
|
||||
package = yaziPlugin "full-border";
|
||||
setup = true;
|
||||
};
|
||||
|
||||
starship = {
|
||||
package = starship;
|
||||
setup = true;
|
||||
};
|
||||
|
||||
git = {
|
||||
package = git;
|
||||
setup = true;
|
||||
};
|
||||
};
|
||||
|
||||
initLua = ''
|
||||
Status:children_add(function()
|
||||
local h = cx.active.current.hovered
|
||||
if not h or ya.target_family() ~= "unix" then
|
||||
return ""
|
||||
end
|
||||
|
||||
return ui.Line {
|
||||
ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
|
||||
":",
|
||||
ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
|
||||
" ",
|
||||
}
|
||||
end, 500, Status.RIGHT)
|
||||
'';
|
||||
|
||||
keymap = {
|
||||
mgr.prepend_keymap = [
|
||||
{
|
||||
on = "T";
|
||||
run = "plugin toggle-pane max-preview";
|
||||
desc = "Maximize or restore the preview pane";
|
||||
}
|
||||
{
|
||||
on = "Y";
|
||||
run = ''shell -- for path in %s; do echo "file://$path"; done | wl-copy -t text/uri-list'';
|
||||
desc = "Copy files into system clipboard";
|
||||
}
|
||||
{
|
||||
on = ["c" "m"];
|
||||
run = "plugin chmod";
|
||||
desc = "Chmod on selected files";
|
||||
}
|
||||
{
|
||||
on = ["M"];
|
||||
run = "plugin mount";
|
||||
desc = "Open mount menu";
|
||||
}
|
||||
{
|
||||
on = [ "<C-n>" ];
|
||||
run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
|
||||
}
|
||||
{
|
||||
on = [ "g" "<S-d>" ];
|
||||
run = ''cd /mnt/D'';
|
||||
desc = "Goto D drive";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
keymap = {
|
||||
mgr.prepend_keymap = [
|
||||
{
|
||||
on = "T";
|
||||
run = "plugin toggle-pane max-preview";
|
||||
desc = "Maximize or restore the preview pane";
|
||||
}
|
||||
{
|
||||
on = "Y";
|
||||
run = ''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'';
|
||||
desc = "Copy files into system clipboard";
|
||||
}
|
||||
{
|
||||
on = ["c" "m"];
|
||||
run = "plugin chmod";
|
||||
desc = "Chmod on selected files";
|
||||
}
|
||||
{
|
||||
on = ["M"];
|
||||
run = "plugin mount";
|
||||
desc = "Open mount menu";
|
||||
}
|
||||
{
|
||||
on = [ "<C-n>" ];
|
||||
run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
|
||||
}
|
||||
{
|
||||
on = [ "g" "<S-d>" ];
|
||||
run = ''cd /mnt/D'';
|
||||
desc = "Goto D drive";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
{ pkgs, lib, config, inputs, ... }: {
|
||||
wayland.windowManager.hyprland = let
|
||||
colors = config.lib.stylix.colors;
|
||||
accent = colors.${config.stylix.accent};
|
||||
in {
|
||||
settings = {
|
||||
general = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 5;
|
||||
border_size = 2;
|
||||
"col.active_border" = "rgba(${accent}ee) rgba(${colors.base0C}ee) 45deg";
|
||||
"col.active_border" = "rgba(${colors.base0E}ee) rgba(${colors.base0C}ee) 45deg";
|
||||
"col.inactive_border" = "rgba(${colors.base05}aa)";
|
||||
|
||||
layout = "dwindle";
|
||||
@@ -48,6 +47,7 @@
|
||||
};
|
||||
|
||||
dwindle = {
|
||||
pseudotile = true;
|
||||
smart_split = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -80,8 +80,6 @@
|
||||
in {
|
||||
stylix = {
|
||||
enable = true;
|
||||
overlays.enable = false;
|
||||
|
||||
targets = {
|
||||
hyprland.enable = false;
|
||||
waybar.enable = false;
|
||||
@@ -89,7 +87,6 @@ in {
|
||||
};
|
||||
|
||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
|
||||
accent = "base0E";
|
||||
polarity = "dark";
|
||||
|
||||
image = pkgs.fetchurl {
|
||||
|
||||
+121
-300
@@ -1,321 +1,142 @@
|
||||
{ osConfig, config, pkgs, lib, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
font-awesome
|
||||
nerd-fonts.symbols-only
|
||||
playerctl
|
||||
cava
|
||||
pulsemixer
|
||||
];
|
||||
{ config, pkgs, ... }: {
|
||||
programs.waybar.settings.mainBar.spacing = 4;
|
||||
programs.waybar.style = let
|
||||
colors = config.lib.stylix.colors.withHashtag;
|
||||
accent = colors.base0E;
|
||||
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
||||
window#waybar {
|
||||
background: ${colors.base00}80;
|
||||
color: ${colors.base05};
|
||||
font-weight: bold;
|
||||
font-size: .85em;
|
||||
}
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
#mpris,
|
||||
#pulseaudio,
|
||||
#network,
|
||||
#battery,
|
||||
#cpu,
|
||||
#temperature,
|
||||
#custom-mem,
|
||||
#clock {
|
||||
background: ${colors.base01};
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
settings.mainBar = {
|
||||
modules-center = [
|
||||
"group/left"
|
||||
"group/center"
|
||||
"group/right"
|
||||
];
|
||||
#language { padding: 8px; }
|
||||
|
||||
#workspaces,
|
||||
#tray {
|
||||
background: ${colors.base01};
|
||||
}
|
||||
|
||||
"group/left" = {
|
||||
orientation = "inherit";
|
||||
modules = [
|
||||
"hyprland/workspaces"
|
||||
"custom/sep-left"
|
||||
"hyprland/language"
|
||||
"keyboard-state"
|
||||
];
|
||||
};
|
||||
#workspaces button {
|
||||
color: ${colors.base05};
|
||||
padding: 0 2px;
|
||||
border-radius: 999px;
|
||||
border: 1pt solid transparent;
|
||||
min-width: 20px;
|
||||
|
||||
"group/center" = {
|
||||
orientation = "inherit";
|
||||
modules = [
|
||||
"cava"
|
||||
"mpris"
|
||||
];
|
||||
};
|
||||
&:hover { background: ${colors.base02}; }
|
||||
|
||||
"group/right" = {
|
||||
orientation = "inherit";
|
||||
modules = [
|
||||
"tray"
|
||||
"custom/sep-left"
|
||||
"group/system"
|
||||
"custom/sep-left"
|
||||
"pulseaudio"
|
||||
"custom/sep-left"
|
||||
"battery"
|
||||
"clock"
|
||||
];
|
||||
};
|
||||
&.active {
|
||||
background: ${accent};
|
||||
color: ${colors.base00};
|
||||
min-width: 30px;
|
||||
|
||||
|
||||
cava = {
|
||||
bars = 9;
|
||||
bar_delimiter = 0;
|
||||
stereo = false;
|
||||
input_delay = 0;
|
||||
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
|
||||
};
|
||||
|
||||
clock = {
|
||||
tooltip = false;
|
||||
interval = 5;
|
||||
format = "{:L%d %b - %H:%M %a}";
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "{icon} {volume}%";
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
hands-free = "";
|
||||
headset = "";
|
||||
phone = "";
|
||||
phone-muted = "";
|
||||
portable = "";
|
||||
car = "";
|
||||
default = ["" ""];
|
||||
};
|
||||
on-click = "ghostty --title=pulsemixer -e pulsemixer";
|
||||
};
|
||||
|
||||
mpris = {
|
||||
format = "{dynamic}";
|
||||
dynamic-len = if osConfig.host.laptop then 16 else 32;
|
||||
dynamic-order = [ "title" "artist" "album" ];
|
||||
};
|
||||
|
||||
battery = {
|
||||
interval = 5;
|
||||
states = {
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
format = "{icon} {capacity}% | ";
|
||||
format-icons = {
|
||||
default = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||
charging = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||
};
|
||||
};
|
||||
|
||||
"custom/sep-left" = {
|
||||
format = " | ";
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
"keyboard-state" = {
|
||||
capslock = true;
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
locked = "CAPS";
|
||||
unlocked = "";
|
||||
};
|
||||
};
|
||||
|
||||
"hyprland/language" = {
|
||||
format-en = "en";
|
||||
format-ru = "ru";
|
||||
};
|
||||
|
||||
"group/system" = {
|
||||
orientation = "inherit";
|
||||
drawer = {
|
||||
transition-duration = 500;
|
||||
transition-left-to-right = false;
|
||||
};
|
||||
modules = [
|
||||
"network"
|
||||
"custom/mem"
|
||||
"cpu"
|
||||
"temperature"
|
||||
];
|
||||
};
|
||||
|
||||
network = {
|
||||
format = "{ifname}";
|
||||
format-wifi = " {essid} ({signalStrength}%)";
|
||||
format-ethernet = "{ifname}";
|
||||
format-disconnected = "";
|
||||
tooltip-format = "{ipaddr}";
|
||||
max-length = 50;
|
||||
on-click = "ghostty --title=nmtui -e nmtui";
|
||||
};
|
||||
|
||||
"custom/weather" = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 1800;
|
||||
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
|
||||
return-type = "json";
|
||||
};
|
||||
|
||||
"custom/mem" = {
|
||||
format = "{} ";
|
||||
interval = 3;
|
||||
exec = "free -h | awk '/Mem:/{printf $3}'";
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
cpu = {
|
||||
interval = 2;
|
||||
format = "{usage}% ";
|
||||
min-length = 6;
|
||||
};
|
||||
|
||||
temperature = {
|
||||
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
||||
critical-threshold = 80;
|
||||
format = "{temperatureC}°C {icon}";
|
||||
format-icons = ["" "" "" "" ""];
|
||||
tooltip = false;
|
||||
};
|
||||
};
|
||||
|
||||
style = let
|
||||
colors = config.lib.stylix.colors.withHashtag;
|
||||
accent = colors.${config.stylix.accent};
|
||||
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
||||
window#waybar {
|
||||
background: transparent;
|
||||
color: ${colors.base05};
|
||||
font-weight: bold;
|
||||
font-size: .85em;
|
||||
& > * { padding: 0 0 6px 0; }
|
||||
&:hover {
|
||||
border-color: ${accent};
|
||||
background: ${colors.base02};
|
||||
color: ${accent};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modules-center {
|
||||
background: ${colors.base01}CC;
|
||||
border-radius: 12px;
|
||||
padding: 10px;
|
||||
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.4);
|
||||
#mpris {
|
||||
border-radius: 0 0 20px 20px;
|
||||
padding: 10px;
|
||||
&:hover { background: ${colors.base02}; }
|
||||
&.playing {
|
||||
border: 3px solid ${accent};
|
||||
border-top-color: transparent;
|
||||
padding: calc(10px - 3px);
|
||||
}
|
||||
}
|
||||
|
||||
#left,
|
||||
#right,
|
||||
#center {
|
||||
background: ${colors.base02};
|
||||
padding: 0 2px;
|
||||
margin: 0 8px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
#left { margin-left: 0; }
|
||||
#right { margin-right: 0; }
|
||||
|
||||
#clock { padding-right: 10px; }
|
||||
|
||||
#cava { padding: 0 10px; }
|
||||
|
||||
#language { padding: 8px; }
|
||||
|
||||
#workspaces button {
|
||||
color: ${colors.base05};
|
||||
padding: 0 2px;
|
||||
border-radius: 999px;
|
||||
#tray {
|
||||
widget {
|
||||
border: 1pt solid transparent;
|
||||
min-width: 20px;
|
||||
|
||||
&:hover { background: ${colors.base03}; }
|
||||
|
||||
&.active {
|
||||
background: ${accent};
|
||||
color: ${colors.base00};
|
||||
min-width: 25px;
|
||||
|
||||
&:hover {
|
||||
border-color: ${accent};
|
||||
background: ${colors.base03};
|
||||
color: ${accent};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#mpris {
|
||||
border-radius: 8px;
|
||||
padding: 4px;
|
||||
&:hover { background: ${colors.base03}; }
|
||||
&.playing {
|
||||
border: 2px solid ${accent};
|
||||
padding: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
#tray {
|
||||
widget {
|
||||
border: 1pt solid transparent;
|
||||
&:hover { background: ${colors.base03}; }
|
||||
& > image { padding: 8px; }
|
||||
}
|
||||
|
||||
& > .passive { border-color: ${colors.base03}; }
|
||||
& > .needs-attention { border-color: ${colors.base09}; }
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
&:hover { background: ${colors.base03}; }
|
||||
&.muted {
|
||||
background: ${colors.base08};
|
||||
color: ${colors.base01};
|
||||
|
||||
&:hover {
|
||||
color: ${colors.base08};
|
||||
background: ${colors.base03};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#network {
|
||||
&:hover { background: ${colors.base02}; }
|
||||
&.disconnected {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base08};
|
||||
& > image { padding: 8px; }
|
||||
}
|
||||
|
||||
& > .passive { border-color: ${colors.base02}; }
|
||||
& > .needs-attention { border-color: ${colors.base09}; }
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
&:hover { background: ${colors.base02}; }
|
||||
&.muted {
|
||||
background: ${colors.base08};
|
||||
color: ${colors.base00};
|
||||
|
||||
&:hover {
|
||||
color: ${colors.base08};
|
||||
background: ${colors.base02};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#system .drawer-child > * {
|
||||
margin-right: 4px
|
||||
#network {
|
||||
&:hover { background: ${colors.base02}; }
|
||||
&.disconnected {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base08};
|
||||
}
|
||||
}
|
||||
|
||||
#keyboard-state label.locked {
|
||||
#system .drawer-child > * {
|
||||
margin-right: 4px
|
||||
}
|
||||
|
||||
#keyboard-state label.locked {
|
||||
color: ${colors.base08};
|
||||
}
|
||||
|
||||
#battery {
|
||||
&.plugged { color: ${colors.base0D}; }
|
||||
&.charging { color: ${colors.base0B}; }
|
||||
&:not(.charging) {
|
||||
&.warning {
|
||||
color: ${colors.base00};
|
||||
background-color: ${colors.base09};
|
||||
}
|
||||
&.critical {
|
||||
background-color: ${colors.base08};
|
||||
color: ${colors.base00};
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
}
|
||||
&.full {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base0B};
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: ${colors.base00};
|
||||
color: ${colors.base08};
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
#battery {
|
||||
&.plugged { color: ${colors.base0D}; }
|
||||
&.charging { color: ${colors.base0B}; }
|
||||
&:not(.charging) {
|
||||
&.warning {
|
||||
color: ${colors.base00};
|
||||
background-color: ${colors.base09};
|
||||
}
|
||||
&.critical {
|
||||
background-color: ${colors.base08};
|
||||
color: ${colors.base00};
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
}
|
||||
&.full {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base0B};
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: ${colors.base00};
|
||||
color: ${colors.base08};
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
cssFile = pkgs.runCommand "waybar.css" {
|
||||
nativeBuildInputs = [ pkgs.dart-sass ];
|
||||
} "sass ${scssFile} $out";
|
||||
in builtins.readFile cssFile;
|
||||
};
|
||||
}
|
||||
cssFile = pkgs.runCommand "waybar.css" {
|
||||
nativeBuildInputs = [ pkgs.dart-sass ];
|
||||
} "sass ${scssFile} $out";
|
||||
in builtins.readFile cssFile;
|
||||
}
|
||||
+1
-1
@@ -57,7 +57,7 @@
|
||||
|
||||
services.greetd = let
|
||||
tuigreet = lib.getExe pkgs.tuigreet;
|
||||
session = lib.getExe' inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default "start-hyprland";
|
||||
session = lib.getExe' inputs.hyprland.packages.${pkgs.system}.default "start-hyprland";
|
||||
in {
|
||||
enable = true;
|
||||
settings = {
|
||||
|
||||
@@ -5,10 +5,7 @@
|
||||
programs.hyprlock.enable = true;
|
||||
home.packages = with pkgs; [
|
||||
android-studio
|
||||
(vivaldi.override {
|
||||
proprietaryCodecs = true;
|
||||
enableWidevine = true;
|
||||
})
|
||||
vivaldi
|
||||
weechat
|
||||
];
|
||||
|
||||
|
||||
@@ -1,82 +1,17 @@
|
||||
{ pkgs, lib, config, osConfig, inputs, ... }: {
|
||||
wayland.windowManager.hyprland = let
|
||||
colors = config.lib.stylix.colors;
|
||||
accent = colors.${config.stylix.accent};
|
||||
|
||||
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
|
||||
libraries = [ pkgs.python3Packages.requests ];
|
||||
flakeIgnore = [ "E111" "E121" "E241" "E501" "E701" "E731" ];
|
||||
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
|
||||
} /*py*/ ''
|
||||
import requests as requests
|
||||
from random import choice
|
||||
from os import listdir, makedirs, remove, replace, system
|
||||
from os import system, mkdir, listdir
|
||||
from os.path import exists
|
||||
from subprocess import run
|
||||
|
||||
notify_id = None
|
||||
|
||||
|
||||
def notify(text, progress=None, expire_time=5000):
|
||||
global notify_id
|
||||
|
||||
command = [
|
||||
"${pkgs.libnotify}/bin/notify-send",
|
||||
"--app-name", "wallpaper_changer",
|
||||
"--print-id",
|
||||
"--expire-time", str(expire_time),
|
||||
]
|
||||
|
||||
if notify_id:
|
||||
command.extend(["--replace-id", str(notify_id)])
|
||||
|
||||
if progress is not None:
|
||||
command.extend(["--hint", f"int:value:{progress}"])
|
||||
|
||||
command.extend(["Wallpaper", text])
|
||||
|
||||
result = run(command, capture_output=True, text=True, check=False)
|
||||
output = result.stdout.strip()
|
||||
if output.isdigit():
|
||||
notify_id = output
|
||||
|
||||
|
||||
def download_with_progress(link, destination):
|
||||
temporary = f"{destination}.part"
|
||||
downloaded = 0
|
||||
last_progress = -1
|
||||
|
||||
response = None
|
||||
try:
|
||||
response = requests.get(link, stream=True)
|
||||
response.raise_for_status()
|
||||
total = int(response.headers.get("content-length", 0))
|
||||
|
||||
with open(temporary, "wb") as file:
|
||||
for chunk in response.iter_content(chunk_size=256 * 1024):
|
||||
if not chunk:
|
||||
continue
|
||||
|
||||
file.write(chunk)
|
||||
downloaded += len(chunk)
|
||||
|
||||
if total <= 0:
|
||||
continue
|
||||
|
||||
progress = min(100, downloaded * 100 // total)
|
||||
if progress == 100 or progress >= last_progress + 2:
|
||||
notify(f"Downloading... {progress}%", progress, 0)
|
||||
last_progress = progress
|
||||
|
||||
replace(temporary, destination)
|
||||
except Exception:
|
||||
if exists(temporary):
|
||||
remove(temporary)
|
||||
raise
|
||||
finally:
|
||||
if response is not None:
|
||||
response.close()
|
||||
|
||||
|
||||
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
|
||||
folder = "${config.home.homeDirectory}/Wallpapers"
|
||||
url = "https://wallhaven.cc/api/v1/collections/sweetbread/${
|
||||
if osConfig.networking.hostName == "Rias" then "1764377"
|
||||
@@ -85,13 +20,10 @@
|
||||
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
|
||||
token = f.read()
|
||||
|
||||
filename = None
|
||||
notify("Updating wallpaper...", 0)
|
||||
notify("Updating wallpaper!")
|
||||
|
||||
try:
|
||||
response = requests.get(url, params={'apikey': token})
|
||||
response.raise_for_status()
|
||||
json = response.json()
|
||||
json = requests.get(url, params={'apikey': token}).json()
|
||||
|
||||
wallpaper = choice(json['data'])
|
||||
link = wallpaper['path']
|
||||
@@ -102,27 +34,22 @@
|
||||
else: ext = "png"
|
||||
|
||||
filename = f"{id}.{ext}"
|
||||
destination = f"{folder}/{filename}"
|
||||
|
||||
if not exists(destination):
|
||||
makedirs(folder, exist_ok=True)
|
||||
notify("Downloading... 0%", 0, 0)
|
||||
download_with_progress(link, destination)
|
||||
notify("Downloaded", 100)
|
||||
else:
|
||||
notify("Using cached wallpaper", 100)
|
||||
if not exists(f"{folder}/{filename}"):
|
||||
if not exists(folder):
|
||||
mkdir(f"{folder}")
|
||||
|
||||
except requests.exceptions.RequestException:
|
||||
notify("Downloading...")
|
||||
with open(f"{folder}/{filename}", 'wb') as f:
|
||||
r = requests.get(link)
|
||||
f.write(r.content)
|
||||
|
||||
except requests.exceptions.ConnectionError:
|
||||
notify("Offline mode")
|
||||
try:
|
||||
filename = choice(listdir(folder))
|
||||
except (FileNotFoundError, IndexError):
|
||||
notify("Offline mode and wallpaper cache is empty")
|
||||
filename = choice(listdir(folder))
|
||||
|
||||
finally:
|
||||
if filename is not None:
|
||||
notify("Applying wallpaper", 100)
|
||||
system(f"awww img {folder}/{filename} --transition-type center")
|
||||
system(f"${lib.getExe pkgs.awww} img {folder}/{filename} --transition-type center")
|
||||
'';
|
||||
in {
|
||||
settings = {
|
||||
@@ -130,7 +57,7 @@
|
||||
gaps_in = 2;
|
||||
gaps_out = 10;
|
||||
border_size = 3;
|
||||
"col.active_border" = lib.mkForce "rgba(${colors.base0C}aa) rgba(${accent}aa) 45deg";
|
||||
"col.active_border" = lib.mkForce "rgba(${colors.base0C}aa) rgba(${colors.base0B}aa) 45deg";
|
||||
|
||||
layout = "dwindle";
|
||||
};
|
||||
@@ -164,6 +91,7 @@
|
||||
};
|
||||
|
||||
dwindle = {
|
||||
pseudotile = true;
|
||||
smart_split = true;
|
||||
};
|
||||
|
||||
@@ -179,10 +107,6 @@
|
||||
"${lib.getExe wallpaper_changer}"
|
||||
];
|
||||
|
||||
workspace = [
|
||||
"2, layout:scrolling"
|
||||
];
|
||||
|
||||
bind = [
|
||||
" , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"
|
||||
"CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"
|
||||
|
||||
@@ -79,25 +79,10 @@
|
||||
cp Kurumi $out/share/icons -r
|
||||
'';
|
||||
};
|
||||
|
||||
pixeloid = pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "Pixeloid";
|
||||
dontUnpack = true;
|
||||
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://lair.moe/static/font/Pixeloid/otf/Sans.otf";
|
||||
hash = "sha256-GTf2BnhH0Pzc3Bbevmd+mA6t8lZFMUxX9wkSqWicuSc=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
install -Dm644 "$src" "$out/share/fonts/opentype/Sans.otf"
|
||||
'';
|
||||
};
|
||||
in {
|
||||
# {
|
||||
stylix = {
|
||||
enable = true;
|
||||
overlays.enable = false;
|
||||
|
||||
targets = {
|
||||
hyprpaper.enable = lib.mkForce false;
|
||||
waybar.enable = false;
|
||||
@@ -105,7 +90,6 @@ in {
|
||||
};
|
||||
|
||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
||||
accent = "base0B";
|
||||
polarity = "dark";
|
||||
|
||||
image = pkgs.fetchurl {
|
||||
@@ -136,11 +120,6 @@ in {
|
||||
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
|
||||
};
|
||||
|
||||
sansSerif = {
|
||||
name = "Pixeloid Sans";
|
||||
package = pixeloid;
|
||||
};
|
||||
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-monochrome-emoji;
|
||||
name = "Noto Emoji";
|
||||
@@ -163,10 +142,8 @@ in {
|
||||
};
|
||||
|
||||
gtk = {
|
||||
gtk4 = {
|
||||
extraConfig = {
|
||||
gtk-application-prefer-dark-theme = true;
|
||||
};
|
||||
gtk4.extraConfig = {
|
||||
gtk-application-prefer-dark-theme = true;
|
||||
};
|
||||
gtk3.extraConfig = {
|
||||
gtk-application-prefer-dark-theme = true;
|
||||
|
||||
+118
-274
@@ -1,302 +1,146 @@
|
||||
{ osConfig, config, pkgs, lib, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
playerctl
|
||||
cava
|
||||
pulsemixer
|
||||
{ config, pkgs, ... }: {
|
||||
programs.waybar.settings.mainBar.spacing = 8;
|
||||
programs.waybar.style = let
|
||||
colors = config.lib.stylix.colors.withHashtag;
|
||||
radius = "6px";
|
||||
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
||||
window#waybar {
|
||||
background: transparent;
|
||||
color: ${colors.base05};
|
||||
border-radius: ${radius};
|
||||
font-weight: bold;
|
||||
font-size: .85em;
|
||||
|
||||
monocraft
|
||||
font-awesome
|
||||
nerd-fonts.symbols-only
|
||||
];
|
||||
& > * { padding: 8px; }
|
||||
}
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
#cava,
|
||||
#language,
|
||||
#mpris,
|
||||
#pulseaudio,
|
||||
#network,
|
||||
#battery,
|
||||
#cpu,
|
||||
#temperature,
|
||||
#keyboard-state label.locked,
|
||||
#custom-mem,
|
||||
#clock {
|
||||
background: ${colors.base00};
|
||||
border-radius: ${radius};
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
settings.mainBar = {
|
||||
spacing = 8;
|
||||
#workspaces,
|
||||
#tray {
|
||||
background: ${colors.base00};
|
||||
border-radius: ${radius};
|
||||
}
|
||||
|
||||
modules-left = [
|
||||
"hyprland/workspaces"
|
||||
"hyprland/language"
|
||||
"keyboard-state"
|
||||
"cava"
|
||||
];
|
||||
#workspaces button {
|
||||
color: ${colors.base05};
|
||||
padding: 4px;
|
||||
border-radius: ${radius};
|
||||
border: 1pt solid transparent;
|
||||
|
||||
modules-center = [
|
||||
"mpris"
|
||||
];
|
||||
&:hover { background: ${colors.base01}; }
|
||||
|
||||
modules-right = [
|
||||
"tray"
|
||||
"group/system"
|
||||
"pulseaudio"
|
||||
"battery"
|
||||
"clock"
|
||||
];
|
||||
&.active {
|
||||
background: ${colors.base0B};
|
||||
color: ${colors.base00};
|
||||
|
||||
cava = {
|
||||
bars = 14;
|
||||
sleep_timer = 5;
|
||||
hide_on_silence = true;
|
||||
bar_delimiter = 0;
|
||||
input_delay = 0;
|
||||
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
|
||||
};
|
||||
|
||||
clock = {
|
||||
tooltip = false;
|
||||
interval = 5;
|
||||
format = "{:L%d %b - %H:%M %a}";
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "{icon} {volume}%";
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
hands-free = "";
|
||||
headset = "";
|
||||
phone = "";
|
||||
phone-muted = "";
|
||||
portable = "";
|
||||
car = "";
|
||||
default = ["" ""];
|
||||
};
|
||||
on-click = "ghostty --title=pulsemixer -e pulsemixer";
|
||||
};
|
||||
|
||||
mpris = {
|
||||
format = "{dynamic}";
|
||||
dynamic-len = if osConfig.host.laptop then 32 else 64;
|
||||
dynamic-order = [ "title" "artist" "album" ];
|
||||
};
|
||||
|
||||
battery = {
|
||||
interval = 5;
|
||||
states = {
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
format = "{icon} {capacity}%";
|
||||
format-icons = {
|
||||
default = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||
charging = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||
};
|
||||
};
|
||||
|
||||
"keyboard-state" = {
|
||||
capslock = true;
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
locked = "CAPS";
|
||||
unlocked = "";
|
||||
};
|
||||
};
|
||||
|
||||
"hyprland/language" = {
|
||||
format-en = "en";
|
||||
format-ru = "ru";
|
||||
};
|
||||
|
||||
|
||||
"group/system" = {
|
||||
orientation = "inherit";
|
||||
drawer = {
|
||||
transition-duration = 500;
|
||||
transition-left-to-right = false;
|
||||
};
|
||||
modules = [
|
||||
"network"
|
||||
"custom/mem"
|
||||
"cpu"
|
||||
"temperature"
|
||||
];
|
||||
};
|
||||
|
||||
network = {
|
||||
format = "{ifname}";
|
||||
format-wifi = " {essid} ({signalStrength}%)";
|
||||
format-ethernet = "{ifname}";
|
||||
format-disconnected = "";
|
||||
tooltip-format = "{ipaddr}";
|
||||
max-length = 50;
|
||||
on-click = "ghostty --title=nmtui -e nmtui";
|
||||
};
|
||||
|
||||
"custom/weather" = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 1800;
|
||||
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
|
||||
return-type = "json";
|
||||
};
|
||||
|
||||
"custom/mem" = {
|
||||
format = "{} ";
|
||||
interval = 3;
|
||||
exec = "free -h | awk '/Mem:/{printf $3}'";
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
cpu = {
|
||||
interval = 2;
|
||||
format = "{usage}% ";
|
||||
min-length = 6;
|
||||
};
|
||||
|
||||
temperature = {
|
||||
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
||||
critical-threshold = 80;
|
||||
format = "{temperatureC}°C {icon}";
|
||||
format-icons = ["" "" "" "" ""];
|
||||
tooltip = false;
|
||||
};
|
||||
};
|
||||
|
||||
style = let
|
||||
colors = config.lib.stylix.colors.withHashtag;
|
||||
accent = colors.${config.stylix.accent};
|
||||
radius = "6px";
|
||||
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
||||
window#waybar {
|
||||
background: transparent;
|
||||
color: ${colors.base05};
|
||||
border-radius: ${radius};
|
||||
font-family: "Symbols Nerd Font Mono", "Monocraft", "Font Awesome 7 Free";
|
||||
font-weight: bold;
|
||||
font-size: .85em;
|
||||
|
||||
& > * { padding: 8px; }
|
||||
&:hover {
|
||||
border-color: ${colors.base0B};
|
||||
background: ${colors.base01};
|
||||
color: ${colors.base0B};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#cava,
|
||||
#language,
|
||||
#mpris,
|
||||
#pulseaudio,
|
||||
#network,
|
||||
#battery,
|
||||
#cpu,
|
||||
#temperature,
|
||||
#keyboard-state label.locked,
|
||||
#custom-mem,
|
||||
#clock {
|
||||
background: ${colors.base00};
|
||||
border-radius: ${radius};
|
||||
padding: 8px;
|
||||
}
|
||||
#mpris {
|
||||
&:hover { background: ${colors.base01}; }
|
||||
&.paused { opacity: .5; }
|
||||
}
|
||||
|
||||
#workspaces,
|
||||
#tray {
|
||||
background: ${colors.base00};
|
||||
border-radius: ${radius};
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
color: ${colors.base05};
|
||||
padding: 4px;
|
||||
border-radius: ${radius};
|
||||
#tray {
|
||||
widget {
|
||||
border: 1pt solid transparent;
|
||||
|
||||
border-radius: ${radius};
|
||||
&:hover { background: ${colors.base01}; }
|
||||
& > image { padding: 8px; }
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: ${accent};
|
||||
& > .passive { border-color: ${colors.base02}; }
|
||||
& > .needs-attention { border-color: ${colors.base09}; }
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
&:hover { background: ${colors.base01}; }
|
||||
&.muted {
|
||||
background: ${colors.base08};
|
||||
color: ${colors.base00};
|
||||
|
||||
&:hover {
|
||||
color: ${colors.base08};
|
||||
background: ${colors.base01};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#network {
|
||||
&:hover { background: ${colors.base01}; }
|
||||
&.disconnected {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base08};
|
||||
}
|
||||
}
|
||||
|
||||
#system .drawer-child > * {
|
||||
margin-right: 4px
|
||||
}
|
||||
|
||||
#keyboard-state label.locked {
|
||||
background-color: ${colors.base00};
|
||||
color: ${colors.base08};
|
||||
}
|
||||
|
||||
#battery {
|
||||
&.plugged { color: ${colors.base0D}; }
|
||||
&.charging { color: ${colors.base0B}; }
|
||||
&:not(.charging) {
|
||||
&.warning {
|
||||
color: ${colors.base00};
|
||||
|
||||
&:hover {
|
||||
border-color: ${accent};
|
||||
background: ${colors.base01};
|
||||
color: ${accent};
|
||||
}
|
||||
background-color: ${colors.base09};
|
||||
}
|
||||
}
|
||||
|
||||
#mpris {
|
||||
&:hover { background: ${colors.base01}; }
|
||||
&.paused { opacity: .5; }
|
||||
}
|
||||
|
||||
#tray {
|
||||
widget {
|
||||
border: 1pt solid transparent;
|
||||
border-radius: ${radius};
|
||||
&:hover { background: ${colors.base01}; }
|
||||
& > image { padding: 8px; }
|
||||
}
|
||||
|
||||
& > .passive { border-color: ${colors.base02}; }
|
||||
& > .needs-attention { border-color: ${colors.base09}; }
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
&:hover { background: ${colors.base01}; }
|
||||
&.muted {
|
||||
background: ${colors.base08};
|
||||
&.critical {
|
||||
background-color: ${colors.base08};
|
||||
color: ${colors.base00};
|
||||
|
||||
&:hover {
|
||||
color: ${colors.base08};
|
||||
background: ${colors.base01};
|
||||
}
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
}
|
||||
|
||||
#network {
|
||||
&:hover { background: ${colors.base01}; }
|
||||
&.disconnected {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base08};
|
||||
}
|
||||
&.full {
|
||||
color: ${colors.base00};
|
||||
background: ${colors.base0B};
|
||||
}
|
||||
}
|
||||
|
||||
#system .drawer-child > * {
|
||||
margin-right: 4px
|
||||
}
|
||||
|
||||
#keyboard-state label.locked {
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: ${colors.base00};
|
||||
color: ${colors.base08};
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
#battery {
|
||||
&.plugged { color: ${colors.base0D}; }
|
||||
&.charging { color: ${accent}; }
|
||||
&:not(.charging) {
|
||||
&.warning {
|
||||
color: ${colors.base00};
|
||||
background-color: ${colors.base09};
|
||||
}
|
||||
&.critical {
|
||||
background-color: ${colors.base08};
|
||||
color: ${colors.base00};
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
}
|
||||
&.full {
|
||||
color: ${colors.base00};
|
||||
background: ${accent};
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: ${colors.base00};
|
||||
color: ${colors.base08};
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
cssFile = pkgs.runCommand "waybar.css" {
|
||||
nativeBuildInputs = [ pkgs.dart-sass ];
|
||||
} "sass ${scssFile} $out";
|
||||
in builtins.readFile cssFile;
|
||||
};
|
||||
cssFile = pkgs.runCommand "waybar.css" {
|
||||
nativeBuildInputs = [ pkgs.dart-sass ];
|
||||
} "sass ${scssFile} $out";
|
||||
in builtins.readFile cssFile;
|
||||
|
||||
wayland.windowManager.hyprland.settings.layerrule = [
|
||||
"blur on, match:namespace waybar"
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user