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
];
}