From 591887b86d2984e459fd0244252c7204ade9c1d4 Mon Sep 17 00:00:00 2001 From: Dmitriy Kholkin Date: Fri, 5 Aug 2022 21:10:22 +0300 Subject: [PATCH] move to hyprland and fixes --- flake.lock | 295 +++++++++++++------- flake.nix | 23 +- machines/Flakes-ISO/default.nix | 1 - misc/wallpaper-old | Bin 0 -> 62649 bytes profiles/applications/firefox.nix | 4 + profiles/applications/kitty.nix | 1 + profiles/applications/packages.nix | 3 +- profiles/applications/vscode.nix | 286 ------------------- profiles/applications/vscode/default.nix | 105 +++++++ profiles/applications/vscode/extensions.nix | 140 ++++++++++ profiles/boot.nix | 2 + profiles/nix/default.nix | 2 + profiles/overlay.nix | 41 ++- profiles/packages/hyprpaper.nix | 80 ++++++ profiles/workspace/hyprland/default.nix | 235 ++++++++++++++++ profiles/workspace/mako.nix | 6 +- profiles/workspace/misc.nix | 32 +-- profiles/workspace/sway/default.nix | 14 +- roles/desktop.nix | 3 +- scripts/vscode_update_extensions.sh | 4 +- 20 files changed, 831 insertions(+), 446 deletions(-) create mode 100644 misc/wallpaper-old delete mode 100644 profiles/applications/vscode.nix create mode 100644 profiles/applications/vscode/default.nix create mode 100644 profiles/applications/vscode/extensions.nix create mode 100644 profiles/packages/hyprpaper.nix create mode 100644 profiles/workspace/hyprland/default.nix diff --git a/flake.lock b/flake.lock index 4fc54ad..d7966a0 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "arkenfox-userjs": { "flake": false, "locked": { - "lastModified": 1655190061, - "narHash": "sha256-3bN/T4vCaIqkoz1AfZvczTXQup9B4Myq1cIRy/CyCgo=", + "lastModified": 1659264624, + "narHash": "sha256-iONF1YbWlW99k71lIUA/hw5+Rv1kf5M3mCItW6JmjbI=", "owner": "arkenfox", "repo": "user.js", - "rev": "c21b9faefc0d99ab4f91836ceddc68a2a52ff9cb", + "rev": "6e53e841f78c512f4d1eedb6a2409df746eea979", "type": "github" }, "original": { @@ -84,11 +84,11 @@ }, "cachix": { "locked": { - "lastModified": 1656032109, - "narHash": "sha256-yVpOG/FDHQa8hzhTGoLFgplTCDH/+ydYsF7Mc3pMQfk=", + "lastModified": 1659375853, + "narHash": "sha256-aiMfO6U1w1u93vB+5qCHCQDZKgpJ7qs4GJOQvI3CN/4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "902d91def1efbea804f5158e5999cb113cedf04b", + "rev": "511f6a5c3248f9019a41e70c1891484de2bc906c", "type": "github" }, "original": { @@ -98,6 +98,29 @@ "type": "github" } }, + "comma": { + "inputs": { + "flake-compat": "flake-compat", + "naersk": "naersk", + "nixpkgs": [ + "nixpkgs" + ], + "utils": "utils" + }, + "locked": { + "lastModified": 1656989878, + "narHash": "sha256-SvK+H9M62lhPvVRWfl7HGG0oRO90r1E8ju3PPp6A6N8=", + "owner": "nix-community", + "repo": "comma", + "rev": "f5732a6e8871348bafa3139a2f0d9bb7bc34c076", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "comma", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -148,11 +171,11 @@ }, "flake-utils": { "locked": { - "lastModified": 1653893745, - "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "lastModified": 1656928814, + "narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=", "owner": "numtide", "repo": "flake-utils", - "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249", "type": "github" }, "original": { @@ -163,11 +186,11 @@ }, "flake-utils_2": { "locked": { - "lastModified": 1656065134, - "narHash": "sha256-oc6E6ByIw3oJaIyc67maaFcnjYOz1mMcOtHxbEf9NwQ=", + "lastModified": 1656928814, + "narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=", "owner": "numtide", "repo": "flake-utils", - "rev": "bee6a7250dd1b01844a2de7e02e4df7d8a0a206c", + "rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249", "type": "github" }, "original": { @@ -178,20 +201,17 @@ }, "home-manager": { "inputs": { - "flake-compat": "flake-compat", "nixpkgs": [ "nixpkgs" ], - "nmd": "nmd", - "nmt": "nmt", - "utils": "utils" + "utils": "utils_2" }, "locked": { - "lastModified": 1656150467, - "narHash": "sha256-IJcYUzBfHhk0bklnWROwvw3P4txsfas+EzPb3fD+dvw=", + "lastModified": 1659484873, + "narHash": "sha256-6VoPiGyDdjBHOJ3IpS24lY1lrDiOHeuEefOFI0qz3WE=", "owner": "nix-community", "repo": "home-manager", - "rev": "e0baf8ee0c3578ea158df99f4443fdd30b9bfe14", + "rev": "d8d9ff0b2df77defa10375c6665b51f0251c34d6", "type": "github" }, "original": { @@ -200,17 +220,54 @@ "type": "github" } }, + "hyprland": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "wlroots": "wlroots" + }, + "locked": { + "lastModified": 1659554352, + "narHash": "sha256-TkTYgohLTQIW3JRWqNH3N7TbT55ujYS3S7dfZgK7vXU=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "5dcbce550f0247583789ced52c5ea0bcbde3fc35", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprpaper": { + "flake": false, + "locked": { + "lastModified": 1659542870, + "narHash": "sha256-5bB0Wvl0PJDrHGOMM1jiKJOqoBExJfMbclAXiZbZmYo=", + "owner": "hyprwm", + "repo": "hyprpaper", + "rev": "571f495e88cf9a758698d937d65b9ba35d6eab13", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprpaper", + "type": "github" + } + }, "lib-aggregate": { "inputs": { "flake-utils": "flake-utils_2", "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1656072606, - "narHash": "sha256-Cu62yV1ndmrXVw6LryyGFq0Jk+QqFPCNwWoG4IIszYs=", + "lastModified": 1659269454, + "narHash": "sha256-TefLZJkb5I3okEPr5CEx8ok5YMMIKKRIr0qgLsV0wEo=", "owner": "nix-community", "repo": "lib-aggregate", - "rev": "e048dc74c4b6e21c10f7b675d6f5f43b5fd5d7fd", + "rev": "05a490aa2cc58c324089be2a46630f79cfd291dc", "type": "github" }, "original": { @@ -271,6 +328,28 @@ "url": "https://github.com/AfoninZ/MultiMC5-Cracked.git" } }, + "naersk": { + "inputs": { + "nixpkgs": [ + "comma", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1653413650, + "narHash": "sha256-wojDHjb+eU80MPH+3HQaK0liUy8EgR95rvmCl24i58Y=", + "owner": "nix-community", + "repo": "naersk", + "rev": "69daaceebe12c070cd5ae69ba38f277bbf033695", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "naersk", + "type": "github" + } + }, "nix": { "inputs": { "lowdown-src": "lowdown-src", @@ -278,11 +357,11 @@ "nixpkgs-regression": "nixpkgs-regression" }, "locked": { - "lastModified": 1656108215, - "narHash": "sha256-RzgcfbXxNWtt4BeJ/rPzHxR+l+wCfiauN4XTVnRLiy0=", + "lastModified": 1659543961, + "narHash": "sha256-4/gM8/rL8ms6Q+KcJo5nWTXVjBLkd0ESLvY8DemjNOA=", "owner": "nixos", "repo": "nix", - "rev": "586fa707fca207dbd12e49800691390249bdcd03", + "rev": "075bf6e5565aff9fba0ea02f3333c82adf4dccee", "type": "github" }, "original": { @@ -300,11 +379,11 @@ "poetry2nix": "poetry2nix" }, "locked": { - "lastModified": 1655280191, - "narHash": "sha256-OEgjk89Hr2/yNH+iPeFRi+X5dy+bZxhULVknqaBCcOg=", + "lastModified": 1657876248, + "narHash": "sha256-UkcXnWq9ukTFgLhxafg3cnQZmWL/jNgLbJbE1Geo4k4=", "owner": "thiagokokada", "repo": "nix-alien", - "rev": "ccf910e15a6dc5a41f8e714f9c35996aeb688760", + "rev": "897f10267138748956b7720c5a82bba8a90a832e", "type": "github" }, "original": { @@ -345,27 +424,27 @@ }, "nixpkgs-custom": { "locked": { - "lastModified": 1656168011, - "narHash": "sha256-iIXlI4dloMt7YiPInH7PuBCiSBmvgclkRZwOzlYv/xg=", - "owner": "AlukardBF", + "lastModified": 1659321066, + "narHash": "sha256-lWv1/yZhz1XGgpkyOSBItVyIDkiAIGXw8CHAA8+X144=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "4bc62eae18b26c627f2549b6833de9362568c7fb", + "rev": "894bced14f7c66112d39233bcaeaaf708e077759", "type": "github" }, "original": { - "owner": "AlukardBF", - "ref": "master", + "owner": "nixos", "repo": "nixpkgs", + "rev": "894bced14f7c66112d39233bcaeaaf708e077759", "type": "github" } }, "nixpkgs-lib": { "locked": { - "lastModified": 1655599917, - "narHash": "sha256-kjZbt5WdTrnjMxL79okg9TCoRUdADG50x/TWozbyTsE=", + "lastModified": 1659228903, + "narHash": "sha256-if+c7F8t/Yufix9LeWmWp4p3+VmGQAUSr7TCCrlQTJQ=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "5fb55578aa2f1a502d636a8ac71aece57cb730bb", + "rev": "a351c69544a1b38dcfae88b57512de36931a0b7c", "type": "github" }, "original": { @@ -376,11 +455,11 @@ }, "nixpkgs-master": { "locked": { - "lastModified": 1656157493, - "narHash": "sha256-ComBm/Wo4sGHCAuLNJ+VAbPd2/dWLWN03bkSK8uq/LI=", + "lastModified": 1659561516, + "narHash": "sha256-1R0Y6bXq5fMrFxkEawUWvltA8Oiwyz3UOJhfrWiWTJo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "41c91c48eee8801b91eb6c18ef763b11dc059047", + "rev": "42a4a464414cef2f3ecf9cba7ba93c6981626882", "type": "github" }, "original": { @@ -393,11 +472,11 @@ "nixpkgs-mozilla": { "flake": false, "locked": { - "lastModified": 1650459918, - "narHash": "sha256-sroCK+QJTmoXtcRkwZyKOP9iAYOPID2Bwdxn4GkG16w=", + "lastModified": 1657214286, + "narHash": "sha256-rO/4oymKXU09wG2bcTt4uthPCp1XsBZjxuCJo3yVXNs=", "owner": "mozilla", "repo": "nixpkgs-mozilla", - "rev": "e1f7540fc0a8b989fb8cf701dc4fd7fc76bcf168", + "rev": "0508a66e28a5792fdfb126bbf4dec1029c2509e0", "type": "github" }, "original": { @@ -424,11 +503,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1656007306, - "narHash": "sha256-MsC44YZ6wuBwn5Bu8T+RVoQWlp2l5BR6hhmNoAAHIEw=", + "lastModified": 1659445012, + "narHash": "sha256-n8/7npmp3hLbPSTRHPW8EPO8qh9vJ10RgkRM3Ve4vfc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ccf8bdf72624521358be6bb7d9b524c4cbcf7aff", + "rev": "a9f66ae640146ac16b6e33d2359e9171b27b0993", "type": "github" }, "original": { @@ -448,11 +527,11 @@ ] }, "locked": { - "lastModified": 1656159969, - "narHash": "sha256-tetFScs4LsZ5DrrsSxpJeo/FI5pi14xFhDuKswv1K3s=", + "lastModified": 1659557886, + "narHash": "sha256-vwIdUmsmxeW6QsATG4VVtY25enBQII9R5tNSL9f1o68=", "owner": "nix-community", "repo": "nixpkgs-wayland", - "rev": "ac93a688a4e11da7f57d404534b3581290181495", + "rev": "32c10417a93107e6840dd91d6270dd8bc772d58f", "type": "github" }, "original": { @@ -463,11 +542,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1653988320, - "narHash": "sha256-ZaqFFsSDipZ6KVqriwM34T739+KLYJvNmCWzErjAg7c=", + "lastModified": 1657693803, + "narHash": "sha256-G++2CJ9u0E7NNTAi9n5G8TdDmGJXcIjkJ3NF8cetQB8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fa57ed190fd6c7c746319444f34b5917666e5c1", + "rev": "365e1b3a859281cf11b94f87231adeabbdd878a2", "type": "github" }, "original": { @@ -479,11 +558,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1655983783, - "narHash": "sha256-0h1FzkYWei24IdKNpCX93onkF/FMiXQG8SdEbTc0r8A=", + "lastModified": 1659487974, + "narHash": "sha256-CVGOtR/Wyq3TVCjf8/kdnYD5G2JwUKUQVtd+5WIDTuY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6141b8932a5cf376fe18fcd368cecd9ad946cb68", + "rev": "12363fb6d89859a37cd7e27f85288599f13e49d9", "type": "github" }, "original": { @@ -493,45 +572,13 @@ "type": "github" } }, - "nmd": { - "flake": false, - "locked": { - "lastModified": 1653339422, - "narHash": "sha256-RNLq09vfj21TyYuUCeD6BNTNC6Ew8bLhQULZytN4Xx8=", - "owner": "rycee", - "repo": "nmd", - "rev": "91dee681dd1c478d6040a00835d73c0f4a4c5c29", - "type": "gitlab" - }, - "original": { - "owner": "rycee", - "repo": "nmd", - "type": "gitlab" - } - }, - "nmt": { - "flake": false, - "locked": { - "lastModified": 1648075362, - "narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=", - "owner": "rycee", - "repo": "nmt", - "rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae", - "type": "gitlab" - }, - "original": { - "owner": "rycee", - "repo": "nmt", - "type": "gitlab" - } - }, "nur": { "locked": { - "lastModified": 1656158107, - "narHash": "sha256-DbENc5ndWgpTd7bJbNqP8lX+lGfzcCI1vSjYy0ebASI=", + "lastModified": 1659556157, + "narHash": "sha256-u8HQc5m0W5XJBN8otFjpVdkF1ZxZgN9ypxausw5kDPA=", "owner": "nix-community", "repo": "NUR", - "rev": "c45462e0eac81d8c779f9444e3b231f4e95f2f10", + "rev": "97fdb83a2e4db43fd6a41a61e84c8d97e737b6d4", "type": "github" }, "original": { @@ -552,11 +599,11 @@ ] }, "locked": { - "lastModified": 1655106322, - "narHash": "sha256-X7oWgty5uKYYTg7n6gut/lShi1X5QxiOfLQNHyJ5LaM=", + "lastModified": 1657626303, + "narHash": "sha256-O/JJ0hSBCmlx0oP8QGAlRrWn0BvlC5cj7/EZ0CCWHTU=", "owner": "nix-community", "repo": "poetry2nix", - "rev": "347ccb4ce58e7af1ece3f9743019263c4aede7b8", + "rev": "920ba682377d5c0d87945c5eb6141ab8447ca509", "type": "github" }, "original": { @@ -626,7 +673,10 @@ "base16": "base16", "base16-horizon-scheme": "base16-horizon-scheme", "base16-tokyonight-scheme": "base16-tokyonight-scheme", + "comma": "comma", "home-manager": "home-manager", + "hyprland": "hyprland", + "hyprpaper": "hyprpaper", "multimc-cracked": "multimc-cracked", "nix": "nix", "nix-alien": "nix-alien", @@ -651,11 +701,11 @@ "rycee": { "flake": false, "locked": { - "lastModified": 1656150871, - "narHash": "sha256-UQuoIv9nxHRMzh+0jAerDcl4WLqtI/ZjsUY8Ly3XCIE=", + "lastModified": 1659499355, + "narHash": "sha256-v534Oh9EQ/aOHpsoGGTf62Hcw80c9Qv2qW+L+FJNVCY=", "owner": "rycee", "repo": "nur-expressions", - "rev": "882f830b66d99012374ff2140b5fd276449d49d6", + "rev": "549af64db84b6f6530c6a459d7f6c849f2c65553", "type": "gitlab" }, "original": { @@ -671,7 +721,7 @@ "nixpkgs" ], "nixpkgs-22_05": "nixpkgs-22_05", - "utils": "utils_2" + "utils": "utils_3" }, "locked": { "lastModified": 1655930346, @@ -703,6 +753,21 @@ } }, "utils_2": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "utils_3": { "locked": { "lastModified": 1605370193, "narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", @@ -724,11 +789,11 @@ ] }, "locked": { - "lastModified": 1649111508, - "narHash": "sha256-zMXuOohxn3U/HjJXy5oQINiNNzvyqiUwgQu4Rsw9VIY=", + "lastModified": 1657846023, + "narHash": "sha256-W7XkZ96U/fRzZDU6YGGBQGgxo6A6RJzOrfSRweCZfjw=", "owner": "MatthewCash", "repo": "nixos-vscode-server", - "rev": "bc9a62ac42a38e22b552cd88841640725e1b7a2b", + "rev": "58a5bbc00235d212a3c99bb62113504abf13da50", "type": "github" }, "original": { @@ -737,6 +802,24 @@ "type": "github" } }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1658770113, + "narHash": "sha256-VBq9vw0hvQPKGKLNKLJS8xsUHvrX0o2LUDBVolixenE=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "7b5e890e61a27375725068a7d1884b26851b3102", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "type": "gitlab" + } + }, "zsh-autosuggestions": { "flake": false, "locked": { @@ -756,11 +839,11 @@ "zsh-cod": { "flake": false, "locked": { - "lastModified": 1642757985, - "narHash": "sha256-gn1MXy2kRCZqYewsxr+ZRwhxwUlD6TM1bt0mRDYnRZ8=", + "lastModified": 1658825818, + "narHash": "sha256-0Pb8IjUpfRdFpPAn3JQlryFnLMb7wlmn8Jw8GI+Q6q0=", "owner": "dim-an", "repo": "cod", - "rev": "de10c9bfff394dd59f302515776f1413f26e5a49", + "rev": "2a56d1ee216f48bbd5c2fb9846cc2192f21fa6ac", "type": "github" }, "original": { @@ -788,11 +871,11 @@ "zsh-you-should-use": { "flake": false, "locked": { - "lastModified": 1638894143, - "narHash": "sha256-g4Fw0TwyajZnWQ8fvJvobyt98nRgg08uxK6yNEABo8Y=", + "lastModified": 1656492197, + "narHash": "sha256-1NL/GcW656Qn8+OrJVESF2O+GzFxl44iZqXGSnymOB4=", "owner": "MichaelAquilina", "repo": "zsh-you-should-use", - "rev": "773ae5f414b296b4100f1ab6668ecffdab795128", + "rev": "09d9aa2cad2b7caf48cce8f321ebbbf8f47ce1c3", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2cde8fa..60337ca 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "System configuration"; inputs = { - nixpkgs-custom.url = "github:AlukardBF/nixpkgs/master"; + nixpkgs-custom.url = "github:nixos/nixpkgs/894bced14f7c66112d39233bcaeaaf708e077759"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-master.url = "github:nixos/nixpkgs/master"; nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-22.05"; @@ -29,6 +29,18 @@ url = "github:alukardbf/base16-tokyonight-scheme"; flake = false; }; + comma = { + url = "github:nix-community/comma"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + hyprland = { + url = "github:hyprwm/Hyprland"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + hyprpaper = { + url = "github:hyprwm/hyprpaper"; + flake = false; + }; multimc-cracked = { url = "https://github.com/AfoninZ/MultiMC5-Cracked.git"; ref = "develop"; @@ -95,6 +107,13 @@ sudo nixos-rebuild $1 --flake . fi ''); + update-vscode = (pkgs: pkgs.writeShellScriptBin "update-vscode" '' + ./scripts/vscode_update_extensions.sh > ./profiles/applications/vscode/extensions.nix + ''); + upgrade = (pkgs: pkgs.writeShellScriptBin "upgrade" '' + cp flake.lock flake.lock.bak && nix flake update + update-vscode + ''); findModules = dir: builtins.concatLists (builtins.attrValues (builtins.mapAttrs (name: type: @@ -139,7 +158,7 @@ devShell.x86_64-linux = let pkgs = self.legacyPackages.x86_64-linux; in pkgs.mkShell { - nativeBuildInputs = [ (rebuild pkgs) ]; + nativeBuildInputs = [ (rebuild pkgs) (update-vscode pkgs) (upgrade pkgs) ]; }; }; } diff --git a/machines/Flakes-ISO/default.nix b/machines/Flakes-ISO/default.nix index 778df96..81e96f9 100644 --- a/machines/Flakes-ISO/default.nix +++ b/machines/Flakes-ISO/default.nix @@ -14,7 +14,6 @@ mako mpv packages - picom print-scan rofi sound diff --git a/misc/wallpaper-old b/misc/wallpaper-old new file mode 100644 index 0000000000000000000000000000000000000000..43722c0643e940e2f93ec04a50bb3c9b98c57872 GIT binary patch literal 62649 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 literal 0 HcmV?d00001 diff --git a/profiles/applications/firefox.nix b/profiles/applications/firefox.nix index 80d03a3..31feb82 100755 --- a/profiles/applications/firefox.nix +++ b/profiles/applications/firefox.nix @@ -108,6 +108,8 @@ in { "experiments.enabled" = false; "experiments.supported" = false; "network.allow-experiments" = false; + + "widget.use-xdg-desktop-portal.file-picker" = 1; }; extraPrefs = "${fileContents "${pkgs.arkenfox-userjs}/share/user-js/profiles/user.js"}"; }; @@ -153,6 +155,8 @@ in { "experiments.enabled" = false; "experiments.supported" = false; "network.allow-experiments" = false; + + "widget.use-xdg-desktop-portal.file-picker" = 1; }; extraPrefs = "${fileContents "${pkgs.arkenfox-userjs}/share/user-js/profiles/user.js"}"; }; diff --git a/profiles/applications/kitty.nix b/profiles/applications/kitty.nix index 4417710..9a56e17 100644 --- a/profiles/applications/kitty.nix +++ b/profiles/applications/kitty.nix @@ -50,6 +50,7 @@ in with config.deviceSpecific; color20 = "#${thm.base04-hex}"; color21 = "#${thm.base06-hex}"; enable_audio_bell = false; + confirm_os_window_close = 0; }; }; }; diff --git a/profiles/applications/packages.nix b/profiles/applications/packages.nix index 0f2f18c..e6dba8f 100644 --- a/profiles/applications/packages.nix +++ b/profiles/applications/packages.nix @@ -57,7 +57,7 @@ with config.deviceSpecific; { pinta qbittorrent qimgv - quodlibet + # quodlibet schildichat-desktop-wayland system-config-printer tdesktop @@ -83,6 +83,7 @@ with config.deviceSpecific; { ] ++ lib.optionals isGaming [ # ceserver # ckan + gamescope goverlay lutris obs-studio diff --git a/profiles/applications/vscode.nix b/profiles/applications/vscode.nix deleted file mode 100644 index daa7b29..0000000 --- a/profiles/applications/vscode.nix +++ /dev/null @@ -1,286 +0,0 @@ -{ pkgs, lib, config, ... }: -let - thmFile = config.lib.base16.templateFile; - thm = config.lib.base16.theme; -in -{ - home-manager.users.alukard = { - programs.vscode = { - enable = true; - package = pkgs.vscode; - extensions = pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - { - name = "better-comments"; - publisher = "aaron-bond"; - version = "2.1.0"; - sha256 = "0kmmk6bpsdrvbb7dqf0d3annpg41n9g6ljzc1dh0akjzpbchdcwp"; - } - { - name = "Bookmarks"; - publisher = "alefragnani"; - version = "13.2.4"; - sha256 = "0376hs09wypn781s4cz3qb74qvsxck0nw1s39bfsgpqi0rgvwa9f"; - } - { - name = "project-manager"; - publisher = "alefragnani"; - version = "12.5.0"; - sha256 = "0v2zckwqyl33jwpzjr8i3p3v1xldkindsyip8v7rs1pcmqmpv1dq"; - } - { - name = "nix-env-selector"; - publisher = "arrterian"; - version = "1.0.7"; - sha256 = "0mralimyzhyp4x9q98x3ck64ifbjqdp8cxcami7clvdvkmf8hxhf"; - } - { - name = "Nix"; - publisher = "bbenoist"; - version = "1.0.1"; - sha256 = "0zd0n9f5z1f0ckzfjr38xw2zzmcxg1gjrava7yahg5cvdcw6l35b"; - } - { - name = "better-toml"; - publisher = "bungcip"; - version = "0.3.2"; - sha256 = "08lhzhrn6p0xwi0hcyp6lj9bvpfj87vr99klzsiy8ji7621dzql3"; - } - { - name = "path-intellisense"; - publisher = "christian-kohler"; - version = "2.8.0"; - sha256 = "04vardis9k6yzaha5hhhv16c3z6np48adih46xj88y83ipvg5z2l"; - } - { - name = "gitignore"; - publisher = "codezombiech"; - version = "0.7.0"; - sha256 = "0fm4sxx1cb679vn4v85dw8dfp5x0p74m9p2b56gqkvdap0f2q351"; - } - { - name = "dart-code"; - publisher = "Dart-Code"; - version = "3.37.20220310"; - sha256 = "07ppxizyawy247n2spz44qna1xsq7irywdkq6w9xsmd6lqbw9xcx"; - } - { - name = "flutter"; - publisher = "Dart-Code"; - version = "3.37.20220301"; - sha256 = "0l96nx6xwciq509q0cijkymhyvdhx04al4ypr3k9ydcapajvhb9x"; - } - { - name = "wal-theme"; - publisher = "dlasagno"; - version = "1.2.0"; - sha256 = "17130z04jg8hhj1k62q3d3lni10hajrckf1y95bbnm2d57j8spjz"; - } - { - name = "gitlens"; - publisher = "eamodio"; - version = "12.0.5"; - sha256 = "0zfawv9nn88x8m30h7ryax0c7p68najl23a51r88a70hqppzxshw"; - } - { - name = "tokyo-night"; - publisher = "enkia"; - version = "0.8.4"; - sha256 = "15ab2k0xs8kvws8zq0irch4cvq1dc0zr3xynj0qn78zzbgwq92c7"; - } - { - name = "vscode-pull-request-github"; - publisher = "GitHub"; - version = "0.41.2022033109"; - sha256 = "02iqf7pm2ldfw9xwlibl97nywyfkmnvj26y2s9jia1hvhwb6s7ql"; - } - { - name = "vscode-env"; - publisher = "IronGeek"; - version = "0.1.0"; - sha256 = "1ygfx1p38dqpk032n3x0591i274a63axh992gn6z1d45ag9bs6ji"; - } - { - name = "plantuml"; - publisher = "jebbs"; - version = "2.17.2"; - sha256 = "0yxnfq34g563w96dwfirqscjfclhzr48yb9cwfjjf0c0l638x9vv"; - } - { - name = "codeacejumper"; - publisher = "lucax88x"; - version = "3.3.2"; - sha256 = "02a5f0lg0rmrjjf52z30mk19ii71pcdxjmbcb4v6haw1pkm6anqn"; - } - { - name = "flutter-tree"; - publisher = "marcelovelasquez"; - version = "1.0.0"; - sha256 = "08glv02b5d5f4jfdfddg62jvdzscinl2jhsb7gpz36rxrbp0f17s"; - } - { - name = "git-graph"; - publisher = "mhutchie"; - version = "1.30.0"; - sha256 = "000zhgzijf3h6abhv4p3cz99ykj6489wfn81j0s691prr8q9lxxh"; - } - { - name = "remote-ssh"; - publisher = "ms-vscode-remote"; - version = "0.78.0"; - sha256 = "1743rwmbqw2mi2dfy3r9qc6qkn42pjchj5cl8ayqvwwrrrvvvpxx"; - } - { - name = "remote-ssh-edit"; - publisher = "ms-vscode-remote"; - version = "0.78.0"; - sha256 = "0vfzz6k4hk7m5r6l7hszbf4fwhxq6hxf8f8gimphkc57v4z376ls"; - } - { - name = "awesome-flutter-snippets"; - publisher = "Nash"; - version = "3.0.3"; - sha256 = "1kmklahzzng7fy1xgqmyzphyfpy2dppfbvqwbsw3al2s0psynxd0"; - } - { - name = "color-highlight"; - publisher = "naumovs"; - version = "2.5.0"; - sha256 = "0ri1rylg0r9r1kdc67815gjlq5fwnb26xpyziva6a40brrbh70vm"; - } - { - name = "material-icon-theme"; - publisher = "PKief"; - version = "4.15.0"; - sha256 = "1bs78k27ypq298zyhclcj3xac9xlj7f3zpy6jh2gv9x8fbwnqp3x"; - } - { - name = "gruvbox-material"; - publisher = "sainnhe"; - version = "6.5.0"; - sha256 = "1r9kgwrh6jjp8i6aa07prhrb398d5isf9ics4wmdbvd6k0gnzf8n"; - } - { - name = "code-spell-checker"; - publisher = "streetsidesoftware"; - version = "2.1.11"; - sha256 = "0zjvv6msz9w9k81rkynqp6xgfzd11slakmr1rm8v875bpgzdfg9s"; - } - { - name = "code-spell-checker-russian"; - publisher = "streetsidesoftware"; - version = "2.0.3"; - sha256 = "1bq478y4g3ibf2hww6mj06m0l2c9s1psxwq7cymh646p4v87ljcg"; - } - { - name = "pdf"; - publisher = "tomoki1207"; - version = "1.2.0"; - sha256 = "1bcj546bp0w4yndd0qxwr8grhiwjd1jvf33jgmpm0j96y34vcszz"; - } - { - name = "sort-lines"; - publisher = "Tyriar"; - version = "1.9.1"; - sha256 = "0dds99j6awdxb0ipm15g543a5b6f0hr00q9rz961n0zkyawgdlcb"; - } - { - name = "vscode-nginx"; - publisher = "william-voyek"; - version = "0.7.2"; - sha256 = "0s4akrhdmrf8qwn6vp8kc31k5hx2k2wml5mcashfc09hxiqsf2cq"; - } - ]; - userSettings = { - "update.mode" = "none"; - "telemetry.telemetryLevel" = "off"; - "editor.fontFamily" = "'Victor Mono', 'Fira Code', 'Font Awesome 5 Free', 'Font Awesome 5 Free Solid', 'Material Icons'"; - "editor.fontLigatures" = true; - "editor.fontWeight" = "600"; - "editor.fontSize" = 16; - "workbench.iconTheme" = "material-icon-theme"; - "workbench.colorTheme" = "Tokyo Night"; - "files.autoSave" = "afterDelay"; - "cSpell.language" = "en,ru"; - "editor.quickSuggestions" = { - "other" = true; - "comments" = false; - "strings" = true; - }; - "hexdump.littleEndian" = true; - "files.trimTrailingWhitespace" = true; - "[dart]" = { - "editor.formatOnSave" = true; - "editor.formatOnType" = true; - "editor.rulers" = [ - 80 - ]; - "editor.selectionHighlight" = false; - "editor.suggest.snippetsPreventQuickSuggestions" = false; - "editor.suggestSelection" = "first"; - "editor.tabCompletion" = "onlySnippets"; - "editor.wordBasedSuggestions" = false; - }; - "[nix]" = { - "editor.tabSize" = 2; - "editor.detectIndentation" = true; - }; - "dart.allowAnalytics" = false; - "dart.flutterCreateOrganization" = "com.ataraxiadev"; - "files.exclude" = { - "**/.classpath" = true; - "**/.project" = true; - "**/.settings" = true; - "**/.factorypath" = true; - "**/.direnv" = true; - }; - "gruvboxMaterial.darkContrast" = "medium"; - "dart.debugSdkLibraries" = true; - "dart.checkForSdkUpdates" = false; - "window.menuBarVisibility" = "toggle"; - "terminal.integrated.fontFamily" = "IBM Plex Mono for Powerline"; - "terminal.integrated.fontWeight" = "500"; - "files.watcherExclude" = { - "**/.direnv" = true; - }; - "search.exclude" = { - "**/.direnv" = true; - }; - "git.enableCommitSigning" = true; - "git-graph.repository.sign.commits" = true; - "git-graph.repository.sign.tags" = true; - "editor.bracketPairColorization.enabled" = true; - "editor.guides.bracketPairs" = "active"; - "terminal.integrated.defaultProfile.linux" = "linux-zsh"; - "terminal.integrated.profiles.linux" = { - "linux-zsh" = { - "path" = "${pkgs.zsh}/bin/zsh"; - }; - }; - }; - }; - - home.file.".cache/wal/colors".text = '' - #${thm.base00-hex} - #${thm.base08-hex} - #${thm.base0B-hex} - #${thm.base0A-hex} - #${thm.base0D-hex} - #${thm.base0E-hex} - #${thm.base0C-hex} - #${thm.base05-hex} - #${thm.base03-hex} - #${thm.base08-hex} - #${thm.base0B-hex} - #${thm.base0A-hex} - #${thm.base0D-hex} - #${thm.base0E-hex} - #${thm.base0C-hex} - #${thm.base07-hex} - ''; - }; - - defaultApplications.editor = { - cmd = "${pkgs.vscode}/bin/code"; - desktop = "code"; - }; -} diff --git a/profiles/applications/vscode/default.nix b/profiles/applications/vscode/default.nix new file mode 100644 index 0000000..5a7f4cc --- /dev/null +++ b/profiles/applications/vscode/default.nix @@ -0,0 +1,105 @@ +{ pkgs, lib, config, ... }: +let + thmFile = config.lib.base16.templateFile; + thm = config.lib.base16.theme; +in +{ + home-manager.users.alukard = { + programs.vscode = { + enable = true; + package = pkgs.vscode; + extensions = pkgs.vscode-utils.extensionsFromVscodeMarketplace (import ./extensions.nix); + userSettings = { + "update.mode" = "none"; + "telemetry.telemetryLevel" = "off"; + "editor.fontFamily" = "'Victor Mono', 'Fira Code', 'Font Awesome 5 Free', 'Font Awesome 5 Free Solid', 'Material Icons'"; + "editor.fontLigatures" = true; + "editor.fontWeight" = "600"; + "editor.fontSize" = 16; + "workbench.iconTheme" = "material-icon-theme"; + "workbench.colorTheme" = "Tokyo Night"; + "files.autoSave" = "afterDelay"; + "cSpell.language" = "en,ru"; + "editor.quickSuggestions" = { + "other" = true; + "comments" = false; + "strings" = true; + }; + "hexdump.littleEndian" = true; + "files.trimTrailingWhitespace" = true; + "[dart]" = { + "editor.formatOnSave" = true; + "editor.formatOnType" = true; + "editor.rulers" = [ + 80 + ]; + "editor.selectionHighlight" = false; + "editor.suggest.snippetsPreventQuickSuggestions" = false; + "editor.suggestSelection" = "first"; + "editor.tabCompletion" = "onlySnippets"; + "editor.wordBasedSuggestions" = false; + }; + "[nix]" = { + "editor.tabSize" = 2; + "editor.detectIndentation" = true; + }; + "dart.allowAnalytics" = false; + "dart.flutterCreateOrganization" = "com.ataraxiadev"; + "files.exclude" = { + "**/.classpath" = true; + "**/.project" = true; + "**/.settings" = true; + "**/.factorypath" = true; + "**/.direnv" = true; + }; + "gruvboxMaterial.darkContrast" = "medium"; + "dart.debugSdkLibraries" = true; + "dart.checkForSdkUpdates" = false; + "window.menuBarVisibility" = "toggle"; + "terminal.integrated.fontFamily" = "IBM Plex Mono for Powerline"; + "terminal.integrated.fontWeight" = "500"; + "files.watcherExclude" = { + "**/.direnv" = true; + }; + "search.exclude" = { + "**/.direnv" = true; + }; + "git.enableCommitSigning" = true; + "git-graph.repository.sign.commits" = true; + "git-graph.repository.sign.tags" = true; + "editor.bracketPairColorization.enabled" = true; + "editor.guides.bracketPairs" = "active"; + "terminal.integrated.defaultProfile.linux" = "linux-zsh"; + "terminal.integrated.profiles.linux" = { + "linux-zsh" = { + "path" = "${pkgs.zsh}/bin/zsh"; + }; + }; + }; + }; + + home.file.".cache/wal/colors".text = '' + #${thm.base00-hex} + #${thm.base08-hex} + #${thm.base0B-hex} + #${thm.base0A-hex} + #${thm.base0D-hex} + #${thm.base0E-hex} + #${thm.base0C-hex} + #${thm.base05-hex} + #${thm.base03-hex} + #${thm.base08-hex} + #${thm.base0B-hex} + #${thm.base0A-hex} + #${thm.base0D-hex} + #${thm.base0E-hex} + #${thm.base0C-hex} + #${thm.base07-hex} + ''; + }; + + defaultApplications.editor = { + cmd = "${pkgs.vscode}/bin/code"; + desktop = "code"; + }; +} diff --git a/profiles/applications/vscode/extensions.nix b/profiles/applications/vscode/extensions.nix new file mode 100644 index 0000000..870f37f --- /dev/null +++ b/profiles/applications/vscode/extensions.nix @@ -0,0 +1,140 @@ +[ + { + name = "better-comments"; + publisher = "aaron-bond"; + version = "3.0.2"; + sha256 = "15w1ixvp6vn9ng6mmcmv9ch0ngx8m85i1yabxdfn6zx3ypq802c5"; + } + { + name = "Bookmarks"; + publisher = "alefragnani"; + version = "13.3.1"; + sha256 = "0q3zc84f4dl9zhsr6j569bm4jgyjlrzn9zf3fcpw871wnak8b509"; + } + { + name = "project-manager"; + publisher = "alefragnani"; + version = "12.6.1"; + sha256 = "0lmva34pmadkny55rr7fm9wv2k0q4sjx9b7984azwlrbkvb1jhha"; + } + { + name = "nix-env-selector"; + publisher = "arrterian"; + version = "1.0.9"; + sha256 = "0kdfhkdkffr3cdxmj7llb9g3wqpm13ml75rpkwlg1y0pkxcnlk2f"; + } + { + name = "Nix"; + publisher = "bbenoist"; + version = "1.0.1"; + sha256 = "0zd0n9f5z1f0ckzfjr38xw2zzmcxg1gjrava7yahg5cvdcw6l35b"; + } + { + name = "better-toml"; + publisher = "bungcip"; + version = "0.3.2"; + sha256 = "08lhzhrn6p0xwi0hcyp6lj9bvpfj87vr99klzsiy8ji7621dzql3"; + } + { + name = "catppuccin-vsc"; + publisher = "Catppuccin"; + version = "1.0.6"; + sha256 = "14kbaglln2qq7kpkjqmacw6nwgqd0ydn16qnrbsr21iwszqk5kz0"; + } + { + name = "path-intellisense"; + publisher = "christian-kohler"; + version = "2.8.1"; + sha256 = "1j7q4mzj173sl6xl3zjw40hnqvyqsrsczakmv63066k4k0rb6clm"; + } + { + name = "gitignore"; + publisher = "codezombiech"; + version = "0.9.0"; + sha256 = "0ww0x28m83fv5zdqkmz108rsxb60fyy5y0ksknb2xchirzwhayi0"; + } + { + name = "dart-code"; + publisher = "Dart-Code"; + version = "3.46.1"; + sha256 = "0z76qqkdp5siw4cb0vd1xm1vzrr02r2c9gsa5l365w9rn8fnagl0"; + } + { + name = "flutter"; + publisher = "Dart-Code"; + version = "3.46.0"; + sha256 = "1gjc7yxf7prpadi82ml5jqq2f5svcnnfryhn87is79wmgy3dxk3z"; + } + { + name = "wal-theme"; + publisher = "dlasagno"; + version = "1.2.0"; + sha256 = "17130z04jg8hhj1k62q3d3lni10hajrckf1y95bbnm2d57j8spjz"; + } + { + name = "gitlens"; + publisher = "eamodio"; + version = "12.1.2"; + sha256 = "0wpmfrfpi6wl9v3dknx2qr2m74azpcw8bvhac21v67w6jxnl3jd9"; + } + { + name = "tokyo-night"; + publisher = "enkia"; + version = "0.9.2"; + sha256 = "0abry6ipz7rn6zbn6wf3gmb31dyp7ah1jv73aspmhdj582imax4l"; + } + { + name = "bloc"; + publisher = "FelixAngelov"; + version = "6.6.1"; + sha256 = "0xi7yzk9lbpjjqgyph1zas2dr0cakap5gg1rziq9vvs6s63il6s7"; + } + { + name = "vscode-pull-request-github"; + publisher = "GitHub"; + version = "0.47.2022080211"; + sha256 = "14ick67g0l2sclbi0hn91mqi7xncaif9shddwf7swb7lrj6p64kv"; + } + { + name = "vscode-env"; + publisher = "IronGeek"; + version = "0.1.0"; + sha256 = "1ygfx1p38dqpk032n3x0591i274a63axh992gn6z1d45ag9bs6ji"; + } + { + name = "plantuml"; + publisher = "jebbs"; + version = "2.17.3"; + sha256 = "1i78q44y5qriai1r4y0icdv5gl5v9wzhm0rkwp2pvk0vwr4v2fks"; + } + { + name = "codeacejumper"; + publisher = "lucax88x"; + version = "3.3.2"; + sha256 = "02a5f0lg0rmrjjf52z30mk19ii71pcdxjmbcb4v6haw1pkm6anqn"; + } + { + name = "flutter-tree"; + publisher = "marcelovelasquez"; + version = "1.0.0"; + sha256 = "08glv02b5d5f4jfdfddg62jvdzscinl2jhsb7gpz36rxrbp0f17s"; + } + { + name = "git-graph"; + publisher = "mhutchie"; + version = "1.30.0"; + sha256 = "000zhgzijf3h6abhv4p3cz99ykj6489wfn81j0s691prr8q9lxxh"; + } + { + name = "remote-ssh"; + publisher = "ms-vscode-remote"; + version = "0.85.2022071315"; + sha256 = "195c22wvvw727li8wf0nhfpccgynx9sd48gzz39j8wxmi7qqvjli"; + } + { + name = "remote-ssh-edit"; + publisher = "ms-vscode-remote"; + version = "0.80.0"; + sha256 = "0zgrd2909xpr3416cji0ha3yl6gl2ry2f38bvx4lsjfmgik0ic6s"; + } +] diff --git a/profiles/boot.nix b/profiles/boot.nix index 218a431..22780ef 100644 --- a/profiles/boot.nix +++ b/profiles/boot.nix @@ -34,6 +34,8 @@ with config.deviceSpecific; { kernel.sysctl = { "vm.swappiness" = if config.deviceSpecific.isSSD then 1 else 10; }; + + cleanTmpDir = true; } else if isServer then { kernelPackages = pkgs.linuxPackages_5_15_hardened; kernelModules = [ "tcp_bbr" ]; diff --git a/profiles/nix/default.nix b/profiles/nix/default.nix index f603abd..31ccfb6 100644 --- a/profiles/nix/default.nix +++ b/profiles/nix/default.nix @@ -26,11 +26,13 @@ with config.deviceSpecific; { "https://cache.nixos.org" "https://nix-community.cachix.org" "https://nixpkgs-wayland.cachix.org" + "https://hyprland.cachix.org" ]; trusted-public-keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA=" + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; trusted-users = [ "root" "alukard" "@wheel" ]; }; diff --git a/profiles/overlay.nix b/profiles/overlay.nix index 8195132..3d723be 100644 --- a/profiles/overlay.nix +++ b/profiles/overlay.nix @@ -30,7 +30,9 @@ with lib; { arkenfox-userjs = pkgs.callPackage ./packages/arkenfox-userjs.nix { arkenfox-repo = inputs.arkenfox-userjs; }; bibata-cursors-tokyonight = pkgs.callPackage ./packages/bibata-cursors-tokyonight.nix { }; ceserver = pkgs.callPackage ./packages/ceserver.nix { }; - gamescope = pkgs.callPackage ./packages/gamescope.nix { }; + # comma = inputs.comma.default; + gamescope = custom.gamescope; + hyprpaper = pkgs.callPackage ./packages/hyprpaper.nix { src = inputs.hyprpaper; }; ibm-plex-powerline = pkgs.callPackage ./packages/ibm-plex-powerline.nix { }; kitti3 = pkgs.python3Packages.callPackage ./packages/kitti3.nix { }; mpris-ctl = pkgs.callPackage ./packages/mpris-ctl.nix { }; @@ -48,26 +50,23 @@ with lib; { youtube-to-mpv = pkgs.callPackage ./packages/youtube-to-mpv.nix { term = config.defaultApplications.term.cmd; }; vivaldi = master.vivaldi; wine = super.wineWowPackages.staging; - pass-secret-service = custom.pass-secret-service.overrideAttrs (_: { - installCheckPhase = null; - setuptoolsCheckHook = null; - postInstall = '' - mkdir -p $out/share/{dbus-1/services,xdg-desktop-portal/portals} - cat > $out/share/dbus-1/services/org.freedesktop.secrets.service << EOF - [D-BUS Service] - Name=org.freedesktop.secrets - Exec=/run/current-system/sw/bin/systemctl --user start pass-secret-service - EOF - cp $out/share/dbus-1/services/{org.freedesktop.secrets.service,org.freedesktop.impl.portal.Secret.service} - cat > $out/share/xdg-desktop-portal/portals/pass-secret-service.portal << EOF - [portal] - DBusName=org.freedesktop.secrets - Interfaces=org.freedesktop.impl.portal.Secrets - UseIn=gnome - EOF - ''; - }); - flutter = custom.flutter; + # pass-secret-service = super.pass-secret-service.overrideAttrs (_: { + # installCheckPhase = null; + # setuptoolsCheckHook = null; + # postInstall = '' + # mkdir -p $out/share/{dbus-1/services,xdg-desktop-portal/portals} + # mkdir -p $out/lib/systemd/user/ + # cp systemd/org.freedesktop.secrets.service $out/share/dbus-1/services" + # cp systemd/dbus-org.freedesktop.secrets.service $out/lib/systemd/user/ + # cat > $out/share/xdg-desktop-portal/portals/pass-secret-service.portal << EOF + # [portal] + # DBusName=org.freedesktop.secrets + # Interfaces=org.freedesktop.impl.portal.Secrets + # UseIn=gnome + # EOF + # ''; + # }); + # flutter = custom.flutter; # qbittorrent = super.qbittorrent.overrideAttrs (old: rec { # version = "enchanced-edition"; # src = inputs.qbittorrent-ee; diff --git a/profiles/packages/hyprpaper.nix b/profiles/packages/hyprpaper.nix new file mode 100644 index 0000000..18ac551 --- /dev/null +++ b/profiles/packages/hyprpaper.nix @@ -0,0 +1,80 @@ +{ + lib, + stdenv, + pkg-config, + cmake, + ninja, + cairo, + fribidi, + libdatrie, + libjpeg, + libselinux, + libsepol, + libthai, + pango, + pcre, + utillinux, + wayland, + wayland-protocols, + wayland-scanner, + wlr-protocols, + libXdmcp, + version ? "git", + src, +}: +stdenv.mkDerivation { + pname = "hyprpaper"; + inherit version; + src = src; + + nativeBuildInputs = [ + cmake + ninja + pkg-config + ]; + + buildInputs = [ + cairo + fribidi + libdatrie + libjpeg + libselinux + libsepol + libthai + pango + pcre + wayland + wayland-protocols + wayland-scanner + wlr-protocols + libXdmcp + utillinux + ]; + + configurePhase = '' + runHook preConfigure + + make release + + runHook postConfigure + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/{bin,share/licenses} + + install -Dm755 build/hyprpaper -t $out/bin + install -Dm644 LICENSE -t $out/share/licenses/hyprpaper + + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://github.com/hyprwm/hyprpaper"; + description = "A blazing fast wayland wallpaper utility with IPC controls"; + license = licenses.bsd3; + platforms = platforms.linux; + mainProgram = "hyprpaper"; + }; +} diff --git a/profiles/workspace/hyprland/default.nix b/profiles/workspace/hyprland/default.nix new file mode 100644 index 0000000..eb85c2b --- /dev/null +++ b/profiles/workspace/hyprland/default.nix @@ -0,0 +1,235 @@ +{ pkgs, lib, config, inputs, ... }: +let + thm = config.lib.base16.theme; + apps = config.defaultApplications; + gsettings = "${pkgs.glib}/bin/gsettings"; + gnomeSchema = "org.gnome.desktop.interface"; + importGsettings = pkgs.writeShellScript "import_gsettings.sh" '' + config="/home/alukard/.config/gtk-3.0/settings.ini" + if [ ! -f "$config" ]; then exit 1; fi + gtk_theme="$(grep 'gtk-theme-name' "$config" | sed 's/.*\s*=\s*//')" + icon_theme="$(grep 'gtk-icon-theme-name' "$config" | sed 's/.*\s*=\s*//')" + cursor_theme="$(grep 'gtk-cursor-theme-name' "$config" | sed 's/.*\s*=\s*//')" + font_name="$(grep 'gtk-font-name' "$config" | sed 's/.*\s*=\s*//')" + ${gsettings} set ${gnomeSchema} gtk-theme "$gtk_theme" + ${gsettings} set ${gnomeSchema} icon-theme "$icon_theme" + ${gsettings} set ${gnomeSchema} cursor-theme "$cursor_theme" + ${gsettings} set ${gnomeSchema} font-name "$font_name" + ''; +in with config.deviceSpecific; with lib; { + imports = [ inputs.hyprland.nixosModules.default ]; + programs.hyprland.enable = true; + programs.hyprland.package = null; + + environment.loginShellInit = lib.mkAfter '' + [[ "$(tty)" == /dev/tty1 ]] && { + pass unlock + exec Hyprland 2> /tmp/hyprland.debug.log + } + ''; + + + home-manager.users.alukard = { + # home.packages = [ pkgs.hyprpaper ]; + imports = [ + inputs.hyprland.homeManagerModules.default + ]; + wayland.windowManager.hyprland = { + enable = true; + xwayland = true; + systemdIntegration = true; + extraConfig = let + modifier = "SUPER"; + script = name: content: "${pkgs.writeScript name content}"; + in concatStrings [ + '' + + monitor=DP-1,2560x1440@59951,0x0,1 + general { + sensitivity=1.0 + apply_sens_to_raw=false + main_mod=${modifier} + border_size=3 + no_border_on_floating=false + gaps_in=5 + gaps_out=8 + # col.active_border=col # border color + # col.inactive_border=col # border color + # cursor_inactive_timeout=0 + damage_tracking=full + # layout=dwindle # Available: dwindle, master, default is dwindle + # no_cursor_warps=true + } + decoration { + rounding=10 + multisample_edges=true + active_opacity=0.9 + inactive_opacity=0.7 + fullscreen_opacity=1 + blur=true + blur_size=2 + blur_passes=2 + # blur_ignore_opacity=false + drop_shadow=true + shadow_range=5 + # shadow_render_power=int # (1 - 4), in what power to render the falloff (more power, the faster the falloff) + shadow_ignore_window=false + # col.shadow=col # shadow color + # shadow_offset=vec2 + } + animations { + enabled=true + } + input { + kb_layout=us,ru + kb_options=grp:win_space_toggle + + follow_mouse=true + natural_scroll=false + numlock_by_default=true + force_no_accel=true + sensitivity=1.0 + + touchpad { + natural_scroll=true + clickfinger_behavior=true + middle_button_emulation=true + tap-to-click=true + } + } + gestures { + workspace_swipe=no + } + misc { + disable_hyprland_logo=true + disable_splash_rendering=true + no_vfr=${boolToString (!isLaptop)} + mouse_move_enables_dpms=true + } + '' '' + bind=${modifier},q,killactive, + bind=${modifier},f,fullscreen,0 + bind=${modifier}SHIFT,F,togglefloating, + bind=${modifier},left,movefocus,l + bind=${modifier},right,movefocus,r + bind=${modifier},up,movefocus,u + bind=${modifier},down,movefocus,d + bind=${modifier}SHIFT,left,movewindow,l + bind=${modifier}SHIFT,right,movewindow,r + bind=${modifier}SHIFT,up,movewindow,u + bind=${modifier}SHIFT,down,movewindow,d + bind=${modifier},f5,exit, + bind=${modifier}SHIFT,f5,forcerendererreload, + bind=${modifier},f11,exec,sleep 1 && hyprctl dispatch dpms off + bind=${modifier},f12,exec,sleep 1 && hyprctl dispatch dpms on + + + bind=${modifier},escape,exec,${apps.monitor.cmd} + bind=${modifier},w,exec,${apps.dmenu.cmd} + bind=${modifier},return,exec,${apps.term.cmd} + bind=${modifier}SHIFT,return,exec,nop kitti3 + bind=${modifier},e,exec,${apps.editor.cmd} + bind=${modifier},j,exec,${pkgs.mpris-ctl}/bin/mpris-ctl prev + bind=${modifier},k,exec,${pkgs.mpris-ctl}/bin/mpris-ctl pp + bind=${modifier},l,exec,${pkgs.mpris-ctl}/bin/mpris-ctl next + bind=${modifier}SHIFT,J,exec,${pkgs.mpris-ctl}/bin/mpris-ctl --player Spotify prev + bind=${modifier}SHIFT,K,exec,${pkgs.mpris-ctl}/bin/mpris-ctl --player Spotify pp + bind=${modifier}SHIFT,L,exec,${pkgs.mpris-ctl}/bin/mpris-ctl --player Spotify next + bind=${modifier},m,exec,${pkgs.pamixer}/bin/pamixer -t + bind=${modifier},comma,exec,${pkgs.pamixer}/bin/pamixer -d 5 + bind=${modifier},period,exec,${pkgs.pamixer}/bin/pamixer -i 5 + bind=${modifier}SHIFT,comma,exec,${pkgs.pamixer}/bin/pamixer -d 2 + bind=${modifier}SHIFT,period,exec,${pkgs.pamixer}/bin/pamixer -i 2 + bind=${modifier},i,exec,${pkgs.pavucontrol}/bin/pavucontrol + bind=${modifier},d,exec,${apps.fm.cmd} + bind=${modifier},y,exec,${pkgs.youtube-to-mpv}/bin/yt-mpv + bind=${modifier}SHIFT,Y,exec,${pkgs.youtube-to-mpv}/bin/yt-mpv --no-video + bind=${modifier},print,exec,${pkgs.grim}/bin/grim $(xdg-user-dir PICTURES)/Screenshots/$(date +'%Y-%m-%d+%H:%M:%S').png && notify-send 'Screenshot Saved' + bind=${modifier}CTRL,print,exec,${pkgs.grim}/bin/grim - | ${pkgs.wl-clipboard}/bin/wl-copy && notify-send 'Screenshot Copied to Clipboard' + bind=${modifier}SHIFT,print,exec,${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" $(xdg-user-dir PICTURES)/Screenshots/$(date +'%Y-%m-%d+%H:%M:%S').png && notify-send 'Screenshot Saved' + bind=${modifier}CTRLSHIFT,print,exec,${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.wl-clipboard}/bin/wl-copy && notify-send 'Screenshot Copied to Clipboard' + bind=,xf86audioplay,exec,${pkgs.mpris-ctl}/bin/mpris-ctl pp + bind=,xf86audionext,exec,${pkgs.mpris-ctl}/bin/mpris-ctl next + bind=,xf86audioprev,exec,${pkgs.mpris-ctl}/bin/mpris-ctl prev + bind=,xf86audiolowervolume,exec,${pkgs.pamixer}/bin/pamixer -d 5 + bind=,xf86audioraisevolume,exec,${pkgs.pamixer}/bin/pamixer -i 5 + bind=SHIFT,xf86audiolowervolume,exec,${pkgs.pamixer}/bin/pamixer -d 2 + bind=SHIFT,xf86audioraisevolume,exec,${pkgs.pamixer}/bin/pamixer -i 2 + bind=,xf86audiomute,exec,${pkgs.pamixer}/bin/pamixer -t + + bind=${modifier},1,workspace,1 + bind=${modifier},2,workspace,2 + bind=${modifier},3,workspace,3 + bind=${modifier},4,workspace,4 + bind=${modifier},5,workspace,5 + bind=${modifier},6,workspace,6 + bind=${modifier},7,workspace,7 + bind=${modifier},8,workspace,8 + bind=${modifier},9,workspace,9 + bind=${modifier},0,workspace,10 + bind=${modifier},c,workspace,name:Music + bind=${modifier},t,workspace,name:Messengers + bind=${modifier}SHIFT,1,movetoworkspacesilent,1 + bind=${modifier}SHIFT,2,movetoworkspacesilent,2 + bind=${modifier}SHIFT,3,movetoworkspacesilent,3 + bind=${modifier}SHIFT,4,movetoworkspacesilent,4 + bind=${modifier}SHIFT,5,movetoworkspacesilent,5 + bind=${modifier}SHIFT,6,movetoworkspacesilent,6 + bind=${modifier}SHIFT,7,movetoworkspacesilent,7 + bind=${modifier}SHIFT,8,movetoworkspacesilent,8 + bind=${modifier}SHIFT,9,movetoworkspacesilent,9 + bind=${modifier}SHIFT,0,movetoworkspacesilent,10 + bind=${modifier}SHIFT,C,workspace,name:Music + bind=${modifier}SHIFT,T,workspace,name:Messengers + bind=ALT,1,movetoworkspacesilent,1 + bind=ALT,2,movetoworkspacesilent,2 + bind=ALT,3,movetoworkspacesilent,3 + bind=ALT,4,movetoworkspacesilent,4 + bind=ALT,5,movetoworkspacesilent,5 + bind=ALT,6,movetoworkspacesilent,6 + bind=ALT,7,movetoworkspacesilent,7 + bind=ALT,8,movetoworkspacesilent,8 + bind=ALT,9,movetoworkspacesilent,9 + bind=ALT,0,movetoworkspacesilent,10 + bind=ALT,c,workspace,name:Music + bind=ALT,t,workspace,name:Messengers + + bind=ALT,R,submap,resize # will switch to a submap called resize + submap=resize # will start a submap called "resize" + bind=,right,resizeactive,10 0 + bind=,left,resizeactive,-10 0 + bind=,up,resizeactive,0 -10 + bind=,down,resizeactive,0 10 + bind=SHIFT,right,resizeactive,40 0 + bind=SHIFT,left,resizeactive,-40 0 + bind=SHIFT,up,resizeactive,0 -40 + bind=SHIFT,down,resizeactive,0 40 + bind=SHIFT,return,submap,reset # use reset to go back to the global submap + submap=reset # will reset the submap + '' + # (concatMapStrings (title: "windowrule=float,title:" + title) [ + # "Steam - News" ".* - Chat" "^Settings$" ".* - event started" ".* CD key" "^Steam - Self Updater$" + # "^Screenshot Uploader$" "^Steam Guard - Computer Authorization Required$" "^Steam Keyboard$" + # ]) + '' + windowrule=workspace 10 silent,^Steam$ + windowrule=workspace name:Music silent,Spotify + windowrule=workspace name:Messengers silent,^Telegram + windowrule=opaque,^(Firefox.*) + '' '' + exec=${importGsettings} + exec-once=swayidle -w timeout 600 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on' + exec-once=${pkgs.swaybg}/bin/swaybg -i ${/. + ../../../misc/wallpaper} -m fill + '' + (concatMapStrings (c: "exec-once=" + c + "\n") config.startupApplications) + + ]; + }; + }; + +} + + # exec-once=${script "set-wallpaper" '' + # MONITOR=$(hyprctl -j monitors | ${pkgs.jq}/bin/jq -r '.[] .name'); + # hyprctl hyprpaper wallpaper $MONITOR,~/Pictures/myepicpng.png + # ''} diff --git a/profiles/workspace/mako.nix b/profiles/workspace/mako.nix index e4c655f..596615e 100644 --- a/profiles/workspace/mako.nix +++ b/profiles/workspace/mako.nix @@ -15,10 +15,10 @@ height = 80; defaultTimeout = 10000; maxVisible = 10; - backgroundColor = "${theme.base00-hex}AA"; + backgroundColor = "#${theme.base00-hex}AA"; textColor = "#${theme.base05-hex}"; - borderColor = "${theme.base0D-hex}AA"; - progressColor = "over ${theme.base0B-hex}"; + borderColor = "#${theme.base0D-hex}AA"; + progressColor = "over #${theme.base0B-hex}"; iconPath = "${theme.iconPackage}/share/icons/${theme.iconTheme}"; maxIconSize = 24; }; diff --git a/profiles/workspace/misc.nix b/profiles/workspace/misc.nix index 759d1b3..c478d0c 100644 --- a/profiles/workspace/misc.nix +++ b/profiles/workspace/misc.nix @@ -8,9 +8,9 @@ CARGO_HOME = "${config.home-manager.users.alukard.xdg.dataHome}/cargo"; }; - # environment.systemPackages = [ pkgs.pass-secret-service ]; - # services.dbus.packages = [ pkgs.pass-secret-service ]; - # xdg.portal.extraPortals = [ pkgs.pass-secret-service ]; + environment.systemPackages = [ pkgs.pass-secret-service ]; + services.dbus.packages = [ pkgs.pass-secret-service ]; + xdg.portal.extraPortals = [ pkgs.pass-secret-service ]; home-manager.users.alukard = { news.display = "silent"; @@ -18,19 +18,19 @@ home.stateVersion = "21.11"; #TODO: Move to another file - # services.pass-secret-service.enable = true; - # systemd.user.services.pass-secret-service = { - # Service = { - # Type = "dbus"; - # Environment = [ "GPG_TTY=/dev/tty1" "DISPLAY=:0" ]; - # BusName = "org.freedesktop.secrets"; - # }; - # Unit = rec { - # Wants = [ "gpg-agent.service" ]; - # After = Wants; - # PartOf = [ "graphical-session-pre.target" ]; - # }; - # }; + services.pass-secret-service.enable = true; + systemd.user.services.pass-secret-service = { + Service = { + Type = "dbus"; + Environment = [ "GPG_TTY=/dev/tty1" "DISPLAY=:0" ]; + BusName = "org.freedesktop.secrets"; + }; + Unit = rec { + Wants = [ "gpg-agent.service" ]; + After = Wants; + PartOf = [ "graphical-session-pre.target" ]; + }; + }; }; system.stateVersion = "21.11"; diff --git a/profiles/workspace/sway/default.nix b/profiles/workspace/sway/default.nix index 06e7fdd..e71dc5d 100644 --- a/profiles/workspace/sway/default.nix +++ b/profiles/workspace/sway/default.nix @@ -21,17 +21,17 @@ in { xdg.portal = { enable = true; extraPortals = with pkgs; [ xdg-desktop-portal-wlr xdg-desktop-portal-gtk ]; - gtkUsePortal = true; + # gtkUsePortal = true; }; users.users.alukard.extraGroups = [ "sway" ]; - environment.loginShellInit = lib.mkAfter '' - [[ "$(tty)" == /dev/tty1 ]] && { - pass unlock - exec sway 2> /tmp/sway.debug.log - } - ''; + # environment.loginShellInit = lib.mkAfter '' + # [[ "$(tty)" == /dev/tty1 ]] && { + # pass unlock + # exec sway 2> /tmp/sway.debug.log + # } + # ''; home-manager.users.alukard.wayland.windowManager.sway = let gsettings = "${pkgs.glib}/bin/gsettings"; diff --git a/roles/desktop.nix b/roles/desktop.nix index 05bcb41..6a111be 100644 --- a/roles/desktop.nix +++ b/roles/desktop.nix @@ -44,10 +44,11 @@ light mako nix-index - picom + # picom print-scan proxy sway + hyprland vscode-server ]; diff --git a/scripts/vscode_update_extensions.sh b/scripts/vscode_update_extensions.sh index 5af7476..3fd53bc 100755 --- a/scripts/vscode_update_extensions.sh +++ b/scripts/vscode_update_extensions.sh @@ -76,7 +76,7 @@ fi trap clean_up SIGINT # Begin the printing of the nix expression that will house the list of extensions. -printf '{ extensions = [\n' +printf '[\n' # Note that we are only looking to update extensions that are already installed. for i in $($CODE --list-extensions) @@ -87,4 +87,4 @@ do get_vsixpkg "$OWNER" "$EXT" done # Close off the nix expression. -printf '];\n}' +printf ']\n'