Compare commits

..

37 Commits

Author SHA1 Message Date
Sweetbread 3c8c43f90b wallpaper-changer: add progress bar 2026-06-08 03:47:46 +03:00
Sweetbread 3de3a14d0b mako: remove shit code 2026-06-08 03:25:29 +03:00
Sweetbread 98434b79cf stylix: add accent color
I spent an hour just to add one f*ing option
2026-06-08 03:25:28 +03:00
Sweetbread c8b5900985 Update 2026-06-06 02:52:41 +03:00
Sweetbread ae74e79b8e fixup! wip: quickshell: control-panel 2026-06-06 01:43:13 +03:00
Sweetbread 3fd67e08bc pkgs: move smth to stable 2026-06-06 01:42:57 +03:00
Sweetbread e2527a20d1 ui: fuzzel to walker 2026-06-05 20:14:31 +03:00
Sweetbread 03fbc1e1b7 fixup! font: change to pixel fonts 2026-06-05 02:16:23 +03:00
Sweetbread 5b93b31de3 pkgs: add pear-desktop 2026-06-04 21:57:07 +03:00
Sweetbread 9332b07729 font: change to pixel fonts 2026-06-04 21:57:07 +03:00
Sweetbread 211dafc241 pkgs: wob 2026-06-04 21:57:07 +03:00
Sweetbread cb5771e2a3 wip: quickshell: control-panel 2026-06-04 21:57:06 +03:00
Sweetbread 3fc3f5fa3a fixup! Replace AGS with waybar 2026-06-03 01:42:24 +03:00
Sweetbread 2ffedb7835 yazi: filechooser 2026-06-01 18:42:50 +03:00
Sweetbread 5b2fbe0db4 yazi: open from other apps 2026-06-01 18:42:49 +03:00
Sweetbread 7ea803d7cd Update 2026-06-01 18:42:49 +03:00
Sweetbread 16cfa90286 vpn: change client 2026-05-31 14:53:41 +03:00
Sweetbread 89dfed99cb ghostty: add cursor shader 2026-05-31 14:53:41 +03:00
Sweetbread 36be1d4912 Rias: change mount type 2026-05-31 14:53:40 +03:00
Sweetbread 9d687a19d1 Update 2026-05-31 14:53:40 +03:00
Sweetbread 9a74a3572d ygg: change node 2026-05-31 14:51:53 +03:00
Sweetbread 1eace564e5 Impreza: add wallpaper 2026-05-31 14:51:53 +03:00
Sweetbread 88f9d0bc57 nvidia: fix backlight 2026-05-31 14:51:53 +03:00
Chest e52ee5b09f waybar for mee<3 2026-05-31 14:51:53 +03:00
Chest fd9a6db867 vpn for gpt 2026-05-31 14:51:53 +03:00
Sweetbread acf0041fbc vpn: change engine 2026-05-31 14:51:52 +03:00
Sweetbread 435423f6e1 Update system 2026-05-31 14:51:52 +03:00
Sweetbread 61b6256a14 wip: cava 2026-05-31 14:51:52 +03:00
Sweetbread cdfdeffc07 starship: fix os icon 2026-05-31 14:51:52 +03:00
Sweetbread 6156fda36d hyprland: add zoom 2026-05-31 14:51:52 +03:00
Sweetbread 9f8a14849e tty: fix Cyrillic 2026-05-31 14:51:52 +03:00
Sweetbread 9eea524875 ssh: keepalive 2026-05-31 14:51:52 +03:00
Sweetbread f84b6b1f6d Replace AGS with waybar 2026-05-31 14:51:52 +03:00
Sweetbread 46cf31e49a Update system 2026-05-31 14:51:51 +03:00
Sweetbread 91ccf1078f Style hyprland 2026-05-31 14:51:51 +03:00
Sweetbread e890c350c6 Make VPN list via flake
Wow, I didn't know I can do this...
2026-05-31 14:51:51 +03:00
Sweetbread 9d395d0dae Update system 2026-05-31 14:51:51 +03:00
33 changed files with 983 additions and 442 deletions
Generated
+104 -138
View File
@@ -7,11 +7,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1774186997,
"narHash": "sha256-hyNVlhAqmwcBPl7XRkxbGcMt1BfCOdvuEfBDUf0k8Oo=",
"lastModified": 1780372639,
"narHash": "sha256-VFzXYHlIGwO4h4ovtnpZj9sX/Qu6+dlI00sXjHdwi2w=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "546e95f7ec74892a31f883a10b1723c35f2c2edd",
"rev": "1ee1e8864a1fcfcc21a5fb5af4bd328b3c829f42",
"type": "github"
},
"original": {
@@ -23,7 +23,7 @@
"ags": {
"inputs": {
"astal": "astal",
"nixpkgs": "nixpkgs_3"
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1744557573,
@@ -132,11 +132,11 @@
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1760703920,
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=",
"lastModified": 1776754714,
"narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "d646af9b7d14bff08824538164af99d0c521b185",
"rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
"type": "github"
},
"original": {
@@ -165,11 +165,11 @@
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1764873433,
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
"lastModified": 1779670703,
"narHash": "sha256-UdfMivNMwCCqQsYDg5pSz8X2IOaOrIZLIIy+Bg3CO2o=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
"rev": "942159e73e40bf785816f7f1f5feed9ef3d7c8f9",
"type": "github"
},
"original": {
@@ -218,11 +218,11 @@
]
},
"locked": {
"lastModified": 1767609335,
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=",
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "250481aafeb741edfe23d29195671c19b36b6dca",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github"
},
"original": {
@@ -290,20 +290,18 @@
"gnome-shell": {
"flake": false,
"locked": {
"host": "gitlab.gnome.org",
"lastModified": 1767737596,
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"type": "gitlab"
"type": "github"
},
"original": {
"host": "gitlab.gnome.org",
"owner": "GNOME",
"ref": "gnome-49",
"repo": "gnome-shell",
"type": "gitlab"
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"type": "github"
}
},
"home-manager": {
@@ -313,11 +311,11 @@
]
},
"locked": {
"lastModified": 1774647770,
"narHash": "sha256-UNNi14XiqRWWjO8ykbFwA5wRwx7EscsC+GItOVpuGjc=",
"lastModified": 1780679734,
"narHash": "sha256-KmRNvpNOb7QEORa06bVgjW9kITcx0VhsI7w0vhmZyD8=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "02371c05a04a2876cf92e2d67a259e8f87399068",
"rev": "b2b7db486e06e098711dc291bb25db82850e1d16",
"type": "github"
},
"original": {
@@ -395,7 +393,7 @@
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire",
"nixpkgs": "nixpkgs_4",
"nixpkgs": "nixpkgs_3",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
@@ -478,11 +476,11 @@
]
},
"locked": {
"lastModified": 1771865848,
"narHash": "sha256-xwNa+1D8WPsDnJtUofDrtyDCZKZotbUymzV/R5s+M0I=",
"lastModified": 1779209205,
"narHash": "sha256-asc7NpeB8vD66gvZeYcQkaWOs2X6Jgd29vBtP17vjxo=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "b85a56b9531013c79f2f3846fd6ee2ff014b8960",
"rev": "1cb37fad68dff5f5840010c314fed5809b4ee66f",
"type": "github"
},
"original": {
@@ -678,11 +676,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1770841267,
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
"lastModified": 1779560665,
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
"type": "github"
},
"original": {
@@ -694,53 +692,37 @@
},
"nixpkgs-pinned": {
"locked": {
"lastModified": 1764517877,
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
"lastModified": 1779971959,
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1774388614,
"narHash": "sha256-tFwzTI0DdDzovdE9+Ras6CUss0yn8P9XV4Ja6RjA+nU=",
"lastModified": 1780453794,
"narHash": "sha256-bXMRa9VTsHSPXL4Cw8R6JJLQeY3Y/IP4+YJCYVmQ7FY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1073dad219cb244572b74da2b20c7fe39cb3fa9e",
"rev": "6b316287bae2ee04c9b93c8c858d930fd07d7338",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.11",
"ref": "nixos-26.05",
"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=",
@@ -756,7 +738,7 @@
"type": "github"
}
},
"nixpkgs_4": {
"nixpkgs_3": {
"locked": {
"lastModified": 1772542754,
"narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=",
@@ -772,13 +754,13 @@
"type": "github"
}
},
"nixpkgs_5": {
"nixpkgs_4": {
"locked": {
"lastModified": 1774386573,
"narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=",
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9",
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
"type": "github"
},
"original": {
@@ -788,13 +770,13 @@
"type": "github"
}
},
"nixpkgs_6": {
"nixpkgs_5": {
"locked": {
"lastModified": 1773840656,
"narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=",
"lastModified": 1775888245,
"narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512",
"rev": "13043924aaa7375ce482ebe2494338e058282925",
"type": "github"
},
"original": {
@@ -804,13 +786,13 @@
"type": "github"
}
},
"nixpkgs_7": {
"nixpkgs_6": {
"locked": {
"lastModified": 1767767207,
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
"type": "github"
},
"original": {
@@ -820,13 +802,13 @@
"type": "github"
}
},
"nixpkgs_8": {
"nixpkgs_7": {
"locked": {
"lastModified": 1772419343,
"narHash": "sha256-QU3Cd5DJH7dHyMnGEFfPcZDaCAsJQ6tUD+JuUsYqnKU=",
"lastModified": 1779877693,
"narHash": "sha256-NOF9NAREhxr50bbBfVcVOq+ArCMSoe8dP79Pk2uyARk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "93178f6a00c22fcdee1c6f5f9ab92f2072072ea9",
"rev": "4100e830e085863741bc69b156ec4ccd53ab5be0",
"type": "github"
},
"original": {
@@ -848,11 +830,11 @@
]
},
"locked": {
"lastModified": 1767810917,
"narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=",
"lastModified": 1780281641,
"narHash": "sha256-M/+hUKoKbHXpV0xGVfELbN1Ds1aoe3pL5p5/t46YhVo=",
"owner": "nix-community",
"repo": "NUR",
"rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4",
"rev": "30f9ae2f04174de63ba8bcf3580ca90843b28a01",
"type": "github"
},
"original": {
@@ -891,42 +873,28 @@
"home-manager": "home-manager",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"nixpkgs": "nixpkgs_5",
"nixpkgs": "nixpkgs_4",
"nixpkgs-pinned": "nixpkgs-pinned",
"nixpkgs-stable": "nixpkgs-stable",
"russia-blocked-geoip": "russia-blocked-geoip",
"sops-nix": "sops-nix",
"stylix": "stylix",
"yazi": "yazi"
}
},
"russia-blocked-geoip": {
"flake": false,
"locked": {
"lastModified": 1774691120,
"narHash": "sha256-iy2Uvqrr/7nOLznDNdyV5T5aee7Y+3nMNmoGIjpeUFE=",
"owner": "runetfreedom",
"repo": "russia-blocked-geoip",
"rev": "433641f6807cdaa56c731125b5a367da512987e4",
"type": "github"
},
"original": {
"owner": "runetfreedom",
"ref": "release",
"repo": "russia-blocked-geoip",
"type": "github"
"yazi": "yazi",
"yazi-plugins": "yazi-plugins"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": [
"aagl",
"nixpkgs"
]
},
"locked": {
"lastModified": 1770952264,
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
"lastModified": 1780197589,
"narHash": "sha256-FVCr2Ij/jKf59a4LW481eeOF6rJRreOBrVgW/aUBTrw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
"rev": "21632e942d89bf1cce4e5a63d7e58a215a0cbfcc",
"type": "github"
},
"original": {
@@ -943,11 +911,11 @@
]
},
"locked": {
"lastModified": 1772420823,
"narHash": "sha256-q3oVwz1Rx41D1D+F6vg41kpOkk3Zi3KwnkHEZp7DCGs=",
"lastModified": 1779851998,
"narHash": "sha256-UkkMh3bX9QW4Luqkm98nUaOqKWrU6i65mUnph3WeSSw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "458eea8d905c609e9d889423e6b8a1c7bc2f792c",
"rev": "6cddd512fa2bf7231f098d3a2f92f6e4cff71e0a",
"type": "github"
},
"original": {
@@ -958,14 +926,14 @@
},
"sops-nix": {
"inputs": {
"nixpkgs": "nixpkgs_6"
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1774303811,
"narHash": "sha256-fhG4JAcLgjKwt+XHbjs8brpWnyKUfU4LikLm3s0Q/ic=",
"lastModified": 1780547341,
"narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "614e256310e0a4f8a9ccae3fa80c11844fba7042",
"rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a",
"type": "github"
},
"original": {
@@ -983,21 +951,20 @@
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts",
"gnome-shell": "gnome-shell",
"nixpkgs": "nixpkgs_7",
"nixpkgs": "nixpkgs_6",
"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": 1774124764,
"narHash": "sha256-Poz9WTjiRlqZIf197CrMMJfTifZhrZpbHFv0eU1Nhtg=",
"lastModified": 1780684162,
"narHash": "sha256-7HslPhFlg9tD5t+E8c5nL9v85TehwSWvwSmk+tarBnI=",
"owner": "danth",
"repo": "stylix",
"rev": "e31c79f571c5595a155f84b9d77ce53a84745494",
"rev": "e14dbcb3e8ed94de5e85ed9ad133b6017480f86c",
"type": "github"
},
"original": {
@@ -1051,23 +1018,6 @@
"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": {
@@ -1087,11 +1037,11 @@
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1767710407,
"narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=",
"lastModified": 1777806186,
"narHash": "sha256-PDF0/wObw4nIsSBeXVYLsloXOiphXCgIdsrNcVXguKs=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2",
"rev": "0c94645546f4f3ddac77a1a5fce54eb95bf50795",
"type": "github"
},
"original": {
@@ -1103,11 +1053,11 @@
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1767489635,
"narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=",
"lastModified": 1778379944,
"narHash": "sha256-wPDFzMGSlARlw0Sfsn48Q2+jPSfk6N0Ng6BC/d+7Q24=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184",
"rev": "fe0203a198690e71a5ff11e08812a4673de3678d",
"type": "github"
},
"original": {
@@ -1119,11 +1069,11 @@
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1767488740,
"narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=",
"lastModified": 1778378178,
"narHash": "sha256-OXPXRIQgGwV77HjYRryOHguh4ALX96jkg+tseLkGgHA=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40",
"rev": "9cd816033ff969415b190722cddf134e78a5665f",
"type": "github"
},
"original": {
@@ -1176,15 +1126,15 @@
"yazi": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_8",
"nixpkgs": "nixpkgs_7",
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1774567340,
"narHash": "sha256-skKD1hvAvilKkK406RgNl6X/YJgkSsoZmtHmdfeoyWI=",
"lastModified": 1780290961,
"narHash": "sha256-XPSfzLmyGeGMU5o1gaRp8XVVFFLxri93TXpzTr38Ti8=",
"owner": "sxyazi",
"repo": "yazi",
"rev": "935eb6b2989f8a7ce219a2a71a539365c8dccfbb",
"rev": "8e80798984864799cd72b3625b21edc33b1ba1e5",
"type": "github"
},
"original": {
@@ -1192,6 +1142,22 @@
"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",
+7 -7
View File
@@ -21,12 +21,17 @@
inputs = {
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
nixpkgs-pinned.url = "github:nixos/nixpkgs/2d293cbfa5a793b4c50d17c05ef9e385b90edf6c";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
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 = {
@@ -38,11 +43,6 @@
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
+1 -1
View File
@@ -24,7 +24,7 @@
fileSystems."/mnt/D" = {
device = "/dev/disk/by-label/Data";
fsType = "ntfs";
fsType = "ntfs3";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
};
-5
View File
@@ -39,11 +39,6 @@
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
];
workspace = [
"2, layout:scrolling"
"4, layout:monocle"
];
};
};
}
+31 -2
View File
@@ -1,4 +1,4 @@
{
{ pkgs, ... }: {
imports = [
./host/bluetooth.nix
./host/bootloader.nix
@@ -17,7 +17,36 @@
./host/yggdrasil.nix
];
programs.hyprland.enable = true;
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" ];
};
};
};
services = {
udisks2.enable = true;
fstrim.enable = true;
+10 -3
View File
@@ -1,8 +1,15 @@
{
{ lib, ... }: {
environment.variables = {
EDITOR = "hx";
RANGER_LOAD_DEFAULT_RC = "FALSE";
QT_QPA_PLATFORMTHEME = "qt5ct";
GSETTINGS_BACKEND = "keyfile";
# 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";
};
}
+1 -1
View File
@@ -9,7 +9,7 @@ lib.mkIf config.programs.gamemode.enable {
environment.systemPackages = with pkgs; [
mangohud
protonup-ng
bottles
pkgs-stable.bottles
pkgs-stable.heroic
prismlauncher
];
+5 -21
View File
@@ -1,24 +1,8 @@
{ inputs, pkgs, config, ... }: {
systemd.services.v2raya = {
{
programs.clash-verge = {
enable = 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";
V2RAYA_V2RAY_BIN = pkgs.lib.getExe pkgs.xray;
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;
serviceMode = true;
tunMode = true;
autoStart = true;
};
}
-40
View File
@@ -1,40 +0,0 @@
{ 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" ];
};
};
}
+1 -1
View File
@@ -4,7 +4,7 @@
persistentKeys = true;
settings = {
Peers = [
"tcp://lair.moe:5001"
"tls://ip4.01.ekb.ru.dioni.su:9003"
];
};
};
+4 -1
View File
@@ -1,7 +1,6 @@
{ config, lib, ... }: {
imports = [
./user/btop.nix
./user/fuzzel.nix
./user/ghostty.nix
./user/helix.nix
./user/hyprland.nix
@@ -9,8 +8,12 @@
./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/yazi.nix
./user/zsh.nix
-26
View File
@@ -1,26 +0,0 @@
{ 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; });
}
-24
View File
@@ -1,24 +0,0 @@
{
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";
};
};
};
}
+13 -1
View File
@@ -1,11 +1,23 @@
{
{ 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";
};
};
}
+25 -7
View File
@@ -15,16 +15,18 @@ 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.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
# hyprbars # Version mismatch
];
@@ -39,6 +41,11 @@ 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"
@@ -113,7 +120,9 @@ in {
exec-once = lib.mkBefore [
"systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.swww "swww-daemon"}"
"${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"
"wl-clip-persist --clipboard both"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
@@ -127,7 +136,6 @@ 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"
@@ -226,11 +234,21 @@ in {
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-termfilechooser
];
config.common = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
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" ];
};
};
};
}
+12 -20
View File
@@ -1,21 +1,13 @@
{ 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
{ config, lib, ... }: let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.${config.stylix.accent};
in {
services.mako = {
enable = true;
[urgency=high]
border-color=#${colors.base09}
[urgency=low]
border-color=#${colors.base04}
'';
}
settings = {
border-color = lib.mkForce accent;
default-timeout = 5000;
};
};
}
+4 -3
View File
@@ -1,13 +1,14 @@
{ pkgs, pkgs-pinned, inputs, ... }: {
{ pkgs, pkgs-stable, ... }: {
home.packages = with pkgs; [
pkgs-pinned.ayugram-desktop
ayugram-desktop
vesktop
obs-studio
mpv
imhex
obsidian
qbittorrent
pkgs-stable.qbittorrent
thunderbird
libreoffice
pear-desktop
];
}
+2 -6
View File
@@ -1,15 +1,11 @@
{ stdenv, lib, config, colors, username, ... }:
{ stdenv, colors, accent ? colors.base0B, ... }:
stdenv.mkDerivation {
name = "AGS theme";
src = ./ags;
dontUnpack = true;
patchPhase = let
accent = if username == "chest"
then colors.base0E
else colors.base0B;
in ''
patchPhase = ''
echo \$bg: \#${colors.base00}\; > colors.scss
echo \$surface0: \#${colors.base02}\; >> colors.scss
echo \$fg: \#${colors.base05}\; >> colors.scss
+11 -1
View File
@@ -1,4 +1,14 @@
{
{ 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";
+182
View File
@@ -0,0 +1,182 @@
{ 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
}
}
}
}
}
'';
};
};
}
+1 -1
View File
@@ -2,7 +2,7 @@
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
settings = {
"*" = {
serverAliveInterval = 30;
serverAliveCountMax = 5;
+40
View File
@@ -0,0 +1,40 @@
{ 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.
'';
};
}
+14
View File
@@ -0,0 +1,14 @@
{
services = {
walker = {
enable = true;
systemd.enable = true;
};
elephant.enable = true;
};
wayland.windowManager.hyprland.settings.bind = [
"$mainMod, D, exec, walker"
];
}
+68
View File
@@ -0,0 +1,68 @@
{ 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"
];
};
}
+308 -100
View File
@@ -1,111 +1,319 @@
{ pkgs, lib, inputs, ... }: {
home.packages = with pkgs; [
( ouch.override { enableUnfree = true; } )
];
{ pkgs, lib, inputs, ... }: let
hostSystem = pkgs.stdenv.hostPlatform.system;
wayland.windowManager.hyprland.settings.windowrule = [
"match:class dragon-drop, move cursor_x-window_w/2 cursor_y-window_h/2"
];
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override {
_7zz = pkgs._7zz-rar;
};
programs.yazi = {
package = inputs.yazi.packages
.${pkgs.stdenv.hostPlatform.system}.default
.override { _7zz = pkgs._7zz-rar; };
enable = true;
enableZshIntegration = true;
shellWrapperName = "y";
yaziOpen = pkgs.writeShellScriptBin "yazi-open" ''
set -efu
settings = {
mgr = {
show_hidden = true;
};
preview = {
max_width = 1000;
max_height = 1000;
};
plugin = {
preloaders = [
{ name = "*.crdownload"; run = "noop"; }
];
target="''${1:-$HOME}"
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"; }
];
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_fetchers = [
{ id = "git"; mime = "*"; run = "git"; }
];
};
};
if [ -f "$target" ]; then
target="$(dirname "$target")"
fi
plugins = with pkgs.yaziPlugins; {
inherit
chmod
ouch
full-border
starship
mount
git
toggle-pane
;
};
if [ ! -e "$target" ]; then
target="$HOME"
fi
initLua = ''
require("git"):setup()
require("full-border"):setup()
require("starship"):setup()
exec ${lib.getExe pkgs.ghostty} --title="Yazi" -e ${lib.getExe yaziPkg} "$target"
'';
Status:children_add(function()
local h = cx.active.current.hovered
if not h or ya.target_family() ~= "unix" then
return ""
end
yaziFileChooser = pkgs.writeShellScriptBin "yazi-file-chooser" ''
set -efu
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)
'';
directory="''${2:-0}"
save="''${3:-0}"
path="''${4:-}"
out="''${5:?missing termfilechooser output path}"
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";
}
];
};
};
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";
}
];
};
};
}
+2 -2
View File
@@ -1,13 +1,14 @@
{ 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(${colors.base0E}ee) rgba(${colors.base0C}ee) 45deg";
"col.active_border" = "rgba(${accent}ee) rgba(${colors.base0C}ee) 45deg";
"col.inactive_border" = "rgba(${colors.base05}aa)";
layout = "dwindle";
@@ -47,7 +48,6 @@
};
dwindle = {
pseudotile = true;
smart_split = true;
};
+3
View File
@@ -80,6 +80,8 @@
in {
stylix = {
enable = true;
overlays.enable = false;
targets = {
hyprland.enable = false;
waybar.enable = false;
@@ -87,6 +89,7 @@ in {
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
accent = "base0E";
polarity = "dark";
image = pkgs.fetchurl {
+1 -1
View File
@@ -175,7 +175,7 @@
style = let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.base0E;
accent = colors.${config.stylix.accent};
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
window#waybar {
background: transparent;
+1 -1
View File
@@ -57,7 +57,7 @@
services.greetd = let
tuigreet = lib.getExe pkgs.tuigreet;
session = lib.getExe' inputs.hyprland.packages.${pkgs.system}.default "start-hyprland";
session = lib.getExe' inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default "start-hyprland";
in {
enable = true;
settings = {
+4 -1
View File
@@ -5,7 +5,10 @@
programs.hyprlock.enable = true;
home.packages = with pkgs; [
android-studio
vivaldi
(vivaldi.override {
proprietaryCodecs = true;
enableWidevine = true;
})
weechat
];
+94 -18
View File
@@ -1,17 +1,82 @@
{ 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 = [ "E501" "E111" "E701" "E241" "E731" ];
flakeIgnore = [ "E111" "E121" "E241" "E501" "E701" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import system, mkdir, listdir
from os import listdir, makedirs, remove, replace, system
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"
@@ -20,10 +85,13 @@
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
notify("Updating wallpaper!")
filename = None
notify("Updating wallpaper...", 0)
try:
json = requests.get(url, params={'apikey': token}).json()
response = requests.get(url, params={'apikey': token})
response.raise_for_status()
json = response.json()
wallpaper = choice(json['data'])
link = wallpaper['path']
@@ -34,22 +102,27 @@
else: ext = "png"
filename = f"{id}.{ext}"
destination = f"{folder}/{filename}"
if not exists(f"{folder}/{filename}"):
if not exists(folder):
mkdir(f"{folder}")
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)
notify("Downloading...")
with open(f"{folder}/{filename}", 'wb') as f:
r = requests.get(link)
f.write(r.content)
except requests.exceptions.ConnectionError:
except requests.exceptions.RequestException:
notify("Offline mode")
filename = choice(listdir(folder))
try:
filename = choice(listdir(folder))
except (FileNotFoundError, IndexError):
notify("Offline mode and wallpaper cache is empty")
finally:
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} --transition-type center")
if filename is not None:
notify("Applying wallpaper", 100)
system(f"awww img {folder}/{filename} --transition-type center")
'';
in {
settings = {
@@ -57,7 +130,7 @@
gaps_in = 2;
gaps_out = 10;
border_size = 3;
"col.active_border" = lib.mkForce "rgba(${colors.base0C}aa) rgba(${colors.base0B}aa) 45deg";
"col.active_border" = lib.mkForce "rgba(${colors.base0C}aa) rgba(${accent}aa) 45deg";
layout = "dwindle";
};
@@ -91,7 +164,6 @@
};
dwindle = {
pseudotile = true;
smart_split = true;
};
@@ -107,6 +179,10 @@
"${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"
+22 -2
View File
@@ -79,10 +79,25 @@
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;
@@ -90,6 +105,7 @@ in {
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
accent = "base0B";
polarity = "dark";
image = pkgs.fetchurl {
@@ -120,6 +136,11 @@ in {
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
};
sansSerif = {
name = "Pixeloid Sans";
package = pixeloid;
};
emoji = {
package = pkgs.noto-fonts-monochrome-emoji;
name = "Noto Emoji";
@@ -143,7 +164,6 @@ in {
gtk = {
gtk4 = {
theme = null;
extraConfig = {
gtk-application-prefer-dark-theme = true;
};
+12 -8
View File
@@ -1,10 +1,12 @@
{ osConfig, config, pkgs, lib, ... }: {
home.packages = with pkgs; [
font-awesome
nerd-fonts.symbols-only
playerctl
cava
pulsemixer
monocraft
font-awesome
nerd-fonts.symbols-only
];
programs.waybar = {
@@ -49,7 +51,7 @@
};
pulseaudio = {
format = "{icon} {volume}%";
format = "{icon} {volume}%";
format-icons = {
headphone = "";
hands-free = "";
@@ -153,12 +155,14 @@
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;
@@ -196,13 +200,13 @@
&:hover { background: ${colors.base01}; }
&.active {
background: ${colors.base0B};
background: ${accent};
color: ${colors.base00};
&:hover {
border-color: ${colors.base0B};
border-color: ${accent};
background: ${colors.base01};
color: ${colors.base0B};
color: ${accent};
}
}
}
@@ -256,7 +260,7 @@
#battery {
&.plugged { color: ${colors.base0D}; }
&.charging { color: ${colors.base0B}; }
&.charging { color: ${accent}; }
&:not(.charging) {
&.warning {
color: ${colors.base00};
@@ -274,7 +278,7 @@
}
&.full {
color: ${colors.base00};
background: ${colors.base0B};
background: ${accent};
}
}