Compare commits
24 Commits
076c892b4f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ab5be9644 | |||
| 8772229192 | |||
| 625039ee58 | |||
| 7b9122fe7f | |||
| 94f392c388 | |||
| efe873d714 | |||
| a8d8c4dde9 | |||
| f5d5791efd | |||
| 6c53fe1aae | |||
| 2e3b0b6a35 | |||
| 38dc75a6e1 | |||
| 82e26ee498 | |||
| 0a731ef17f | |||
| 58b0456f8c | |||
| b24d0f466a | |||
| d91ebe083d | |||
| 1d2b3f799d | |||
| 5c79c29b7d | |||
| 1cd68c8ce1 | |||
| b22e6ccc91 | |||
| 03784c606c | |||
| d58bd057ac | |||
| b2a1f39893 | |||
| bbfec6ea9a |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,2 +1,4 @@
|
|||||||
# Result is a symlink to the built iso
|
# Result is a symlink to the built iso
|
||||||
result
|
result
|
||||||
|
# direnv binaries
|
||||||
|
.direnv
|
||||||
|
|||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "secrets"]
|
||||||
|
path = secrets
|
||||||
|
url = ssh://git@git.kluster.moll.re:2222/remoll/nixos-secrets.git
|
||||||
12
.sops.yaml
Normal file
12
.sops.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
keys:
|
||||||
|
- &remy_usb age1027e2vu808mvf95m4f0am3aeg88n8vgzt56s04ndpkgm7awzeajspxl6tu
|
||||||
|
- &remy_yoga ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAX4zsiXSSWbE75C0wyBVwaHOw6Gsbh/WqQsgEhvPwT8 remy@nyx
|
||||||
|
|
||||||
|
- &host_yoga age1ckqer7nxzq7q58v9xaqy8ac9vx2va69a46t86wp9m78pj5dpuy3sq8xeaj
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *remy_usb
|
||||||
|
- *remy_yoga
|
||||||
|
- *host_yoga
|
||||||
48
README.md
48
README.md
@@ -17,19 +17,28 @@ Don't forget to add the `#<host>` to the end of the target to specify the host c
|
|||||||
|
|
||||||
### Spectre
|
### Spectre
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
### Deploying to a machine
|
### Deploying to a machine
|
||||||
Run
|
Run
|
||||||
```bash
|
```bash
|
||||||
nixos-rebuild switch --flake <target>#<machine>
|
nixos-rebuild switch --flake <target>#<machine>
|
||||||
# for instance
|
# for instance
|
||||||
nixos-rebuild switch --flake .#spectre
|
nixos-rebuild switch --flake .#Nixtre
|
||||||
```
|
```
|
||||||
to apply the configuration.
|
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
|
### Installer iso
|
||||||
To build an installer iso, run
|
To build an installer iso, run
|
||||||
```bash
|
```bash
|
||||||
@@ -38,9 +47,40 @@ nix build .#nixosConfigurations.bcachefs-iso.config.system.build.isoImage
|
|||||||
This will create an iso image in the result directory.
|
This will create an iso image in the result directory.
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
TODO - disable root user
|
||||||
|
```
|
||||||
|
I install with --no-root-passwd and set users.mutableUsers = false in configuration.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Inspirations
|
## Inspirations
|
||||||
- https://github.com/the-nix-way/dev-templates
|
- https://github.com/the-nix-way/dev-templates
|
||||||
- https://fasterthanli.me/series/building-a-rust-service-with-nix/part-10
|
- https://fasterthanli.me/series/building-a-rust-service-with-nix/part-10
|
||||||
- https://codeberg.org/theDoctor/nixOS-config
|
- https://ianthehenry.com/posts/how-to-learn-nix/profiles
|
||||||
- https://ianthehenry.com/posts/how-to-learn-nix/profiles/
|
- https://github.com/JohnRTitor/nix-conf
|
||||||
|
- https://github.com/mwaldleben/nix-config
|
||||||
|
- https://github.com/anotherhadi/nixy
|
||||||
|
- https://github.com/Numb-0/nix-0
|
||||||
|
- https://github.com/Frost-Phoenix/nixos-config
|
||||||
|
- 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
|
||||||
|
|||||||
471
dconf.conf
471
dconf.conf
@@ -1,471 +0,0 @@
|
|||||||
[io/github/celluloid-player/celluloid]
|
|
||||||
settings-migrated=true
|
|
||||||
|
|
||||||
[io/github/celluloid-player/celluloid/window-state]
|
|
||||||
height=425
|
|
||||||
loop-playlist=false
|
|
||||||
maximized=true
|
|
||||||
playlist-width=250
|
|
||||||
show-controls=true
|
|
||||||
show-playlist=false
|
|
||||||
volume=0.80000000000000004
|
|
||||||
width=296
|
|
||||||
|
|
||||||
[org/gnome/Console]
|
|
||||||
audible-bell=false
|
|
||||||
font-scale=1.0
|
|
||||||
last-window-maximised=true
|
|
||||||
last-window-size=(1131, 1048)
|
|
||||||
theme='night'
|
|
||||||
|
|
||||||
[org/gnome/Extensions]
|
|
||||||
window-maximized=true
|
|
||||||
|
|
||||||
[org/gnome/Loupe]
|
|
||||||
show-properties=true
|
|
||||||
|
|
||||||
[org/gnome/Weather]
|
|
||||||
locations=[<(uint32 2, <('Zürich', 'LSZH', true, [(0.82874050067087668, 0.14893475701908529)], [(0.82670429484574492, 0.14922565104551519)])>)>]
|
|
||||||
window-height=495
|
|
||||||
window-maximized=false
|
|
||||||
window-width=992
|
|
||||||
|
|
||||||
[org/gnome/World/Secrets]
|
|
||||||
last-opened-database='davs://nextcloud.kluster.moll.re/remote.php/dav/files/admin/Various/KeePass/keepass.kdbx'
|
|
||||||
last-opened-list=['davs://nextcloud.kluster.moll.re/remote.php/dav/files/admin/Various/KeePass/keepass.kdbx']
|
|
||||||
window-size=[960, 1048]
|
|
||||||
|
|
||||||
[org/gnome/calculator]
|
|
||||||
accuracy=9
|
|
||||||
angle-units='degrees'
|
|
||||||
base=10
|
|
||||||
button-mode='basic'
|
|
||||||
number-format='automatic'
|
|
||||||
refresh-interval=0
|
|
||||||
show-thousands=false
|
|
||||||
show-zeroes=false
|
|
||||||
source-currency=''
|
|
||||||
source-units='degree'
|
|
||||||
target-currency=''
|
|
||||||
target-units='radian'
|
|
||||||
window-maximized=false
|
|
||||||
window-size=(360, 740)
|
|
||||||
word-size=64
|
|
||||||
|
|
||||||
[org/gnome/calendar]
|
|
||||||
active-view='month'
|
|
||||||
window-maximized=true
|
|
||||||
window-size=(768, 600)
|
|
||||||
|
|
||||||
[org/gnome/clocks/state/window]
|
|
||||||
maximized=false
|
|
||||||
panel-id='world'
|
|
||||||
size=(870, 690)
|
|
||||||
|
|
||||||
[org/gnome/control-center]
|
|
||||||
last-panel='display'
|
|
||||||
window-state=(1718, 851, false)
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders]
|
|
||||||
folder-children=['Utilities', 'YaST', '1aa8a471-a3d4-448f-979d-708f041bd93e', '9a796cbb-fc11-4e0c-92ea-bbf29cc78df0', 'a683fc46-9a24-41c2-91e9-7637c554fdc4', 'aee3ca9c-d66d-42f4-9b76-4dda08403814', '599d49f8-20cb-482c-a619-451cf4f561a3', '212ada4d-a2fa-4063-b6b1-24b711d4e9ab', '862c0f6e-86e2-40fe-a06f-5d638a5bc5e7', '90c1ffb4-572f-4a17-8793-a248f0ee26e4', 'f5961050-635b-4ad1-91e1-3a67538a236b', '5ea1c1fc-c589-42d3-bbaa-05428cb9e434', '496a9ca3-5d6b-4231-9434-cf1da320fe55']
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/1aa8a471-a3d4-448f-979d-708f041bd93e]
|
|
||||||
apps=['bvnc.desktop', 'avahi-discover.desktop', 'bssh.desktop', 'thorium-shell.desktop', 'org.gnome.PowerStats.desktop', 'stoken-gui-small.desktop', 'stoken-gui.desktop', 'qvidcap.desktop', 'qv4l2.desktop', 'electron25.desktop', 'btop.desktop', 'lstopo.desktop', 'mpv.desktop', 'gtk-lshw.desktop']
|
|
||||||
name='Useless'
|
|
||||||
translate=false
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/212ada4d-a2fa-4063-b6b1-24b711d4e9ab]
|
|
||||||
apps=['jhelioviewer.desktop']
|
|
||||||
name='Unnamed Folder'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/496a9ca3-5d6b-4231-9434-cf1da320fe55]
|
|
||||||
apps=['com.github.flxzt.rnote.desktop', 'dev.linwood.butterfly.desktop', 'com.github.scrivanolabs.scrivano.desktop']
|
|
||||||
name='Unnamed Folder'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/599d49f8-20cb-482c-a619-451cf4f561a3]
|
|
||||||
apps=['electron28.desktop', 'electron30.desktop', 'electron29.desktop', 'cmake-gui.desktop', 'electron31.desktop', 'jshell-java17-openjdk.desktop', 'jconsole-java17-openjdk.desktop']
|
|
||||||
name='Programming'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/5ea1c1fc-c589-42d3-bbaa-05428cb9e434]
|
|
||||||
apps=['com.calibre_ebook.calibre.ebook-viewer.desktop', 'com.calibre_ebook.calibre.lrfviewer.desktop', 'com.calibre_ebook.calibre.ebook-edit.desktop', 'com.calibre_ebook.calibre.desktop']
|
|
||||||
name='Calibre'
|
|
||||||
translate=false
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/862c0f6e-86e2-40fe-a06f-5d638a5bc5e7]
|
|
||||||
apps=['net.danigm.timetrack.desktop']
|
|
||||||
name='Unnamed Folder'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/90c1ffb4-572f-4a17-8793-a248f0ee26e4]
|
|
||||||
apps=['com.mattjakeman.ExtensionManager.desktop', 'org.gnome.Extensions.desktop']
|
|
||||||
name='Accessories'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/9a796cbb-fc11-4e0c-92ea-bbf29cc78df0]
|
|
||||||
apps=['Deep Rock Galactic.desktop', 'The Sims 4.desktop', 'steam.desktop', 'org.ryujinx.Ryujinx.desktop', 'net.veloren.airshipper.desktop', 'org.DolphinEmu.dolphin-emu.desktop', 'discord.desktop', 'simutrans.desktop', 'Darksiders Warmastered Edition.desktop', 'gearlever_curseforge_cd3cee.desktop']
|
|
||||||
name='Games'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/Utilities]
|
|
||||||
apps=['gnome-abrt.desktop', 'gnome-system-log.desktop', 'nm-connection-editor.desktop', 'org.gnome.baobab.desktop', 'org.gnome.Connections.desktop', 'org.gnome.DejaDup.desktop', 'org.gnome.Dictionary.desktop', 'org.gnome.DiskUtility.desktop', 'org.gnome.eog.desktop', 'org.gnome.FileRoller.desktop', 'org.gnome.fonts.desktop', 'org.gnome.seahorse.Application.desktop', 'org.gnome.tweaks.desktop', 'org.gnome.Usage.desktop', 'vinagre.desktop']
|
|
||||||
categories=['X-GNOME-Utilities']
|
|
||||||
excluded-apps=['org.gnome.Evince.desktop']
|
|
||||||
name='X-GNOME-Utilities.directory'
|
|
||||||
translate=true
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/YaST]
|
|
||||||
categories=['X-SuSE-YaST']
|
|
||||||
name='suse-yast.directory'
|
|
||||||
translate=true
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/a683fc46-9a24-41c2-91e9-7637c554fdc4]
|
|
||||||
apps=['jconsole-java-openjdk.desktop', 'jshell-java-openjdk.desktop']
|
|
||||||
name='Unnamed Folder'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/aee3ca9c-d66d-42f4-9b76-4dda08403814]
|
|
||||||
apps=['codium-wayland.desktop', 'codium.desktop']
|
|
||||||
name='Accessories'
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders/folders/f5961050-635b-4ad1-91e1-3a67538a236b]
|
|
||||||
apps=['cafe.avery.Delfin.desktop']
|
|
||||||
name='Unnamed Folder'
|
|
||||||
|
|
||||||
[org/gnome/desktop/background]
|
|
||||||
color-shading-type='solid'
|
|
||||||
picture-options='zoom'
|
|
||||||
picture-uri='file:///mnt/media/@Bulk/Wallpaper/Linux/arch_btw_Gilded Glow.png'
|
|
||||||
picture-uri-dark='file:///mnt/media/@Bulk/Wallpaper/Linux/arch_btw_Gilded Glow.png'
|
|
||||||
primary-color='#000000000000'
|
|
||||||
secondary-color='#000000000000'
|
|
||||||
|
|
||||||
[org/gnome/desktop/calendar]
|
|
||||||
show-weekdate=false
|
|
||||||
|
|
||||||
[org/gnome/desktop/input-sources]
|
|
||||||
per-window=true
|
|
||||||
sources=[('xkb', 'de'), ('xkb', 'ch'), ('xkb', 'us')]
|
|
||||||
xkb-options=['lv3:ralt_switch']
|
|
||||||
|
|
||||||
[org/gnome/desktop/interface]
|
|
||||||
clock-show-weekday=true
|
|
||||||
color-scheme='prefer-dark'
|
|
||||||
cursor-theme='Qogir'
|
|
||||||
enable-animations=true
|
|
||||||
font-antialiasing='rgba'
|
|
||||||
font-hinting='slight'
|
|
||||||
font-name='Cantarell 11'
|
|
||||||
icon-theme='Qogir'
|
|
||||||
monospace-font-name='Fira Code 10'
|
|
||||||
show-battery-percentage=true
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/keyboard]
|
|
||||||
numlock-state=true
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/mouse]
|
|
||||||
natural-scroll=false
|
|
||||||
speed=0.20851063829787231
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/stylus/default-04f3:2817]
|
|
||||||
eraser-pressure-curve=[0, 0, 100, 100]
|
|
||||||
pressure-curve=[0, 0, 100, 100]
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/tablets/04f3:2817]
|
|
||||||
area=[0.0, 0.0, 0.0, 0.0]
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/touchpad]
|
|
||||||
speed=0.16872427983539096
|
|
||||||
tap-to-click=true
|
|
||||||
two-finger-scrolling-enabled=true
|
|
||||||
|
|
||||||
[org/gnome/desktop/privacy]
|
|
||||||
old-files-age=uint32 30
|
|
||||||
recent-files-max-age=30
|
|
||||||
report-technical-problems=false
|
|
||||||
|
|
||||||
[org/gnome/desktop/remote-desktop/rdp]
|
|
||||||
enable=false
|
|
||||||
screen-share-mode='extend'
|
|
||||||
tls-cert='/home/remy/.local/share/gnome-remote-desktop/rdp-tls.crt'
|
|
||||||
tls-key='/home/remy/.local/share/gnome-remote-desktop/rdp-tls.key'
|
|
||||||
view-only=true
|
|
||||||
|
|
||||||
[org/gnome/desktop/screensaver]
|
|
||||||
color-shading-type='solid'
|
|
||||||
picture-options='zoom'
|
|
||||||
picture-uri='file:///home/remy/.local/share/backgrounds/2022-09-12-22-02-00-arch_btw_In%20the%20Noise.png'
|
|
||||||
primary-color='#000000000000'
|
|
||||||
secondary-color='#000000000000'
|
|
||||||
|
|
||||||
[org/gnome/desktop/search-providers]
|
|
||||||
disabled=@as []
|
|
||||||
sort-order=['org.gnome.Contacts.desktop', 'org.gnome.Documents.desktop', 'org.gnome.Nautilus.desktop']
|
|
||||||
|
|
||||||
[org/gnome/desktop/session]
|
|
||||||
idle-delay=uint32 300
|
|
||||||
|
|
||||||
[org/gnome/desktop/sound]
|
|
||||||
event-sounds=true
|
|
||||||
theme-name='__custom'
|
|
||||||
|
|
||||||
[org/gnome/desktop/wm/keybindings]
|
|
||||||
maximize=@as []
|
|
||||||
switch-input-source=@as []
|
|
||||||
switch-input-source-backward=@as []
|
|
||||||
unmaximize=@as []
|
|
||||||
|
|
||||||
[org/gnome/desktop/wm/preferences]
|
|
||||||
action-middle-click-titlebar='lower'
|
|
||||||
action-right-click-titlebar='none'
|
|
||||||
button-layout='appmenu:close'
|
|
||||||
|
|
||||||
[org/gnome/eog/ui]
|
|
||||||
sidebar=false
|
|
||||||
|
|
||||||
[org/gnome/eog/view]
|
|
||||||
background-color='rgb(0,0,0)'
|
|
||||||
use-background-color=true
|
|
||||||
|
|
||||||
[org/gnome/evince]
|
|
||||||
document-directory=@ms 'file:///home/remy/Downloads'
|
|
||||||
|
|
||||||
[org/gnome/evince/default]
|
|
||||||
continuous=true
|
|
||||||
dual-page=false
|
|
||||||
dual-page-odd-left=false
|
|
||||||
enable-spellchecking=true
|
|
||||||
fullscreen=false
|
|
||||||
inverted-colors=false
|
|
||||||
show-sidebar=false
|
|
||||||
sidebar-page='thumbnails'
|
|
||||||
sidebar-size=133
|
|
||||||
sizing-mode='free'
|
|
||||||
window-ratio=(1.4368686868686869, 1.8659493444606587)
|
|
||||||
zoom=0.46691813714666941
|
|
||||||
|
|
||||||
[org/gnome/evolution-data-server]
|
|
||||||
migrated=true
|
|
||||||
network-monitor-gio-name=''
|
|
||||||
|
|
||||||
[org/gnome/file-roller/dialogs/add]
|
|
||||||
current-folder='file:///home/remy/Downloads'
|
|
||||||
exclude-files=''
|
|
||||||
exclude-folders=''
|
|
||||||
include-files='*'
|
|
||||||
no-symlinks=true
|
|
||||||
selected-files=@as []
|
|
||||||
update=false
|
|
||||||
|
|
||||||
[org/gnome/file-roller/dialogs/extract]
|
|
||||||
height=800
|
|
||||||
recreate-folders=true
|
|
||||||
skip-newer=false
|
|
||||||
width=1000
|
|
||||||
|
|
||||||
[org/gnome/file-roller/file-selector]
|
|
||||||
show-hidden=false
|
|
||||||
sidebar-size=168
|
|
||||||
window-size=(-1, -1)
|
|
||||||
|
|
||||||
[org/gnome/file-roller/listing]
|
|
||||||
list-mode='as-folder'
|
|
||||||
name-column-width=410
|
|
||||||
show-path=false
|
|
||||||
sort-method='name'
|
|
||||||
sort-type='descending'
|
|
||||||
|
|
||||||
[org/gnome/file-roller/ui]
|
|
||||||
sidebar-width=200
|
|
||||||
window-height=1001
|
|
||||||
window-width=960
|
|
||||||
|
|
||||||
[org/gnome/libgnomekbd/preview]
|
|
||||||
height=611
|
|
||||||
width=1464
|
|
||||||
x=240
|
|
||||||
y=135
|
|
||||||
|
|
||||||
[org/gnome/mutter]
|
|
||||||
attach-modal-dialogs=false
|
|
||||||
edge-tiling=false
|
|
||||||
experimental-features=['kms-modifiers']
|
|
||||||
|
|
||||||
[org/gnome/mutter/keybindings]
|
|
||||||
toggle-tiled-left=@as []
|
|
||||||
toggle-tiled-right=@as []
|
|
||||||
|
|
||||||
[org/gnome/nautilus/compression]
|
|
||||||
default-compression-format='zip'
|
|
||||||
|
|
||||||
[org/gnome/nautilus/preferences]
|
|
||||||
default-folder-viewer='list-view'
|
|
||||||
migrated-gtk-settings=true
|
|
||||||
search-filter-time-type='last_modified'
|
|
||||||
search-view='list-view'
|
|
||||||
|
|
||||||
[org/gnome/nautilus/window-state]
|
|
||||||
initial-size=(1920, 1048)
|
|
||||||
maximized=true
|
|
||||||
sidebar-width=157
|
|
||||||
|
|
||||||
[org/gnome/power-manager]
|
|
||||||
info-history-time=604800
|
|
||||||
info-history-type='charge'
|
|
||||||
info-last-device='/org/freedesktop/UPower/devices/battery_BAT0'
|
|
||||||
info-page-number=1
|
|
||||||
info-stats-type='discharge-accuracy'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/peripherals/touchscreen]
|
|
||||||
orientation-lock=false
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0]
|
|
||||||
binding='<Super>space'
|
|
||||||
command='ulauncher'
|
|
||||||
name='Ulauncher'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/power]
|
|
||||||
power-button-action='hibernate'
|
|
||||||
sleep-inactive-ac-timeout=3600
|
|
||||||
sleep-inactive-battery-type='suspend'
|
|
||||||
|
|
||||||
[org/gnome/shell]
|
|
||||||
app-picker-layout=[{'org.gnome.Settings.desktop': <{'position': <0>}>, 'com.github.tchx84.Flatseal.desktop': <{'position': <1>}>, 'aee3ca9c-d66d-42f4-9b76-4dda08403814': <{'position': <2>}>, 'org.gnome.Software.desktop': <{'position': <3>}>, 'org.pipewire.Helvum.desktop': <{'position': <4>}>, 'com.spotify.Client.desktop': <{'position': <5>}>, 'org.gnome.Evince.desktop': <{'position': <6>}>, 'org.keepassxc.KeePassXC.desktop': <{'position': <7>}>, 'us.zoom.Zoom.desktop': <{'position': <8>}>, 'org.onlyoffice.desktopeditors.desktop': <{'position': <9>}>, '496a9ca3-5d6b-4231-9434-cf1da320fe55': <{'position': <10>}>, 'io.podman_desktop.PodmanDesktop.desktop': <{'position': <11>}>, 'io.element.Element.desktop': <{'position': <12>}>, '9a796cbb-fc11-4e0c-92ea-bbf29cc78df0': <{'position': <13>}>, 'org.mozilla.Thunderbird.desktop': <{'position': <14>}>, 'com.discordapp.Discord.desktop': <{'position': <15>}>, 'org.gnome.Loupe.desktop': <{'position': <16>}>, 'owncloud.desktop': <{'position': <17>}>, 'Alacritty.desktop': <{'position': <18>}>, 'dev.zed.Zed.desktop': <{'position': <19>}>, 'zen-browser.desktop': <{'position': <20>}>}, {'1aa8a471-a3d4-448f-979d-708f041bd93e': <{'position': <0>}>, 'sqlitebrowser.desktop': <{'position': <1>}>, 'Utilities': <{'position': <2>}>, 'io.github.celluloid_player.Celluloid.desktop': <{'position': <3>}>, 'io.missioncenter.MissionCenter.desktop': <{'position': <4>}>, 'com.logseq.Logseq.desktop': <{'position': <5>}>, '599d49f8-20cb-482c-a619-451cf4f561a3': <{'position': <6>}>, 'org.inkscape.Inkscape.desktop': <{'position': <7>}>, '90c1ffb4-572f-4a17-8793-a248f0ee26e4': <{'position': <8>}>, '5ea1c1fc-c589-42d3-bbaa-05428cb9e434': <{'position': <9>}>, 'nvtop.desktop': <{'position': <10>}>, 'com.github.taiko2k.avvie.desktop': <{'position': <11>}>, 'ds9.desktop': <{'position': <12>}>, 'it.mijorus.gearlever.desktop': <{'position': <13>}>, 'org.gnome.Calculator.desktop': <{'position': <14>}>, 'fish.desktop': <{'position': <15>}>, 'scrcpy.desktop': <{'position': <16>}>, 'scrcpy-console.desktop': <{'position': <17>}>, 'org.gnome.Showtime.desktop': <{'position': <18>}>, 'gparted.desktop': <{'position': <19>}>}]
|
|
||||||
command-history=['r', 'restart', 'btop', 'terminal', 'console']
|
|
||||||
disable-user-extensions=false
|
|
||||||
disabled-extensions=['workspace-indicator@gnome-shell-extensions.gcampax.github.com', 'user-theme@gnome-shell-extensions.gcampax.github.com', 'bluetooth-quick-connect@bjarosze.gmail.com', 'launch-new-instance@gnome-shell-extensions.gcampax.github.com', 'just-perfection-desktop@just-perfection', 'syncthing@gnome.2nv2u.com', 'dash2dock-lite@icedman.github.com', 'awesome-tiles@velitasali.com', 'trayIconsReloaded@selfmade.pl']
|
|
||||||
enabled-extensions=['gestureImprovements@gestures', 'pano@elhan.io', 'clipboard-history@alexsaveau.dev', 'WallpaperSwitcher@Rishu', 'gsconnect@andyholmes.github.io', 'tiling-assistant@leleat-on-github', 'azwallpaper@azwallpaper.gitlab.com', 'caffeine@patapon.info', 'Vitals@CoreCoding.com', 'windowgestures@extension.amarullz.com', 'dash-to-dock@micxgx.gmail.com', 'tilingshell@ferrarodomenico.com', 'search-light@icedman.github.com', 'vscode-search-provider@mrmarble.github.com', 'appindicatorsupport@rgcjonas.gmail.com']
|
|
||||||
favorite-apps=['org.gnome.Nautilus.desktop', 'org.gnome.Console.desktop', 'obsidian.desktop', 'code.desktop', 'firefox.desktop']
|
|
||||||
had-bluetooth-devices-setup=true
|
|
||||||
last-selected-power-profile='power-saver'
|
|
||||||
remember-mount-password=false
|
|
||||||
welcome-dialog-last-shown-version='42.4'
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/azwallpaper]
|
|
||||||
slideshow-current-wallpapper='arch_btw_Gilded Glow.png'
|
|
||||||
slideshow-directory='/mnt/media/@Bulk/Wallpaper/Linux'
|
|
||||||
slideshow-slide-duration=(6, 0, 0)
|
|
||||||
slideshow-time-of-slide-start=uint64 1724945866662
|
|
||||||
slideshow-timer-remaining=17485
|
|
||||||
slideshow-wallpaper-queue=['arch_btw_Morning Dew.png', 'arch_btw_Red Wrath.png', 'arch_btw_Aquatic Shock.png', 'arch_btw_Industrial Blue.png', 'arch_btw_Cutting Edge.png', 'arch_btw_chad-z-lCPfh95L0nc-unsplash.jpg', 'arch_btw_Purple Nerves.png', 'arch_btw_Hypnotic Shock.png', 'arch_btw_New Waves.png', 'arch_btw_Chevron Sunset.png', 'arch_btw_Aurora Hills.png', 'arch_btw_Vileness.png', 'arch_btw_Red Undead.png', 'arch_btw_Sky Fire.png', 'arch_btw_ash-goldsbrough-YfgE8WCcZsQ-unsplash.jpg', 'arch_btw_stars-3840x2160-star-trail-galaxy-sky-4k-6k-18295.jpg', 'arch_btw_blue-green-and-red-abstract-illustration-1566909.jpg', 'arch_btw_patrick-fore-UxPYxMIDcKU-unsplash.jpg', 'arch_btw_Police Chase.png', 'arch_btw_polygon-3840x2160-4k-16202.jpg', 'arch_btw_Pitch.png', 'arch_btw_Acid Arrows.png', 'arch_btw_t-h-chia-1-Zr2ye5588-unsplash.jpg', 'arch_btw_Multiplex.png', 'arch_btw_silhouette-of-mountains-during-dawn-1809644.jpg', 'arch_btw_Hail Storm.png', "arch_btw_Uppin' Flames.png", 'arch_btw_Frostbite.png', 'arch_btw_Android P.png', "arch_btw_Ol' Reliable.png", 'arch_btw_Hex Glow.png', 'arch_btw_star-trail-photography-2868665.jpg', 'arch_btw_Industrial Blood.png', 'arch_btw_mountains_moon_canvas_172262_3840x2160.jpg', 'arch_btw_alex-perez-ioJBsYQ-pPM-unsplash.jpg', 'arch_btw_Neural Network.png', 'arch_btw_Cut Stone.png', 'arch_btw_Armageddon.png']
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/caffeine]
|
|
||||||
countdown-timer=0
|
|
||||||
indicator-position-max=1
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/clipboard-history]
|
|
||||||
display-mode=0
|
|
||||||
private-mode=false
|
|
||||||
window-width-percentage=20
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/gestureImprovements]
|
|
||||||
enable-alttab-gesture=false
|
|
||||||
enable-forward-back-gesture=true
|
|
||||||
forward-back-application-keyboard-shortcuts={'firefox.desktop': (1, false), 'org.chromium.Chromium.desktop': (1, false), 'org.gnome.gThumb.desktop': (2, false), 'org.gnome.eog.desktop': (3, false), 'org.gnome.Photos.desktop': (3, false), 'shotwell.desktop': (3, false), 'com.spotify.Client.desktop': (4, false), 'code.desktop': (5, false), 'code-insiders.desktop': (5, false), 'org.gnome.Terminal.desktop': (5, false), 'com.gexperts.Tilix.desktop': (5, false), 'org.gnome.TextEditor.desktop': (5, false), 'com.brave.Browser.desktop': (1, false)}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/overrides]
|
|
||||||
edge-tiling=false
|
|
||||||
|
|
||||||
[org/gnome/shell/weather]
|
|
||||||
automatic-location=true
|
|
||||||
locations=[<(uint32 2, <('Zürich', 'LSZH', true, [(0.82874050067087668, 0.14893475701908529)], [(0.82670429484574492, 0.14922565104551519)])>)>]
|
|
||||||
|
|
||||||
[org/gnome/shell/world-clocks]
|
|
||||||
locations=@av []
|
|
||||||
|
|
||||||
[org/gnome/software]
|
|
||||||
check-timestamp=int64 1724142293
|
|
||||||
download-updates=false
|
|
||||||
download-updates-notify=false
|
|
||||||
first-run=false
|
|
||||||
flatpak-purge-timestamp=int64 1724771609
|
|
||||||
online-updates-timestamp=int64 1682110589
|
|
||||||
update-notification-timestamp=int64 1724699283
|
|
||||||
|
|
||||||
[org/gnome/terminal/legacy]
|
|
||||||
theme-variant='dark'
|
|
||||||
|
|
||||||
[org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9]
|
|
||||||
background-color='rgb(0,0,0)'
|
|
||||||
default-size-rows=24
|
|
||||||
font='Fira Code 12'
|
|
||||||
foreground-color='rgb(170,170,170)'
|
|
||||||
use-system-font=false
|
|
||||||
use-theme-colors=false
|
|
||||||
|
|
||||||
[org/gnome/tweaks]
|
|
||||||
show-extensions-notice=false
|
|
||||||
|
|
||||||
[org/gtk/gtk4/settings/color-chooser]
|
|
||||||
custom-colors=[(0.20333333313465118, 0.20333333313465118, 0.20333333313465118, 0.80236488580703735), (0.20333333313465118, 0.20333333313465118, 0.20333333313465118, 1.0), (0.20333333313465118, 0.20333333313465118, 0.20333333313465118, 0.80666667222976685), (0.0, 0.0, 0.0, 0.56333333253860474), (0.0, 0.0, 0.0, 0.25)]
|
|
||||||
selected-color=(true, 0.20333333313465118, 0.20333333313465118, 0.20333333313465118, 0.80236488580703735)
|
|
||||||
|
|
||||||
[org/gtk/gtk4/settings/emoji-chooser]
|
|
||||||
recent-emotrue
|
|
||||||
sort-order='ascending'
|
|
||||||
type-format='category'
|
|
||||||
view-type='grid'
|
|
||||||
window-size=(887, 1027)
|
|
||||||
|
|
||||||
[org/gtk/settings/color-chooser]
|
|
||||||
custom-colors=[(0.14509803921568629, 0.74509803921568629, 0.54509803921568623, 1.0), (0.0, 0.85882352941176465, 0.37647058823529411, 1.0), (1.0, 0.92156862745098034, 0.062745098039215685, 1.0), (1.0, 0.52156862745098043, 0.10588235294117647, 1.0), (1.0, 0.25490196078431371, 0.21176470588235294, 1.0), (0.49803921568627452, 0.13725490196078433, 1.0, 1.0), (0.098039215686274508, 0.45098039215686275, 1.0, 1.0)]
|
|
||||||
selected-color=(true, 0.6470588235294118, 0.11372549019607843, 0.17647058823529413, 1.0)
|
|
||||||
|
|
||||||
[org/gtk/settings/file-chooser]
|
|
||||||
date-format='regular'
|
|
||||||
location-mode='path-bar'
|
|
||||||
show-hidden=true
|
|
||||||
show-size-column=true
|
|
||||||
show-type-column=true
|
|
||||||
sidebar-width=275
|
|
||||||
sort-column='name'
|
|
||||||
sort-directories-first=true
|
|
||||||
sort-order='ascending'
|
|
||||||
type-format='category'
|
|
||||||
window-position=(26, 120)
|
|
||||||
window-size=(1573, 856)
|
|
||||||
|
|
||||||
[org/mate/atril/default]
|
|
||||||
window-ratio=(3.2268907563025211, 1.2422802850356294)
|
|
||||||
.
|
|
||||||
[system/proxy]
|
|
||||||
mode='none'
|
|
||||||
ji=[(([uint32 9888], 'warning', ['warning'], uint32 8), uint32 0)]
|
|
||||||
|
|
||||||
[org/gtk/gtk4/settings/file-chooser]
|
|
||||||
date-format='regular'
|
|
||||||
location-mode='path-bar'
|
|
||||||
show-hidden=true
|
|
||||||
show-size-column=true
|
|
||||||
show-type-column=true
|
|
||||||
sidebar-width=170
|
|
||||||
sort-column='name'
|
|
||||||
sort-directories-first=true
|
|
||||||
sort-order='ascending'
|
|
||||||
type-format='category'
|
|
||||||
view-type='grid'
|
|
||||||
window-size=(887, 1027)
|
|
||||||
|
|
||||||
[org/gtk/settings/color-chooser]
|
|
||||||
custom-colors=[(0.14509803921568629, 0.74509803921568629, 0.54509803921568623, 1.0), (0.0, 0.85882352941176465, 0.37647058823529411, 1.0), (1.0, 0.92156862745098034, 0.062745098039215685, 1.0), (1.0, 0.52156862745098043, 0.10588235294117647, 1.0), (1.0, 0.25490196078431371, 0.21176470588235294, 1.0), (0.49803921568627452, 0.13725490196078433, 1.0, 1.0), (0.098039215686274508, 0.45098039215686275, 1.0, 1.0)]
|
|
||||||
selected-color=(true, 0.6470588235294118, 0.11372549019607843, 0.17647058823529413, 1.0)
|
|
||||||
|
|
||||||
[org/gtk/settings/file-chooser]
|
|
||||||
date-format='regular'
|
|
||||||
location-mode='path-bar'
|
|
||||||
show-hidden=true
|
|
||||||
show-size-column=true
|
|
||||||
show-type-column=true
|
|
||||||
sidebar-width=275
|
|
||||||
sort-column='name'
|
|
||||||
sort-directories-first=true
|
|
||||||
sort-order='ascending'
|
|
||||||
type-format='category'
|
|
||||||
window-position=(26, 120)
|
|
||||||
window-size=(1573, 856)
|
|
||||||
|
|
||||||
[org/mate/atril/default]
|
|
||||||
window-ratio=(3.2268907563025211, 1.2422802850356294)
|
|
||||||
.
|
|
||||||
[system/proxy]
|
|
||||||
mode='none'
|
|
||||||
976
flake.lock
generated
976
flake.lock
generated
File diff suppressed because it is too large
Load Diff
198
flake.nix
198
flake.nix
@@ -1,65 +1,173 @@
|
|||||||
{
|
{
|
||||||
description = "Nix config entry point";
|
description = "Nix config entry point";
|
||||||
|
# since secrets live in a submodule, enable submodules by default
|
||||||
|
inputs.self.submodules = true;
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
# Home manager
|
# Home manager
|
||||||
home-manager.url = "github:nix-community/home-manager/release-24.05";
|
home-manager = {
|
||||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
url = "github:nix-community/home-manager";
|
||||||
# Managing flatpak apps
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1";
|
};
|
||||||
|
|
||||||
|
# Managing flatpak apps
|
||||||
|
nix-flatpak.url = "github:gmodena/nix-flatpak";
|
||||||
|
|
||||||
|
# hyprland, plugins and related utils
|
||||||
|
hyprland.url = "github:hyprwm/Hyprland";
|
||||||
|
|
||||||
|
stylix = {
|
||||||
|
url = "github:nix-community/stylix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
# zen browser
|
||||||
|
zen-browser = {
|
||||||
|
url = "github:0xc000022070/zen-browser-flake";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
# secrets
|
||||||
|
sops-nix = {
|
||||||
|
url = "github:Mic92/sops-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
# quickshell
|
||||||
|
dms-cli = {
|
||||||
|
url = "github:AvengeMedia/danklinux";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
dankMaterialShell = {
|
||||||
|
url = "github:AvengeMedia/DankMaterialShell";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
inputs.dms-cli.follows = "dms-cli";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix4vscode = {
|
||||||
|
url = "github:nix-community/nix4vscode";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
|
nixpkgs-unstable,
|
||||||
home-manager,
|
home-manager,
|
||||||
|
stylix,
|
||||||
|
sops-nix,
|
||||||
|
nix4vscode,
|
||||||
...
|
...
|
||||||
} @ inputs: {
|
} @ inputs:
|
||||||
|
let
|
||||||
## NixOS configurations are the main output of this flake
|
|
||||||
# HP Spectre x360 2018
|
|
||||||
nixosConfigurations.spectre = nixpkgs.lib.nixosSystem {
|
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = { inherit inputs; };
|
username = "remy";
|
||||||
modules = [
|
name = "Rémy";
|
||||||
./hosts/spectre-x360-2018
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.users.remy.imports = [
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
./users/remy.nix
|
pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
|
||||||
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
|
||||||
];
|
lib = nixpkgs.lib;
|
||||||
}
|
|
||||||
|
systems = {
|
||||||
|
# HP Spectre x360 2018
|
||||||
|
Nixtre = {
|
||||||
|
hostModules = [
|
||||||
|
./hosts/spectre-x360-2018
|
||||||
|
];
|
||||||
|
userModules = [
|
||||||
|
./users/remy_spectre
|
||||||
|
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
||||||
|
];
|
||||||
|
extraModules = [
|
||||||
|
inputs.stylix.nixosModules.stylix
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Portable usb stick
|
||||||
|
nichts = {
|
||||||
|
hostModules = [
|
||||||
|
./hosts/mobile-usb
|
||||||
|
];
|
||||||
|
userModules = [
|
||||||
|
./users/remy_usb
|
||||||
|
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
||||||
|
];
|
||||||
|
extraModules = [
|
||||||
|
inputs.stylix.nixosModules.stylix
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Lenovo yoga 7 pro
|
||||||
|
nyx = {
|
||||||
|
hostModules = [
|
||||||
|
./hosts/yoga-7-pro
|
||||||
|
];
|
||||||
|
userModules = [
|
||||||
|
./users/remy_yoga
|
||||||
|
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
||||||
|
inputs.dankMaterialShell.homeModules.dankMaterialShell.default
|
||||||
|
|
||||||
|
];
|
||||||
|
extraModules = [
|
||||||
|
inputs.stylix.nixosModules.stylix
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
{ nixpkgs.overlays = [ inputs.nix4vscode.overlays.default ]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# For each entry in `systems` create a nixosConfiguration
|
||||||
|
nixosConfigurations = lib.mapAttrs (_name: cfg:
|
||||||
|
nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = { inherit inputs pkgs-unstable; };
|
||||||
|
modules =
|
||||||
|
cfg.hostModules ++
|
||||||
|
cfg.extraModules ++
|
||||||
|
[ home-manager.nixosModules.home-manager {
|
||||||
|
# Common home-manager flags
|
||||||
|
home-manager = {
|
||||||
|
backupFileExtension = ".backup";
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
extraSpecialArgs = { inherit inputs pkgs-unstable; };
|
||||||
|
};
|
||||||
|
|
||||||
|
# Merge in all the user fragments for this host
|
||||||
|
home-manager.users.remy = lib.mkMerge cfg.userModules;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
;
|
||||||
|
}
|
||||||
|
) systems;
|
||||||
|
|
||||||
|
|
||||||
|
# ## Useful nix build tools
|
||||||
|
# # iso builder TODO
|
||||||
|
# nixosConfigurations.bcachefs-iso = nixpkgs.lib.nixosSystem {
|
||||||
|
# system = "x86_64-linux";
|
||||||
|
# modules = [
|
||||||
|
# "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix"
|
||||||
|
# ({ lib, pkgs, ... }: {
|
||||||
|
# boot.supportedFilesystems = [ "bcachefs" ];
|
||||||
|
# boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest;
|
||||||
|
# })
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# devshell for this configuration
|
||||||
|
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
|
||||||
|
packages = [
|
||||||
|
pkgs.sops
|
||||||
];
|
];
|
||||||
};
|
|
||||||
|
|
||||||
# nixosConfigurations.raspberry-pi = nixpkgs.lib.nixosSystem {
|
# tell sops where the public ssh key to "seed" the age key from is located
|
||||||
# system = "aarch64-linux";
|
SOPS_AGE_SSH_PRIVATE_KEY_FILE = "/home/remy/.ssh/main_key";
|
||||||
# modules = [
|
|
||||||
# ./hosts/raspberry-pi/configuration.nix
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
|
|
||||||
## Home Manager configurations here?
|
|
||||||
|
|
||||||
|
|
||||||
## Useful nix build tools
|
|
||||||
# iso builder TODO
|
|
||||||
nixosConfigurations.bcachefs-iso = nixpkgs.lib.nixosSystem {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
modules = [
|
|
||||||
"${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix"
|
|
||||||
({ lib, pkgs, ... }: {
|
|
||||||
boot.supportedFilesystems = [ "bcachefs" ];
|
|
||||||
boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
10
hosts/mobile-usb/configuration.nix
Normal file
10
hosts/mobile-usb/configuration.nix
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# 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?
|
||||||
|
}
|
||||||
39
hosts/mobile-usb/default.nix
Normal file
39
hosts/mobile-usb/default.nix
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{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
|
||||||
|
|
||||||
|
# ../../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
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
40
hosts/mobile-usb/hardware-configuration.nix
Normal file
40
hosts/mobile-usb/hardware-configuration.nix
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# 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.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;
|
||||||
|
}
|
||||||
17
hosts/mobile-usb/usb_config.nix
Normal file
17
hosts/mobile-usb/usb_config.nix
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
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.device = "/dev/sdb";
|
||||||
|
boot.loader.grub.efiInstallAsRemovable = true;
|
||||||
|
boot.loader.systemd-boot.enable = false;
|
||||||
|
|
||||||
|
boot.loader.efi.canTouchEfiVariables = false;
|
||||||
|
boot.tmp.useTmpfs = true;
|
||||||
|
}
|
||||||
@@ -4,12 +4,20 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
../../modules/nixos/bluetooth.nix
|
||||||
|
../../modules/nixos/flakes.nix
|
||||||
../../modules/nixos/flatpak.nix
|
../../modules/nixos/flatpak.nix
|
||||||
../../modules/nixos/gdm.nix
|
../../modules/nixos/fonts.nix
|
||||||
|
../../modules/nixos/hyprland.nix
|
||||||
|
../../modules/nixos/ld.nix
|
||||||
../../modules/nixos/monitoring.nix
|
../../modules/nixos/monitoring.nix
|
||||||
|
../../modules/nixos/networking.nix
|
||||||
|
../../modules/nixos/nh.nix
|
||||||
../../modules/nixos/nvidia.nix
|
../../modules/nixos/nvidia.nix
|
||||||
../../modules/nixos/pipewire.nix
|
../../modules/nixos/pipewire.nix
|
||||||
../../modules/nixos/podman.nix
|
../../modules/nixos/podman.nix
|
||||||
|
../../modules/nixos/power.nix
|
||||||
|
../../modules/nixos/stylix.nix
|
||||||
../../utils/binary-cache.nix
|
../../utils/binary-cache.nix
|
||||||
../../utils/garbage-collection.nix
|
../../utils/garbage-collection.nix
|
||||||
];
|
];
|
||||||
|
|||||||
14
hosts/yoga-7-pro/README.md
Normal file
14
hosts/yoga-7-pro/README.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
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>`
|
||||||
|
|
||||||
|
|
||||||
31
hosts/yoga-7-pro/configuration.nix
Normal file
31
hosts/yoga-7-pro/configuration.nix
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.logind.settings.Login = {
|
||||||
|
# because it is so inconveniently located
|
||||||
|
HandlePowerKey = "ignore";
|
||||||
|
|
||||||
|
# handled by the dm instead
|
||||||
|
# HandleLidSwitch = "ignore"; # needs to be set because it is not passed to other events
|
||||||
|
HandleLidSwitchDocked = "ignore";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# requires too many shenanigans so I just install using --no-root-passwd
|
||||||
|
# users.users.root.hashedPassword = "!";
|
||||||
|
|
||||||
|
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?
|
||||||
|
}
|
||||||
38
hosts/yoga-7-pro/default.nix
Normal file
38
hosts/yoga-7-pro/default.nix
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
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/sops.nix
|
||||||
|
../../modules/nixos/stylix.nix
|
||||||
|
../../modules/nixos/user.nix
|
||||||
|
|
||||||
|
../../utils/binary-cache.nix
|
||||||
|
../../utils/garbage-collection.nix
|
||||||
|
../../utils/unfree.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
81
hosts/yoga-7-pro/hardware-configuration.nix
Normal file
81
hosts/yoga-7-pro/hardware-configuration.nix
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# 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
|
||||||
|
# '';
|
||||||
|
|
||||||
|
# ipu is apparently required to make the webcam available as a camera device
|
||||||
|
hardware.ipu6 = {
|
||||||
|
enable = true;
|
||||||
|
platform = "ipu6";
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
9
modules/home-manager/bluetooth-picker.nix
Normal file
9
modules/home-manager/bluetooth-picker.nix
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
pkgs.rofi-bluetooth
|
||||||
|
];
|
||||||
|
|
||||||
|
# patch the rofi-bluetooth script to use an alternative rofi-command variable
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, inputs, ...}:
|
||||||
{
|
{
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
## Enable the Firefox web browser
|
## Enable the Firefox web browser
|
||||||
@@ -28,9 +28,9 @@
|
|||||||
profiles.default = {
|
profiles.default = {
|
||||||
search = {
|
search = {
|
||||||
force = true;
|
force = true;
|
||||||
default = "DuckDuckGo";
|
default = "ddg";
|
||||||
privateDefault = "DuckDuckGo";
|
privateDefault = "ddg";
|
||||||
order = ["DuckDuckGo" "Google"];
|
order = ["ddg" "google"];
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
"browser.startup.homepage" = "about:home";
|
"browser.startup.homepage" = "about:home";
|
||||||
@@ -72,9 +72,73 @@
|
|||||||
# Automatically enable extensions
|
# Automatically enable extensions
|
||||||
"extensions.autoDisableScopes" = 0;
|
"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}")
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,181 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
|
let
|
||||||
|
baseExtensions = pkgs.nix4vscode.forVscode [
|
||||||
|
# QOL
|
||||||
|
"mhutchie.git-graph"
|
||||||
|
"redhat.vscode-yaml"
|
||||||
|
# Nix environment selector
|
||||||
|
"arrterian.nix-env-selector"
|
||||||
|
# continue.continue
|
||||||
|
"github.copilot"
|
||||||
|
"github.copilot-chat"
|
||||||
|
];
|
||||||
|
|
||||||
|
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 = {
|
programs.vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
extensions = with pkgs.vscode-extensions; [
|
profiles.default = {
|
||||||
# QOL
|
userSettings = baseSettings // {
|
||||||
mhutchie.git-graph
|
"window.newWindowProfile" = "development";
|
||||||
redhat.vscode-yaml
|
};
|
||||||
github.copilot
|
extensions = [];
|
||||||
|
};
|
||||||
|
|
||||||
# python
|
profiles.development = {
|
||||||
ms-python.python
|
extensions = baseExtensions ++ pkgs.nix4vscode.forVscode [
|
||||||
ms-python.isort
|
# python
|
||||||
ms-python.debugpy
|
"ms-python.python"
|
||||||
ms-python.vscode-pylance
|
"ms-python.isort"
|
||||||
|
"ms-python.debugpy"
|
||||||
|
"ms-python.vscode-pylance"
|
||||||
|
|
||||||
# Nix language
|
# nix language
|
||||||
jnoortheen.nix-ide
|
"jnoortheen.nix-ide"
|
||||||
];
|
|
||||||
|
# Flutter and co
|
||||||
|
"dart-code.flutter"
|
||||||
|
"dart-code.dart-code"
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
keybindings = baseKeybindings;
|
||||||
|
|
||||||
|
userSettings = baseSettings;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
profiles.science = {
|
||||||
|
extensions = baseExtensions ++ pkgs.nix4vscode.forVscode [
|
||||||
|
# python + jupyter
|
||||||
|
"ms-python.python"
|
||||||
|
"ms-python.isort"
|
||||||
|
"ms-python.debugpy"
|
||||||
|
"ms-python.vscode-pylance"
|
||||||
|
"ms-toolsai.vscode-jupyter-slideshow"
|
||||||
|
"ms-toolsai.jupyter"
|
||||||
|
"ms-toolsai.jupyter-hub"
|
||||||
|
"ms-toolsai.jupyter-renderers"
|
||||||
|
# Typst
|
||||||
|
"myriad-dreamin.tinymist"
|
||||||
|
];
|
||||||
|
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
8
modules/home-manager/dev.nix
Normal file
8
modules/home-manager/dev.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
{
|
||||||
|
programs.direnv = {
|
||||||
|
enable = true;
|
||||||
|
# enableFishIntegration = true; # see note on other shells below
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
22
modules/home-manager/directories.nix
Normal file
22
modules/home-manager/directories.nix
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{ 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;
|
||||||
|
};
|
||||||
|
}
|
||||||
11
modules/home-manager/documents.nix
Normal file
11
modules/home-manager/documents.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
# pdf viewer
|
||||||
|
pkgs.papers
|
||||||
|
# image viewer
|
||||||
|
pkgs.loupe
|
||||||
|
# video player
|
||||||
|
pkgs.showtime
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,27 +1,33 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
{
|
{
|
||||||
|
# Required by the fzf fish plugin
|
||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
fd
|
||||||
|
bat
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
programs.fish = {
|
programs.fish = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# enableCompletion = true;
|
generateCompletions = true;
|
||||||
|
|
||||||
plugins = [
|
plugins = [
|
||||||
{
|
{ name = "fzf"; src = pkgs.fishPlugins.fzf-fish.src; }
|
||||||
name = "fzf-fish";
|
{ name = "z"; src = pkgs.fishPlugins.z.src; }
|
||||||
src = pkgs.fetchFromGitHub {
|
{ name = "pure"; src = pkgs.fishPlugins.pure.src; }
|
||||||
owner = "PatrickF1";
|
|
||||||
repo = "fzf.fish";
|
|
||||||
rev = "v10.3";
|
|
||||||
sha256 = "sha256-T8KYLA/r/gOKvAivKRoeqIwE2pINlxFQtZJHpOy9GMM=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
# add others here
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
functions = {
|
||||||
|
# disable the fish greeting
|
||||||
|
fish_greeting = "";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# sets the "default" shell to fish
|
# sets the "default" shell to fish
|
||||||
# actually keeps bash as a posix-compliant default but starts fish if the shell is not bash
|
# actually keeps bash as a posix-compliant default but starts fish if the shell is not bash
|
||||||
# See https://nixos.wiki/wiki/Fish
|
# See https://nixos.wiki/wiki/Fish
|
||||||
@@ -35,4 +41,5 @@
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{ lib, ... }: {
|
{
|
||||||
|
lib, pkgs, ...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# requires that flatpaks be enabled in the system configuration as well
|
||||||
services.flatpak.enable = true;
|
services.flatpak.enable = true;
|
||||||
|
|
||||||
services.flatpak.update.auto.enable = false;
|
services.flatpak.update.auto.enable = false;
|
||||||
services.flatpak.uninstallUnmanaged = false;
|
services.flatpak.uninstallUnmanaged = false;
|
||||||
|
|
||||||
services.flatpak.packages = [
|
services.flatpak.packages = [
|
||||||
"com.calibre_ebook.calibre"
|
|
||||||
"com.github.flxzt.rnote"
|
|
||||||
"com.github.tchx84.Flatseal"
|
"com.github.tchx84.Flatseal"
|
||||||
"com.spotify.Client"
|
"com.spotify.Client"
|
||||||
"io.podman_desktop.PodmanDesktop"
|
"io.podman_desktop.PodmanDesktop"
|
||||||
"org.pipewire.Helvum"
|
"org.pipewire.Helvum"
|
||||||
"io.github.zen_browser.zen"
|
|
||||||
"im.riot.Riot"
|
"im.riot.Riot"
|
||||||
|
"com.valvesoftware.Steam"
|
||||||
|
"org.prismlauncher.PrismLauncher"
|
||||||
];
|
];
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
{pkgs, lib, ...}:
|
|
||||||
with lib.hm.gvariant;
|
|
||||||
{
|
|
||||||
## Gnome extensions
|
|
||||||
programs.gnome-shell = {
|
|
||||||
enable = true;
|
|
||||||
extensions = [
|
|
||||||
{
|
|
||||||
package = pkgs.gnomeExtensions.dash-to-dock;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
id = "tilingshell@ferrarodomenico.com";
|
|
||||||
package = pkgs.gnome.gnome-shell-extensions;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
id = "search-light@icedman.github.com";
|
|
||||||
package = pkgs.gnome.gnome-shell-extensions;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
package = pkgs.gnomeExtensions.window-gestures;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
package = pkgs.gnomeExtensions.random-wallpaper;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
## And their settings (stored in dconf)
|
|
||||||
dconf.settings."org/gnome/shell/extensions/tilingshell" = {
|
|
||||||
inner-gaps = mkUint32 8;
|
|
||||||
layouts-json = ''
|
|
||||||
[{"id":"Layout 2","tiles":[{"x":0,"y":0,"width":0.22,"height":1,"groups":[1]},{"x":0.22,"y":0,"width":0.56,"height":1,"groups":[1,2]},{"x":0.78,"y":0,"width":0.22,"height":1,"groups":[2]}]},{"id":"Layout 3","tiles":[{"x":0,"y":0,"width":0.33,"height":1,"groups":[1]},{"x":0.33,"y":0,"width":0.67,"height":1,"groups":[1]}]},{"id":"Layout 4","tiles":[{"x":0,"y":0,"width":0.67,"height":1,"groups":[1]},{"x":0.67,"y":0,"width":0.33,"height":1,"groups":[1]}]},{"id":"2732837","tiles":[{"x":0,"y":0,"width":0.5002604166666667,"height":1,"groups":[1]},{"x":0.5002604166666667,"y":0,"width":0.49973958333333335,"height":1,"groups":[1]}]},{"id":"241562","tiles":[{"x":0,"y":0,"width":0.3328488372093023,"height":1,"groups":[1]},{"x":0.3328488372093023,"y":0,"width":0.33430232558139533,"height":1,"groups":[2,1]},{"x":0.6671511627906976,"y":0,"width":0.3328488372093023,"height":1,"groups":[2]}]}]
|
|
||||||
'';
|
|
||||||
outer-gaps = mkUint32 0;
|
|
||||||
overridden-settings = ''
|
|
||||||
{"org.gnome.mutter.keybindings":{"toggle-tiled-right":"['<Super>Right']","toggle-tiled-left":"['<Super>Left']"},"org.gnome.desktop.wm.keybindings":{"maximize":"['<Super>Up']","unmaximize":"['<Super>Down', '<Alt>F5']"},"org.gnome.mutter":{"edge-tiling":"true"}}
|
|
||||||
'';
|
|
||||||
selected-layouts = [ "Layout 4" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
dconf.settings."org/gnome/shell/extensions/search-light" = {
|
|
||||||
background-color = mkTuple [ 0.20333333313465118 0.20333333313465118 0.20333333313465118 0.80236488580703735 ];
|
|
||||||
blur-background = false;
|
|
||||||
entry-font-size = 1;
|
|
||||||
monitor-count = 1;
|
|
||||||
scale-height = 0.10000000000000001;
|
|
||||||
scale-width = 0.20000000000000001;
|
|
||||||
shortcut-search = [ "<Control><Alt>space" ];
|
|
||||||
popup-at-cursor-monitor = true;
|
|
||||||
show-panel-icon = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf.settings."org/gnome/shell/extensions/windowgestures" = {
|
|
||||||
pinch-enable = false;
|
|
||||||
swipe4-left = 9;
|
|
||||||
swipe4-right = 8;
|
|
||||||
swipe4-updown = 0;
|
|
||||||
three-finger = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf.settings."org/gnome/shell/extensions/dash-to-dock" = {
|
|
||||||
background-opacity = 0.80000000000000004;
|
|
||||||
custom-theme-shrink = true;
|
|
||||||
dash-max-icon-size = 40;
|
|
||||||
dock-position = "BOTTOM";
|
|
||||||
height-fraction = 0.90000000000000002;
|
|
||||||
preview-size-scale = 0.29999999999999999;
|
|
||||||
show-running = true;
|
|
||||||
show-trash = false;
|
|
||||||
show-windows-preview = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf.settings."org/gnome/mutter" = {
|
|
||||||
dynamic-workspaces = true;
|
|
||||||
edge-tiling = false;
|
|
||||||
workspaces-only-on-primary = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
dconf.settings."org/gnome/desktop/interface" = {
|
|
||||||
color-scheme = "prefer-dark";
|
|
||||||
show-battery-percentage = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
23
modules/home-manager/hypr/default.nix
Normal file
23
modules/home-manager/hypr/default.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.hypr;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
nix-config.hypr.enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Enable an opinionated hyprland+quickshell setup as a desktop environment.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./hyprland
|
||||||
|
./hyprlock.nix
|
||||||
|
./hypridle.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
44
modules/home-manager/hypr/hypridle.nix
Normal file
44
modules/home-manager/hypr/hypridle.nix
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{inputs, pkgs, ...}:
|
||||||
|
{
|
||||||
|
services.hypridle = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
# See: https://github.com/hyprwm/hypridle/issues/146
|
||||||
|
before_sleep_cmd = "hyprlock --no-fade-in";
|
||||||
|
lock_cmd = "hyprlock";
|
||||||
|
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%";
|
||||||
|
on-resume = "brightnessctl -r";
|
||||||
|
# monitor backlight restore.
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# lock screen after 10 minutes
|
||||||
|
timeout = 600;
|
||||||
|
on-timeout = "loginctl lock-session && hyprctl dispatch dpms off";
|
||||||
|
on-resume = "hyprctl dispatch dpms on";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# suspend after 15 minutes
|
||||||
|
timeout = 900;
|
||||||
|
on-timeout = "systemctl suspend";
|
||||||
|
on-resume = "hyprctl dispatch dpms on";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
30
modules/home-manager/hypr/hyprland/autostart.nix
Normal file
30
modules/home-manager/hypr/hyprland/autostart.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{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.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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
10
modules/home-manager/hypr/hyprland/default.nix
Normal file
10
modules/home-manager/hypr/hyprland/default.nix
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./autostart.nix
|
||||||
|
./general.nix
|
||||||
|
./gestures.nix
|
||||||
|
./keybinds.nix
|
||||||
|
./layouts.nix
|
||||||
|
./packages.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
146
modules/home-manager/hypr/hyprland/general.nix
Normal file
146
modules/home-manager/hypr/hyprland/general.nix
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
{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 = lib.mkIf cfg.enable {
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
settings = {
|
||||||
|
# debug = {
|
||||||
|
# disable_logs = false;
|
||||||
|
# };
|
||||||
|
general = {
|
||||||
|
resize_on_border = true;
|
||||||
|
gaps_in = 3;
|
||||||
|
gaps_out = 3;
|
||||||
|
border_size = 1;
|
||||||
|
"col.active_border" = "rgb(98971A) rgb(CC241D) 45deg";
|
||||||
|
"col.inactive_border" = "rgba(595959aa)";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10;
|
||||||
|
inactive_opacity = 0.9;
|
||||||
|
dim_inactive = false;
|
||||||
|
dim_strength = 0.1;
|
||||||
|
|
||||||
|
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], "
|
||||||
|
|
||||||
|
# File pickers and dialogs
|
||||||
|
"float, title:^(Save As)$"
|
||||||
|
"float, title:^(Open File)$"
|
||||||
|
"size 50% 50%, title:^(Open File)$"
|
||||||
|
"center, title:^(Open File)$"
|
||||||
|
|
||||||
|
# Disable idle when gaming
|
||||||
|
"idleinhibit always, class:^(steam_app_)"
|
||||||
|
"idleinhibit always, class:^(gamescope)$"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules/home-manager/hypr/hyprland/gestures.nix
Normal file
21
modules/home-manager/hypr/hyprland/gestures.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{inputs, pkgs, lib, config, ...}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.hypr;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
settings = {
|
||||||
|
gesture = [
|
||||||
|
# 4 finger swipe to switch workspace
|
||||||
|
"4, horizontal, workspace"
|
||||||
|
|
||||||
|
"3, up, fullscreen"
|
||||||
|
"3, down, float"
|
||||||
|
|
||||||
|
"4, vertical, scale: 0.5, special, magic"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
135
modules/home-manager/hypr/hyprland/keybinds.nix
Normal file
135
modules/home-manager/hypr/hyprland/keybinds.nix
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
# Note that some keybindings are delegated to other components, e.g. the quickshell module
|
||||||
|
{inputs, pkgs, lib, config, ...}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.hypr;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
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, ${lib.getExe pkgs.nautilus}"
|
||||||
|
|
||||||
|
# Lock screen
|
||||||
|
"$mod, l, exec, loginctl lock-session"
|
||||||
|
|
||||||
|
# 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, e-1"
|
||||||
|
"$mod, right, workspace, e+1"
|
||||||
|
"$mod, mouse_down, workspace, e-1"
|
||||||
|
"$mod, mouse_up, workspace, e+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"
|
||||||
|
|
||||||
|
# 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 = [
|
||||||
|
# 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
|
||||||
|
# '';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
57
modules/home-manager/hypr/hyprland/layouts.nix
Normal file
57
modules/home-manager/hypr/hyprland/layouts.nix
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{inputs, pkgs, lib, config, ...}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.hypr;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
settings = {
|
||||||
|
|
||||||
|
master = {
|
||||||
|
# no_gaps_when_only = true;
|
||||||
|
|
||||||
|
# default: single app is centered/fullscreen; when more apps are added it splits
|
||||||
|
orientation = "right";
|
||||||
|
# keep center-master behaviour when there is exactly 1 slave (i.e. single app appears fullscreen)
|
||||||
|
slave_count_for_center_master = 1;
|
||||||
|
# only split in two columns
|
||||||
|
mfact = 0.6;
|
||||||
|
inherit_fullscreen = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# #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 (press $mod + m)
|
||||||
|
"$mod, m, exec, hyprctl dispatch layoutmsg orientationcenter"
|
||||||
|
"$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.34"
|
||||||
|
|
||||||
|
# Toggle master layout between 3 and 2 columns (press $mod + Shift + m)
|
||||||
|
"$mod, Shift+m, exec, hyprctl dispatch layoutmsg orientationright"
|
||||||
|
"$mod, Shift+m, exec, hyprctl dispatch layoutmsg mfact exact 0.6"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
19
modules/home-manager/hypr/hyprland/packages.nix
Normal file
19
modules/home-manager/hypr/hyprland/packages.nix
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{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.cliphist
|
||||||
|
pkgs.wl-clipboard
|
||||||
|
pkgs.gcr # Provides org.gnome.keyring.SystemPrompter
|
||||||
|
];
|
||||||
|
|
||||||
|
# Also use gnome keyring
|
||||||
|
services.gnome-keyring.enable = true;
|
||||||
|
}
|
||||||
55
modules/home-manager/hypr/hyprlock.nix
Normal file
55
modules/home-manager/hypr/hyprlock.nix
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{inputs, pkgs, ...}:
|
||||||
|
{
|
||||||
|
programs.hyprlock = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
general = {
|
||||||
|
# immediately lock the screen
|
||||||
|
grace = 0;
|
||||||
|
# no_fade_in = false;
|
||||||
|
# disable_loading_bar = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
background = {
|
||||||
|
blur_passes = 3;
|
||||||
|
blur_size = 10;
|
||||||
|
# image is set by stylix
|
||||||
|
};
|
||||||
|
|
||||||
|
input-field = {
|
||||||
|
monitor = "";
|
||||||
|
size = "300, 60";
|
||||||
|
# radius = 15;
|
||||||
|
position = "0, -250";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
};
|
||||||
|
|
||||||
|
label = [
|
||||||
|
{
|
||||||
|
# Day-Month-Date
|
||||||
|
monitor = "";
|
||||||
|
text = ''cmd[update:1000] echo -e "$(date +"%A, %B %d")"'';
|
||||||
|
font_size = 28;
|
||||||
|
position = "0, 490";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
}
|
||||||
|
# Time
|
||||||
|
{
|
||||||
|
monitor = "";
|
||||||
|
text = ''cmd[update:1000] echo "<span>$(date +"%H:%M")</span>"'';
|
||||||
|
font_size = 160;
|
||||||
|
font_weight = "bold";
|
||||||
|
# font_family = "steelfish outline regular";
|
||||||
|
position = "0, 370";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,5 +3,4 @@
|
|||||||
home.packages = [
|
home.packages = [
|
||||||
pkgs.keepassxc
|
pkgs.keepassxc
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
67
modules/home-manager/kitty.nix
Normal file
67
modules/home-manager/kitty.nix
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
{pkgs, lib, config, ...}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.style;
|
||||||
|
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;
|
||||||
|
|
||||||
|
# color1 = stylix.stylix.base16Scheme.base01;
|
||||||
|
# color9 = stylix.stylix.base16Scheme.base09;
|
||||||
|
|
||||||
|
# color2 = stylix.stylix.base16Scheme.base02;
|
||||||
|
# color10 = stylix.stylix.base16Scheme.base0A;
|
||||||
|
|
||||||
|
# color3 = stylix.stylix.base16Scheme.base03;
|
||||||
|
# color11 = stylix.stylix.base16Scheme.base0B;
|
||||||
|
|
||||||
|
# color4 = stylix.stylix.base16Scheme.base04;
|
||||||
|
# color12 = stylix.stylix.base16Scheme.base0C;
|
||||||
|
|
||||||
|
# color5 = stylix.stylix.base16Scheme.base05;
|
||||||
|
# color13 = stylix.stylix.base16Scheme.base0D;
|
||||||
|
|
||||||
|
# color6 = stylix.stylix.base16Scheme.base06;
|
||||||
|
# color14 = stylix.stylix.base16Scheme.base0E;
|
||||||
|
|
||||||
|
# color7 = stylix.stylix.base16Scheme.base07;
|
||||||
|
# color15 = stylix.stylix.base16Scheme.base0F;
|
||||||
|
|
||||||
|
# also reuse the background opacity by stylix
|
||||||
|
background_opacity = cfg.terminalOpacity;
|
||||||
|
|
||||||
|
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 = {
|
||||||
|
# copy and paste
|
||||||
|
"ctrl+shift+c" = "copy_to_clipboard";
|
||||||
|
"ctrl+shift+v" = "paste_from_clipboard";
|
||||||
|
# zoom
|
||||||
|
"ctrl+shift+plus" = "increase_font_size";
|
||||||
|
"ctrl+shift+minus" = "decrease_font_size";
|
||||||
|
"ctrl+shift+0" = "reset_font_size";
|
||||||
|
# tabs
|
||||||
|
"ctrl+shift+t" = "new_tab";
|
||||||
|
"ctrl+shift+w" = "close_tab";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
25
modules/home-manager/kubectl.nix
Normal file
25
modules/home-manager/kubectl.nix
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
pkgs.kubectl
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
# Add the shell alias
|
||||||
|
programs.fish.shellAliases = {
|
||||||
|
k = "kubectl";
|
||||||
|
};
|
||||||
|
|
||||||
|
# set the kubectl autocompletions for fish
|
||||||
|
# the fish functions are generated by kubectl itself, we do this at compile time and write them a single time to avoid generating them at each shell start
|
||||||
|
# the command is kubectl completion fish
|
||||||
|
# which becomes
|
||||||
|
programs.fish.completions."kubectl" = builtins.readFile "${pkgs.runCommand "kubectl-completion" {} ''
|
||||||
|
${pkgs.kubectl}/bin/kubectl completion fish > $out
|
||||||
|
''}";
|
||||||
|
|
||||||
|
programs.kubeswitch = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
123
modules/home-manager/launcher.nix
Normal file
123
modules/home-manager/launcher.nix
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
{ 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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [
|
||||||
pkgs.obsidian
|
pkgs.obsidian
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [
|
||||||
pkgs.rquickshare
|
pkgs.owncloud-client
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
59
modules/home-manager/quickshell/default.nix
Normal file
59
modules/home-manager/quickshell/default.nix
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
programs.dankMaterialShell.enable = true;
|
||||||
|
|
||||||
|
programs.dankMaterialShell = {
|
||||||
|
enableSystemd = true;
|
||||||
|
enableSystemMonitoring = false;
|
||||||
|
enableClipboard = true;
|
||||||
|
enableVPN = true;
|
||||||
|
enableBrightnessControl = true;
|
||||||
|
enableColorPicker = false;
|
||||||
|
enableDynamicTheming = true;
|
||||||
|
enableAudioWavelength = false;
|
||||||
|
enableCalendarEvents = false;
|
||||||
|
enableSystemSound = true;
|
||||||
|
|
||||||
|
# default = {
|
||||||
|
# settings = ''{}'';
|
||||||
|
# session = ''{}'';
|
||||||
|
# };
|
||||||
|
|
||||||
|
# plugins = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
settings = {
|
||||||
|
binde = [
|
||||||
|
# Brightness
|
||||||
|
", XF86MonBrightnessDown, exec, dms ipc call brightness decrement 5 \"\""
|
||||||
|
", XF86MonBrightnessUp, exec, dms ipc call brightness increment 5 \"\""
|
||||||
|
|
||||||
|
# Audio volume + playback
|
||||||
|
", XF86AudioMute, exec, dms ipc call audio mute"
|
||||||
|
", XF86AudioLowerVolume, exec, dms ipc call audio decrement 5"
|
||||||
|
", XF86AudioRaiseVolume, exec, dms ipc call audio increment 5"
|
||||||
|
|
||||||
|
"$mod, XF86AudioMute, exec, dms ipc call mpris playPause"
|
||||||
|
"$mod, XF86AudioLowerVolume, exec, dms ipc call mpris previous"
|
||||||
|
"$mod, XF86AudioRaiseVolume, exec, dms ipc call mpris next"
|
||||||
|
# also allow the dedicated media keys to control playback
|
||||||
|
", XF86AudioPlay, exec, dms ipc call mpris playPause"
|
||||||
|
", XF86AudioPrev, exec, dms ipc call mpris previous"
|
||||||
|
", XF86AudioNext, exec, dms ipc call mpris next"
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
", XF86PowerOff, exec, dms ipc call powermenu toggle"
|
||||||
|
# used to be ", XF86PowerOff, exec, ${lib.getExe config.nix-config.powerMenu}"
|
||||||
|
"$mod, V, exec, dms ipc call clipboard toggle"
|
||||||
|
# used to be "$mod, V, exec, cliphist list | ${lib.getExe config.nix-config.launcher} --dmenu | cliphist decode | wl-copy"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
0
modules/home-manager/sops.nix
Normal file
0
modules/home-manager/sops.nix
Normal file
23
modules/home-manager/ssh.nix
Normal file
23
modules/home-manager/ssh.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{ 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
182
modules/home-manager/stylix.nix
Normal file
182
modules/home-manager/stylix.nix
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
{pkgs, config, lib, ...}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.style;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.nix-config.style = {
|
||||||
|
cursor = {
|
||||||
|
size = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 22;
|
||||||
|
description = "Size of the cursor in pixels.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
fontSizes = {
|
||||||
|
applications = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 12;
|
||||||
|
description = "Font size for applications.";
|
||||||
|
};
|
||||||
|
desktop = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 12;
|
||||||
|
description = "Font size for desktop icons.";
|
||||||
|
};
|
||||||
|
popups = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 12;
|
||||||
|
description = "Font size for popups.";
|
||||||
|
};
|
||||||
|
terminal = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 12;
|
||||||
|
description = "Font size for terminal.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
cursor = {
|
||||||
|
package = pkgs.bibata-cursors;
|
||||||
|
name = "Bibata-Modern-Ice";
|
||||||
|
size = cfg.cursor.size;
|
||||||
|
};
|
||||||
|
|
||||||
|
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-color-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"
|
||||||
|
'';
|
||||||
|
}))
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
9
modules/home-manager/uxplay.nix
Normal file
9
modules/home-manager/uxplay.nix
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
lib, pkgs, ...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# requires avahi or similar
|
||||||
|
|
||||||
|
home.packages = with pkgs; [ uxplay ];
|
||||||
|
|
||||||
|
}
|
||||||
11
modules/home-manager/wallpaper.nix
Normal file
11
modules/home-manager/wallpaper.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Write an importable nix file that copies a folder from this repo into the store and creates a symlink to a predictible directory in my home file
|
||||||
|
{
|
||||||
|
lib, pkgs, ...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# Copy the entire wallpapers directory into the Nix store and symlink it to ~/wallpapers
|
||||||
|
home.file."wallpapers" = {
|
||||||
|
source = ../../wallpapers;
|
||||||
|
target = "Pictures/wallpapers";
|
||||||
|
};
|
||||||
|
}
|
||||||
139
modules/home-manager/wofi.nix
Normal file
139
modules/home-manager/wofi.nix
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.style;
|
||||||
|
|
||||||
|
wofiPowerMenu = pkgs.writeShellScriptBin "wofi-power-menu" ''
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
options=" Power Off\n Reboot\n Lock\n Suspend"
|
||||||
|
selected=$(echo -e "$options" | wofi --dmenu --prompt "Power Menu")
|
||||||
|
# --width 300 --height 250
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
32
modules/home-manager/xdg-portals.nix
Normal file
32
modules/home-manager/xdg-portals.nix
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{inputs, pkgs, ...}:
|
||||||
|
{
|
||||||
|
xdg.enable = true;
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
|
||||||
|
# configPackages = [ pkgs.hyprland ];
|
||||||
|
config = {
|
||||||
|
common.default = ["gtk"];
|
||||||
|
hyprland.default = ["gtk" "hyprland"];
|
||||||
|
};
|
||||||
|
|
||||||
|
extraPortals = [
|
||||||
|
pkgs.xdg-desktop-portal-gtk
|
||||||
|
pkgs.xdg-desktop-portal-wlr
|
||||||
|
pkgs.xdg-desktop-portal-hyprland
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
xdg.mimeApps.defaultApplications = {
|
||||||
|
"text/*" = [ "code" ];
|
||||||
|
"application/x-yaml" = [ "code" ];
|
||||||
|
|
||||||
|
"application/pdf" = [ "papers" ];
|
||||||
|
"image/*" = [ "loupe" ];
|
||||||
|
"video/*" = [ "showtime" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
7
modules/nixos/agenix.nix
Normal file
7
modules/nixos/agenix.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, lib, inputs, ... }:
|
||||||
|
{
|
||||||
|
# agenix client
|
||||||
|
environment.systemPackages = [
|
||||||
|
inputs.agenix.packages."${system}".default
|
||||||
|
];
|
||||||
|
}
|
||||||
88
modules/nixos/backup.nix
Normal file
88
modules/nixos/backup.nix
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
{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";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
}
|
||||||
31
modules/nixos/bluetooth.nix
Normal file
31
modules/nixos/bluetooth.nix
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
}
|
||||||
3
modules/nixos/flakes.nix
Normal file
3
modules/nixos/flakes.nix
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
services.flatpak.enable = true;
|
services.flatpak.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
11
modules/nixos/fonts.nix
Normal file
11
modules/nixos/fonts.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# from here on fonts are managed on a user level
|
||||||
|
fonts.fontDir.enable = true;
|
||||||
|
fonts.fontconfig.enable = true;
|
||||||
|
}
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
# this actually does not enable xorg, but it is required for GDM
|
|
||||||
services.xserver.enable = true;
|
|
||||||
services.xserver.displayManager.gdm.enable = true;
|
|
||||||
services.xserver.desktopManager.gnome.enable = true;
|
|
||||||
# here we set wayland to be used
|
|
||||||
services.xserver.displayManager.gdm.wayland = true;
|
|
||||||
|
|
||||||
|
|
||||||
## Slim down the gnome dependencies
|
|
||||||
environment.gnome.excludePackages = (with pkgs; [
|
|
||||||
gnome-photos
|
|
||||||
gnome-tour
|
|
||||||
gnome.geary
|
|
||||||
gedit
|
|
||||||
gnome.tali
|
|
||||||
gnome.gnome-music
|
|
||||||
gnome.cheese
|
|
||||||
epiphany
|
|
||||||
gnome.gnome-calendar
|
|
||||||
gnome.gnome-maps
|
|
||||||
gnome.simple-scan
|
|
||||||
gnome.yelp
|
|
||||||
gnome.gnome-disk-utility
|
|
||||||
gnome.gnome-notes
|
|
||||||
gnome.gnome-weather
|
|
||||||
gnome-secrets
|
|
||||||
gnome.gnome-characters
|
|
||||||
gnome.gnome-font-viewer
|
|
||||||
gnome.gnome-system-monitor
|
|
||||||
gnome-text-editor
|
|
||||||
gnome-connections
|
|
||||||
gnome.gnome-clocks
|
|
||||||
baobab
|
|
||||||
gnome.gnome-contacts
|
|
||||||
gnome.gnome-logs
|
|
||||||
]);
|
|
||||||
|
|
||||||
}
|
|
||||||
31
modules/nixos/gnome.nix
Normal file
31
modules/nixos/gnome.nix
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
48
modules/nixos/hyprland.nix
Normal file
48
modules/nixos/hyprland.nix
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
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.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;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
11
modules/nixos/language.nix
Normal file
11
modules/nixos/language.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{ 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";
|
||||||
|
}
|
||||||
4
modules/nixos/ld.nix
Normal file
4
modules/nixos/ld.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{config, ...}:
|
||||||
|
{
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
}
|
||||||
94
modules/nixos/networking.nix
Normal file
94
modules/nixos/networking.nix
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.nix-config.networking;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
options = {
|
||||||
|
nix-config.networking.hostName = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "nixos";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix-config.networking.vpn = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# # VPN setup
|
||||||
|
networking.networkmanager.ensureProfiles = {
|
||||||
|
environmentFiles = [ config.sops.secrets.vpnEnvironment.path ];
|
||||||
|
profiles.wg-home = {
|
||||||
|
connection = {
|
||||||
|
id = "wg-home";
|
||||||
|
type = "wireguard";
|
||||||
|
interface-name = "wgh";
|
||||||
|
autoconnect = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address = "10.0.0.2/32";
|
||||||
|
method = "manual";
|
||||||
|
};
|
||||||
|
|
||||||
|
wireguard = {
|
||||||
|
listen-port = 51820;
|
||||||
|
private-key = "$HOME_PRIVATE_KEY";
|
||||||
|
};
|
||||||
|
|
||||||
|
"wireguard-peer.y/TBD/c0GkrRtekDkCb8TUnYYil8bSRPIjPDY650pz8=" = {
|
||||||
|
endpoint = "$HOME_ENDPOINT";
|
||||||
|
allowed-ips = "192.168.1.0/16";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
profiles.wg-fritzbox = {
|
||||||
|
connection = {
|
||||||
|
id = "wg-fritzbox";
|
||||||
|
type = "wireguard";
|
||||||
|
interface-name = "wgfb";
|
||||||
|
autoconnect = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv4 = {
|
||||||
|
address = "192.168.178.201/24";
|
||||||
|
dns = "192.168.178.1";
|
||||||
|
method = "manual";
|
||||||
|
};
|
||||||
|
|
||||||
|
wireguard = {
|
||||||
|
listen-port = 51820;
|
||||||
|
private-key = "$FRITZBOX_PRIVATE_KEY";
|
||||||
|
};
|
||||||
|
|
||||||
|
"wireguard-peer.Jf/seKAL7kWm2qX9gf5Ln8FiN7OlPQB3CyRovDIOEHw=" = {
|
||||||
|
endpoint = "$FRITZBOX_ENDPOINT";
|
||||||
|
allowed-ips = "192.168.178.0/24;fd73:ea00:5841::/64";
|
||||||
|
preshared-key = "$FRITZBOX_PRESHARED_KEY";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
10
modules/nixos/nh.nix
Normal file
10
modules/nixos/nh.nix
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
programs.nh = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,64 +1,70 @@
|
|||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
|
||||||
# Enable OpenGL
|
# Allow to use the nvidia driver in the special case
|
||||||
hardware.opengl = {
|
# Use in the boot menu
|
||||||
enable = true;
|
specialisation = {
|
||||||
};
|
nvidia-enabled = {
|
||||||
|
configuration = {
|
||||||
|
system.nixos.tags = [ "nvidia-enabled" ];
|
||||||
|
# Enable OpenGL
|
||||||
|
hardware.graphics.enable = lib.mkForce true;
|
||||||
|
hardware.nvidia = lib.mkForce {
|
||||||
|
modesetting.enable = true;
|
||||||
|
powerManagement.enable = false;
|
||||||
|
powerManagement.finegrained = false;
|
||||||
|
# features not available for the old graphics card
|
||||||
|
open = false;
|
||||||
|
nvidiaSettings = false;
|
||||||
|
|
||||||
# Load nvidia driver for Xorg and Wayland
|
prime = {
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
sync.enable = true;
|
||||||
|
nvidiaBusId = "PCI:1:0:0";
|
||||||
|
intelBusId = "PCI:0:2:0";
|
||||||
|
};
|
||||||
|
|
||||||
hardware.nvidia = {
|
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
|
||||||
# manually specify the driver version
|
version = "575.51.02";
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
|
sha256_64bit = "sha256-XZ0N8ISmoAC8p28DrGHk/YN1rJsInJ2dZNL8O+Tuaa0=";
|
||||||
version = "555.58.02";
|
openSha256 = "sha256-NQg+QDm9Gt+5bapbUO96UFsPnz1hG1dtEwT/g/vKHkw=";
|
||||||
sha256_64bit = "sha256-xctt4TPRlOJ6r5S54h5W6PT6/3Zy2R4ASNFPu8TSHKM=";
|
settingsSha256 = "sha256-6n9mVkEL39wJj5FB1HBml7TTJhNAhS/j5hqpNGFQE4w=";
|
||||||
sha256_aarch64 = "sha256-8hyRiGB+m2hL3c9MDA/Pon+Xl6E788MZ50WrrAGUVuY=";
|
usePersistenced = false;
|
||||||
openSha256 = "sha256-8hyRiGB+m2hL3c9MDA/Pon+Xl6E788MZ50WrrAGUVuY=";
|
};
|
||||||
settingsSha256 = "sha256-ZpuVZybW6CFN/gz9rx+UJvQ715FZnAOYfHn5jt5Z2C8=";
|
};
|
||||||
persistencedSha256 = "sha256-xctt4TPRlOJ6r5S54h5W6PT6/3Zy2R4ASNFPu8TSHKM=";
|
# overwrite the blacklists set previously
|
||||||
|
boot.extraModprobeConfig = lib.mkForce "";
|
||||||
|
boot.blacklistedKernelModules = lib.mkForce [];
|
||||||
|
services.udev.extraRules = lib.mkForce "";
|
||||||
|
services.xserver.videoDrivers = lib.mkForce ["nvidia"];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Modesetting is required.
|
|
||||||
modesetting.enable = true;
|
|
||||||
|
|
||||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
|
||||||
# Enable this if you have graphical corruption issues or application crashes after waking
|
|
||||||
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
|
||||||
# of just the bare essentials.
|
|
||||||
powerManagement.enable = false;
|
|
||||||
|
|
||||||
# Fine-grained power management. Turns off GPU when not in use.
|
|
||||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
|
|
||||||
open = false;
|
|
||||||
|
|
||||||
# Enable the Nvidia settings menu,
|
|
||||||
# accessible via `nvidia-settings`.
|
|
||||||
nvidiaSettings = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
## See https://nixos.wiki/wiki/Nvidia
|
|
||||||
hardware.nvidia.prime = {
|
|
||||||
intelBusId = "PCI:0:2:0";
|
|
||||||
nvidiaBusId = "PCI:1:0:0";
|
|
||||||
|
|
||||||
## Reverse PRIME synchronization
|
# In the global configuration, we blacklist the nouveau driver and load the nvidia driver
|
||||||
# reverseSync.enable = true;
|
boot.extraModprobeConfig = ''
|
||||||
# # Enable if using an external GPU
|
blacklist nouveau
|
||||||
# allowExternalGpu = false;
|
options nouveau modeset=0
|
||||||
|
'';
|
||||||
|
|
||||||
## Alternatively enable offloading
|
services.udev.extraRules = ''
|
||||||
offload = {
|
# Remove NVIDIA USB xHCI Host Controller devices, if present
|
||||||
enable = true;
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
|
||||||
enableOffloadCmd = true;
|
# Remove NVIDIA USB Type-C UCSI devices, if present
|
||||||
};
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"
|
||||||
};
|
# Remove NVIDIA Audio devices, if present
|
||||||
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"
|
||||||
|
# Remove NVIDIA VGA/3D controller devices
|
||||||
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", ATTR{power/control}="auto", ATTR{remove}="1"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# # Remove the whole bridge responsible for the VGA/3D controller
|
||||||
|
# ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", ATTR{class}=="0x060400", ATTR{power/control}="auto", ATTR{remove}="1"
|
||||||
|
|
||||||
|
boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
# Needs to be explicitly set to false...
|
# Needs to be explicitly set to false...
|
||||||
hardware.pulseaudio.enable = false;
|
services.pulseaudio.enable = false;
|
||||||
# OR
|
# OR
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
virtualisation.containers.enable = true;
|
virtualisation.containers.enable = true;
|
||||||
virtualisation = {
|
virtualisation = {
|
||||||
podman = {
|
podman = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
dockerCompat = false;
|
dockerCompat = false;
|
||||||
|
|
||||||
# Required for containers under podman-compose to be able to talk to each other.
|
# Required for containers under podman-compose to be able to talk to each other.
|
||||||
defaultNetwork.settings.dns_enabled = true;
|
defaultNetwork.settings.dns_enabled = true;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# Useful other development tools
|
# Useful other development tools
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
podman-compose # start group of containers for dev
|
podman-compose # start group of containers for dev
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
99
modules/nixos/power.nix
Normal file
99
modules/nixos/power.nix
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
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.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
inputs.watt.nixosModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
config = {
|
||||||
|
# environment.systemPackages = [
|
||||||
|
# pkgs.power-profiles-daemon
|
||||||
|
# ];
|
||||||
|
services.power-profiles-daemon.enable = true;
|
||||||
|
|
||||||
|
# services.tlp = {
|
||||||
|
# enable = true;
|
||||||
|
# settings = {
|
||||||
|
# # # processor chooses frequencies itself but respects the limits set by the user
|
||||||
|
# # CPU_DRIVER_OPMODE_ON_AC = "guided";
|
||||||
|
# # CPU_DRIVER_OPMODE_ON_BAT = "guided";
|
||||||
|
|
||||||
|
# # # 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
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
services.upower.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
services.irqbalance = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.thermald = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
12
modules/nixos/sops.nix
Normal file
12
modules/nixos/sops.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||||
|
sops.defaultSopsFile = ./../../secrets/vpn.env;
|
||||||
|
sops.secrets.vpnEnvironment = {
|
||||||
|
sopsFile = ./../../secrets/vpn.env;
|
||||||
|
format = "dotenv";
|
||||||
|
};
|
||||||
|
}
|
||||||
33
modules/nixos/stylix.nix
Normal file
33
modules/nixos/stylix.nix
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
28
modules/nixos/user.nix
Normal file
28
modules/nixos/user.nix
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
1
secrets
Submodule
1
secrets
Submodule
Submodule secrets added at a51d89c420
@@ -1,11 +0,0 @@
|
|||||||
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
BIN
secrets/wifi.age
Binary file not shown.
@@ -1,19 +1,5 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
with lib.hm.gvariant;
|
|
||||||
{
|
{
|
||||||
imports = [
|
|
||||||
../modules/home-manager/browser.nix
|
|
||||||
../modules/home-manager/code.nix
|
|
||||||
../modules/home-manager/fish.nix
|
|
||||||
../modules/home-manager/flatpaks.nix
|
|
||||||
../modules/home-manager/gnome-shell-customization.nix
|
|
||||||
../modules/home-manager/keepassxc.nix
|
|
||||||
../modules/home-manager/obsidian.nix
|
|
||||||
../modules/home-manager/thunderbird.nix
|
|
||||||
../modules/home-manager/quickshare.nix
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
## Home Manager configuration
|
## Home Manager configuration
|
||||||
home.stateVersion = "24.05";
|
home.stateVersion = "24.05";
|
||||||
# Let Home Manager install and manage itself.
|
# Let Home Manager install and manage itself.
|
||||||
@@ -23,38 +9,39 @@ with lib.hm.gvariant;
|
|||||||
home.username = "remy";
|
home.username = "remy";
|
||||||
home.homeDirectory = "/home/remy";
|
home.homeDirectory = "/home/remy";
|
||||||
|
|
||||||
#home.file.<filepath> = <content>;
|
|
||||||
|
|
||||||
## Utils relevant to this user only
|
## Utils relevant to this user only
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
userName = "Remy Moll";
|
settings = {
|
||||||
userEmail = "me@moll.re";
|
user.name = "Remy Moll";
|
||||||
|
user.email = "me@moll.re";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
## Gnome keyboard and mouse settings
|
## XDG configuration
|
||||||
dconf.settings = {
|
xdg = {
|
||||||
# set the keyboard layout to german
|
|
||||||
"org/gnome/desktop/input-sources" = {
|
|
||||||
current = mkUint32 0;
|
|
||||||
sources = [ (mkTuple [ "xkb" "de" ]) (mkTuple [ "xkb" "ch" ]) (mkTuple [ "xkb" "us" ]) ];
|
|
||||||
xkb-options = [ "lv3:ralt_switch" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/peripherals/keyboard" = {
|
mimeApps = {
|
||||||
numlock-state = true;
|
enable = true;
|
||||||
};
|
defaultApplications = {
|
||||||
|
# TODO
|
||||||
"org/gnome/desktop/peripherals/mouse" = {
|
"inode/directory" = "org.gnome.Nautilus.desktop";
|
||||||
natural-scroll = false;
|
"application/zip" = "org.gnome.FileRoller.desktop";
|
||||||
speed = 0.20851063829787231;
|
"application/octet-stream" = "org.gnome.GHex.desktop";
|
||||||
};
|
# pdfs
|
||||||
|
"application/pdf" = "org.gnome.Evince.desktop";
|
||||||
"org/gnome/desktop/peripherals/touchpad" = {
|
# links
|
||||||
tap-to-click = true;
|
"x-scheme-handler/https" = "firefox.desktop"; # Links
|
||||||
two-finger-scrolling-enabled = true;
|
"x-scheme-handler/http" = "firefox.desktop"; # Links
|
||||||
speed = 0.16872427983539096;
|
# 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";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
38
users/remy_spectre/default.nix
Normal file
38
users/remy_spectre/default.nix
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{ 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
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
37
users/remy_usb/default.nix
Normal file
37
users/remy_usb/default.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{ 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
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
43
users/remy_yoga/default.nix
Normal file
43
users/remy_yoga/default.nix
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{ 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/hypr
|
||||||
|
../../modules/home-manager/keepassxc.nix
|
||||||
|
../../modules/home-manager/kitty.nix
|
||||||
|
../../modules/home-manager/kubectl.nix
|
||||||
|
../../modules/home-manager/launcher.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/wallpaper.nix
|
||||||
|
../../modules/home-manager/xdg-portals.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -11,12 +11,15 @@
|
|||||||
# also add mirrors?
|
# also add mirrors?
|
||||||
# "https://mirrors.ustc.edu.cn/nix-channels/store"
|
# "https://mirrors.ustc.edu.cn/nix-channels/store"
|
||||||
"https://cache.nixos.org"
|
"https://cache.nixos.org"
|
||||||
|
"https://hyprland.cachix.org"
|
||||||
];
|
];
|
||||||
|
|
||||||
trusted-public-keys = [
|
trusted-public-keys = [
|
||||||
# the default public key of cache.nixos.org, it's built-in, no need to add it here
|
# the default public key of cache.nixos.org, it's built-in, no need to add it here
|
||||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
];
|
];
|
||||||
|
builders-use-substitutes = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
4
utils/unfree.nix
Normal file
4
utils/unfree.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
}
|
||||||
BIN
wallpapers/codioful-formerly-gradienta-lweK7Wme_jo-unsplash.jpg
Normal file
BIN
wallpapers/codioful-formerly-gradienta-lweK7Wme_jo-unsplash.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 329 KiB |
BIN
wallpapers/codioful-formerly-gradienta-n2XqPm7Bqhk-unsplash.jpg
Normal file
BIN
wallpapers/codioful-formerly-gradienta-n2XqPm7Bqhk-unsplash.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 381 KiB |
BIN
wallpapers/luke-chesser-eICUFSeirc0-unsplash.jpg
Normal file
BIN
wallpapers/luke-chesser-eICUFSeirc0-unsplash.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
BIN
wallpapers/luke-chesser-pJadQetzTkI-unsplash.jpg
Normal file
BIN
wallpapers/luke-chesser-pJadQetzTkI-unsplash.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
BIN
wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg
Normal file
BIN
wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 MiB |
Reference in New Issue
Block a user