Compare commits

22 Commits

Author SHA1 Message Date
ef21567b64 style kitty smartly 2025-03-25 17:18:47 +01:00
a6c15b1e54 reduce stylix reach 2025-03-25 16:20:44 +01:00
64b25238da some more needed changes! 2025-03-12 18:27:40 +01:00
72a01e99e3 quite the coherence coming up 2025-03-12 15:43:38 +01:00
2196a1a5e8 use stylix for styling 2025-03-12 14:49:20 +01:00
b007e5b232 try streamlining the dev setup 2025-03-12 12:07:41 +01:00
dc3c98586d some more tryouts for the wallpapers 2025-03-11 17:59:58 +01:00
b17c844bb5 moore 2025-03-11 16:37:31 +01:00
5c3980dfcf not quite there 2025-03-11 15:38:44 +01:00
8eed29719d try setting wallpapers once more 2025-03-11 14:59:46 +01:00
f6f3a19d18 better applet handling 2025-03-08 14:21:59 +01:00
9d55b1de59 some more style adjustments 2025-03-08 13:39:35 +01:00
3f7924651e better styling, qol fixes 2025-03-07 11:44:00 +01:00
eb20634def some working nvidia, some styling 2025-03-06 11:39:41 +01:00
41b8850196 some waybar adjustments 2025-03-05 19:57:18 +01:00
6b1058f6a4 some more fonts and customization 2025-03-05 16:39:35 +01:00
3d32b6a4c5 wip more font struggles 2025-03-04 21:08:11 +01:00
6cd35a3fb2 some more refinement 2025-03-04 19:45:24 +01:00
fae56aa241 quite a few styling changes 2025-03-04 00:09:48 +01:00
729cc66bd1 try to use waybar 2025-03-03 17:52:38 +01:00
47ed3eb0cb more esthetics 2025-02-24 19:00:07 +01:00
7bf8c855b8 some more keybindings 2025-02-24 12:13:33 +01:00
71 changed files with 1034 additions and 3025 deletions

3
.gitmodules vendored
View File

@@ -1,3 +0,0 @@
[submodule "secrets"]
path = secrets
url = ssh://git@git.kluster.moll.re:2222/remoll/nixos-secrets.git

View File

@@ -1,14 +0,0 @@
# 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
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- age:
- *remy_usb
- *remy_yoga

View File

