diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index b009740..a8a7a3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ # Result is a symlink to the built iso -result \ No newline at end of file +result +# direnv binaries +.direnv diff --git a/.sops.yaml b/.sops.yaml index cdc46e0..e3b1e01 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -1,14 +1,12 @@ -# This example uses YAML anchors which allows reuse of multiple keys -# without having to repeat yourself. -# Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml -# for a more complex example. keys: - &remy_usb age1027e2vu808mvf95m4f0am3aeg88n8vgzt56s04ndpkgm7awzeajspxl6tu - - &remy_yoga age1t2stzdjfwrtekk23w43623fdvt9awdujth765f8l6mu9g6l4537q4gw8d0 - # - &admin_bob age12zlz6lvcdk6eqaewfylg35w0syh58sm7gh53q5vvn7hd7c6nngyseftjxl + - &remy_yoga ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAX4zsiXSSWbE75C0wyBVwaHOw6Gsbh/WqQsgEhvPwT8 remy@nyx + + - &host_yoga age1ckqer7nxzq7q58v9xaqy8ac9vx2va69a46t86wp9m78pj5dpuy3sq8xeaj creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ key_groups: - age: - *remy_usb - *remy_yoga + - *host_yoga diff --git a/flake.lock b/flake.lock index 4a19de4..e993a46 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1759499898, - "narHash": "sha256-UNzYHLWfkSzLHDep5Ckb5tXc0fdxwPIrT+MY4kpQttM=", + "lastModified": 1762356719, + "narHash": "sha256-qwd/xdoOya1m8FENle+4hWnydCtlXUWLAW/Auk6WL7s=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "655e067f96fd44b3f5685e17f566b0e4d535d798", + "rev": "6d0b3567584691bf9d8fedb5d0093309e2f979c7", "type": "github" }, "original": { @@ -38,11 +38,11 @@ "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1746562888, - "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", "type": "github" }, "original": { @@ -54,27 +54,28 @@ "base16-fish": { "flake": false, "locked": { - "lastModified": 1622559957, - "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "lastModified": 1754405784, + "narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=", "owner": "tomyun", "repo": "base16-fish", - "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", "type": "github" }, "original": { "owner": "tomyun", "repo": "base16-fish", + "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", "type": "github" } }, "base16-helix": { "flake": false, "locked": { - "lastModified": 1748408240, - "narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=", + "lastModified": 1752979451, + "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e", + "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", "type": "github" }, "original": { @@ -100,14 +101,76 @@ "type": "github" } }, + "dankMaterialShell": { + "inputs": { + "dgop": "dgop", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1763522195, + "narHash": "sha256-QW/SKfUN5nT8J1EIvtpNaGf886+BBp2vCvs/ZuMo0VE=", + "owner": "AvengeMedia", + "repo": "DankMaterialShell", + "rev": "dfdaa82245302d40ac1aa4c0d60728b4397dde61", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "DankMaterialShell", + "type": "github" + } + }, + "dgop": { + "inputs": { + "nixpkgs": [ + "dankMaterialShell", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762435535, + "narHash": "sha256-QhzRn7pYN35IFpKjjxJAj3GPJECuC+VLhoGem3ezycc=", + "owner": "AvengeMedia", + "repo": "dgop", + "rev": "6cf638dde818f9f8a2e26d0243179c43cb3458d7", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "dgop", + "type": "github" + } + }, + "dms-cli": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1763078370, + "narHash": "sha256-wsYqJlLdRSlJpRE0tIuuPMU6aOyhMdV237rEG/enUxY=", + "owner": "AvengeMedia", + "repo": "danklinux", + "rev": "7a083a0d6d087d41d0bc5077d03e662e1417ce3c", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "danklinux", + "type": "github" + } + }, "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1748383148, - "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", + "lastModified": 1758112371, + "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", + "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", "type": "github" }, "original": { @@ -140,11 +203,11 @@ ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1756770412, + "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "4524271976b625a4a605beefd893f270620fd751", "type": "github" }, "original": { @@ -153,24 +216,6 @@ "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "fromYaml": { "flake": false, "locked": { @@ -212,18 +257,20 @@ "gnome-shell": { "flake": false, "locked": { - "lastModified": 1744584021, - "narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=", + "host": "gitlab.gnome.org", + "lastModified": 1762869044, + "narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae", - "type": "github" + "rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad", + "type": "gitlab" }, "original": { + "host": "gitlab.gnome.org", "owner": "GNOME", - "ref": "48.1", + "ref": "gnome-49", "repo": "gnome-shell", - "type": "github" + "type": "gitlab" } }, "home-manager": { @@ -233,16 +280,15 @@ ] }, "locked": { - "lastModified": 1758463745, - "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", + "lastModified": 1763416652, + "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", "owner": "nix-community", "repo": "home-manager", - "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", + "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.05", "repo": "home-manager", "type": "github" } @@ -255,11 +301,11 @@ ] }, "locked": { - "lastModified": 1752603129, - "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", + "lastModified": 1762964643, + "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", "owner": "nix-community", "repo": "home-manager", - "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", + "rev": "827f2a23373a774a8805f84ca5344654c31f354b", "type": "github" }, "original": { @@ -313,11 +359,11 @@ ] }, "locked": { - "lastModified": 1759490292, - "narHash": "sha256-T6iWzDOXp8Wv0KQOCTHpBcmAOdHJ6zc/l9xaztW6Ivc=", + "lastModified": 1762462052, + "narHash": "sha256-6roLYzcDf4V38RUMSqycsOwAnqfodL6BmhRkUtwIgdA=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "9431db625cd9bb66ac55525479dce694101d6d7a", + "rev": "ffc999d980c7b3bca85d3ebd0a9fbadf984a8162", "type": "github" }, "original": { @@ -331,8 +377,8 @@ "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", "hyprgraphics": "hyprgraphics", + "hyprland-guiutils": "hyprland-guiutils", "hyprland-protocols": "hyprland-protocols", - "hyprland-qtutils": "hyprland-qtutils", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", @@ -342,11 +388,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1760108751, - "narHash": "sha256-GYyykk6SJytykQAz50WjKa2xK4C+sjPsz2wj5QjRktI=", + "lastModified": 1763540034, + "narHash": "sha256-TogNk567BTZib1XiYheW04ELxNB2bhee6G4SgphRqmA=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "6a01c399a971a57854fb4a99ce246534139beda4", + "rev": "fbb31503f1b69402eeda81ba75a547c862c88bf2", "type": "github" }, "original": { @@ -355,6 +401,52 @@ "type": "github" } }, + "hyprland-guiutils": { + "inputs": { + "aquamarine": [ + "hyprland", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprtoolkit": "hyprtoolkit", + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1762755186, + "narHash": "sha256-ZjjETUHtoEhVN7JI1Cbt3p/KcXpK8ZQaPHx7UkG1OgA=", + "owner": "hyprwm", + "repo": "hyprland-guiutils", + "rev": "66356e20a8ed348aa49c1b9ceace786e224225b3", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-guiutils", + "type": "github" + } + }, "hyprland-protocols": { "inputs": { "nixpkgs": [ @@ -367,11 +459,11 @@ ] }, "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", + "lastModified": 1759610243, + "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", + "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", "type": "github" }, "original": { @@ -380,74 +472,6 @@ "type": "github" } }, - "hyprland-qt-support": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprland-qtutils", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "hyprland-qtutils", - "nixpkgs" - ], - "systems": [ - "hyprland", - "hyprland-qtutils", - "systems" - ] - }, - "locked": { - "lastModified": 1749154592, - "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "type": "github" - } - }, - "hyprland-qtutils": { - "inputs": { - "hyprland-qt-support": "hyprland-qt-support", - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprland-qtutils", - "hyprlang", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759080228, - "narHash": "sha256-RgDoAja0T1hnF0pTc56xPfLfFOO8Utol2iITwYbUhTk=", - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "rev": "629b15c19fa4082e4ce6be09fdb89e8c3312aed7", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "type": "github" - } - }, "hyprlang": { "inputs": { "hyprutils": [ @@ -464,11 +488,11 @@ ] }, "locked": { - "lastModified": 1758927902, - "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", + "lastModified": 1763254292, + "narHash": "sha256-JNgz3Fz2KMzkT7aR72wsgu/xNeJB//LSmdilh8Z/Zao=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", + "rev": "deea98d5b61d066bdc7a68163edd2c4bd28d3a6b", "type": "github" }, "original": { @@ -477,6 +501,58 @@ "type": "github" } }, + "hyprtoolkit": { + "inputs": { + "aquamarine": [ + "hyprland", + "hyprland-guiutils", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland", + "hyprland-guiutils", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland", + "hyprland-guiutils", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprland-guiutils", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprland-guiutils", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "hyprland-guiutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland-guiutils", + "systems" + ] + }, + "locked": { + "lastModified": 1762463729, + "narHash": "sha256-2fYkU/mdz8WKY3dkDPlE/j6hTxIwqultsx4gMMsMns0=", + "owner": "hyprwm", + "repo": "hyprtoolkit", + "rev": "88483bdee5329ec985f0c8f834c519cd18cfe532", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprtoolkit", + "type": "github" + } + }, "hyprutils": { "inputs": { "nixpkgs": [ @@ -489,11 +565,11 @@ ] }, "locked": { - "lastModified": 1759619523, - "narHash": "sha256-r1ed7AR2ZEb2U8gy321/Xcp1ho2tzn+gG1te/Wxsj1A=", + "lastModified": 1763323331, + "narHash": "sha256-+Z0OfCo1MS8/aIutSAW5aJR9zTae1wz9kcJYMgpwN6M=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "3df7bde01efb3a3e8e678d1155f2aa3f19e177ef", + "rev": "0c6411851cc779d551edc89b83966696201611aa", "type": "github" }, "original": { @@ -529,47 +605,47 @@ }, "nix-flatpak": { "locked": { - "lastModified": 1711997201, - "narHash": "sha256-J71xzQlVYsjagA4AsVwRazhBh2rZrPpKvxTgs6UzL7c=", + "lastModified": 1754777568, + "narHash": "sha256-0bBqT+3XncgF8F03RFAamw9vdf0VmaDoIJLTGkjfQZs=", "owner": "gmodena", "repo": "nix-flatpak", - "rev": "b76fa31346db7fc958a9898f3c594696ca71c4fd", + "rev": "62f636b87ef6050760a8cb325cadb90674d1e23e", "type": "github" }, "original": { "owner": "gmodena", - "ref": "v0.4.1", "repo": "nix-flatpak", "type": "github" } }, - "nix-vscode-extensions": { + "nix4vscode": { "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2" + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_2" }, "locked": { - "lastModified": 1759936999, - "narHash": "sha256-3HWI+eKHqTvIZ6lRy0e4z5gvPwHYsHntZ3fl7zivg8M=", + "lastModified": 1763517711, + "narHash": "sha256-uY0Vr7ene4VlHyeZRHRNvT4WRwakAr8JShwmNEg7JB0=", "owner": "nix-community", - "repo": "nix-vscode-extensions", - "rev": "fd5c5549692ff4d2dbee1ab7eea19adc2f97baeb", + "repo": "nix4vscode", + "rev": "ce4507078be02de77c001ca498657436ec815a35", "type": "github" }, "original": { "owner": "nix-community", - "repo": "nix-vscode-extensions", - "rev": "fd5c5549692ff4d2dbee1ab7eea19adc2f97baeb", + "repo": "nix4vscode", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1759381078, - "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=", + "lastModified": 1763283776, + "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee", + "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", "type": "github" }, "original": { @@ -581,11 +657,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1759831965, - "narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=", + "lastModified": 1763421233, + "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c9b6fb798541223bbb396d287d16f43520250518", + "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", "type": "github" }, "original": { @@ -597,48 +673,16 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1759770925, - "narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=", + "lastModified": 1763421233, + "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "674c2b09c59a220204350ced584cadaacee30038", + "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", "type": "github" }, "original": { "owner": "nixos", - "repo": "nixpkgs", - "rev": "674c2b09c59a220204350ced584cadaacee30038", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1759994382, - "narHash": "sha256-wSK+3UkalDZRVHGCRikZ//CyZUJWDJkBDTQX1+G77Ow=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "5da4a26309e796daa7ffca72df93dbe53b8164c7", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-25.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1751211869, - "narHash": "sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b43c397f6c213918d6cfe6e3550abfe79b5d1c51", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.05", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } @@ -652,15 +696,14 @@ "nixpkgs": [ "stylix", "nixpkgs" - ], - "treefmt-nix": "treefmt-nix" + ] }, "locked": { - "lastModified": 1751320053, - "narHash": "sha256-3m6RMw0FbbaUUa01PNaMLoO7D99aBClmY5ed9V3vz+0=", + "lastModified": 1758998580, + "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", "owner": "nix-community", "repo": "NUR", - "rev": "cbde1735782f9c2bb2c63d5e05fba171a14a4670", + "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", "type": "github" }, "original": { @@ -679,11 +722,11 @@ ] }, "locked": { - "lastModified": 1758108966, - "narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=", + "lastModified": 1763319842, + "narHash": "sha256-YG19IyrTdnVn0l3DvcUYm85u3PaqBt6tI6VvolcuHnA=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b", + "rev": "7275fa67fbbb75891c16d9dee7d88e58aea2d761", "type": "github" }, "original": { @@ -692,35 +735,16 @@ "type": "github" } }, - "quickshell": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1759997568, - "narHash": "sha256-xQyzPkgpgjAceJKwZhLU2//Y1jAmvPGOq80svqkWFhQ=", - "ref": "refs/heads/master", - "rev": "3e32ae595f97bd2d2e5ed4512fb4bb25edb4eae6", - "revCount": 691, - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - }, - "original": { - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - } - }, "root": { "inputs": { + "dankMaterialShell": "dankMaterialShell", + "dms-cli": "dms-cli", "home-manager": "home-manager", "hyprland": "hyprland", "nix-flatpak": "nix-flatpak", - "nix-vscode-extensions": "nix-vscode-extensions", - "nixpkgs": "nixpkgs_3", + "nix4vscode": "nix4vscode", + "nixpkgs": "nixpkgs_2", "nixpkgs-unstable": "nixpkgs-unstable", - "quickshell": "quickshell", "sops-nix": "sops-nix", "stylix": "stylix", "watt": "watt", @@ -734,11 +758,11 @@ ] }, "locked": { - "lastModified": 1759635238, - "narHash": "sha256-UvzKi02LMFP74csFfwLPAZ0mrE7k6EiYaKecplyX9Qk=", + "lastModified": 1763509310, + "narHash": "sha256-s2WzTAD3vJtPACBCZXezNUMTG/wC6SFsU9DxazB9wDI=", "owner": "Mic92", "repo": "sops-nix", - "rev": "6e5a38e08a2c31ae687504196a230ae00ea95133", + "rev": "3ee33c0ed7c5aa61b4e10484d2ebdbdc98afb03e", "type": "github" }, "original": { @@ -756,7 +780,9 @@ "firefox-gnome-theme": "firefox-gnome-theme", "flake-parts": "flake-parts", "gnome-shell": "gnome-shell", - "nixpkgs": "nixpkgs_4", + "nixpkgs": [ + "nixpkgs" + ], "nur": "nur", "systems": "systems_3", "tinted-foot": "tinted-foot", @@ -766,16 +792,15 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1759596342, - "narHash": "sha256-1Eda1V8pjpviMdBTdDXrFp7jkaUokIgXgBYTZyzDODk=", - "owner": "danth", + "lastModified": 1763497248, + "narHash": "sha256-OGP6MYc+lVkLVQOTS6ORszDcCnZm7kDOGpFBdDoLd0k=", + "owner": "nix-community", "repo": "stylix", - "rev": "4d065856e936fc6a99ba55d39ac2df9ded6bedbe", + "rev": "f19ac46f6aa26188b2020ed40066a5b832be9c53", "type": "github" }, "original": { - "owner": "danth", - "ref": "release-25.05", + "owner": "nix-community", "repo": "stylix", "type": "github" } @@ -796,6 +821,7 @@ } }, "systems_2": { + "flake": false, "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -861,11 +887,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1750770351, - "narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=", + "lastModified": 1757716333, + "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", "owner": "tinted-theming", "repo": "schemes", - "rev": "5a775c6ffd6e6125947b393872cde95867d85a2a", + "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", "type": "github" }, "original": { @@ -877,11 +903,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1751159871, - "narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=", + "lastModified": 1757811970, + "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "bded5e24407cec9d01bd47a317d15b9223a1546c", + "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", "type": "github" }, "original": { @@ -893,11 +919,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1751158968, - "narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=", + "lastModified": 1757811247, + "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "86a470d94204f7652b906ab0d378e4231a5b3384", + "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", "type": "github" }, "original": { @@ -906,28 +932,6 @@ "type": "github" } }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "stylix", - "nur", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1733222881, - "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "49717b5af6f80172275d47a418c9719a31a78b53", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, "watt": { "inputs": { "nixpkgs": [ @@ -977,11 +981,11 @@ ] }, "locked": { - "lastModified": 1755354946, - "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "type": "github" }, "original": { @@ -998,11 +1002,11 @@ ] }, "locked": { - "lastModified": 1759965431, - "narHash": "sha256-HvXr+rOkSZeseOYCruuMKMAUedcDkHOuYpFbnlIPs8Y=", + "lastModified": 1763521945, + "narHash": "sha256-Zcrafbe4niRJMbzaVOwg7+iedJhwBFttre2DpyCC6qA=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "391a133511ad7e09651b9c3939d8cf8d379766b1", + "rev": "24d7381b9231c23daceec5d372cc28e877f7785d", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index a6b9186..fae387a 100644 --- a/flake.nix +++ b/flake.nix @@ -1,39 +1,53 @@ { description = "Nix config entry point"; - + # since secrets live in a submodule, enable submodules by default + inputs.self.submodules = true; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; # Home manager - home-manager.url = "github:nix-community/home-manager/release-25.05"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # Managing flatpak apps - nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1"; + nix-flatpak.url = "github:gmodena/nix-flatpak"; + # hyprland, plugins and related utils hyprland.url = "github:hyprwm/Hyprland"; - stylix.url = "github:danth/stylix/release-25.05"; - # zen browser - zen-browser.url = "github:0xc000022070/zen-browser-flake"; - # IMPORTANT: we're using "libgbm" and is only available in unstable so ensure - # to have it up-to-date or simply don't specify the nixpkgs input - zen-browser.inputs.nixpkgs.follows = "nixpkgs"; - # power management - watt = { - url = "github:NotAShelf/watt/?ref=v0.3.2"; + stylix = { + url = "github:nix-community/stylix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # zen browser + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; # secrets - sops-nix.url = "github:Mic92/sops-nix"; - sops-nix.inputs.nixpkgs.follows = "nixpkgs"; - - # quickshell - quickshell = { - url = "git+https://git.outfoxxed.me/outfoxxed/quickshell"; + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # quickshell + dms-cli = { + url = "github:AvengeMedia/danklinux"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + dankMaterialShell = { + url = "github:AvengeMedia/DankMaterialShell"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.dms-cli.follows = "dms-cli"; + }; + + nix4vscode = { + url = "github:nix-community/nix4vscode"; inputs.nixpkgs.follows = "nixpkgs"; }; - nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions/fd5c5549692ff4d2dbee1ab7eea19adc2f97baeb"; }; outputs = { @@ -43,109 +57,117 @@ home-manager, stylix, sops-nix, - quickshell, - nix-vscode-extensions, + nix4vscode, ... } @ inputs: let + system = "x86_64-linux"; + username = "remy"; + name = "Rémy"; + + pkgs = nixpkgs.legacyPackages.${system}; + pkgs-unstable = nixpkgs-unstable.legacyPackages.${system}; + + lib = nixpkgs.lib; + + systems = { + # HP Spectre x360 2018 + Nixtre = { + hostModules = [ + ./hosts/spectre-x360-2018 + ]; + userModules = [ + ./users/remy_spectre + inputs.nix-flatpak.homeManagerModules.nix-flatpak + ]; + extraModules = [ + inputs.stylix.nixosModules.stylix + inputs.sops-nix.nixosModules.sops + ]; + }; + + # Portable usb stick + nichts = { + hostModules = [ + ./hosts/mobile-usb + ]; + userModules = [ + ./users/remy_usb + inputs.nix-flatpak.homeManagerModules.nix-flatpak + ]; + extraModules = [ + inputs.stylix.nixosModules.stylix + inputs.sops-nix.nixosModules.sops + ]; + }; + + # Lenovo yoga 7 pro + nyx = { + hostModules = [ + ./hosts/yoga-7-pro + ]; + userModules = [ + ./users/remy_yoga + inputs.nix-flatpak.homeManagerModules.nix-flatpak + inputs.dankMaterialShell.homeModules.dankMaterialShell.default + + ]; + extraModules = [ + inputs.stylix.nixosModules.stylix + inputs.sops-nix.nixosModules.sops + { nixpkgs.overlays = [ inputs.nix4vscode.overlays.default ]; } + ]; + }; + }; in { + # For each entry in `systems` create a nixosConfiguration + nixosConfigurations = lib.mapAttrs (_name: cfg: + nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs pkgs-unstable; }; + modules = + cfg.hostModules ++ + cfg.extraModules ++ + [ home-manager.nixosModules.home-manager { + # Common home-manager flags + home-manager = { + backupFileExtension = ".backup"; + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { inherit inputs pkgs-unstable; }; + }; - ## NixOS configurations are the main output of this flake - # HP Spectre x360 2018 - nixosConfigurations.Nixtre = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = { inherit inputs; }; + # Merge in all the user fragments for this host + home-manager.users.remy = lib.mkMerge cfg.userModules; + } + ] + ; + } + ) systems; - modules = [ - ./hosts/spectre-x360-2018 - stylix.nixosModules.stylix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; - home-manager.users.remy.imports = [ - ./users/remy_spectre - inputs.nix-flatpak.homeManagerModules.nix-flatpak - ]; - } + # ## Useful nix build tools + # # iso builder TODO + # nixosConfigurations.bcachefs-iso = nixpkgs.lib.nixosSystem { + # system = "x86_64-linux"; + # modules = [ + # "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix" + # ({ lib, pkgs, ... }: { + # boot.supportedFilesystems = [ "bcachefs" ]; + # boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest; + # }) + # ]; + # }; + + # devshell for this configuration + devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell { + packages = [ + pkgs.sops ]; - }; - - nixosConfigurations.nichts = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = { inherit inputs; }; - - modules = [ - ./hosts/mobile-usb - stylix.nixosModules.stylix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; - - home-manager.users.remy.imports = [ - ./users/remy_usb - inputs.nix-flatpak.homeManagerModules.nix-flatpak - ]; - } - ]; - }; - - - nixosConfigurations.nyx = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = { inherit inputs; }; - - modules = [ - { - nixpkgs.overlays = [ - inputs.nix-vscode-extensions.overlays.default - ]; - } - ./hosts/yoga-7-pro - sops-nix.nixosModules.sops - stylix.nixosModules.stylix - home-manager.nixosModules.home-manager - { - home-manager.backupFileExtension = ".backup"; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; - - home-manager.users.remy.imports = [ - ./users/remy_yoga - inputs.nix-flatpak.homeManagerModules.nix-flatpak - ]; - } - ]; - }; - - # nixosConfigurations.raspberry-pi = nixpkgs.lib.nixosSystem { - # system = "aarch64-linux"; - # modules = [ - # ./hosts/raspberry-pi/configuration.nix - # ]; - # }; - - ## Home Manager configurations here? - - - ## Useful nix build tools - # iso builder TODO - nixosConfigurations.bcachefs-iso = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix" - ({ lib, pkgs, ... }: { - boot.supportedFilesystems = [ "bcachefs" ]; - boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest; - }) - ]; + # tell sops where the public ssh key to "seed" the age key from is located + SOPS_AGE_SSH_PRIVATE_KEY_FILE = "/home/remy/.ssh/main_key"; }; }; } diff --git a/hosts/mobile-usb/default.nix b/hosts/mobile-usb/default.nix index 0862fb5..b485ddb 100644 --- a/hosts/mobile-usb/default.nix +++ b/hosts/mobile-usb/default.nix @@ -5,7 +5,7 @@ networking.hostName = "nichts"; userName = "remy"; - gnome.enabled = true; + gnome.enable = true; }; }; diff --git a/hosts/yoga-7-pro/configuration.nix b/hosts/yoga-7-pro/configuration.nix index 5572347..57c5fa2 100644 --- a/hosts/yoga-7-pro/configuration.nix +++ b/hosts/yoga-7-pro/configuration.nix @@ -5,17 +5,21 @@ { config, lib, pkgs, ... }: { - boot.loader = { systemd-boot.enable = true; timeout = 0; efi.canTouchEfiVariables = true; }; - # cause it is so inconveniently located - services.logind.powerKey = "ignore"; - services.logind.lidSwitch = "sleep"; - services.logind.lidSwitchDocked = "ignore"; + services.logind.settings.Login = { + # because it is so inconveniently located + HandlePowerKey = "ignore"; + + # handled by the dm instead + # HandleLidSwitch = "ignore"; # needs to be set because it is not passed to other events + HandleLidSwitchDocked = "ignore"; + }; + # requires too many shenanigans so I just install using --no-root-passwd # users.users.root.hashedPassword = "!"; diff --git a/hosts/yoga-7-pro/default.nix b/hosts/yoga-7-pro/default.nix index a3c9fd4..0bada65 100644 --- a/hosts/yoga-7-pro/default.nix +++ b/hosts/yoga-7-pro/default.nix @@ -26,6 +26,7 @@ ../../modules/nixos/pipewire.nix ../../modules/nixos/podman.nix ../../modules/nixos/power.nix + ../../modules/nixos/sops.nix ../../modules/nixos/stylix.nix ../../modules/nixos/user.nix diff --git a/modules/home-manager/code.nix b/modules/home-manager/code.nix index 974760c..7731d61 100644 --- a/modules/home-manager/code.nix +++ b/modules/home-manager/code.nix @@ -1,17 +1,16 @@ {pkgs, ...}: let - baseExtensions = with pkgs.vscode-marketplace; [ + baseExtensions = pkgs.nix4vscode.forVscode [ # QOL - mhutchie.git-graph - redhat.vscode-yaml - # github.copilot - # github.copilot-chat + "mhutchie.git-graph" + "redhat.vscode-yaml" # Nix environment selector - arrterian.nix-env-selector - continue.continue + "arrterian.nix-env-selector" + # continue.continue + "github.copilot" + "github.copilot-chat" ]; - baseSettings = { # visual "window.titleBarStyle" = "native"; @@ -102,21 +101,21 @@ in }; profiles.development = { - extensions = baseExtensions ++ (with pkgs.vscode-marketplace; [ + extensions = baseExtensions ++ pkgs.nix4vscode.forVscode [ # python - ms-python.python - ms-python.isort - ms-python.debugpy - ms-python.vscode-pylance + "ms-python.python" + "ms-python.isort" + "ms-python.debugpy" + "ms-python.vscode-pylance" # nix language - jnoortheen.nix-ide + "jnoortheen.nix-ide" # Flutter and co - dart-code.flutter - dart-code.dart-code + "dart-code.flutter" + "dart-code.dart-code" - ]); + ]; keybindings = baseKeybindings; @@ -125,19 +124,19 @@ in profiles.science = { - extensions = baseExtensions ++ (with pkgs.vscode-marketplace; [ + extensions = baseExtensions ++ pkgs.nix4vscode.forVscode [ # python + jupyter - ms-python.python - ms-python.isort - ms-python.debugpy - ms-python.vscode-pylance - ms-toolsai.vscode-jupyter-slideshow - ms-toolsai.jupyter - ms-toolsai.jupyter-hub - ms-toolsai.jupyter-renderers + "ms-python.python" + "ms-python.isort" + "ms-python.debugpy" + "ms-python.vscode-pylance" + "ms-toolsai.vscode-jupyter-slideshow" + "ms-toolsai.jupyter" + "ms-toolsai.jupyter-hub" + "ms-toolsai.jupyter-renderers" # Typst - myriad-dreamin.tinymist - ]); + "myriad-dreamin.tinymist" + ]; keybindings = baseKeybindings ++ [ # run code cell in jupyter diff --git a/modules/home-manager/directories.nix b/modules/home-manager/directories.nix index bdc27f2..24ee4eb 100644 --- a/modules/home-manager/directories.nix +++ b/modules/home-manager/directories.nix @@ -11,7 +11,7 @@ createDirectories = true; documents = "${config.home.homeDirectory}/Documents"; download = "${config.home.homeDirectory}/Downloads"; - pictures = "${config.home.homeDirectory}/Pictures";# + pictures = "${config.home.homeDirectory}/Pictures"; # do not create the following desktop = null; music = null; diff --git a/modules/home-manager/fish.nix b/modules/home-manager/fish.nix index 7499e58..ed59217 100644 --- a/modules/home-manager/fish.nix +++ b/modules/home-manager/fish.nix @@ -13,18 +13,12 @@ programs.fish = { enable = true; - # enableCompletion = true; + generateCompletions = true; + plugins = [ - { - name = "fzf-fish"; - src = pkgs.fetchFromGitHub { - owner = "PatrickF1"; - repo = "fzf.fish"; - rev = "v10.3"; - sha256 = "sha256-T8KYLA/r/gOKvAivKRoeqIwE2pINlxFQtZJHpOy9GMM="; - }; - } - # add others here + { name = "fzf"; src = pkgs.fishPlugins.fzf-fish.src; } + { name = "z"; src = pkgs.fishPlugins.z.src; } + { name = "pure"; src = pkgs.fishPlugins.pure.src; } ]; functions = { @@ -47,4 +41,5 @@ fi ''; }; + } diff --git a/modules/home-manager/fusuma.nix b/modules/home-manager/fusuma.nix deleted file mode 100644 index 6e9e455..0000000 --- a/modules/home-manager/fusuma.nix +++ /dev/null @@ -1,47 +0,0 @@ -{pkgs, config, lib, ...}: -let - hyprctl = "${pkgs.hyprland}/bin/hyprctl"; -in -{ - config = { - services.fusuma = { - enable = true; - settings = { - swipe = { - "3" = { - up = { - command = "exec ${hyprctl} dispatch fullscreen 1"; - }; - - down = { - command = "exec ${lib.getExe config.nix-config.launcher}"; - }; - }; - }; - - pinch = { - "4" = { - "in" = { - command = "exec ${hyprctl} dispatch togglespecialworkspace magic"; - }; - "out" = { - command = "exec ${hyprctl} dispatch togglespecialworkspace magic"; - }; - }; - }; - - - hold = { - "5" = { - command = "exec ${lib.getExe config.nix-config.launcher}"; - threshold = 0.1; - }; - }; - - threshold = { - pinch = 0.1; - }; - }; - }; - }; -} diff --git a/modules/home-manager/hypr/default.nix b/modules/home-manager/hypr/default.nix index e1f030a..f2ee9e5 100644 --- a/modules/home-manager/hypr/default.nix +++ b/modules/home-manager/hypr/default.nix @@ -1,9 +1,23 @@ { + config, + lib, + ... +}: +let + cfg = config.nix-config.hypr; +in +{ + options = { + nix-config.hypr.enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Enable an opinionated hyprland+quickshell setup as a desktop environment."; + }; + }; + imports = [ ./hyprland - ./hyprpaper.nix ./hyprlock.nix ./hypridle.nix - ./waybar.nix ]; } diff --git a/modules/home-manager/hypr/hyprland/autostart.nix b/modules/home-manager/hypr/hyprland/autostart.nix index 2df4b81..afbf0aa 100644 --- a/modules/home-manager/hypr/hyprland/autostart.nix +++ b/modules/home-manager/hypr/hyprland/autostart.nix @@ -9,7 +9,6 @@ in default = [ "gnome-keyring-daemon --start --components=secrets" "wl-paste --watch cliphist store" - "${lib.getExe pkgs.waybar}" "${lib.getExe pkgs.hypridle}" # TODO - currently broken "${pkgs.owncloud-client}" diff --git a/modules/home-manager/hypr/hyprland/default.nix b/modules/home-manager/hypr/hyprland/default.nix index 6524ed2..3b9caf4 100644 --- a/modules/home-manager/hypr/hyprland/default.nix +++ b/modules/home-manager/hypr/hyprland/default.nix @@ -2,6 +2,7 @@ imports = [ ./autostart.nix ./general.nix + ./gestures.nix ./keybinds.nix ./layouts.nix ./packages.nix diff --git a/modules/home-manager/hypr/hyprland/general.nix b/modules/home-manager/hypr/hyprland/general.nix index c6b0311..17c9209 100644 --- a/modules/home-manager/hypr/hyprland/general.nix +++ b/modules/home-manager/hypr/hyprland/general.nix @@ -19,7 +19,8 @@ in }; config = { - wayland.windowManager.hyprland = { + + wayland.windowManager.hyprland = lib.mkIf cfg.enable { enable = true; systemd.enable = true; settings = { @@ -28,10 +29,11 @@ in # }; general = { resize_on_border = true; - gaps_in = 5; - gaps_out = 5; + gaps_in = 3; + gaps_out = 3; border_size = 1; "col.active_border" = "rgb(98971A) rgb(CC241D) 45deg"; + "col.inactive_border" = "rgba(595959aa)"; layout = "master"; }; @@ -54,16 +56,11 @@ in sensitivity = 0.5; }; - gestures = { - workspace_swipe = true; - workspace_swipe_fingers = 4; - workspace_swipe_touch = true; - }; - decoration = { - rounding = 7; - # active_opacity = 0.95; + rounding = 10; inactive_opacity = 0.9; + dim_inactive = false; + dim_strength = 0.1; shadow = { enabled = false; @@ -94,6 +91,16 @@ in "float, class:org.gnome.Nautilus" # when there is a single window, deactivate border and gaps # "border_size 0, onworkspace:w[tv1], " + + # File pickers and dialogs + "float, title:^(Save As)$" + "float, title:^(Open File)$" + "size 50% 50%, title:^(Open File)$" + "center, title:^(Open File)$" + + # Disable idle when gaming + "idleinhibit always, class:^(steam_app_)" + "idleinhibit always, class:^(gamescope)$" ]; }; diff --git a/modules/home-manager/hypr/hyprland/gestures.nix b/modules/home-manager/hypr/hyprland/gestures.nix new file mode 100644 index 0000000..8ddd3ac --- /dev/null +++ b/modules/home-manager/hypr/hyprland/gestures.nix @@ -0,0 +1,21 @@ +{inputs, pkgs, lib, config, ...}: +let + cfg = config.nix-config.hypr; +in +{ + config = { + wayland.windowManager.hyprland = { + settings = { + gesture = [ + # 4 finger swipe to switch workspace + "4, horizontal, workspace" + + "3, up, fullscreen" + "3, down, float" + + "4, vertical, scale: 0.5, special, magic" + ]; + }; + }; + }; +} diff --git a/modules/home-manager/hypr/hyprland/keybinds.nix b/modules/home-manager/hypr/hyprland/keybinds.nix index 94a5cfc..0fe32f5 100644 --- a/modules/home-manager/hypr/hyprland/keybinds.nix +++ b/modules/home-manager/hypr/hyprland/keybinds.nix @@ -1,3 +1,4 @@ +# Note that some keybindings are delegated to other components, e.g. the quickshell module {inputs, pkgs, lib, config, ...}: let cfg = config.nix-config.hypr; @@ -5,8 +6,6 @@ in { config = { wayland.windowManager.hyprland = { - enable = true; - systemd.enable = true; settings = { "$mod" = "SUPER"; @@ -17,14 +16,11 @@ in "$mod, return, exec, kitty" "$mod, b, exec, ${cfg.browser}" "$mod, s, exec, ${cfg.ide}" - "$mod, e, exec, nautilus" + "$mod, e, exec, ${lib.getExe pkgs.nautilus}" # Lock screen "$mod, l, exec, loginctl lock-session" - # Clipboard management - "$mod, V, exec, cliphist list | ${lib.getExe config.nix-config.launcher} --dmenu | cliphist decode | wl-copy" - # Close window "$mod, Q, killactive," # Force close window @@ -54,10 +50,10 @@ in "$mod+Ctrl, right, movetoworkspace, +1" # Switch workspace - "$mod, left, workspace, -1" - "$mod, right, workspace, +1" - "$mod, mouse_down, workspace, -1" - "$mod, mouse_up, workspace, +1" + "$mod, left, workspace, e-1" + "$mod, right, workspace, e+1" + "$mod, mouse_down, workspace, e-1" + "$mod, mouse_up, workspace, e+1" # move to scratch workspace @@ -79,9 +75,6 @@ in ", XF86Cut, exec, hyprshot -m region -o ~/Pictures/Screenshots" "Shift, XF86Cut, exec, hyprshot -m window -o ~/Pictures/Screenshots" - # Power menu - ", XF86PowerOff, exec, ${lib.getExe config.nix-config.powerMenu}" - # Other pickers using the same launcher "$mod+Ctrl, space, exec, ${lib.getExe config.nix-config.filePicker}" "$mod, period, exec, ${lib.getExe config.nix-config.emojiPicker}" @@ -89,20 +82,11 @@ in # repeatable bindings binde = [ - # Fn keys - ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" - ", XF86MonBrightnessUp, exec, brightnessctl set +5%" - ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" - ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-" - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - # Reshape the window in focus "$mod, MINUS, resizeactive, -2% -2%" "$mod, KP_Subtract, resizeactive, -2% -2%" "$mod, PLUS, resizeactive, 2% 2%" "$mod, KP_Add, resizeactive, 2% 2%" - - ]; # lock-screen bindings @@ -135,20 +119,17 @@ in "$mod, mouse:273, resizewindow" ]; - - }; - extraConfig = '' - bind= , XF86AudioMicMute, submap, player_submap - - submap=player_submap - bind=, XF86AudioRaiseVolume, exec, notify-send previous; hyprctl dispatch submap reset - bind=, XF86AudioLowerVolume, exec, notify-send next; hyprctl dispatch submap reset - bind=, XF86AudioMicMute, exec, notify-send pause; hyprctl dispatch submap reset - submap=reset - ''; + # extraConfig = '' + # bind= , XF86AudioMicMute, submap, player_submap + # submap=player_submap + # bind=, XF86AudioRaiseVolume, exec, notify-send previous; hyprctl dispatch submap reset + # bind=, XF86AudioLowerVolume, exec, notify-send next; hyprctl dispatch submap reset + # bind=, XF86AudioMicMute, exec, notify-send pause; hyprctl dispatch submap reset + # submap=reset + # ''; }; }; } diff --git a/modules/home-manager/hypr/hyprland/layouts.nix b/modules/home-manager/hypr/hyprland/layouts.nix index 5b80174..fe03a8d 100644 --- a/modules/home-manager/hypr/hyprland/layouts.nix +++ b/modules/home-manager/hypr/hyprland/layouts.nix @@ -8,35 +8,33 @@ in settings = { master = { - # TODO - I am not yet happy about the layout + toggle keybinds - orientation = "center"; - # equivalent toalways_center_master = true; - slave_count_for_center_master = 0; - # new_is_master = false; - # allow_small_split = true; - # special_scale_factor = 0.80; - mfact = 0.34; + # no_gaps_when_only = true; + + # default: single app is centered/fullscreen; when more apps are added it splits + orientation = "right"; + # keep center-master behaviour when there is exactly 1 slave (i.e. single app appears fullscreen) + slave_count_for_center_master = 1; + # only split in two columns + mfact = 0.6; inherit_fullscreen = false; - # always_center_master = false; - # allow a maximum of 3 windows in the master area for 3-column layout }; - #create special workspaces with no gaps - workspace = [ - "w[t1], gapsout:0, gapsin:0" - "w[tg1], gapsout:0, gapsin:0" - "f[1], gapsout:0, gapsin:0" - ]; + # #create special workspaces with no gaps + # workspace = [ + # "w[t1], gapsout:0, gapsin:0" + # "w[tg1], gapsout:0, gapsin:0" + # "f[1], gapsout:0, gapsin:0" + # ]; - # automatically assign windows to workspaces when there is only one window - windowrulev2 = [ - "bordersize 0, floating:0, onworkspace:w[t1]" - "rounding 0, floating:0, onworkspace:w[t1]" - "bordersize 0, floating:0, onworkspace:w[tg1]" - "rounding 0, floating:0, onworkspace:w[tg1]" - "bordersize 0, floating:0, onworkspace:f[1]" - "rounding 0, floating:0, onworkspace:f[1]" - ]; + # # automatically assign windows to workspaces when there is only one window + # windowrulev2 = [ + # "bordersize 0, floating:0, onworkspace:w[t1]" + # "rounding 0, floating:0, onworkspace:w[t1]" + # "bordersize 0, floating:0, onworkspace:w[tg1]" + # "rounding 0, floating:0, onworkspace:w[tg1]" + # "bordersize 0, floating:0, onworkspace:f[1]" + # "rounding 0, floating:0, onworkspace:f[1]" + # ]; misc = { vfr = false; @@ -45,12 +43,14 @@ in # Keybind to toggle between 2 and 3 column master layout bind = [ - # Toggle master layout between 2 and 3 columns - "$mod, m, exec, hyprctl dispatch layoutmsg orientationleft" - "$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.5" - # "SUPER_SHIFT,C,exec,hyprctl dispatch layoutmsg swap_master_count 2 3" - ]; + # Toggle master layout between 2 and 3 columns (press $mod + m) + "$mod, m, exec, hyprctl dispatch layoutmsg orientationcenter" + "$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.34" + # Toggle master layout between 3 and 2 columns (press $mod + Shift + m) + "$mod, Shift+m, exec, hyprctl dispatch layoutmsg orientationright" + "$mod, Shift+m, exec, hyprctl dispatch layoutmsg mfact exact 0.6" + ]; }; }; }; diff --git a/modules/home-manager/hypr/hyprland/packages.nix b/modules/home-manager/hypr/hyprland/packages.nix index a638791..e456002 100644 --- a/modules/home-manager/hypr/hyprland/packages.nix +++ b/modules/home-manager/hypr/hyprland/packages.nix @@ -9,7 +9,6 @@ in pkgs.nautilus pkgs.gnome-control-center pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth - pkgs.brightnessctl pkgs.cliphist pkgs.wl-clipboard pkgs.gcr # Provides org.gnome.keyring.SystemPrompter diff --git a/modules/home-manager/hypr/hyprpaper.nix b/modules/home-manager/hypr/hyprpaper.nix deleted file mode 100644 index 285028a..0000000 --- a/modules/home-manager/hypr/hyprpaper.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ - pkgs, - lib, - ... -}: -let - - wallpapers = [ - ../../../wallpapers/codioful-formerly-gradienta-lweK7Wme_jo-unsplash.jpg - ../../../wallpapers/codioful-formerly-gradienta-n2XqPm7Bqhk-unsplash.jpg - ../../../wallpapers/luke-chesser-eICUFSeirc0-unsplash.jpg - ../../../wallpapers/luke-chesser-pJadQetzTkI-unsplash.jpg - ../../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg - ]; - - monitor = ""; # leave empty to set the wallpaper on all monitors - - wallpaperPicker = pkgs.writeShellScriptBin "wallpaper-picker" '' - #!/usr/bin/env bash - # use an array of wallpapers to randomly select one - wallpapers=(${pkgs.lib.concatStringsSep " " (map (p: "${p}") wallpapers)}) - # select a random wallpaper from the array - index=$((RANDOM % ${toString (builtins.length wallpapers)})) - wallpaper="''${wallpapers[index]}" - echo "Setting wallpaper to: $wallpaper" - - hyprctl hyprpaper unload all - hyprctl hyprpaper reload "${monitor},$wallpaper" - ''; - -in { - home.packages = [wallpaperPicker]; - - services.hyprpaper = { - enable = true; - settings = { - ipc = "on"; - }; - }; - - # systemd.user = { - # services.wallpaperRandomizer = { - # Install = {WantedBy = ["graphical-session.target"];}; - - # Unit = { - # Description = "Set random desktop background using hyprpaper"; - # After = ["graphical-session-pre.target"]; - # PartOf = ["graphical-session.target"]; - # }; - - # Service = { - # Type = "oneshot"; - # ExecStart = "${wallpaperRandomizer}/bin/wallpaperRandomizer"; - # IOSchedulingClass = "idle"; - # }; - # }; - - # timers.wallpaperRandomizer = { - # Unit = {Description = "Set random desktop background using hyprpaper on an interval";}; - - # Timer = {OnUnitActiveSec = "6h";}; - - # Install = {WantedBy = ["timers.target"];}; - # }; - # }; -} diff --git a/modules/home-manager/hypr/waybar.nix b/modules/home-manager/hypr/waybar.nix deleted file mode 100644 index 21637de..0000000 --- a/modules/home-manager/hypr/waybar.nix +++ /dev/null @@ -1,331 +0,0 @@ -{inputs, pkgs, lib, config, ...}: -let - cfg = config.nix-config.style; -in -{ - options.nix-config.waybar = { - burninPrevention = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable burn-in prevention for Waybar"; - example = '' - burninPrevention = true; - ''; - - }; - }; - - config = { - - # required to autoload fonts from packages installed via Home Manager - fonts.fontconfig.enable = true; - - # waybar requires font-awesome - home.packages = [ - pkgs.pavucontrol - ]; - - # enable waybar - programs.waybar.enable = true; - programs.waybar = { - settings = { - - mainBar = { - layer = "top"; - position = "top"; - - margin-top = 5; - # margin-bottom = 2; - # margin-left = 5; - # margin-right = 5; - - # margin between the modules - spacing = 2; - - modules-left = [ - "hyprland/workspaces" - "hyprland/window" - ]; - - modules-center = [ - "clock" - "custom/notification" - ]; - - modules-right = [ - "tray" - "privacy" - "network" - "bluetooth" - "wireplumber" - "battery" - "backlight" - "idle_inhibitor" - ]; - - - # module specific settings - "hyprland/workspaces" = { - format = "{icon}"; - format-icons = { - active = "●"; - default = "○"; - }; - }; - "hyprland/window"= { - "icon" = true; - "separate-outputs" = true; - "format" = "{}"; - "rewrite" = { - "(.*) — Mozilla Firefox" = "$1"; - "(.*) — Zen Browser" = "$1"; - "(.*) - fish" = "> [$1]"; - "(.*) - Visual Studio Code" = "$1"; - }; - }; - "clock" = { - format = "{:%H:%M}"; - interval = 1; - tooltip-format = "{calendar}"; - # calendar = { - # format = "%Y-%m-%d\n󰃰 %A\n\n%H:%M"; - # start-day = 1; # Monday - # first-weekday = 1; # Monday - # week-number = false; - # long-weekdays = true; - # hide-if-empty = false; - # }; - }; - "idle_inhibitor" = { - format = "{icon}"; - format-icons = { - activated = ""; - deactivated = "☕"; - }; - tooltip = "true"; - }; - "bluetooth" = { - format-on = "󰂯"; - format-off = "󰂲"; - format-disabled = "󰂲"; - format-connected-battery = "{device_battery_percentage}% 󰂯"; - format-alt = "{device_alias} 󰂯"; - tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected"; - tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}"; - tooltip-format-enumerate-connected = "{device_alias}\n{device_address}"; - tooltip-format-enumerate-connected-battery = "{device_alias}\n{device_address}\n{device_battery_percentage}%"; - on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center bluetooth"; - }; - "battery" = { - interval = 60; - states = { - good = 80; - warning = 30; - critical = 10; - }; - format = "{capacity}% {icon}"; - format-charging = "{capacity}% 󰂄"; - format-plugged = "{capacity}% 󰂄"; - format-icons = [ "󰁻" "󰁼" "󰁾" "󰂀" "󰂂" "󰁹" ]; - }; - "backlight" = { - # format = "{percent}% {icon}"; - format = "{icon}"; - tooltip-format = "{percent}%"; - format-icons = [ "" "" "" "" "" "" "" "" "" ]; - }; - "wireplumber" = { - scroll-step = 1; - format = "{volume}% {icon}";# {format_source}"; - format-bluetooth = "{volume}% {icon}";# {format_source}"; - format-bluetooth-muted = " {icon}";# {format_source}"; - format-muted = "";# {format_source}"; - format-alt = "{format_source} {icon}"; - # format-source = " {volume}%"; - # format-source-muted = ""; - format-icons = { - headphone = ""; - hands-free = ""; - headset = ""; - phone = ""; - portable = ""; - default = [ - "" - "" - "" - ]; - }; - on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center sound"; - }; - "memory" = { - interval = 5; - format = "󰍛 {}%"; - max-length = 10; - }; - "tray" = { - spacing = 5; - }; - "custom/notification" = { - format = "{icon} {}"; - format-icons = { - notification = ""; - none = ""; - dnd-notification = ""; - dnd-none = ""; - inhibited-notification = ""; - inhibited-none = ""; - dnd-inhibited-notification = ""; - dnd-inhibited-none = ""; - }; - return-type = "json"; - exec-if = "which swaync-client"; - exec = "swaync-client -swb"; - on-click = "swaync-client -t -sw"; - on-click-right = "swaync-client -d -sw"; - escape = true; - }; - "network" = { - format = "󰤭"; - format-ethernet = " {ipaddr}"; - format-wifi = "{icon}"; - format-icons = [ "󰤯" "󰤟" "󰤢" "󰤥" "󰤨" ]; - format-disconnected = "󰤭"; - tooltip-format = " {ifname} via {gwaddr}"; - tooltip-format-wifi = '' - 󰤨 {essid}({signalStrength}%), {frequency} GHz (Interface: {ifname}) - IP: {ipaddr} GW: {gwaddr} - - {bandwidthUpBits} {bandwidthDownBits} 󰹹{bandwidthTotalBits} - ''; - tooltip-format-ethernet = '' -  {ifname} - {ipaddr}/{cidr} - - {bandwidthUpBits} {bandwidthDownBits} 󰹹{bandwidthTotalBits} - ''; - tooltip-format-disconnected = "Disconnected"; - on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center wifi"; - }; - "privacy" = { - icon-spacing = 4; - # icon-size" = 18; - transition-duration = 250; - modules = [ - { - type = "screenshare"; - tooltip = true; - # tooltip-icon-size = 24 - } - { - type = "audio-out"; - tooltip = true; - # tooltip-icon-size = 24 - } - { - type = "audio-in"; - tooltip = true; - # tooltip-icon-size = 24 - } - ]; - }; - }; - }; - - style = '' - * { - font-family: "${cfg.monospaceFont}"; - font-weight: bold; - font-size: ${builtins.toString (cfg.fontSizes.desktop + 5)}px; - } - - window#waybar { - background-color: transparent; - } - - .module { - background: rgba(0, 0, 0, 0.6); - color: white; - border-radius: 7px; - margin: 1px 3px; - padding: 1px 6px; - animation: bgFade 3600s infinite alternate, textColorFade 3600s infinite alternate; - } - - box.module button:hover { - box-shadow: inset 0 -3px #ffffff; - } - - /*.modules-left { - padding: 3px; - } - - .modules-right { - padding: 3px; - } - - .modules-center { - padding: 3px; - }*/ - - #workspaces button { - color: white; - background: none; - animation: textColorFade 3600s infinite alternate; - } - - #battery.warning { - background:rgba(240, 165, 0, 0.6); - } - #battery.critical { - background:rgba(255, 0, 0, 0.6); - } - #battery.charging { - background-color:rgba(14, 173, 0, 0.6); - } - - - #privacy { - color: #ffffff; - background:rgba(240, 165, 0, 0.6); - border-radius: 7px; - margin: 1px 3px; - padding: 1px 6px; - - } - - - - - - @keyframes bgFade { - 0% { - background-color: white; - } - 100% { - background-color: black; - } - } - - @keyframes textColorFade { - 0% { - color: black; - } - /* 45% { - color: black; - } */ - 60% { - color: rgb(29, 38, 96); - } - /* 55% { - color: white; - } */ - 100% { - color: white; - } - } - - ''; - }; - }; -} - diff --git a/modules/home-manager/kubectl.nix b/modules/home-manager/kubectl.nix index fb53a44..ba276b1 100644 --- a/modules/home-manager/kubectl.nix +++ b/modules/home-manager/kubectl.nix @@ -1,13 +1,25 @@ {pkgs, ...}: { home.packages = [ - pkgs.kubie pkgs.kubectl ]; + # Add the shell alias programs.fish.shellAliases = { k = "kubectl"; }; + # set the kubectl autocompletions for fish + # the fish functions are generated by kubectl itself, we do this at compile time and write them a single time to avoid generating them at each shell start + # the command is kubectl completion fish + # which becomes + programs.fish.completions."kubectl" = builtins.readFile "${pkgs.runCommand "kubectl-completion" {} '' + ${pkgs.kubectl}/bin/kubectl completion fish > $out + ''}"; + + programs.kubeswitch = { + enable = true; + enableFishIntegration = true; + }; } diff --git a/modules/home-manager/notifications.nix b/modules/home-manager/notifications.nix deleted file mode 100644 index c451f1a..0000000 --- a/modules/home-manager/notifications.nix +++ /dev/null @@ -1,110 +0,0 @@ -{ config, pkgs, lib, ... }: -let - cfg = config.nix-config.style; -in -{ - services.swaync = { - enable = true; - - settings = { - control-center-margin-top = 13; - control-center-margin-bottom = 0; - control-center-margin-right = 14; - control-center-margin-left = 0; - notification-2fa-action = true; - notification-inline-replies = true; - notification-icon-size = 48; - notification-body-image-height = 160; - notification-body-image-width = 200; - notification-window-width = 400; - timeout = 6; - timeout-low = 3; - timeout-critical = 0; - - image-visibility = "when-available"; - transition-time = 200; - hide-on-clear = false; - hide-on-action = true; - script-fail-notify = true; - widgets = [ - "dnd" - "buttons-grid" - "mpris" - "volume" - "backlight" - "title" - "notifications" - ]; - widget-config = { - title = { - text = "Notifications"; - clear-all-button = true; - button-text = ""; - }; - dnd = { - text = "Do Not Disturb"; - }; - label = { - max-lines = 1; - text = "Notification"; - }; - mpris = { - image-size = 50; - image-radius = 0; - }; - volume = { - label = ""; - }; - backlight = { - label = "󰃠"; - device = "amdgpu_bl2"; - }; - buttons-grid = { - actions = [ - { - label = ""; - command = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - type = "toggle"; - } - { - label = ""; - command = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; - type = "toggle"; - } - { - label = "󰤨"; - command = "nm-connection-editor"; - } - { - label = "󰂯"; - command = "blueman-manager"; - } - { - label = "󱡽"; - command = "bash -c $HOME/.config/hypr/scripts/airplaneMode.sh"; - type = "toggle"; - } - { - label = ""; - command = "shutdown now"; - } - { - label = ""; - command = "hyprlock"; - } - { - label = ""; - command = "~/.config/hypr/scripts/wlogout.sh"; - } - ]; - }; - }; - }; - - style = '' - * { - font-family: "monospace"; - } - ''; - }; -} diff --git a/modules/home-manager/quickshell/default.nix b/modules/home-manager/quickshell/default.nix index 72ffc9e..b1138d0 100644 --- a/modules/home-manager/quickshell/default.nix +++ b/modules/home-manager/quickshell/default.nix @@ -1,36 +1,59 @@ { - config, - inputs, lib, pkgs, - builtins, ... }: -let - cfg = config.nix-config.quickshell; - qs = inputs.quickshell.packages.x86_64-linux.default; -in { - options.nix-config.quickshell.enable = lib.mkEnableOption { - name = "quickshell"; - description = "Whether to enable quickshell."; - default = true; + programs.dankMaterialShell.enable = true; + + programs.dankMaterialShell = { + enableSystemd = true; + enableSystemMonitoring = false; + enableClipboard = true; + enableVPN = true; + enableBrightnessControl = true; + enableColorPicker = false; + enableDynamicTheming = true; + enableAudioWavelength = false; + enableCalendarEvents = false; + enableSystemSound = true; + + # default = { + # settings = ''{}''; + # session = ''{}''; + # }; + + # plugins = {}; }; - config = lib.mkIf cfg.enable { - home.packages = [ - qs - pkgs.qt6.qtimageformats - pkgs.qt6.qt5compat - pkgs.qt6.qtmultimedia - pkgs.qt6.qtdeclarative - pkgs.qt6.qtsvg - pkgs.qt6.qtwayland - pkgs.qt6.qtbase + wayland.windowManager.hyprland = { + settings = { + binde = [ + # Brightness + ", XF86MonBrightnessDown, exec, dms ipc call brightness decrement 5 \"\"" + ", XF86MonBrightnessUp, exec, dms ipc call brightness increment 5 \"\"" - ]; + # Audio volume + playback + ", XF86AudioMute, exec, dms ipc call audio mute" + ", XF86AudioLowerVolume, exec, dms ipc call audio decrement 5" + ", XF86AudioRaiseVolume, exec, dms ipc call audio increment 5" - # add the quickshell config (whole directory) to XDG_CONFIG_HOME - # home.file.".config/quickshell/config".source = ./config; + "$mod, XF86AudioMute, exec, dms ipc call mpris playPause" + "$mod, XF86AudioLowerVolume, exec, dms ipc call mpris previous" + "$mod, XF86AudioRaiseVolume, exec, dms ipc call mpris next" + # also allow the dedicated media keys to control playback + ", XF86AudioPlay, exec, dms ipc call mpris playPause" + ", XF86AudioPrev, exec, dms ipc call mpris previous" + ", XF86AudioNext, exec, dms ipc call mpris next" + + ]; + + bind = [ + ", XF86PowerOff, exec, dms ipc call powermenu toggle" + # used to be ", XF86PowerOff, exec, ${lib.getExe config.nix-config.powerMenu}" + "$mod, V, exec, dms ipc call clipboard toggle" + # used to be "$mod, V, exec, cliphist list | ${lib.getExe config.nix-config.launcher} --dmenu | cliphist decode | wl-copy" + ]; + }; }; } diff --git a/modules/home-manager/sops.nix b/modules/home-manager/sops.nix new file mode 100644 index 0000000..e69de29 diff --git a/modules/home-manager/stylix.nix b/modules/home-manager/stylix.nix index 4385c64..2025667 100644 --- a/modules/home-manager/stylix.nix +++ b/modules/home-manager/stylix.nix @@ -90,7 +90,7 @@ in }; emoji = { - package = pkgs.noto-fonts-emoji; + package = pkgs.noto-fonts-color-emoji; name = "Noto Color Emoji"; }; diff --git a/modules/home-manager/wallpaper.nix b/modules/home-manager/wallpaper.nix new file mode 100644 index 0000000..84ee458 --- /dev/null +++ b/modules/home-manager/wallpaper.nix @@ -0,0 +1,11 @@ +# Write an importable nix file that copies a folder from this repo into the store and creates a symlink to a predictible directory in my home file +{ + lib, pkgs, ... +}: +{ + # Copy the entire wallpapers directory into the Nix store and symlink it to ~/wallpapers + home.file."wallpapers" = { + source = ../../wallpapers; + target = "Pictures/wallpapers"; + }; +} diff --git a/modules/nixos/hyprland.nix b/modules/nixos/hyprland.nix index 4727ec2..f1ada20 100644 --- a/modules/nixos/hyprland.nix +++ b/modules/nixos/hyprland.nix @@ -22,7 +22,7 @@ in defaultSession = "hyprland"; }; - services.xserver.displayManager.gdm = { + services.displayManager.gdm = { enable = true; wayland = true; }; diff --git a/modules/nixos/networking.nix b/modules/nixos/networking.nix index 936b397..44bdc3a 100644 --- a/modules/nixos/networking.nix +++ b/modules/nixos/networking.nix @@ -13,6 +13,11 @@ in type = lib.types.str; default = "nixos"; }; + + nix-config.networking.vpn = lib.mkOption { + type = lib.types.bool; + default = true; + }; }; config = { @@ -30,6 +35,60 @@ in # enable = false; # }; - }; + # # VPN setup + networking.networkmanager.ensureProfiles = { + environmentFiles = [ config.sops.secrets.vpnEnvironment.path ]; + profiles.wg-home = { + connection = { + id = "wg-home"; + type = "wireguard"; + interface-name = "wgh"; + autoconnect = false; + }; + ipv4 = { + address = "10.0.0.2/32"; + method = "manual"; + }; + + wireguard = { + listen-port = 51820; + private-key = "$HOME_PRIVATE_KEY"; + }; + + "wireguard-peer.y/TBD/c0GkrRtekDkCb8TUnYYil8bSRPIjPDY650pz8=" = { + endpoint = "$HOME_ENDPOINT"; + allowed-ips = "192.168.1.0/16"; + }; + }; + + + + profiles.wg-fritzbox = { + connection = { + id = "wg-fritzbox"; + type = "wireguard"; + interface-name = "wgfb"; + autoconnect = false; + }; + + ipv4 = { + address = "192.168.178.201/24"; + dns = "192.168.178.1"; + method = "manual"; + }; + + wireguard = { + listen-port = 51820; + private-key = "$FRITZBOX_PRIVATE_KEY"; + }; + + "wireguard-peer.Jf/seKAL7kWm2qX9gf5Ln8FiN7OlPQB3CyRovDIOEHw=" = { + endpoint = "$FRITZBOX_ENDPOINT"; + allowed-ips = "192.168.178.0/24;fd73:ea00:5841::/64"; + preshared-key = "$FRITZBOX_PRESHARED_KEY"; + }; + }; + }; + }; } diff --git a/modules/nixos/power.nix b/modules/nixos/power.nix index 51128a9..dc824b4 100644 --- a/modules/nixos/power.nix +++ b/modules/nixos/power.nix @@ -22,38 +22,42 @@ config = { + # environment.systemPackages = [ + # pkgs.power-profiles-daemon + # ]; + services.power-profiles-daemon.enable = true; # services.tlp = { # enable = true; # settings = { - # # processor chooses frequencies itself but respects the limits set by the user - # CPU_DRIVER_OPMODE_ON_AC = "guided"; - # CPU_DRIVER_OPMODE_ON_BAT = "guided"; + # # # processor chooses frequencies itself but respects the limits set by the user + # # CPU_DRIVER_OPMODE_ON_AC = "guided"; + # # CPU_DRIVER_OPMODE_ON_BAT = "guided"; - # # governor dictates global behavior of the CPU - # CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; - # CPU_SCALING_GOVERNOR_ON_AC = "performance"; + # # # governor dictates global behavior of the CPU + # # CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + # # CPU_SCALING_GOVERNOR_ON_AC = "performance"; - # # energy performance policy (EPP) sets the energy/performance balance - # CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; - # CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; + # # # energy performance policy (EPP) sets the energy/performance balance + # # CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; + # # CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; - # # clock speeds reported by `sudo tlp-stat` - # # 623377 [kHz] and 5090910 [kHz] + # # # clock speeds reported by `sudo tlp-stat` + # # # 623377 [kHz] and 5090910 [kHz] # # CPU_SCALING_MIN_FREQ_ON_AC = 623377; # # CPU_SCALING_MAX_FREQ_ON_AC = 5090910; # # CPU_SCALING_MIN_FREQ_ON_BAT = 0; # # # reduce max frequency on battery to save power # # CPU_SCALING_MAX_FREQ_ON_BAT = 3000000; - # # Allow the CPU to boost - # CPU_BOOST_ON_AC = 1; - # CPU_BOOST_ON_BAT = 1; + # # # Allow the CPU to boost + # # CPU_BOOST_ON_AC = 1; + # # CPU_BOOST_ON_BAT = 1; - # RADEON_DPM_PERF_LEVEL_ON_AC = "high"; - # WIFI_PWR_ON_BAT = "off"; + # # RADEON_DPM_PERF_LEVEL_ON_AC = "high"; + # # # WIFI_PWR_ON_BAT = "off"; # # enable battery charge thresholds on the default battery # STOP_CHARGE_THRESH_BAT0 = 1; @@ -69,15 +73,17 @@ AllowSuspendThenHibernate=yes ''; - services.watt = { - enable = true; - settings = { - battery_charge_thresholds = [ - 40 - 80 - ]; - }; - }; + # services.watt = { + # enable = true; + # settings = { + # battery_charge_thresholds = [ + # 40 + # 80 + # ]; + # }; + # }; + + services.upower.enable = true; services.irqbalance = { diff --git a/modules/nixos/sops.nix b/modules/nixos/sops.nix new file mode 100644 index 0000000..9fc1ce1 --- /dev/null +++ b/modules/nixos/sops.nix @@ -0,0 +1,12 @@ +{ + inputs, + ... +}: +{ + sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; + sops.defaultSopsFile = ./../../secrets/vpn.env; + sops.secrets.vpnEnvironment = { + sopsFile = ./../../secrets/vpn.env; + format = "dotenv"; + }; +} diff --git a/secrets b/secrets index 2aef0ad..a51d89c 160000 --- a/secrets +++ b/secrets @@ -1 +1 @@ -Subproject commit 2aef0ad374282d35c756504d940beeb75bd485b1 +Subproject commit a51d89c420f77d92af6af4083827df8dc2d0f2e5 diff --git a/users/remy.nix b/users/remy.nix index 6ff0d7f..20b101f 100644 --- a/users/remy.nix +++ b/users/remy.nix @@ -12,8 +12,10 @@ ## Utils relevant to this user only programs.git = { enable = true; - userName = "Remy Moll"; - userEmail = "me@moll.re"; + settings = { + user.name = "Remy Moll"; + user.email = "me@moll.re"; + }; }; ## XDG configuration @@ -22,6 +24,7 @@ mimeApps = { enable = true; defaultApplications = { + # TODO "inode/directory" = "org.gnome.Nautilus.desktop"; "application/zip" = "org.gnome.FileRoller.desktop"; "application/octet-stream" = "org.gnome.GHex.desktop"; diff --git a/users/remy_yoga/default.nix b/users/remy_yoga/default.nix index d41a88b..708f65a 100644 --- a/users/remy_yoga/default.nix +++ b/users/remy_yoga/default.nix @@ -9,9 +9,9 @@ with lib.hm.gvariant; scale = "1.6"; }; }; - quickshell = { - enable = true; - }; + # quickshell = { + # enable = true; + # }; }; }; @@ -25,13 +25,11 @@ with lib.hm.gvariant; ../../modules/home-manager/documents.nix ../../modules/home-manager/fish.nix ../../modules/home-manager/flatpaks.nix - ../../modules/home-manager/fusuma.nix ../../modules/home-manager/hypr ../../modules/home-manager/keepassxc.nix ../../modules/home-manager/kitty.nix ../../modules/home-manager/kubectl.nix ../../modules/home-manager/launcher.nix - ../../modules/home-manager/notifications.nix ../../modules/home-manager/obsidian.nix ../../modules/home-manager/owncloud-client.nix ../../modules/home-manager/quickshell @@ -39,7 +37,7 @@ with lib.hm.gvariant; ../../modules/home-manager/stylix.nix ../../modules/home-manager/thunderbird.nix ../../modules/home-manager/uxplay.nix - # ../../modules/home-manager/wofi.nix + ../../modules/home-manager/wallpaper.nix ../../modules/home-manager/xdg-portals.nix ]; }