@@ -17,7 +17,6 @@ Don't forget to add the `#<host>` to the end of the target to specify the host c
### Spectre
###
@@ -27,17 +26,10 @@ Run
```bash
nixos-rebuild switch --flake <target>#<machine>
# for instance
nixos-rebuild switch --flake .#Nixtre
nixos-rebuild switch --flake .#spectre
```
to apply the configuration.
### Using `nh`
Updating from a local config is now easy - since `nh` is already specified as installed:
```
nix flake update
nh os switch .
```
### Installer iso
To build an installer iso, run
@@ -53,10 +45,6 @@ TODO - disable root user
I install with --no-root-passwd and set users.mutableUsers = false in configuration.nix
```
## TODO
## Inspirations
- https://github.com/the-nix-way/dev-templates
@@ -67,20 +55,6 @@ TODO - disable root user
- https://github.com/anotherhadi/nixy
- https://github.com/Numb-0/nix-0
- https://github.com/Frost-Phoenix/nixos-config
- https://github.com/elifouts/Dotfiles
- https://github.com/nomadics9/nixcfg
- https://github.com/Daholli/nixos-config
- https://github.com/khaneliman/khanelinix
- https://github.com/NotAShelf/nyx
- https://copeberg.org/bloxx12/nichts
- https://github.com/fufexan/dotfiles
- https://github.com/spikespaz/dotfiles
- https://github.com/luisnquin/nixos-config
- https://gitlab.com/fisuri/dotfiles
- https://github.com/NobbZ/nixos-config
- https://code.maralorn.de/maralorn/config/
- https://github.com/sameemul-haque/dotfiles
#### Hyprland specific
- https://github.com/elifouts/Dotfiles
- https://github.com/Abhra00/hyprdots

473
flake.lock generated
View File

@@ -20,11 +20,11 @@
]
},
"locked": {
"lastModified": 1755946532,
"narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=",
"lastModified": 1736102453,
"narHash": "sha256-5qb4kb7Xbt8jJFL/oDqOor9Z2+E+A+ql3PiyDvsfWZ0=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada",
"rev": "4846091641f3be0ad7542086d52769bb7932bde6",
"type": "github"
},
"original": {
@@ -38,11 +38,11 @@
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1746562888,
"narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=",
"lastModified": 1732200724,
"narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89",
"rev": "153d52373b0fb2d343592871009a286ec8837aec",
"type": "github"
},
"original": {
@@ -70,11 +70,11 @@
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1748408240,
"narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=",
"lastModified": 1736852337,
"narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e",
"rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5",
"type": "github"
},
"original": {
@@ -103,11 +103,11 @@
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1748383148,
"narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=",
"lastModified": 1741628778,
"narHash": "sha256-RsvHGNTmO2e/eVfgYK7g+eYEdwwh7SbZa+gZkT24MEA=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf",
"rev": "5a81d390bb64afd4e81221749ec4bffcbeb5fa80",
"type": "github"
},
"original": {
@@ -119,11 +119,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
@@ -132,24 +132,40 @@
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"stylix",
"nixpkgs"
]
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1749398372,
"narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569",
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": [
"stylix",
"systems"
]
},
"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"
}
},
@@ -169,6 +185,32 @@
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"stylix",
"flake-compat"
],
"gitignore": "gitignore_2",
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1741379162,
"narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
@@ -191,19 +233,41 @@
"type": "github"
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"stylix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1744584021,
"narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=",
"lastModified": 1732369855,
"narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae",
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "48.1",
"ref": "47.2",
"repo": "gnome-shell",
"type": "github"
}
@@ -215,16 +279,16 @@
]
},
"locked": {
"lastModified": 1756679287,
"narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=",
"lastModified": 1736373539,
"narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8",
"rev": "bd65bc3cde04c16755955630b344bc9e35272c56",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-25.05",
"ref": "release-24.11",
"repo": "home-manager",
"type": "github"
}
@@ -232,20 +296,21 @@
"home-manager_2": {
"inputs": {
"nixpkgs": [
"zen-browser",
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1752603129,
"narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=",
"lastModified": 1739757849,
"narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b",
"rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"repo": "home-manager",
"type": "github"
}
@@ -266,11 +331,11 @@
]
},
"locked": {
"lastModified": 1753964049,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"lastModified": 1734906540,
"narHash": "sha256-vQ/L9hZFezC0LquLo4TWXkyniWtYBlFHAKIsDc7PYJE=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"rev": "69270ba8f057d55b0e6c2dca0e165d652856e613",
"type": "github"
},
"original": {
@@ -295,11 +360,11 @@
]
},
"locked": {
"lastModified": 1756891319,
"narHash": "sha256-/e6OXxzbAj/o97Z1dZgHre4bNaVjapDGscAujSCQSbI=",
"lastModified": 1736115290,
"narHash": "sha256-Jcn6yAzfUMcxy3tN/iZRbi/QgrYm7XLyVRl9g/nbUl4=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "621e2e00f1736aa18c68f7dfbf2b9cff94b8cc4d",
"rev": "52202272d89da32a9f866c0d10305a5e3d954c50",
"type": "github"
},
"original": {
@@ -324,11 +389,11 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1757423991,
"narHash": "sha256-tL+b6WC4gJJSo6wjNVIZpQ0DsYg8RmoGHxYuk6jJKbU=",
"lastModified": 1737038559,
"narHash": "sha256-irqN8zKwpQ0NFxEvV/wQRdopClwkyZXCQoF7mgX/Uss=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "150d693fe794a01aab762a18d2d8a2c8bc54b43c",
"rev": "0dc7367a7006cc3cc877d52bf34c4998144bff84",
"type": "github"
},
"original": {
@@ -349,11 +414,11 @@
]
},
"locked": {
"lastModified": 1749046714,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=",
"lastModified": 1735774328,
"narHash": "sha256-vIRwLS9w+N99EU1aJ+XNOU6mJTxrUBa31i1r82l0V7s=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330",
"rev": "e3b6af97ddcfaafbda8e2828c719a5af84f662cb",
"type": "github"
},
"original": {
@@ -362,49 +427,10 @@
"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": [
@@ -417,11 +443,11 @@
]
},
"locked": {
"lastModified": 1753819801,
"narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=",
"lastModified": 1736114838,
"narHash": "sha256-FxbuGQExtN37ToWYnGmO6weOYN6WPHN/RAqbr7gNPek=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc",
"rev": "6997fe382dcf396704227d2b98ffdd5066da6959",
"type": "github"
},
"original": {
@@ -446,11 +472,11 @@
]
},
"locked": {
"lastModified": 1756810301,
"narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=",
"lastModified": 1735393019,
"narHash": "sha256-NPpqA8rtmDLsEmZOmz+qR67zsB6Y503Jnv+nSFLKJZ8=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931",
"rev": "55608efdaa387af7bfdc0eddb404c409958efa43",
"type": "github"
},
"original": {
@@ -471,11 +497,11 @@
]
},
"locked": {
"lastModified": 1756117388,
"narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=",
"lastModified": 1736164519,
"narHash": "sha256-1LimBKvDpBbeX+qW7T240WEyw+DBVpDotZB4JYm8Aps=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0",
"rev": "3c895da64b0eb19870142196fa48c07090b441c4",
"type": "github"
},
"original": {
@@ -496,11 +522,11 @@
]
},
"locked": {
"lastModified": 1755184602,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"lastModified": 1735493474,
"narHash": "sha256-fktzv4NaqKm94VAkAoVqO/nqQlw+X0/tJJNAeCSfzK4=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"rev": "de913476b59ee88685fdc018e77b8f6637a2ae0b",
"type": "github"
},
"original": {
@@ -527,11 +553,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1757068644,
"narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"lastModified": 1736012469,
"narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
"type": "github"
},
"original": {
@@ -543,11 +569,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1757347588,
"narHash": "sha256-tLdkkC6XnsY9EOZW9TlpesTclELy8W7lL2ClL+nma8o=",
"lastModified": 1724819573,
"narHash": "sha256-GnR7/ibgIH1vhoy8cYdmXE6iyZqKqFxQSVkFgosBh6w=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b599843bad24621dcaa5ab60dac98f9b0eb1cabe",
"rev": "71e91c409d1e654808b2621f28a327acfdad8dc2",
"type": "github"
},
"original": {
@@ -559,62 +585,36 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1757408970,
"narHash": "sha256-aSgK4BLNFFGvDTNKPeB28lVXYqVn8RdyXDNAvgGq+k0=",
"lastModified": 1736549401,
"narHash": "sha256-ibkQrMHxF/7TqAYcQE+tOnIsSEzXmMegzyBWza6uHKM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d179d77c139e0a3f5c416477f7747e9d6b7ec315",
"rev": "1dab772dd4a68a7bba5d9460685547ff8e17d899",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1751211869,
"narHash": "sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y=",
"lastModified": 1741600792,
"narHash": "sha256-yfDy6chHcM7pXpMF4wycuuV+ILSTG486Z/vLx/Bdi6Y=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b43c397f6c213918d6cfe6e3550abfe79b5d1c51",
"rev": "ebe2788eafd539477f83775ef93c3c7e244421d3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": [
"stylix",
"flake-parts"
],
"nixpkgs": [
"stylix",
"nixpkgs"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1751320053,
"narHash": "sha256-3m6RMw0FbbaUUa01PNaMLoO7D99aBClmY5ed9V3vz+0=",
"owner": "nix-community",
"repo": "NUR",
"rev": "cbde1735782f9c2bb2c63d5e05fba171a14a4670",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
@@ -625,11 +625,11 @@
]
},
"locked": {
"lastModified": 1757239681,
"narHash": "sha256-E9spYi9lxm2f1zWQLQ7xQt8Xs2nWgr1T4QM7ZjLFphM=",
"lastModified": 1735882644,
"narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "ab82ab08d6bf74085bd328de2a8722c12d97bd9d",
"rev": "a5a961387e75ae44cc20f0a57ae463da5e959656",
"type": "github"
},
"original": {
@@ -638,26 +638,6 @@
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1758273351,
"narHash": "sha256-wOv1guIi9THD1NjOtBU2Xh/Avg9xv7nIjsfFSkr1NeQ=",
"ref": "refs/heads/master",
"rev": "e9a574d919a89602d2868621576b2ccae54a5cb0",
"revCount": 675,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
@@ -665,31 +645,7 @@
"nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"quickshell": "quickshell",
"sops-nix": "sops-nix",
"stylix": "stylix",
"watt": "watt",
"zen-browser": "zen-browser"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1757449901,
"narHash": "sha256-qwN8nYdSRnmmyyi+uR6m4gXnVktmy5smG1MOrSFD8PI=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "3b4a369df9dd6ee171a7ea4448b50e2528faf850",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "sops-nix",
"type": "github"
"stylix": "stylix"
}
},
"stylix": {
@@ -699,28 +655,28 @@
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts",
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils",
"git-hooks": "git-hooks",
"gnome-shell": "gnome-shell",
"home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_3",
"nur": "nur",
"systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
"tinted-tmux": "tinted-tmux"
},
"locked": {
"lastModified": 1757361712,
"narHash": "sha256-GwObJtrAqVim66e4Jb5VzAKT6zGFJ3KOi63rfcrfMV4=",
"lastModified": 1741703235,
"narHash": "sha256-3efck7239JPh6IHnqhETaoQejfxh4RBU16bE8IHOkto=",
"owner": "danth",
"repo": "stylix",
"rev": "3bf1430ed85a4484e4e1facee2344d2bb20288e6",
"rev": "4a3ac9e30cd15b25a8b2e6cf0a7a047f454408bd",
"type": "github"
},
"original": {
"owner": "danth",
"ref": "release-25.05",
"ref": "release-24.11",
"repo": "stylix",
"type": "github"
}
@@ -775,43 +731,28 @@
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1735730497,
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
"lastModified": 1716423189,
"narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1750770351,
"narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "5a775c6ffd6e6125947b393872cde95867d85a2a",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1751159871,
"narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=",
"lastModified": 1740877430,
"narHash": "sha256-zWcCXgdC4/owfH/eEXx26y5BLzTrefjtSLFHWVD5KxU=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "bded5e24407cec9d01bd47a317d15b9223a1546c",
"rev": "d48ee86394cbe45b112ba23ab63e33656090edb4",
"type": "github"
},
"original": {
@@ -820,65 +761,6 @@
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1751158968,
"narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "86a470d94204f7652b906ab0d378e4231a5b3384",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"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": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1749377316,
"narHash": "sha256-hw3rL4rlIlYJMTeE7DlQ3lRhQDJURAhE+PC/NT4VAAQ=",
"owner": "NotAShelf",
"repo": "watt",
"rev": "154724c7b1bd49654ea55df719e1eb3219ec2000",
"type": "github"
},
"original": {
"owner": "NotAShelf",
"ref": "v0.3.2",
"repo": "watt",
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [
@@ -907,11 +789,11 @@
]
},
"locked": {
"lastModified": 1755354946,
"narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=",
"lastModified": 1734907020,
"narHash": "sha256-p6HxwpRKVl1KIiY5xrJdjcEeK3pbmc///UOyV6QER+w=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0",
"rev": "d7f18dda5e511749fa1511185db3536208fb1a63",
"type": "github"
},
"original": {
@@ -919,27 +801,6 @@
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"home-manager": "home-manager_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1757395105,
"narHash": "sha256-kwctEcCrHXZg80POmuOfqRqxSjy8bXhdBuNcRWaEpFA=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "d7b87e67233fdb42e655600f3de4c2e8a13bc6a7",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
}
},
"root": "root",

View File

@@ -2,48 +2,23 @@
description = "Nix config entry point";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# Home manager
home-manager.url = "github:nix-community/home-manager/release-25.05";
home-manager.url = "github:nix-community/home-manager/release-24.11";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# Managing flatpak apps
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1";
# 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";
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";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix.url = "github:danth/stylix/release-24.11";
};
outputs = {
self,
nixpkgs,
nixpkgs-unstable,
home-manager,
stylix,
sops-nix,
quickshell,
...
} @ inputs:
let
@@ -52,7 +27,7 @@
## NixOS configurations are the main output of this flake
# HP Spectre x360 2018
nixosConfigurations.Nixtre = nixpkgs.lib.nixosSystem {
nixosConfigurations.spectre = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
@@ -66,52 +41,7 @@
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.remy.imports = [
./users/remy_spectre
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}
];
};
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 = [
./hosts/yoga-7-pro
sops-nix.nixosModules.sops
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_yoga
./users/remy.nix
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}

View File

@@ -1,10 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, ... }:
{
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.05"; # Did you read the comment?
}

View File

@@ -1,40 +0,0 @@
{lib, config, options, pkgs, ...}:
{
config = {
nix-config = {
networking.hostName = "nichts";
userName = "remy";
gnome.enable = true;
};
};
# Merge the configuration and hardware configuration
imports = [
./configuration.nix
./hardware-configuration.nix
./usb_config.nix
# ../../modules/nixos/backup.nix
../../modules/nixos/bluetooth.nix
../../modules/nixos/flakes.nix
../../modules/nixos/flatpak.nix
../../modules/nixos/fonts.nix
../../modules/nixos/gnome.nix
../../modules/nixos/language.nix
../../modules/nixos/ld.nix
../../modules/nixos/monitoring.nix
../../modules/nixos/networking.nix
../../modules/nixos/nh.nix
../../modules/nixos/pipewire.nix
../../modules/nixos/podman.nix
# ../../modules/nixos/power.nix
../../modules/nixos/stylix.nix
../../modules/nixos/user.nix
../../utils/binary-cache.nix
../../utils/garbage-collection.nix
../../utils/unfree.nix
];
}

View File

@@ -1,41 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/621498e8-64f6-4979-8489-3dc1d145e349";
fsType = "ext4";
};
boot.initrd.luks.devices."root-enc".device = "/dev/disk/by-uuid/156d0f15-397c-4bc6-8f57-026108975246";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/B2D0-672E";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -1,17 +0,0 @@
{
config,
pkgs,
...
}:
{
boot.loader.grub.enable = true;
boot.loader.grub.efiSupport = true;
# location at install time. Since the drive is a USB drive this is expcected to change on each device
boot.loader.grub.devices = ["/dev/sdb"];
boot.loader.grub.efiInstallAsRemovable = true;
boot.loader.systemd-boot.enable = false;
boot.loader.efi.canTouchEfiVariables = false;
boot.tmp.useTmpfs = true;
}

View File

@@ -9,10 +9,8 @@
../../modules/nixos/flatpak.nix
../../modules/nixos/fonts.nix
../../modules/nixos/hyprland.nix
../../modules/nixos/ld.nix
../../modules/nixos/monitoring.nix
../../modules/nixos/networking.nix
../../modules/nixos/nh.nix
../../modules/nixos/nvidia.nix
../../modules/nixos/pipewire.nix
../../modules/nixos/podman.nix

View File

@@ -1,14 +0,0 @@
Installed using
```
> sudo nixos-install --root /tmp/new-install/ --flake .#nyx --impure --no-root-passwd
```
where `/tmp/new-install` was the mount point of the target FS.
The root user is effectively deactivated, hence the additional setup:
- users are part of the `wheel` group
- password needs to be set before first boot:
- `nix-enter --root /tmp/new-install`
- `passwd <username>`

View File

@@ -1,27 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ 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";
# requires too many shenanigans so I just install using --no-root-passwd
# users.users.root.hashedPassword = "!";
nixpkgs.config.allowUnfree = true;
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.05"; # Did you read the comment?
}

View File

@@ -1,37 +0,0 @@
{
config = {
nix-config = {
networking.hostName = "nyx";
userName = "remy";
};
};
# Merge the configuration and hardware configuration
imports = [
./configuration.nix
./hardware-configuration.nix
../../modules/nixos/backup.nix
../../modules/nixos/bluetooth.nix
../../modules/nixos/flakes.nix
../../modules/nixos/flatpak.nix
../../modules/nixos/fonts.nix
../../modules/nixos/hyprland.nix
../../modules/nixos/language.nix
../../modules/nixos/ld.nix
../../modules/nixos/monitoring.nix
../../modules/nixos/networking.nix
../../modules/nixos/nh.nix
../../modules/nixos/pipewire.nix
../../modules/nixos/podman.nix
../../modules/nixos/power.nix
../../modules/nixos/stylix.nix
../../modules/nixos/user.nix
../../utils/binary-cache.nix
../../utils/garbage-collection.nix
../../utils/unfree.nix
];
}

View File

@@ -1,76 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelParams = [
"quiet"
"splash"
];
# https://github.com/lwfinger/rtw89/issues/240
boot.extraModprobeConfig = ''
options rtw89_pci disable_aspm_l1ss=y disable_aspm_l1=y disable_clkreq=y
options rtw89_core disable_ps_mode=y
'';
services.fwupd.enable = true;
fileSystems."/" =
{ device = "/dev/disk/by-uuid/1ea0784c-4eeb-46f1-a0ae-f6b311b27bd1";
fsType = "btrfs";
options = [ "subvol=@" ];
};
boot.initrd.luks.devices."luks-root" = {
device = "/dev/disk/by-uuid/8832c090-9ca7-4a9c-8cfd-cf43cb59b3d3";
crypttabExtraOpts = [ "fido2-token=auto" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/86C2-FD4D";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/1ea0784c-4eeb-46f1-a0ae-f6b311b27bd1";
fsType = "btrfs";
options = [ "subvol=@home" ];
};
# TODO - only enable this if the user remy exists
fileSystems."/scratch/${config.nix-config.userName}" =
{ device = "/dev/disk/by-uuid/1ea0784c-4eeb-46f1-a0ae-f6b311b27bd1";
fsType = "btrfs";
options = [
"subvol=@scratch"
# Even though the mount point is not in home, we still want to show it in gnome-related file managers
"x-gvfs-show"
"x-gvfs-name=scratch"
"x-gvfs-icon=view-refresh"
];
# TODO make it owned by the user
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface.
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -0,0 +1,25 @@
{pkgs, ...}:
{
# Add a udev rule that launches a backup using restic when a specific USB device (the backup drive) is plugged in
environment.systemPackages = with pkgs; [
restic
];
# the udev rule:
services.udev.extraRules = ''
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="backup-restic", TAG+="systemd", ENV{SYSTEMD_WANTS}="backup-restic.service"
'';
# the systemd service:
systemd.services.backup-restic = {
description = "Backup using restic (triggered when USB drive is plugged in)";
after = [ "local-fs.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
# TODO: adapt command
ExecStart = "${pkgs.restic}/bin/restic backup /home/username";
};
};
}

View File

@@ -1,9 +0,0 @@
{pkgs, ...}:
{
home.packages = [
pkgs.rofi-bluetooth
];
# patch the rofi-bluetooth script to use an alternative rofi-command variable
}

View File

@@ -1,4 +1,4 @@
{pkgs, inputs, ...}:
{pkgs, ...}:
{
programs.firefox = {
## Enable the Firefox web browser
@@ -28,9 +28,9 @@
profiles.default = {
search = {
force = true;
default = "ddg";
privateDefault = "ddg";
order = ["ddg" "google"];
default = "DuckDuckGo";
privateDefault = "DuckDuckGo";
order = ["DuckDuckGo" "Google"];
};
settings = {
"browser.startup.homepage" = "about:home";
@@ -72,73 +72,9 @@
# Automatically enable extensions
"extensions.autoDisableScopes" = 0;
};
};
};
home.packages = with pkgs; [
inputs.zen-browser.packages."${system}".default
# inputs.zen-browser.packages."${system}".default.override {
# policies = {
# DisableAppUpdate = true;
# DisableTelemetry = true;
# OfferToSaveLogins = false;
# AutofillAddressEnabled = true;
# AutofillCreditCardEnabled = false;
# # BlockAboutConfig = true;
# DefaultDownloadDirectory = "\${home}/Downloads";
# ExtensionSettings = with builtins;
# let extension = shortId: uuid: {
# name = uuid;
# value = {
# install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
# installation_mode = "normal_installed";
# };
# };
# in listToAttrs [
# (extension "ublock-origin" "uBlock0@raymondhill.net")
# (extension "ghostery" "firefox@ghostery.com")
# (extension "keepassxc-browser" "keepassxc-browser@keepassxc.org")
# (extension "morphine" "{b252db54-e4f6-440f-914a-1f017a3a390d}")
# ];
# };
# }
];
# programs.zen-browser = {
# enable = true;
# policies = {
# DisableAppUpdate = true;
# DisableTelemetry = true;
# OfferToSaveLogins = false;
# AutofillAddressEnabled = true;
# AutofillCreditCardEnabled = false;
# # BlockAboutConfig = true;
# DefaultDownloadDirectory = "\${home}/Downloads";
# ExtensionSettings = with builtins;
# let extension = shortId: uuid: {
# name = uuid;
# value = {
# install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
# installation_mode = "normal_installed";
# };
# };
# in listToAttrs [
# (extension "ublock-origin" "uBlock0@raymondhill.net")
# (extension "ghostery" "firefox@ghostery.com")
# (extension "keepassxc-browser" "keepassxc-browser@keepassxc.org")
# (extension "morphine" "{b252db54-e4f6-440f-914a-1f017a3a390d}")
# ];
# };
# };
}

View File

@@ -1,205 +1,120 @@
{pkgs, ...}:
let
baseExtensions = with pkgs.vscode-extensions; [
# QOL
mhutchie.git-graph
redhat.vscode-yaml
github.copilot
github.copilot-chat
# Nix environment selector
arrterian.nix-env-selector
];
# baseExtensions = with pkgs; [
# (vscode-with-extensions.override {
# vscodeExtensions = with vscode-extensions; [
# bbenoist.nix
# ];
# })
# ];
baseSettings = {
# visual
"window.titleBarStyle" = "native";
"window.customTitleBarVisibility" = "never";
"window.menuBarVisibility" = "hidden";
"window.autoDetectColorScheme" = true;
"workbench.preferredDarkColorTheme" = "Default Dark Modern";
"workbench.preferredLightColorTheme" = "Default Light Modern";
"editor.fontFamily" = "'FiraCode Nerd Font Mono', 'monospace', monospace";
"terminal.integrated.fontFamily" = "FiraCode Nerd Font Mono";
"workbench.iconTheme" = "vs-seti";
# telemetry
"telemetry.telemetryLevel" = "off";
"redhat.telemetry.enabled" = false;
# editor QOL
"security.workspace.trust.untrustedFiles" = "open";
"editor.wordWrap" = "on";
"editor.suggestSelection" = "first";
"editor.renderWhitespace" = "none";
"editor.acceptSuggestionOnEnter" = "off";
"editor.fontLigatures" = true;
"editor.inlineSuggest.enabled" = true;
"editor.bracketPairColorization.enabled" = true;
"editor.unicodeHighlight.nonBasicASCII" = false;
"editor.unicodeHighlight.invisibleCharacters" = false;
"editor.unicodeHighlight.ambiguousCharacters" = false;
"files.autoSave" = "onWindowChange";
"files.autoSaveDelay" = 1000;
"files.insertFinalNewline" = true;
"files.trimTrailingWhitespace" = true;
"explorer.confirmDelete" = false;
"explorer.confirmDragAndDrop" = false;
"terminal.integrated.enableMultiLinePasteWarning" = false;
"update.showReleaseNotes" = false;
"terminal.external.linuxExec" = "kitty";
"workbench.startupEditor" = "newUntitledFile";
# Extension management
"extensions.autoCheckUpdates" = false;
"extensions.autoUpdate" = false;
"extensions.ignoreRecommendations" = true;
# git
"git.ignoreMissingGitWarning" = true;
"git.confirmSync" = false;
"git.enableSmartCommit" = true;
"git.autofetch" = true;
"diffEditor.renderSideBySide" = false;
"diffEditor.hideUnchangedRegions.enabled" = true;
"diffEditor.ignoreTrimWhitespace" = false;
# Copilot
"github.copilot.editor.enableAutoCompletions" = true;
"github.copilot.advanced" = {};
"github.copilot.enable" = {
"*" = true;
};
# Python
"python.terminal.activateEnvironment" = false; # let nix-shell handle this
};
baseKeybindings = [
# comment/uncomment line
{
key = "ctrl+[Backslash]"; # was ctrl+# but vscode reads the key differently apparently
command = "editor.action.commentLine";
when = "editorTextFocus";
}
];
in
{
programs.vscode = {
enable = true;
# install vscode in a FHS environment to allow extensions with prebuilt binaries
# package = pkgs.vscode.fhs;
profiles.default = {
userSettings = baseSettings // {
"window.newWindowProfile" = "development";
# profiles = {
# default = {
extensions = with pkgs.vscode-extensions; [
# QOL
mhutchie.git-graph
redhat.vscode-yaml
github.copilot
# python
ms-python.python
ms-python.isort
ms-python.debugpy
ms-python.vscode-pylance
# Nix language
jnoortheen.nix-ide
# typst
myriad-dreamin.tinymist
];
# };
keybindings = [
{
key = "ctrl+#";
command = "editor.action.commentLine";
when = "editorTextFocus";
}
];
userSettings = {
# visual
"window.menuBarVisibility" = "toggle";
"editor.fontFamily" = "'FiraCode Nerd Font Mono', 'monospace', monospace";
"terminal.integrated.fontFamily" = "FiraCode Nerd Font Mono";
"workbench.iconTheme" = "vs-seti";
# telemetry
"telemetry.enableCrashReporter" = false;
"telemetry.enableTelemetry" = false;
"redhat.telemetry.enabled" = false;
# editor QOL
"security.workspace.trust.untrustedFiles" = "open";
"editor.wordWrap" = "on";
"editor.suggestSelection" = "first";
"editor.renderWhitespace" = "none";
"editor.acceptSuggestionOnEnter" = "off";
"editor.fontLigatures" = true;
"editor.inlineSuggest.enabled" = true;
"editor.bracketPairColorization.enabled" = true;
"editor.unicodeHighlight.nonBasicASCII" = false;
"editor.unicodeHighlight.invisibleCharacters" = false;
"editor.unicodeHighlight.ambiguousCharacters" = false;
"files.autoSave" = "onWindowChange";
"files.autoSaveDelay" = 1000;
"files.insertFinalNewline" = true;
"files.trimTrailingWhitespace" = true;
"explorer.confirmDelete" = false;
"explorer.confirmDragAndDrop" = false;
"terminal.integrated.enableMultiLinePasteWarning" = false;
"update.showReleaseNotes" = false;
"terminal.external.linuxExec" = "kitty";
"workbench.startupEditor" = "newUntitledFile";
# "workbench.colorTheme" = "Default Light+";
"github.copilot.editor.enableAutoCompletions" = true;
"github.copilot.advanced" = {};
"github.copilot.enable" = {
"*" = true;
};
};
profiles.development = {
extensions = baseExtensions ++ (with pkgs.vscode-extensions; [
# python
ms-python.python
ms-python.isort
ms-python.debugpy
ms-python.vscode-pylance
# git
"git.ignoreMissingGitWarning" = true;
"git.confirmSync" = false;
"git.enableSmartCommit" = true;
"git.autofetch" = true;
"diffEditor.renderSideBySide" = false;
"diffEditor.hideUnchangedRegions.enabled" = true;
"diffEditor.ignoreTrimWhitespace" = false;
# nix language
jnoortheen.nix-ide
# Flutter and co
dart-code.flutter
dart-code.dart-code
]);
keybindings = baseKeybindings;
userSettings = baseSettings;
};
profiles.science = {
extensions = baseExtensions ++ (with pkgs.vscode-extensions; [
# python + jupyter
ms-python.python
ms-python.isort
ms-python.debugpy
ms-python.vscode-pylance
ms-toolsai.vscode-jupyter-slideshow
ms-toolsai.jupyter-renderers
# Typst
myriad-dreamin.tinymist
]) ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "jupyter";
publisher = "ms-toolsai";
version = "2025.3.2025032101";
sha256 = "sha256-s2qEUl9J6EOije6MasZOnHErYs3NYXBqLSfMT03vEH0=";
}
{
name = "jupyter-hub";
publisher = "ms-toolsai";
version = "2024.10.1002831100";
sha256 = "sha256-5IRczwXbYkDdYEOXvQnnH+HJNLvsRsrZ6fnoVCveqrs=";
}
# Python
"jupyter.disableJupyterAutoStart" = true;
"jupyter.askForKernelRestart" = false;
"workbench.editorAssociations" = {
"*.ipynb" = "jupyter-notebook";
};
"notebook.cellToolbarLocation" = {
"default" = "right";
"jupyter-notebook" = "left";
};
"jupyter.widgetScriptSources" = [
"jsdelivr.com"
"unpkg.com"
];
keybindings = baseKeybindings ++ [
# run code cell in jupyter
{
key = "ctrl+enter";
command = "jupyter.runcurrentcell";
when = "editorTextFocus && isWorkspaceTrusted && jupyter.hascodecells && !editorHasSelection && !isCompositeNotebook && !notebookEditorFocused";
}
];
userSettings = baseSettings // {
"jupyter.disableJupyterAutoStart" = true;
"jupyter.askForKernelRestart" = false;
"workbench.editorAssociations" = {
"*.ipynb" = "jupyter-notebook";
};
"notebook.cellToolbarLocation" = {
"default" = "right";
"jupyter-notebook" = "left";
};
"jupyter.widgetScriptSources" = [
"jsdelivr.com"
"unpkg.com"
];
# Typst
"[typst]" = {
"editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?";
};
"[typst-code]" = {
"editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?";
};
"tinymist.fontPaths" = [
"./font"
];
"workbench.colorCustomizations" = {
"statusBar.background" = "#003f9293";
};
# Typst
"[typst]" = {
"editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?";
};
"[typst-code]" = {
"git.openRepositoryInParentFolders" = "never";
"editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?";
};
"tinymist.fontPaths" = [
"./font"
];
};
};
}

View File

@@ -1,22 +0,0 @@
{ config, pkgs, ... }:
{
# Set up essential directories in the home directory
# TODO
# home.file."Dev".directory = true;
# home.file."owncloud".directory = true;
# Set XDG user directories
xdg.userDirs = {
enable = true;
createDirectories = true;
documents = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Downloads";
pictures = "${config.home.homeDirectory}/Pictures";#
# do not create the following
desktop = null;
music = null;
publicShare = null;
templates = null;
videos = null;
};
}

View File

@@ -2,10 +2,6 @@
{
home.packages = [
# pdf viewer
pkgs.papers
# image viewer
pkgs.loupe
# video player
pkgs.showtime
pkgs.evince
];
}

View File

@@ -1,15 +1,9 @@
{pkgs, ...}:
{pkgs, ...}:
{
# Required by the fzf fish plugin
programs.fzf = {
enable = true;
};
home.packages = with pkgs; [
fd
bat
];
programs.fish = {
enable = true;
@@ -26,13 +20,11 @@
}
# add others here
];
functions = {
# disable the fish greeting
fish_greeting = "";
};
};
home.packages = [
pkgs.fishPlugins.tide
];
# sets the "default" shell to fish
# actually keeps bash as a posix-compliant default but starts fish if the shell is not bash

View File

@@ -8,12 +8,13 @@
services.flatpak.uninstallUnmanaged = false;
services.flatpak.packages = [
"com.calibre_ebook.calibre"
"com.github.flxzt.rnote"
"com.github.tchx84.Flatseal"
"com.spotify.Client"
"io.podman_desktop.PodmanDesktop"
"org.pipewire.Helvum"
"io.github.zen_browser.zen"
"im.riot.Riot"
"com.valvesoftware.Steam"
"org.prismlauncher.PrismLauncher"
];
}

View File

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

View File

@@ -0,0 +1,7 @@
{inputs, pkgs, ...}:
{
# Put a cursor theme to the location expected by the hyprland window manager
# TODO
}

View File

@@ -1,9 +1,10 @@
{
imports = [
./hyprland
./cursor.nix
./hyprland-customization.nix
./hyprpaper.nix
./hyprlock.nix
./hypridle.nix
./waybar.nix
];
}
}

View File

@@ -4,41 +4,34 @@
enable = true;
settings = {
general = {
# See: https://github.com/hyprwm/hypridle/issues/146
before_sleep_cmd = "hyprlock --no-fade-in";
lock_cmd = "hyprlock";
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
};
listener = [
{
# turn off keyboard backlight after 20 seconds
timeout = 10;
on-timeout = "brightnessctl -d platform::kbd_backlight -s set 0";
# restore keyboard backlight on resume to previous level.
on-resume = "brightnessctl -d platform::kbd_backlight -r";
}
{
# dim screen after 2 minutes
timeout = 120;
on-timeout = "brightnessctl -s set 2%";
# dim screen after 4 minutes
timeout = 240;
on-timeout = "brightnessctl -s set 10";
# set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r";
# monitor backlight restore.
}
{
# lock screen after 10 minutes
timeout = 600;
# lock screen after 5 minutes
timeout = 300;
on-timeout = "loginctl lock-session && hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
{
# suspend after 15 minutes
timeout = 900;
# suspend after 10 minutes
timeout = 600;
on-timeout = "systemctl suspend";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
}

View File

@@ -0,0 +1,208 @@
{inputs, pkgs, ...}:
{
home.packages = [
pkgs.hyprshot
pkgs.nautilus
pkgs.gnome-control-center
pkgs.brightnessctl
pkgs.cliphist
pkgs.wl-clipboard
];
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
"$mod" = "SUPER";
"$browser" = "firefox";
"$launcher-cmd" = "wofi --show drun -n";
"$ide" = "code";
# Global bindings
bind = [
# Launch applications
"$mod, space, exec, $launcher-cmd"
"$mod, return, exec, kitty"
"$mod, b, exec, $browser"
"$mod, s, exec, $ide"
"$mod, e, exec, nautilus"
# Lock screen
"$mod, l, exec, hyprlock"
# Clipboard management
"$mod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy"
"$mod+Shift, Q, killactive," # Close window
# Toggle Floating and reduce size
"$mod, f, togglefloating,"
"$mod, f, resizeactive, 50% 50%,"
# Alt-tab alternative
"$mod, Tab, cyclenext,"
"$mod, Tab, bringactivetotop,"
# Move the window
"$mod+Shift, left, movewindow, l"
"$mod+Shift, right, movewindow, r"
"$mod+Shift, up, movewindow, u"
"$mod+Shift, down, movewindow, d"
"$mod+Ctrl, left, movetoworkspace, -1"
"$mod+Ctrl, right, movetoworkspace, +1"
# # Switch workspace
# "$mod+Ctrl, left, workspace, -1"
# "$mod+Ctrl, right, workspace, +1"
# Screenshot
"$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots"
];
# 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, left, resizeactive, -2% 0"
"$mod, right, resizeactive, 2% 0"
];
# lock-screen bindings
bindl = [
# on lid close, lock the screen
# if another monitor is connected, only turn the internal monitor off and don't lock the screen
", switch:on:Lid Switch, exec, hyprctl dispatch dpms off eDP-1"
# if there is no active monitor, perform a screen lock
", switch:on:Lid Switch, exec, hyprctl monitors | grep 'dpmsStatus: 1' || hyprlock"
", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1"
];
# bindr = [
# # Overview
# "$mod, , overview:toggle"
# ];
bindm = [
# move the window
"$mod, mouse:272, movewindow"
];
exec-once = [
# "${pkgs.hyprpaper}/bin/hyprpaper"
# hyprpaper is handled as its own service
"${pkgs.waybar}/bin/waybar"
# listen to clipboard events and send them to cliphist
"wl-paste --watch cliphist store"
"${pkgs.waybar}/bin/hypridle"
"hyprpaper"
# # Fixes cursor themes in gnome apps under hyprland
# "gsettings set org.gnome.desktop.interface cursor-theme '${config.home.pointerCursor.name}'"
# "gsettings set org.gnome.desktop.interface cursor-size ${toString home.pointerCursor.size}"
];
general = {
resize_on_border = true;
gaps_in = 5;
gaps_out = 5;
border_size = 1;
"col.active_border" = "rgb(98971A) rgb(CC241D) 45deg";
layout = "master";
};
misc = {
# disable refreshs when nothing is going on
vfr = false;
disable_hyprland_logo = true;
};
input = {
kb_layout = "de";
# remap caps lock to ctrl
kb_options = "ctrl:nocaps";
numlock_by_default = true;
# mouse input should be unchanged
natural_scroll = false;
sensitivity = 0.3;
touchpad = {
disable_while_typing = false;
natural_scroll = true;
};
};
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 4;
workspace_swipe_touch = true;
};
decoration = {
rounding = 5;
# active_opacity = 0.95;
inactive_opacity = 0.9;
shadow = {
enabled = false;
};
# blur is set on a per-program basis
windowrulev2 = [
# kitty should behave like a floating window
"animation popin, class:kitty"
"move cursor -50% -50%, class:kitty"
"float, class:kitty"
"size 50% 50%, class:kitty"
# some more floating windows
"float, class:org.gnome.Settings"
"float, class:desktopclient.owncloud.com"
"float, class:org.keepassxc.KeePassXC"
];
};
monitor = [
"eDP-1, 3840x2160, 0x0, 1.5" # the internal laptop monitor
# Samsung monitor at irchel (matching the description)
# "desc:Samsung Electric Company LS27D80xU HK7X800803, 3840x2160, auto-up, 1.5"
", preferred, auto-up, auto" # automatically add any newly detected monitor
];
xwayland = {
enabled = false;
};
env = [
# force apps to use wayland
"NIXOS_OZONE_WL, 1"
"ELECTRON_OZONE_PLATFORM_HINT, wayland"
# set the scale factor for GDK apps
"GDK_SCALE, 1.5"
# set the scale factor for QT apps
"QT_SCALE_FACTOR, 1.5"
# set the scale factor for GTK apps
];
};
plugins = [
# Global overview
pkgs.hyprlandPlugins.hyprspace
# Touch gestures
pkgs.hyprlandPlugins.hyprgrass
];
};
services.swaync.enable = true;
}

View File

@@ -1,31 +0,0 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
options = {
nix-config.hypr.autostartApps = lib.mkOption {
type = lib.types.listOf lib.types.str;
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}"
"${lib.getExe pkgs.keepassxc}"
];
description = "List of applications to start automatically in Hyprland.";
};
};
config = {
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
exec-once = cfg.autostartApps;
};
};
};
}

View File

@@ -1,9 +0,0 @@
{
imports = [
./autostart.nix
./general.nix
./keybinds.nix
./layouts.nix
./packages.nix
];
}

View File

@@ -1,139 +0,0 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
options = {
nix-config.hypr.internal-screen.resolution = lib.mkOption { type = lib.types.str; };
nix-config.hypr.internal-screen.scale = lib.mkOption { type = lib.types.str; };
nix-config.hypr.browser = lib.mkOption {
type = lib.types.str;
default = "firefox";
description = "The browser to use in Hyprland.";
};
nix-config.hypr.ide = lib.mkOption {
type = lib.types.str;
default = "code";
description = "The IDE to use in Hyprland.";
};
};
config = {
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
# debug = {
# disable_logs = false;
# };
general = {
resize_on_border = true;
gaps_in = 5;
gaps_out = 5;
border_size = 1;
"col.active_border" = "rgb(98971A) rgb(CC241D) 45deg";
layout = "master";
};
input = {
kb_layout = "de";
# remap caps lock to ctrl
kb_options = "ctrl:nocaps";
numlock_by_default = true;
# mouse input should be unchanged
natural_scroll = false;
sensitivity = 0.3;
touchpad = {
disable_while_typing = false;
natural_scroll = true;
};
};
device = {
name = "syna329a:00-06cb:cd4f-touchpad";
sensitivity = 0.5;
};
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 4;
workspace_swipe_touch = true;
};
decoration = {
rounding = 7;
# active_opacity = 0.95;
inactive_opacity = 0.9;
shadow = {
enabled = false;
};
# blur = {
# enabled = true;
# size = 5;
# passes = 2;
# };
# blur is set on a per-program basis
windowrulev2 = [
# kitty should behave like a floating window
"animation popin, class:kitty"
"move cursor -50% -50%, class:kitty"
"float, class:kitty"
"size 50% 50%, class:kitty"
# blur the launcher background
# "blur 10, class:${config.nix-config.launcher.name}"
# some more floating windows
"float, class:org.gnome.Settings"
"float, class:desktopclient.owncloud.com"
"float, class:org.keepassxc.KeePassXC"
"float, title:^(Picture-in-Picture)$"
"float, class:org.gnome.Nautilus"
# when there is a single window, deactivate border and gaps
# "border_size 0, onworkspace:w[tv1], "
];
};
monitor = [
# the internal monitor, always at the "center"
"eDP-1, ${cfg.internal-screen.resolution}, 0x0, ${cfg.internal-screen.scale}"
# ultra wide monitor at home
"desc:Samsung Electric Company C34H89x H4ZN501178, 3440x1440@99.98, auto-up, 1"
# Samsung monitors at irchel (matching the description)
"desc:Samsung Electric Company LS27D80xU, 2560x1440@59.95, auto-up, 1"
", preferred, auto-up, auto" # automatically add any newly detected monitor
];
xwayland = {
enabled = true;
force_zero_scaling = true;
};
env = [
# force apps to use wayland
"NIXOS_OZONE_WL, 1"
"ELECTRON_OZONE_PLATFORM_HINT, wayland"
# set the scale factor for GDK apps
"GDK_SCALE, ${cfg.internal-screen.scale}"
# set the scale factor for QT apps
# "QT_SCALE_FACTOR, ${cfg.internal-screen.scale}"
"QT_SCALE_FACTOR, 1.1"
# set the scale factor for GTK apps
];
};
plugins = [
# Global overview
pkgs.hyprlandPlugins.hyprspace
# Touch gestures
# pkgs.hyprlandPlugins.hyprgrass
];
};
};
}

View File

@@ -1,154 +0,0 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
config = {
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
"$mod" = "SUPER";
# Global bindings
bind = [
# Launch applications
"$mod, space, exec, ${lib.getExe config.nix-config.launcher}"
"$mod, return, exec, kitty"
"$mod, b, exec, ${cfg.browser}"
"$mod, s, exec, ${cfg.ide}"
"$mod, e, exec, 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
"$mod+Shift, Q, forcekillactive,"
# Toggle Floating and reduce size
"$mod, f, togglefloating,"
"$mod, f, resizeactive, 50% 50%,"
# "$mod, P, pseudo, " # dwindle
# "$mod, J, togglesplit, " # dwindle
# Toggle fullscreen
"$mod+Shift, f, fullscreen,"
# Alt-tab alternative
"$mod, Tab, cyclenext,"
"$mod, Tab, bringactivetotop,"
# Move the window
"$mod+Shift, left, movewindow, l"
"$mod+Shift, right, movewindow, r"
"$mod+Shift, up, movewindow, u"
"$mod+Shift, down, movewindow, d"
# Move window to workspace
"$mod+Ctrl, left, movetoworkspace, -1"
"$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"
# move to scratch workspace
"$mod+Ctrl, up, movetoworkspace, special:magic"
"$mod+Ctrl, down, movetoworkspace, prev"
# switch to scratch workspace
"$mod, up, togglespecialworkspace, magic"
"$mod, down, togglespecialworkspace, magic"
# Screenshot
"$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# # somehow logitech calls this SUPER_L but we refer to it by its code
"SUPER_L&Shift_L, S, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"Shift&SUPER_L&Shift_L, S, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# when there is a dedicated screenshot button
", 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}"
];
# 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
bindl = [
", XF86PowerOff, exec, hyprctl dispatch dpms on eDP-1"
## depending on the setup we expect different behaviors when closing the lid:
# either sleep & lock screen OR switch to clamshell mode
# through the `services.logind.lidSwitch` and `services.logind.lidSwitchDocked` we can differentiate both cases
# when not docked, the system is put to sleep and the screen is implicitly locked as per the hypridle configuration
# when docked, the lid switch is ignored by logind and needs to be handled manually, see below:
# if an additional monitor is detected, simply deactivate the internal screen and continue working on the external monitor
", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1,disable"
## on reopening the lid, turn the internal screen back on
", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1"
# we need to reload the monitor configuration so that the internal screen is turned back on
", switch:off:Lid Switch, exec, hyprctl reload"
];
# bindr = [
# # Overview
# "$mod, , overview:toggle"
# ];
bindm = [
# move the window using left click
"$mod, mouse:272, movewindow"
# resize the window using right click
"$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
'';
};
};
}

View File

@@ -1,57 +0,0 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
config = {
wayland.windowManager.hyprland = {
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;
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"
];
# 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;
disable_hyprland_logo = true;
};
# 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"
];
};
};
};
}

View File

@@ -1,20 +0,0 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
# packages required by the current hyprland setup
home.packages = [
pkgs.hyprshot
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
];
# Also use gnome keyring
services.gnome-keyring.enable = true;
}

View File

@@ -3,14 +3,10 @@
programs.hyprlock = {
enable = true;
settings = {
general = {
# immediately lock the screen
grace = 0;
# no_fade_in = false;
# disable_loading_bar = false;
grace = 5;
no_fade_in = false;
disable_loading_bar = false;
};
background = {

View File

@@ -3,40 +3,37 @@
lib,
...
}:
let
with lib; let
# # load the wallpapers from the wallpapers directory - this gives a set with the folder content
# dirContent = builtins.readDir ../../../wallpapers;
# wallpaperString = lib.strings.concatMapStrings (x: " " + x) wallpapers;
# # # load each wallpaper and keep its path (now in the nix store) as an array
# # wallpapers = map (x: builtins.readDir "${../../../wallpapers}/${x.value}") dirContent;
# # wallpaperString = lib.strings.concatMapStrings (x: " " + x) wallpapers;
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
];
# # script that picks a random wallpaper from the array and sets it as the desktop background
# monitor = ""; # leave empty to set the wallpaper on all monitors
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"
'';
# wallpaperRandomizer = pkgs.writeShellScriptBin "wallpaperRandomizer" ''
# wallpaper=$(shuf -n 1 -e ${wallpaperString})
# hyprctl hyprpaper unload all
# hyprctl hyprpaper preload $wallpaper
# hyprctl hyprpaper wallpaper "${monitor},$wallpaper"
# '';
in {
home.packages = [wallpaperPicker];
# home.packages = [wallpaperRandomizer];
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
};
};
# settings = {
# ipc = "off";
# splash = false;
# };
# };
# systemd.user = {
# services.wallpaperRandomizer = {

View File

@@ -1,331 +1,211 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.style;
in
{inputs, pkgs, ...}:
{
options.nix-config.waybar = {
burninPrevention = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable burn-in prevention for Waybar";
example = ''
burninPrevention = true;
'';
# required to autoload fonts from packages installed via Home Manager
fonts.fontconfig.enable = true;
};
};
# waybar requires font-awesome
home.packages = [
pkgs.pavucontrol
];
config = {
# enable waybar
programs.waybar.enable = true;
programs.waybar = {
settings = {
# required to autoload fonts from packages installed via Home Manager
fonts.fontconfig.enable = true;
mainBar = {
margin-top = 2;
margin-bottom = 2;
margin-left = 5;
margin-right = 5;
layer = "top";
position = "top";
spacing = 5;
# waybar requires font-awesome
home.packages = [
pkgs.pavucontrol
];
modules-left = [
"hyprland/workspaces"
"hyprland/window"
];
# enable waybar
programs.waybar.enable = true;
programs.waybar = {
settings = {
modules-center = [
"clock"
"custom/notification"
];
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"
];
modules-right = [
"tray"
# "temperature"
# "group/expand"
# "bluetooth"
"wireplumber"
"network"
# "mpd"
"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 = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
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}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-ethernet = ''
{ifname} - {ipaddr}/{cidr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
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
}
];
# module specific settings
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
active = "";
default = "";
};
};
"hyprland/window"= {
"icon" = false;
"separate-outputs" = true;
"format" = "{}";
};
"clock" = {
format = "{:%H:%M}";
interval = 1;
tooltip-format = "<tt>{calendar}</tt>";
calendar = {
"format" = {
"today" = "<span color='#fAfBfC'><b>{}</b></span>";
};
};
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
tooltip = "true";
};
"bluetooth" = {
format-on = "󰂯";
format-off = "BT-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 = "blueman-manager";
};
"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-icons" = ["" "" "" "" "" "" "" "" ""];
};
"wireplumber" = {
scroll-step = 10;
format = "{icon} {volume}%";# {format_source}";
format-bluetooth = "{volume}% {icon}";# {format_source}";
format-bluetooth-muted = " {icon}";# {format_source}";
format-muted = " Muted";# {format_source}";
# format-source = " {volume}%";
# format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
default = [
""
""
""
];
};
on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center sound";
};
"tray" = {
spacing = 5;
};
"custom/notification" = {
tooltip = false;
format = "{icon} {}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "sleep 0.1 && task-waybar";
escape = true;
};
"network" = {
format = "󰤭";
format-wifi = "{icon} {essid}";
format-icons = [ "󰤯" "󰤟" "󰤢" "󰤥" "󰤨" ];
format-ethernet = "󰊗 {ipaddr}/{cidr}";
format-disconnected = "";
tooltip-format = "󰊗 {ifname} via {gwaddr}";
tooltip-format-wifi = "SSID: {essid}({signalStrength}%), {frequency} MHz\nInterface: {ifname}\nIP: {ipaddr}\nGW: {gwaddr}\n\n<span color='#a6da95'>{bandwidthUpBits}</span>\t<span color='#ee99a0'>{bandwidthDownBits}</span>\t<span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>";
tooltip-format-ethernet = "{ifname} ";
tooltip-format-disconnected = "Disconnected";
on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center wifi";
};
};
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;
}
}
'';
};
style = ''
* {
font-family: "FiraCode Nerd Font";
font-weight: bold;
font-size: 22px;
}
window#waybar {
background-color: transparent;
}
.module {
background: rgba(0, 0, 0, 0.6);
color: white;
border-radius: 5px;
padding: 5px 5px 5px 5px;
margin: 5px 0;
}
box.module button:hover {
box-shadow: inset 0 -3px #ffffff;
}
.modules-left {
padding: 3px;
}
.modules-right {
padding: 3px;
}
.modules-center {
padding: 3px;
}
#battery.warning {
background:rgba(240, 165, 0, 0.6);
}
#battery.critical {
background:rgba(255, 0, 0, 0.6);
}
'';
};
}

View File

@@ -1,14 +1,12 @@
{pkgs, lib, config, ...}:
{pkgs, lib, ...}:
let
cfg = config.nix-config.style;
stylix = import ./stylix.nix { inherit pkgs; };
in
{
programs.kitty = {
enable = true;
shellIntegration.enableFishIntegration = true;
settings = {
# # import the colors from the stylix theme, but keep the background black
# color0 = stylix.stylix.base16Scheme.base00;
# color8 = stylix.stylix.base16Scheme.base08;
@@ -35,20 +33,16 @@ in
# color15 = stylix.stylix.base16Scheme.base0F;
# also reuse the background opacity by stylix
background_opacity = cfg.terminalOpacity;
background_opacity = stylix.stylix.opacity.terminal;
background = "#000000";
font_family = cfg.monospaceFont;
font_size = cfg.fontSizes.terminal;
confirm_os_window_close = 0;
enable_audio_bell = false;
cursor_trail = 3;
cursor_trail_decay = "0.1 0.4";
url_style = "curly";
notify_on_cmd_finish = "unfocused";
window_padding_width = 5;
};
keybindings = {

View File

@@ -1,13 +1,8 @@
{pkgs, ...}:
{pkgs, ...}:
{
home.packages = [
pkgs.kubie
pkgs.kubectl
];
# Add the shell alias
programs.fish.shellAliases = {
k = "kubectl";
};
}

View File

@@ -1,123 +0,0 @@
{ config, pkgs, lib, ... }:
let
cfg = config.nix-config.style;
powerMenu = pkgs.writeShellScriptBin "power-menu" ''
options=" Power Off\n Reboot\n Lock\n Suspend"
selected=$(echo -e "$options" | fuzzel --dmenu --prompt "Power Menu" --lines 4 --width 20)
case "$selected" in
" Power Off") systemctl poweroff ;;
" Reboot") systemctl reboot ;;
" Lock") hyprlock ;;
" Suspend") systemctl suspend ;;
*) exit 1 ;;
esac
'';
filePicker = pkgs.writeShellScriptBin "file-picker" ''
files=$(${lib.getExe pkgs.fd} . $HOME --type f)
filesShortened=$(echo "$files" | sed "s|$HOME|~|g" | awk -F/ '{print $(NF)" ("$0")"}')
selected=$(echo "$filesShortened" | fuzzel --dmenu --prompt "🔎 " --placeholder "File search" --index)
if [ -n "$selected" ]; then
# Since fuzzel was launched with the --index option the actual path is now files[selected]
selectedPlusOne=$((selected + 1))
file=$(echo "$files" | sed -n "''${selectedPlusOne}p")
xdg-open "$file"
# plus one
else
echo "No file selected"
exit 1
fi
'';
emojiPicker = pkgs.writeShellScriptBin "emoji-picker" ''
curl -s https://raw.githubusercontent.com/littleboycoding/emoji-dmenu/refs/heads/master/emoji.txt | fuzzel --dmenu | cut -d ' ' -f 1 | wl-copy
'';
in
{
options.nix-config = {
powerMenu = lib.mkOption {
description = "Package to use as a power menu";
type = lib.types.package;
default = powerMenu;
};
launcher = lib.mkOption {
description = "Configuration for the launcher";
type = lib.types.package;
default = pkgs.fuzzel;
};
filePicker = lib.mkOption {
description = "Package to use as a file picker";
type = lib.types.package;
default = filePicker;
};
emojiPicker = lib.mkOption {
description = "Package to use as a emoji picker";
type = lib.types.package;
default = emojiPicker;
};
};
config = {
programs.fuzzel = {
enable = true;
settings = {
main = {
font = "monospace:size=${builtins.toString (cfg.fontSizes.applications - 1)}";
terminal = "${lib.getExe pkgs.kitty}";
layer = "overlay"; #or top?
use-bold = true;
dpi-aware = true;
icons-enabled = true;
match-mode = "fzf";
horizontal-pad = cfg.fontSizes.applications + 5;
vertical-pad = cfg.fontSizes.applications + 5;
inner-pad = cfg.fontSizes.applications;
show-actions = true;
lines = 12;
width = 50;
};
colors = {
background = "000000aa";
text = "ffffffaa";
# prompt
# placeholder
# input
match = "ffffffaa";
selection = "00000000";
selection-text = "ffffffbb";
selection-match = "ffffffaa";
};
border = {
width = 0;
radius = 15;
};
};
};
home.packages = with pkgs; [
powerMenu
filePicker
emojiPicker
];
};
}

View File

@@ -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";
}
'';
};
}

View File

@@ -1,6 +1,7 @@
{pkgs, ...}:
{pkgs, ...}:
{
home.packages = [
pkgs.obsidian
];
}

View File

@@ -1,36 +0,0 @@
{
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;
};
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
];
# add the quickshell config (whole directory) to XDG_CONFIG_HOME
# home.file.".config/quickshell/config".source = ./config;
};
}

View File

@@ -1,23 +0,0 @@
{ lib, config, ... }:
{
programs.ssh.enable = true;
programs.ssh.matchBlocks = {
"*" = {
identityFile = "${config.home.homeDirectory}/.ssh/main_key";
};
ela = lib.hm.dag.entryBefore ["eiger"] {
hostname = "ela.cscs.ch";
user = "rmoll";
identityFile = "${config.home.homeDirectory}/.ssh/cscs-key";
identitiesOnly = true;
};
eiger = {
hostname = "eiger.cscs.ch";
user = "rmoll";
identityFile = "${config.home.homeDirectory}/.ssh/cscs-key";
identitiesOnly = true;
proxyJump = "ela";
};
};
}

View File

@@ -1,182 +1,95 @@
{pkgs, config, lib, ...}:
let
cfg = config.nix-config.style;
in
{pkgs, ...}:
{
options.nix-config.style = {
stylix = {
# Stylix is already enabled since the system is configured to use it
# enable = true;
# don't theme applications by default
autoEnable = false;
cursor = {
size = lib.mkOption {
type = lib.types.int;
default = 22;
description = "Size of the cursor in pixels.";
};
package = pkgs.apple-cursor;
name = "macOS";
size = 32;
};
fontSizes = {
applications = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for applications.";
iconTheme = {
enable = true;
package = pkgs.tela-icon-theme;
};
image = ./../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg;
fonts = {
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
desktop = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for desktop icons.";
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
popups = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for popups.";
monospace = {
package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; };
name = "FiraCode Nerd Font Mono";
};
terminal = lib.mkOption {
type = lib.types.int;
default = 12;
description = "Font size for terminal.";
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
sizes = {
applications = 14;
desktop = 14;
popups = 12;
terminal = 14;
};
};
terminalOpacity = lib.mkOption {
type = lib.types.float;
default = 0.8;
description = "Terminal default opacity";
};
monospaceFont = lib.mkOption {
type = lib.types.str;
default = "FiraCode Nerd Font Mono";
description = "Monospace font. Needs to be installed.";
opacity = {
applications = 1.0;
desktop = 1.0;
popups = 0.9;
terminal = 0.8;
};
};
stylix.base16Scheme = {
scheme = "onelight";
author = "https://github.com/one-dark";
base00 = "#fafafa";
base01 = "#f4f4f4";
base02 = "#e5e5e6";
base03 = "#dfdfe0";
base04 = "#d7d7d8";
base05 = "#383a42";
base06 = "#202227";
base07 = "#090a0b";
base08 = "#d84a3d";
base09 = "#a626a4";
base0A = "#c18401";
base0B = "#50a14f";
base0C = "#0070a8";
base0D = "#4078f2";
base0E = "#a626a4";
base0F = "#986801";
config = {
};
stylix = {
# Stylix is already enabled since the system is configured to use it
enable = true;
image = ./../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg;
# don't theme applications by default
autoEnable = false;
stylix.targets = {
hyprpaper.enable = true;
hyprlock.enable = true;
wofi.enable = true;
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = cfg.cursor.size;
};
# disabled because they overwrite too many settings
# vscode.enable = true;
# waybar.enable = true;
# kitty.enable = true;
iconTheme = {
enable = true;
package = pkgs.tela-icon-theme;
};
polarity = lib.mkDefault "dark";
fonts = {
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
monospace = {
package = pkgs.nerd-fonts.fira-code;
name = cfg.monospaceFont;
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
sizes = {
applications = cfg.fontSizes.applications;
desktop = cfg.fontSizes.desktop;
popups = cfg.fontSizes.popups;
terminal = cfg.fontSizes.terminal;
};
};
opacity = {
applications = 1.0;
desktop = 1.0;
popups = 0.9;
terminal = cfg.terminalOpacity;
};
base16Scheme = {
scheme = "onelight";
author = "https://github.com/one-dark";
base00 = "#fafafa";
base01 = "#f4f4f4";
base02 = "#e5e5e6";
base03 = "#dfdfe0";
base04 = "#d7d7d8";
base05 = "#383a42";
base06 = "#202227";
base07 = "#090a0b";
base08 = "#d84a3d";
base09 = "#a626a4";
base0A = "#c18401";
base0B = "#50a14f";
base0C = "#0070a8";
base0D = "#4078f2";
base0E = "#a626a4";
base0F = "#986801";
};
targets = {
hyprpaper.enable = true;
hyprlock.enable = true;
# disabled because they overwrite too many settings
# gnome
# wofi
# vscode
# waybar
# kitty
fontconfig.enable = true;
font-packages.enable = true;
};
};
# https://pltanton.dev/posts/2024/02/nix-based-dark-light-theme-switch/
home.packages = [
(lib.lowPrio (pkgs.writeShellApplication {
name = "toggle-theme";
runtimeInputs = with pkgs; [ home-manager coreutils ripgrep ];
text =
''
"$(home-manager generations | head -1 | rg -o '/[^ ]*')"/specialisation/light-theme/activate
echo "Switched to light theme"
'';
}))
];
specialisation.light-theme.configuration = {
stylix = {
polarity = "light";
};
home.packages = [
(lib.hiPrio (pkgs.writeShellApplication {
name = "toggle-theme";
runtimeInputs = with pkgs; [ home-manager coreutils ripgrep ];
text =
''
"$(home-manager generations | head -2 | tail -1 | rg -o '/[^ ]*')"/activate
echo "Switched to dark theme"
'';
}))
];
};
};
}

View File

@@ -1,9 +0,0 @@
{
lib, pkgs, ...
}:
{
# requires avahi or similar
home.packages = with pkgs; [ uxplay ];
}

View File

@@ -1,139 +1,44 @@
{ config, pkgs, lib, ... }:
let
cfg = config.nix-config.style;
accent = "#ffffff";
background = "#000000";
background-alt = "#000000";
foreground = "##ffffff";
rounding = 5;
font-size = 25;
in {
wofiPowerMenu = pkgs.writeShellScriptBin "wofi-power-menu" ''
#!/usr/bin/env bash
home.packages = with pkgs; [ wofi-emoji ];
options=" Power Off\n Reboot\n Lock\n Suspend"
selected=$(echo -e "$options" | wofi --dmenu --prompt "Power Menu")
# --width 300 --height 250
programs.wofi = {
enable = true;
case "$selected" in
" Power Off") systemctl poweroff ;;
" Reboot") systemctl reboot ;;
" Lock") hyprlock ;;
" Suspend") systemctl suspend ;;
*) exit 1 ;;
esac
'';
wofiFilePicker = pkgs.writeShellScriptBin "wofi-file-picker" ''
#!/usr/bin/env bash
initial=$(find $HOME -maxdepth 2 -type f)
selected=$(printf "%s\n" $initial | wofi --dmenu --prompt "Select a file")
if [ -n "$selected" ]; then
xdg-open "$selected"
else
echo "No file selected"
exit 1
fi
'';
in
{
options.nix-config = {
powerMenu = lib.mkOption {
description = "Package to use as a power menu";
type = lib.types.package;
default = wofiPowerMenu;
settings = {
allow_markup = true;
width = 500;
height = 400;
show = "drun";
prompt = "Launch...";
normal_window = true;
layer = "top";
term = "foot";
orientation = "vertical";
halign = "fill";
line_wrap = "off";
dynamic_lines = false;
allow_images = true;
image_size = 24;
exec_search = false;
hide_search = false;
parse_search = false;
insensitive = true;
hide_scroll = true;
no_actions = true;
sort_order = "default";
gtk_dark = true;
filter_rate = 100;
key_expand = "Tab";
key_exit = "Escape";
};
};
config = {
programs.wofi = {
enable = true;
settings = {
# global layout
width = "50%";
height = "50%";
orientation = "vertical";
hide_scroll = true;
line_wrap = "off";
dynamic_lines = true;
# search behaviour
matching = "fuzzy";
single_click = true;
show = "drun";
prompt = "Launch...";
# normal_window = true;
layer = "top";
term = "foot";
halign = "fill";
# Rich rendering
allow_markup = true;
allow_images = true;
image_size = 24;
exec_search = false;
hide_search = false;
parse_search = false;
insensitive = true;
no_actions = true;
filter_rate = 100;
key_expand = "Tab";
key_exit = "Escape";
};
style = ''
* {
font-family: ${cfg.monospaceFont};
font-size: ${builtins.toString (cfg.fontSizes.desktop + 8)}px;
color: white;
background: transparent;
}
#window {
background: rgba(1, 1, 1, 0.5);
margin: auto;
padding: 10px;
}
#input {
padding: 10px;
margin-bottom: 10px;
border-radius: 15px;
}
#outer-box {
padding: 20px;
}
#img {
margin-right: 6px;
}
#entry {
padding: 10px;
border-radius: 15px;
}
#entry:selected {
background-color: #2e3440;
outline: none;
border: none;
}
#text {
margin: 2px;
}
'';
};
home.packages = with pkgs; [
wofiPowerMenu
wofi-emoji
];
};
}

View File

@@ -1,32 +1,23 @@
{inputs, pkgs, ...}:
{inputs, pkgs, ...}:
{
xdg.enable = true;
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
# configPackages = [ pkgs.hyprland ];
config = {
common.default = ["gtk"];
hyprland.default = ["gtk" "hyprland"];
};
configPackages = [ pkgs.hyprland ];
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-wlr
pkgs.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-gtk
];
};
xdg.mimeApps.defaultApplications = {
"text/*" = [ "code" ];
"application/x-yaml" = [ "code" ];
"application/pdf" = [ "papers" ];
"image/*" = [ "loupe" ];
"video/*" = [ "showtime" ];
xdg.userDirs = {
enable = true;
createDirectories = true;
desktop = "Desktop";
documents = "Documents";
# downloads = "Downloads";
pictures = "Pictures";
};
}

View File

@@ -1,7 +0,0 @@
{ config, pkgs, lib, inputs, ... }:
{
# agenix client
environment.systemPackages = [
inputs.agenix.packages."${system}".default
];
}

View File

@@ -1,88 +0,0 @@
{pkgs, lib, ...}:
let
snapshotsDir = "/snapshots/home";
in
{
environment.systemPackages = with pkgs; [
restic
btrbk
libnotify
];
# btrbk systemd service and timer for daily home snapshots
systemd.services.btrbk-home-snapshot = {
description = "Create daily btrbk snapshot of the home subvolume";
serviceConfig = {
Type = "oneshot";
User = "remy";
ExecStartPre = "${lib.getExe pkgs.libnotify} \"Backup\" \"Creating BTRBK snapshot of /home.\"";
# run the btrbk command as superuser
ExecStart = "+${lib.getExe pkgs.btrbk} -c /etc/btrbk/home.conf run";
Environment = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"; # ensure the notification is sent to the correct display
ExecStartPost = "${lib.getExe pkgs.libnotify} \"Backup\" \"Snapshot of /home created successfully.\"";
};
};
systemd.timers.btrbk-home-snapshot = {
enable = true;
description = "Daily timer for btrbk home snapshot";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "*-*-* 12:00";
Persistent = true; # ensures missed runs are triggered after resume
};
};
# ensure the target directory exists
systemd.tmpfiles.settings = {
"btrbk snapshots" = {
"${snapshotsDir}" = {
d = {
group = "root";
user = "root";
mode = "0770";
};
};
};
};
# btrbk config for home snapshots
environment.etc."btrbk/home.conf".text = ''
timestamp_format long
# keep snapshots for 2 days independently of the call
snapshot_preserve_min 2d
# retain daily snapshots for 14 days
snapshot_preserve 14d
subvolume /home
snapshot_dir ${snapshotsDir}
'';
# Now create a restic backup off the newest btrbk snapshot
systemd.services.restic-backup-latest-snapshot = {
description = "Backup home subvolume using restic";
serviceConfig = {
Type = "oneshot";
ExecStart = "${lib.getExe pkgs.restic} -r /home/snapshots/restic-backup backup /home/snapshots/home-$(date +%Y-%m-%d_%H-%M-%S)";
# send a notification when the service is done
ExecStartPost = "su remy -c 'notify-send \"Restic Backup\" \"Home backup created successfully.\"'";
};
};
# # the udev rule:
# services.udev.extraRules = ''
# ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="backup-restic", TAG+="systemd", ENV{SYSTEMD_WANTS}="backup-restic.service"
# '';
# # the systemd service:
# systemd.services.backup-restic = {
# description = "Backup using restic (triggered when USB drive is plugged in)";
# after = [ "local-fs.target" ];
# wantedBy = [ "multi-user.target" ];
# serviceConfig = {
# Type = "oneshot";
# # TODO: adapt command
# ExecStart = "${lib.getExe pkgs.restic} backup /home/username";
# };
# };
}

View File

@@ -1,31 +1,18 @@
{
config,
lib,
pkgs,
...
}:
{
environment.systemPackages = [
pkgs.bluez
# bluez-qt
# gnome.gnome-control-center
pkgs.gnome-bluetooth
];
services.dbus.packages = with pkgs; [
gnome-bluetooth
bluez
];
users.users.remy.extraGroups = [
"networkmanager"
];
hardware.bluetooth = {
enable = true;
powerOnBoot = false;
settings = {
General = {
Name = "Hello";
ControllerMode = "dual";
FastConnectable = "true";
Experimental = "true";
};
Policy = {
AutoEnable = "true";
};
};
};
}
services.blueman.enable = true;
}

View File

@@ -1,35 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options.nix-config.gnome.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable GNOME desktop environment.";
};
config = lib.mkIf config.nix-config.gnome.enable {
services = {
# displayManager.gdm.enable = true;
# desktopManager.gnome.enable = true;
# gnome = {
# core-apps.enable = false;
# core-developer-tools.enable = false;
# games.enable = false;
# };
# # Exclude some packages to keep the installation lean
# environment.gnome.excludePackages = with pkgs; [
# gnome-tour
# gnome-user-docs
# ];
# };
xserver.enable = true;
xserver.displayManager.gdm.enable = true;
xserver.desktopManager.gnome.enable = true;
};
};
}

View File

@@ -4,45 +4,22 @@
pkgs,
...
}:
let
cfg = config.nix-config;
in
{
config = {
# Use hyprland as the main desktop environment but use gdm as desktop manager
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
services.displayManager = {
defaultSession = "hyprland";
};
services.xserver.displayManager.gdm = {
enable = true;
wayland = true;
};
services.gvfs.enable = true;
security.pam.services.hyprlock = {};
security.pam.services.gdm.enableGnomeKeyring = true;
# Enable RTKit for real-time audio processing, ...
# improving audio performance and reducing dropouts.
security.rtkit.enable = true;
# Enable D-Bus for inter-process communication
services.dbus.enable = true;
programs.dconf.enable = true;
# Use hyprland as the main desktop environment but use gdm as desktop manager
programs.hyprland = {
enable = true;
xwayland.enable = false;
};
services.displayManager = {
defaultSession = "hyprland";
};
services.xserver.displayManager.gdm = {
enable = true;
wayland = true;
};
security.pam.services.hyprlock = {};
}

View File

@@ -1,11 +0,0 @@
{ config, pkgs, ... }:
{
# Configure console keymap
console.keyMap = "de";
i18n.defaultLocale = "en_US.UTF-8";
# i18n.supportedLocales = [ "en_US.UTF-8" "de_DE.UTF-8" ];
time.timeZone = "Europe/Berlin";
}

View File

@@ -1,4 +0,0 @@
{config, ...}:
{
programs.nix-ld.enable = true;
}

View File

@@ -1,35 +1,7 @@
{
lib,
config,
...
}:
let
cfg = config.nix-config.networking;
in
{
options = {
nix-config.networking.hostName = lib.mkOption {
type = lib.types.str;
default = "nixos";
};
};
config = {
networking.hostName = cfg.hostName;
networking.networkmanager.enable = true;
networking.networkmanager.wifi.powersave = lib.mkDefault true;
users.users.${config.nix-config.userName}.extraGroups = [
"networkmanager"
];
services.avahi.enable = true;
services.avahi.openFirewall = true;
# networking.firewall = {
# enable = false;
# };
};
}
{lib, ...}:{
networking.networkmanager.enable = true;
networking.networkmanager.wifi.powersave = lib.mkDefault true;
users.users.remy.extraGroups = [
"networkmanager"
];
}

View File

@@ -1,10 +0,0 @@
{
config,
pkgs,
...
}:
{
programs.nh = {
enable = true;
};
}

View File

@@ -16,9 +16,8 @@
hardware.graphics.enable = lib.mkForce true;
hardware.nvidia = lib.mkForce {
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.enable = true;
powerManagement.finegrained = false;
# features not available for the old graphics card
open = false;
nvidiaSettings = false;
@@ -28,13 +27,7 @@
intelBusId = "PCI:0:2:0";
};
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
version = "575.51.02";
sha256_64bit = "sha256-XZ0N8ISmoAC8p28DrGHk/YN1rJsInJ2dZNL8O+Tuaa0=";
openSha256 = "sha256-NQg+QDm9Gt+5bapbUO96UFsPnz1hG1dtEwT/g/vKHkw=";
settingsSha256 = "sha256-6n9mVkEL39wJj5FB1HBml7TTJhNAhS/j5hqpNGFQE4w=";
usePersistenced = false;
};
package = config.boot.kernelPackages.nvidiaPackages.beta;
};
# overwrite the blacklists set previously
boot.extraModprobeConfig = lib.mkForce "";
@@ -51,7 +44,7 @@
blacklist nouveau
options nouveau modeset=0
'';
services.udev.extraRules = ''
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
@@ -68,3 +61,7 @@
boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" ];
}
# Warning: used to have
# lib.mkdDefault

View File

@@ -6,7 +6,7 @@
}:
{
# Needs to be explicitly set to false...
services.pulseaudio.enable = false;
hardware.pulseaudio.enable = false;
# OR
services.pipewire = {
enable = true;

View File

@@ -1,24 +1,24 @@
{
config,
lib,
pkgs,
...
config,
lib,
pkgs,
...
}:
{
virtualisation.containers.enable = true;
virtualisation = {
podman = {
enable = true;
virtualisation.containers.enable = true;
virtualisation = {
podman = {
enable = true;
dockerCompat = false;
dockerCompat = false;
# Required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
# Required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
};
};
};
# Useful other development tools
environment.systemPackages = with pkgs; [
podman-compose # start group of containers for dev
];
# Useful other development tools
environment.systemPackages = with pkgs; [
podman-compose # start group of containers for dev
];
}

View File

@@ -1,95 +1,30 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
options.nix-config = {
power = {
batteryThresholds = lib.mkOption {
type = lib.types.listOf lib.types.int;
default = [ 60 80 ];
description = "Battery charge thresholds for power management.";
};
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 50;
};
};
imports = [
inputs.watt.nixosModules.default
];
config = {
# 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";
# # 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";
# # 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;
# 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;
# };
# };
systemd.sleep.extraConfig = ''
AllowSuspend=yes
AllowHibernation=yes
AllowHybridSleep=yes
AllowSuspendThenHibernate=yes
'';
services.watt = {
enable = true;
settings = {
battery_charge_thresholds = [
40
80
];
};
};
# write the watt-config under /etc/watt.toml
services.irqbalance = {
enable = true;
};
services.thermald = {
enable = true;
};
};
systemd.sleep.extraConfig = ''
AllowSuspend=yes
AllowHibernation=yes
AllowHybridSleep=yes
AllowSuspendThenHibernate=yes
'';
}

View File

@@ -5,29 +5,7 @@
...
}:
{
stylix = {
enable = true;
polarity = "dark";
homeManagerIntegration.followSystem = false;
base16Scheme = {
# scheme = "onedark";
# author = "https://github.com/one-dark";
base00 = "#282c34";
base01 = "#353b45";
base02 = "#3e4451";
base03 = "#545862";
base04 = "#565c64";
base05 = "#abb2bf";
base06 = "#b6bdca";
base07 = "#c8ccd4";
base08 = "#e06c75";
base09 = "#d19a66";
base0A = "#e6c07b";
base0B = "#98c379";
base0C = "#56b6c2";
base0D = "#61afef";
base0E = "#c678dd";
base0F = "#be5046";
};
};
stylix.enable = true;
stylix.image = ./../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg;
}

View File

@@ -1,28 +0,0 @@
{
lib,
config,
...
}:
let
cfg = config.nix-config;
in
{
options = {
nix-config.userName = lib.mkOption {
type = lib.types.str;
default = "remy";
};
};
config = {
users.users.${cfg.userName} = {
isNormalUser = true;
extraGroups = [
"wheel" # Enable sudo for the user.
"input"
# other groups are added as needed, eg. networkmanager
];
};
};
}

Submodule secrets deleted from 2aef0ad374

11
secrets/secrets.nix Normal file
View File

@@ -0,0 +1,11 @@
let
remy-nix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMU7pWZfs7GfFTvqljA99pJV9DGJIPH+eK6DvGqBs4pG";
remy-arch = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOP0PZqY8/YfV0NnVbFs2fZLj+nXXVJ8bDo03TyYDfW1";
users = [remy-arch remy-nix];
in {
"secret1.age".publicKeys = users;
"wifi.age".publicKeys = users;
}

BIN
secrets/wifi.age Normal file

Binary file not shown.

View File

@@ -1,5 +1,25 @@
{ config, pkgs, lib, ... }:
with lib.hm.gvariant;
{
imports = [
../modules/home-manager/browser.nix
../modules/home-manager/code.nix
../modules/home-manager/dev.nix
../modules/home-manager/documents.nix
../modules/home-manager/fish.nix
../modules/home-manager/flatpaks.nix
../modules/home-manager/hypr
../modules/home-manager/keepassxc.nix
../modules/home-manager/kitty.nix
../modules/home-manager/kubectl.nix
../modules/home-manager/obsidian.nix
../modules/home-manager/owncloud-client.nix
../modules/home-manager/stylix.nix
../modules/home-manager/thunderbird.nix
../modules/home-manager/wofi.nix
../modules/home-manager/xdg-portals.nix
];
## Home Manager configuration
home.stateVersion = "24.05";
# Let Home Manager install and manage itself.
@@ -15,30 +35,4 @@
userName = "Remy Moll";
userEmail = "me@moll.re";
};
## XDG configuration
xdg = {
mimeApps = {
enable = true;
defaultApplications = {
"inode/directory" = "org.gnome.Nautilus.desktop";
"application/zip" = "org.gnome.FileRoller.desktop";
"application/octet-stream" = "org.gnome.GHex.desktop";
# pdfs
"application/pdf" = "org.gnome.Evince.desktop";
# links
"x-scheme-handler/https" = "firefox.desktop"; # Links
"x-scheme-handler/http" = "firefox.desktop"; # Links
# images
# "image/png" = "org.gnome.Evince.desktop";
# "image/jpeg" = "org.gnome.Evince.desktop";
# "image/gif" = "org.gnome.Evince.desktop";
# "image/svg+xml" = "org.gnome.Evince.desktop";
# "image/tiff" = "org.gnome.Evince.desktop";
# text-based
"text/*" = "vscode.desktop";
};
};
};
}

View File

@@ -1,38 +0,0 @@
{ config, pkgs, lib, ... }:
with lib.hm.gvariant;
{
config = {
nix-config = {
hypr = {
internal-screen = {
resolution = "3840x2160";
scale = "1.666667";
};
};
};
};
imports = [
../remy.nix
../../modules/home-manager/browser.nix
../../modules/home-manager/code.nix
../../modules/home-manager/dev.nix
../../modules/home-manager/documents.nix
../../modules/home-manager/fish.nix
../../modules/home-manager/flatpaks.nix
../../modules/home-manager/hypr
../../modules/home-manager/keepassxc.nix
../../modules/home-manager/kitty.nix
../../modules/home-manager/kubectl.nix
../../modules/home-manager/obsidian.nix
../../modules/home-manager/owncloud-client.nix
../../modules/home-manager/ssh.nix
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/wofi.nix
../../modules/home-manager/xdg-portals.nix
];
}

View File

@@ -1,37 +0,0 @@
{ config, pkgs, lib, ... }:
with lib.hm.gvariant;
{
config = {
nix-config = {
# hypr = {
# internal-screen = {
# resolution = "auto";
# scale = "auto";
# };
# };
};
};
imports = [
../remy.nix
../../modules/home-manager/browser.nix
../../modules/home-manager/code.nix
../../modules/home-manager/dev.nix
../../modules/home-manager/documents.nix
../../modules/home-manager/fish.nix
../../modules/home-manager/flatpaks.nix
# ../../modules/home-manager/hypr
../../modules/home-manager/keepassxc.nix
../../modules/home-manager/kitty.nix
../../modules/home-manager/kubectl.nix
../../modules/home-manager/obsidian.nix
../../modules/home-manager/owncloud-client.nix
../../modules/home-manager/ssh.nix
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/wofi.nix
# ../../modules/home-manager/xdg-portals.nix
];
}

View File

@@ -1,45 +0,0 @@
{ config, nixpkgs, lib, ... }:
with lib.hm.gvariant;
{
config = {
nix-config = {
hypr = {
internal-screen = {
resolution = "2944x1840@90.00";
scale = "1.6";
};
};
quickshell = {
enable = true;
};
};
};
imports = [
../remy.nix
../../modules/home-manager/browser.nix
../../modules/home-manager/code.nix
../../modules/home-manager/dev.nix
../../modules/home-manager/directories.nix
../../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
../../modules/home-manager/ssh.nix
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/uxplay.nix
# ../../modules/home-manager/wofi.nix
../../modules/home-manager/xdg-portals.nix
];
}

View File

@@ -1,4 +0,0 @@
{ config, lib, pkgs, ... }:
{
nixpkgs.config.allowUnfree = true;
}

25
variable.nix Normal file
View File

@@ -0,0 +1,25 @@
{ config, ... }:
{
config.var = {
hostname = "garnix";
username = "remy";
configDirectory = "/home/" + config.var.username
+ "/.config/nixos"; # The path of the nixos configuration directory
keyboardLayout = "de";
location = "Berlin";
timeZone = "Europe/Berlin";
defaultLocale = "en_US.UTF-8";
extraLocale = "de_DE.UTF-8";
git = {
username = "Hadi";
email = "112569860+anotherhadi@users.noreply.github.com";
};
autoUpgrade = false;
autoGarbageCollector = true;
};
}